ccxt 4.2.71 → 4.2.73

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 (139) hide show
  1. package/README.md +124 -122
  2. package/build.sh +1 -1
  3. package/dist/ccxt.browser.js +3293 -378
  4. package/dist/ccxt.browser.min.js +4 -4
  5. package/dist/cjs/ccxt.js +6 -1
  6. package/dist/cjs/src/abstract/coinbaseinternational.js +9 -0
  7. package/dist/cjs/src/ascendex.js +149 -2
  8. package/dist/cjs/src/base/Exchange.js +30 -6
  9. package/dist/cjs/src/btcturk.js +3 -3
  10. package/dist/cjs/src/coinbaseinternational.js +2019 -0
  11. package/dist/cjs/src/gate.js +1 -1
  12. package/dist/cjs/src/hyperliquid.js +8 -2
  13. package/dist/cjs/src/mexc.js +1 -1
  14. package/dist/cjs/src/okx.js +1 -1
  15. package/dist/cjs/src/pro/bingx.js +29 -6
  16. package/dist/cjs/src/pro/coinbaseinternational.js +645 -0
  17. package/dist/cjs/src/pro/hitbtc.js +16 -7
  18. package/js/ccxt.d.ts +8 -2
  19. package/js/ccxt.js +6 -2
  20. package/js/src/abstract/coinbaseinternational.d.ts +42 -0
  21. package/js/src/abstract/coinbaseinternational.js +11 -0
  22. package/js/src/ace.d.ts +2 -2
  23. package/js/src/alpaca.d.ts +2 -2
  24. package/js/src/ascendex.d.ts +7 -3
  25. package/js/src/ascendex.js +149 -2
  26. package/js/src/base/Exchange.d.ts +81 -78
  27. package/js/src/base/Exchange.js +30 -6
  28. package/js/src/base/types.d.ts +10 -0
  29. package/js/src/bigone.d.ts +2 -2
  30. package/js/src/binance.d.ts +8 -8
  31. package/js/src/bingx.d.ts +4 -4
  32. package/js/src/bit2c.d.ts +2 -2
  33. package/js/src/bitbank.d.ts +2 -2
  34. package/js/src/bitbns.d.ts +2 -2
  35. package/js/src/bitfinex.d.ts +3 -3
  36. package/js/src/bitfinex2.d.ts +5 -5
  37. package/js/src/bitflyer.d.ts +2 -2
  38. package/js/src/bitget.d.ts +4 -4
  39. package/js/src/bithumb.d.ts +2 -2
  40. package/js/src/bitmart.d.ts +4 -4
  41. package/js/src/bitmex.d.ts +3 -3
  42. package/js/src/bitopro.d.ts +2 -2
  43. package/js/src/bitrue.d.ts +5 -5
  44. package/js/src/bitso.d.ts +2 -2
  45. package/js/src/bitstamp.d.ts +2 -2
  46. package/js/src/bitteam.d.ts +2 -2
  47. package/js/src/bitvavo.d.ts +4 -4
  48. package/js/src/bl3p.d.ts +2 -2
  49. package/js/src/blockchaincom.d.ts +2 -2
  50. package/js/src/blofin.d.ts +4 -4
  51. package/js/src/btcalpha.d.ts +2 -2
  52. package/js/src/btcbox.d.ts +2 -2
  53. package/js/src/btcmarkets.d.ts +2 -2
  54. package/js/src/btcturk.d.ts +2 -2
  55. package/js/src/btcturk.js +3 -3
  56. package/js/src/bybit.d.ts +5 -5
  57. package/js/src/cex.d.ts +4 -4
  58. package/js/src/coinbase.d.ts +3 -3
  59. package/js/src/coinbaseinternational.d.ts +146 -0
  60. package/js/src/coinbaseinternational.js +2020 -0
  61. package/js/src/coinbasepro.d.ts +2 -2
  62. package/js/src/coincheck.d.ts +2 -2
  63. package/js/src/coinex.d.ts +4 -4
  64. package/js/src/coinlist.d.ts +3 -3
  65. package/js/src/coinmate.d.ts +2 -2
  66. package/js/src/coinmetro.d.ts +2 -2
  67. package/js/src/coinone.d.ts +2 -2
  68. package/js/src/coinsph.d.ts +2 -2
  69. package/js/src/coinspot.d.ts +2 -2
  70. package/js/src/cryptocom.d.ts +4 -4
  71. package/js/src/currencycom.d.ts +2 -2
  72. package/js/src/delta.d.ts +3 -3
  73. package/js/src/deribit.d.ts +3 -3
  74. package/js/src/digifinex.d.ts +3 -3
  75. package/js/src/exmo.d.ts +3 -3
  76. package/js/src/gate.d.ts +5 -5
  77. package/js/src/gate.js +1 -1
  78. package/js/src/gemini.d.ts +2 -2
  79. package/js/src/hitbtc.d.ts +4 -4
  80. package/js/src/hollaex.d.ts +2 -2
  81. package/js/src/htx.d.ts +6 -6
  82. package/js/src/huobijp.d.ts +2 -2
  83. package/js/src/hyperliquid.d.ts +4 -3
  84. package/js/src/hyperliquid.js +9 -3
  85. package/js/src/idex.d.ts +3 -3
  86. package/js/src/independentreserve.d.ts +2 -2
  87. package/js/src/indodax.d.ts +2 -2
  88. package/js/src/kraken.d.ts +3 -3
  89. package/js/src/krakenfutures.d.ts +4 -4
  90. package/js/src/kucoin.d.ts +4 -4
  91. package/js/src/kucoinfutures.d.ts +4 -4
  92. package/js/src/kuna.d.ts +2 -2
  93. package/js/src/latoken.d.ts +2 -2
  94. package/js/src/lbank.d.ts +2 -2
  95. package/js/src/luno.d.ts +2 -2
  96. package/js/src/lykke.d.ts +2 -2
  97. package/js/src/mercado.d.ts +2 -2
  98. package/js/src/mexc.d.ts +2 -2
  99. package/js/src/mexc.js +1 -1
  100. package/js/src/ndax.d.ts +3 -3
  101. package/js/src/novadax.d.ts +2 -2
  102. package/js/src/oceanex.d.ts +2 -2
  103. package/js/src/okcoin.d.ts +3 -3
  104. package/js/src/okx.d.ts +4 -4
  105. package/js/src/okx.js +1 -1
  106. package/js/src/onetrading.d.ts +2 -2
  107. package/js/src/p2b.d.ts +2 -2
  108. package/js/src/paymium.d.ts +2 -2
  109. package/js/src/phemex.d.ts +3 -3
  110. package/js/src/poloniex.d.ts +3 -3
  111. package/js/src/poloniexfutures.d.ts +4 -4
  112. package/js/src/pro/binance.d.ts +3 -3
  113. package/js/src/pro/bingx.d.ts +1 -0
  114. package/js/src/pro/bingx.js +29 -6
  115. package/js/src/pro/bitvavo.d.ts +11 -11
  116. package/js/src/pro/bybit.d.ts +1 -1
  117. package/js/src/pro/cex.d.ts +8 -8
  118. package/js/src/pro/coinbase.d.ts +2 -2
  119. package/js/src/pro/coinbaseinternational.d.ts +28 -0
  120. package/js/src/pro/coinbaseinternational.js +646 -0
  121. package/js/src/pro/cryptocom.d.ts +2 -2
  122. package/js/src/pro/hitbtc.d.ts +2 -2
  123. package/js/src/pro/hitbtc.js +16 -7
  124. package/js/src/pro/kraken.d.ts +3 -3
  125. package/js/src/pro/okx.d.ts +3 -3
  126. package/js/src/pro/poloniex.d.ts +5 -5
  127. package/js/src/probit.d.ts +2 -2
  128. package/js/src/timex.d.ts +3 -3
  129. package/js/src/tokocrypto.d.ts +2 -2
  130. package/js/src/upbit.d.ts +2 -2
  131. package/js/src/wavesexchange.d.ts +2 -2
  132. package/js/src/wazirx.d.ts +2 -2
  133. package/js/src/whitebit.d.ts +2 -2
  134. package/js/src/woo.d.ts +5 -5
  135. package/js/src/yobit.d.ts +2 -2
  136. package/js/src/zaif.d.ts +2 -2
  137. package/js/src/zonda.d.ts +2 -2
  138. package/package.json +1 -1
  139. package/skip-tests.json +13 -0
@@ -512,6 +512,22 @@ class Exchange extends _base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchang
512
512
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Exchange);
513
513
 
514
514
 
515
+ /***/ }),
516
+
517
+ /***/ 931:
518
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
519
+
520
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
521
+ /* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__)
522
+ /* harmony export */ });
523
+ /* harmony import */ var _base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3043);
524
+ // -------------------------------------------------------------------------------
525
+
526
+ class Exchange extends _base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange */ .e {
527
+ }
528
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Exchange);
529
+
530
+
515
531
  /***/ }),
516
532
 
517
533
  /***/ 2925:
@@ -3713,9 +3729,11 @@ class ascendex extends _abstract_ascendex_js__WEBPACK_IMPORTED_MODULE_0__/* ["de
3713
3729
  'fetchFundingRateHistory': false,
3714
3730
  'fetchFundingRates': true,
3715
3731
  'fetchIndexOHLCV': false,
3716
- 'fetchLeverage': false,
3732
+ 'fetchLeverage': 'emulated',
3733
+ 'fetchLeverages': true,
3717
3734
  'fetchLeverageTiers': true,
3718
- 'fetchMarginMode': false,
3735
+ 'fetchMarginMode': 'emulated',
3736
+ 'fetchMarginModes': true,
3719
3737
  'fetchMarketLeverageTiers': 'emulated',
3720
3738
  'fetchMarkets': true,
3721
3739
  'fetchMarkOHLCV': false,
@@ -6931,6 +6949,151 @@ class ascendex extends _abstract_ascendex_js__WEBPACK_IMPORTED_MODULE_0__/* ["de
6931
6949
  'amount': this.safeNumber(income, 'paymentInUSDT'),
6932
6950
  };
6933
6951
  }
6952
+ async fetchMarginModes(symbols = undefined, params = {}) {
6953
+ /**
6954
+ * @method
6955
+ * @name ascendex#fetchMarginMode
6956
+ * @description fetches the set margin mode of the user
6957
+ * @see https://ascendex.github.io/ascendex-futures-pro-api-v2/#position
6958
+ * @param {string[]} [symbols] a list of unified market symbols
6959
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
6960
+ * @returns {object} a list of [margin mode structures]{@link https://docs.ccxt.com/#/?id=margin-mode-structure}
6961
+ */
6962
+ await this.loadMarkets();
6963
+ await this.loadAccounts();
6964
+ const account = this.safeValue(this.accounts, 0, {});
6965
+ const accountGroup = this.safeString(account, 'id');
6966
+ const request = {
6967
+ 'account-group': accountGroup,
6968
+ };
6969
+ const response = await this.v2PrivateAccountGroupGetFuturesPosition(this.extend(request, params));
6970
+ //
6971
+ // {
6972
+ // "code": 0,
6973
+ // "data": {
6974
+ // "accountId": "fut2ODPhGiY71Pl4vtXnOZ00ssgD7QGn",
6975
+ // "ac": "FUTURES",
6976
+ // "collaterals": [
6977
+ // {
6978
+ // "asset": "USDT",
6979
+ // "balance": "44.570287262",
6980
+ // "referencePrice": "1",
6981
+ // "discountFactor": "1"
6982
+ // }
6983
+ // ],
6984
+ // "contracts": [
6985
+ // {
6986
+ // "symbol": "BTC-PERP",
6987
+ // "side": "LONG",
6988
+ // "position": "0.0001",
6989
+ // "referenceCost": "-3.12277254",
6990
+ // "unrealizedPnl": "-0.001700233",
6991
+ // "realizedPnl": "0",
6992
+ // "avgOpenPrice": "31209",
6993
+ // "marginType": "isolated",
6994
+ // "isolatedMargin": "1.654972977",
6995
+ // "leverage": "2",
6996
+ // "takeProfitPrice": "0",
6997
+ // "takeProfitTrigger": "market",
6998
+ // "stopLossPrice": "0",
6999
+ // "stopLossTrigger": "market",
7000
+ // "buyOpenOrderNotional": "0",
7001
+ // "sellOpenOrderNotional": "0",
7002
+ // "markPrice": "31210.723063672",
7003
+ // "indexPrice": "31223.148857925"
7004
+ // },
7005
+ // ]
7006
+ // }
7007
+ // }
7008
+ //
7009
+ const data = this.safeDict(response, 'data', {});
7010
+ const marginModes = this.safeList(data, 'contracts', []);
7011
+ return this.parseMarginModes(marginModes, symbols, 'symbol');
7012
+ }
7013
+ parseMarginMode(marginMode, market = undefined) {
7014
+ const marketId = this.safeString(marginMode, 'symbol');
7015
+ const marginType = this.safeString(marginMode, 'marginType');
7016
+ const margin = (marginType === 'crossed') ? 'cross' : 'isolated';
7017
+ return {
7018
+ 'info': marginMode,
7019
+ 'symbol': this.safeSymbol(marketId, market),
7020
+ 'marginMode': margin,
7021
+ };
7022
+ }
7023
+ async fetchLeverages(symbols = undefined, params = {}) {
7024
+ /**
7025
+ * @method
7026
+ * @name ascendex#fetchLeverages
7027
+ * @description fetch the set leverage for all contract markets
7028
+ * @see https://ascendex.github.io/ascendex-futures-pro-api-v2/#position
7029
+ * @param {string[]} [symbols] a list of unified market symbols
7030
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
7031
+ * @returns {object} a list of [leverage structures]{@link https://docs.ccxt.com/#/?id=leverage-structure}
7032
+ */
7033
+ await this.loadMarkets();
7034
+ await this.loadAccounts();
7035
+ const account = this.safeValue(this.accounts, 0, {});
7036
+ const accountGroup = this.safeString(account, 'id');
7037
+ const request = {
7038
+ 'account-group': accountGroup,
7039
+ };
7040
+ const response = await this.v2PrivateAccountGroupGetFuturesPosition(this.extend(request, params));
7041
+ //
7042
+ // {
7043
+ // "code": 0,
7044
+ // "data": {
7045
+ // "accountId": "fut2ODPhGiY71Pl4vtXnOZ00ssgD7QGn",
7046
+ // "ac": "FUTURES",
7047
+ // "collaterals": [
7048
+ // {
7049
+ // "asset": "USDT",
7050
+ // "balance": "44.570287262",
7051
+ // "referencePrice": "1",
7052
+ // "discountFactor": "1"
7053
+ // }
7054
+ // ],
7055
+ // "contracts": [
7056
+ // {
7057
+ // "symbol": "BTC-PERP",
7058
+ // "side": "LONG",
7059
+ // "position": "0.0001",
7060
+ // "referenceCost": "-3.12277254",
7061
+ // "unrealizedPnl": "-0.001700233",
7062
+ // "realizedPnl": "0",
7063
+ // "avgOpenPrice": "31209",
7064
+ // "marginType": "isolated",
7065
+ // "isolatedMargin": "1.654972977",
7066
+ // "leverage": "2",
7067
+ // "takeProfitPrice": "0",
7068
+ // "takeProfitTrigger": "market",
7069
+ // "stopLossPrice": "0",
7070
+ // "stopLossTrigger": "market",
7071
+ // "buyOpenOrderNotional": "0",
7072
+ // "sellOpenOrderNotional": "0",
7073
+ // "markPrice": "31210.723063672",
7074
+ // "indexPrice": "31223.148857925"
7075
+ // },
7076
+ // ]
7077
+ // }
7078
+ // }
7079
+ //
7080
+ const data = this.safeDict(response, 'data', {});
7081
+ const leverages = this.safeList(data, 'contracts', []);
7082
+ return this.parseLeverages(leverages, symbols, 'symbol');
7083
+ }
7084
+ parseLeverage(leverage, market = undefined) {
7085
+ const marketId = this.safeString(leverage, 'symbol');
7086
+ const leverageValue = this.safeInteger(leverage, 'leverage');
7087
+ const marginType = this.safeString(leverage, 'marginType');
7088
+ const marginMode = (marginType === 'crossed') ? 'cross' : 'isolated';
7089
+ return {
7090
+ 'info': leverage,
7091
+ 'symbol': this.safeSymbol(marketId, market),
7092
+ 'marginMode': marginMode,
7093
+ 'longLeverage': leverageValue,
7094
+ 'shortLeverage': leverageValue,
7095
+ };
7096
+ }
6934
7097
  sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
6935
7098
  const version = api[0];
6936
7099
  const access = api[1];
@@ -9024,6 +9187,15 @@ class Exchange {
9024
9187
  async fetchFundingRates(symbols = undefined, params = {}) {
9025
9188
  throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.NotSupported(this.id + ' fetchFundingRates() is not supported yet');
9026
9189
  }
9190
+ async watchFundingRate(symbol, params = {}) {
9191
+ throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.NotSupported(this.id + ' watchFundingRate() is not supported yet');
9192
+ }
9193
+ async watchFundingRates(symbols, params = {}) {
9194
+ throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.NotSupported(this.id + ' watchFundingRates() is not supported yet');
9195
+ }
9196
+ async watchFundingRatesForSymbols(symbols, params = {}) {
9197
+ return await this.watchFundingRates(symbols, params);
9198
+ }
9027
9199
  async transfer(code, amount, fromAccount, toAccount, params = {}) {
9028
9200
  throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.NotSupported(this.id + ' transfer() is not supported yet');
9029
9201
  }
@@ -10274,11 +10446,19 @@ class Exchange {
10274
10446
  // for example, if 'ETH' is passed for networkCode, but 'ETH' key not defined in `options->networks` object
10275
10447
  if (networkId === undefined) {
10276
10448
  if (currencyCode === undefined) {
10277
- // if currencyCode was not provided, then we just set passed value to networkId
10278
- networkId = networkCode;
10449
+ const currencies = Object.values(this.currencies);
10450
+ for (let i = 0; i < currencies.length; i++) {
10451
+ const currency = [i];
10452
+ const networks = this.safeDict(currency, 'networks');
10453
+ const network = this.safeDict(networks, networkCode);
10454
+ networkId = this.safeString(network, 'id');
10455
+ if (networkId !== undefined) {
10456
+ break;
10457
+ }
10458
+ }
10279
10459
  }
10280
10460
  else {
10281
- // if currencyCode was provided, then we try to find if that currencyCode has a replacement (i.e. ERC20 for ETH)
10461
+ // if currencyCode was provided, then we try to find if that currencyCode has a replacement (i.e. ERC20 for ETH) or is in the currency
10282
10462
  const defaultNetworkCodeReplacements = this.safeValue(this.options, 'defaultNetworkCodeReplacements', {});
10283
10463
  if (currencyCode in defaultNetworkCodeReplacements) {
10284
10464
  // if there is a replacement for the passed networkCode, then we use it to find network-id in `options->networks` object
@@ -10294,11 +10474,18 @@ class Exchange {
10294
10474
  }
10295
10475
  }
10296
10476
  }
10297
- // if it wasn't found, we just set the provided value to network-id
10298
- if (networkId === undefined) {
10299
- networkId = networkCode;
10477
+ else {
10478
+ // serach for network inside currency
10479
+ const currency = this.safeDict(this.currencies, currencyCode);
10480
+ const networks = this.safeDict(currency, 'networks');
10481
+ const network = this.safeDict(networks, networkCode);
10482
+ networkId = this.safeString(network, 'id');
10300
10483
  }
10301
10484
  }
10485
+ // if it wasn't found, we just set the provided value to network-id
10486
+ if (networkId === undefined) {
10487
+ networkId = networkCode;
10488
+ }
10302
10489
  }
10303
10490
  return networkId;
10304
10491
  }
@@ -82306,9 +82493,9 @@ class btcturk extends _abstract_btcturk_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
82306
82493
  '30m': 30,
82307
82494
  '1h': 60,
82308
82495
  '4h': 240,
82309
- '1d': '1 day',
82310
- '1w': '1 week',
82311
- '1y': '1 year',
82496
+ '1d': '1 d',
82497
+ '1w': '1 w',
82498
+ '1y': '1 y',
82312
82499
  },
82313
82500
  'urls': {
82314
82501
  'logo': 'https://user-images.githubusercontent.com/51840849/87153926-efbef500-c2c0-11ea-9842-05b63612c4b9.jpg',
@@ -96917,6 +97104,2035 @@ class coinbase extends _abstract_coinbase_js__WEBPACK_IMPORTED_MODULE_0__/* ["de
96917
97104
  }
96918
97105
 
96919
97106
 
97107
+ /***/ }),
97108
+
97109
+ /***/ 9339:
97110
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
97111
+
97112
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
97113
+ /* harmony export */ Z: () => (/* binding */ coinbaseinternational)
97114
+ /* harmony export */ });
97115
+ /* harmony import */ var _abstract_coinbaseinternational_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(931);
97116
+ /* harmony import */ var _base_errors_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6689);
97117
+ /* harmony import */ var _base_Precise_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(2194);
97118
+ /* harmony import */ var _base_functions_number_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9292);
97119
+ /* harmony import */ var _static_dependencies_noble_hashes_sha256_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1372);
97120
+ // ----------------------------------------------------------------------------
97121
+
97122
+
97123
+
97124
+
97125
+
97126
+ // ----------------------------------------------------------------------------
97127
+ /**
97128
+ * @class coinbaseinternational
97129
+ * @augments Exchange
97130
+ */
97131
+ class coinbaseinternational extends _abstract_coinbaseinternational_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
97132
+ describe() {
97133
+ return this.deepExtend(super.describe(), {
97134
+ 'id': 'coinbaseinternational',
97135
+ 'name': 'coinbase International',
97136
+ 'countries': ['US'],
97137
+ 'certified': true,
97138
+ 'pro': true,
97139
+ 'rateLimit': 100,
97140
+ 'version': 'v1',
97141
+ 'userAgent': this.userAgents['chrome'],
97142
+ 'headers': {
97143
+ 'CB-VERSION': '2018-05-30',
97144
+ },
97145
+ 'has': {
97146
+ 'CORS': true,
97147
+ 'spot': true,
97148
+ 'margin': true,
97149
+ 'swap': true,
97150
+ 'future': true,
97151
+ 'option': false,
97152
+ 'addMargin': false,
97153
+ 'cancelAllOrders': true,
97154
+ 'cancelOrder': true,
97155
+ 'cancelOrders': false,
97156
+ 'closeAllPositions': false,
97157
+ 'closePosition': false,
97158
+ 'createDepositAddress': true,
97159
+ 'createLimitBuyOrder': true,
97160
+ 'createLimitSellOrder': true,
97161
+ 'createMarketBuyOrder': true,
97162
+ 'createMarketBuyOrderWithCost': false,
97163
+ 'createMarketOrderWithCost': false,
97164
+ 'createMarketSellOrder': true,
97165
+ 'createMarketSellOrderWithCost': false,
97166
+ 'createOrder': true,
97167
+ 'createPostOnlyOrder': true,
97168
+ 'createReduceOnlyOrder': false,
97169
+ 'createStopLimitOrder': true,
97170
+ 'createStopMarketOrder': true,
97171
+ 'createStopOrder': true,
97172
+ 'editOrder': true,
97173
+ 'fetchAccounts': true,
97174
+ 'fetchBalance': true,
97175
+ 'fetchBidsAsks': false,
97176
+ 'fetchBorrowRateHistories': false,
97177
+ 'fetchBorrowRateHistory': false,
97178
+ 'fetchCanceledOrders': false,
97179
+ 'fetchClosedOrders': false,
97180
+ 'fetchCrossBorrowRate': false,
97181
+ 'fetchCrossBorrowRates': false,
97182
+ 'fetchCurrencies': true,
97183
+ 'fetchDeposits': true,
97184
+ 'fetchFundingHistory': false,
97185
+ 'fetchFundingRate': false,
97186
+ 'fetchFundingRateHistory': true,
97187
+ 'fetchFundingRates': false,
97188
+ 'fetchIndexOHLCV': false,
97189
+ 'fetchIsolatedBorrowRate': false,
97190
+ 'fetchIsolatedBorrowRates': false,
97191
+ 'fetchL2OrderBook': false,
97192
+ 'fetchLedger': false,
97193
+ 'fetchLeverage': false,
97194
+ 'fetchLeverageTiers': false,
97195
+ 'fetchMarginMode': false,
97196
+ 'fetchMarkets': true,
97197
+ 'fetchMarkOHLCV': false,
97198
+ 'fetchMyBuys': true,
97199
+ 'fetchMySells': true,
97200
+ 'fetchMyTrades': true,
97201
+ 'fetchOHLCV': false,
97202
+ 'fetchOpenInterestHistory': false,
97203
+ 'fetchOpenOrders': true,
97204
+ 'fetchOrder': true,
97205
+ 'fetchOrderBook': false,
97206
+ 'fetchOrders': false,
97207
+ 'fetchPosition': true,
97208
+ 'fetchPositionMode': false,
97209
+ 'fetchPositions': true,
97210
+ 'fetchPositionsRisk': false,
97211
+ 'fetchPremiumIndexOHLCV': false,
97212
+ 'fetchTicker': true,
97213
+ 'fetchTickers': true,
97214
+ 'fetchTime': false,
97215
+ 'fetchTrades': false,
97216
+ 'fetchTradingFee': false,
97217
+ 'fetchTradingFees': false,
97218
+ 'fetchWithdrawals': true,
97219
+ 'reduceMargin': false,
97220
+ 'setLeverage': false,
97221
+ 'setMargin': true,
97222
+ 'setMarginMode': false,
97223
+ 'setPositionMode': false,
97224
+ 'withdraw': true,
97225
+ },
97226
+ 'urls': {
97227
+ 'logo': 'https://github.com/ccxt/ccxt/assets/43336371/866ae638-6ab5-4ebf-ab2c-cdcce9545625',
97228
+ 'api': {
97229
+ 'rest': 'https://api.international.coinbase.com/api',
97230
+ },
97231
+ 'test': {
97232
+ 'rest': 'https://api-n5e1.coinbase.com/api',
97233
+ },
97234
+ 'www': 'https://www.coinbaseinternational.com/international-exchange',
97235
+ 'doc': [
97236
+ 'https://docs.cloud.coinbaseinternational.com/intx/docs',
97237
+ ],
97238
+ 'fees': [
97239
+ 'https://help.coinbaseinternational.com/en/international-exchange/trading-deposits-withdrawals/international-exchange-fees',
97240
+ ],
97241
+ 'referral': '',
97242
+ },
97243
+ 'requiredCredentials': {
97244
+ 'apiKey': true,
97245
+ 'secret': true,
97246
+ 'password': true,
97247
+ },
97248
+ 'api': {
97249
+ 'v1': {
97250
+ 'public': {
97251
+ 'get': [
97252
+ 'assets',
97253
+ 'assets/{assets}',
97254
+ 'assets/{asset}/networks',
97255
+ 'instruments',
97256
+ 'instruments/{instrument}',
97257
+ 'instruments/{instrument}/quote',
97258
+ 'instruments/{instrument}/funding',
97259
+ '',
97260
+ ],
97261
+ },
97262
+ 'private': {
97263
+ 'get': [
97264
+ 'orders',
97265
+ 'orders/{id}',
97266
+ 'portfolios',
97267
+ 'portfolios/{portfolio}',
97268
+ 'portfolios/{portfolio}/detail',
97269
+ 'portfolios/{portfolio}/summary',
97270
+ 'portfolios/{portfolio}/balances',
97271
+ 'portfolios/{portfolio}/balances/{asset}',
97272
+ 'portfolios/{portfolio}/positions',
97273
+ 'portfolios/{portfolio}/positions/{instrument}',
97274
+ 'portfolios/fills',
97275
+ 'portfolios/{portfolio}/fills',
97276
+ 'transfers',
97277
+ 'transfers/{transfer_uuid}',
97278
+ ],
97279
+ 'post': [
97280
+ 'orders',
97281
+ 'portfolios',
97282
+ 'portfolios/margin',
97283
+ 'portfolios/transfer',
97284
+ 'transfers/withdraw',
97285
+ 'transfers/address',
97286
+ 'transfers/create-counterparty-id',
97287
+ 'transfers/validate-counterparty-id',
97288
+ 'transfers/withdraw/counterparty',
97289
+ ],
97290
+ 'put': [
97291
+ 'orders/{id}',
97292
+ 'portfolios/{portfolio}',
97293
+ ],
97294
+ 'delete': [
97295
+ 'orders',
97296
+ 'orders/{id}',
97297
+ ],
97298
+ },
97299
+ },
97300
+ },
97301
+ 'fees': {
97302
+ 'trading': {
97303
+ 'taker': this.parseNumber('0.004'),
97304
+ 'maker': this.parseNumber('0.002'),
97305
+ 'tierBased': true,
97306
+ 'percentage': true,
97307
+ 'tiers': {
97308
+ 'taker': [
97309
+ [this.parseNumber('0'), this.parseNumber('0.004')],
97310
+ [this.parseNumber('1000000'), this.parseNumber('0.004')],
97311
+ [this.parseNumber('5000000'), this.parseNumber('0.0035')],
97312
+ [this.parseNumber('10000000'), this.parseNumber('0.0035')],
97313
+ [this.parseNumber('50000000'), this.parseNumber('0.003')],
97314
+ [this.parseNumber('250000000'), this.parseNumber('0.0025')],
97315
+ ],
97316
+ 'maker': [
97317
+ [this.parseNumber('0'), this.parseNumber('0.002')],
97318
+ [this.parseNumber('1000000'), this.parseNumber('0.0016')],
97319
+ [this.parseNumber('5000000'), this.parseNumber('0.001')],
97320
+ [this.parseNumber('10000000'), this.parseNumber('0.0008')],
97321
+ [this.parseNumber('50000000'), this.parseNumber('0.0005')],
97322
+ [this.parseNumber('250000000'), this.parseNumber('0')],
97323
+ ],
97324
+ },
97325
+ },
97326
+ },
97327
+ 'precisionMode': _base_functions_number_js__WEBPACK_IMPORTED_MODULE_1__/* .TICK_SIZE */ .sh,
97328
+ 'exceptions': {
97329
+ 'exact': {},
97330
+ 'broad': {
97331
+ 'DUPLICATE_CLIENT_ORDER_ID': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.DuplicateOrderId,
97332
+ 'Order rejected': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InvalidOrder,
97333
+ 'market orders must be IoC': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InvalidOrder,
97334
+ 'tif is required': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InvalidOrder,
97335
+ 'Invalid replace order request': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InvalidOrder,
97336
+ 'Unauthorized': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.PermissionDenied,
97337
+ 'invalid result_limit': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest,
97338
+ 'is a required field': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest,
97339
+ 'Not Found': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest,
97340
+ 'ip not allowed': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.AuthenticationError,
97341
+ },
97342
+ },
97343
+ 'timeframes': {
97344
+ '1m': 'ONE_MINUTE',
97345
+ '5m': 'FIVE_MINUTE',
97346
+ '15m': 'FIFTEEN_MINUTE',
97347
+ '30m': 'THIRTY_MINUTE',
97348
+ '1h': 'ONE_HOUR',
97349
+ '2h': 'TWO_HOUR',
97350
+ '6h': 'SIX_HOUR',
97351
+ '1d': 'ONE_DAY',
97352
+ },
97353
+ 'options': {
97354
+ 'brokerId': 'nfqkvdjp',
97355
+ 'portfolio': '',
97356
+ 'withdraw': {
97357
+ 'method': 'v1PrivatePostTransfersWithdraw', // use v1PrivatePostTransfersWithdrawCounterparty for counterparty withdrawals
97358
+ },
97359
+ 'networksById': {
97360
+ 'ethereum': 'ETH',
97361
+ 'arbitrum': 'ARBITRUM',
97362
+ 'avacchain': 'AVAX',
97363
+ 'optimism': 'OPTIMISM',
97364
+ 'polygon': 'MATIC',
97365
+ 'solana': 'SOL',
97366
+ 'bitcoin': 'BTC',
97367
+ },
97368
+ },
97369
+ });
97370
+ }
97371
+ async handlePortfolioAndParams(methodName, params = {}) {
97372
+ let portfolio = undefined;
97373
+ [portfolio, params] = this.handleOptionAndParams(params, methodName, 'portfolio');
97374
+ if ((portfolio !== undefined) && (portfolio !== '')) {
97375
+ return [portfolio, params];
97376
+ }
97377
+ const defaultPortfolio = this.safeString(this.options, 'portfolio');
97378
+ if ((defaultPortfolio !== undefined) && (defaultPortfolio !== '')) {
97379
+ return [defaultPortfolio, params];
97380
+ }
97381
+ const accounts = await this.fetchAccounts();
97382
+ for (let i = 0; i < accounts.length; i++) {
97383
+ const account = accounts[i];
97384
+ const info = this.safeDict(account, 'info', {});
97385
+ if (this.safeBool(info, 'is_default')) {
97386
+ const portfolioId = this.safeString(info, 'portfolio_id');
97387
+ this.options['portfolio'] = portfolioId;
97388
+ return [portfolioId, params];
97389
+ }
97390
+ }
97391
+ throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.ArgumentsRequired(this.id + ' ' + methodName + '() requires a portfolio parameter or set the default portfolio with this.options["portfolio"]');
97392
+ }
97393
+ async handleNetworkIdAndParams(currencyCode, methodName, params) {
97394
+ let networkId = undefined;
97395
+ [networkId, params] = this.handleOptionAndParams(params, methodName, 'network_arn_id');
97396
+ if (networkId === undefined) {
97397
+ await this.loadCurrencyNetworks(currencyCode);
97398
+ const networks = this.currencies[currencyCode]['networks'];
97399
+ const network = this.safeString2(params, 'networkCode', 'network');
97400
+ if (network === undefined) {
97401
+ // find default network
97402
+ if (this.isEmpty(networks)) {
97403
+ throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest(this.id + ' createDepositAddress network not found for currency ' + currencyCode + ' please specify networkId in params');
97404
+ }
97405
+ const defaultNetwork = this.findDefaultNetwork(networks);
97406
+ networkId = defaultNetwork['id'];
97407
+ }
97408
+ else {
97409
+ networkId = this.networkCodeToId(network, currencyCode);
97410
+ }
97411
+ }
97412
+ return [networkId, params];
97413
+ }
97414
+ async fetchAccounts(params = {}) {
97415
+ /**
97416
+ * @method
97417
+ * @name coinbaseinternational#fetchAccounts
97418
+ * @description fetch all the accounts associated with a profile
97419
+ * @see https://docs.cloud.coinbase.com/intx/reference/getportfolios
97420
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
97421
+ * @returns {object} a dictionary of [account structures]{@link https://docs.ccxt.com/#/?id=account-structure} indexed by the account type
97422
+ */
97423
+ await this.loadMarkets();
97424
+ const response = await this.v1PrivateGetPortfolios(params);
97425
+ //
97426
+ // [
97427
+ // {
97428
+ // "portfolio_id":"1ap32qsc-1-0",
97429
+ // "portfolio_uuid":"028d7f6c-b92c-7361-8b7e-2932711e5a22",
97430
+ // "name":"CCXT Portfolio 030624-17:16",
97431
+ // "user_uuid":"e6cf46b6-a32f-5fa7-addb-3324d4526fbd",
97432
+ // "maker_fee_rate":"0",
97433
+ // "taker_fee_rate":"0.0002",
97434
+ // "trading_lock":false,
97435
+ // "borrow_disabled":false,
97436
+ // "is_lsp":false,
97437
+ // "is_default":true,
97438
+ // "cross_collateral_enabled":false
97439
+ // }
97440
+ // ]
97441
+ //
97442
+ return this.parseAccounts(response, params);
97443
+ }
97444
+ parseAccount(account) {
97445
+ //
97446
+ // {
97447
+ // "portfolio_id":"1ap32qsc-1-0",
97448
+ // "portfolio_uuid":"028d7f6c-b92c-7361-8b7e-2932711e5a22",
97449
+ // "name":"CCXT Portfolio 030624-17:16",
97450
+ // "user_uuid":"e6cf46b6-a32f-5fa7-addb-3324d4526fbd",
97451
+ // "maker_fee_rate":"0",
97452
+ // "taker_fee_rate":"0.0002",
97453
+ // "trading_lock":false,
97454
+ // "borrow_disabled":false,
97455
+ // "is_lsp":false,
97456
+ // "is_default":true,
97457
+ // "cross_collateral_enabled":false
97458
+ // }
97459
+ //
97460
+ return {
97461
+ 'id': this.safeString2(account, 'portfolio_id', 'portfolio_uuid'),
97462
+ 'type': undefined,
97463
+ 'code': undefined,
97464
+ 'info': account,
97465
+ };
97466
+ }
97467
+ async fetchFundingRateHistory(symbol = undefined, since = undefined, limit = undefined, params = {}) {
97468
+ /**
97469
+ * @method
97470
+ * @name coinbaseinternational#fetchFundingRateHistory
97471
+ * @description fetches historical funding rate prices
97472
+ * @see https://docs.cloud.coinbase.com/intx/reference/getinstrumentfunding
97473
+ * @param {string} symbol unified symbol of the market to fetch the funding rate history for
97474
+ * @param {int} [since] timestamp in ms of the earliest funding rate to fetch
97475
+ * @param {int} [limit] the maximum amount of [funding rate structures]{@link https://docs.ccxt.com/#/?id=funding-rate-history-structure} to fetch
97476
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
97477
+ * @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)
97478
+ */
97479
+ if (symbol === undefined) {
97480
+ throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.ArgumentsRequired(this.id + ' fetchFundingRateHistory() requires a symbol argument');
97481
+ }
97482
+ await this.loadMarkets();
97483
+ let paginate = false;
97484
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchFundingRateHistory', 'paginate');
97485
+ let maxEntriesPerRequest = undefined;
97486
+ [maxEntriesPerRequest, params] = this.handleOptionAndParams(params, 'fetchFundingRateHistory', 'maxEntriesPerRequest', 100);
97487
+ const pageKey = 'ccxtPageKey';
97488
+ if (paginate) {
97489
+ return await this.fetchPaginatedCallIncremental('fetchFundingRateHistory', symbol, since, limit, params, pageKey, maxEntriesPerRequest);
97490
+ }
97491
+ const market = this.market(symbol);
97492
+ const page = this.safeInteger(params, pageKey, 1) - 1;
97493
+ const request = {
97494
+ 'instrument': market['id'],
97495
+ 'result_offset': this.safeInteger2(params, 'offset', 'result_offset', page * maxEntriesPerRequest),
97496
+ };
97497
+ if (limit !== undefined) {
97498
+ request['result_limit'] = limit;
97499
+ }
97500
+ const response = await this.v1PublicGetInstrumentsInstrumentFunding(this.extend(request, params));
97501
+ //
97502
+ // {
97503
+ // "pagination":{
97504
+ // "result_limit":"25",
97505
+ // "result_offset":"0"
97506
+ // },
97507
+ // "results":[
97508
+ // {
97509
+ // "instrument_id":"149264167780483072",
97510
+ // "funding_rate":"0.000011",
97511
+ // "mark_price":"47388.1",
97512
+ // "event_time":"2024-02-10T16:00:00Z"
97513
+ // },
97514
+ // ...
97515
+ // ]
97516
+ // }
97517
+ //
97518
+ const rawRates = this.safeList(response, 'results', []);
97519
+ return this.parseFundingRateHistories(rawRates, market, since, limit);
97520
+ }
97521
+ parseFundingRateHistory(info, market = undefined) {
97522
+ return this.parseFundingRate(info, market);
97523
+ }
97524
+ parseFundingRate(contract, market = undefined) {
97525
+ //
97526
+ // {
97527
+ // "instrument_id":"149264167780483072",
97528
+ // "funding_rate":"0.000011",
97529
+ // "mark_price":"47388.1",
97530
+ // "event_time":"2024-02-10T16:00:00Z"
97531
+ // }
97532
+ //
97533
+ const fundingDatetime = this.safeString2(contract, 'event_time', 'time');
97534
+ return {
97535
+ 'info': contract,
97536
+ 'symbol': this.safeSymbol(undefined, market),
97537
+ 'markPrice': this.safeNumber(contract, 'mark_price'),
97538
+ 'indexPrice': undefined,
97539
+ 'interestRate': undefined,
97540
+ 'estimatedSettlePrice': undefined,
97541
+ 'timestamp': this.parse8601(fundingDatetime),
97542
+ 'datetime': fundingDatetime,
97543
+ 'fundingRate': this.safeNumber(contract, 'funding_rate'),
97544
+ 'fundingTimestamp': this.parse8601(fundingDatetime),
97545
+ 'fundingDatetime': fundingDatetime,
97546
+ 'nextFundingRate': undefined,
97547
+ 'nextFundingTimestamp': undefined,
97548
+ 'nextFundingDatetime': undefined,
97549
+ 'previousFundingRate': undefined,
97550
+ 'previousFundingTimestamp': undefined,
97551
+ 'previousFundingDatetime': undefined,
97552
+ };
97553
+ }
97554
+ async createDepositAddress(code, params = {}) {
97555
+ /**
97556
+ * @method
97557
+ * @name coinbaseinternational#createDepositAddress
97558
+ * @description create a currency deposit address
97559
+ * @see https://docs.cloud.coinbase.com/intx/reference/createaddress
97560
+ * @see https://docs.cloud.coinbase.com/intx/reference/createcounterpartyid
97561
+ * @param {string} code unified currency code of the currency for the deposit address
97562
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
97563
+ * @param {string} [params.network_arn_id] Identifies the blockchain network (e.g., networks/ethereum-mainnet/assets/313ef8a9-ae5a-5f2f-8a56-572c0e2a4d5a) if not provided will pick default
97564
+ * @param {string} [params.network] unified network code to identify the blockchain network
97565
+ * @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}
97566
+ */
97567
+ await this.loadMarkets();
97568
+ let method = undefined;
97569
+ [method, params] = this.handleOptionAndParams(params, 'createDepositAddress', 'method', 'v1PrivatePostTransfersAddress');
97570
+ let portfolio = undefined;
97571
+ [portfolio, params] = await this.handlePortfolioAndParams('createDepositAddress', params);
97572
+ const request = {
97573
+ 'portfolio': portfolio,
97574
+ };
97575
+ if (method === 'v1PrivatePostTransfersAddress') {
97576
+ const currency = this.currency(code);
97577
+ request['asset'] = currency['id'];
97578
+ let networkId = undefined;
97579
+ [networkId, params] = await this.handleNetworkIdAndParams(code, 'createDepositAddress', params);
97580
+ request['network_arn_id'] = networkId;
97581
+ }
97582
+ const response = await this[method](this.extend(request, params));
97583
+ //
97584
+ // v1PrivatePostTransfersAddress
97585
+ // {
97586
+ // address: "3LkwYscRyh6tUR1XTqXSJQoJnK7ucC1F4n",
97587
+ // network_arn_id: "networks/bitcoin-mainnet/assets/6ecc0dcc-10a2-500e-b315-a3b9abae19ce",
97588
+ // destination_tag: "",
97589
+ // }
97590
+ // v1PrivatePostTransfersCreateCounterpartyId
97591
+ // {
97592
+ // "portfolio_uuid":"018e0a8b-6b6b-70e0-9689-1e7926c2c8bc",
97593
+ // "counterparty_id":"CB2ZPUCZBE"
97594
+ // }
97595
+ //
97596
+ const tag = this.safeString(response, 'destination_tag');
97597
+ const address = this.safeString2(response, 'address', 'counterparty_id');
97598
+ return {
97599
+ 'currency': code,
97600
+ 'tag': tag,
97601
+ 'address': address,
97602
+ 'info': response,
97603
+ };
97604
+ }
97605
+ findDefaultNetwork(networks) {
97606
+ const networksArray = this.toArray(networks);
97607
+ for (let i = 0; i < networksArray.length; i++) {
97608
+ const info = networksArray[i]['info'];
97609
+ const is_default = this.safeBool(info, 'is_default', false);
97610
+ if (is_default === true) {
97611
+ return networksArray[i];
97612
+ }
97613
+ }
97614
+ return networksArray[0];
97615
+ }
97616
+ async loadCurrencyNetworks(code, params = {}) {
97617
+ const currency = this.currency(code);
97618
+ const networks = this.safeDict(currency, 'networks');
97619
+ if (networks !== undefined) {
97620
+ return;
97621
+ }
97622
+ const request = {
97623
+ 'asset': currency['id'],
97624
+ };
97625
+ const rawNetworks = await this.v1PublicGetAssetsAssetNetworks(request);
97626
+ //
97627
+ // [
97628
+ // {
97629
+ // "asset_id":"1",
97630
+ // "asset_uuid":"2b92315d-eab7-5bef-84fa-089a131333f5",
97631
+ // "asset_name":"USDC",
97632
+ // "network_arn_id":"networks/ethereum-mainnet/assets/9bc140b4-69c3-5fc9-bd0d-b041bcf40039",
97633
+ // "min_withdrawal_amt":"1",
97634
+ // "max_withdrawal_amt":"100000000",
97635
+ // "network_confirms":35,
97636
+ // "processing_time":485,
97637
+ // "is_default":true,
97638
+ // "network_name":"ethereum",
97639
+ // "display_name":"Ethereum"
97640
+ // },
97641
+ // ....
97642
+ // ]
97643
+ //
97644
+ currency['networks'] = this.parseNetworks(rawNetworks);
97645
+ }
97646
+ parseNetworks(networks, params = {}) {
97647
+ const result = {};
97648
+ for (let i = 0; i < networks.length; i++) {
97649
+ const network = this.extend(this.parseNetwork(networks[i]), params);
97650
+ result[network['network']] = network;
97651
+ }
97652
+ return result;
97653
+ }
97654
+ parseNetwork(network, params = {}) {
97655
+ //
97656
+ // {
97657
+ // "asset_id":"1",
97658
+ // "asset_uuid":"2b92315d-eab7-5bef-84fa-089a131333f5",
97659
+ // "asset_name":"USDC",
97660
+ // "network_arn_id":"networks/ethereum-mainnet/assets/9bc140b4-69c3-5fc9-bd0d-b041bcf40039",
97661
+ // "min_withdrawal_amt":"1",
97662
+ // "max_withdrawal_amt":"100000000",
97663
+ // "network_confirms":35,
97664
+ // "processing_time":485,
97665
+ // "is_default":true,
97666
+ // "network_name":"ethereum",
97667
+ // "display_name":"Ethereum"
97668
+ // }
97669
+ //
97670
+ const currencyId = this.safeString(network, 'asset_name');
97671
+ const currencyCode = this.safeCurrencyCode(currencyId);
97672
+ const networkId = this.safeString(network, 'network_arn_id');
97673
+ return this.safeNetwork({
97674
+ 'info': network,
97675
+ 'id': networkId,
97676
+ 'name': this.safeString(network, 'display_name'),
97677
+ 'network': this.networkIdToCode(this.safeStringN(network, ['network_name', 'display_name', 'network_arn_id'], ''), currencyCode),
97678
+ 'active': undefined,
97679
+ 'deposit': undefined,
97680
+ 'withdraw': undefined,
97681
+ 'precision': undefined,
97682
+ 'fee': undefined,
97683
+ 'limits': {
97684
+ 'withdraw': {
97685
+ 'min': this.safeNumber(network, 'min_withdrawal_amt'),
97686
+ 'max': this.safeNumber(network, 'max_withdrawal_amt'),
97687
+ },
97688
+ 'deposit': {
97689
+ 'min': undefined,
97690
+ 'max': undefined,
97691
+ },
97692
+ },
97693
+ });
97694
+ }
97695
+ async setMargin(symbol, amount, params = {}) {
97696
+ /**
97697
+ * @method
97698
+ * @name coinbaseinternational#setMargin
97699
+ * @description Either adds or reduces margin in order to set the margin to a specific value
97700
+ * @see https://docs.cloud.coinbase.com/intx/reference/setportfoliomarginoverride
97701
+ * @param {string} symbol unified market symbol of the market to set margin in
97702
+ * @param {float} amount the amount to set the margin to
97703
+ * @param {object} [params] parameters specific to the exchange API endpoint
97704
+ * @returns {object} A [margin structure]{@link https://github.com/ccxt/ccxt/wiki/Manual#add-margin-structure}
97705
+ */
97706
+ let portfolio = undefined;
97707
+ [portfolio, params] = await this.handlePortfolioAndParams('setMargin', params);
97708
+ if (symbol !== undefined) {
97709
+ throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest(this.id + ' setMargin() only allows setting margin to full portfolio');
97710
+ }
97711
+ const request = {
97712
+ 'portfolio': portfolio,
97713
+ 'margin_override': amount,
97714
+ };
97715
+ return await this.v1PrivatePostPortfoliosMargin(this.extend(request, params));
97716
+ }
97717
+ async fetchDepositsWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {
97718
+ /**
97719
+ * @method
97720
+ * @name exchange#fetchDepositsWithdrawals
97721
+ * @description fetch history of deposits and withdrawals
97722
+ * @see https://docs.cloud.coinbase.com/intx/reference/gettransfers
97723
+ * @param {string} [code] unified currency code for the currency of the deposit/withdrawals, default is undefined
97724
+ * @param {int} [since] timestamp in ms of the earliest deposit/withdrawal, default is undefined
97725
+ * @param {int} [limit] max number of deposit/withdrawals to return, default is undefined
97726
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
97727
+ * @param {string} [params.portfolios] Identifies the portfolios by UUID (e.g., 892e8c7c-e979-4cad-b61b-55a197932cf1) or portfolio ID (e.g., 5189861793641175). Can provide single or multiple portfolios to filter by or fetches transfers for all portfolios if none are provided.
97728
+ * @param {int} [params.until] Only find transfers updated before this time. Use timestamp format
97729
+ * @param {string} [params.status] The current status of transfer. Possible values: [PROCESSED, NEW, FAILED, STARTED]
97730
+ * @param {string} [params.type] The type of transfer Possible values: [DEPOSIT, WITHDRAW, REBATE, STIPEND, INTERNAL, FUNDING]
97731
+ * @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)
97732
+ * @returns {object} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
97733
+ */
97734
+ await this.loadMarkets();
97735
+ let paginate = undefined;
97736
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchDepositsWithdrawals', 'paginate');
97737
+ let maxEntriesPerRequest = undefined;
97738
+ [maxEntriesPerRequest, params] = this.handleOptionAndParams(params, 'fetchDepositsWithdrawals', 'maxEntriesPerRequest', 100);
97739
+ const pageKey = 'ccxtPageKey';
97740
+ if (paginate) {
97741
+ return await this.fetchPaginatedCallIncremental('fetchDepositsWithdrawals', code, since, limit, params, pageKey, maxEntriesPerRequest);
97742
+ }
97743
+ const page = this.safeInteger(params, pageKey, 1) - 1;
97744
+ const request = {
97745
+ 'result_offset': this.safeInteger2(params, 'offset', 'result_offset', page * maxEntriesPerRequest),
97746
+ };
97747
+ if (since !== undefined) {
97748
+ request['time_from'] = this.iso8601(since);
97749
+ }
97750
+ if (limit !== undefined) {
97751
+ const newLimit = Math.min(limit, 100);
97752
+ request['result_limit'] = newLimit;
97753
+ }
97754
+ let portfolios = undefined;
97755
+ [portfolios, params] = this.handleOptionAndParams(params, 'fetchDepositsWithdrawals', 'portfolios');
97756
+ if (portfolios !== undefined) {
97757
+ request['portfolios'] = portfolios;
97758
+ }
97759
+ let until = undefined;
97760
+ [until, params] = this.handleOptionAndParams(params, 'fetchDepositsWithdrawals', 'until');
97761
+ if (until !== undefined) {
97762
+ request['time_to'] = this.iso8601(until);
97763
+ }
97764
+ const response = await this.v1PrivateGetTransfers(this.extend(request, params));
97765
+ //
97766
+ // {
97767
+ // "pagination":{
97768
+ // "result_limit":25,
97769
+ // "result_offset":0
97770
+ // },
97771
+ // "results":[
97772
+ // {
97773
+ // "transfer_uuid":"8e471d77-4208-45a8-9e5b-f3bd8a2c1fc3",
97774
+ // "transfer_type":"WITHDRAW",
97775
+ // "amount":"1.000000",
97776
+ // "asset":"USDC",
97777
+ // "status":"PROCESSED",
97778
+ // "network_name":"ethereum",
97779
+ // "created_at":"2024-03-14T02:32:18.497795Z",
97780
+ // "updated_at":"2024-03-14T02:35:38.514588Z",
97781
+ // "from_portfolio":{
97782
+ // "id":"1yun54bb-1-6",
97783
+ // "uuid":"018e0a8b-6b6b-70e0-9689-1e7926c2c8bc",
97784
+ // "name":"fungus technology o?Portfolio"
97785
+ // },
97786
+ // "to_address":"0xcdcE79F820BE9d6C5033db5c31d1AE3A8c2399bB"
97787
+ // }
97788
+ // ]
97789
+ // }
97790
+ //
97791
+ const rawTransactions = this.safeList(response, 'results', []);
97792
+ return this.parseTransactions(rawTransactions);
97793
+ }
97794
+ async fetchPosition(symbol, params = {}) {
97795
+ /**
97796
+ * @method
97797
+ * @name coinbaseinternational#fetchPosition
97798
+ * @see https://docs.cloud.coinbase.com/intx/reference/getportfolioposition
97799
+ * @description fetch data on an open position
97800
+ * @param {string} symbol unified market symbol of the market the position is held in
97801
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
97802
+ * @returns {object} a [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}
97803
+ */
97804
+ await this.loadMarkets();
97805
+ symbol = this.symbol(symbol);
97806
+ let portfolio = undefined;
97807
+ [portfolio, params] = await this.handlePortfolioAndParams('fetchPosition', params);
97808
+ const request = {
97809
+ 'portfolio': portfolio,
97810
+ 'instrument': this.marketId(symbol),
97811
+ };
97812
+ const position = await this.v1PrivateGetPortfoliosPortfolioPositionsInstrument(this.extend(request, params));
97813
+ //
97814
+ // {
97815
+ // "symbol":"BTC-PERP",
97816
+ // "instrument_id":"114jqr89-0-0",
97817
+ // "instrument_uuid":"b3469e0b-222c-4f8a-9f68-1f9e44d7e5e0",
97818
+ // "vwap":"52482.3",
97819
+ // "net_size":"0",
97820
+ // "buy_order_size":"0.001",
97821
+ // "sell_order_size":"0",
97822
+ // "im_contribution":"0.2",
97823
+ // "unrealized_pnl":"0",
97824
+ // "mark_price":"52406.8",
97825
+ // "entry_vwap":"52472.9"
97826
+ // }
97827
+ //
97828
+ return this.parsePosition(position);
97829
+ }
97830
+ parsePosition(position, market = undefined) {
97831
+ //
97832
+ // {
97833
+ // "symbol":"BTC-PERP",
97834
+ // "instrument_id":"114jqr89-0-0",
97835
+ // "instrument_uuid":"b3469e0b-222c-4f8a-9f68-1f9e44d7e5e0",
97836
+ // "vwap":"52482.3",
97837
+ // "net_size":"0",
97838
+ // "buy_order_size":"0.001",
97839
+ // "sell_order_size":"0",
97840
+ // "im_contribution":"0.2",
97841
+ // "unrealized_pnl":"0",
97842
+ // "mark_price":"52406.8",
97843
+ // "entry_vwap":"52472.9"
97844
+ // }
97845
+ //
97846
+ const marketId = this.safeString(position, 'symbol');
97847
+ let quantity = this.safeString(position, 'net_size');
97848
+ market = this.safeMarket(marketId, market, '-');
97849
+ let side = 'long';
97850
+ if (_base_Precise_js__WEBPACK_IMPORTED_MODULE_3__/* .Precise */ .O.stringLe(quantity, '0')) {
97851
+ side = 'short';
97852
+ quantity = _base_Precise_js__WEBPACK_IMPORTED_MODULE_3__/* .Precise */ .O.stringMul('-1', quantity);
97853
+ }
97854
+ return this.safePosition({
97855
+ 'info': position,
97856
+ 'id': this.safeString(position, 'id'),
97857
+ 'symbol': market['symbol'],
97858
+ 'entryPrice': undefined,
97859
+ 'markPrice': this.safeNumber(position, 'mark_price'),
97860
+ 'notional': undefined,
97861
+ 'collateral': undefined,
97862
+ 'unrealizedPnl': this.safeNumber(position, 'unrealized_pnl'),
97863
+ 'side': side,
97864
+ 'contracts': this.parseNumber(quantity),
97865
+ 'contractSize': this.safeNumber(market, 'contractSize'),
97866
+ 'timestamp': undefined,
97867
+ 'datetime': undefined,
97868
+ 'hedged': undefined,
97869
+ 'maintenanceMargin': undefined,
97870
+ 'maintenanceMarginPercentage': undefined,
97871
+ 'initialMargin': this.safeNumber(position, 'im_contribution'),
97872
+ 'initialMarginPercentage': undefined,
97873
+ 'leverage': undefined,
97874
+ 'liquidationPrice': undefined,
97875
+ 'marginRatio': undefined,
97876
+ 'marginMode': undefined,
97877
+ 'percentage': undefined,
97878
+ });
97879
+ }
97880
+ async fetchPositions(symbols = undefined, params = {}) {
97881
+ /**
97882
+ * @method
97883
+ * @name coinbaseinternational#fetchPositions
97884
+ * @see https://docs.cloud.coinbase.com/intx/reference/getportfoliopositions
97885
+ * @description fetch all open positions
97886
+ * @param {string[]} [symbols] list of unified market symbols
97887
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
97888
+ * @param {string} [method] method name to call, "positionRisk", "account" or "option", default is "positionRisk"
97889
+ * @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}
97890
+ */
97891
+ await this.loadMarkets();
97892
+ let portfolio = undefined;
97893
+ [portfolio, params] = await this.handlePortfolioAndParams('fetchPositions', params);
97894
+ const request = {
97895
+ 'portfolio': portfolio,
97896
+ };
97897
+ const response = await this.v1PrivateGetPortfoliosPortfolioPositions(this.extend(request, params));
97898
+ //
97899
+ // [
97900
+ // {
97901
+ // "symbol":"BTC-PERP",
97902
+ // "instrument_id":"114jqr89-0-0",
97903
+ // "instrument_uuid":"b3469e0b-222c-4f8a-9f68-1f9e44d7e5e0",
97904
+ // "vwap":"52482.3",
97905
+ // "net_size":"0",
97906
+ // "buy_order_size":"0.001",
97907
+ // "sell_order_size":"0",
97908
+ // "im_contribution":"0.2",
97909
+ // "unrealized_pnl":"0",
97910
+ // "mark_price":"52406.8",
97911
+ // "entry_vwap":"52472.9"
97912
+ // }
97913
+ // ]
97914
+ //
97915
+ const positions = this.parsePositions(response);
97916
+ if (this.isEmpty(symbols)) {
97917
+ return positions;
97918
+ }
97919
+ symbols = this.marketSymbols(symbols);
97920
+ return this.filterByArrayPositions(positions, 'symbol', symbols, false);
97921
+ }
97922
+ async fetchWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {
97923
+ /**
97924
+ * @method
97925
+ * @name coinbaseinternational#fetchWithdrawals
97926
+ * @description fetch all withdrawals made from an account
97927
+ * @see https://docs.cloud.coinbase.com/intx/reference/gettransfers
97928
+ * @param {string} code unified currency code
97929
+ * @param {int} [since] the earliest time in ms to fetch withdrawals for
97930
+ * @param {int} [limit] the maximum number of withdrawals structures to retrieve
97931
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
97932
+ * @param {string} [params.portfolios] Identifies the portfolios by UUID (e.g., 892e8c7c-e979-4cad-b61b-55a197932cf1) or portfolio ID (e.g., 5189861793641175). Can provide single or multiple portfolios to filter by or fetches transfers for all portfolios if none are provided.
97933
+ * @param {int} [params.until] Only find transfers updated before this time. Use timestamp format
97934
+ * @param {string} [params.status] The current status of transfer. Possible values: [PROCESSED, NEW, FAILED, STARTED]
97935
+ * @param {string} [params.type] The type of transfer Possible values: [DEPOSIT, WITHDRAW, REBATE, STIPEND, INTERNAL, FUNDING]
97936
+ * @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)
97937
+ * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
97938
+ */
97939
+ await this.loadMarkets();
97940
+ params['type'] = 'WITHDRAW';
97941
+ return await this.fetchDepositsWithdrawals(code, since, limit, params);
97942
+ }
97943
+ async fetchDeposits(code = undefined, since = undefined, limit = undefined, params = {}) {
97944
+ /**
97945
+ * @method
97946
+ * @name coinbaseinternational#fetchDeposits
97947
+ * @description fetch all deposits made to an account
97948
+ * @param {string} code unified currency code
97949
+ * @param {int} [since] the earliest time in ms to fetch deposits for
97950
+ * @param {int} [limit] the maximum number of deposits structures to retrieve
97951
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
97952
+ * @param {string} [params.portfolios] Identifies the portfolios by UUID (e.g., 892e8c7c-e979-4cad-b61b-55a197932cf1) or portfolio ID (e.g., 5189861793641175). Can provide single or multiple portfolios to filter by or fetches transfers for all portfolios if none are provided.
97953
+ * @param {int} [params.until] Only find transfers updated before this time. Use timestamp format
97954
+ * @param {string} [params.status] The current status of transfer. Possible values: [PROCESSED, NEW, FAILED, STARTED]
97955
+ * @param {string} [params.type] The type of transfer Possible values: [DEPOSIT, WITHDRAW, REBATE, STIPEND, INTERNAL, FUNDING]
97956
+ * @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)
97957
+ * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
97958
+ */
97959
+ await this.loadMarkets();
97960
+ params['type'] = 'DEPOSIT';
97961
+ return await this.fetchDepositsWithdrawals(code, since, limit, params);
97962
+ }
97963
+ parseTransactionStatus(status) {
97964
+ const statuses = {
97965
+ 'PROCESSED': 'ok',
97966
+ 'NEW': 'pending',
97967
+ 'STARTED': 'pending',
97968
+ 'FAILED': 'canceled',
97969
+ };
97970
+ return this.safeString(statuses, status, status);
97971
+ }
97972
+ parseTransaction(transaction, currency = undefined) {
97973
+ //
97974
+ // {
97975
+ // "idem":"8e471d77-4208-45a8-9e5b-f3bd8a2c1fc3"
97976
+ // }
97977
+ // const transactionType = this.safeString (transaction, 'type');
97978
+ const datetime = this.safeString(transaction, 'updated_at');
97979
+ const fromPorfolio = this.safeDict(transaction, 'from_portfolio', {});
97980
+ const addressFrom = this.safeStringN(transaction, ['from_address', 'from_cb_account', this.safeStringN(fromPorfolio, ['id', 'uuid', 'name']), 'from_counterparty_id']);
97981
+ const toPorfolio = this.safeDict(transaction, 'from_portfolio', {});
97982
+ const addressTo = this.safeStringN(transaction, ['to_address', 'to_cb_account', this.safeStringN(toPorfolio, ['id', 'uuid', 'name']), 'to_counterparty_id']);
97983
+ return {
97984
+ 'info': transaction,
97985
+ 'id': this.safeString(transaction, 'transfer_uuid'),
97986
+ 'txid': this.safeString(transaction, 'transaction_uuid'),
97987
+ 'timestamp': this.parse8601(datetime),
97988
+ 'datetime': datetime,
97989
+ 'network': this.networkIdToCode(this.safeString(transaction, 'network_name')),
97990
+ 'address': undefined,
97991
+ 'addressTo': addressTo,
97992
+ 'addressFrom': addressFrom,
97993
+ 'tag': undefined,
97994
+ 'tagTo': undefined,
97995
+ 'tagFrom': undefined,
97996
+ 'type': this.safeString(transaction, 'resource'),
97997
+ 'amount': this.safeNumber(transaction, 'amount'),
97998
+ 'currency': this.safeCurrencyCode(this.safeString(transaction, 'asset'), currency),
97999
+ 'status': this.parseTransactionStatus(this.safeString(transaction, 'status')),
98000
+ 'updated': this.parse8601(datetime),
98001
+ 'fee': {
98002
+ 'cost': undefined,
98003
+ 'currency': undefined,
98004
+ },
98005
+ };
98006
+ }
98007
+ parseTrade(trade, market = undefined) {
98008
+ //
98009
+ // {
98010
+ // "portfolio_id":"1wp37qsc-1-0",
98011
+ // "portfolio_uuid":"018d7f6c-b92c-7361-8b7e-2932711e5a22",
98012
+ // "portfolio_name":"CCXT Portfolio 020624-17:16",
98013
+ // "fill_id":"1xbfy19y-1-184",
98014
+ // "exec_id":"280841526207070392",
98015
+ // "order_id":"1xbfv8yw-1-0",
98016
+ // "instrument_id":"114jqr89-0-0",
98017
+ // "instrument_uuid":"b3469e0b-222c-4f8a-9f68-1f9e44d7e5e0",
98018
+ // "symbol":"BTC-PERP",
98019
+ // "match_id":"280841526207053840",
98020
+ // "fill_price":"52500",
98021
+ // "fill_qty":"0.01",
98022
+ // "client_id":"1x59ctku-1-1",
98023
+ // "client_order_id":"ccxt3e4e2a5f-4a89-",
98024
+ // "order_qty":"0.01",
98025
+ // "limit_price":"52500",
98026
+ // "total_filled":"0.01",
98027
+ // "filled_vwap":"52500",
98028
+ // "expire_time":"",
98029
+ // "stop_price":"",
98030
+ // "side":"BUY",
98031
+ // "tif":"GTC",
98032
+ // "stp_mode":"BOTH",
98033
+ // "flags":"",
98034
+ // "fee":"0.105",
98035
+ // "fee_asset":"USDC",
98036
+ // "order_status":"DONE",
98037
+ // "event_time":"2024-02-15T00:43:57.631Z"
98038
+ // }
98039
+ //
98040
+ const marketId = this.safeString(trade, 'symbol');
98041
+ const datetime = this.safeString(trade, 'event_time');
98042
+ return this.safeTrade({
98043
+ 'info': trade,
98044
+ 'id': this.safeString2(trade, 'fill_id', 'exec_id'),
98045
+ 'order': this.safeString(trade, 'order_id'),
98046
+ 'timestamp': this.parse8601(datetime),
98047
+ 'datetime': datetime,
98048
+ 'symbol': this.safeSymbol(marketId, market),
98049
+ 'type': undefined,
98050
+ 'side': this.safeStringLower(trade, 'side'),
98051
+ 'takerOrMaker': undefined,
98052
+ 'price': this.safeNumber(trade, 'fill_price'),
98053
+ 'amount': this.safeNumber(trade, 'fill_qty'),
98054
+ 'cost': undefined,
98055
+ 'fee': {
98056
+ 'cost': this.safeNumber(trade, 'fee'),
98057
+ 'currency': this.safeCurrencyCode(this.safeString(trade, 'fee_asset')),
98058
+ },
98059
+ });
98060
+ }
98061
+ async fetchMarkets(params = {}) {
98062
+ /**
98063
+ * @method
98064
+ * @name coinbaseinternational#fetchMarkets
98065
+ * @see https://docs.cloud.coinbase.com/intx/reference/getinstruments
98066
+ * @description retrieves data on all markets for coinbaseinternational
98067
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
98068
+ * @returns {object[]} an array of objects representing market data
98069
+ */
98070
+ const response = await this.v1PublicGetInstruments(params);
98071
+ //
98072
+ // [
98073
+ // {
98074
+ // "instrument_id":"149264164756389888",
98075
+ // "instrument_uuid":"e9360798-6a10-45d6-af05-67c30eb91e2d",
98076
+ // "symbol":"ETH-PERP",
98077
+ // "type":"PERP",
98078
+ // "base_asset_id":"118059611793145856",
98079
+ // "base_asset_uuid":"d85dce9b-5b73-5c3c-8978-522ce1d1c1b4",
98080
+ // "base_asset_name":"ETH",
98081
+ // "quote_asset_id":"1",
98082
+ // "quote_asset_uuid":"2b92315d-eab7-5bef-84fa-089a131333f5",
98083
+ // "quote_asset_name":"USDC",
98084
+ // "base_increment":"0.0001",
98085
+ // "quote_increment":"0.01",
98086
+ // "price_band_percent":"0.02",
98087
+ // "market_order_percent":"0.0075",
98088
+ // "qty_24hr":"44434.8131",
98089
+ // "notional_24hr":"110943454.279785",
98090
+ // "avg_daily_qty":"1099171.6025",
98091
+ // "avg_daily_notional":"2637240145.456987",
98092
+ // "previous_day_qty":"78909.3939",
98093
+ // "open_interest":"1270.749",
98094
+ // "position_limit_qty":"1831.9527",
98095
+ // "position_limit_adq_pct":"0.05",
98096
+ // "replacement_cost":"0.23",
98097
+ // "base_imf":"0.1",
98098
+ // "min_notional_value":"10",
98099
+ // "funding_interval":"3600000000000",
98100
+ // "trading_state":"TRADING",
98101
+ // "quote":{
98102
+ // "best_bid_price":"2490.8",
98103
+ // "best_bid_size":"9.0515",
98104
+ // "best_ask_price":"2490.81",
98105
+ // "best_ask_size":"4.8486",
98106
+ // "trade_price":"2490.39",
98107
+ // "trade_qty":"0.9508",
98108
+ // "index_price":"2490.5",
98109
+ // "mark_price":"2490.8",
98110
+ // "settlement_price":"2490.81",
98111
+ // "limit_up":"2615.42",
98112
+ // "limit_down":"2366.34",
98113
+ // "predicted_funding":"0.000009",
98114
+ // "timestamp":"2024-02-10T16:07:39.454Z"
98115
+ // }
98116
+ // },
98117
+ // ...
98118
+ // ]
98119
+ //
98120
+ return this.parseMarkets(response);
98121
+ }
98122
+ parseMarket(market) {
98123
+ //
98124
+ // {
98125
+ // "instrument_id":"149264164756389888",
98126
+ // "instrument_uuid":"e9360798-6a10-45d6-af05-67c30eb91e2d",
98127
+ // "symbol":"ETH-PERP",
98128
+ // "type":"PERP",
98129
+ // "base_asset_id":"118059611793145856",
98130
+ // "base_asset_uuid":"d85dce9b-5b73-5c3c-8978-522ce1d1c1b4",
98131
+ // "base_asset_name":"ETH",
98132
+ // "quote_asset_id":"1",
98133
+ // "quote_asset_uuid":"2b92315d-eab7-5bef-84fa-089a131333f5",
98134
+ // "quote_asset_name":"USDC",
98135
+ // "base_increment":"0.0001",
98136
+ // "quote_increment":"0.01",
98137
+ // "price_band_percent":"0.02",
98138
+ // "market_order_percent":"0.0075",
98139
+ // "qty_24hr":"44434.8131",
98140
+ // "notional_24hr":"110943454.279785",
98141
+ // "avg_daily_qty":"1099171.6025",
98142
+ // "avg_daily_notional":"2637240145.456987",
98143
+ // "previous_day_qty":"78909.3939",
98144
+ // "open_interest":"1270.749",
98145
+ // "position_limit_qty":"1831.9527",
98146
+ // "position_limit_adq_pct":"0.05",
98147
+ // "replacement_cost":"0.23",
98148
+ // "base_imf":"0.1",
98149
+ // "min_notional_value":"10",
98150
+ // "funding_interval":"3600000000000",
98151
+ // "trading_state":"TRADING",
98152
+ // "quote":{
98153
+ // "best_bid_price":"2490.8",
98154
+ // "best_bid_size":"9.0515",
98155
+ // "best_ask_price":"2490.81",
98156
+ // "best_ask_size":"4.8486",
98157
+ // "trade_price":"2490.39",
98158
+ // "trade_qty":"0.9508",
98159
+ // "index_price":"2490.5",
98160
+ // "mark_price":"2490.8",
98161
+ // "settlement_price":"2490.81",
98162
+ // "limit_up":"2615.42",
98163
+ // "limit_down":"2366.34",
98164
+ // "predicted_funding":"0.000009",
98165
+ // "timestamp":"2024-02-10T16:07:39.454Z"
98166
+ // }
98167
+ // }
98168
+ //
98169
+ const marketId = this.safeString(market, 'symbol');
98170
+ const baseId = this.safeString(market, 'base_asset_name');
98171
+ const quoteId = this.safeString(market, 'quote_asset_name');
98172
+ const typeId = this.safeString(market, 'type'); // 'SPOT', 'PERP'
98173
+ const isSpot = (typeId === 'SPOT');
98174
+ const fees = this.fees;
98175
+ let symbol = baseId + '/' + quoteId;
98176
+ let settleId = undefined;
98177
+ if (!isSpot) {
98178
+ settleId = quoteId;
98179
+ symbol += ':' + quoteId;
98180
+ }
98181
+ return {
98182
+ 'id': marketId,
98183
+ 'lowercaseId': marketId.toLowerCase(),
98184
+ 'symbol': symbol,
98185
+ 'base': baseId,
98186
+ 'quote': quoteId,
98187
+ 'settle': settleId ? settleId : undefined,
98188
+ 'baseId': baseId,
98189
+ 'quoteId': quoteId,
98190
+ 'settleId': settleId ? settleId : undefined,
98191
+ 'type': isSpot ? 'spot' : 'swap',
98192
+ 'spot': isSpot,
98193
+ 'margin': false,
98194
+ 'swap': !isSpot,
98195
+ 'future': false,
98196
+ 'option': false,
98197
+ 'active': this.safeString(market, 'trading_state') === 'TRADING',
98198
+ 'contract': !isSpot,
98199
+ 'linear': isSpot ? undefined : (settleId === quoteId),
98200
+ 'inverse': isSpot ? undefined : (settleId !== quoteId),
98201
+ 'taker': fees['trading']['taker'],
98202
+ 'maker': fees['trading']['maker'],
98203
+ 'contractSize': isSpot ? undefined : 1,
98204
+ 'expiry': undefined,
98205
+ 'expiryDatetime': undefined,
98206
+ 'strike': undefined,
98207
+ 'optionType': undefined,
98208
+ 'precision': {
98209
+ 'amount': this.safeNumber(market, 'base_increment'),
98210
+ 'price': this.safeNumber(market, 'quote_increment'),
98211
+ 'cost': this.safeNumber(market, 'quote_increment'),
98212
+ },
98213
+ 'limits': {
98214
+ 'leverage': {
98215
+ 'min': undefined,
98216
+ 'max': this.safeNumber(market, 'base_imf'),
98217
+ },
98218
+ 'amount': {
98219
+ 'min': undefined,
98220
+ 'max': isSpot ? undefined : this.safeNumber(market, 'position_limit_qty'),
98221
+ },
98222
+ 'price': {
98223
+ 'min': undefined,
98224
+ 'max': undefined,
98225
+ },
98226
+ 'cost': {
98227
+ 'min': this.safeNumber(market, 'min_notional_value'),
98228
+ 'max': undefined,
98229
+ },
98230
+ },
98231
+ 'info': market,
98232
+ 'created': undefined,
98233
+ };
98234
+ }
98235
+ async fetchCurrencies(params = {}) {
98236
+ /**
98237
+ * @method
98238
+ * @name coinbaseinternational#fetchCurrencies
98239
+ * @description fetches all available currencies on an exchange
98240
+ * @see https://docs.cloud.coinbase.com/intx/reference/getassets
98241
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
98242
+ * @returns {object} an associative dictionary of currencies
98243
+ */
98244
+ const currencies = await this.v1PublicGetAssets(params);
98245
+ //
98246
+ // [
98247
+ // {
98248
+ // "asset_id":"1",
98249
+ // "asset_uuid":"2b92315d-eab7-5bef-84fa-089a131333f5",
98250
+ // "asset_name":"USDC",
98251
+ // "status":"ACTIVE",
98252
+ // "collateral_weight":1.0,
98253
+ // "supported_networks_enabled":true
98254
+ // },
98255
+ // ...
98256
+ // ]
98257
+ //
98258
+ const result = {};
98259
+ for (let i = 0; i < currencies.length; i++) {
98260
+ const currency = this.parseCurrency(currencies[i]);
98261
+ result[currency['code']] = currency;
98262
+ }
98263
+ return result;
98264
+ }
98265
+ parseCurrency(currency) {
98266
+ //
98267
+ // {
98268
+ // "asset_id":"1",
98269
+ // "asset_uuid":"2b92315d-eab7-5bef-84fa-089a131333f5",
98270
+ // "asset_name":"USDC",
98271
+ // "status":"ACTIVE",
98272
+ // "collateral_weight":1.0,
98273
+ // "supported_networks_enabled":true
98274
+ // }
98275
+ //
98276
+ const id = this.safeString(currency, 'asset_name');
98277
+ const code = this.safeCurrencyCode(id);
98278
+ const statusId = this.safeString(currency, 'status');
98279
+ return {
98280
+ 'id': id,
98281
+ 'name': code,
98282
+ 'code': code,
98283
+ 'precision': undefined,
98284
+ 'info': currency,
98285
+ 'active': (statusId === 'ACTIVE'),
98286
+ 'deposit': undefined,
98287
+ 'withdraw': undefined,
98288
+ 'networks': undefined,
98289
+ 'fee': undefined,
98290
+ 'fees': undefined,
98291
+ 'limits': this.limits,
98292
+ };
98293
+ }
98294
+ async fetchTickers(symbols = undefined, params = {}) {
98295
+ /**
98296
+ * @method
98297
+ * @name coinbaseinternational#fetchTickers
98298
+ * @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
98299
+ * @see https://docs.cloud.coinbase.com/intx/reference/getinstruments
98300
+ * @param {string[]|undefined} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
98301
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
98302
+ * @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
98303
+ */
98304
+ await this.loadMarkets();
98305
+ symbols = this.marketSymbols(symbols);
98306
+ const instruments = await this.v1PublicGetInstruments(params);
98307
+ const tickers = {};
98308
+ for (let i = 0; i < instruments.length; i++) {
98309
+ const instrument = instruments[i];
98310
+ const marketId = this.safeString(instrument, 'symbol');
98311
+ const symbol = this.safeSymbol(marketId);
98312
+ const quote = this.safeDict(instrument, 'quote', {});
98313
+ tickers[symbol] = this.parseTicker(quote, this.safeMarket(marketId));
98314
+ }
98315
+ return this.filterByArray(tickers, 'symbol', symbols, true);
98316
+ }
98317
+ async fetchTicker(symbol, params = {}) {
98318
+ /**
98319
+ * @method
98320
+ * @name coinbaseinternational#fetchTicker
98321
+ * @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
98322
+ * @see https://docs.cloud.coinbase.com/intx/reference/getinstrumentquote
98323
+ * @param {string} symbol unified symbol of the market to fetch the ticker for
98324
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
98325
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
98326
+ */
98327
+ await this.loadMarkets();
98328
+ const market = this.market(symbol);
98329
+ const request = {
98330
+ 'instrument': this.marketId(symbol),
98331
+ };
98332
+ const ticker = await this.v1PublicGetInstrumentsInstrumentQuote(this.extend(request, params));
98333
+ return this.parseTicker(ticker, market);
98334
+ }
98335
+ parseTicker(ticker, market = undefined) {
98336
+ //
98337
+ // {
98338
+ // "best_bid_price":"2490.8",
98339
+ // "best_bid_size":"9.0515",
98340
+ // "best_ask_price":"2490.81",
98341
+ // "best_ask_size":"4.8486",
98342
+ // "trade_price":"2490.39",
98343
+ // "trade_qty":"0.9508",
98344
+ // "index_price":"2490.5",
98345
+ // "mark_price":"2490.8",
98346
+ // "settlement_price":"2490.81",
98347
+ // "limit_up":"2615.42",
98348
+ // "limit_down":"2366.34",
98349
+ // "predicted_funding":"0.000009",
98350
+ // "timestamp":"2024-02-10T16:07:39.454Z"
98351
+ // }
98352
+ //
98353
+ const datetime = this.safeString(ticker, 'timestamp');
98354
+ return this.safeTicker({
98355
+ 'info': ticker,
98356
+ 'symbol': this.safeSymbol(undefined, market),
98357
+ 'timestamp': this.parse8601(datetime),
98358
+ 'datetime': datetime,
98359
+ 'bid': this.safeNumber(ticker, 'best_bid_price'),
98360
+ 'bidVolume': this.safeNumber(ticker, 'best_bid_size'),
98361
+ 'ask': this.safeNumber(ticker, 'best_ask_price'),
98362
+ 'askVolume': this.safeNumber(ticker, 'best_ask_size'),
98363
+ 'high': undefined,
98364
+ 'low': undefined,
98365
+ 'open': undefined,
98366
+ 'close': undefined,
98367
+ 'last': undefined,
98368
+ 'change': undefined,
98369
+ 'percentage': undefined,
98370
+ 'average': undefined,
98371
+ 'vwap': undefined,
98372
+ 'baseVolume': undefined,
98373
+ 'quoteVolume': undefined,
98374
+ 'previousClose': undefined,
98375
+ });
98376
+ }
98377
+ async fetchBalance(params = {}) {
98378
+ /**
98379
+ * @method
98380
+ * @name coinbaseinternational#fetchBalance
98381
+ * @description query for balance and get the amount of funds available for trading or funds locked in orders
98382
+ * @see https://docs.cloud.coinbase.com/intx/reference/getportfoliobalances
98383
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
98384
+ * @param {boolean} [params.v3] default false, set true to use v3 api endpoint
98385
+ * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
98386
+ */
98387
+ await this.loadMarkets();
98388
+ let portfolio = undefined;
98389
+ [portfolio, params] = await this.handlePortfolioAndParams('fetchBalance', params);
98390
+ const request = {
98391
+ 'portfolio': portfolio,
98392
+ };
98393
+ const balances = await this.v1PrivateGetPortfoliosPortfolioBalances(this.extend(request, params));
98394
+ //
98395
+ // [
98396
+ // {
98397
+ // "asset_id":"0-0-1",
98398
+ // "asset_name":"USDC",
98399
+ // "asset_uuid":"2b92315d-eab7-5bef-84fa-089a131333f5",
98400
+ // "quantity":"500000.0000000000",
98401
+ // "hold":"0",
98402
+ // "hold_available_for_collateral":"0",
98403
+ // "transfer_hold":"0",
98404
+ // "collateral_value":"500000.0",
98405
+ // "max_withdraw_amount":"500000.0000000000",
98406
+ // "loan":"0",
98407
+ // "loan_collateral_requirement":"0.0"
98408
+ // }
98409
+ // ]
98410
+ //
98411
+ return this.parseBalance(balances);
98412
+ }
98413
+ parseBalance(response) {
98414
+ //
98415
+ // {
98416
+ // "asset_id":"0-0-1",
98417
+ // "asset_name":"USDC",
98418
+ // "asset_uuid":"2b92315d-eab7-5bef-84fa-089a131333f5",
98419
+ // "quantity":"500000.0000000000",
98420
+ // "hold":"0",
98421
+ // "hold_available_for_collateral":"0",
98422
+ // "transfer_hold":"0",
98423
+ // "collateral_value":"500000.0",
98424
+ // "max_withdraw_amount":"500000.0000000000",
98425
+ // "loan":"0",
98426
+ // "loan_collateral_requirement":"0.0"
98427
+ // }
98428
+ //
98429
+ const result = {
98430
+ 'info': response,
98431
+ };
98432
+ for (let i = 0; i < response.length; i++) {
98433
+ const rawBalance = response[i];
98434
+ const currencyId = this.safeString(rawBalance, 'asset_name');
98435
+ const code = this.safeCurrencyCode(currencyId);
98436
+ const account = this.account();
98437
+ account['total'] = this.safeString(rawBalance, 'quantity');
98438
+ account['used'] = this.safeString(rawBalance, 'hold');
98439
+ result[code] = account;
98440
+ }
98441
+ return this.safeBalance(result);
98442
+ }
98443
+ async transfer(code, amount, fromAccount, toAccount, params = {}) {
98444
+ /**
98445
+ * @method
98446
+ * @name coinbaseinternational#transfer
98447
+ * @description Transfer an amount of asset from one portfolio to another.
98448
+ * @see https://docs.cloud.coinbase.com/intx/reference/createportfolioassettransfer
98449
+ * @param {string} code unified currency code
98450
+ * @param {float} amount amount to transfer
98451
+ * @param {string} fromAccount account to transfer from
98452
+ * @param {string} toAccount account to transfer to
98453
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
98454
+ * @returns {object} a [transfer structure]{@link https://github.com/ccxt/ccxt/wiki/Manual#transfer-structure}
98455
+ */
98456
+ await this.loadMarkets();
98457
+ const currency = this.currency(code);
98458
+ const request = {
98459
+ 'asset': currency['id'],
98460
+ 'ammount': amount,
98461
+ 'from': fromAccount,
98462
+ 'to': toAccount,
98463
+ };
98464
+ const response = await this.v1PrivatePostPortfoliosTransfer(this.extend(request, params));
98465
+ const success = this.safeBool(response, 'success');
98466
+ return {
98467
+ 'info': response,
98468
+ 'id': undefined,
98469
+ 'timestamp': undefined,
98470
+ 'datetime': undefined,
98471
+ 'currency': code,
98472
+ 'amount': amount,
98473
+ 'fromAccount': fromAccount,
98474
+ 'toAccount': toAccount,
98475
+ 'status': success ? 'ok' : 'failed',
98476
+ };
98477
+ }
98478
+ async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
98479
+ /**
98480
+ * @method
98481
+ * @name coinbaseinternational#createOrder
98482
+ * @description create a trade order
98483
+ * @see https://docs.cloud.coinbase.com/intx/reference/createorder
98484
+ * @param {string} symbol unified symbol of the market to create an order in
98485
+ * @param {string} type 'market' or 'limit'
98486
+ * @param {string} side 'buy' or 'sell'
98487
+ * @param {float} amount how much you want to trade in units of the base currency, quote currency for 'market' 'buy' orders
98488
+ * @param {float} [price] the price to fulfill the order, in units of the quote currency, ignored in market orders
98489
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
98490
+ * @param {float} [params.stopPrice] price to trigger stop orders
98491
+ * @param {float} [params.triggerPrice] price to trigger stop orders
98492
+ * @param {float} [params.stopLossPrice] price to trigger stop-loss orders
98493
+ * @param {bool} [params.postOnly] true or false
98494
+ * @param {string} [params.tif] 'GTC', 'IOC', 'GTD' default is 'GTC' for limit orders and 'IOC' for market orders
98495
+ * @param {string} [params.expire_time] The expiration time required for orders with the time in force set to GTT. Must not go beyond 30 days of the current time. Uses ISO-8601 format (e.g., 2023-03-16T23:59:53Z)
98496
+ * @param {string} [params.stp_mode] Possible values: [NONE, AGGRESSING, BOTH] Specifies the behavior for self match handling. None disables the functionality, new cancels the newest order, and both cancels both orders.
98497
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
98498
+ */
98499
+ await this.loadMarkets();
98500
+ const market = this.market(symbol);
98501
+ let typeId = type.toUpperCase();
98502
+ const stopPrice = this.safeNumberN(params, ['triggerPrice', 'stopPrice', 'stop_price']);
98503
+ const clientOrderIdprefix = this.safeString(this.options, 'brokerId', 'nfqkvdjp');
98504
+ let clientOrderId = clientOrderIdprefix + '-' + this.uuid();
98505
+ clientOrderId = clientOrderId.slice(0, 17);
98506
+ const request = {
98507
+ 'client_order_id': clientOrderId,
98508
+ 'side': side.toUpperCase(),
98509
+ 'instrument': market['id'],
98510
+ 'size': this.amountToPrecision(market['symbol'], amount),
98511
+ };
98512
+ if (stopPrice !== undefined) {
98513
+ if (type === 'limit') {
98514
+ typeId = 'STOP_LIMIT';
98515
+ }
98516
+ else {
98517
+ typeId = 'STOP';
98518
+ }
98519
+ request['stop_price'] = stopPrice;
98520
+ }
98521
+ request['type'] = typeId;
98522
+ if (type === 'limit') {
98523
+ if (price === undefined) {
98524
+ throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InvalidOrder(this.id + 'createOrder() requires a price parameter for a limit order types');
98525
+ }
98526
+ request['price'] = price;
98527
+ }
98528
+ let portfolio = undefined;
98529
+ [portfolio, params] = await this.handlePortfolioAndParams('createOrder', params);
98530
+ if (portfolio !== undefined) {
98531
+ request['portfolio'] = portfolio;
98532
+ }
98533
+ const postOnly = this.safeBool2(params, 'postOnly', 'post_only');
98534
+ let tif = this.safeString2(params, 'tif', 'timeInForce');
98535
+ // market orders must be IOC
98536
+ if (typeId === 'MARKET') {
98537
+ if (tif !== undefined && tif !== 'IOC') {
98538
+ throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InvalidOrder(this.id + 'createOrder() market orders must have tif set to "IOC"');
98539
+ }
98540
+ tif = 'IOC';
98541
+ }
98542
+ else {
98543
+ tif = (tif === undefined) ? 'GTC' : tif;
98544
+ }
98545
+ if (postOnly !== undefined) {
98546
+ request['post_only'] = postOnly;
98547
+ }
98548
+ request['tif'] = tif;
98549
+ params = this.omit(params, ['client_order_id', 'user', 'postOnly', 'timeInForce']);
98550
+ const response = await this.v1PrivatePostOrders(this.extend(request, params));
98551
+ //
98552
+ // {
98553
+ // "order_id":"1x96skvg-1-0",
98554
+ // "client_order_id":"ccxt",
98555
+ // "side":"BUY",
98556
+ // "instrument_id":"114jqr89-0-0",
98557
+ // "instrument_uuid":"b3469e0b-222c-4f8a-9f68-1f9e44d7e5e0",
98558
+ // "symbol":"BTC-PERP",
98559
+ // "portfolio_id":"1wp37qsc-1-0",
98560
+ // "portfolio_uuid":"018d7f6c-b92c-7361-8b7e-2932711e5a22",
98561
+ // "type":"LIMIT",
98562
+ // "price":"10000",
98563
+ // "size":"0.001",
98564
+ // "tif":"GTC",
98565
+ // "stp_mode":"BOTH",
98566
+ // "event_type":"NEW",
98567
+ // "order_status":"WORKING",
98568
+ // "leaves_qty":"0.001",
98569
+ // "exec_qty":"0",
98570
+ // "avg_price":"0",
98571
+ // "fee":"0"
98572
+ // }
98573
+ //
98574
+ return this.parseOrder(response, market);
98575
+ }
98576
+ parseOrder(order, market = undefined) {
98577
+ //
98578
+ // {
98579
+ // "order_id":"1x96skvg-1-0",
98580
+ // "client_order_id":"ccxt",
98581
+ // "side":"BUY",
98582
+ // "instrument_id":"114jqr89-0-0",
98583
+ // "instrument_uuid":"b3469e0b-222c-4f8a-9f68-1f9e44d7e5e0",
98584
+ // "symbol":"BTC-PERP",
98585
+ // "portfolio_id":"1wp37qsc-1-0",
98586
+ // "portfolio_uuid":"018d7f6c-b92c-7361-8b7e-2932711e5a22",
98587
+ // "type":"LIMIT",
98588
+ // "price":"10000",
98589
+ // "size":"0.001",
98590
+ // "tif":"GTC",
98591
+ // "stp_mode":"BOTH",
98592
+ // "event_type":"NEW",
98593
+ // "order_status":"WORKING",
98594
+ // "leaves_qty":"0.001",
98595
+ // "exec_qty":"0",
98596
+ // "avg_price":"0",
98597
+ // "fee":"0"
98598
+ // }
98599
+ //
98600
+ const marketId = this.safeString(order, 'symbol');
98601
+ const feeCost = this.safeNumber(order, 'fee');
98602
+ let fee = undefined;
98603
+ if (feeCost !== undefined) {
98604
+ fee = {
98605
+ 'cost': feeCost,
98606
+ };
98607
+ }
98608
+ const datetime = this.safeString2(order, 'submit_time', 'event_time');
98609
+ return this.safeOrder({
98610
+ 'info': order,
98611
+ 'id': this.safeString(order, 'order_id'),
98612
+ 'clientOrderId': this.safeString(order, 'client_order_id'),
98613
+ 'timestamp': this.parse8601(datetime),
98614
+ 'datetime': datetime,
98615
+ 'lastTradeTimestamp': undefined,
98616
+ 'symbol': this.safeSymbol(marketId, market),
98617
+ 'type': this.parseOrderType(this.safeString(order, 'type')),
98618
+ 'timeInForce': this.safeString(order, 'tif'),
98619
+ 'postOnly': undefined,
98620
+ 'side': this.safeStringLower(order, 'side'),
98621
+ 'price': this.safeString(order, 'price'),
98622
+ 'stopPrice': this.safeString(order, 'stop_price'),
98623
+ 'triggerPrice': this.safeString(order, 'stop_price'),
98624
+ 'amount': this.safeString(order, 'size'),
98625
+ 'filled': this.safeString(order, 'exec_qty'),
98626
+ 'remaining': this.safeString(order, 'leaves_qty'),
98627
+ 'cost': undefined,
98628
+ 'average': this.safeString(order, 'avg_price'),
98629
+ 'status': this.parseOrderStatus(this.safeString(order, 'order_status')),
98630
+ 'fee': fee,
98631
+ 'trades': undefined,
98632
+ }, market);
98633
+ }
98634
+ parseOrderStatus(status) {
98635
+ const statuses = {
98636
+ 'NEW': 'open',
98637
+ 'PARTIAL_FILLED': 'open',
98638
+ 'FILLED': 'closed',
98639
+ 'CANCELED': 'canceled',
98640
+ 'REPLACED': 'canceled',
98641
+ 'PENDING_CANCEL': 'open',
98642
+ 'REJECTED': 'rejected',
98643
+ 'PENDING_NEW': 'open',
98644
+ 'EXPIRED': 'expired',
98645
+ 'PENDING_REPLACE': 'open',
98646
+ };
98647
+ return this.safeString(statuses, status, status);
98648
+ }
98649
+ parseOrderType(type) {
98650
+ if (type === 'UNKNOWN_ORDER_TYPE') {
98651
+ return undefined;
98652
+ }
98653
+ const types = {
98654
+ 'MARKET': 'market',
98655
+ 'LIMIT': 'limit',
98656
+ 'STOP': 'limit',
98657
+ 'STOP_LIMIT': 'limit',
98658
+ };
98659
+ return this.safeString(types, type, type);
98660
+ }
98661
+ async cancelOrder(id, symbol = undefined, params = {}) {
98662
+ /**
98663
+ * @method
98664
+ * @name coinbaseinternational#cancelOrder
98665
+ * @description cancels an open order
98666
+ * @see https://docs.cloud.coinbase.com/intx/reference/cancelorder
98667
+ * @param {string} id order id
98668
+ * @param {string} symbol not used by coinbaseinternational cancelOrder()
98669
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
98670
+ * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
98671
+ */
98672
+ await this.loadMarkets();
98673
+ let portfolio = undefined;
98674
+ [portfolio, params] = await this.handlePortfolioAndParams('cancelOrder', params);
98675
+ const request = {
98676
+ 'portfolio': portfolio,
98677
+ 'id': id,
98678
+ };
98679
+ let market = undefined;
98680
+ if (symbol !== undefined) {
98681
+ market = this.market(symbol);
98682
+ }
98683
+ const orders = await this.v1PrivateDeleteOrdersId(this.extend(request, params));
98684
+ //
98685
+ // {
98686
+ // "order_id":"1x96skvg-1-0",
98687
+ // "client_order_id":"ccxt",
98688
+ // "side":"BUY",
98689
+ // "instrument_id":"114jqr89-0-0",
98690
+ // "instrument_uuid":"b3469e0b-222c-4f8a-9f68-1f9e44d7e5e0",
98691
+ // "symbol":"BTC-PERP",
98692
+ // "portfolio_id":"1wp37qsc-1-0",
98693
+ // "portfolio_uuid":"018d7f6c-b92c-7361-8b7e-2932711e5a22",
98694
+ // "type":"LIMIT",
98695
+ // "price":"10000",
98696
+ // "size":"0.001",
98697
+ // "tif":"GTC",
98698
+ // "stp_mode":"BOTH",
98699
+ // "event_type":"CANCELED",
98700
+ // "order_status":"DONE",
98701
+ // "leaves_qty":"0.001",
98702
+ // "exec_qty":"0",
98703
+ // "avg_price":"0",
98704
+ // "fee":"0"
98705
+ // }
98706
+ //
98707
+ return this.parseOrder(orders, market);
98708
+ }
98709
+ async cancelAllOrders(symbol = undefined, params = {}) {
98710
+ /**
98711
+ * @method
98712
+ * @name coinbaseinternational#cancelAllOrders
98713
+ * @description cancel all open orders
98714
+ * @param {string} symbol unified market symbol, only orders in the market of this symbol are cancelled when symbol is not undefined
98715
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
98716
+ * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
98717
+ */
98718
+ await this.loadMarkets();
98719
+ let portfolio = undefined;
98720
+ [portfolio, params] = await this.handlePortfolioAndParams('cancelAllOrders', params);
98721
+ const request = {
98722
+ 'portfolio': portfolio,
98723
+ };
98724
+ let market = undefined;
98725
+ if (symbol) {
98726
+ market = this.market(symbol);
98727
+ request['instrument'] = market['id'];
98728
+ }
98729
+ const orders = await this.v1PrivateDeleteOrders(this.extend(request, params));
98730
+ return this.parseOrders(orders, market);
98731
+ }
98732
+ async editOrder(id, symbol, type, side, amount = undefined, price = undefined, params = {}) {
98733
+ /**
98734
+ * @method
98735
+ * @name coinbaseinternational#editOrder
98736
+ * @description edit a trade order
98737
+ * @see https://docs.cloud.coinbase.com/intx/reference/modifyorder
98738
+ * @param {string} id cancel order id
98739
+ * @param {string} symbol unified symbol of the market to create an order in
98740
+ * @param {string} type 'market' or 'limit'
98741
+ * @param {string} side 'buy' or 'sell'
98742
+ * @param {float} amount how much of currency you want to trade in units of base currency
98743
+ * @param {float} [price] the price at which the order is to be fullfilled, in units of the base currency, ignored in market orders
98744
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
98745
+ * @param {string} params.clientOrderId client order id
98746
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
98747
+ */
98748
+ await this.loadMarkets();
98749
+ const market = this.market(symbol);
98750
+ const request = {
98751
+ 'id': id,
98752
+ };
98753
+ let portfolio = undefined;
98754
+ [portfolio, params] = await this.handlePortfolioAndParams('editOrder', params);
98755
+ if (portfolio !== undefined) {
98756
+ request['portfolio'] = portfolio;
98757
+ }
98758
+ if (amount !== undefined) {
98759
+ request['size'] = this.amountToPrecision(symbol, amount);
98760
+ }
98761
+ if (price !== undefined) {
98762
+ request['price'] = this.priceToPrecision(symbol, price);
98763
+ }
98764
+ const stopPrice = this.safeNumberN(params, ['stopPrice', 'stop_price', 'triggerPrice']);
98765
+ if (stopPrice !== undefined) {
98766
+ request['stop_price'] = stopPrice;
98767
+ }
98768
+ const clientOrderId = this.safeString2(params, 'client_order_id', 'clientOrderId');
98769
+ if (clientOrderId === undefined) {
98770
+ throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest(this.id + ' editOrder() requires a clientOrderId parameter');
98771
+ }
98772
+ request['client_order_id'] = clientOrderId;
98773
+ const order = await this.v1PrivatePutOrdersId(this.extend(request, params));
98774
+ return this.parseOrder(order, market);
98775
+ }
98776
+ async fetchOrder(id, symbol = undefined, params = {}) {
98777
+ /**
98778
+ * @method
98779
+ * @name coinbaseinternational#fetchOrder
98780
+ * @description fetches information on an order made by the user
98781
+ * @see https://docs.cloud.coinbase.com/intx/reference/modifyorder
98782
+ * @param {string} id the order id
98783
+ * @param {string} symbol unified market symbol that the order was made in
98784
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
98785
+ * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
98786
+ */
98787
+ await this.loadMarkets();
98788
+ let market = undefined;
98789
+ if (symbol !== undefined) {
98790
+ market = this.market(symbol);
98791
+ }
98792
+ let portfolio = undefined;
98793
+ [portfolio, params] = await this.handlePortfolioAndParams('fetchOrder', params);
98794
+ const request = {
98795
+ 'id': id,
98796
+ 'portfolio': portfolio,
98797
+ };
98798
+ const order = await this.v1PrivateGetOrdersId(this.extend(request, params));
98799
+ //
98800
+ // {
98801
+ // "order_id":"1x96skvg-1-0",
98802
+ // "client_order_id":"ccxt",
98803
+ // "side":"BUY",
98804
+ // "instrument_id":"114jqr89-0-0",
98805
+ // "instrument_uuid":"b3469e0b-222c-4f8a-9f68-1f9e44d7e5e0",
98806
+ // "symbol":"BTC-PERP",
98807
+ // "portfolio_id":"1wp37qsc-1-0",
98808
+ // "portfolio_uuid":"018d7f6c-b92c-7361-8b7e-2932711e5a22",
98809
+ // "type":"LIMIT",
98810
+ // "price":"10000",
98811
+ // "size":"0.001",
98812
+ // "tif":"GTC",
98813
+ // "stp_mode":"BOTH",
98814
+ // "event_type":"NEW",
98815
+ // "event_time":"2024-02-14T03:25:14Z",
98816
+ // "submit_time":"2024-02-14T03:25:13.999Z",
98817
+ // "order_status":"WORKING",
98818
+ // "leaves_qty":"0.001",
98819
+ // "exec_qty":"0",
98820
+ // "avg_price":"0",
98821
+ // "fee":"0"
98822
+ // }
98823
+ //
98824
+ return this.parseOrder(order, market);
98825
+ }
98826
+ async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
98827
+ /**
98828
+ * @method
98829
+ * @name coinbaseinternational#fetchOpenOrders
98830
+ * @description fetches information on all currently open orders
98831
+ * @see https://docs.cloud.coinbase.com/intx/reference/getorders
98832
+ * @param {string} symbol unified market symbol of the orders
98833
+ * @param {int} [since] timestamp in ms of the earliest order, default is undefined
98834
+ * @param {int} [limit] the maximum number of open order structures to retrieve
98835
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
98836
+ * @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)
98837
+ * @param {int} [params.offset] offset
98838
+ * @param {string} [params.event_type] The most recent type of event that happened to the order. Allowed values: NEW, TRADE, REPLACED
98839
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
98840
+ */
98841
+ await this.loadMarkets();
98842
+ let portfolio = undefined;
98843
+ [portfolio, params] = await this.handlePortfolioAndParams('fetchOpenOrders', params);
98844
+ let paginate = false;
98845
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchOpenOrders', 'paginate');
98846
+ let maxEntriesPerRequest = undefined;
98847
+ [maxEntriesPerRequest, params] = this.handleOptionAndParams(params, 'fetchOpenOrders', 'maxEntriesPerRequest', 100);
98848
+ const pageKey = 'ccxtPageKey';
98849
+ if (paginate) {
98850
+ return await this.fetchPaginatedCallIncremental('fetchOpenOrders', symbol, since, limit, params, pageKey, maxEntriesPerRequest);
98851
+ }
98852
+ const page = this.safeInteger(params, pageKey, 1) - 1;
98853
+ const request = {
98854
+ 'portfolio': portfolio,
98855
+ 'result_offset': this.safeInteger2(params, 'offset', 'result_offset', page * maxEntriesPerRequest),
98856
+ };
98857
+ let market = undefined;
98858
+ if (symbol) {
98859
+ market = this.market(symbol);
98860
+ request['instrument'] = symbol;
98861
+ }
98862
+ if (limit !== undefined) {
98863
+ if (limit > 100) {
98864
+ throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest(this.id + ' fetchOpenOrders() maximum limit is 100');
98865
+ }
98866
+ request['result_limit'] = limit;
98867
+ }
98868
+ if (since !== undefined) {
98869
+ request['ref_datetime'] = this.iso8601(since);
98870
+ }
98871
+ const response = await this.v1PrivateGetOrders(this.extend(request, params));
98872
+ //
98873
+ // {
98874
+ // "pagination":{
98875
+ // "result_limit":25,
98876
+ // "result_offset":0
98877
+ // },
98878
+ // "results":[
98879
+ // {
98880
+ // "order_id":"1y4cm6b4-1-0",
98881
+ // "client_order_id":"ccxtd0dd4b5d-8e5f-",
98882
+ // "side":"SELL",
98883
+ // "instrument_id":"114jqr89-0-0",
98884
+ // "instrument_uuid":"b3469e0b-222c-4f8a-9f68-1f9e44d7e5e0",
98885
+ // "symbol":"BTC-PERP",
98886
+ // "portfolio_id":"1wp37qsc-1-0",
98887
+ // "portfolio_uuid":"018d7f6c-b92c-7361-8b7e-2932711e5a22",
98888
+ // "type":"LIMIT",
98889
+ // "price":"54000",
98890
+ // "size":"0.01",
98891
+ // "tif":"GTC",
98892
+ // "stp_mode":"BOTH",
98893
+ // "event_type":"NEW",
98894
+ // "event_time":"2024-02-24T16:46:37.413Z",
98895
+ // "submit_time":"2024-02-24T16:46:37.412Z",
98896
+ // "order_status":"WORKING",
98897
+ // "leaves_qty":"0.01",
98898
+ // "exec_qty":"0",
98899
+ // "avg_price":"0",
98900
+ // "fee":"0"
98901
+ // },
98902
+ // ...
98903
+ // ]
98904
+ // }
98905
+ //
98906
+ const rawOrders = this.safeList(response, 'results', []);
98907
+ return this.parseOrders(rawOrders, market, since, limit);
98908
+ }
98909
+ async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
98910
+ /**
98911
+ * @method
98912
+ * @name coinbaseinternational#fetchMyTrades
98913
+ * @description fetch all trades made by the user
98914
+ * @see https://docs.cloud.coinbase.com/intx/reference/getmultiportfoliofills
98915
+ * @param {string} symbol unified market symbol of the trades
98916
+ * @param {int} [since] timestamp in ms of the earliest order, default is undefined
98917
+ * @param {int} [limit] the maximum number of trade structures to fetch
98918
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
98919
+ * @param {int} [params.until] the latest time in ms to fetch trades for
98920
+ * @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)
98921
+ * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
98922
+ */
98923
+ await this.loadMarkets();
98924
+ let paginate = false;
98925
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchMyTrades', 'paginate');
98926
+ const pageKey = 'ccxtPageKey';
98927
+ let maxEntriesPerRequest = undefined;
98928
+ [maxEntriesPerRequest, params] = this.handleOptionAndParams(params, 'fetchMyTrades', 'maxEntriesPerRequest', 100);
98929
+ if (paginate) {
98930
+ return await this.fetchPaginatedCallIncremental('fetchMyTrades', symbol, since, limit, params, pageKey, maxEntriesPerRequest);
98931
+ }
98932
+ let market = undefined;
98933
+ if (symbol !== undefined) {
98934
+ market = this.market(symbol);
98935
+ }
98936
+ const page = this.safeInteger(params, pageKey, 1) - 1;
98937
+ const request = {
98938
+ 'result_offset': this.safeInteger2(params, 'offset', 'result_offset', page * maxEntriesPerRequest),
98939
+ };
98940
+ if (limit !== undefined) {
98941
+ if (limit > 100) {
98942
+ throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest(this.id + ' fetchMyTrades() maximum limit is 100. Consider setting paginate to true to fetch more trades.');
98943
+ }
98944
+ request['result_limit'] = limit;
98945
+ }
98946
+ if (since !== undefined) {
98947
+ request['time_from'] = this.iso8601(since);
98948
+ }
98949
+ const until = this.safeStringN(params, ['until', 'till']);
98950
+ if (until !== undefined) {
98951
+ params = this.omit(params, ['until', 'till']);
98952
+ request['ref_datetime'] = this.iso8601(until);
98953
+ }
98954
+ const response = await this.v1PrivateGetPortfoliosFills(this.extend(request, params));
98955
+ //
98956
+ // {
98957
+ // "pagination":{
98958
+ // "result_limit":25,
98959
+ // "result_offset":0
98960
+ // },
98961
+ // "results":[
98962
+ // {
98963
+ // "portfolio_id":"1wp37qsc-1-0",
98964
+ // "portfolio_uuid":"018d7f6c-b92c-7361-8b7e-2932711e5a22",
98965
+ // "portfolio_name":"CCXT Portfolio 020624-17:16",
98966
+ // "fill_id":"1xbfy19y-1-184",
98967
+ // "exec_id":"280841526207070392",
98968
+ // "order_id":"1xbfv8yw-1-0",
98969
+ // "instrument_id":"114jqr89-0-0",
98970
+ // "instrument_uuid":"b3469e0b-222c-4f8a-9f68-1f9e44d7e5e0",
98971
+ // "symbol":"BTC-PERP",
98972
+ // "match_id":"280841526207053840",
98973
+ // "fill_price":"52500",
98974
+ // "fill_qty":"0.01",
98975
+ // "client_id":"1x59ctku-1-1",
98976
+ // "client_order_id":"ccxt3e4e2a5f-4a89-",
98977
+ // "order_qty":"0.01",
98978
+ // "limit_price":"52500",
98979
+ // "total_filled":"0.01",
98980
+ // "filled_vwap":"52500",
98981
+ // "expire_time":"",
98982
+ // "stop_price":"",
98983
+ // "side":"BUY",
98984
+ // "tif":"GTC",
98985
+ // "stp_mode":"BOTH",
98986
+ // "flags":"",
98987
+ // "fee":"0.105",
98988
+ // "fee_asset":"USDC",
98989
+ // "order_status":"DONE",
98990
+ // "event_time":"2024-02-15T00:43:57.631Z"
98991
+ // },
98992
+ // ]
98993
+ // }
98994
+ //
98995
+ const trades = this.safeList(response, 'results', []);
98996
+ return this.parseTrades(trades, market, since, limit);
98997
+ }
98998
+ async withdraw(code, amount, address, tag = undefined, params = {}) {
98999
+ /**
99000
+ * @method
99001
+ * @name coinbaseinternational#withdraw
99002
+ * @description make a withdrawal
99003
+ * @see https://docs.cloud.coinbase.com/intx/reference/withdraw
99004
+ * @see https://docs.cloud.coinbase.com/intx/reference/counterpartywithdraw
99005
+ * @param {string} code unified currency code
99006
+ * @param {float} amount the amount to withdraw
99007
+ * @param {string} address the address to withdraw to
99008
+ * @param {string} [tag] an optional tag for the withdrawal
99009
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
99010
+ * @param {boolean} [params.add_network_fee_to_total] if true, deducts network fee from the portfolio, otherwise deduct fee from the withdrawal
99011
+ * @param {string} [params.network_arn_id] Identifies the blockchain network (e.g., networks/ethereum-mainnet/assets/313ef8a9-ae5a-5f2f-8a56-572c0e2a4d5a)
99012
+ * @param {string} [params.nonce] a unique integer representing the withdrawal request
99013
+ * @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}
99014
+ */
99015
+ [tag, params] = this.handleWithdrawTagAndParams(tag, params);
99016
+ this.checkAddress(address);
99017
+ await this.loadMarkets();
99018
+ const currency = this.currency(code);
99019
+ let portfolio = undefined;
99020
+ [portfolio, params] = await this.handlePortfolioAndParams('withdraw', params);
99021
+ let method = undefined;
99022
+ [method, params] = this.handleOptionAndParams(params, 'withdraw', 'method', 'v1PrivatePostTransfersWithdraw');
99023
+ let networkId = undefined;
99024
+ [networkId, params] = await this.handleNetworkIdAndParams(code, 'withdraw', params);
99025
+ const request = {
99026
+ 'portfolio': portfolio,
99027
+ 'type': 'send',
99028
+ 'asset': currency['id'],
99029
+ 'address': address,
99030
+ 'amount': amount,
99031
+ 'currency': currency['id'],
99032
+ 'network_arn_id': networkId,
99033
+ 'nonce': this.nonce(),
99034
+ };
99035
+ const response = await this[method](this.extend(request, params));
99036
+ //
99037
+ // {
99038
+ // "idem":"8e471d77-4208-45a8-9e5b-f3bd8a2c1fc3"
99039
+ // }
99040
+ //
99041
+ return this.parseTransaction(response, currency);
99042
+ }
99043
+ safeNetwork(network) {
99044
+ let withdrawEnabled = this.safeBool(network, 'withdraw');
99045
+ let depositEnabled = this.safeBool(network, 'deposit');
99046
+ const limits = this.safeDict(network, 'limits');
99047
+ const withdraw = this.safeDict(limits, 'withdraw');
99048
+ const withdrawMax = this.safeNumber(withdraw, 'max');
99049
+ const deposit = this.safeDict(limits, 'deposit');
99050
+ const depositMax = this.safeNumber(deposit, 'max');
99051
+ if (withdrawEnabled === undefined && withdrawMax !== undefined) {
99052
+ withdrawEnabled = (withdrawMax > 0);
99053
+ }
99054
+ if (depositEnabled === undefined && depositMax !== undefined) {
99055
+ depositEnabled = (depositMax > 0);
99056
+ }
99057
+ const networkId = this.safeString(network, 'id');
99058
+ const isEnabled = (withdrawEnabled && depositEnabled);
99059
+ return {
99060
+ 'info': network['info'],
99061
+ 'id': networkId,
99062
+ 'name': this.safeString(network, 'name'),
99063
+ 'network': this.safeString(network, 'network'),
99064
+ 'active': this.safeBool(network, 'active', isEnabled),
99065
+ 'deposit': depositEnabled,
99066
+ 'withdraw': withdrawEnabled,
99067
+ 'fee': this.safeNumber(network, 'fee'),
99068
+ 'precision': this.safeNumber(network, 'precision'),
99069
+ 'limits': {
99070
+ 'withdraw': {
99071
+ 'min': this.safeNumber(withdraw, 'min'),
99072
+ 'max': withdrawMax,
99073
+ },
99074
+ 'deposit': {
99075
+ 'min': this.safeNumber(deposit, 'min'),
99076
+ 'max': depositMax,
99077
+ },
99078
+ },
99079
+ };
99080
+ }
99081
+ sign(path, api = [], method = 'GET', params = {}, headers = undefined, body = undefined) {
99082
+ const version = api[0];
99083
+ const signed = api[1] === 'private';
99084
+ let fullPath = '/' + version + '/' + this.implodeParams(path, params);
99085
+ const query = this.omit(params, this.extractParams(path));
99086
+ const savedPath = '/api' + fullPath;
99087
+ if (method === 'GET' || method === 'DELETE') {
99088
+ if (Object.keys(query).length) {
99089
+ fullPath += '?' + this.urlencodeWithArrayRepeat(query);
99090
+ }
99091
+ }
99092
+ const url = this.urls['api']['rest'] + fullPath;
99093
+ if (signed) {
99094
+ this.checkRequiredCredentials();
99095
+ const nonce = this.nonce().toString();
99096
+ let payload = '';
99097
+ if (method !== 'GET') {
99098
+ if (Object.keys(query).length) {
99099
+ body = this.json(query);
99100
+ payload = body;
99101
+ }
99102
+ }
99103
+ const auth = nonce + method + savedPath + payload;
99104
+ const signature = this.hmac(this.encode(auth), this.base64ToBinary(this.secret), _static_dependencies_noble_hashes_sha256_js__WEBPACK_IMPORTED_MODULE_4__/* .sha256 */ .J, 'base64');
99105
+ headers = {
99106
+ 'CB-ACCESS-TIMESTAMP': nonce,
99107
+ 'CB-ACCESS-SIGN': signature,
99108
+ 'CB-ACCESS-PASSPHRASE': this.password,
99109
+ 'CB-ACCESS-KEY': this.apiKey,
99110
+ };
99111
+ }
99112
+ return { 'url': url, 'method': method, 'body': body, 'headers': headers };
99113
+ }
99114
+ handleErrors(code, reason, url, method, headers, body, response, requestHeaders, requestBody) {
99115
+ //
99116
+ // {
99117
+ // "title":"io.javalin.http.BadRequestResponse: Order rejected (DUPLICATE_CLIENT_ORDER_ID - duplicate client order id detected)",
99118
+ // "status":400
99119
+ // }
99120
+ //
99121
+ if (response === undefined) {
99122
+ return undefined; // fallback to default error handler
99123
+ }
99124
+ const feedback = this.id + ' ' + body;
99125
+ const errMsg = this.safeString(response, 'title');
99126
+ if (errMsg !== undefined) {
99127
+ this.throwExactlyMatchedException(this.exceptions['exact'], errMsg, feedback);
99128
+ this.throwBroadlyMatchedException(this.exceptions['broad'], errMsg, feedback);
99129
+ throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.ExchangeError(feedback);
99130
+ }
99131
+ return undefined;
99132
+ }
99133
+ }
99134
+
99135
+
96920
99136
  /***/ }),
96921
99137
 
96922
99138
  /***/ 8856:
@@ -136263,7 +138479,7 @@ class gate extends _abstract_gate_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
136263
138479
  let request = {};
136264
138480
  [request, params] = this.prepareRequest(market, undefined, params);
136265
138481
  request['interval'] = this.safeString(this.timeframes, timeframe, timeframe);
136266
- let maxLimit = 1000;
138482
+ let maxLimit = market['contract'] ? 1999 : 1000;
136267
138483
  limit = (limit === undefined) ? maxLimit : Math.min(limit, maxLimit);
136268
138484
  let until = this.safeInteger(params, 'until');
136269
138485
  if (until !== undefined) {
@@ -159659,8 +161875,8 @@ class hyperliquid extends _abstract_hyperliquid_js__WEBPACK_IMPORTED_MODULE_0__/
159659
161875
  'strike': undefined,
159660
161876
  'optionType': undefined,
159661
161877
  'precision': {
159662
- 'amount': 0.00000001,
159663
- 'price': 0.00000001,
161878
+ 'amount': this.parseNumber(this.parsePrecision(this.safeString(market, 'szDecimals'))),
161879
+ 'price': this.parseNumber('5'), // significant digits
159664
161880
  },
159665
161881
  'limits': {
159666
161882
  'leverage': {
@@ -159919,6 +162135,12 @@ class hyperliquid extends _abstract_hyperliquid_js__WEBPACK_IMPORTED_MODULE_0__/
159919
162135
  amountToPrecision(symbol, amount) {
159920
162136
  return this.decimalToPrecision(amount, _base_functions_number_js__WEBPACK_IMPORTED_MODULE_2__/* .ROUND */ .oU, this.markets[symbol]['precision']['amount'], this.precisionMode);
159921
162137
  }
162138
+ priceToPrecision(symbol, price) {
162139
+ const market = this.market(symbol);
162140
+ const result = this.decimalToPrecision(price, _base_functions_number_js__WEBPACK_IMPORTED_MODULE_2__/* .ROUND */ .oU, market['precision']['price'], _base_functions_number_js__WEBPACK_IMPORTED_MODULE_2__/* .SIGNIFICANT_DIGITS */ .tV, this.paddingMode);
162141
+ const decimalParsedResult = this.decimalToPrecision(result, _base_functions_number_js__WEBPACK_IMPORTED_MODULE_2__/* .ROUND */ .oU, 6, _base_functions_number_js__WEBPACK_IMPORTED_MODULE_2__/* .DECIMAL_PLACES */ .nr, this.paddingMode);
162142
+ return decimalParsedResult;
162143
+ }
159922
162144
  hashMessage(message) {
159923
162145
  return '0x' + this.hash(message, _static_dependencies_noble_hashes_sha3_js__WEBPACK_IMPORTED_MODULE_3__/* .keccak_256 */ .fr, 'hex');
159924
162146
  }
@@ -188975,7 +191197,7 @@ class mexc extends _abstract_mexc_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
188975
191197
  'Combination of optional parameters invalid': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest,
188976
191198
  'api market order is disabled': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest,
188977
191199
  'Contract not allow place order!': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InvalidOrder,
188978
- 'Oversold': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InvalidOrder,
191200
+ 'Oversold': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InsufficientFunds,
188979
191201
  'Insufficient position': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InsufficientFunds,
188980
191202
  'Insufficient balance!': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InsufficientFunds,
188981
191203
  'Bid price is great than max allow price': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InvalidOrder,
@@ -204034,7 +206256,7 @@ class okx extends _abstract_okx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
204034
206256
  let paginate = false;
204035
206257
  [paginate, params] = this.handleOptionAndParams(params, 'fetchFundingRateHistory', 'paginate');
204036
206258
  if (paginate) {
204037
- return await this.fetchPaginatedCallDeterministic('fetchFundingRateHistory', symbol, since, limit, '8h', params);
206259
+ return await this.fetchPaginatedCallDeterministic('fetchFundingRateHistory', symbol, since, limit, '8h', params, 100);
204038
206260
  }
204039
206261
  const market = this.market(symbol);
204040
206262
  const request = {
@@ -227796,21 +230018,44 @@ class bingx extends _bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
227796
230018
  }
227797
230019
  return true;
227798
230020
  }
227799
- async authenticate(params = {}) {
227800
- const time = this.milliseconds();
230021
+ async keepAliveListenKey(params = {}) {
227801
230022
  const listenKey = this.safeString(this.options, 'listenKey');
227802
230023
  if (listenKey === undefined) {
227803
- const response = await this.userAuthPrivatePostUserDataStream();
227804
- this.options['listenKey'] = this.safeString(response, 'listenKey');
227805
- this.options['lastAuthenticatedTime'] = time;
230024
+ // A network error happened: we can't renew a listen key that does not exist.
227806
230025
  return;
227807
230026
  }
230027
+ try {
230028
+ await this.userAuthPrivatePutUserDataStream({ 'listenKey': listenKey }); // extend the expiry
230029
+ }
230030
+ catch (error) {
230031
+ const types = ['spot', 'swap'];
230032
+ for (let i = 0; i < types.length; i++) {
230033
+ const type = types[i];
230034
+ const url = this.urls['api']['ws'][type] + '?listenKey=' + listenKey;
230035
+ const client = this.client(url);
230036
+ const messageHashes = Object.keys(client.futures);
230037
+ for (let j = 0; j < messageHashes.length; j++) {
230038
+ const messageHash = messageHashes[j];
230039
+ client.reject(error, messageHash);
230040
+ }
230041
+ }
230042
+ this.options['listenKey'] = undefined;
230043
+ this.options['lastAuthenticatedTime'] = 0;
230044
+ return;
230045
+ }
230046
+ // whether or not to schedule another listenKey keepAlive request
230047
+ const listenKeyRefreshRate = this.safeInteger(this.options, 'listenKeyRefreshRate', 3600000);
230048
+ this.delay(listenKeyRefreshRate, this.keepAliveListenKey, params);
230049
+ }
230050
+ async authenticate(params = {}) {
230051
+ const time = this.milliseconds();
227808
230052
  const lastAuthenticatedTime = this.safeInteger(this.options, 'lastAuthenticatedTime', 0);
227809
230053
  const listenKeyRefreshRate = this.safeInteger(this.options, 'listenKeyRefreshRate', 3600000); // 1 hour
227810
230054
  if (time - lastAuthenticatedTime > listenKeyRefreshRate) {
227811
- const response = await this.userAuthPrivatePutUserDataStream({ 'listenKey': listenKey }); // extend the expiry
230055
+ const response = await this.userAuthPrivatePostUserDataStream();
227812
230056
  this.options['listenKey'] = this.safeString(response, 'listenKey');
227813
230057
  this.options['lastAuthenticatedTime'] = time;
230058
+ this.delay(listenKeyRefreshRate, this.keepAliveListenKey, params);
227814
230059
  }
227815
230060
  }
227816
230061
  async pong(client, message) {
@@ -242613,6 +244858,660 @@ class coinbase extends _coinbase_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] *
242613
244858
  }
242614
244859
 
242615
244860
 
244861
+ /***/ }),
244862
+
244863
+ /***/ 6541:
244864
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
244865
+
244866
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
244867
+ /* harmony export */ Z: () => (/* binding */ coinbaseinternational)
244868
+ /* harmony export */ });
244869
+ /* harmony import */ var _coinbaseinternational_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(9339);
244870
+ /* harmony import */ var _base_errors_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6689);
244871
+ /* harmony import */ var _static_dependencies_noble_hashes_sha256_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1372);
244872
+ /* harmony import */ var _base_ws_Cache_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(3020);
244873
+ // ---------------------------------------------------------------------------
244874
+
244875
+
244876
+
244877
+
244878
+ // ---------------------------------------------------------------------------
244879
+ class coinbaseinternational extends _coinbaseinternational_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
244880
+ describe() {
244881
+ return this.deepExtend(super.describe(), {
244882
+ 'has': {
244883
+ 'ws': true,
244884
+ 'watchTrades': true,
244885
+ 'watchTradesForSymbols': true,
244886
+ 'watchOrderBook': true,
244887
+ 'watchOrderBookForSymbols': true,
244888
+ 'watchTicker': true,
244889
+ 'watchBalance': false,
244890
+ 'watchMyTrades': false,
244891
+ 'watchOHLCV': false,
244892
+ 'watchOHLCVForSymbols': false,
244893
+ 'watchOrders': false,
244894
+ 'watchOrdersForSymbols': false,
244895
+ 'watchPositions': false,
244896
+ 'watchTickers': false,
244897
+ 'createOrderWs': false,
244898
+ 'editOrderWs': false,
244899
+ 'cancelOrderWs': false,
244900
+ 'cancelOrdersWs': false,
244901
+ 'cancelAllOrdersWs': false,
244902
+ 'fetchOrderWs': false,
244903
+ 'fetchOrdersWs': false,
244904
+ 'fetchBalanceWs': false,
244905
+ 'fetchMyTradesWs': false,
244906
+ },
244907
+ 'urls': {
244908
+ 'api': {
244909
+ 'ws': 'wss://ws-md.international.coinbase.com',
244910
+ },
244911
+ 'test': {
244912
+ 'ws': 'wss://ws-md.n5e2.coinbase.com',
244913
+ },
244914
+ },
244915
+ 'options': {
244916
+ 'watchTicker': {
244917
+ 'channel': 'LEVEL1', // 'INSTRUMENTS' or 'RISK'
244918
+ },
244919
+ 'tradesLimit': 1000,
244920
+ 'ordersLimit': 1000,
244921
+ 'myTradesLimit': 1000,
244922
+ },
244923
+ 'errors': {
244924
+ 'exact': {
244925
+ 'Unable to authenticate': _base_errors_js__WEBPACK_IMPORTED_MODULE_1__.AuthenticationError,
244926
+ },
244927
+ },
244928
+ });
244929
+ }
244930
+ async subscribe(name, symbols = undefined, params = {}) {
244931
+ /**
244932
+ * @ignore
244933
+ * @method
244934
+ * @description subscribes to a websocket channel
244935
+ * @see https://docs.cloud.coinbase.com/intx/docs/websocket-overview#subscribe
244936
+ * @param {string} name the name of the channel
244937
+ * @param {string[]} [symbols] unified market symbol
244938
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
244939
+ * @returns {object} subscription to a websocket channel
244940
+ */
244941
+ this.checkRequiredCredentials();
244942
+ let market = undefined;
244943
+ let messageHash = name;
244944
+ let productIds = [];
244945
+ if (symbols === undefined) {
244946
+ symbols = this.symbols;
244947
+ }
244948
+ const symbolsLength = symbols.length;
244949
+ if (symbolsLength > 1) {
244950
+ const parsedSymbols = this.marketSymbols(symbols);
244951
+ const marketIds = this.marketIds(parsedSymbols);
244952
+ productIds = marketIds;
244953
+ messageHash = messageHash + '::' + parsedSymbols.join(',');
244954
+ }
244955
+ else if (symbolsLength === 1) {
244956
+ market = this.market(symbols[0]);
244957
+ messageHash = name + '::' + market['symbol'];
244958
+ productIds = [market['id']];
244959
+ }
244960
+ const url = this.urls['api']['ws'];
244961
+ if (url === undefined) {
244962
+ throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_1__.NotSupported(this.id + ' is not supported in sandbox environment');
244963
+ }
244964
+ const timestamp = this.nonce().toString();
244965
+ const auth = timestamp + this.apiKey + 'CBINTLMD' + this.password;
244966
+ const signature = this.hmac(this.encode(auth), this.base64ToBinary(this.secret), _static_dependencies_noble_hashes_sha256_js__WEBPACK_IMPORTED_MODULE_2__/* .sha256 */ .J, 'base64');
244967
+ const subscribe = {
244968
+ 'type': 'SUBSCRIBE',
244969
+ 'product_ids': productIds,
244970
+ 'channels': [name],
244971
+ 'time': timestamp,
244972
+ 'key': this.apiKey,
244973
+ 'passphrase': this.password,
244974
+ 'signature': signature,
244975
+ };
244976
+ return await this.watch(url, messageHash, this.extend(subscribe, params), messageHash);
244977
+ }
244978
+ async subscribeMultiple(name, symbols = undefined, params = {}) {
244979
+ /**
244980
+ * @ignore
244981
+ * @method
244982
+ * @description subscribes to a websocket channel using watchMultiple
244983
+ * @see https://docs.cloud.coinbase.com/intx/docs/websocket-overview#subscribe
244984
+ * @param {string} name the name of the channel
244985
+ * @param {string|string[]} [symbol] unified market symbol
244986
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
244987
+ * @returns {object} subscription to a websocket channel
244988
+ */
244989
+ this.checkRequiredCredentials();
244990
+ if (this.isEmpty(symbols)) {
244991
+ symbols = this.symbols;
244992
+ }
244993
+ else {
244994
+ symbols = this.marketSymbols(symbols);
244995
+ }
244996
+ const messageHashes = [];
244997
+ const productIds = [];
244998
+ for (let i = 0; i < symbols.length; i++) {
244999
+ const marketId = this.marketId(symbols[i]);
245000
+ const symbol = this.symbol(marketId);
245001
+ productIds.push(marketId);
245002
+ messageHashes.push(name + '::' + symbol);
245003
+ }
245004
+ const url = this.urls['api']['ws'];
245005
+ if (url === undefined) {
245006
+ throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_1__.NotSupported(this.id + ' is not supported in sandbox environment');
245007
+ }
245008
+ const timestamp = this.numberToString(this.seconds());
245009
+ const auth = timestamp + this.apiKey + 'CBINTLMD' + this.password;
245010
+ const signature = this.hmac(this.encode(auth), this.base64ToBinary(this.secret), _static_dependencies_noble_hashes_sha256_js__WEBPACK_IMPORTED_MODULE_2__/* .sha256 */ .J, 'base64');
245011
+ const subscribe = {
245012
+ 'type': 'SUBSCRIBE',
245013
+ 'time': timestamp,
245014
+ 'product_ids': productIds,
245015
+ 'channels': [name],
245016
+ 'key': this.apiKey,
245017
+ 'passphrase': this.password,
245018
+ 'signature': signature,
245019
+ };
245020
+ return await this.watchMultiple(url, messageHashes, this.extend(subscribe, params), messageHashes);
245021
+ }
245022
+ async watchFundingRate(symbol, params = {}) {
245023
+ /**
245024
+ * @method
245025
+ * @name coinbaseinternational#watchFundingRate
245026
+ * @description watch the current funding rate
245027
+ * @see https://docs.cloud.coinbase.com/intx/docs/websocket-channels#funding-channel
245028
+ * @param {string} symbol unified market symbol
245029
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
245030
+ * @returns {object} a [funding rate structure]{@link https://docs.ccxt.com/#/?id=funding-rate-structure}
245031
+ */
245032
+ return await this.subscribe('RISK', [symbol], params);
245033
+ }
245034
+ async watchFundingRates(symbols, params = {}) {
245035
+ /**
245036
+ * @method
245037
+ * @name coinbaseinternational#watchFundingRates
245038
+ * @description watch the funding rate for multiple markets
245039
+ * @see https://docs.cloud.coinbase.com/intx/docs/websocket-channels#funding-channel
245040
+ * @param {string[]|undefined} symbols list of unified market symbols
245041
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
245042
+ * @returns {object} a dictionary of [funding rates structures]{@link https://docs.ccxt.com/#/?id=funding-rates-structure}, indexe by market symbols
245043
+ */
245044
+ return await this.subscribeMultiple('RISK', symbols, params);
245045
+ }
245046
+ async watchTicker(symbol, params = {}) {
245047
+ /**
245048
+ * @method
245049
+ * @name coinbaseinternational#watchTicker
245050
+ * @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
245051
+ * @see https://docs.cloud.coinbase.com/intx/docs/websocket-channels#instruments-channel
245052
+ * @param {string} [symbol] unified symbol of the market to fetch the ticker for
245053
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
245054
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
245055
+ */
245056
+ let channel = undefined;
245057
+ [channel, params] = this.handleOptionAndParams(params, 'watchTicker', 'channel', 'LEVEL1');
245058
+ return await this.subscribe(channel, [symbol], params);
245059
+ }
245060
+ handleInstrument(client, message) {
245061
+ //
245062
+ // {
245063
+ // "sequence": 1,
245064
+ // "product_id": "ETH-PERP",
245065
+ // "instrument_type": "PERP",
245066
+ // "base_asset_name": "ETH",
245067
+ // "quote_asset_name": "USDC",
245068
+ // "base_increment": "0.0001",
245069
+ // "quote_increment": "0.01",
245070
+ // "avg_daily_quantity": "43.0",
245071
+ // "avg_daily_volume": "80245.2",
245072
+ // "total_30_day_quantity":"1443.0",
245073
+ // "total_30_day_volume":"3040449.0",
245074
+ // "total_24_hour_quantity":"48.1",
245075
+ // "total_24_hour_volume":"101348.3",
245076
+ // "base_imf": "0.2",
245077
+ // "min_quantity": "0.0001",
245078
+ // "position_size_limit": "500",
245079
+ // "funding_interval": "60000000000",
245080
+ // "trading_state": "trading",
245081
+ // "last_update_time": "2023-05-04T11:16:33.016Z",
245082
+ // "time": "2023-05-10T14:58:47.000Z",
245083
+ // "channel":"INSTRUMENTS",
245084
+ // "type":"SNAPSHOT"
245085
+ // }
245086
+ const ticker = this.parseWsInstrument(message);
245087
+ const channel = this.safeString(message, 'channel');
245088
+ client.resolve(ticker, channel);
245089
+ client.resolve(ticker, channel + '::' + ticker['symbol']);
245090
+ }
245091
+ parseWsInstrument(ticker, market = undefined) {
245092
+ //
245093
+ // {
245094
+ // "sequence": 1,
245095
+ // "product_id": "ETH-PERP",
245096
+ // "instrument_type": "PERP",
245097
+ // "base_asset_name": "ETH",
245098
+ // "quote_asset_name": "USDC",
245099
+ // "base_increment": "0.0001",
245100
+ // "quote_increment": "0.01",
245101
+ // "avg_daily_quantity": "43.0",
245102
+ // "avg_daily_volume": "80245.2",
245103
+ // "total_30_day_quantity":"1443.0",
245104
+ // "total_30_day_volume":"3040449.0",
245105
+ // "total_24_hour_quantity":"48.1",
245106
+ // "total_24_hour_volume":"101348.3",
245107
+ // "base_imf": "0.2",
245108
+ // "min_quantity": "0.0001",
245109
+ // "position_size_limit": "500",
245110
+ // "funding_interval": "60000000000",
245111
+ // "trading_state": "trading",
245112
+ // "last_update_time": "2023-05-04T11:16:33.016Z",
245113
+ // "time": "2023-05-10T14:58:47.000Z",
245114
+ // "channel":"INSTRUMENTS",
245115
+ // "type":"SNAPSHOT"
245116
+ // }
245117
+ //
245118
+ const marketId = this.safeString(ticker, 'product_id');
245119
+ const datetime = this.safeString(ticker, 'time');
245120
+ return this.safeTicker({
245121
+ 'info': ticker,
245122
+ 'symbol': this.safeSymbol(marketId, market, '-'),
245123
+ 'timestamp': this.parse8601(datetime),
245124
+ 'datetime': datetime,
245125
+ 'high': undefined,
245126
+ 'low': undefined,
245127
+ 'bid': undefined,
245128
+ 'bidVolume': undefined,
245129
+ 'ask': undefined,
245130
+ 'askVolume': undefined,
245131
+ 'vwap': undefined,
245132
+ 'open': undefined,
245133
+ 'close': undefined,
245134
+ 'last': undefined,
245135
+ 'previousClose': undefined,
245136
+ 'change': undefined,
245137
+ 'percentage': undefined,
245138
+ 'average': undefined,
245139
+ 'baseVolume': this.safeString(ticker, 'total_24_hour_quantity'),
245140
+ 'quoteVolume': this.safeString(ticker, 'total_24_hour_volume'),
245141
+ });
245142
+ }
245143
+ handleTicker(client, message) {
245144
+ //
245145
+ // snapshot
245146
+ // {
245147
+ // "sequence": 0,
245148
+ // "product_id": "BTC-PERP",
245149
+ // "time": "2023-05-10T14:58:47.000Z",
245150
+ // "bid_price": "28787.8",
245151
+ // "bid_qty": "0.466", // One side book
245152
+ // "channel": "LEVEL1",
245153
+ // "type": "SNAPSHOT"
245154
+ // }
245155
+ // update
245156
+ // {
245157
+ // "sequence": 1,
245158
+ // "product_id": "BTC-PERP",
245159
+ // "time": "2023-05-10T14:58:47.547Z",
245160
+ // "bid_price": "28787.8",
245161
+ // "bid_qty": "0.466",
245162
+ // "ask_price": "28788.8",
245163
+ // "ask_qty": "1.566",
245164
+ // "channel": "LEVEL1",
245165
+ // "type": "UPDATE"
245166
+ // }
245167
+ //
245168
+ const ticker = this.parseWsTicker(message);
245169
+ const channel = this.safeString(message, 'channel');
245170
+ client.resolve(ticker, channel);
245171
+ client.resolve(ticker, channel + '::' + ticker['symbol']);
245172
+ }
245173
+ parseWsTicker(ticker, market = undefined) {
245174
+ //
245175
+ // {
245176
+ // "sequence": 1,
245177
+ // "product_id": "BTC-PERP",
245178
+ // "time": "2023-05-10T14:58:47.547Z",
245179
+ // "bid_price": "28787.8",
245180
+ // "bid_qty": "0.466",
245181
+ // "ask_price": "28788.8",
245182
+ // "ask_qty": "1.566",
245183
+ // "channel": "LEVEL1",
245184
+ // "type": "UPDATE"
245185
+ // }
245186
+ //
245187
+ const datetime = this.safeString(ticker, 'time');
245188
+ const marketId = this.safeString(ticker, 'product_id');
245189
+ return this.safeTicker({
245190
+ 'info': ticker,
245191
+ 'symbol': this.safeSymbol(marketId, market),
245192
+ 'timestamp': this.parse8601(datetime),
245193
+ 'datetime': datetime,
245194
+ 'bid': this.safeNumber(ticker, 'bid_price'),
245195
+ 'bidVolume': this.safeNumber(ticker, 'bid_qty'),
245196
+ 'ask': this.safeNumber(ticker, 'ask_price'),
245197
+ 'askVolume': this.safeNumber(ticker, 'ask_qty'),
245198
+ 'high': undefined,
245199
+ 'low': undefined,
245200
+ 'open': undefined,
245201
+ 'close': undefined,
245202
+ 'last': undefined,
245203
+ 'change': undefined,
245204
+ 'percentage': undefined,
245205
+ 'average': undefined,
245206
+ 'vwap': undefined,
245207
+ 'baseVolume': undefined,
245208
+ 'quoteVolume': undefined,
245209
+ 'previousClose': undefined,
245210
+ });
245211
+ }
245212
+ async watchTrades(symbol, since = undefined, limit = undefined, params = {}) {
245213
+ /**
245214
+ * @method
245215
+ * @name coinbaseinternational#watchTrades
245216
+ * @description get the list of most recent trades for a particular symbol
245217
+ * @see https://docs.cloud.coinbase.com/intx/docs/websocket-channels#match-channel
245218
+ * @param {string} symbol unified symbol of the market to fetch trades for
245219
+ * @param {int} [since] timestamp in ms of the earliest trade to fetch
245220
+ * @param {int} [limit] the maximum amount of trades to fetch
245221
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
245222
+ * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
245223
+ */
245224
+ return await this.watchTradesForSymbols([symbol], since, limit, params);
245225
+ }
245226
+ async watchTradesForSymbols(symbols, since = undefined, limit = undefined, params = {}) {
245227
+ /**
245228
+ * @method
245229
+ * @name coinbaseinternational#watchTradesForSymbols
245230
+ * @description get the list of most recent trades for a list of symbols
245231
+ * @param {string[]} symbols unified symbol of the market to fetch trades for
245232
+ * @param {int} [since] timestamp in ms of the earliest trade to fetch
245233
+ * @param {int} [limit] the maximum amount of trades to fetch
245234
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
245235
+ * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
245236
+ */
245237
+ await this.loadMarkets();
245238
+ symbols = this.marketSymbols(symbols, undefined, false, true, true);
245239
+ const trades = await this.subscribeMultiple('MATCH', symbols, params);
245240
+ if (this.newUpdates) {
245241
+ const first = this.safeDict(trades, 0);
245242
+ const tradeSymbol = this.safeString(first, 'symbol');
245243
+ limit = trades.getLimit(tradeSymbol, limit);
245244
+ }
245245
+ return this.filterBySinceLimit(trades, since, limit, 'timestamp', true);
245246
+ }
245247
+ handleTrade(client, message) {
245248
+ //
245249
+ // {
245250
+ // "sequence": 0,
245251
+ // "product_id": "BTC-PERP",
245252
+ // "time": "2023-05-10T14:58:47.002Z",
245253
+ // "match_id": "177101110052388865",
245254
+ // "trade_qty": "0.006",
245255
+ // "aggressor_side": "BUY",
245256
+ // "trade_price": "28833.1",
245257
+ // "channel": "MATCH",
245258
+ // "type": "UPDATE"
245259
+ // }
245260
+ //
245261
+ const trade = this.parseWsTrade(message);
245262
+ const symbol = trade['symbol'];
245263
+ const channel = this.safeString(message, 'channel');
245264
+ if (!(symbol in this.trades)) {
245265
+ const limit = this.safeInteger(this.options, 'tradesLimit', 1000);
245266
+ const tradesArrayCache = new _base_ws_Cache_js__WEBPACK_IMPORTED_MODULE_3__/* .ArrayCache */ .ZL(limit);
245267
+ this.trades[symbol] = tradesArrayCache;
245268
+ }
245269
+ const tradesArray = this.trades[symbol];
245270
+ tradesArray.append(trade);
245271
+ this.trades[symbol] = tradesArray;
245272
+ client.resolve(tradesArray, channel);
245273
+ client.resolve(tradesArray, channel + '::' + trade['symbol']);
245274
+ return message;
245275
+ }
245276
+ parseWsTrade(trade, market = undefined) {
245277
+ //
245278
+ // {
245279
+ // "sequence": 0,
245280
+ // "product_id": "BTC-PERP",
245281
+ // "time": "2023-05-10T14:58:47.002Z",
245282
+ // "match_id": "177101110052388865",
245283
+ // "trade_qty": "0.006",
245284
+ // "aggressor_side": "BUY",
245285
+ // "trade_price": "28833.1",
245286
+ // "channel": "MATCH",
245287
+ // "type": "UPDATE"
245288
+ // }
245289
+ const marketId = this.safeString2(trade, 'symbol', 'product_id');
245290
+ const datetime = this.safeString(trade, 'time');
245291
+ return this.safeTrade({
245292
+ 'info': trade,
245293
+ 'id': this.safeString(trade, 'match_id'),
245294
+ 'order': undefined,
245295
+ 'timestamp': this.parse8601(datetime),
245296
+ 'datetime': datetime,
245297
+ 'symbol': this.safeSymbol(marketId, market),
245298
+ 'type': undefined,
245299
+ 'side': this.safeStringLower(trade, 'agressor_side'),
245300
+ 'takerOrMaker': undefined,
245301
+ 'price': this.safeString(trade, 'trade_price'),
245302
+ 'amount': this.safeString(trade, 'trade_qty'),
245303
+ 'cost': undefined,
245304
+ 'fee': undefined,
245305
+ });
245306
+ }
245307
+ async watchOrderBook(symbol, limit = undefined, params = {}) {
245308
+ /**
245309
+ * @method
245310
+ * @name coinbaseinternational#watchOrderBook
245311
+ * @description watches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
245312
+ * @see https://docs.cloud.coinbase.com/intx/docs/websocket-channels#level2-channel
245313
+ * @param {string} symbol unified symbol of the market to fetch the order book for
245314
+ * @param {int} [limit] the maximum amount of order book entries to return
245315
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
245316
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
245317
+ */
245318
+ return await this.watchOrderBookForSymbols([symbol], limit, params);
245319
+ }
245320
+ async watchOrderBookForSymbols(symbols, limit = undefined, params = {}) {
245321
+ /**
245322
+ * @method
245323
+ * @name coinbaseinternational#watchOrderBook
245324
+ * @description watches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
245325
+ * @see https://docs.cloud.coinbase.com/intx/docs/websocket-channels#level2-channel
245326
+ * @param {string} symbol unified symbol of the market to fetch the order book for
245327
+ * @param {int} [limit] the maximum amount of order book entries to return
245328
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
245329
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
245330
+ */
245331
+ await this.loadMarkets();
245332
+ return await this.subscribeMultiple('LEVEL2', symbols, params);
245333
+ }
245334
+ handleOrderBook(client, message) {
245335
+ //
245336
+ // snapshot
245337
+ // {
245338
+ // "sequence": 0,
245339
+ // "product_id": "BTC-PERP",
245340
+ // "time": "2023-05-10T14:58:47.000Z",
245341
+ // "bids": [
245342
+ // ["29100", "0.02"],
245343
+ // ["28950", "0.01"],
245344
+ // ["28900", "0.01"]
245345
+ // ],
245346
+ // "asks": [
245347
+ // ["29267.8", "18"],
245348
+ // ["29747.6", "18"],
245349
+ // ["30227.4", "9"]
245350
+ // ],
245351
+ // "channel": "LEVEL2",
245352
+ // "type": "SNAPSHOT",
245353
+ // }
245354
+ // update
245355
+ // {
245356
+ // "sequence": 1,
245357
+ // "product_id": "BTC-PERP",
245358
+ // "time": "2023-05-10T14:58:47.375Z",
245359
+ // "changes": [
245360
+ // [
245361
+ // "BUY",
245362
+ // "28787.7",
245363
+ // "6"
245364
+ // ]
245365
+ // ],
245366
+ // "channel": "LEVEL2",
245367
+ // "type": "UPDATE"
245368
+ // }
245369
+ //
245370
+ const type = this.safeString(message, 'type');
245371
+ const marketId = this.safeString(message, 'product_id');
245372
+ const symbol = this.safeSymbol(marketId);
245373
+ const datetime = this.safeString(message, 'time');
245374
+ const channel = this.safeString(message, 'channel');
245375
+ if (!(symbol in this.orderbooks)) {
245376
+ const limit = this.safeInteger(this.options, 'watchOrderBookLimit', 1000);
245377
+ this.orderbooks[symbol] = this.orderBook({}, limit);
245378
+ }
245379
+ const orderbook = this.orderbooks[symbol];
245380
+ if (type === 'SNAPSHOT') {
245381
+ const parsedSnapshot = this.parseOrderBook(message, symbol, undefined, 'bids', 'asks');
245382
+ orderbook.reset(parsedSnapshot);
245383
+ orderbook['symbol'] = symbol;
245384
+ }
245385
+ else {
245386
+ const changes = this.safeList(message, 'changes', []);
245387
+ this.handleDeltas(orderbook, changes);
245388
+ }
245389
+ orderbook['nonce'] = this.safeInteger(message, 'sequence');
245390
+ orderbook['datetime'] = datetime;
245391
+ orderbook['timestamp'] = this.parse8601(datetime);
245392
+ this.orderbooks[symbol] = orderbook;
245393
+ client.resolve(orderbook, channel + '::' + symbol);
245394
+ }
245395
+ handleDelta(orderbook, delta) {
245396
+ const rawSide = this.safeStringLower(delta, 0);
245397
+ const side = (rawSide === 'buy') ? 'bids' : 'asks';
245398
+ const price = this.safeFloat(delta, 1);
245399
+ const amount = this.safeFloat(delta, 2);
245400
+ const bookside = orderbook[side];
245401
+ bookside.store(price, amount);
245402
+ }
245403
+ handleDeltas(orderbook, deltas) {
245404
+ for (let i = 0; i < deltas.length; i++) {
245405
+ this.handleDelta(orderbook, deltas[i]);
245406
+ }
245407
+ }
245408
+ handleSubscriptionStatus(client, message) {
245409
+ //
245410
+ // {
245411
+ // "channels": [
245412
+ // {
245413
+ // "name": "MATCH",
245414
+ // "product_ids": [
245415
+ // "BTC-PERP",
245416
+ // "ETH-PERP"
245417
+ // ]
245418
+ // },
245419
+ // {
245420
+ // "name": "INSTRUMENTS",
245421
+ // "product_ids": [
245422
+ // "BTC-PERP",
245423
+ // "ETH-PERP"
245424
+ // ]
245425
+ // }
245426
+ // ],
245427
+ // "authenticated": true,
245428
+ // "channel": "SUBSCRIPTIONS",
245429
+ // "type": "SNAPSHOT",
245430
+ // "time": "2023-05-30T16:53:46.847Z"
245431
+ // }
245432
+ //
245433
+ return message;
245434
+ }
245435
+ handleFundingRate(client, message) {
245436
+ //
245437
+ // snapshot
245438
+ // {
245439
+ // "sequence": 0,
245440
+ // "product_id": "BTC-PERP",
245441
+ // "time": "2023-05-10T14:58:47.000Z",
245442
+ // "funding_rate": "0.001387",
245443
+ // "is_final": true,
245444
+ // "channel": "FUNDING",
245445
+ // "type": "SNAPSHOT"
245446
+ // }
245447
+ // update
245448
+ // {
245449
+ // "sequence": 1,
245450
+ // "product_id": "BTC-PERP",
245451
+ // "time": "2023-05-10T15:00:00.000Z",
245452
+ // "funding_rate": "0.001487",
245453
+ // "is_final": false,
245454
+ // "channel": "FUNDING",
245455
+ // "type": "UPDATE"
245456
+ // }
245457
+ //
245458
+ const channel = this.safeString(message, 'channel');
245459
+ const fundingRate = this.parseFundingRate(message);
245460
+ client.resolve(fundingRate, channel + '::' + fundingRate['symbol']);
245461
+ }
245462
+ handleErrorMessage(client, message) {
245463
+ //
245464
+ // {
245465
+ // message: 'Failed to subscribe',
245466
+ // reason: 'Unable to authenticate',
245467
+ // channel: 'SUBSCRIPTIONS',
245468
+ // type: 'REJECT'
245469
+ // }
245470
+ //
245471
+ const type = this.safeString(message, 'type');
245472
+ if (type !== 'REJECT') {
245473
+ return false;
245474
+ }
245475
+ const reason = this.safeString(message, 'reason');
245476
+ const errMsg = this.safeString(message, 'message');
245477
+ try {
245478
+ const feedback = this.id + ' ' + errMsg + reason;
245479
+ this.throwExactlyMatchedException(this.exceptions['exact'], reason, feedback);
245480
+ this.throwBroadlyMatchedException(this.exceptions['broad'], reason, feedback);
245481
+ throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_1__.ExchangeError(feedback);
245482
+ }
245483
+ catch (e) {
245484
+ client.reject(e);
245485
+ }
245486
+ return true;
245487
+ }
245488
+ handleMessage(client, message) {
245489
+ if (this.handleErrorMessage(client, message)) {
245490
+ return;
245491
+ }
245492
+ const channel = this.safeString(message, 'channel');
245493
+ const methods = {
245494
+ 'SUBSCRIPTIONS': this.handleSubscriptionStatus,
245495
+ 'INSTRUMENTS': this.handleInstrument,
245496
+ 'LEVEL1': this.handleTicker,
245497
+ 'MATCH': this.handleTrade,
245498
+ 'LEVEL2': this.handleOrderBook,
245499
+ 'FUNDING': this.handleFundingRate,
245500
+ 'RISK': this.handleTicker,
245501
+ };
245502
+ const type = this.safeString(message, 'type');
245503
+ if (type === 'error') {
245504
+ const errorMessage = this.safeString(message, 'message');
245505
+ throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_1__.ExchangeError(errorMessage);
245506
+ }
245507
+ const method = this.safeValue(methods, channel);
245508
+ if (method !== undefined) {
245509
+ method.call(this, client, message);
245510
+ }
245511
+ }
245512
+ }
245513
+
245514
+
242616
245515
  /***/ }),
242617
245516
 
242618
245517
  /***/ 8368:
@@ -251134,7 +254033,10 @@ class hitbtc extends _hitbtc_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z
251134
254033
  // }
251135
254034
  // }
251136
254035
  //
251137
- const data = this.safeValue2(message, 'snapshot', 'update', {});
254036
+ const snapshot = this.safeDict(message, 'snapshot');
254037
+ const update = this.safeDict(message, 'update');
254038
+ const data = snapshot ? snapshot : update;
254039
+ const type = snapshot ? 'snapshot' : 'update';
251138
254040
  const marketIds = Object.keys(data);
251139
254041
  for (let i = 0; i < marketIds.length; i++) {
251140
254042
  const marketId = marketIds[i];
@@ -251143,17 +254045,23 @@ class hitbtc extends _hitbtc_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z
251143
254045
  const item = data[marketId];
251144
254046
  const messageHash = 'orderbooks::' + symbol;
251145
254047
  if (!(symbol in this.orderbooks)) {
251146
- const subscription = this.safeValue(client.subscriptions, messageHash, {});
254048
+ const subscription = this.safeDict(client.subscriptions, messageHash, {});
251147
254049
  const limit = this.safeInteger(subscription, 'limit');
251148
254050
  this.orderbooks[symbol] = this.orderBook({}, limit);
251149
254051
  }
254052
+ const orderbook = this.orderbooks[symbol];
251150
254053
  const timestamp = this.safeInteger(item, 't');
251151
254054
  const nonce = this.safeInteger(item, 's');
251152
- const orderbook = this.orderbooks[symbol];
251153
- const asks = this.safeValue(item, 'a', []);
251154
- const bids = this.safeValue(item, 'b', []);
251155
- this.handleDeltas(orderbook['asks'], asks);
251156
- this.handleDeltas(orderbook['bids'], bids);
254055
+ if (type === 'snapshot') {
254056
+ const parsedSnapshot = this.parseOrderBook(item, symbol, timestamp, 'b', 'a');
254057
+ orderbook.reset(parsedSnapshot);
254058
+ }
254059
+ else {
254060
+ const asks = this.safeList(item, 'a', []);
254061
+ const bids = this.safeList(item, 'b', []);
254062
+ this.handleDeltas(orderbook['asks'], asks);
254063
+ this.handleDeltas(orderbook['bids'], bids);
254064
+ }
251157
254065
  orderbook['timestamp'] = timestamp;
251158
254066
  orderbook['datetime'] = this.iso8601(timestamp);
251159
254067
  orderbook['nonce'] = nonce;
@@ -317537,39 +320445,39 @@ var __webpack_exports__ = {};
317537
320445
  (() => {
317538
320446
  __webpack_require__.r(__webpack_exports__);
317539
320447
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
317540
- /* harmony export */ AccountNotEnabled: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.AccountNotEnabled),
317541
- /* harmony export */ AccountSuspended: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.AccountSuspended),
317542
- /* harmony export */ AddressPending: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.AddressPending),
317543
- /* harmony export */ ArgumentsRequired: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.ArgumentsRequired),
317544
- /* harmony export */ AuthenticationError: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.AuthenticationError),
317545
- /* harmony export */ BadRequest: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.BadRequest),
317546
- /* harmony export */ BadResponse: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.BadResponse),
317547
- /* harmony export */ BadSymbol: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.BadSymbol),
317548
- /* harmony export */ BaseError: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.BaseError),
317549
- /* harmony export */ CancelPending: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.CancelPending),
317550
- /* harmony export */ DDoSProtection: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.DDoSProtection),
317551
- /* harmony export */ DuplicateOrderId: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.DuplicateOrderId),
320448
+ /* harmony export */ AccountNotEnabled: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.AccountNotEnabled),
320449
+ /* harmony export */ AccountSuspended: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.AccountSuspended),
320450
+ /* harmony export */ AddressPending: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.AddressPending),
320451
+ /* harmony export */ ArgumentsRequired: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.ArgumentsRequired),
320452
+ /* harmony export */ AuthenticationError: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.AuthenticationError),
320453
+ /* harmony export */ BadRequest: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.BadRequest),
320454
+ /* harmony export */ BadResponse: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.BadResponse),
320455
+ /* harmony export */ BadSymbol: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.BadSymbol),
320456
+ /* harmony export */ BaseError: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.BaseError),
320457
+ /* harmony export */ CancelPending: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.CancelPending),
320458
+ /* harmony export */ DDoSProtection: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.DDoSProtection),
320459
+ /* harmony export */ DuplicateOrderId: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.DuplicateOrderId),
317552
320460
  /* harmony export */ Exchange: () => (/* reexport safe */ _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__.e),
317553
- /* harmony export */ ExchangeError: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.ExchangeError),
317554
- /* harmony export */ ExchangeNotAvailable: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.ExchangeNotAvailable),
317555
- /* harmony export */ InsufficientFunds: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.InsufficientFunds),
317556
- /* harmony export */ InvalidAddress: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.InvalidAddress),
317557
- /* harmony export */ InvalidNonce: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.InvalidNonce),
317558
- /* harmony export */ InvalidOrder: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.InvalidOrder),
317559
- /* harmony export */ MarginModeAlreadySet: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.MarginModeAlreadySet),
317560
- /* harmony export */ NetworkError: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.NetworkError),
317561
- /* harmony export */ NoChange: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.NoChange),
317562
- /* harmony export */ NotSupported: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.NotSupported),
317563
- /* harmony export */ NullResponse: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.NullResponse),
317564
- /* harmony export */ OnMaintenance: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.OnMaintenance),
317565
- /* harmony export */ OrderImmediatelyFillable: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.OrderImmediatelyFillable),
317566
- /* harmony export */ OrderNotCached: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.OrderNotCached),
317567
- /* harmony export */ OrderNotFillable: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.OrderNotFillable),
317568
- /* harmony export */ OrderNotFound: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.OrderNotFound),
317569
- /* harmony export */ PermissionDenied: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.PermissionDenied),
317570
- /* harmony export */ Precise: () => (/* reexport safe */ _src_base_Precise_js__WEBPACK_IMPORTED_MODULE_164__.O),
317571
- /* harmony export */ RateLimitExceeded: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.RateLimitExceeded),
317572
- /* harmony export */ RequestTimeout: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.RequestTimeout),
320461
+ /* harmony export */ ExchangeError: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.ExchangeError),
320462
+ /* harmony export */ ExchangeNotAvailable: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.ExchangeNotAvailable),
320463
+ /* harmony export */ InsufficientFunds: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.InsufficientFunds),
320464
+ /* harmony export */ InvalidAddress: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.InvalidAddress),
320465
+ /* harmony export */ InvalidNonce: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.InvalidNonce),
320466
+ /* harmony export */ InvalidOrder: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.InvalidOrder),
320467
+ /* harmony export */ MarginModeAlreadySet: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.MarginModeAlreadySet),
320468
+ /* harmony export */ NetworkError: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.NetworkError),
320469
+ /* harmony export */ NoChange: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.NoChange),
320470
+ /* harmony export */ NotSupported: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.NotSupported),
320471
+ /* harmony export */ NullResponse: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.NullResponse),
320472
+ /* harmony export */ OnMaintenance: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.OnMaintenance),
320473
+ /* harmony export */ OrderImmediatelyFillable: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.OrderImmediatelyFillable),
320474
+ /* harmony export */ OrderNotCached: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.OrderNotCached),
320475
+ /* harmony export */ OrderNotFillable: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.OrderNotFillable),
320476
+ /* harmony export */ OrderNotFound: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.OrderNotFound),
320477
+ /* harmony export */ PermissionDenied: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.PermissionDenied),
320478
+ /* harmony export */ Precise: () => (/* reexport safe */ _src_base_Precise_js__WEBPACK_IMPORTED_MODULE_166__.O),
320479
+ /* harmony export */ RateLimitExceeded: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.RateLimitExceeded),
320480
+ /* harmony export */ RequestTimeout: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.RequestTimeout),
317573
320481
  /* harmony export */ ace: () => (/* reexport safe */ _src_ace_js__WEBPACK_IMPORTED_MODULE_1__.Z),
317574
320482
  /* harmony export */ alpaca: () => (/* reexport safe */ _src_alpaca_js__WEBPACK_IMPORTED_MODULE_2__.Z),
317575
320483
  /* harmony export */ ascendex: () => (/* reexport safe */ _src_ascendex_js__WEBPACK_IMPORTED_MODULE_3__.Z),
@@ -317609,79 +320517,80 @@ __webpack_require__.r(__webpack_exports__);
317609
320517
  /* harmony export */ bybit: () => (/* reexport safe */ _src_bybit_js__WEBPACK_IMPORTED_MODULE_37__.Z),
317610
320518
  /* harmony export */ cex: () => (/* reexport safe */ _src_cex_js__WEBPACK_IMPORTED_MODULE_38__.Z),
317611
320519
  /* harmony export */ coinbase: () => (/* reexport safe */ _src_coinbase_js__WEBPACK_IMPORTED_MODULE_39__.Z),
317612
- /* harmony export */ coinbasepro: () => (/* reexport safe */ _src_coinbasepro_js__WEBPACK_IMPORTED_MODULE_40__.Z),
317613
- /* harmony export */ coincheck: () => (/* reexport safe */ _src_coincheck_js__WEBPACK_IMPORTED_MODULE_41__.Z),
317614
- /* harmony export */ coinex: () => (/* reexport safe */ _src_coinex_js__WEBPACK_IMPORTED_MODULE_42__.Z),
317615
- /* harmony export */ coinlist: () => (/* reexport safe */ _src_coinlist_js__WEBPACK_IMPORTED_MODULE_43__.Z),
317616
- /* harmony export */ coinmate: () => (/* reexport safe */ _src_coinmate_js__WEBPACK_IMPORTED_MODULE_44__.Z),
317617
- /* harmony export */ coinmetro: () => (/* reexport safe */ _src_coinmetro_js__WEBPACK_IMPORTED_MODULE_45__.Z),
317618
- /* harmony export */ coinone: () => (/* reexport safe */ _src_coinone_js__WEBPACK_IMPORTED_MODULE_46__.Z),
317619
- /* harmony export */ coinsph: () => (/* reexport safe */ _src_coinsph_js__WEBPACK_IMPORTED_MODULE_47__.Z),
317620
- /* harmony export */ coinspot: () => (/* reexport safe */ _src_coinspot_js__WEBPACK_IMPORTED_MODULE_48__.Z),
317621
- /* harmony export */ cryptocom: () => (/* reexport safe */ _src_cryptocom_js__WEBPACK_IMPORTED_MODULE_49__.Z),
317622
- /* harmony export */ currencycom: () => (/* reexport safe */ _src_currencycom_js__WEBPACK_IMPORTED_MODULE_50__.Z),
320520
+ /* harmony export */ coinbaseinternational: () => (/* reexport safe */ _src_coinbaseinternational_js__WEBPACK_IMPORTED_MODULE_40__.Z),
320521
+ /* harmony export */ coinbasepro: () => (/* reexport safe */ _src_coinbasepro_js__WEBPACK_IMPORTED_MODULE_41__.Z),
320522
+ /* harmony export */ coincheck: () => (/* reexport safe */ _src_coincheck_js__WEBPACK_IMPORTED_MODULE_42__.Z),
320523
+ /* harmony export */ coinex: () => (/* reexport safe */ _src_coinex_js__WEBPACK_IMPORTED_MODULE_43__.Z),
320524
+ /* harmony export */ coinlist: () => (/* reexport safe */ _src_coinlist_js__WEBPACK_IMPORTED_MODULE_44__.Z),
320525
+ /* harmony export */ coinmate: () => (/* reexport safe */ _src_coinmate_js__WEBPACK_IMPORTED_MODULE_45__.Z),
320526
+ /* harmony export */ coinmetro: () => (/* reexport safe */ _src_coinmetro_js__WEBPACK_IMPORTED_MODULE_46__.Z),
320527
+ /* harmony export */ coinone: () => (/* reexport safe */ _src_coinone_js__WEBPACK_IMPORTED_MODULE_47__.Z),
320528
+ /* harmony export */ coinsph: () => (/* reexport safe */ _src_coinsph_js__WEBPACK_IMPORTED_MODULE_48__.Z),
320529
+ /* harmony export */ coinspot: () => (/* reexport safe */ _src_coinspot_js__WEBPACK_IMPORTED_MODULE_49__.Z),
320530
+ /* harmony export */ cryptocom: () => (/* reexport safe */ _src_cryptocom_js__WEBPACK_IMPORTED_MODULE_50__.Z),
320531
+ /* harmony export */ currencycom: () => (/* reexport safe */ _src_currencycom_js__WEBPACK_IMPORTED_MODULE_51__.Z),
317623
320532
  /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__),
317624
- /* harmony export */ delta: () => (/* reexport safe */ _src_delta_js__WEBPACK_IMPORTED_MODULE_51__.Z),
317625
- /* harmony export */ deribit: () => (/* reexport safe */ _src_deribit_js__WEBPACK_IMPORTED_MODULE_52__.Z),
317626
- /* harmony export */ digifinex: () => (/* reexport safe */ _src_digifinex_js__WEBPACK_IMPORTED_MODULE_53__.Z),
317627
- /* harmony export */ errors: () => (/* reexport module object */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__),
320533
+ /* harmony export */ delta: () => (/* reexport safe */ _src_delta_js__WEBPACK_IMPORTED_MODULE_52__.Z),
320534
+ /* harmony export */ deribit: () => (/* reexport safe */ _src_deribit_js__WEBPACK_IMPORTED_MODULE_53__.Z),
320535
+ /* harmony export */ digifinex: () => (/* reexport safe */ _src_digifinex_js__WEBPACK_IMPORTED_MODULE_54__.Z),
320536
+ /* harmony export */ errors: () => (/* reexport module object */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__),
317628
320537
  /* harmony export */ exchanges: () => (/* binding */ exchanges),
317629
- /* harmony export */ exmo: () => (/* reexport safe */ _src_exmo_js__WEBPACK_IMPORTED_MODULE_54__.Z),
317630
- /* harmony export */ fmfwio: () => (/* reexport safe */ _src_fmfwio_js__WEBPACK_IMPORTED_MODULE_55__.Z),
317631
- /* harmony export */ functions: () => (/* reexport module object */ _src_base_functions_js__WEBPACK_IMPORTED_MODULE_165__),
317632
- /* harmony export */ gate: () => (/* reexport safe */ _src_gate_js__WEBPACK_IMPORTED_MODULE_56__.Z),
317633
- /* harmony export */ gateio: () => (/* reexport safe */ _src_gateio_js__WEBPACK_IMPORTED_MODULE_57__.Z),
317634
- /* harmony export */ gemini: () => (/* reexport safe */ _src_gemini_js__WEBPACK_IMPORTED_MODULE_58__.Z),
317635
- /* harmony export */ hitbtc: () => (/* reexport safe */ _src_hitbtc_js__WEBPACK_IMPORTED_MODULE_59__.Z),
317636
- /* harmony export */ hitbtc3: () => (/* reexport safe */ _src_hitbtc3_js__WEBPACK_IMPORTED_MODULE_60__.Z),
317637
- /* harmony export */ hollaex: () => (/* reexport safe */ _src_hollaex_js__WEBPACK_IMPORTED_MODULE_61__.Z),
317638
- /* harmony export */ htx: () => (/* reexport safe */ _src_htx_js__WEBPACK_IMPORTED_MODULE_62__.Z),
317639
- /* harmony export */ huobi: () => (/* reexport safe */ _src_huobi_js__WEBPACK_IMPORTED_MODULE_63__.Z),
317640
- /* harmony export */ huobijp: () => (/* reexport safe */ _src_huobijp_js__WEBPACK_IMPORTED_MODULE_64__.Z),
317641
- /* harmony export */ hyperliquid: () => (/* reexport safe */ _src_hyperliquid_js__WEBPACK_IMPORTED_MODULE_65__.Z),
317642
- /* harmony export */ idex: () => (/* reexport safe */ _src_idex_js__WEBPACK_IMPORTED_MODULE_66__.Z),
317643
- /* harmony export */ independentreserve: () => (/* reexport safe */ _src_independentreserve_js__WEBPACK_IMPORTED_MODULE_67__.Z),
317644
- /* harmony export */ indodax: () => (/* reexport safe */ _src_indodax_js__WEBPACK_IMPORTED_MODULE_68__.Z),
317645
- /* harmony export */ kraken: () => (/* reexport safe */ _src_kraken_js__WEBPACK_IMPORTED_MODULE_69__.Z),
317646
- /* harmony export */ krakenfutures: () => (/* reexport safe */ _src_krakenfutures_js__WEBPACK_IMPORTED_MODULE_70__.Z),
317647
- /* harmony export */ kucoin: () => (/* reexport safe */ _src_kucoin_js__WEBPACK_IMPORTED_MODULE_71__.Z),
317648
- /* harmony export */ kucoinfutures: () => (/* reexport safe */ _src_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_72__.Z),
317649
- /* harmony export */ kuna: () => (/* reexport safe */ _src_kuna_js__WEBPACK_IMPORTED_MODULE_73__.Z),
317650
- /* harmony export */ latoken: () => (/* reexport safe */ _src_latoken_js__WEBPACK_IMPORTED_MODULE_74__.Z),
317651
- /* harmony export */ lbank: () => (/* reexport safe */ _src_lbank_js__WEBPACK_IMPORTED_MODULE_75__.Z),
317652
- /* harmony export */ luno: () => (/* reexport safe */ _src_luno_js__WEBPACK_IMPORTED_MODULE_76__.Z),
317653
- /* harmony export */ lykke: () => (/* reexport safe */ _src_lykke_js__WEBPACK_IMPORTED_MODULE_77__.Z),
317654
- /* harmony export */ mercado: () => (/* reexport safe */ _src_mercado_js__WEBPACK_IMPORTED_MODULE_78__.Z),
317655
- /* harmony export */ mexc: () => (/* reexport safe */ _src_mexc_js__WEBPACK_IMPORTED_MODULE_79__.Z),
317656
- /* harmony export */ ndax: () => (/* reexport safe */ _src_ndax_js__WEBPACK_IMPORTED_MODULE_80__.Z),
317657
- /* harmony export */ novadax: () => (/* reexport safe */ _src_novadax_js__WEBPACK_IMPORTED_MODULE_81__.Z),
317658
- /* harmony export */ oceanex: () => (/* reexport safe */ _src_oceanex_js__WEBPACK_IMPORTED_MODULE_82__.Z),
317659
- /* harmony export */ okcoin: () => (/* reexport safe */ _src_okcoin_js__WEBPACK_IMPORTED_MODULE_83__.Z),
317660
- /* harmony export */ okx: () => (/* reexport safe */ _src_okx_js__WEBPACK_IMPORTED_MODULE_84__.Z),
317661
- /* harmony export */ onetrading: () => (/* reexport safe */ _src_onetrading_js__WEBPACK_IMPORTED_MODULE_85__.Z),
317662
- /* harmony export */ p2b: () => (/* reexport safe */ _src_p2b_js__WEBPACK_IMPORTED_MODULE_86__.Z),
317663
- /* harmony export */ paymium: () => (/* reexport safe */ _src_paymium_js__WEBPACK_IMPORTED_MODULE_87__.Z),
317664
- /* harmony export */ phemex: () => (/* reexport safe */ _src_phemex_js__WEBPACK_IMPORTED_MODULE_88__.Z),
317665
- /* harmony export */ poloniex: () => (/* reexport safe */ _src_poloniex_js__WEBPACK_IMPORTED_MODULE_89__.Z),
317666
- /* harmony export */ poloniexfutures: () => (/* reexport safe */ _src_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_90__.Z),
320538
+ /* harmony export */ exmo: () => (/* reexport safe */ _src_exmo_js__WEBPACK_IMPORTED_MODULE_55__.Z),
320539
+ /* harmony export */ fmfwio: () => (/* reexport safe */ _src_fmfwio_js__WEBPACK_IMPORTED_MODULE_56__.Z),
320540
+ /* harmony export */ functions: () => (/* reexport module object */ _src_base_functions_js__WEBPACK_IMPORTED_MODULE_167__),
320541
+ /* harmony export */ gate: () => (/* reexport safe */ _src_gate_js__WEBPACK_IMPORTED_MODULE_57__.Z),
320542
+ /* harmony export */ gateio: () => (/* reexport safe */ _src_gateio_js__WEBPACK_IMPORTED_MODULE_58__.Z),
320543
+ /* harmony export */ gemini: () => (/* reexport safe */ _src_gemini_js__WEBPACK_IMPORTED_MODULE_59__.Z),
320544
+ /* harmony export */ hitbtc: () => (/* reexport safe */ _src_hitbtc_js__WEBPACK_IMPORTED_MODULE_60__.Z),
320545
+ /* harmony export */ hitbtc3: () => (/* reexport safe */ _src_hitbtc3_js__WEBPACK_IMPORTED_MODULE_61__.Z),
320546
+ /* harmony export */ hollaex: () => (/* reexport safe */ _src_hollaex_js__WEBPACK_IMPORTED_MODULE_62__.Z),
320547
+ /* harmony export */ htx: () => (/* reexport safe */ _src_htx_js__WEBPACK_IMPORTED_MODULE_63__.Z),
320548
+ /* harmony export */ huobi: () => (/* reexport safe */ _src_huobi_js__WEBPACK_IMPORTED_MODULE_64__.Z),
320549
+ /* harmony export */ huobijp: () => (/* reexport safe */ _src_huobijp_js__WEBPACK_IMPORTED_MODULE_65__.Z),
320550
+ /* harmony export */ hyperliquid: () => (/* reexport safe */ _src_hyperliquid_js__WEBPACK_IMPORTED_MODULE_66__.Z),
320551
+ /* harmony export */ idex: () => (/* reexport safe */ _src_idex_js__WEBPACK_IMPORTED_MODULE_67__.Z),
320552
+ /* harmony export */ independentreserve: () => (/* reexport safe */ _src_independentreserve_js__WEBPACK_IMPORTED_MODULE_68__.Z),
320553
+ /* harmony export */ indodax: () => (/* reexport safe */ _src_indodax_js__WEBPACK_IMPORTED_MODULE_69__.Z),
320554
+ /* harmony export */ kraken: () => (/* reexport safe */ _src_kraken_js__WEBPACK_IMPORTED_MODULE_70__.Z),
320555
+ /* harmony export */ krakenfutures: () => (/* reexport safe */ _src_krakenfutures_js__WEBPACK_IMPORTED_MODULE_71__.Z),
320556
+ /* harmony export */ kucoin: () => (/* reexport safe */ _src_kucoin_js__WEBPACK_IMPORTED_MODULE_72__.Z),
320557
+ /* harmony export */ kucoinfutures: () => (/* reexport safe */ _src_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_73__.Z),
320558
+ /* harmony export */ kuna: () => (/* reexport safe */ _src_kuna_js__WEBPACK_IMPORTED_MODULE_74__.Z),
320559
+ /* harmony export */ latoken: () => (/* reexport safe */ _src_latoken_js__WEBPACK_IMPORTED_MODULE_75__.Z),
320560
+ /* harmony export */ lbank: () => (/* reexport safe */ _src_lbank_js__WEBPACK_IMPORTED_MODULE_76__.Z),
320561
+ /* harmony export */ luno: () => (/* reexport safe */ _src_luno_js__WEBPACK_IMPORTED_MODULE_77__.Z),
320562
+ /* harmony export */ lykke: () => (/* reexport safe */ _src_lykke_js__WEBPACK_IMPORTED_MODULE_78__.Z),
320563
+ /* harmony export */ mercado: () => (/* reexport safe */ _src_mercado_js__WEBPACK_IMPORTED_MODULE_79__.Z),
320564
+ /* harmony export */ mexc: () => (/* reexport safe */ _src_mexc_js__WEBPACK_IMPORTED_MODULE_80__.Z),
320565
+ /* harmony export */ ndax: () => (/* reexport safe */ _src_ndax_js__WEBPACK_IMPORTED_MODULE_81__.Z),
320566
+ /* harmony export */ novadax: () => (/* reexport safe */ _src_novadax_js__WEBPACK_IMPORTED_MODULE_82__.Z),
320567
+ /* harmony export */ oceanex: () => (/* reexport safe */ _src_oceanex_js__WEBPACK_IMPORTED_MODULE_83__.Z),
320568
+ /* harmony export */ okcoin: () => (/* reexport safe */ _src_okcoin_js__WEBPACK_IMPORTED_MODULE_84__.Z),
320569
+ /* harmony export */ okx: () => (/* reexport safe */ _src_okx_js__WEBPACK_IMPORTED_MODULE_85__.Z),
320570
+ /* harmony export */ onetrading: () => (/* reexport safe */ _src_onetrading_js__WEBPACK_IMPORTED_MODULE_86__.Z),
320571
+ /* harmony export */ p2b: () => (/* reexport safe */ _src_p2b_js__WEBPACK_IMPORTED_MODULE_87__.Z),
320572
+ /* harmony export */ paymium: () => (/* reexport safe */ _src_paymium_js__WEBPACK_IMPORTED_MODULE_88__.Z),
320573
+ /* harmony export */ phemex: () => (/* reexport safe */ _src_phemex_js__WEBPACK_IMPORTED_MODULE_89__.Z),
320574
+ /* harmony export */ poloniex: () => (/* reexport safe */ _src_poloniex_js__WEBPACK_IMPORTED_MODULE_90__.Z),
320575
+ /* harmony export */ poloniexfutures: () => (/* reexport safe */ _src_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_91__.Z),
317667
320576
  /* harmony export */ pro: () => (/* binding */ pro),
317668
- /* harmony export */ probit: () => (/* reexport safe */ _src_probit_js__WEBPACK_IMPORTED_MODULE_91__.Z),
317669
- /* harmony export */ timex: () => (/* reexport safe */ _src_timex_js__WEBPACK_IMPORTED_MODULE_92__.Z),
317670
- /* harmony export */ tokocrypto: () => (/* reexport safe */ _src_tokocrypto_js__WEBPACK_IMPORTED_MODULE_93__.Z),
317671
- /* harmony export */ upbit: () => (/* reexport safe */ _src_upbit_js__WEBPACK_IMPORTED_MODULE_94__.Z),
320577
+ /* harmony export */ probit: () => (/* reexport safe */ _src_probit_js__WEBPACK_IMPORTED_MODULE_92__.Z),
320578
+ /* harmony export */ timex: () => (/* reexport safe */ _src_timex_js__WEBPACK_IMPORTED_MODULE_93__.Z),
320579
+ /* harmony export */ tokocrypto: () => (/* reexport safe */ _src_tokocrypto_js__WEBPACK_IMPORTED_MODULE_94__.Z),
320580
+ /* harmony export */ upbit: () => (/* reexport safe */ _src_upbit_js__WEBPACK_IMPORTED_MODULE_95__.Z),
317672
320581
  /* harmony export */ version: () => (/* binding */ version),
317673
- /* harmony export */ wavesexchange: () => (/* reexport safe */ _src_wavesexchange_js__WEBPACK_IMPORTED_MODULE_95__.Z),
317674
- /* harmony export */ wazirx: () => (/* reexport safe */ _src_wazirx_js__WEBPACK_IMPORTED_MODULE_96__.Z),
317675
- /* harmony export */ whitebit: () => (/* reexport safe */ _src_whitebit_js__WEBPACK_IMPORTED_MODULE_97__.Z),
317676
- /* harmony export */ woo: () => (/* reexport safe */ _src_woo_js__WEBPACK_IMPORTED_MODULE_98__.Z),
317677
- /* harmony export */ yobit: () => (/* reexport safe */ _src_yobit_js__WEBPACK_IMPORTED_MODULE_99__.Z),
317678
- /* harmony export */ zaif: () => (/* reexport safe */ _src_zaif_js__WEBPACK_IMPORTED_MODULE_100__.Z),
317679
- /* harmony export */ zonda: () => (/* reexport safe */ _src_zonda_js__WEBPACK_IMPORTED_MODULE_101__.Z)
320582
+ /* harmony export */ wavesexchange: () => (/* reexport safe */ _src_wavesexchange_js__WEBPACK_IMPORTED_MODULE_96__.Z),
320583
+ /* harmony export */ wazirx: () => (/* reexport safe */ _src_wazirx_js__WEBPACK_IMPORTED_MODULE_97__.Z),
320584
+ /* harmony export */ whitebit: () => (/* reexport safe */ _src_whitebit_js__WEBPACK_IMPORTED_MODULE_98__.Z),
320585
+ /* harmony export */ woo: () => (/* reexport safe */ _src_woo_js__WEBPACK_IMPORTED_MODULE_99__.Z),
320586
+ /* harmony export */ yobit: () => (/* reexport safe */ _src_yobit_js__WEBPACK_IMPORTED_MODULE_100__.Z),
320587
+ /* harmony export */ zaif: () => (/* reexport safe */ _src_zaif_js__WEBPACK_IMPORTED_MODULE_101__.Z),
320588
+ /* harmony export */ zonda: () => (/* reexport safe */ _src_zonda_js__WEBPACK_IMPORTED_MODULE_102__.Z)
317680
320589
  /* harmony export */ });
317681
320590
  /* harmony import */ var _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3043);
317682
- /* harmony import */ var _src_base_Precise_js__WEBPACK_IMPORTED_MODULE_164__ = __webpack_require__(2194);
317683
- /* harmony import */ var _src_base_functions_js__WEBPACK_IMPORTED_MODULE_165__ = __webpack_require__(7100);
317684
- /* harmony import */ var _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__ = __webpack_require__(6689);
320591
+ /* harmony import */ var _src_base_Precise_js__WEBPACK_IMPORTED_MODULE_166__ = __webpack_require__(2194);
320592
+ /* harmony import */ var _src_base_functions_js__WEBPACK_IMPORTED_MODULE_167__ = __webpack_require__(7100);
320593
+ /* harmony import */ var _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__ = __webpack_require__(6689);
317685
320594
  /* harmony import */ var _src_ace_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9869);
317686
320595
  /* harmony import */ var _src_alpaca_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5660);
317687
320596
  /* harmony import */ var _src_ascendex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9612);
@@ -317721,130 +320630,132 @@ __webpack_require__.r(__webpack_exports__);
317721
320630
  /* harmony import */ var _src_bybit_js__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(3527);
317722
320631
  /* harmony import */ var _src_cex_js__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(6445);
317723
320632
  /* harmony import */ var _src_coinbase_js__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(437);
317724
- /* harmony import */ var _src_coinbasepro_js__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(8856);
317725
- /* harmony import */ var _src_coincheck_js__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(2117);
317726
- /* harmony import */ var _src_coinex_js__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(332);
317727
- /* harmony import */ var _src_coinlist_js__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(3623);
317728
- /* harmony import */ var _src_coinmate_js__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(9816);
317729
- /* harmony import */ var _src_coinmetro_js__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(4759);
317730
- /* harmony import */ var _src_coinone_js__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(7811);
317731
- /* harmony import */ var _src_coinsph_js__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(5782);
317732
- /* harmony import */ var _src_coinspot_js__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(7794);
317733
- /* harmony import */ var _src_cryptocom_js__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(9129);
317734
- /* harmony import */ var _src_currencycom_js__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(3214);
317735
- /* harmony import */ var _src_delta_js__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(1753);
317736
- /* harmony import */ var _src_deribit_js__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(24);
317737
- /* harmony import */ var _src_digifinex_js__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(8846);
317738
- /* harmony import */ var _src_exmo_js__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(1729);
317739
- /* harmony import */ var _src_fmfwio_js__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(5788);
317740
- /* harmony import */ var _src_gate_js__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(7290);
317741
- /* harmony import */ var _src_gateio_js__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(7036);
317742
- /* harmony import */ var _src_gemini_js__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(6743);
317743
- /* harmony import */ var _src_hitbtc_js__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(4714);
317744
- /* harmony import */ var _src_hitbtc3_js__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(4815);
317745
- /* harmony import */ var _src_hollaex_js__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(8422);
317746
- /* harmony import */ var _src_htx_js__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(5939);
317747
- /* harmony import */ var _src_huobi_js__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(8146);
317748
- /* harmony import */ var _src_huobijp_js__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(7034);
317749
- /* harmony import */ var _src_hyperliquid_js__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(5959);
317750
- /* harmony import */ var _src_idex_js__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(8232);
317751
- /* harmony import */ var _src_independentreserve_js__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(9570);
317752
- /* harmony import */ var _src_indodax_js__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(1605);
317753
- /* harmony import */ var _src_kraken_js__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(9922);
317754
- /* harmony import */ var _src_krakenfutures_js__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(4470);
317755
- /* harmony import */ var _src_kucoin_js__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(3583);
317756
- /* harmony import */ var _src_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(1924);
317757
- /* harmony import */ var _src_kuna_js__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(7732);
317758
- /* harmony import */ var _src_latoken_js__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(2545);
317759
- /* harmony import */ var _src_lbank_js__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(3944);
317760
- /* harmony import */ var _src_luno_js__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(1758);
317761
- /* harmony import */ var _src_lykke_js__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(3803);
317762
- /* harmony import */ var _src_mercado_js__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(9013);
317763
- /* harmony import */ var _src_mexc_js__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(6641);
317764
- /* harmony import */ var _src_ndax_js__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(4531);
317765
- /* harmony import */ var _src_novadax_js__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(2449);
317766
- /* harmony import */ var _src_oceanex_js__WEBPACK_IMPORTED_MODULE_82__ = __webpack_require__(6749);
317767
- /* harmony import */ var _src_okcoin_js__WEBPACK_IMPORTED_MODULE_83__ = __webpack_require__(3007);
317768
- /* harmony import */ var _src_okx_js__WEBPACK_IMPORTED_MODULE_84__ = __webpack_require__(4042);
317769
- /* harmony import */ var _src_onetrading_js__WEBPACK_IMPORTED_MODULE_85__ = __webpack_require__(6481);
317770
- /* harmony import */ var _src_p2b_js__WEBPACK_IMPORTED_MODULE_86__ = __webpack_require__(2466);
317771
- /* harmony import */ var _src_paymium_js__WEBPACK_IMPORTED_MODULE_87__ = __webpack_require__(7082);
317772
- /* harmony import */ var _src_phemex_js__WEBPACK_IMPORTED_MODULE_88__ = __webpack_require__(79);
317773
- /* harmony import */ var _src_poloniex_js__WEBPACK_IMPORTED_MODULE_89__ = __webpack_require__(8891);
317774
- /* harmony import */ var _src_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_90__ = __webpack_require__(6877);
317775
- /* harmony import */ var _src_probit_js__WEBPACK_IMPORTED_MODULE_91__ = __webpack_require__(3657);
317776
- /* harmony import */ var _src_timex_js__WEBPACK_IMPORTED_MODULE_92__ = __webpack_require__(1067);
317777
- /* harmony import */ var _src_tokocrypto_js__WEBPACK_IMPORTED_MODULE_93__ = __webpack_require__(5261);
317778
- /* harmony import */ var _src_upbit_js__WEBPACK_IMPORTED_MODULE_94__ = __webpack_require__(7584);
317779
- /* harmony import */ var _src_wavesexchange_js__WEBPACK_IMPORTED_MODULE_95__ = __webpack_require__(3853);
317780
- /* harmony import */ var _src_wazirx_js__WEBPACK_IMPORTED_MODULE_96__ = __webpack_require__(6536);
317781
- /* harmony import */ var _src_whitebit_js__WEBPACK_IMPORTED_MODULE_97__ = __webpack_require__(5467);
317782
- /* harmony import */ var _src_woo_js__WEBPACK_IMPORTED_MODULE_98__ = __webpack_require__(517);
317783
- /* harmony import */ var _src_yobit_js__WEBPACK_IMPORTED_MODULE_99__ = __webpack_require__(3850);
317784
- /* harmony import */ var _src_zaif_js__WEBPACK_IMPORTED_MODULE_100__ = __webpack_require__(5934);
317785
- /* harmony import */ var _src_zonda_js__WEBPACK_IMPORTED_MODULE_101__ = __webpack_require__(5140);
317786
- /* harmony import */ var _src_pro_alpaca_js__WEBPACK_IMPORTED_MODULE_102__ = __webpack_require__(2467);
317787
- /* harmony import */ var _src_pro_ascendex_js__WEBPACK_IMPORTED_MODULE_103__ = __webpack_require__(2383);
317788
- /* harmony import */ var _src_pro_bequant_js__WEBPACK_IMPORTED_MODULE_104__ = __webpack_require__(8848);
317789
- /* harmony import */ var _src_pro_binance_js__WEBPACK_IMPORTED_MODULE_105__ = __webpack_require__(8764);
317790
- /* harmony import */ var _src_pro_binancecoinm_js__WEBPACK_IMPORTED_MODULE_106__ = __webpack_require__(5078);
317791
- /* harmony import */ var _src_pro_binanceus_js__WEBPACK_IMPORTED_MODULE_107__ = __webpack_require__(1326);
317792
- /* harmony import */ var _src_pro_binanceusdm_js__WEBPACK_IMPORTED_MODULE_108__ = __webpack_require__(1230);
317793
- /* harmony import */ var _src_pro_bingx_js__WEBPACK_IMPORTED_MODULE_109__ = __webpack_require__(6955);
317794
- /* harmony import */ var _src_pro_bitcoincom_js__WEBPACK_IMPORTED_MODULE_110__ = __webpack_require__(453);
317795
- /* harmony import */ var _src_pro_bitfinex_js__WEBPACK_IMPORTED_MODULE_111__ = __webpack_require__(9772);
317796
- /* harmony import */ var _src_pro_bitfinex2_js__WEBPACK_IMPORTED_MODULE_112__ = __webpack_require__(588);
317797
- /* harmony import */ var _src_pro_bitget_js__WEBPACK_IMPORTED_MODULE_113__ = __webpack_require__(1885);
317798
- /* harmony import */ var _src_pro_bitmart_js__WEBPACK_IMPORTED_MODULE_114__ = __webpack_require__(7504);
317799
- /* harmony import */ var _src_pro_bitmex_js__WEBPACK_IMPORTED_MODULE_115__ = __webpack_require__(2302);
317800
- /* harmony import */ var _src_pro_bitopro_js__WEBPACK_IMPORTED_MODULE_116__ = __webpack_require__(2191);
317801
- /* harmony import */ var _src_pro_bitpanda_js__WEBPACK_IMPORTED_MODULE_117__ = __webpack_require__(1297);
317802
- /* harmony import */ var _src_pro_bitrue_js__WEBPACK_IMPORTED_MODULE_118__ = __webpack_require__(3005);
317803
- /* harmony import */ var _src_pro_bitstamp_js__WEBPACK_IMPORTED_MODULE_119__ = __webpack_require__(2317);
317804
- /* harmony import */ var _src_pro_bitvavo_js__WEBPACK_IMPORTED_MODULE_120__ = __webpack_require__(6977);
317805
- /* harmony import */ var _src_pro_blockchaincom_js__WEBPACK_IMPORTED_MODULE_121__ = __webpack_require__(2519);
317806
- /* harmony import */ var _src_pro_bybit_js__WEBPACK_IMPORTED_MODULE_122__ = __webpack_require__(5030);
317807
- /* harmony import */ var _src_pro_cex_js__WEBPACK_IMPORTED_MODULE_123__ = __webpack_require__(5272);
317808
- /* harmony import */ var _src_pro_coinbase_js__WEBPACK_IMPORTED_MODULE_124__ = __webpack_require__(3414);
317809
- /* harmony import */ var _src_pro_coinbasepro_js__WEBPACK_IMPORTED_MODULE_125__ = __webpack_require__(8368);
317810
- /* harmony import */ var _src_pro_coincheck_js__WEBPACK_IMPORTED_MODULE_126__ = __webpack_require__(7891);
317811
- /* harmony import */ var _src_pro_coinex_js__WEBPACK_IMPORTED_MODULE_127__ = __webpack_require__(204);
317812
- /* harmony import */ var _src_pro_coinone_js__WEBPACK_IMPORTED_MODULE_128__ = __webpack_require__(5208);
317813
- /* harmony import */ var _src_pro_cryptocom_js__WEBPACK_IMPORTED_MODULE_129__ = __webpack_require__(6820);
317814
- /* harmony import */ var _src_pro_currencycom_js__WEBPACK_IMPORTED_MODULE_130__ = __webpack_require__(2952);
317815
- /* harmony import */ var _src_pro_deribit_js__WEBPACK_IMPORTED_MODULE_131__ = __webpack_require__(1788);
317816
- /* harmony import */ var _src_pro_exmo_js__WEBPACK_IMPORTED_MODULE_132__ = __webpack_require__(9004);
317817
- /* harmony import */ var _src_pro_gate_js__WEBPACK_IMPORTED_MODULE_133__ = __webpack_require__(8335);
317818
- /* harmony import */ var _src_pro_gateio_js__WEBPACK_IMPORTED_MODULE_134__ = __webpack_require__(1465);
317819
- /* harmony import */ var _src_pro_gemini_js__WEBPACK_IMPORTED_MODULE_135__ = __webpack_require__(9488);
317820
- /* harmony import */ var _src_pro_hitbtc_js__WEBPACK_IMPORTED_MODULE_136__ = __webpack_require__(5189);
317821
- /* harmony import */ var _src_pro_hollaex_js__WEBPACK_IMPORTED_MODULE_137__ = __webpack_require__(8559);
317822
- /* harmony import */ var _src_pro_htx_js__WEBPACK_IMPORTED_MODULE_138__ = __webpack_require__(7474);
317823
- /* harmony import */ var _src_pro_huobi_js__WEBPACK_IMPORTED_MODULE_139__ = __webpack_require__(8384);
317824
- /* harmony import */ var _src_pro_huobijp_js__WEBPACK_IMPORTED_MODULE_140__ = __webpack_require__(9021);
317825
- /* harmony import */ var _src_pro_hyperliquid_js__WEBPACK_IMPORTED_MODULE_141__ = __webpack_require__(8354);
317826
- /* harmony import */ var _src_pro_idex_js__WEBPACK_IMPORTED_MODULE_142__ = __webpack_require__(3484);
317827
- /* harmony import */ var _src_pro_independentreserve_js__WEBPACK_IMPORTED_MODULE_143__ = __webpack_require__(1311);
317828
- /* harmony import */ var _src_pro_kraken_js__WEBPACK_IMPORTED_MODULE_144__ = __webpack_require__(736);
317829
- /* harmony import */ var _src_pro_krakenfutures_js__WEBPACK_IMPORTED_MODULE_145__ = __webpack_require__(449);
317830
- /* harmony import */ var _src_pro_kucoin_js__WEBPACK_IMPORTED_MODULE_146__ = __webpack_require__(2387);
317831
- /* harmony import */ var _src_pro_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_147__ = __webpack_require__(7181);
317832
- /* harmony import */ var _src_pro_lbank_js__WEBPACK_IMPORTED_MODULE_148__ = __webpack_require__(1267);
317833
- /* harmony import */ var _src_pro_luno_js__WEBPACK_IMPORTED_MODULE_149__ = __webpack_require__(627);
317834
- /* harmony import */ var _src_pro_mexc_js__WEBPACK_IMPORTED_MODULE_150__ = __webpack_require__(6484);
317835
- /* harmony import */ var _src_pro_ndax_js__WEBPACK_IMPORTED_MODULE_151__ = __webpack_require__(8080);
317836
- /* harmony import */ var _src_pro_okcoin_js__WEBPACK_IMPORTED_MODULE_152__ = __webpack_require__(7105);
317837
- /* harmony import */ var _src_pro_okx_js__WEBPACK_IMPORTED_MODULE_153__ = __webpack_require__(2214);
317838
- /* harmony import */ var _src_pro_onetrading_js__WEBPACK_IMPORTED_MODULE_154__ = __webpack_require__(9419);
317839
- /* harmony import */ var _src_pro_p2b_js__WEBPACK_IMPORTED_MODULE_155__ = __webpack_require__(8516);
317840
- /* harmony import */ var _src_pro_phemex_js__WEBPACK_IMPORTED_MODULE_156__ = __webpack_require__(4360);
317841
- /* harmony import */ var _src_pro_poloniex_js__WEBPACK_IMPORTED_MODULE_157__ = __webpack_require__(7924);
317842
- /* harmony import */ var _src_pro_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_158__ = __webpack_require__(3541);
317843
- /* harmony import */ var _src_pro_probit_js__WEBPACK_IMPORTED_MODULE_159__ = __webpack_require__(9782);
317844
- /* harmony import */ var _src_pro_upbit_js__WEBPACK_IMPORTED_MODULE_160__ = __webpack_require__(7614);
317845
- /* harmony import */ var _src_pro_wazirx_js__WEBPACK_IMPORTED_MODULE_161__ = __webpack_require__(4828);
317846
- /* harmony import */ var _src_pro_whitebit_js__WEBPACK_IMPORTED_MODULE_162__ = __webpack_require__(5630);
317847
- /* harmony import */ var _src_pro_woo_js__WEBPACK_IMPORTED_MODULE_163__ = __webpack_require__(3910);
320633
+ /* harmony import */ var _src_coinbaseinternational_js__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(9339);
320634
+ /* harmony import */ var _src_coinbasepro_js__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(8856);
320635
+ /* harmony import */ var _src_coincheck_js__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(2117);
320636
+ /* harmony import */ var _src_coinex_js__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(332);
320637
+ /* harmony import */ var _src_coinlist_js__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(3623);
320638
+ /* harmony import */ var _src_coinmate_js__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(9816);
320639
+ /* harmony import */ var _src_coinmetro_js__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(4759);
320640
+ /* harmony import */ var _src_coinone_js__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(7811);
320641
+ /* harmony import */ var _src_coinsph_js__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(5782);
320642
+ /* harmony import */ var _src_coinspot_js__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(7794);
320643
+ /* harmony import */ var _src_cryptocom_js__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(9129);
320644
+ /* harmony import */ var _src_currencycom_js__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(3214);
320645
+ /* harmony import */ var _src_delta_js__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(1753);
320646
+ /* harmony import */ var _src_deribit_js__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(24);
320647
+ /* harmony import */ var _src_digifinex_js__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(8846);
320648
+ /* harmony import */ var _src_exmo_js__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(1729);
320649
+ /* harmony import */ var _src_fmfwio_js__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(5788);
320650
+ /* harmony import */ var _src_gate_js__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(7290);
320651
+ /* harmony import */ var _src_gateio_js__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(7036);
320652
+ /* harmony import */ var _src_gemini_js__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(6743);
320653
+ /* harmony import */ var _src_hitbtc_js__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(4714);
320654
+ /* harmony import */ var _src_hitbtc3_js__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(4815);
320655
+ /* harmony import */ var _src_hollaex_js__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(8422);
320656
+ /* harmony import */ var _src_htx_js__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(5939);
320657
+ /* harmony import */ var _src_huobi_js__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(8146);
320658
+ /* harmony import */ var _src_huobijp_js__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(7034);
320659
+ /* harmony import */ var _src_hyperliquid_js__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(5959);
320660
+ /* harmony import */ var _src_idex_js__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(8232);
320661
+ /* harmony import */ var _src_independentreserve_js__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(9570);
320662
+ /* harmony import */ var _src_indodax_js__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(1605);
320663
+ /* harmony import */ var _src_kraken_js__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(9922);
320664
+ /* harmony import */ var _src_krakenfutures_js__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(4470);
320665
+ /* harmony import */ var _src_kucoin_js__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(3583);
320666
+ /* harmony import */ var _src_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(1924);
320667
+ /* harmony import */ var _src_kuna_js__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(7732);
320668
+ /* harmony import */ var _src_latoken_js__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(2545);
320669
+ /* harmony import */ var _src_lbank_js__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(3944);
320670
+ /* harmony import */ var _src_luno_js__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(1758);
320671
+ /* harmony import */ var _src_lykke_js__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(3803);
320672
+ /* harmony import */ var _src_mercado_js__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(9013);
320673
+ /* harmony import */ var _src_mexc_js__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(6641);
320674
+ /* harmony import */ var _src_ndax_js__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(4531);
320675
+ /* harmony import */ var _src_novadax_js__WEBPACK_IMPORTED_MODULE_82__ = __webpack_require__(2449);
320676
+ /* harmony import */ var _src_oceanex_js__WEBPACK_IMPORTED_MODULE_83__ = __webpack_require__(6749);
320677
+ /* harmony import */ var _src_okcoin_js__WEBPACK_IMPORTED_MODULE_84__ = __webpack_require__(3007);
320678
+ /* harmony import */ var _src_okx_js__WEBPACK_IMPORTED_MODULE_85__ = __webpack_require__(4042);
320679
+ /* harmony import */ var _src_onetrading_js__WEBPACK_IMPORTED_MODULE_86__ = __webpack_require__(6481);
320680
+ /* harmony import */ var _src_p2b_js__WEBPACK_IMPORTED_MODULE_87__ = __webpack_require__(2466);
320681
+ /* harmony import */ var _src_paymium_js__WEBPACK_IMPORTED_MODULE_88__ = __webpack_require__(7082);
320682
+ /* harmony import */ var _src_phemex_js__WEBPACK_IMPORTED_MODULE_89__ = __webpack_require__(79);
320683
+ /* harmony import */ var _src_poloniex_js__WEBPACK_IMPORTED_MODULE_90__ = __webpack_require__(8891);
320684
+ /* harmony import */ var _src_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_91__ = __webpack_require__(6877);
320685
+ /* harmony import */ var _src_probit_js__WEBPACK_IMPORTED_MODULE_92__ = __webpack_require__(3657);
320686
+ /* harmony import */ var _src_timex_js__WEBPACK_IMPORTED_MODULE_93__ = __webpack_require__(1067);
320687
+ /* harmony import */ var _src_tokocrypto_js__WEBPACK_IMPORTED_MODULE_94__ = __webpack_require__(5261);
320688
+ /* harmony import */ var _src_upbit_js__WEBPACK_IMPORTED_MODULE_95__ = __webpack_require__(7584);
320689
+ /* harmony import */ var _src_wavesexchange_js__WEBPACK_IMPORTED_MODULE_96__ = __webpack_require__(3853);
320690
+ /* harmony import */ var _src_wazirx_js__WEBPACK_IMPORTED_MODULE_97__ = __webpack_require__(6536);
320691
+ /* harmony import */ var _src_whitebit_js__WEBPACK_IMPORTED_MODULE_98__ = __webpack_require__(5467);
320692
+ /* harmony import */ var _src_woo_js__WEBPACK_IMPORTED_MODULE_99__ = __webpack_require__(517);
320693
+ /* harmony import */ var _src_yobit_js__WEBPACK_IMPORTED_MODULE_100__ = __webpack_require__(3850);
320694
+ /* harmony import */ var _src_zaif_js__WEBPACK_IMPORTED_MODULE_101__ = __webpack_require__(5934);
320695
+ /* harmony import */ var _src_zonda_js__WEBPACK_IMPORTED_MODULE_102__ = __webpack_require__(5140);
320696
+ /* harmony import */ var _src_pro_alpaca_js__WEBPACK_IMPORTED_MODULE_103__ = __webpack_require__(2467);
320697
+ /* harmony import */ var _src_pro_ascendex_js__WEBPACK_IMPORTED_MODULE_104__ = __webpack_require__(2383);
320698
+ /* harmony import */ var _src_pro_bequant_js__WEBPACK_IMPORTED_MODULE_105__ = __webpack_require__(8848);
320699
+ /* harmony import */ var _src_pro_binance_js__WEBPACK_IMPORTED_MODULE_106__ = __webpack_require__(8764);
320700
+ /* harmony import */ var _src_pro_binancecoinm_js__WEBPACK_IMPORTED_MODULE_107__ = __webpack_require__(5078);
320701
+ /* harmony import */ var _src_pro_binanceus_js__WEBPACK_IMPORTED_MODULE_108__ = __webpack_require__(1326);
320702
+ /* harmony import */ var _src_pro_binanceusdm_js__WEBPACK_IMPORTED_MODULE_109__ = __webpack_require__(1230);
320703
+ /* harmony import */ var _src_pro_bingx_js__WEBPACK_IMPORTED_MODULE_110__ = __webpack_require__(6955);
320704
+ /* harmony import */ var _src_pro_bitcoincom_js__WEBPACK_IMPORTED_MODULE_111__ = __webpack_require__(453);
320705
+ /* harmony import */ var _src_pro_bitfinex_js__WEBPACK_IMPORTED_MODULE_112__ = __webpack_require__(9772);
320706
+ /* harmony import */ var _src_pro_bitfinex2_js__WEBPACK_IMPORTED_MODULE_113__ = __webpack_require__(588);
320707
+ /* harmony import */ var _src_pro_bitget_js__WEBPACK_IMPORTED_MODULE_114__ = __webpack_require__(1885);
320708
+ /* harmony import */ var _src_pro_bitmart_js__WEBPACK_IMPORTED_MODULE_115__ = __webpack_require__(7504);
320709
+ /* harmony import */ var _src_pro_bitmex_js__WEBPACK_IMPORTED_MODULE_116__ = __webpack_require__(2302);
320710
+ /* harmony import */ var _src_pro_bitopro_js__WEBPACK_IMPORTED_MODULE_117__ = __webpack_require__(2191);
320711
+ /* harmony import */ var _src_pro_bitpanda_js__WEBPACK_IMPORTED_MODULE_118__ = __webpack_require__(1297);
320712
+ /* harmony import */ var _src_pro_bitrue_js__WEBPACK_IMPORTED_MODULE_119__ = __webpack_require__(3005);
320713
+ /* harmony import */ var _src_pro_bitstamp_js__WEBPACK_IMPORTED_MODULE_120__ = __webpack_require__(2317);
320714
+ /* harmony import */ var _src_pro_bitvavo_js__WEBPACK_IMPORTED_MODULE_121__ = __webpack_require__(6977);
320715
+ /* harmony import */ var _src_pro_blockchaincom_js__WEBPACK_IMPORTED_MODULE_122__ = __webpack_require__(2519);
320716
+ /* harmony import */ var _src_pro_bybit_js__WEBPACK_IMPORTED_MODULE_123__ = __webpack_require__(5030);
320717
+ /* harmony import */ var _src_pro_cex_js__WEBPACK_IMPORTED_MODULE_124__ = __webpack_require__(5272);
320718
+ /* harmony import */ var _src_pro_coinbase_js__WEBPACK_IMPORTED_MODULE_125__ = __webpack_require__(3414);
320719
+ /* harmony import */ var _src_pro_coinbaseinternational_js__WEBPACK_IMPORTED_MODULE_126__ = __webpack_require__(6541);
320720
+ /* harmony import */ var _src_pro_coinbasepro_js__WEBPACK_IMPORTED_MODULE_127__ = __webpack_require__(8368);
320721
+ /* harmony import */ var _src_pro_coincheck_js__WEBPACK_IMPORTED_MODULE_128__ = __webpack_require__(7891);
320722
+ /* harmony import */ var _src_pro_coinex_js__WEBPACK_IMPORTED_MODULE_129__ = __webpack_require__(204);
320723
+ /* harmony import */ var _src_pro_coinone_js__WEBPACK_IMPORTED_MODULE_130__ = __webpack_require__(5208);
320724
+ /* harmony import */ var _src_pro_cryptocom_js__WEBPACK_IMPORTED_MODULE_131__ = __webpack_require__(6820);
320725
+ /* harmony import */ var _src_pro_currencycom_js__WEBPACK_IMPORTED_MODULE_132__ = __webpack_require__(2952);
320726
+ /* harmony import */ var _src_pro_deribit_js__WEBPACK_IMPORTED_MODULE_133__ = __webpack_require__(1788);
320727
+ /* harmony import */ var _src_pro_exmo_js__WEBPACK_IMPORTED_MODULE_134__ = __webpack_require__(9004);
320728
+ /* harmony import */ var _src_pro_gate_js__WEBPACK_IMPORTED_MODULE_135__ = __webpack_require__(8335);
320729
+ /* harmony import */ var _src_pro_gateio_js__WEBPACK_IMPORTED_MODULE_136__ = __webpack_require__(1465);
320730
+ /* harmony import */ var _src_pro_gemini_js__WEBPACK_IMPORTED_MODULE_137__ = __webpack_require__(9488);
320731
+ /* harmony import */ var _src_pro_hitbtc_js__WEBPACK_IMPORTED_MODULE_138__ = __webpack_require__(5189);
320732
+ /* harmony import */ var _src_pro_hollaex_js__WEBPACK_IMPORTED_MODULE_139__ = __webpack_require__(8559);
320733
+ /* harmony import */ var _src_pro_htx_js__WEBPACK_IMPORTED_MODULE_140__ = __webpack_require__(7474);
320734
+ /* harmony import */ var _src_pro_huobi_js__WEBPACK_IMPORTED_MODULE_141__ = __webpack_require__(8384);
320735
+ /* harmony import */ var _src_pro_huobijp_js__WEBPACK_IMPORTED_MODULE_142__ = __webpack_require__(9021);
320736
+ /* harmony import */ var _src_pro_hyperliquid_js__WEBPACK_IMPORTED_MODULE_143__ = __webpack_require__(8354);
320737
+ /* harmony import */ var _src_pro_idex_js__WEBPACK_IMPORTED_MODULE_144__ = __webpack_require__(3484);
320738
+ /* harmony import */ var _src_pro_independentreserve_js__WEBPACK_IMPORTED_MODULE_145__ = __webpack_require__(1311);
320739
+ /* harmony import */ var _src_pro_kraken_js__WEBPACK_IMPORTED_MODULE_146__ = __webpack_require__(736);
320740
+ /* harmony import */ var _src_pro_krakenfutures_js__WEBPACK_IMPORTED_MODULE_147__ = __webpack_require__(449);
320741
+ /* harmony import */ var _src_pro_kucoin_js__WEBPACK_IMPORTED_MODULE_148__ = __webpack_require__(2387);
320742
+ /* harmony import */ var _src_pro_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_149__ = __webpack_require__(7181);
320743
+ /* harmony import */ var _src_pro_lbank_js__WEBPACK_IMPORTED_MODULE_150__ = __webpack_require__(1267);
320744
+ /* harmony import */ var _src_pro_luno_js__WEBPACK_IMPORTED_MODULE_151__ = __webpack_require__(627);
320745
+ /* harmony import */ var _src_pro_mexc_js__WEBPACK_IMPORTED_MODULE_152__ = __webpack_require__(6484);
320746
+ /* harmony import */ var _src_pro_ndax_js__WEBPACK_IMPORTED_MODULE_153__ = __webpack_require__(8080);
320747
+ /* harmony import */ var _src_pro_okcoin_js__WEBPACK_IMPORTED_MODULE_154__ = __webpack_require__(7105);
320748
+ /* harmony import */ var _src_pro_okx_js__WEBPACK_IMPORTED_MODULE_155__ = __webpack_require__(2214);
320749
+ /* harmony import */ var _src_pro_onetrading_js__WEBPACK_IMPORTED_MODULE_156__ = __webpack_require__(9419);
320750
+ /* harmony import */ var _src_pro_p2b_js__WEBPACK_IMPORTED_MODULE_157__ = __webpack_require__(8516);
320751
+ /* harmony import */ var _src_pro_phemex_js__WEBPACK_IMPORTED_MODULE_158__ = __webpack_require__(4360);
320752
+ /* harmony import */ var _src_pro_poloniex_js__WEBPACK_IMPORTED_MODULE_159__ = __webpack_require__(7924);
320753
+ /* harmony import */ var _src_pro_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_160__ = __webpack_require__(3541);
320754
+ /* harmony import */ var _src_pro_probit_js__WEBPACK_IMPORTED_MODULE_161__ = __webpack_require__(9782);
320755
+ /* harmony import */ var _src_pro_upbit_js__WEBPACK_IMPORTED_MODULE_162__ = __webpack_require__(7614);
320756
+ /* harmony import */ var _src_pro_wazirx_js__WEBPACK_IMPORTED_MODULE_163__ = __webpack_require__(4828);
320757
+ /* harmony import */ var _src_pro_whitebit_js__WEBPACK_IMPORTED_MODULE_164__ = __webpack_require__(5630);
320758
+ /* harmony import */ var _src_pro_woo_js__WEBPACK_IMPORTED_MODULE_165__ = __webpack_require__(3910);
317848
320759
  /*
317849
320760
 
317850
320761
  MIT License
@@ -317879,7 +320790,7 @@ SOFTWARE.
317879
320790
 
317880
320791
  //-----------------------------------------------------------------------------
317881
320792
  // this is updated by vss.js when building
317882
- const version = '4.2.71';
320793
+ const version = '4.2.73';
317883
320794
  _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange */ .e.ccxtVersion = version;
317884
320795
  //-----------------------------------------------------------------------------
317885
320796
 
@@ -317981,6 +320892,7 @@ _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange */ .e.ccxtVersion
317981
320892
 
317982
320893
 
317983
320894
 
320895
+
317984
320896
 
317985
320897
 
317986
320898
  // pro exchanges
@@ -318044,6 +320956,7 @@ _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange */ .e.ccxtVersion
318044
320956
 
318045
320957
 
318046
320958
 
320959
+
318047
320960
 
318048
320961
 
318049
320962
  const exchanges = {
@@ -318086,132 +320999,134 @@ const exchanges = {
318086
320999
  'bybit': _src_bybit_js__WEBPACK_IMPORTED_MODULE_37__/* ["default"] */ .Z,
318087
321000
  'cex': _src_cex_js__WEBPACK_IMPORTED_MODULE_38__/* ["default"] */ .Z,
318088
321001
  'coinbase': _src_coinbase_js__WEBPACK_IMPORTED_MODULE_39__/* ["default"] */ .Z,
318089
- 'coinbasepro': _src_coinbasepro_js__WEBPACK_IMPORTED_MODULE_40__/* ["default"] */ .Z,
318090
- 'coincheck': _src_coincheck_js__WEBPACK_IMPORTED_MODULE_41__/* ["default"] */ .Z,
318091
- 'coinex': _src_coinex_js__WEBPACK_IMPORTED_MODULE_42__/* ["default"] */ .Z,
318092
- 'coinlist': _src_coinlist_js__WEBPACK_IMPORTED_MODULE_43__/* ["default"] */ .Z,
318093
- 'coinmate': _src_coinmate_js__WEBPACK_IMPORTED_MODULE_44__/* ["default"] */ .Z,
318094
- 'coinmetro': _src_coinmetro_js__WEBPACK_IMPORTED_MODULE_45__/* ["default"] */ .Z,
318095
- 'coinone': _src_coinone_js__WEBPACK_IMPORTED_MODULE_46__/* ["default"] */ .Z,
318096
- 'coinsph': _src_coinsph_js__WEBPACK_IMPORTED_MODULE_47__/* ["default"] */ .Z,
318097
- 'coinspot': _src_coinspot_js__WEBPACK_IMPORTED_MODULE_48__/* ["default"] */ .Z,
318098
- 'cryptocom': _src_cryptocom_js__WEBPACK_IMPORTED_MODULE_49__/* ["default"] */ .Z,
318099
- 'currencycom': _src_currencycom_js__WEBPACK_IMPORTED_MODULE_50__/* ["default"] */ .Z,
318100
- 'delta': _src_delta_js__WEBPACK_IMPORTED_MODULE_51__/* ["default"] */ .Z,
318101
- 'deribit': _src_deribit_js__WEBPACK_IMPORTED_MODULE_52__/* ["default"] */ .Z,
318102
- 'digifinex': _src_digifinex_js__WEBPACK_IMPORTED_MODULE_53__/* ["default"] */ .Z,
318103
- 'exmo': _src_exmo_js__WEBPACK_IMPORTED_MODULE_54__/* ["default"] */ .Z,
318104
- 'fmfwio': _src_fmfwio_js__WEBPACK_IMPORTED_MODULE_55__/* ["default"] */ .Z,
318105
- 'gate': _src_gate_js__WEBPACK_IMPORTED_MODULE_56__/* ["default"] */ .Z,
318106
- 'gateio': _src_gateio_js__WEBPACK_IMPORTED_MODULE_57__/* ["default"] */ .Z,
318107
- 'gemini': _src_gemini_js__WEBPACK_IMPORTED_MODULE_58__/* ["default"] */ .Z,
318108
- 'hitbtc': _src_hitbtc_js__WEBPACK_IMPORTED_MODULE_59__/* ["default"] */ .Z,
318109
- 'hitbtc3': _src_hitbtc3_js__WEBPACK_IMPORTED_MODULE_60__/* ["default"] */ .Z,
318110
- 'hollaex': _src_hollaex_js__WEBPACK_IMPORTED_MODULE_61__/* ["default"] */ .Z,
318111
- 'htx': _src_htx_js__WEBPACK_IMPORTED_MODULE_62__/* ["default"] */ .Z,
318112
- 'huobi': _src_huobi_js__WEBPACK_IMPORTED_MODULE_63__/* ["default"] */ .Z,
318113
- 'huobijp': _src_huobijp_js__WEBPACK_IMPORTED_MODULE_64__/* ["default"] */ .Z,
318114
- 'hyperliquid': _src_hyperliquid_js__WEBPACK_IMPORTED_MODULE_65__/* ["default"] */ .Z,
318115
- 'idex': _src_idex_js__WEBPACK_IMPORTED_MODULE_66__/* ["default"] */ .Z,
318116
- 'independentreserve': _src_independentreserve_js__WEBPACK_IMPORTED_MODULE_67__/* ["default"] */ .Z,
318117
- 'indodax': _src_indodax_js__WEBPACK_IMPORTED_MODULE_68__/* ["default"] */ .Z,
318118
- 'kraken': _src_kraken_js__WEBPACK_IMPORTED_MODULE_69__/* ["default"] */ .Z,
318119
- 'krakenfutures': _src_krakenfutures_js__WEBPACK_IMPORTED_MODULE_70__/* ["default"] */ .Z,
318120
- 'kucoin': _src_kucoin_js__WEBPACK_IMPORTED_MODULE_71__/* ["default"] */ .Z,
318121
- 'kucoinfutures': _src_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_72__/* ["default"] */ .Z,
318122
- 'kuna': _src_kuna_js__WEBPACK_IMPORTED_MODULE_73__/* ["default"] */ .Z,
318123
- 'latoken': _src_latoken_js__WEBPACK_IMPORTED_MODULE_74__/* ["default"] */ .Z,
318124
- 'lbank': _src_lbank_js__WEBPACK_IMPORTED_MODULE_75__/* ["default"] */ .Z,
318125
- 'luno': _src_luno_js__WEBPACK_IMPORTED_MODULE_76__/* ["default"] */ .Z,
318126
- 'lykke': _src_lykke_js__WEBPACK_IMPORTED_MODULE_77__/* ["default"] */ .Z,
318127
- 'mercado': _src_mercado_js__WEBPACK_IMPORTED_MODULE_78__/* ["default"] */ .Z,
318128
- 'mexc': _src_mexc_js__WEBPACK_IMPORTED_MODULE_79__/* ["default"] */ .Z,
318129
- 'ndax': _src_ndax_js__WEBPACK_IMPORTED_MODULE_80__/* ["default"] */ .Z,
318130
- 'novadax': _src_novadax_js__WEBPACK_IMPORTED_MODULE_81__/* ["default"] */ .Z,
318131
- 'oceanex': _src_oceanex_js__WEBPACK_IMPORTED_MODULE_82__/* ["default"] */ .Z,
318132
- 'okcoin': _src_okcoin_js__WEBPACK_IMPORTED_MODULE_83__/* ["default"] */ .Z,
318133
- 'okx': _src_okx_js__WEBPACK_IMPORTED_MODULE_84__/* ["default"] */ .Z,
318134
- 'onetrading': _src_onetrading_js__WEBPACK_IMPORTED_MODULE_85__/* ["default"] */ .Z,
318135
- 'p2b': _src_p2b_js__WEBPACK_IMPORTED_MODULE_86__/* ["default"] */ .Z,
318136
- 'paymium': _src_paymium_js__WEBPACK_IMPORTED_MODULE_87__/* ["default"] */ .Z,
318137
- 'phemex': _src_phemex_js__WEBPACK_IMPORTED_MODULE_88__/* ["default"] */ .Z,
318138
- 'poloniex': _src_poloniex_js__WEBPACK_IMPORTED_MODULE_89__/* ["default"] */ .Z,
318139
- 'poloniexfutures': _src_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_90__/* ["default"] */ .Z,
318140
- 'probit': _src_probit_js__WEBPACK_IMPORTED_MODULE_91__/* ["default"] */ .Z,
318141
- 'timex': _src_timex_js__WEBPACK_IMPORTED_MODULE_92__/* ["default"] */ .Z,
318142
- 'tokocrypto': _src_tokocrypto_js__WEBPACK_IMPORTED_MODULE_93__/* ["default"] */ .Z,
318143
- 'upbit': _src_upbit_js__WEBPACK_IMPORTED_MODULE_94__/* ["default"] */ .Z,
318144
- 'wavesexchange': _src_wavesexchange_js__WEBPACK_IMPORTED_MODULE_95__/* ["default"] */ .Z,
318145
- 'wazirx': _src_wazirx_js__WEBPACK_IMPORTED_MODULE_96__/* ["default"] */ .Z,
318146
- 'whitebit': _src_whitebit_js__WEBPACK_IMPORTED_MODULE_97__/* ["default"] */ .Z,
318147
- 'woo': _src_woo_js__WEBPACK_IMPORTED_MODULE_98__/* ["default"] */ .Z,
318148
- 'yobit': _src_yobit_js__WEBPACK_IMPORTED_MODULE_99__/* ["default"] */ .Z,
318149
- 'zaif': _src_zaif_js__WEBPACK_IMPORTED_MODULE_100__/* ["default"] */ .Z,
318150
- 'zonda': _src_zonda_js__WEBPACK_IMPORTED_MODULE_101__/* ["default"] */ .Z,
321002
+ 'coinbaseinternational': _src_coinbaseinternational_js__WEBPACK_IMPORTED_MODULE_40__/* ["default"] */ .Z,
321003
+ 'coinbasepro': _src_coinbasepro_js__WEBPACK_IMPORTED_MODULE_41__/* ["default"] */ .Z,
321004
+ 'coincheck': _src_coincheck_js__WEBPACK_IMPORTED_MODULE_42__/* ["default"] */ .Z,
321005
+ 'coinex': _src_coinex_js__WEBPACK_IMPORTED_MODULE_43__/* ["default"] */ .Z,
321006
+ 'coinlist': _src_coinlist_js__WEBPACK_IMPORTED_MODULE_44__/* ["default"] */ .Z,
321007
+ 'coinmate': _src_coinmate_js__WEBPACK_IMPORTED_MODULE_45__/* ["default"] */ .Z,
321008
+ 'coinmetro': _src_coinmetro_js__WEBPACK_IMPORTED_MODULE_46__/* ["default"] */ .Z,
321009
+ 'coinone': _src_coinone_js__WEBPACK_IMPORTED_MODULE_47__/* ["default"] */ .Z,
321010
+ 'coinsph': _src_coinsph_js__WEBPACK_IMPORTED_MODULE_48__/* ["default"] */ .Z,
321011
+ 'coinspot': _src_coinspot_js__WEBPACK_IMPORTED_MODULE_49__/* ["default"] */ .Z,
321012
+ 'cryptocom': _src_cryptocom_js__WEBPACK_IMPORTED_MODULE_50__/* ["default"] */ .Z,
321013
+ 'currencycom': _src_currencycom_js__WEBPACK_IMPORTED_MODULE_51__/* ["default"] */ .Z,
321014
+ 'delta': _src_delta_js__WEBPACK_IMPORTED_MODULE_52__/* ["default"] */ .Z,
321015
+ 'deribit': _src_deribit_js__WEBPACK_IMPORTED_MODULE_53__/* ["default"] */ .Z,
321016
+ 'digifinex': _src_digifinex_js__WEBPACK_IMPORTED_MODULE_54__/* ["default"] */ .Z,
321017
+ 'exmo': _src_exmo_js__WEBPACK_IMPORTED_MODULE_55__/* ["default"] */ .Z,
321018
+ 'fmfwio': _src_fmfwio_js__WEBPACK_IMPORTED_MODULE_56__/* ["default"] */ .Z,
321019
+ 'gate': _src_gate_js__WEBPACK_IMPORTED_MODULE_57__/* ["default"] */ .Z,
321020
+ 'gateio': _src_gateio_js__WEBPACK_IMPORTED_MODULE_58__/* ["default"] */ .Z,
321021
+ 'gemini': _src_gemini_js__WEBPACK_IMPORTED_MODULE_59__/* ["default"] */ .Z,
321022
+ 'hitbtc': _src_hitbtc_js__WEBPACK_IMPORTED_MODULE_60__/* ["default"] */ .Z,
321023
+ 'hitbtc3': _src_hitbtc3_js__WEBPACK_IMPORTED_MODULE_61__/* ["default"] */ .Z,
321024
+ 'hollaex': _src_hollaex_js__WEBPACK_IMPORTED_MODULE_62__/* ["default"] */ .Z,
321025
+ 'htx': _src_htx_js__WEBPACK_IMPORTED_MODULE_63__/* ["default"] */ .Z,
321026
+ 'huobi': _src_huobi_js__WEBPACK_IMPORTED_MODULE_64__/* ["default"] */ .Z,
321027
+ 'huobijp': _src_huobijp_js__WEBPACK_IMPORTED_MODULE_65__/* ["default"] */ .Z,
321028
+ 'hyperliquid': _src_hyperliquid_js__WEBPACK_IMPORTED_MODULE_66__/* ["default"] */ .Z,
321029
+ 'idex': _src_idex_js__WEBPACK_IMPORTED_MODULE_67__/* ["default"] */ .Z,
321030
+ 'independentreserve': _src_independentreserve_js__WEBPACK_IMPORTED_MODULE_68__/* ["default"] */ .Z,
321031
+ 'indodax': _src_indodax_js__WEBPACK_IMPORTED_MODULE_69__/* ["default"] */ .Z,
321032
+ 'kraken': _src_kraken_js__WEBPACK_IMPORTED_MODULE_70__/* ["default"] */ .Z,
321033
+ 'krakenfutures': _src_krakenfutures_js__WEBPACK_IMPORTED_MODULE_71__/* ["default"] */ .Z,
321034
+ 'kucoin': _src_kucoin_js__WEBPACK_IMPORTED_MODULE_72__/* ["default"] */ .Z,
321035
+ 'kucoinfutures': _src_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_73__/* ["default"] */ .Z,
321036
+ 'kuna': _src_kuna_js__WEBPACK_IMPORTED_MODULE_74__/* ["default"] */ .Z,
321037
+ 'latoken': _src_latoken_js__WEBPACK_IMPORTED_MODULE_75__/* ["default"] */ .Z,
321038
+ 'lbank': _src_lbank_js__WEBPACK_IMPORTED_MODULE_76__/* ["default"] */ .Z,
321039
+ 'luno': _src_luno_js__WEBPACK_IMPORTED_MODULE_77__/* ["default"] */ .Z,
321040
+ 'lykke': _src_lykke_js__WEBPACK_IMPORTED_MODULE_78__/* ["default"] */ .Z,
321041
+ 'mercado': _src_mercado_js__WEBPACK_IMPORTED_MODULE_79__/* ["default"] */ .Z,
321042
+ 'mexc': _src_mexc_js__WEBPACK_IMPORTED_MODULE_80__/* ["default"] */ .Z,
321043
+ 'ndax': _src_ndax_js__WEBPACK_IMPORTED_MODULE_81__/* ["default"] */ .Z,
321044
+ 'novadax': _src_novadax_js__WEBPACK_IMPORTED_MODULE_82__/* ["default"] */ .Z,
321045
+ 'oceanex': _src_oceanex_js__WEBPACK_IMPORTED_MODULE_83__/* ["default"] */ .Z,
321046
+ 'okcoin': _src_okcoin_js__WEBPACK_IMPORTED_MODULE_84__/* ["default"] */ .Z,
321047
+ 'okx': _src_okx_js__WEBPACK_IMPORTED_MODULE_85__/* ["default"] */ .Z,
321048
+ 'onetrading': _src_onetrading_js__WEBPACK_IMPORTED_MODULE_86__/* ["default"] */ .Z,
321049
+ 'p2b': _src_p2b_js__WEBPACK_IMPORTED_MODULE_87__/* ["default"] */ .Z,
321050
+ 'paymium': _src_paymium_js__WEBPACK_IMPORTED_MODULE_88__/* ["default"] */ .Z,
321051
+ 'phemex': _src_phemex_js__WEBPACK_IMPORTED_MODULE_89__/* ["default"] */ .Z,
321052
+ 'poloniex': _src_poloniex_js__WEBPACK_IMPORTED_MODULE_90__/* ["default"] */ .Z,
321053
+ 'poloniexfutures': _src_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_91__/* ["default"] */ .Z,
321054
+ 'probit': _src_probit_js__WEBPACK_IMPORTED_MODULE_92__/* ["default"] */ .Z,
321055
+ 'timex': _src_timex_js__WEBPACK_IMPORTED_MODULE_93__/* ["default"] */ .Z,
321056
+ 'tokocrypto': _src_tokocrypto_js__WEBPACK_IMPORTED_MODULE_94__/* ["default"] */ .Z,
321057
+ 'upbit': _src_upbit_js__WEBPACK_IMPORTED_MODULE_95__/* ["default"] */ .Z,
321058
+ 'wavesexchange': _src_wavesexchange_js__WEBPACK_IMPORTED_MODULE_96__/* ["default"] */ .Z,
321059
+ 'wazirx': _src_wazirx_js__WEBPACK_IMPORTED_MODULE_97__/* ["default"] */ .Z,
321060
+ 'whitebit': _src_whitebit_js__WEBPACK_IMPORTED_MODULE_98__/* ["default"] */ .Z,
321061
+ 'woo': _src_woo_js__WEBPACK_IMPORTED_MODULE_99__/* ["default"] */ .Z,
321062
+ 'yobit': _src_yobit_js__WEBPACK_IMPORTED_MODULE_100__/* ["default"] */ .Z,
321063
+ 'zaif': _src_zaif_js__WEBPACK_IMPORTED_MODULE_101__/* ["default"] */ .Z,
321064
+ 'zonda': _src_zonda_js__WEBPACK_IMPORTED_MODULE_102__/* ["default"] */ .Z,
318151
321065
  };
318152
321066
  const pro = {
318153
- 'alpaca': _src_pro_alpaca_js__WEBPACK_IMPORTED_MODULE_102__/* ["default"] */ .Z,
318154
- 'ascendex': _src_pro_ascendex_js__WEBPACK_IMPORTED_MODULE_103__/* ["default"] */ .Z,
318155
- 'bequant': _src_pro_bequant_js__WEBPACK_IMPORTED_MODULE_104__/* ["default"] */ .Z,
318156
- 'binance': _src_pro_binance_js__WEBPACK_IMPORTED_MODULE_105__/* ["default"] */ .Z,
318157
- 'binancecoinm': _src_pro_binancecoinm_js__WEBPACK_IMPORTED_MODULE_106__/* ["default"] */ .Z,
318158
- 'binanceus': _src_pro_binanceus_js__WEBPACK_IMPORTED_MODULE_107__/* ["default"] */ .Z,
318159
- 'binanceusdm': _src_pro_binanceusdm_js__WEBPACK_IMPORTED_MODULE_108__/* ["default"] */ .Z,
318160
- 'bingx': _src_pro_bingx_js__WEBPACK_IMPORTED_MODULE_109__/* ["default"] */ .Z,
318161
- 'bitcoincom': _src_pro_bitcoincom_js__WEBPACK_IMPORTED_MODULE_110__/* ["default"] */ .Z,
318162
- 'bitfinex': _src_pro_bitfinex_js__WEBPACK_IMPORTED_MODULE_111__/* ["default"] */ .Z,
318163
- 'bitfinex2': _src_pro_bitfinex2_js__WEBPACK_IMPORTED_MODULE_112__/* ["default"] */ .Z,
318164
- 'bitget': _src_pro_bitget_js__WEBPACK_IMPORTED_MODULE_113__/* ["default"] */ .Z,
318165
- 'bitmart': _src_pro_bitmart_js__WEBPACK_IMPORTED_MODULE_114__/* ["default"] */ .Z,
318166
- 'bitmex': _src_pro_bitmex_js__WEBPACK_IMPORTED_MODULE_115__/* ["default"] */ .Z,
318167
- 'bitopro': _src_pro_bitopro_js__WEBPACK_IMPORTED_MODULE_116__/* ["default"] */ .Z,
318168
- 'bitpanda': _src_pro_bitpanda_js__WEBPACK_IMPORTED_MODULE_117__/* ["default"] */ .Z,
318169
- 'bitrue': _src_pro_bitrue_js__WEBPACK_IMPORTED_MODULE_118__/* ["default"] */ .Z,
318170
- 'bitstamp': _src_pro_bitstamp_js__WEBPACK_IMPORTED_MODULE_119__/* ["default"] */ .Z,
318171
- 'bitvavo': _src_pro_bitvavo_js__WEBPACK_IMPORTED_MODULE_120__/* ["default"] */ .Z,
318172
- 'blockchaincom': _src_pro_blockchaincom_js__WEBPACK_IMPORTED_MODULE_121__/* ["default"] */ .Z,
318173
- 'bybit': _src_pro_bybit_js__WEBPACK_IMPORTED_MODULE_122__/* ["default"] */ .Z,
318174
- 'cex': _src_pro_cex_js__WEBPACK_IMPORTED_MODULE_123__/* ["default"] */ .Z,
318175
- 'coinbase': _src_pro_coinbase_js__WEBPACK_IMPORTED_MODULE_124__/* ["default"] */ .Z,
318176
- 'coinbasepro': _src_pro_coinbasepro_js__WEBPACK_IMPORTED_MODULE_125__/* ["default"] */ .Z,
318177
- 'coincheck': _src_pro_coincheck_js__WEBPACK_IMPORTED_MODULE_126__/* ["default"] */ .Z,
318178
- 'coinex': _src_pro_coinex_js__WEBPACK_IMPORTED_MODULE_127__/* ["default"] */ .Z,
318179
- 'coinone': _src_pro_coinone_js__WEBPACK_IMPORTED_MODULE_128__/* ["default"] */ .Z,
318180
- 'cryptocom': _src_pro_cryptocom_js__WEBPACK_IMPORTED_MODULE_129__/* ["default"] */ .Z,
318181
- 'currencycom': _src_pro_currencycom_js__WEBPACK_IMPORTED_MODULE_130__/* ["default"] */ .Z,
318182
- 'deribit': _src_pro_deribit_js__WEBPACK_IMPORTED_MODULE_131__/* ["default"] */ .Z,
318183
- 'exmo': _src_pro_exmo_js__WEBPACK_IMPORTED_MODULE_132__/* ["default"] */ .Z,
318184
- 'gate': _src_pro_gate_js__WEBPACK_IMPORTED_MODULE_133__/* ["default"] */ .Z,
318185
- 'gateio': _src_pro_gateio_js__WEBPACK_IMPORTED_MODULE_134__/* ["default"] */ .Z,
318186
- 'gemini': _src_pro_gemini_js__WEBPACK_IMPORTED_MODULE_135__/* ["default"] */ .Z,
318187
- 'hitbtc': _src_pro_hitbtc_js__WEBPACK_IMPORTED_MODULE_136__/* ["default"] */ .Z,
318188
- 'hollaex': _src_pro_hollaex_js__WEBPACK_IMPORTED_MODULE_137__/* ["default"] */ .Z,
318189
- 'htx': _src_pro_htx_js__WEBPACK_IMPORTED_MODULE_138__/* ["default"] */ .Z,
318190
- 'huobi': _src_pro_huobi_js__WEBPACK_IMPORTED_MODULE_139__/* ["default"] */ .Z,
318191
- 'huobijp': _src_pro_huobijp_js__WEBPACK_IMPORTED_MODULE_140__/* ["default"] */ .Z,
318192
- 'hyperliquid': _src_pro_hyperliquid_js__WEBPACK_IMPORTED_MODULE_141__/* ["default"] */ .Z,
318193
- 'idex': _src_pro_idex_js__WEBPACK_IMPORTED_MODULE_142__/* ["default"] */ .Z,
318194
- 'independentreserve': _src_pro_independentreserve_js__WEBPACK_IMPORTED_MODULE_143__/* ["default"] */ .Z,
318195
- 'kraken': _src_pro_kraken_js__WEBPACK_IMPORTED_MODULE_144__/* ["default"] */ .Z,
318196
- 'krakenfutures': _src_pro_krakenfutures_js__WEBPACK_IMPORTED_MODULE_145__/* ["default"] */ .Z,
318197
- 'kucoin': _src_pro_kucoin_js__WEBPACK_IMPORTED_MODULE_146__/* ["default"] */ .Z,
318198
- 'kucoinfutures': _src_pro_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_147__/* ["default"] */ .Z,
318199
- 'lbank': _src_pro_lbank_js__WEBPACK_IMPORTED_MODULE_148__/* ["default"] */ .Z,
318200
- 'luno': _src_pro_luno_js__WEBPACK_IMPORTED_MODULE_149__/* ["default"] */ .Z,
318201
- 'mexc': _src_pro_mexc_js__WEBPACK_IMPORTED_MODULE_150__/* ["default"] */ .Z,
318202
- 'ndax': _src_pro_ndax_js__WEBPACK_IMPORTED_MODULE_151__/* ["default"] */ .Z,
318203
- 'okcoin': _src_pro_okcoin_js__WEBPACK_IMPORTED_MODULE_152__/* ["default"] */ .Z,
318204
- 'okx': _src_pro_okx_js__WEBPACK_IMPORTED_MODULE_153__/* ["default"] */ .Z,
318205
- 'onetrading': _src_pro_onetrading_js__WEBPACK_IMPORTED_MODULE_154__/* ["default"] */ .Z,
318206
- 'p2b': _src_pro_p2b_js__WEBPACK_IMPORTED_MODULE_155__/* ["default"] */ .Z,
318207
- 'phemex': _src_pro_phemex_js__WEBPACK_IMPORTED_MODULE_156__/* ["default"] */ .Z,
318208
- 'poloniex': _src_pro_poloniex_js__WEBPACK_IMPORTED_MODULE_157__/* ["default"] */ .Z,
318209
- 'poloniexfutures': _src_pro_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_158__/* ["default"] */ .Z,
318210
- 'probit': _src_pro_probit_js__WEBPACK_IMPORTED_MODULE_159__/* ["default"] */ .Z,
318211
- 'upbit': _src_pro_upbit_js__WEBPACK_IMPORTED_MODULE_160__/* ["default"] */ .Z,
318212
- 'wazirx': _src_pro_wazirx_js__WEBPACK_IMPORTED_MODULE_161__/* ["default"] */ .Z,
318213
- 'whitebit': _src_pro_whitebit_js__WEBPACK_IMPORTED_MODULE_162__/* ["default"] */ .Z,
318214
- 'woo': _src_pro_woo_js__WEBPACK_IMPORTED_MODULE_163__/* ["default"] */ .Z,
321067
+ 'alpaca': _src_pro_alpaca_js__WEBPACK_IMPORTED_MODULE_103__/* ["default"] */ .Z,
321068
+ 'ascendex': _src_pro_ascendex_js__WEBPACK_IMPORTED_MODULE_104__/* ["default"] */ .Z,
321069
+ 'bequant': _src_pro_bequant_js__WEBPACK_IMPORTED_MODULE_105__/* ["default"] */ .Z,
321070
+ 'binance': _src_pro_binance_js__WEBPACK_IMPORTED_MODULE_106__/* ["default"] */ .Z,
321071
+ 'binancecoinm': _src_pro_binancecoinm_js__WEBPACK_IMPORTED_MODULE_107__/* ["default"] */ .Z,
321072
+ 'binanceus': _src_pro_binanceus_js__WEBPACK_IMPORTED_MODULE_108__/* ["default"] */ .Z,
321073
+ 'binanceusdm': _src_pro_binanceusdm_js__WEBPACK_IMPORTED_MODULE_109__/* ["default"] */ .Z,
321074
+ 'bingx': _src_pro_bingx_js__WEBPACK_IMPORTED_MODULE_110__/* ["default"] */ .Z,
321075
+ 'bitcoincom': _src_pro_bitcoincom_js__WEBPACK_IMPORTED_MODULE_111__/* ["default"] */ .Z,
321076
+ 'bitfinex': _src_pro_bitfinex_js__WEBPACK_IMPORTED_MODULE_112__/* ["default"] */ .Z,
321077
+ 'bitfinex2': _src_pro_bitfinex2_js__WEBPACK_IMPORTED_MODULE_113__/* ["default"] */ .Z,
321078
+ 'bitget': _src_pro_bitget_js__WEBPACK_IMPORTED_MODULE_114__/* ["default"] */ .Z,
321079
+ 'bitmart': _src_pro_bitmart_js__WEBPACK_IMPORTED_MODULE_115__/* ["default"] */ .Z,
321080
+ 'bitmex': _src_pro_bitmex_js__WEBPACK_IMPORTED_MODULE_116__/* ["default"] */ .Z,
321081
+ 'bitopro': _src_pro_bitopro_js__WEBPACK_IMPORTED_MODULE_117__/* ["default"] */ .Z,
321082
+ 'bitpanda': _src_pro_bitpanda_js__WEBPACK_IMPORTED_MODULE_118__/* ["default"] */ .Z,
321083
+ 'bitrue': _src_pro_bitrue_js__WEBPACK_IMPORTED_MODULE_119__/* ["default"] */ .Z,
321084
+ 'bitstamp': _src_pro_bitstamp_js__WEBPACK_IMPORTED_MODULE_120__/* ["default"] */ .Z,
321085
+ 'bitvavo': _src_pro_bitvavo_js__WEBPACK_IMPORTED_MODULE_121__/* ["default"] */ .Z,
321086
+ 'blockchaincom': _src_pro_blockchaincom_js__WEBPACK_IMPORTED_MODULE_122__/* ["default"] */ .Z,
321087
+ 'bybit': _src_pro_bybit_js__WEBPACK_IMPORTED_MODULE_123__/* ["default"] */ .Z,
321088
+ 'cex': _src_pro_cex_js__WEBPACK_IMPORTED_MODULE_124__/* ["default"] */ .Z,
321089
+ 'coinbase': _src_pro_coinbase_js__WEBPACK_IMPORTED_MODULE_125__/* ["default"] */ .Z,
321090
+ 'coinbaseinternational': _src_pro_coinbaseinternational_js__WEBPACK_IMPORTED_MODULE_126__/* ["default"] */ .Z,
321091
+ 'coinbasepro': _src_pro_coinbasepro_js__WEBPACK_IMPORTED_MODULE_127__/* ["default"] */ .Z,
321092
+ 'coincheck': _src_pro_coincheck_js__WEBPACK_IMPORTED_MODULE_128__/* ["default"] */ .Z,
321093
+ 'coinex': _src_pro_coinex_js__WEBPACK_IMPORTED_MODULE_129__/* ["default"] */ .Z,
321094
+ 'coinone': _src_pro_coinone_js__WEBPACK_IMPORTED_MODULE_130__/* ["default"] */ .Z,
321095
+ 'cryptocom': _src_pro_cryptocom_js__WEBPACK_IMPORTED_MODULE_131__/* ["default"] */ .Z,
321096
+ 'currencycom': _src_pro_currencycom_js__WEBPACK_IMPORTED_MODULE_132__/* ["default"] */ .Z,
321097
+ 'deribit': _src_pro_deribit_js__WEBPACK_IMPORTED_MODULE_133__/* ["default"] */ .Z,
321098
+ 'exmo': _src_pro_exmo_js__WEBPACK_IMPORTED_MODULE_134__/* ["default"] */ .Z,
321099
+ 'gate': _src_pro_gate_js__WEBPACK_IMPORTED_MODULE_135__/* ["default"] */ .Z,
321100
+ 'gateio': _src_pro_gateio_js__WEBPACK_IMPORTED_MODULE_136__/* ["default"] */ .Z,
321101
+ 'gemini': _src_pro_gemini_js__WEBPACK_IMPORTED_MODULE_137__/* ["default"] */ .Z,
321102
+ 'hitbtc': _src_pro_hitbtc_js__WEBPACK_IMPORTED_MODULE_138__/* ["default"] */ .Z,
321103
+ 'hollaex': _src_pro_hollaex_js__WEBPACK_IMPORTED_MODULE_139__/* ["default"] */ .Z,
321104
+ 'htx': _src_pro_htx_js__WEBPACK_IMPORTED_MODULE_140__/* ["default"] */ .Z,
321105
+ 'huobi': _src_pro_huobi_js__WEBPACK_IMPORTED_MODULE_141__/* ["default"] */ .Z,
321106
+ 'huobijp': _src_pro_huobijp_js__WEBPACK_IMPORTED_MODULE_142__/* ["default"] */ .Z,
321107
+ 'hyperliquid': _src_pro_hyperliquid_js__WEBPACK_IMPORTED_MODULE_143__/* ["default"] */ .Z,
321108
+ 'idex': _src_pro_idex_js__WEBPACK_IMPORTED_MODULE_144__/* ["default"] */ .Z,
321109
+ 'independentreserve': _src_pro_independentreserve_js__WEBPACK_IMPORTED_MODULE_145__/* ["default"] */ .Z,
321110
+ 'kraken': _src_pro_kraken_js__WEBPACK_IMPORTED_MODULE_146__/* ["default"] */ .Z,
321111
+ 'krakenfutures': _src_pro_krakenfutures_js__WEBPACK_IMPORTED_MODULE_147__/* ["default"] */ .Z,
321112
+ 'kucoin': _src_pro_kucoin_js__WEBPACK_IMPORTED_MODULE_148__/* ["default"] */ .Z,
321113
+ 'kucoinfutures': _src_pro_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_149__/* ["default"] */ .Z,
321114
+ 'lbank': _src_pro_lbank_js__WEBPACK_IMPORTED_MODULE_150__/* ["default"] */ .Z,
321115
+ 'luno': _src_pro_luno_js__WEBPACK_IMPORTED_MODULE_151__/* ["default"] */ .Z,
321116
+ 'mexc': _src_pro_mexc_js__WEBPACK_IMPORTED_MODULE_152__/* ["default"] */ .Z,
321117
+ 'ndax': _src_pro_ndax_js__WEBPACK_IMPORTED_MODULE_153__/* ["default"] */ .Z,
321118
+ 'okcoin': _src_pro_okcoin_js__WEBPACK_IMPORTED_MODULE_154__/* ["default"] */ .Z,
321119
+ 'okx': _src_pro_okx_js__WEBPACK_IMPORTED_MODULE_155__/* ["default"] */ .Z,
321120
+ 'onetrading': _src_pro_onetrading_js__WEBPACK_IMPORTED_MODULE_156__/* ["default"] */ .Z,
321121
+ 'p2b': _src_pro_p2b_js__WEBPACK_IMPORTED_MODULE_157__/* ["default"] */ .Z,
321122
+ 'phemex': _src_pro_phemex_js__WEBPACK_IMPORTED_MODULE_158__/* ["default"] */ .Z,
321123
+ 'poloniex': _src_pro_poloniex_js__WEBPACK_IMPORTED_MODULE_159__/* ["default"] */ .Z,
321124
+ 'poloniexfutures': _src_pro_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_160__/* ["default"] */ .Z,
321125
+ 'probit': _src_pro_probit_js__WEBPACK_IMPORTED_MODULE_161__/* ["default"] */ .Z,
321126
+ 'upbit': _src_pro_upbit_js__WEBPACK_IMPORTED_MODULE_162__/* ["default"] */ .Z,
321127
+ 'wazirx': _src_pro_wazirx_js__WEBPACK_IMPORTED_MODULE_163__/* ["default"] */ .Z,
321128
+ 'whitebit': _src_pro_whitebit_js__WEBPACK_IMPORTED_MODULE_164__/* ["default"] */ .Z,
321129
+ 'woo': _src_pro_woo_js__WEBPACK_IMPORTED_MODULE_165__/* ["default"] */ .Z,
318215
321130
  };
318216
321131
  for (const exchange in pro) {
318217
321132
  // const ccxtExchange = exchanges[exchange]
@@ -318224,7 +321139,7 @@ for (const exchange in pro) {
318224
321139
  pro.exchanges = Object.keys(pro);
318225
321140
  pro['Exchange'] = _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange */ .e; // now the same for rest and ts
318226
321141
  //-----------------------------------------------------------------------------
318227
- const ccxt = Object.assign({ version, Exchange: _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange */ .e, Precise: _src_base_Precise_js__WEBPACK_IMPORTED_MODULE_164__/* .Precise */ .O, 'exchanges': Object.keys(exchanges), 'pro': pro }, exchanges, _src_base_functions_js__WEBPACK_IMPORTED_MODULE_165__, _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__);
321142
+ const ccxt = Object.assign({ version, Exchange: _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange */ .e, Precise: _src_base_Precise_js__WEBPACK_IMPORTED_MODULE_166__/* .Precise */ .O, 'exchanges': Object.keys(exchanges), 'pro': pro }, exchanges, _src_base_functions_js__WEBPACK_IMPORTED_MODULE_167__, _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__);
318228
321143
 
318229
321144
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ccxt);
318230
321145
  //-----------------------------------------------------------------------------