ccxt 4.1.13 → 4.1.14

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 (89) hide show
  1. package/CHANGELOG.md +219 -0
  2. package/CONTRIBUTING.md +1 -0
  3. package/README.md +3 -3
  4. package/dist/ccxt.browser.js +296 -106
  5. package/dist/ccxt.browser.min.js +3 -3
  6. package/dist/cjs/ccxt.js +1 -1
  7. package/dist/cjs/src/ascendex.js +1 -0
  8. package/dist/cjs/src/binance.js +6 -2
  9. package/dist/cjs/src/bingx.js +4 -2
  10. package/dist/cjs/src/bitget.js +192 -1
  11. package/dist/cjs/src/bitmart.js +2 -0
  12. package/dist/cjs/src/bittrex.js +6 -0
  13. package/dist/cjs/src/cex.js +1 -0
  14. package/dist/cjs/src/coinbase.js +1 -0
  15. package/dist/cjs/src/coinbasepro.js +1 -0
  16. package/dist/cjs/src/coinex.js +2 -0
  17. package/dist/cjs/src/coinfalcon.js +1 -0
  18. package/dist/cjs/src/coinmate.js +1 -0
  19. package/dist/cjs/src/coinone.js +2 -1
  20. package/dist/cjs/src/cryptocom.js +25 -87
  21. package/dist/cjs/src/currencycom.js +1 -0
  22. package/dist/cjs/src/delta.js +1 -0
  23. package/dist/cjs/src/deribit.js +1 -0
  24. package/dist/cjs/src/digifinex.js +1 -0
  25. package/dist/cjs/src/exmo.js +1 -0
  26. package/dist/cjs/src/gate.js +3 -0
  27. package/dist/cjs/src/gemini.js +1 -0
  28. package/dist/cjs/src/hitbtc.js +1 -0
  29. package/dist/cjs/src/hollaex.js +1 -0
  30. package/dist/cjs/src/huobijp.js +1 -0
  31. package/dist/cjs/src/idex.js +1 -0
  32. package/dist/cjs/src/independentreserve.js +1 -0
  33. package/dist/cjs/src/indodax.js +1 -0
  34. package/dist/cjs/src/kraken.js +9 -0
  35. package/dist/cjs/src/krakenfutures.js +1 -0
  36. package/dist/cjs/src/latoken.js +1 -0
  37. package/dist/cjs/src/poloniex.js +1 -0
  38. package/dist/cjs/src/poloniexfutures.js +8 -2
  39. package/dist/cjs/src/pro/krakenfutures.js +14 -10
  40. package/dist/cjs/src/woo.js +1 -0
  41. package/js/ccxt.d.ts +1 -1
  42. package/js/ccxt.js +1 -1
  43. package/js/src/abstract/binance.d.ts +4 -0
  44. package/js/src/abstract/binancecoinm.d.ts +4 -0
  45. package/js/src/abstract/binanceus.d.ts +4 -0
  46. package/js/src/abstract/binanceusdm.d.ts +4 -0
  47. package/js/src/abstract/kraken.d.ts +8 -0
  48. package/js/src/abstract/poloniexfutures.d.ts +6 -1
  49. package/js/src/ascendex.js +1 -0
  50. package/js/src/binance.js +6 -2
  51. package/js/src/bingx.js +4 -2
  52. package/js/src/bitget.d.ts +28 -0
  53. package/js/src/bitget.js +192 -1
  54. package/js/src/bitmart.js +2 -0
  55. package/js/src/bittrex.d.ts +2 -2
  56. package/js/src/bittrex.js +6 -0
  57. package/js/src/cex.js +1 -0
  58. package/js/src/coinbase.js +1 -0
  59. package/js/src/coinbasepro.js +1 -0
  60. package/js/src/coinex.js +2 -0
  61. package/js/src/coinfalcon.js +1 -0
  62. package/js/src/coinmate.js +1 -0
  63. package/js/src/coinone.js +2 -1
  64. package/js/src/cryptocom.d.ts +0 -2
  65. package/js/src/cryptocom.js +25 -87
  66. package/js/src/currencycom.js +1 -0
  67. package/js/src/delta.js +1 -0
  68. package/js/src/deribit.js +1 -0
  69. package/js/src/digifinex.js +1 -0
  70. package/js/src/exmo.js +1 -0
  71. package/js/src/gate.d.ts +1 -0
  72. package/js/src/gate.js +3 -0
  73. package/js/src/gemini.d.ts +1 -0
  74. package/js/src/gemini.js +1 -0
  75. package/js/src/hitbtc.js +1 -0
  76. package/js/src/hollaex.js +1 -0
  77. package/js/src/huobijp.js +1 -0
  78. package/js/src/idex.js +1 -0
  79. package/js/src/independentreserve.js +1 -0
  80. package/js/src/indodax.js +1 -0
  81. package/js/src/kraken.js +9 -0
  82. package/js/src/krakenfutures.js +1 -0
  83. package/js/src/latoken.js +1 -0
  84. package/js/src/poloniex.js +1 -0
  85. package/js/src/poloniexfutures.js +8 -2
  86. package/js/src/pro/krakenfutures.js +14 -10
  87. package/js/src/woo.js +1 -0
  88. package/package.json +1 -1
  89. package/skip-tests.json +33 -7
@@ -4049,6 +4049,7 @@ class ascendex extends _abstract_ascendex_js__WEBPACK_IMPORTED_MODULE_0__/* ["de
4049
4049
  'max': this.safeNumber(market, 'maxNotional'),
4050
4050
  },
4051
4051
  },
4052
+ 'created': this.safeInteger(market, 'tradingStartTime'),
4052
4053
  'info': market,
4053
4054
  });
4054
4055
  }
@@ -16262,7 +16263,8 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
16262
16263
  'margin/exchange-small-liability-history': 0.6667,
16263
16264
  'margin/next-hourly-interest-rate': 0.6667,
16264
16265
  'margin/capital-flow': 10,
16265
- 'margin/delist-schedule': 0.6667,
16266
+ 'margin/delist-schedule': 10,
16267
+ 'margin/available-inventory': 0.3334,
16266
16268
  'loan/vip/loanable/data': 40,
16267
16269
  'loan/vip/collateral/data': 40,
16268
16270
  'loan/vip/request/data': 2.6668,
@@ -16653,7 +16655,8 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
16653
16655
  'premiumIndexKlines': { 'cost': 1, 'byLimit': [[99, 1], [499, 2], [1000, 5], [10000, 10]] },
16654
16656
  'ticker/24hr': { 'cost': 1, 'noSymbol': 40 },
16655
16657
  'ticker/price': { 'cost': 1, 'noSymbol': 2 },
16656
- 'ticker/bookTicker': { 'cost': 1, 'noSymbol': 2 },
16658
+ 'ticker/bookTicker': { 'cost': 2, 'noSymbol': 5 },
16659
+ 'constituents': 2,
16657
16660
  'openInterest': 1,
16658
16661
  },
16659
16662
  },
@@ -16738,6 +16741,8 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
16738
16741
  'ticker/bookTicker': { 'cost': 1, 'noSymbol': 2 },
16739
16742
  'openInterest': 1,
16740
16743
  'indexInfo': 1,
16744
+ 'assetIndex': { 'cost': 1, 'noSymbol': 10 },
16745
+ 'constituents': 2,
16741
16746
  'apiTradingStatus': { 'cost': 1, 'noSymbol': 10 },
16742
16747
  'lvtKlines': 1,
16743
16748
  },
@@ -28352,8 +28357,10 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
28352
28357
  const network = this.safeString(transaction, 'network');
28353
28358
  const currencyId = this.safeString(transaction, 'coin');
28354
28359
  let code = this.safeCurrencyCode(currencyId, currency);
28355
- if (code !== undefined && code.indexOf(network) >= 0) {
28356
- code = code.replace(network, '');
28360
+ if ((code !== undefined) && (code !== network) && code.indexOf(network) >= 0) {
28361
+ if (network !== undefined) {
28362
+ code = code.replace(network, '');
28363
+ }
28357
28364
  }
28358
28365
  const rawType = this.safeString(transaction, 'transferType');
28359
28366
  const type = (rawType === '0') ? 'deposit' : 'withdrawal';
@@ -38597,11 +38604,12 @@ class bitget extends _abstract_bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
38597
38604
  'has': {
38598
38605
  'CORS': undefined,
38599
38606
  'spot': true,
38600
- 'margin': false,
38607
+ 'margin': undefined,
38601
38608
  'swap': true,
38602
38609
  'future': true,
38603
38610
  'option': false,
38604
38611
  'addMargin': true,
38612
+ 'borrowMargin': true,
38605
38613
  'cancelAllOrders': true,
38606
38614
  'cancelOrder': true,
38607
38615
  'cancelOrders': true,
@@ -38660,6 +38668,7 @@ class bitget extends _abstract_bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
38660
38668
  'fetchWithdrawal': false,
38661
38669
  'fetchWithdrawals': true,
38662
38670
  'reduceMargin': true,
38671
+ 'repayMargin': true,
38663
38672
  'setLeverage': true,
38664
38673
  'setMarginMode': true,
38665
38674
  'setPositionMode': true,
@@ -39864,6 +39873,7 @@ class bitget extends _abstract_bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
39864
39873
  'max': undefined,
39865
39874
  },
39866
39875
  },
39876
+ 'created': undefined,
39867
39877
  'info': market,
39868
39878
  };
39869
39879
  }
@@ -43770,6 +43780,194 @@ class bitget extends _abstract_bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
43770
43780
  'info': interest,
43771
43781
  }, market);
43772
43782
  }
43783
+ async borrowMargin(code, amount, symbol = undefined, params = {}) {
43784
+ /**
43785
+ * @method
43786
+ * @name bitget#borrowMargin
43787
+ * @description create a loan to borrow margin
43788
+ * @see https://bitgetlimited.github.io/apidoc/en/margin/#cross-borrow
43789
+ * @see https://bitgetlimited.github.io/apidoc/en/margin/#isolated-borrow
43790
+ * @param {string} code unified currency code of the currency to borrow
43791
+ * @param {string} amount the amount to borrow
43792
+ * @param {string} [symbol] unified market symbol
43793
+ * @param {object} [params] extra parameters specific to the bitget api endpoint
43794
+ * @param {string} [params.marginMode] 'isolated' or 'cross', symbol is required for 'isolated'
43795
+ * @returns {object} a [margin loan structure]{@link https://github.com/ccxt/ccxt/wiki/Manual#margin-loan-structure}
43796
+ */
43797
+ await this.loadMarkets();
43798
+ const currency = this.currency(code);
43799
+ const request = {
43800
+ 'coin': currency['info']['coinName'],
43801
+ 'borrowAmount': this.currencyToPrecision(code, amount),
43802
+ };
43803
+ let response = undefined;
43804
+ let marginMode = undefined;
43805
+ [marginMode, params] = this.handleMarginModeAndParams('borrowMargin', params);
43806
+ if ((symbol !== undefined) || (marginMode === 'isolated')) {
43807
+ this.checkRequiredSymbol('borrowMargin', symbol);
43808
+ const market = this.market(symbol);
43809
+ const marketId = market['id'];
43810
+ const parts = marketId.split('_');
43811
+ const marginMarketId = this.safeStringUpper(parts, 0);
43812
+ request['symbol'] = marginMarketId;
43813
+ response = await this.privateMarginPostIsolatedAccountBorrow(this.extend(request, params));
43814
+ }
43815
+ else {
43816
+ response = await this.privateMarginPostCrossAccountBorrow(this.extend(request, params));
43817
+ }
43818
+ //
43819
+ // isolated
43820
+ //
43821
+ // {
43822
+ // "code": "00000",
43823
+ // "msg": "success",
43824
+ // "requestTime": 1697250952516,
43825
+ // "data": {
43826
+ // "clientOid": null,
43827
+ // "symbol": "BTCUSDT",
43828
+ // "coin": "BTC",
43829
+ // "borrowAmount": "0.001"
43830
+ // }
43831
+ // }
43832
+ //
43833
+ // cross
43834
+ //
43835
+ // {
43836
+ // "code": "00000",
43837
+ // "msg": "success",
43838
+ // "requestTime": 1697251314271,
43839
+ // "data": {
43840
+ // "clientOid": null,
43841
+ // "coin": "BTC",
43842
+ // "borrowAmount": "0.0001"
43843
+ // }
43844
+ // }
43845
+ //
43846
+ const data = this.safeValue(response, 'data', {});
43847
+ return this.parseMarginLoan(data, currency);
43848
+ }
43849
+ async repayMargin(code, amount, symbol = undefined, params = {}) {
43850
+ /**
43851
+ * @method
43852
+ * @name bitget#repayMargin
43853
+ * @description repay borrowed margin and interest
43854
+ * @see https://bitgetlimited.github.io/apidoc/en/margin/#cross-repay
43855
+ * @see https://bitgetlimited.github.io/apidoc/en/margin/#isolated-repay
43856
+ * @param {string} code unified currency code of the currency to repay
43857
+ * @param {string} amount the amount to repay
43858
+ * @param {string} [symbol] unified market symbol
43859
+ * @param {object} [params] extra parameters specific to the bitget api endpoint
43860
+ * @param {string} [params.marginMode] 'isolated' or 'cross', symbol is required for 'isolated'
43861
+ * @returns {object} a [margin loan structure]{@link https://github.com/ccxt/ccxt/wiki/Manual#margin-loan-structure}
43862
+ */
43863
+ await this.loadMarkets();
43864
+ const currency = this.currency(code);
43865
+ const request = {
43866
+ 'coin': currency['info']['coinName'],
43867
+ 'repayAmount': this.currencyToPrecision(code, amount),
43868
+ };
43869
+ let response = undefined;
43870
+ let marginMode = undefined;
43871
+ [marginMode, params] = this.handleMarginModeAndParams('repayMargin', params);
43872
+ if ((symbol !== undefined) || (marginMode === 'isolated')) {
43873
+ this.checkRequiredSymbol('repayMargin', symbol);
43874
+ const market = this.market(symbol);
43875
+ const marketId = market['id'];
43876
+ const parts = marketId.split('_');
43877
+ const marginMarketId = this.safeStringUpper(parts, 0);
43878
+ request['symbol'] = marginMarketId;
43879
+ response = await this.privateMarginPostIsolatedAccountRepay(this.extend(request, params));
43880
+ }
43881
+ else {
43882
+ response = await this.privateMarginPostCrossAccountRepay(this.extend(request, params));
43883
+ }
43884
+ //
43885
+ // isolated
43886
+ //
43887
+ // {
43888
+ // "code": "00000",
43889
+ // "msg": "success",
43890
+ // "requestTime": 1697251988593,
43891
+ // "data": {
43892
+ // "remainDebtAmount": "0",
43893
+ // "clientOid": null,
43894
+ // "symbol": "BTCUSDT",
43895
+ // "coin": "BTC",
43896
+ // "repayAmount": "0.00100001"
43897
+ // }
43898
+ // }
43899
+ //
43900
+ // cross
43901
+ //
43902
+ // {
43903
+ // "code": "00000",
43904
+ // "msg": "success",
43905
+ // "requestTime": 1697252151042,
43906
+ // "data": {
43907
+ // "remainDebtAmount": "0",
43908
+ // "clientOid": null,
43909
+ // "coin": "BTC",
43910
+ // "repayAmount": "0.00010001"
43911
+ // }
43912
+ // }
43913
+ //
43914
+ const data = this.safeValue(response, 'data', {});
43915
+ return this.parseMarginLoan(data, currency);
43916
+ }
43917
+ parseMarginLoan(info, currency = undefined) {
43918
+ //
43919
+ // isolated: borrowMargin
43920
+ //
43921
+ // {
43922
+ // "clientOid": null,
43923
+ // "symbol": "BTCUSDT",
43924
+ // "coin": "BTC",
43925
+ // "borrowAmount": "0.001"
43926
+ // }
43927
+ //
43928
+ // cross: borrowMargin
43929
+ //
43930
+ // {
43931
+ // "clientOid": null,
43932
+ // "coin": "BTC",
43933
+ // "borrowAmount": "0.0001"
43934
+ // }
43935
+ //
43936
+ // isolated: repayMargin
43937
+ //
43938
+ // {
43939
+ // "remainDebtAmount": "0",
43940
+ // "clientOid": null,
43941
+ // "symbol": "BTCUSDT",
43942
+ // "coin": "BTC",
43943
+ // "repayAmount": "0.00100001"
43944
+ // }
43945
+ //
43946
+ // cross: repayMargin
43947
+ //
43948
+ // {
43949
+ // "remainDebtAmount": "0",
43950
+ // "clientOid": null,
43951
+ // "coin": "BTC",
43952
+ // "repayAmount": "0.00010001"
43953
+ // }
43954
+ //
43955
+ const currencyId = this.safeString(info, 'coin');
43956
+ const marketId = this.safeString(info, 'symbol');
43957
+ let symbol = undefined;
43958
+ if (marketId !== undefined) {
43959
+ symbol = this.safeSymbol(marketId);
43960
+ }
43961
+ return {
43962
+ 'id': this.safeString(info, 'clientOid'),
43963
+ 'currency': this.safeCurrencyCode(currencyId, currency),
43964
+ 'amount': this.safeNumber2(info, 'borrowAmount', 'repayAmount'),
43965
+ 'symbol': symbol,
43966
+ 'timestamp': undefined,
43967
+ 'datetime': undefined,
43968
+ 'info': info,
43969
+ };
43970
+ }
43773
43971
  handleErrors(code, reason, url, method, headers, body, response, requestHeaders, requestBody) {
43774
43972
  if (!response) {
43775
43973
  return undefined; // fallback to default error handler
@@ -45746,6 +45944,7 @@ class bitmart extends _abstract_bitmart_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
45746
45944
  'max': undefined,
45747
45945
  },
45748
45946
  },
45947
+ 'created': undefined,
45749
45948
  'info': market,
45750
45949
  });
45751
45950
  }
@@ -45852,6 +46051,7 @@ class bitmart extends _abstract_bitmart_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
45852
46051
  'max': undefined,
45853
46052
  },
45854
46053
  },
46054
+ 'created': this.safeInteger(market, 'open_timestamp'),
45855
46055
  'info': market,
45856
46056
  });
45857
46057
  }
@@ -62948,8 +63148,14 @@ class bittrex extends _abstract_bittrex_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
62948
63148
  * @param {int} [since] timestamp in ms of the earliest candle to fetch
62949
63149
  * @param {int} [limit] the maximum amount of candles to fetch
62950
63150
  * @param {object} [params] extra parameters specific to the bittrex api endpoint
63151
+ * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
62951
63152
  * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
62952
63153
  */
63154
+ let paginate = false;
63155
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchOHLCV', 'paginate', false);
63156
+ if (paginate) {
63157
+ return await this.fetchPaginatedCallDeterministic('fetchOHLCV', symbol, since, limit, timeframe, params, 1440);
63158
+ }
62953
63159
  await this.loadMarkets();
62954
63160
  const market = this.market(symbol);
62955
63161
  const reverseId = market['baseId'] + '-' + market['quoteId'];
@@ -80169,6 +80375,7 @@ class cex extends _abstract_cex_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
80169
80375
  'max': undefined,
80170
80376
  },
80171
80377
  },
80378
+ 'created': undefined,
80172
80379
  'info': market,
80173
80380
  });
80174
80381
  }
@@ -82431,6 +82638,7 @@ class coinbase extends _abstract_coinbase_js__WEBPACK_IMPORTED_MODULE_0__/* ["de
82431
82638
  'max': this.safeNumber(market, 'quote_max_size'),
82432
82639
  },
82433
82640
  },
82641
+ 'created': undefined,
82434
82642
  'info': market,
82435
82643
  });
82436
82644
  }
@@ -84819,6 +85027,7 @@ class coinbasepro extends _abstract_coinbasepro_js__WEBPACK_IMPORTED_MODULE_0__/
84819
85027
  'max': undefined,
84820
85028
  },
84821
85029
  },
85030
+ 'created': undefined,
84822
85031
  'info': market,
84823
85032
  }));
84824
85033
  }
@@ -87691,6 +87900,7 @@ class coinex extends _abstract_coinex_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
87691
87900
  'max': undefined,
87692
87901
  },
87693
87902
  },
87903
+ 'created': undefined,
87694
87904
  'info': market,
87695
87905
  });
87696
87906
  }
@@ -87787,6 +87997,7 @@ class coinex extends _abstract_coinex_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
87787
87997
  'max': undefined,
87788
87998
  },
87789
87999
  },
88000
+ 'created': undefined,
87790
88001
  'info': entry,
87791
88002
  });
87792
88003
  }
@@ -92238,6 +92449,7 @@ class coinfalcon extends _abstract_coinfalcon_js__WEBPACK_IMPORTED_MODULE_0__/*
92238
92449
  'max': undefined,
92239
92450
  },
92240
92451
  },
92452
+ 'created': undefined,
92241
92453
  'info': market,
92242
92454
  });
92243
92455
  }
@@ -93336,6 +93548,7 @@ class coinmate extends _abstract_coinmate_js__WEBPACK_IMPORTED_MODULE_0__/* ["de
93336
93548
  'max': undefined,
93337
93549
  },
93338
93550
  },
93551
+ 'created': undefined,
93339
93552
  'info': market,
93340
93553
  });
93341
93554
  }
@@ -94271,6 +94484,7 @@ class coinone extends _abstract_coinone_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
94271
94484
  'max': undefined,
94272
94485
  },
94273
94486
  },
94487
+ 'created': undefined,
94274
94488
  'info': ticker,
94275
94489
  });
94276
94490
  }
@@ -94928,7 +95142,7 @@ class coinone extends _abstract_coinone_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
94928
95142
  const payload = this.stringToBase64(json);
94929
95143
  body = payload;
94930
95144
  const secret = this.secret.toUpperCase();
94931
- const signature = this.hmac(payload, this.encode(secret), _static_dependencies_noble_hashes_sha512_js__WEBPACK_IMPORTED_MODULE_4__/* .sha512 */ .o);
95145
+ const signature = this.hmac(this.encode(payload), this.encode(secret), _static_dependencies_noble_hashes_sha512_js__WEBPACK_IMPORTED_MODULE_4__/* .sha512 */ .o);
94932
95146
  headers = {
94933
95147
  'Content-Type': 'application/json',
94934
95148
  'X-COINONE-PAYLOAD': payload,
@@ -97507,11 +97721,11 @@ class cryptocom extends _abstract_cryptocom_js__WEBPACK_IMPORTED_MODULE_0__/* ["
97507
97721
  'fetchAccounts': true,
97508
97722
  'fetchBalance': true,
97509
97723
  'fetchBidsAsks': false,
97510
- 'fetchBorrowInterest': true,
97724
+ 'fetchBorrowInterest': false,
97511
97725
  'fetchBorrowRate': false,
97512
97726
  'fetchBorrowRateHistories': false,
97513
97727
  'fetchBorrowRateHistory': false,
97514
- 'fetchBorrowRates': true,
97728
+ 'fetchBorrowRates': false,
97515
97729
  'fetchClosedOrders': 'emulated',
97516
97730
  'fetchCurrencies': false,
97517
97731
  'fetchDepositAddress': true,
@@ -97805,6 +98019,7 @@ class cryptocom extends _abstract_cryptocom_js__WEBPACK_IMPORTED_MODULE_0__/* ["
97805
98019
  'precisionMode': _base_functions_number_js__WEBPACK_IMPORTED_MODULE_1__/* .TICK_SIZE */ .sh,
97806
98020
  'exceptions': {
97807
98021
  'exact': {
98022
+ '219': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InvalidOrder,
97808
98023
  '10001': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.ExchangeError,
97809
98024
  '10002': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.PermissionDenied,
97810
98025
  '10003': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.PermissionDenied,
@@ -98034,6 +98249,7 @@ class cryptocom extends _abstract_cryptocom_js__WEBPACK_IMPORTED_MODULE_0__/* ["
98034
98249
  'max': undefined,
98035
98250
  },
98036
98251
  },
98252
+ 'created': undefined,
98037
98253
  'info': market,
98038
98254
  });
98039
98255
  }
@@ -98526,7 +98742,7 @@ class cryptocom extends _abstract_cryptocom_js__WEBPACK_IMPORTED_MODULE_0__/* ["
98526
98742
  }
98527
98743
  const postOnly = this.safeValue(params, 'postOnly', false);
98528
98744
  if ((postOnly) || (timeInForce === 'PO')) {
98529
- request['exec_inst'] = 'POST_ONLY';
98745
+ request['exec_inst'] = ['POST_ONLY'];
98530
98746
  request['time_in_force'] = 'GOOD_TILL_CANCEL';
98531
98747
  }
98532
98748
  const triggerPrice = this.safeStringN(params, ['stopPrice', 'triggerPrice', 'ref_price']);
@@ -99334,8 +99550,8 @@ class cryptocom extends _abstract_cryptocom_js__WEBPACK_IMPORTED_MODULE_0__/* ["
99334
99550
  'close': last,
99335
99551
  'last': last,
99336
99552
  'previousClose': undefined,
99337
- 'change': this.safeString(ticker, 'c'),
99338
- 'percentage': undefined,
99553
+ 'change': undefined,
99554
+ 'percentage': this.safeString(ticker, 'c'),
99339
99555
  'average': undefined,
99340
99556
  'baseVolume': this.safeString(ticker, 'v'),
99341
99557
  'quoteVolume': this.safeString(ticker, 'vv'),
@@ -99479,10 +99695,16 @@ class cryptocom extends _abstract_cryptocom_js__WEBPACK_IMPORTED_MODULE_0__/* ["
99479
99695
  const created = this.safeInteger(order, 'create_time');
99480
99696
  const marketId = this.safeString(order, 'instrument_name');
99481
99697
  const symbol = this.safeSymbol(marketId, market);
99482
- const execInst = this.safeString(order, 'exec_inst');
99483
- let postOnly = undefined;
99698
+ const execInst = this.safeValue(order, 'exec_inst');
99699
+ let postOnly = false;
99484
99700
  if (execInst !== undefined) {
99485
- postOnly = (execInst === 'POST_ONLY');
99701
+ for (let i = 0; i < execInst.length; i++) {
99702
+ const inst = execInst[i];
99703
+ if (inst === 'POST_ONLY') {
99704
+ postOnly = true;
99705
+ break;
99706
+ }
99707
+ }
99486
99708
  }
99487
99709
  const feeCurrency = this.safeString(order, 'fee_instrument_name');
99488
99710
  return this.safeOrder({
@@ -99715,52 +99937,6 @@ class cryptocom extends _abstract_cryptocom_js__WEBPACK_IMPORTED_MODULE_0__/* ["
99715
99937
  'info': info,
99716
99938
  };
99717
99939
  }
99718
- async fetchBorrowInterest(code = undefined, symbol = undefined, since = undefined, limit = undefined, params = {}) {
99719
- await this.loadMarkets();
99720
- const request = {};
99721
- let market = undefined;
99722
- let currency = undefined;
99723
- if (symbol !== undefined) {
99724
- market = this.market(symbol);
99725
- }
99726
- if (code !== undefined) {
99727
- currency = this.currency(code);
99728
- request['currency'] = currency['id'];
99729
- }
99730
- if (since !== undefined) {
99731
- request['start_ts'] = since;
99732
- }
99733
- if (limit !== undefined) {
99734
- request['page_size'] = limit;
99735
- }
99736
- const response = await this.v2PrivatePostPrivateMarginGetInterestHistory(this.extend(request, params));
99737
- //
99738
- // {
99739
- // "id": 1656705829020,
99740
- // "method": "private/margin/get-interest-history",
99741
- // "code": 0,
99742
- // "result": {
99743
- // "list": [
99744
- // {
99745
- // "loan_id": "2643528867803765921",
99746
- // "currency": "USDT",
99747
- // "interest": 0.00000004,
99748
- // "time": 1656702899559,
99749
- // "stake_amount": 6,
99750
- // "interest_rate": 0.000025
99751
- // },
99752
- // ]
99753
- // }
99754
- // }
99755
- //
99756
- const data = this.safeValue(response, 'result', {});
99757
- const rows = this.safeValue(data, 'list', []);
99758
- let interest = undefined;
99759
- for (let i = 0; i < rows.length; i++) {
99760
- interest = this.parseBorrowInterests(rows, market);
99761
- }
99762
- return this.filterByCurrencySinceLimit(interest, code, since, limit);
99763
- }
99764
99940
  parseBorrowInterest(info, market = undefined) {
99765
99941
  //
99766
99942
  // {
@@ -99789,38 +99965,6 @@ class cryptocom extends _abstract_cryptocom_js__WEBPACK_IMPORTED_MODULE_0__/* ["
99789
99965
  'info': info,
99790
99966
  };
99791
99967
  }
99792
- async fetchBorrowRates(params = {}) {
99793
- /**
99794
- * @method
99795
- * @name cryptocom#fetchBorrowRates
99796
- * @description fetch the borrow interest rates of all currencies
99797
- * @param {object} [params] extra parameters specific to the cryptocom api endpoint
99798
- * @returns {object} a list of [borrow rate structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#borrow-rate-structure}
99799
- */
99800
- await this.loadMarkets();
99801
- const response = await this.v2PrivatePostPrivateMarginGetUserConfig(params);
99802
- //
99803
- // {
99804
- // "id": 1656707947456,
99805
- // "method": "private/margin/get-user-config",
99806
- // "code": 0,
99807
- // "result": {
99808
- // "stake_amount": 6,
99809
- // "currency_configs": [
99810
- // {
99811
- // "currency": "AGLD",
99812
- // "hourly_rate": 0.00003334,
99813
- // "max_borrow_limit": 342.4032393,
99814
- // "min_borrow_limit": 30
99815
- // },
99816
- // ]
99817
- // }
99818
- // }
99819
- //
99820
- const data = this.safeValue(response, 'result', {});
99821
- const rates = this.safeValue(data, 'currency_configs', []);
99822
- return this.parseBorrowRates(rates, 'currency');
99823
- }
99824
99968
  parseBorrowRates(info, codeKey) {
99825
99969
  //
99826
99970
  // {
@@ -100493,7 +100637,15 @@ class cryptocom extends _abstract_cryptocom_js__WEBPACK_IMPORTED_MODULE_0__/* ["
100493
100637
  const paramsKeys = Object.keys(keysorted);
100494
100638
  let strSortKey = '';
100495
100639
  for (let i = 0; i < paramsKeys.length; i++) {
100496
- strSortKey = strSortKey + paramsKeys[i].toString() + requestParams[paramsKeys[i]].toString();
100640
+ const key = paramsKeys[i].toString();
100641
+ let value = requestParams[paramsKeys[i]];
100642
+ if (Array.isArray(value)) {
100643
+ value = value.join(',');
100644
+ }
100645
+ else {
100646
+ value = value.toString();
100647
+ }
100648
+ strSortKey = strSortKey + key + value;
100497
100649
  }
100498
100650
  const payload = path + nonce + this.apiKey + strSortKey + nonce;
100499
100651
  const signature = this.hmac(this.encode(payload), this.encode(this.secret), _static_dependencies_noble_hashes_sha256_js__WEBPACK_IMPORTED_MODULE_4__/* .sha256 */ .J);
@@ -101113,6 +101265,7 @@ class currencycom extends _abstract_currencycom_js__WEBPACK_IMPORTED_MODULE_0__/
101113
101265
  'max': undefined,
101114
101266
  },
101115
101267
  },
101268
+ 'created': undefined,
101116
101269
  'info': market,
101117
101270
  });
101118
101271
  }
@@ -103374,6 +103527,7 @@ class delta extends _abstract_delta_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
103374
103527
  'max': undefined,
103375
103528
  },
103376
103529
  },
103530
+ 'created': this.parse8601(this.safeString(market, 'launch_time')),
103377
103531
  'info': market,
103378
103532
  });
103379
103533
  }
@@ -106452,6 +106606,7 @@ class deribit extends _abstract_deribit_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
106452
106606
  'max': undefined,
106453
106607
  },
106454
106608
  },
106609
+ 'created': this.safeInteger(market, 'creation_timestamp'),
106455
106610
  'info': market,
106456
106611
  });
106457
106612
  }
@@ -109441,6 +109596,7 @@ class digifinex extends _abstract_digifinex_js__WEBPACK_IMPORTED_MODULE_0__/* ["
109441
109596
  'max': undefined,
109442
109597
  },
109443
109598
  },
109599
+ 'created': undefined,
109444
109600
  'info': market,
109445
109601
  });
109446
109602
  }
@@ -113511,6 +113667,7 @@ class exmo extends _abstract_exmo_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
113511
113667
  'max': this.safeNumber(market, 'max_amount'),
113512
113668
  },
113513
113669
  },
113670
+ 'created': undefined,
113514
113671
  'info': market,
113515
113672
  });
113516
113673
  }
@@ -116469,6 +116626,7 @@ class gate extends _abstract_gate_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
116469
116626
  'max': margin ? this.safeNumber(market, 'max_quote_amount') : undefined,
116470
116627
  },
116471
116628
  },
116629
+ 'created': undefined,
116472
116630
  'info': market,
116473
116631
  });
116474
116632
  }
@@ -116666,6 +116824,7 @@ class gate extends _abstract_gate_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
116666
116824
  'max': undefined,
116667
116825
  },
116668
116826
  },
116827
+ 'created': undefined,
116669
116828
  'info': market,
116670
116829
  };
116671
116830
  }
@@ -116786,6 +116945,7 @@ class gate extends _abstract_gate_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
116786
116945
  'max': undefined,
116787
116946
  },
116788
116947
  },
116948
+ 'created': this.safeIntegerProduct(market, 'create_time', 1000),
116789
116949
  'info': market,
116790
116950
  });
116791
116951
  }
@@ -122587,6 +122747,7 @@ class gemini extends _abstract_gemini_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
122587
122747
  'max': undefined,
122588
122748
  },
122589
122749
  },
122750
+ 'created': undefined,
122590
122751
  'info': response,
122591
122752
  };
122592
122753
  }
@@ -124475,6 +124636,7 @@ class hitbtc extends _abstract_hitbtc_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
124475
124636
  'max': undefined,
124476
124637
  },
124477
124638
  },
124639
+ 'created': undefined,
124478
124640
  'info': market,
124479
124641
  });
124480
124642
  }
@@ -127214,6 +127376,7 @@ class hollaex extends _abstract_hollaex_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
127214
127376
  'max': undefined,
127215
127377
  },
127216
127378
  },
127379
+ 'created': this.parse8601(this.safeString(market, 'created_at')),
127217
127380
  'info': market,
127218
127381
  });
127219
127382
  }
@@ -137648,6 +137811,7 @@ class huobijp extends _abstract_huobijp_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
137648
137811
  'max': undefined,
137649
137812
  },
137650
137813
  },
137814
+ 'created': undefined,
137651
137815
  'info': market,
137652
137816
  });
137653
137817
  }
@@ -139369,6 +139533,7 @@ class idex extends _abstract_idex_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
139369
139533
  'max': undefined,
139370
139534
  },
139371
139535
  },
139536
+ 'created': undefined,
139372
139537
  'info': entry,
139373
139538
  });
139374
139539
  }
@@ -141035,6 +141200,7 @@ class independentreserve extends _abstract_independentreserve_js__WEBPACK_IMPORT
141035
141200
  'max': undefined,
141036
141201
  },
141037
141202
  },
141203
+ 'created': undefined,
141038
141204
  'info': id,
141039
141205
  });
141040
141206
  }
@@ -141867,6 +142033,7 @@ class indodax extends _abstract_indodax_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
141867
142033
  'max': undefined,
141868
142034
  },
141869
142035
  },
142036
+ 'created': undefined,
141870
142037
  'info': market,
141871
142038
  });
141872
142039
  }
@@ -142818,6 +142985,7 @@ class kraken extends _abstract_kraken_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
142818
142985
  'Depth': 1,
142819
142986
  'OHLC': 1,
142820
142987
  'Spread': 1,
142988
+ 'SystemStatus': 1,
142821
142989
  'Ticker': 1,
142822
142990
  'Time': 1,
142823
142991
  'Trades': 1,
@@ -142830,6 +142998,7 @@ class kraken extends _abstract_kraken_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
142830
142998
  'AddExport': 3,
142831
142999
  'Balance': 3,
142832
143000
  'CancelAll': 3,
143001
+ 'CancelAllOrdersAfter': 3,
142833
143002
  'CancelOrder': 0,
142834
143003
  'CancelOrderBatch': 0,
142835
143004
  'ClosedOrders': 6,
@@ -142865,6 +143034,13 @@ class kraken extends _abstract_kraken_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
142865
143034
  // sub accounts
142866
143035
  'CreateSubaccount': 3,
142867
143036
  'AccountTransfer': 3,
143037
+ // earn
143038
+ 'Earn/Allocate': 3,
143039
+ 'Earn/Deallocate': 3,
143040
+ 'Earn/AllocateStatus': 3,
143041
+ 'Earn/DeallocateStatus': 3,
143042
+ 'Earn/Strategies': 3,
143043
+ 'Earn/Allocations': 3,
142868
143044
  },
142869
143045
  },
142870
143046
  },
@@ -145739,6 +145915,7 @@ class krakenfutures extends _abstract_krakenfutures_js__WEBPACK_IMPORTED_MODULE_
145739
145915
  'max': undefined,
145740
145916
  },
145741
145917
  },
145918
+ 'created': this.parse8601(this.safeString(market, 'openingDate')),
145742
145919
  'info': market,
145743
145920
  });
145744
145921
  }
@@ -155564,6 +155741,7 @@ class latoken extends _abstract_latoken_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
155564
155741
  'max': this.safeNumber(market, 'maxOrderCost' + capitalizedQuote),
155565
155742
  },
155566
155743
  },
155744
+ 'created': this.safeInteger(market, 'created'),
155567
155745
  'info': market,
155568
155746
  });
155569
155747
  }
@@ -190638,6 +190816,7 @@ class poloniex extends _abstract_poloniex_js__WEBPACK_IMPORTED_MODULE_0__/* ["de
190638
190816
  'max': undefined,
190639
190817
  },
190640
190818
  },
190819
+ 'created': this.safeInteger(market, 'tradableStartTime'),
190641
190820
  'info': market,
190642
190821
  });
190643
190822
  }
@@ -192525,22 +192704,27 @@ class poloniexfutures extends _abstract_poloniexfutures_js__WEBPACK_IMPORTED_MOD
192525
192704
  'get': {
192526
192705
  'account-overview': 1,
192527
192706
  'transaction-history': 1,
192707
+ 'maxActiveOrders': 1,
192708
+ 'maxRiskLimit': 1,
192709
+ 'userFeeRate': 1,
192710
+ 'marginType/query': 1,
192528
192711
  'orders': 1,
192529
192712
  'stopOrders': 1,
192530
192713
  'recentDoneOrders': 1,
192531
192714
  'orders/{order-id}': 1,
192715
+ 'clientOrderId/{clientOid}': 1,
192532
192716
  'fills': 1,
192533
192717
  'openOrderStatistics': 1,
192534
192718
  'position': 1.5,
192535
192719
  'positions': 1.5,
192536
192720
  'funding-history': 1,
192537
- 'marginType/query': 1,
192538
192721
  },
192539
192722
  'post': {
192540
192723
  'orders': 1.5,
192541
192724
  'batchOrders': 1.5,
192542
192725
  'position/margin/auto-deposit-status': 1.5,
192543
192726
  'position/margin/deposit-margin': 1.5,
192727
+ 'position/margin/withdraw-margin': 1.5,
192544
192728
  'bullet-private': 1,
192545
192729
  'marginType/change': 1,
192546
192730
  },
@@ -192757,6 +192941,7 @@ class poloniexfutures extends _abstract_poloniexfutures_js__WEBPACK_IMPORTED_MOD
192757
192941
  'max': undefined,
192758
192942
  },
192759
192943
  },
192944
+ 'created': this.safeInteger(market, 'firstOpenDate'),
192760
192945
  'info': market,
192761
192946
  });
192762
192947
  }
@@ -193681,7 +193866,7 @@ class poloniexfutures extends _abstract_poloniexfutures_js__WEBPACK_IMPORTED_MOD
193681
193866
  }
193682
193867
  const request = {};
193683
193868
  if (!stop) {
193684
- request['status'] = status === 'open' ? 'active' : 'done';
193869
+ request['status'] = (status === 'open') ? 'active' : 'done';
193685
193870
  }
193686
193871
  else if (status !== 'open') {
193687
193872
  throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest(this.id + ' fetchOrdersByStatus() can only fetch untriggered stop orders');
@@ -227516,6 +227701,9 @@ class krakenfutures extends _krakenfutures_js__WEBPACK_IMPORTED_MODULE_0__/* ["d
227516
227701
  };
227517
227702
  const marketIds = [];
227518
227703
  let messageHash = name;
227704
+ if (symbols === undefined) {
227705
+ symbols = [];
227706
+ }
227519
227707
  for (let i = 0; i < symbols.length; i++) {
227520
227708
  const symbol = symbols[i];
227521
227709
  marketIds.push(this.marketId(symbol));
@@ -227581,6 +227769,7 @@ class krakenfutures extends _krakenfutures_js__WEBPACK_IMPORTED_MODULE_0__/* ["d
227581
227769
  const method = this.safeString(this.options, 'watchTickerMethod', 'ticker'); // or ticker_lite
227582
227770
  const name = this.safeString2(params, 'method', 'watchTickerMethod', method);
227583
227771
  params = this.omit(params, ['watchTickerMethod', 'method']);
227772
+ symbols = this.marketSymbols(symbols, undefined, false);
227584
227773
  return await this.subscribePublic(name, symbols, params);
227585
227774
  }
227586
227775
  async watchTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
@@ -227732,7 +227921,7 @@ class krakenfutures extends _krakenfutures_js__WEBPACK_IMPORTED_MODULE_0__/* ["d
227732
227921
  // }
227733
227922
  //
227734
227923
  const channel = this.safeString(message, 'feed');
227735
- const marketId = this.safeStringLower(message, 'product_id');
227924
+ const marketId = this.safeString(message, 'product_id');
227736
227925
  if (marketId !== undefined) {
227737
227926
  const market = this.market(marketId);
227738
227927
  const symbol = market['symbol'];
@@ -227773,7 +227962,7 @@ class krakenfutures extends _krakenfutures_js__WEBPACK_IMPORTED_MODULE_0__/* ["d
227773
227962
  // "price": 34893
227774
227963
  // }
227775
227964
  //
227776
- const marketId = this.safeStringLower(trade, 'product_id');
227965
+ const marketId = this.safeString(trade, 'product_id');
227777
227966
  market = this.safeMarket(marketId, market);
227778
227967
  const timestamp = this.safeInteger(trade, 'time');
227779
227968
  return this.safeTrade({
@@ -227826,7 +228015,7 @@ class krakenfutures extends _krakenfutures_js__WEBPACK_IMPORTED_MODULE_0__/* ["d
227826
228015
  // }
227827
228016
  //
227828
228017
  const timestamp = this.safeInteger(trade, 'tradeTime');
227829
- const marketId = this.safeStringLower(trade, 'symbol');
228018
+ const marketId = this.safeString(trade, 'symbol');
227830
228019
  return this.safeTrade({
227831
228020
  'info': trade,
227832
228021
  'id': this.safeString(trade, 'tradeId'),
@@ -227905,7 +228094,7 @@ class krakenfutures extends _krakenfutures_js__WEBPACK_IMPORTED_MODULE_0__/* ["d
227905
228094
  }
227906
228095
  const order = this.safeValue(message, 'order');
227907
228096
  if (order !== undefined) {
227908
- const marketId = this.safeStringLower(order, 'instrument');
228097
+ const marketId = this.safeString(order, 'instrument');
227909
228098
  const messageHash = 'orders';
227910
228099
  const symbol = this.safeSymbol(marketId);
227911
228100
  const orderId = this.safeString(order, 'order_id');
@@ -228098,7 +228287,7 @@ class krakenfutures extends _krakenfutures_js__WEBPACK_IMPORTED_MODULE_0__/* ["d
228098
228287
  status = 'cancelled';
228099
228288
  }
228100
228289
  }
228101
- const marketId = this.safeStringLower(unparsedOrder, 'instrument');
228290
+ const marketId = this.safeString(unparsedOrder, 'instrument');
228102
228291
  const timestamp = this.safeString(unparsedOrder, 'time');
228103
228292
  const direction = this.safeInteger(unparsedOrder, 'direction');
228104
228293
  return this.safeOrder({
@@ -228179,7 +228368,7 @@ class krakenfutures extends _krakenfutures_js__WEBPACK_IMPORTED_MODULE_0__/* ["d
228179
228368
  // "volumeQuote": 6899673.0
228180
228369
  // }
228181
228370
  //
228182
- const marketId = this.safeStringLower(message, 'product_id');
228371
+ const marketId = this.safeString(message, 'product_id');
228183
228372
  const feed = this.safeString(message, 'feed');
228184
228373
  if (marketId !== undefined) {
228185
228374
  const ticker = this.parseWsTicker(message);
@@ -228240,7 +228429,7 @@ class krakenfutures extends _krakenfutures_js__WEBPACK_IMPORTED_MODULE_0__/* ["d
228240
228429
  // "volumeQuote": 6899673.0
228241
228430
  // }
228242
228431
  //
228243
- const marketId = this.safeStringLower(ticker, 'product_id');
228432
+ const marketId = this.safeString(ticker, 'product_id');
228244
228433
  market = this.safeMarket(marketId, market);
228245
228434
  const symbol = market['symbol'];
228246
228435
  const timestamp = this.parse8601(this.safeString(ticker, 'lastTime'));
@@ -228298,7 +228487,7 @@ class krakenfutures extends _krakenfutures_js__WEBPACK_IMPORTED_MODULE_0__/* ["d
228298
228487
  // ]
228299
228488
  // }
228300
228489
  //
228301
- const marketId = this.safeStringLower(message, 'product_id');
228490
+ const marketId = this.safeString(message, 'product_id');
228302
228491
  const market = this.safeMarket(marketId);
228303
228492
  const symbol = market['symbol'];
228304
228493
  const messageHash = 'book:' + symbol;
@@ -228338,7 +228527,7 @@ class krakenfutures extends _krakenfutures_js__WEBPACK_IMPORTED_MODULE_0__/* ["d
228338
228527
  // "timestamp": 1612269953629
228339
228528
  // }
228340
228529
  //
228341
- const marketId = this.safeStringLower(message, 'product_id');
228530
+ const marketId = this.safeString(message, 'product_id');
228342
228531
  const market = this.safeMarket(marketId);
228343
228532
  const symbol = market['symbol'];
228344
228533
  const messageHash = 'book:' + symbol;
@@ -228642,7 +228831,7 @@ class krakenfutures extends _krakenfutures_js__WEBPACK_IMPORTED_MODULE_0__/* ["d
228642
228831
  // }
228643
228832
  //
228644
228833
  const timestamp = this.safeInteger(trade, 'time');
228645
- const marketId = this.safeStringLower(trade, 'instrument');
228834
+ const marketId = this.safeString(trade, 'instrument');
228646
228835
  market = this.safeMarket(marketId, market);
228647
228836
  const isBuy = this.safeValue(trade, 'buy');
228648
228837
  const feeCurrencyId = this.safeString(trade, 'fee_currency');
@@ -265796,6 +265985,7 @@ class woo extends _abstract_woo_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
265796
265985
  'max': undefined,
265797
265986
  },
265798
265987
  },
265988
+ 'created': this.safeIntegerProduct(market, 'created_time', 1000),
265799
265989
  'info': market,
265800
265990
  });
265801
265991
  }
@@ -277545,7 +277735,7 @@ SOFTWARE.
277545
277735
 
277546
277736
  //-----------------------------------------------------------------------------
277547
277737
  // this is updated by vss.js when building
277548
- const version = '4.1.13';
277738
+ const version = '4.1.14';
277549
277739
  _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange.ccxtVersion */ .e.ccxtVersion = version;
277550
277740
  //-----------------------------------------------------------------------------
277551
277741