ccxt 4.2.72 → 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 (129) hide show
  1. package/README.md +124 -122
  2. package/build.sh +1 -1
  3. package/dist/ccxt.browser.js +3099 -363
  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/base/Exchange.js +30 -6
  8. package/dist/cjs/src/btcturk.js +3 -3
  9. package/dist/cjs/src/coinbaseinternational.js +2019 -0
  10. package/dist/cjs/src/gate.js +1 -1
  11. package/dist/cjs/src/hyperliquid.js +8 -2
  12. package/dist/cjs/src/mexc.js +1 -1
  13. package/dist/cjs/src/okx.js +1 -1
  14. package/dist/cjs/src/pro/coinbaseinternational.js +645 -0
  15. package/js/ccxt.d.ts +8 -2
  16. package/js/ccxt.js +6 -2
  17. package/js/src/abstract/coinbaseinternational.d.ts +42 -0
  18. package/js/src/abstract/coinbaseinternational.js +11 -0
  19. package/js/src/ace.d.ts +2 -2
  20. package/js/src/alpaca.d.ts +2 -2
  21. package/js/src/ascendex.d.ts +3 -3
  22. package/js/src/base/Exchange.d.ts +25 -22
  23. package/js/src/base/Exchange.js +30 -6
  24. package/js/src/bigone.d.ts +2 -2
  25. package/js/src/binance.d.ts +7 -7
  26. package/js/src/bingx.d.ts +4 -4
  27. package/js/src/bit2c.d.ts +2 -2
  28. package/js/src/bitbank.d.ts +2 -2
  29. package/js/src/bitbns.d.ts +2 -2
  30. package/js/src/bitfinex.d.ts +3 -3
  31. package/js/src/bitfinex2.d.ts +4 -4
  32. package/js/src/bitflyer.d.ts +2 -2
  33. package/js/src/bitget.d.ts +4 -4
  34. package/js/src/bithumb.d.ts +2 -2
  35. package/js/src/bitmart.d.ts +4 -4
  36. package/js/src/bitmex.d.ts +3 -3
  37. package/js/src/bitopro.d.ts +2 -2
  38. package/js/src/bitrue.d.ts +2 -2
  39. package/js/src/bitso.d.ts +2 -2
  40. package/js/src/bitstamp.d.ts +2 -2
  41. package/js/src/bitteam.d.ts +2 -2
  42. package/js/src/bitvavo.d.ts +4 -4
  43. package/js/src/bl3p.d.ts +2 -2
  44. package/js/src/blockchaincom.d.ts +2 -2
  45. package/js/src/blofin.d.ts +4 -4
  46. package/js/src/btcalpha.d.ts +2 -2
  47. package/js/src/btcbox.d.ts +2 -2
  48. package/js/src/btcmarkets.d.ts +2 -2
  49. package/js/src/btcturk.d.ts +2 -2
  50. package/js/src/btcturk.js +3 -3
  51. package/js/src/bybit.d.ts +5 -5
  52. package/js/src/cex.d.ts +3 -3
  53. package/js/src/coinbase.d.ts +3 -3
  54. package/js/src/coinbaseinternational.d.ts +146 -0
  55. package/js/src/coinbaseinternational.js +2020 -0
  56. package/js/src/coinbasepro.d.ts +2 -2
  57. package/js/src/coincheck.d.ts +2 -2
  58. package/js/src/coinex.d.ts +4 -4
  59. package/js/src/coinlist.d.ts +3 -3
  60. package/js/src/coinmate.d.ts +2 -2
  61. package/js/src/coinmetro.d.ts +2 -2
  62. package/js/src/coinone.d.ts +2 -2
  63. package/js/src/coinsph.d.ts +2 -2
  64. package/js/src/coinspot.d.ts +2 -2
  65. package/js/src/cryptocom.d.ts +4 -4
  66. package/js/src/currencycom.d.ts +2 -2
  67. package/js/src/delta.d.ts +3 -3
  68. package/js/src/deribit.d.ts +3 -3
  69. package/js/src/digifinex.d.ts +3 -3
  70. package/js/src/exmo.d.ts +3 -3
  71. package/js/src/gate.d.ts +4 -4
  72. package/js/src/gate.js +1 -1
  73. package/js/src/gemini.d.ts +2 -2
  74. package/js/src/hitbtc.d.ts +4 -4
  75. package/js/src/hollaex.d.ts +2 -2
  76. package/js/src/htx.d.ts +5 -5
  77. package/js/src/huobijp.d.ts +2 -2
  78. package/js/src/hyperliquid.d.ts +4 -3
  79. package/js/src/hyperliquid.js +9 -3
  80. package/js/src/idex.d.ts +2 -2
  81. package/js/src/independentreserve.d.ts +2 -2
  82. package/js/src/indodax.d.ts +2 -2
  83. package/js/src/kraken.d.ts +3 -3
  84. package/js/src/krakenfutures.d.ts +4 -4
  85. package/js/src/kucoin.d.ts +4 -4
  86. package/js/src/kucoinfutures.d.ts +3 -3
  87. package/js/src/kuna.d.ts +2 -2
  88. package/js/src/latoken.d.ts +2 -2
  89. package/js/src/lbank.d.ts +2 -2
  90. package/js/src/luno.d.ts +2 -2
  91. package/js/src/lykke.d.ts +2 -2
  92. package/js/src/mercado.d.ts +2 -2
  93. package/js/src/mexc.d.ts +2 -2
  94. package/js/src/mexc.js +1 -1
  95. package/js/src/ndax.d.ts +3 -3
  96. package/js/src/novadax.d.ts +2 -2
  97. package/js/src/oceanex.d.ts +2 -2
  98. package/js/src/okcoin.d.ts +3 -3
  99. package/js/src/okx.d.ts +4 -4
  100. package/js/src/okx.js +1 -1
  101. package/js/src/onetrading.d.ts +2 -2
  102. package/js/src/p2b.d.ts +2 -2
  103. package/js/src/paymium.d.ts +2 -2
  104. package/js/src/phemex.d.ts +3 -3
  105. package/js/src/poloniex.d.ts +3 -3
  106. package/js/src/poloniexfutures.d.ts +2 -2
  107. package/js/src/pro/binance.d.ts +3 -3
  108. package/js/src/pro/bitvavo.d.ts +3 -3
  109. package/js/src/pro/cex.d.ts +3 -3
  110. package/js/src/pro/coinbaseinternational.d.ts +28 -0
  111. package/js/src/pro/coinbaseinternational.js +646 -0
  112. package/js/src/pro/cryptocom.d.ts +2 -2
  113. package/js/src/pro/hitbtc.d.ts +2 -2
  114. package/js/src/pro/kraken.d.ts +3 -3
  115. package/js/src/pro/okx.d.ts +3 -3
  116. package/js/src/pro/poloniex.d.ts +2 -2
  117. package/js/src/probit.d.ts +2 -2
  118. package/js/src/timex.d.ts +3 -3
  119. package/js/src/tokocrypto.d.ts +2 -2
  120. package/js/src/upbit.d.ts +2 -2
  121. package/js/src/wavesexchange.d.ts +2 -2
  122. package/js/src/wazirx.d.ts +2 -2
  123. package/js/src/whitebit.d.ts +2 -2
  124. package/js/src/woo.d.ts +5 -5
  125. package/js/src/yobit.d.ts +2 -2
  126. package/js/src/zaif.d.ts +2 -2
  127. package/js/src/zonda.d.ts +2 -2
  128. package/package.json +1 -1
  129. 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:
@@ -9171,6 +9187,15 @@ class Exchange {
9171
9187
  async fetchFundingRates(symbols = undefined, params = {}) {
9172
9188
  throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.NotSupported(this.id + ' fetchFundingRates() is not supported yet');
9173
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
+ }
9174
9199
  async transfer(code, amount, fromAccount, toAccount, params = {}) {
9175
9200
  throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.NotSupported(this.id + ' transfer() is not supported yet');
9176
9201
  }
@@ -10421,11 +10446,19 @@ class Exchange {
10421
10446
  // for example, if 'ETH' is passed for networkCode, but 'ETH' key not defined in `options->networks` object
10422
10447
  if (networkId === undefined) {
10423
10448
  if (currencyCode === undefined) {
10424
- // if currencyCode was not provided, then we just set passed value to networkId
10425
- 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
+ }
10426
10459
  }
10427
10460
  else {
10428
- // 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
10429
10462
  const defaultNetworkCodeReplacements = this.safeValue(this.options, 'defaultNetworkCodeReplacements', {});
10430
10463
  if (currencyCode in defaultNetworkCodeReplacements) {
10431
10464
  // if there is a replacement for the passed networkCode, then we use it to find network-id in `options->networks` object
@@ -10441,11 +10474,18 @@ class Exchange {
10441
10474
  }
10442
10475
  }
10443
10476
  }
10444
- // if it wasn't found, we just set the provided value to network-id
10445
- if (networkId === undefined) {
10446
- 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');
10447
10483
  }
10448
10484
  }
10485
+ // if it wasn't found, we just set the provided value to network-id
10486
+ if (networkId === undefined) {
10487
+ networkId = networkCode;
10488
+ }
10449
10489
  }
10450
10490
  return networkId;
10451
10491
  }
@@ -82453,9 +82493,9 @@ class btcturk extends _abstract_btcturk_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
82453
82493
  '30m': 30,
82454
82494
  '1h': 60,
82455
82495
  '4h': 240,
82456
- '1d': '1 day',
82457
- '1w': '1 week',
82458
- '1y': '1 year',
82496
+ '1d': '1 d',
82497
+ '1w': '1 w',
82498
+ '1y': '1 y',
82459
82499
  },
82460
82500
  'urls': {
82461
82501
  'logo': 'https://user-images.githubusercontent.com/51840849/87153926-efbef500-c2c0-11ea-9842-05b63612c4b9.jpg',
@@ -97064,6 +97104,2035 @@ class coinbase extends _abstract_coinbase_js__WEBPACK_IMPORTED_MODULE_0__/* ["de
97064
97104
  }
97065
97105
 
97066
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
+
97067
99136
  /***/ }),
97068
99137
 
97069
99138
  /***/ 8856:
@@ -136410,7 +138479,7 @@ class gate extends _abstract_gate_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
136410
138479
  let request = {};
136411
138480
  [request, params] = this.prepareRequest(market, undefined, params);
136412
138481
  request['interval'] = this.safeString(this.timeframes, timeframe, timeframe);
136413
- let maxLimit = 1000;
138482
+ let maxLimit = market['contract'] ? 1999 : 1000;
136414
138483
  limit = (limit === undefined) ? maxLimit : Math.min(limit, maxLimit);
136415
138484
  let until = this.safeInteger(params, 'until');
136416
138485
  if (until !== undefined) {
@@ -159806,8 +161875,8 @@ class hyperliquid extends _abstract_hyperliquid_js__WEBPACK_IMPORTED_MODULE_0__/
159806
161875
  'strike': undefined,
159807
161876
  'optionType': undefined,
159808
161877
  'precision': {
159809
- 'amount': 0.00000001,
159810
- 'price': 0.00000001,
161878
+ 'amount': this.parseNumber(this.parsePrecision(this.safeString(market, 'szDecimals'))),
161879
+ 'price': this.parseNumber('5'), // significant digits
159811
161880
  },
159812
161881
  'limits': {
159813
161882
  'leverage': {
@@ -160066,6 +162135,12 @@ class hyperliquid extends _abstract_hyperliquid_js__WEBPACK_IMPORTED_MODULE_0__/
160066
162135
  amountToPrecision(symbol, amount) {
160067
162136
  return this.decimalToPrecision(amount, _base_functions_number_js__WEBPACK_IMPORTED_MODULE_2__/* .ROUND */ .oU, this.markets[symbol]['precision']['amount'], this.precisionMode);
160068
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
+ }
160069
162144
  hashMessage(message) {
160070
162145
  return '0x' + this.hash(message, _static_dependencies_noble_hashes_sha3_js__WEBPACK_IMPORTED_MODULE_3__/* .keccak_256 */ .fr, 'hex');
160071
162146
  }
@@ -189122,7 +191197,7 @@ class mexc extends _abstract_mexc_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
189122
191197
  'Combination of optional parameters invalid': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest,
189123
191198
  'api market order is disabled': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest,
189124
191199
  'Contract not allow place order!': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InvalidOrder,
189125
- 'Oversold': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InvalidOrder,
191200
+ 'Oversold': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InsufficientFunds,
189126
191201
  'Insufficient position': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InsufficientFunds,
189127
191202
  'Insufficient balance!': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InsufficientFunds,
189128
191203
  'Bid price is great than max allow price': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InvalidOrder,
@@ -204181,7 +206256,7 @@ class okx extends _abstract_okx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
204181
206256
  let paginate = false;
204182
206257
  [paginate, params] = this.handleOptionAndParams(params, 'fetchFundingRateHistory', 'paginate');
204183
206258
  if (paginate) {
204184
- return await this.fetchPaginatedCallDeterministic('fetchFundingRateHistory', symbol, since, limit, '8h', params);
206259
+ return await this.fetchPaginatedCallDeterministic('fetchFundingRateHistory', symbol, since, limit, '8h', params, 100);
204185
206260
  }
204186
206261
  const market = this.market(symbol);
204187
206262
  const request = {
@@ -242783,6 +244858,660 @@ class coinbase extends _coinbase_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] *
242783
244858
  }
242784
244859
 
242785
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
+
242786
245515
  /***/ }),
242787
245516
 
242788
245517
  /***/ 8368:
@@ -317716,39 +320445,39 @@ var __webpack_exports__ = {};
317716
320445
  (() => {
317717
320446
  __webpack_require__.r(__webpack_exports__);
317718
320447
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
317719
- /* harmony export */ AccountNotEnabled: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.AccountNotEnabled),
317720
- /* harmony export */ AccountSuspended: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.AccountSuspended),
317721
- /* harmony export */ AddressPending: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.AddressPending),
317722
- /* harmony export */ ArgumentsRequired: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.ArgumentsRequired),
317723
- /* harmony export */ AuthenticationError: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.AuthenticationError),
317724
- /* harmony export */ BadRequest: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.BadRequest),
317725
- /* harmony export */ BadResponse: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.BadResponse),
317726
- /* harmony export */ BadSymbol: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.BadSymbol),
317727
- /* harmony export */ BaseError: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.BaseError),
317728
- /* harmony export */ CancelPending: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.CancelPending),
317729
- /* harmony export */ DDoSProtection: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.DDoSProtection),
317730
- /* 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),
317731
320460
  /* harmony export */ Exchange: () => (/* reexport safe */ _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__.e),
317732
- /* harmony export */ ExchangeError: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.ExchangeError),
317733
- /* harmony export */ ExchangeNotAvailable: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.ExchangeNotAvailable),
317734
- /* harmony export */ InsufficientFunds: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.InsufficientFunds),
317735
- /* harmony export */ InvalidAddress: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.InvalidAddress),
317736
- /* harmony export */ InvalidNonce: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.InvalidNonce),
317737
- /* harmony export */ InvalidOrder: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.InvalidOrder),
317738
- /* harmony export */ MarginModeAlreadySet: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.MarginModeAlreadySet),
317739
- /* harmony export */ NetworkError: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.NetworkError),
317740
- /* harmony export */ NoChange: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.NoChange),
317741
- /* harmony export */ NotSupported: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.NotSupported),
317742
- /* harmony export */ NullResponse: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.NullResponse),
317743
- /* harmony export */ OnMaintenance: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.OnMaintenance),
317744
- /* harmony export */ OrderImmediatelyFillable: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.OrderImmediatelyFillable),
317745
- /* harmony export */ OrderNotCached: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.OrderNotCached),
317746
- /* harmony export */ OrderNotFillable: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.OrderNotFillable),
317747
- /* harmony export */ OrderNotFound: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.OrderNotFound),
317748
- /* harmony export */ PermissionDenied: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.PermissionDenied),
317749
- /* harmony export */ Precise: () => (/* reexport safe */ _src_base_Precise_js__WEBPACK_IMPORTED_MODULE_164__.O),
317750
- /* harmony export */ RateLimitExceeded: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_166__.RateLimitExceeded),
317751
- /* 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),
317752
320481
  /* harmony export */ ace: () => (/* reexport safe */ _src_ace_js__WEBPACK_IMPORTED_MODULE_1__.Z),
317753
320482
  /* harmony export */ alpaca: () => (/* reexport safe */ _src_alpaca_js__WEBPACK_IMPORTED_MODULE_2__.Z),
317754
320483
  /* harmony export */ ascendex: () => (/* reexport safe */ _src_ascendex_js__WEBPACK_IMPORTED_MODULE_3__.Z),
@@ -317788,79 +320517,80 @@ __webpack_require__.r(__webpack_exports__);
317788
320517
  /* harmony export */ bybit: () => (/* reexport safe */ _src_bybit_js__WEBPACK_IMPORTED_MODULE_37__.Z),
317789
320518
  /* harmony export */ cex: () => (/* reexport safe */ _src_cex_js__WEBPACK_IMPORTED_MODULE_38__.Z),
317790
320519
  /* harmony export */ coinbase: () => (/* reexport safe */ _src_coinbase_js__WEBPACK_IMPORTED_MODULE_39__.Z),
317791
- /* harmony export */ coinbasepro: () => (/* reexport safe */ _src_coinbasepro_js__WEBPACK_IMPORTED_MODULE_40__.Z),
317792
- /* harmony export */ coincheck: () => (/* reexport safe */ _src_coincheck_js__WEBPACK_IMPORTED_MODULE_41__.Z),
317793
- /* harmony export */ coinex: () => (/* reexport safe */ _src_coinex_js__WEBPACK_IMPORTED_MODULE_42__.Z),
317794
- /* harmony export */ coinlist: () => (/* reexport safe */ _src_coinlist_js__WEBPACK_IMPORTED_MODULE_43__.Z),
317795
- /* harmony export */ coinmate: () => (/* reexport safe */ _src_coinmate_js__WEBPACK_IMPORTED_MODULE_44__.Z),
317796
- /* harmony export */ coinmetro: () => (/* reexport safe */ _src_coinmetro_js__WEBPACK_IMPORTED_MODULE_45__.Z),
317797
- /* harmony export */ coinone: () => (/* reexport safe */ _src_coinone_js__WEBPACK_IMPORTED_MODULE_46__.Z),
317798
- /* harmony export */ coinsph: () => (/* reexport safe */ _src_coinsph_js__WEBPACK_IMPORTED_MODULE_47__.Z),
317799
- /* harmony export */ coinspot: () => (/* reexport safe */ _src_coinspot_js__WEBPACK_IMPORTED_MODULE_48__.Z),
317800
- /* harmony export */ cryptocom: () => (/* reexport safe */ _src_cryptocom_js__WEBPACK_IMPORTED_MODULE_49__.Z),
317801
- /* 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),
317802
320532
  /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__),
317803
- /* harmony export */ delta: () => (/* reexport safe */ _src_delta_js__WEBPACK_IMPORTED_MODULE_51__.Z),
317804
- /* harmony export */ deribit: () => (/* reexport safe */ _src_deribit_js__WEBPACK_IMPORTED_MODULE_52__.Z),
317805
- /* harmony export */ digifinex: () => (/* reexport safe */ _src_digifinex_js__WEBPACK_IMPORTED_MODULE_53__.Z),
317806
- /* 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__),
317807
320537
  /* harmony export */ exchanges: () => (/* binding */ exchanges),
317808
- /* harmony export */ exmo: () => (/* reexport safe */ _src_exmo_js__WEBPACK_IMPORTED_MODULE_54__.Z),
317809
- /* harmony export */ fmfwio: () => (/* reexport safe */ _src_fmfwio_js__WEBPACK_IMPORTED_MODULE_55__.Z),
317810
- /* harmony export */ functions: () => (/* reexport module object */ _src_base_functions_js__WEBPACK_IMPORTED_MODULE_165__),
317811
- /* harmony export */ gate: () => (/* reexport safe */ _src_gate_js__WEBPACK_IMPORTED_MODULE_56__.Z),
317812
- /* harmony export */ gateio: () => (/* reexport safe */ _src_gateio_js__WEBPACK_IMPORTED_MODULE_57__.Z),
317813
- /* harmony export */ gemini: () => (/* reexport safe */ _src_gemini_js__WEBPACK_IMPORTED_MODULE_58__.Z),
317814
- /* harmony export */ hitbtc: () => (/* reexport safe */ _src_hitbtc_js__WEBPACK_IMPORTED_MODULE_59__.Z),
317815
- /* harmony export */ hitbtc3: () => (/* reexport safe */ _src_hitbtc3_js__WEBPACK_IMPORTED_MODULE_60__.Z),
317816
- /* harmony export */ hollaex: () => (/* reexport safe */ _src_hollaex_js__WEBPACK_IMPORTED_MODULE_61__.Z),
317817
- /* harmony export */ htx: () => (/* reexport safe */ _src_htx_js__WEBPACK_IMPORTED_MODULE_62__.Z),
317818
- /* harmony export */ huobi: () => (/* reexport safe */ _src_huobi_js__WEBPACK_IMPORTED_MODULE_63__.Z),
317819
- /* harmony export */ huobijp: () => (/* reexport safe */ _src_huobijp_js__WEBPACK_IMPORTED_MODULE_64__.Z),
317820
- /* harmony export */ hyperliquid: () => (/* reexport safe */ _src_hyperliquid_js__WEBPACK_IMPORTED_MODULE_65__.Z),
317821
- /* harmony export */ idex: () => (/* reexport safe */ _src_idex_js__WEBPACK_IMPORTED_MODULE_66__.Z),
317822
- /* harmony export */ independentreserve: () => (/* reexport safe */ _src_independentreserve_js__WEBPACK_IMPORTED_MODULE_67__.Z),
317823
- /* harmony export */ indodax: () => (/* reexport safe */ _src_indodax_js__WEBPACK_IMPORTED_MODULE_68__.Z),
317824
- /* harmony export */ kraken: () => (/* reexport safe */ _src_kraken_js__WEBPACK_IMPORTED_MODULE_69__.Z),
317825
- /* harmony export */ krakenfutures: () => (/* reexport safe */ _src_krakenfutures_js__WEBPACK_IMPORTED_MODULE_70__.Z),
317826
- /* harmony export */ kucoin: () => (/* reexport safe */ _src_kucoin_js__WEBPACK_IMPORTED_MODULE_71__.Z),
317827
- /* harmony export */ kucoinfutures: () => (/* reexport safe */ _src_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_72__.Z),
317828
- /* harmony export */ kuna: () => (/* reexport safe */ _src_kuna_js__WEBPACK_IMPORTED_MODULE_73__.Z),
317829
- /* harmony export */ latoken: () => (/* reexport safe */ _src_latoken_js__WEBPACK_IMPORTED_MODULE_74__.Z),
317830
- /* harmony export */ lbank: () => (/* reexport safe */ _src_lbank_js__WEBPACK_IMPORTED_MODULE_75__.Z),
317831
- /* harmony export */ luno: () => (/* reexport safe */ _src_luno_js__WEBPACK_IMPORTED_MODULE_76__.Z),
317832
- /* harmony export */ lykke: () => (/* reexport safe */ _src_lykke_js__WEBPACK_IMPORTED_MODULE_77__.Z),
317833
- /* harmony export */ mercado: () => (/* reexport safe */ _src_mercado_js__WEBPACK_IMPORTED_MODULE_78__.Z),
317834
- /* harmony export */ mexc: () => (/* reexport safe */ _src_mexc_js__WEBPACK_IMPORTED_MODULE_79__.Z),
317835
- /* harmony export */ ndax: () => (/* reexport safe */ _src_ndax_js__WEBPACK_IMPORTED_MODULE_80__.Z),
317836
- /* harmony export */ novadax: () => (/* reexport safe */ _src_novadax_js__WEBPACK_IMPORTED_MODULE_81__.Z),
317837
- /* harmony export */ oceanex: () => (/* reexport safe */ _src_oceanex_js__WEBPACK_IMPORTED_MODULE_82__.Z),
317838
- /* harmony export */ okcoin: () => (/* reexport safe */ _src_okcoin_js__WEBPACK_IMPORTED_MODULE_83__.Z),
317839
- /* harmony export */ okx: () => (/* reexport safe */ _src_okx_js__WEBPACK_IMPORTED_MODULE_84__.Z),
317840
- /* harmony export */ onetrading: () => (/* reexport safe */ _src_onetrading_js__WEBPACK_IMPORTED_MODULE_85__.Z),
317841
- /* harmony export */ p2b: () => (/* reexport safe */ _src_p2b_js__WEBPACK_IMPORTED_MODULE_86__.Z),
317842
- /* harmony export */ paymium: () => (/* reexport safe */ _src_paymium_js__WEBPACK_IMPORTED_MODULE_87__.Z),
317843
- /* harmony export */ phemex: () => (/* reexport safe */ _src_phemex_js__WEBPACK_IMPORTED_MODULE_88__.Z),
317844
- /* harmony export */ poloniex: () => (/* reexport safe */ _src_poloniex_js__WEBPACK_IMPORTED_MODULE_89__.Z),
317845
- /* 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),
317846
320576
  /* harmony export */ pro: () => (/* binding */ pro),
317847
- /* harmony export */ probit: () => (/* reexport safe */ _src_probit_js__WEBPACK_IMPORTED_MODULE_91__.Z),
317848
- /* harmony export */ timex: () => (/* reexport safe */ _src_timex_js__WEBPACK_IMPORTED_MODULE_92__.Z),
317849
- /* harmony export */ tokocrypto: () => (/* reexport safe */ _src_tokocrypto_js__WEBPACK_IMPORTED_MODULE_93__.Z),
317850
- /* 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),
317851
320581
  /* harmony export */ version: () => (/* binding */ version),
317852
- /* harmony export */ wavesexchange: () => (/* reexport safe */ _src_wavesexchange_js__WEBPACK_IMPORTED_MODULE_95__.Z),
317853
- /* harmony export */ wazirx: () => (/* reexport safe */ _src_wazirx_js__WEBPACK_IMPORTED_MODULE_96__.Z),
317854
- /* harmony export */ whitebit: () => (/* reexport safe */ _src_whitebit_js__WEBPACK_IMPORTED_MODULE_97__.Z),
317855
- /* harmony export */ woo: () => (/* reexport safe */ _src_woo_js__WEBPACK_IMPORTED_MODULE_98__.Z),
317856
- /* harmony export */ yobit: () => (/* reexport safe */ _src_yobit_js__WEBPACK_IMPORTED_MODULE_99__.Z),
317857
- /* harmony export */ zaif: () => (/* reexport safe */ _src_zaif_js__WEBPACK_IMPORTED_MODULE_100__.Z),
317858
- /* 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)
317859
320589
  /* harmony export */ });
317860
320590
  /* harmony import */ var _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3043);
317861
- /* harmony import */ var _src_base_Precise_js__WEBPACK_IMPORTED_MODULE_164__ = __webpack_require__(2194);
317862
- /* harmony import */ var _src_base_functions_js__WEBPACK_IMPORTED_MODULE_165__ = __webpack_require__(7100);
317863
- /* 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);
317864
320594
  /* harmony import */ var _src_ace_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9869);
317865
320595
  /* harmony import */ var _src_alpaca_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5660);
317866
320596
  /* harmony import */ var _src_ascendex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9612);
@@ -317900,130 +320630,132 @@ __webpack_require__.r(__webpack_exports__);
317900
320630
  /* harmony import */ var _src_bybit_js__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(3527);
317901
320631
  /* harmony import */ var _src_cex_js__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(6445);
317902
320632
  /* harmony import */ var _src_coinbase_js__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(437);
317903
- /* harmony import */ var _src_coinbasepro_js__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(8856);
317904
- /* harmony import */ var _src_coincheck_js__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(2117);
317905
- /* harmony import */ var _src_coinex_js__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(332);
317906
- /* harmony import */ var _src_coinlist_js__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(3623);
317907
- /* harmony import */ var _src_coinmate_js__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(9816);
317908
- /* harmony import */ var _src_coinmetro_js__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(4759);
317909
- /* harmony import */ var _src_coinone_js__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(7811);
317910
- /* harmony import */ var _src_coinsph_js__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(5782);
317911
- /* harmony import */ var _src_coinspot_js__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(7794);
317912
- /* harmony import */ var _src_cryptocom_js__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(9129);
317913
- /* harmony import */ var _src_currencycom_js__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(3214);
317914
- /* harmony import */ var _src_delta_js__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(1753);
317915
- /* harmony import */ var _src_deribit_js__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(24);
317916
- /* harmony import */ var _src_digifinex_js__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(8846);
317917
- /* harmony import */ var _src_exmo_js__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(1729);
317918
- /* harmony import */ var _src_fmfwio_js__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(5788);
317919
- /* harmony import */ var _src_gate_js__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(7290);
317920
- /* harmony import */ var _src_gateio_js__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(7036);
317921
- /* harmony import */ var _src_gemini_js__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(6743);
317922
- /* harmony import */ var _src_hitbtc_js__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(4714);
317923
- /* harmony import */ var _src_hitbtc3_js__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(4815);
317924
- /* harmony import */ var _src_hollaex_js__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(8422);
317925
- /* harmony import */ var _src_htx_js__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(5939);
317926
- /* harmony import */ var _src_huobi_js__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(8146);
317927
- /* harmony import */ var _src_huobijp_js__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(7034);
317928
- /* harmony import */ var _src_hyperliquid_js__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(5959);
317929
- /* harmony import */ var _src_idex_js__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(8232);
317930
- /* harmony import */ var _src_independentreserve_js__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(9570);
317931
- /* harmony import */ var _src_indodax_js__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(1605);
317932
- /* harmony import */ var _src_kraken_js__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(9922);
317933
- /* harmony import */ var _src_krakenfutures_js__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(4470);
317934
- /* harmony import */ var _src_kucoin_js__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(3583);
317935
- /* harmony import */ var _src_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(1924);
317936
- /* harmony import */ var _src_kuna_js__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(7732);
317937
- /* harmony import */ var _src_latoken_js__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(2545);
317938
- /* harmony import */ var _src_lbank_js__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(3944);
317939
- /* harmony import */ var _src_luno_js__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(1758);
317940
- /* harmony import */ var _src_lykke_js__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(3803);
317941
- /* harmony import */ var _src_mercado_js__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(9013);
317942
- /* harmony import */ var _src_mexc_js__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(6641);
317943
- /* harmony import */ var _src_ndax_js__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(4531);
317944
- /* harmony import */ var _src_novadax_js__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(2449);
317945
- /* harmony import */ var _src_oceanex_js__WEBPACK_IMPORTED_MODULE_82__ = __webpack_require__(6749);
317946
- /* harmony import */ var _src_okcoin_js__WEBPACK_IMPORTED_MODULE_83__ = __webpack_require__(3007);
317947
- /* harmony import */ var _src_okx_js__WEBPACK_IMPORTED_MODULE_84__ = __webpack_require__(4042);
317948
- /* harmony import */ var _src_onetrading_js__WEBPACK_IMPORTED_MODULE_85__ = __webpack_require__(6481);
317949
- /* harmony import */ var _src_p2b_js__WEBPACK_IMPORTED_MODULE_86__ = __webpack_require__(2466);
317950
- /* harmony import */ var _src_paymium_js__WEBPACK_IMPORTED_MODULE_87__ = __webpack_require__(7082);
317951
- /* harmony import */ var _src_phemex_js__WEBPACK_IMPORTED_MODULE_88__ = __webpack_require__(79);
317952
- /* harmony import */ var _src_poloniex_js__WEBPACK_IMPORTED_MODULE_89__ = __webpack_require__(8891);
317953
- /* harmony import */ var _src_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_90__ = __webpack_require__(6877);
317954
- /* harmony import */ var _src_probit_js__WEBPACK_IMPORTED_MODULE_91__ = __webpack_require__(3657);
317955
- /* harmony import */ var _src_timex_js__WEBPACK_IMPORTED_MODULE_92__ = __webpack_require__(1067);
317956
- /* harmony import */ var _src_tokocrypto_js__WEBPACK_IMPORTED_MODULE_93__ = __webpack_require__(5261);
317957
- /* harmony import */ var _src_upbit_js__WEBPACK_IMPORTED_MODULE_94__ = __webpack_require__(7584);
317958
- /* harmony import */ var _src_wavesexchange_js__WEBPACK_IMPORTED_MODULE_95__ = __webpack_require__(3853);
317959
- /* harmony import */ var _src_wazirx_js__WEBPACK_IMPORTED_MODULE_96__ = __webpack_require__(6536);
317960
- /* harmony import */ var _src_whitebit_js__WEBPACK_IMPORTED_MODULE_97__ = __webpack_require__(5467);
317961
- /* harmony import */ var _src_woo_js__WEBPACK_IMPORTED_MODULE_98__ = __webpack_require__(517);
317962
- /* harmony import */ var _src_yobit_js__WEBPACK_IMPORTED_MODULE_99__ = __webpack_require__(3850);
317963
- /* harmony import */ var _src_zaif_js__WEBPACK_IMPORTED_MODULE_100__ = __webpack_require__(5934);
317964
- /* harmony import */ var _src_zonda_js__WEBPACK_IMPORTED_MODULE_101__ = __webpack_require__(5140);
317965
- /* harmony import */ var _src_pro_alpaca_js__WEBPACK_IMPORTED_MODULE_102__ = __webpack_require__(2467);
317966
- /* harmony import */ var _src_pro_ascendex_js__WEBPACK_IMPORTED_MODULE_103__ = __webpack_require__(2383);
317967
- /* harmony import */ var _src_pro_bequant_js__WEBPACK_IMPORTED_MODULE_104__ = __webpack_require__(8848);
317968
- /* harmony import */ var _src_pro_binance_js__WEBPACK_IMPORTED_MODULE_105__ = __webpack_require__(8764);
317969
- /* harmony import */ var _src_pro_binancecoinm_js__WEBPACK_IMPORTED_MODULE_106__ = __webpack_require__(5078);
317970
- /* harmony import */ var _src_pro_binanceus_js__WEBPACK_IMPORTED_MODULE_107__ = __webpack_require__(1326);
317971
- /* harmony import */ var _src_pro_binanceusdm_js__WEBPACK_IMPORTED_MODULE_108__ = __webpack_require__(1230);
317972
- /* harmony import */ var _src_pro_bingx_js__WEBPACK_IMPORTED_MODULE_109__ = __webpack_require__(6955);
317973
- /* harmony import */ var _src_pro_bitcoincom_js__WEBPACK_IMPORTED_MODULE_110__ = __webpack_require__(453);
317974
- /* harmony import */ var _src_pro_bitfinex_js__WEBPACK_IMPORTED_MODULE_111__ = __webpack_require__(9772);
317975
- /* harmony import */ var _src_pro_bitfinex2_js__WEBPACK_IMPORTED_MODULE_112__ = __webpack_require__(588);
317976
- /* harmony import */ var _src_pro_bitget_js__WEBPACK_IMPORTED_MODULE_113__ = __webpack_require__(1885);
317977
- /* harmony import */ var _src_pro_bitmart_js__WEBPACK_IMPORTED_MODULE_114__ = __webpack_require__(7504);
317978
- /* harmony import */ var _src_pro_bitmex_js__WEBPACK_IMPORTED_MODULE_115__ = __webpack_require__(2302);
317979
- /* harmony import */ var _src_pro_bitopro_js__WEBPACK_IMPORTED_MODULE_116__ = __webpack_require__(2191);
317980
- /* harmony import */ var _src_pro_bitpanda_js__WEBPACK_IMPORTED_MODULE_117__ = __webpack_require__(1297);
317981
- /* harmony import */ var _src_pro_bitrue_js__WEBPACK_IMPORTED_MODULE_118__ = __webpack_require__(3005);
317982
- /* harmony import */ var _src_pro_bitstamp_js__WEBPACK_IMPORTED_MODULE_119__ = __webpack_require__(2317);
317983
- /* harmony import */ var _src_pro_bitvavo_js__WEBPACK_IMPORTED_MODULE_120__ = __webpack_require__(6977);
317984
- /* harmony import */ var _src_pro_blockchaincom_js__WEBPACK_IMPORTED_MODULE_121__ = __webpack_require__(2519);
317985
- /* harmony import */ var _src_pro_bybit_js__WEBPACK_IMPORTED_MODULE_122__ = __webpack_require__(5030);
317986
- /* harmony import */ var _src_pro_cex_js__WEBPACK_IMPORTED_MODULE_123__ = __webpack_require__(5272);
317987
- /* harmony import */ var _src_pro_coinbase_js__WEBPACK_IMPORTED_MODULE_124__ = __webpack_require__(3414);
317988
- /* harmony import */ var _src_pro_coinbasepro_js__WEBPACK_IMPORTED_MODULE_125__ = __webpack_require__(8368);
317989
- /* harmony import */ var _src_pro_coincheck_js__WEBPACK_IMPORTED_MODULE_126__ = __webpack_require__(7891);
317990
- /* harmony import */ var _src_pro_coinex_js__WEBPACK_IMPORTED_MODULE_127__ = __webpack_require__(204);
317991
- /* harmony import */ var _src_pro_coinone_js__WEBPACK_IMPORTED_MODULE_128__ = __webpack_require__(5208);
317992
- /* harmony import */ var _src_pro_cryptocom_js__WEBPACK_IMPORTED_MODULE_129__ = __webpack_require__(6820);
317993
- /* harmony import */ var _src_pro_currencycom_js__WEBPACK_IMPORTED_MODULE_130__ = __webpack_require__(2952);
317994
- /* harmony import */ var _src_pro_deribit_js__WEBPACK_IMPORTED_MODULE_131__ = __webpack_require__(1788);
317995
- /* harmony import */ var _src_pro_exmo_js__WEBPACK_IMPORTED_MODULE_132__ = __webpack_require__(9004);
317996
- /* harmony import */ var _src_pro_gate_js__WEBPACK_IMPORTED_MODULE_133__ = __webpack_require__(8335);
317997
- /* harmony import */ var _src_pro_gateio_js__WEBPACK_IMPORTED_MODULE_134__ = __webpack_require__(1465);
317998
- /* harmony import */ var _src_pro_gemini_js__WEBPACK_IMPORTED_MODULE_135__ = __webpack_require__(9488);
317999
- /* harmony import */ var _src_pro_hitbtc_js__WEBPACK_IMPORTED_MODULE_136__ = __webpack_require__(5189);
318000
- /* harmony import */ var _src_pro_hollaex_js__WEBPACK_IMPORTED_MODULE_137__ = __webpack_require__(8559);
318001
- /* harmony import */ var _src_pro_htx_js__WEBPACK_IMPORTED_MODULE_138__ = __webpack_require__(7474);
318002
- /* harmony import */ var _src_pro_huobi_js__WEBPACK_IMPORTED_MODULE_139__ = __webpack_require__(8384);
318003
- /* harmony import */ var _src_pro_huobijp_js__WEBPACK_IMPORTED_MODULE_140__ = __webpack_require__(9021);
318004
- /* harmony import */ var _src_pro_hyperliquid_js__WEBPACK_IMPORTED_MODULE_141__ = __webpack_require__(8354);
318005
- /* harmony import */ var _src_pro_idex_js__WEBPACK_IMPORTED_MODULE_142__ = __webpack_require__(3484);
318006
- /* harmony import */ var _src_pro_independentreserve_js__WEBPACK_IMPORTED_MODULE_143__ = __webpack_require__(1311);
318007
- /* harmony import */ var _src_pro_kraken_js__WEBPACK_IMPORTED_MODULE_144__ = __webpack_require__(736);
318008
- /* harmony import */ var _src_pro_krakenfutures_js__WEBPACK_IMPORTED_MODULE_145__ = __webpack_require__(449);
318009
- /* harmony import */ var _src_pro_kucoin_js__WEBPACK_IMPORTED_MODULE_146__ = __webpack_require__(2387);
318010
- /* harmony import */ var _src_pro_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_147__ = __webpack_require__(7181);
318011
- /* harmony import */ var _src_pro_lbank_js__WEBPACK_IMPORTED_MODULE_148__ = __webpack_require__(1267);
318012
- /* harmony import */ var _src_pro_luno_js__WEBPACK_IMPORTED_MODULE_149__ = __webpack_require__(627);
318013
- /* harmony import */ var _src_pro_mexc_js__WEBPACK_IMPORTED_MODULE_150__ = __webpack_require__(6484);
318014
- /* harmony import */ var _src_pro_ndax_js__WEBPACK_IMPORTED_MODULE_151__ = __webpack_require__(8080);
318015
- /* harmony import */ var _src_pro_okcoin_js__WEBPACK_IMPORTED_MODULE_152__ = __webpack_require__(7105);
318016
- /* harmony import */ var _src_pro_okx_js__WEBPACK_IMPORTED_MODULE_153__ = __webpack_require__(2214);
318017
- /* harmony import */ var _src_pro_onetrading_js__WEBPACK_IMPORTED_MODULE_154__ = __webpack_require__(9419);
318018
- /* harmony import */ var _src_pro_p2b_js__WEBPACK_IMPORTED_MODULE_155__ = __webpack_require__(8516);
318019
- /* harmony import */ var _src_pro_phemex_js__WEBPACK_IMPORTED_MODULE_156__ = __webpack_require__(4360);
318020
- /* harmony import */ var _src_pro_poloniex_js__WEBPACK_IMPORTED_MODULE_157__ = __webpack_require__(7924);
318021
- /* harmony import */ var _src_pro_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_158__ = __webpack_require__(3541);
318022
- /* harmony import */ var _src_pro_probit_js__WEBPACK_IMPORTED_MODULE_159__ = __webpack_require__(9782);
318023
- /* harmony import */ var _src_pro_upbit_js__WEBPACK_IMPORTED_MODULE_160__ = __webpack_require__(7614);
318024
- /* harmony import */ var _src_pro_wazirx_js__WEBPACK_IMPORTED_MODULE_161__ = __webpack_require__(4828);
318025
- /* harmony import */ var _src_pro_whitebit_js__WEBPACK_IMPORTED_MODULE_162__ = __webpack_require__(5630);
318026
- /* 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);
318027
320759
  /*
318028
320760
 
318029
320761
  MIT License
@@ -318058,7 +320790,7 @@ SOFTWARE.
318058
320790
 
318059
320791
  //-----------------------------------------------------------------------------
318060
320792
  // this is updated by vss.js when building
318061
- const version = '4.2.72';
320793
+ const version = '4.2.73';
318062
320794
  _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange */ .e.ccxtVersion = version;
318063
320795
  //-----------------------------------------------------------------------------
318064
320796
 
@@ -318160,6 +320892,7 @@ _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange */ .e.ccxtVersion
318160
320892
 
318161
320893
 
318162
320894
 
320895
+
318163
320896
 
318164
320897
 
318165
320898
  // pro exchanges
@@ -318223,6 +320956,7 @@ _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange */ .e.ccxtVersion
318223
320956
 
318224
320957
 
318225
320958
 
320959
+
318226
320960
 
318227
320961
 
318228
320962
  const exchanges = {
@@ -318265,132 +320999,134 @@ const exchanges = {
318265
320999
  'bybit': _src_bybit_js__WEBPACK_IMPORTED_MODULE_37__/* ["default"] */ .Z,
318266
321000
  'cex': _src_cex_js__WEBPACK_IMPORTED_MODULE_38__/* ["default"] */ .Z,
318267
321001
  'coinbase': _src_coinbase_js__WEBPACK_IMPORTED_MODULE_39__/* ["default"] */ .Z,
318268
- 'coinbasepro': _src_coinbasepro_js__WEBPACK_IMPORTED_MODULE_40__/* ["default"] */ .Z,
318269
- 'coincheck': _src_coincheck_js__WEBPACK_IMPORTED_MODULE_41__/* ["default"] */ .Z,
318270
- 'coinex': _src_coinex_js__WEBPACK_IMPORTED_MODULE_42__/* ["default"] */ .Z,
318271
- 'coinlist': _src_coinlist_js__WEBPACK_IMPORTED_MODULE_43__/* ["default"] */ .Z,
318272
- 'coinmate': _src_coinmate_js__WEBPACK_IMPORTED_MODULE_44__/* ["default"] */ .Z,
318273
- 'coinmetro': _src_coinmetro_js__WEBPACK_IMPORTED_MODULE_45__/* ["default"] */ .Z,
318274
- 'coinone': _src_coinone_js__WEBPACK_IMPORTED_MODULE_46__/* ["default"] */ .Z,
318275
- 'coinsph': _src_coinsph_js__WEBPACK_IMPORTED_MODULE_47__/* ["default"] */ .Z,
318276
- 'coinspot': _src_coinspot_js__WEBPACK_IMPORTED_MODULE_48__/* ["default"] */ .Z,
318277
- 'cryptocom': _src_cryptocom_js__WEBPACK_IMPORTED_MODULE_49__/* ["default"] */ .Z,
318278
- 'currencycom': _src_currencycom_js__WEBPACK_IMPORTED_MODULE_50__/* ["default"] */ .Z,
318279
- 'delta': _src_delta_js__WEBPACK_IMPORTED_MODULE_51__/* ["default"] */ .Z,
318280
- 'deribit': _src_deribit_js__WEBPACK_IMPORTED_MODULE_52__/* ["default"] */ .Z,
318281
- 'digifinex': _src_digifinex_js__WEBPACK_IMPORTED_MODULE_53__/* ["default"] */ .Z,
318282
- 'exmo': _src_exmo_js__WEBPACK_IMPORTED_MODULE_54__/* ["default"] */ .Z,
318283
- 'fmfwio': _src_fmfwio_js__WEBPACK_IMPORTED_MODULE_55__/* ["default"] */ .Z,
318284
- 'gate': _src_gate_js__WEBPACK_IMPORTED_MODULE_56__/* ["default"] */ .Z,
318285
- 'gateio': _src_gateio_js__WEBPACK_IMPORTED_MODULE_57__/* ["default"] */ .Z,
318286
- 'gemini': _src_gemini_js__WEBPACK_IMPORTED_MODULE_58__/* ["default"] */ .Z,
318287
- 'hitbtc': _src_hitbtc_js__WEBPACK_IMPORTED_MODULE_59__/* ["default"] */ .Z,
318288
- 'hitbtc3': _src_hitbtc3_js__WEBPACK_IMPORTED_MODULE_60__/* ["default"] */ .Z,
318289
- 'hollaex': _src_hollaex_js__WEBPACK_IMPORTED_MODULE_61__/* ["default"] */ .Z,
318290
- 'htx': _src_htx_js__WEBPACK_IMPORTED_MODULE_62__/* ["default"] */ .Z,
318291
- 'huobi': _src_huobi_js__WEBPACK_IMPORTED_MODULE_63__/* ["default"] */ .Z,
318292
- 'huobijp': _src_huobijp_js__WEBPACK_IMPORTED_MODULE_64__/* ["default"] */ .Z,
318293
- 'hyperliquid': _src_hyperliquid_js__WEBPACK_IMPORTED_MODULE_65__/* ["default"] */ .Z,
318294
- 'idex': _src_idex_js__WEBPACK_IMPORTED_MODULE_66__/* ["default"] */ .Z,
318295
- 'independentreserve': _src_independentreserve_js__WEBPACK_IMPORTED_MODULE_67__/* ["default"] */ .Z,
318296
- 'indodax': _src_indodax_js__WEBPACK_IMPORTED_MODULE_68__/* ["default"] */ .Z,
318297
- 'kraken': _src_kraken_js__WEBPACK_IMPORTED_MODULE_69__/* ["default"] */ .Z,
318298
- 'krakenfutures': _src_krakenfutures_js__WEBPACK_IMPORTED_MODULE_70__/* ["default"] */ .Z,
318299
- 'kucoin': _src_kucoin_js__WEBPACK_IMPORTED_MODULE_71__/* ["default"] */ .Z,
318300
- 'kucoinfutures': _src_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_72__/* ["default"] */ .Z,
318301
- 'kuna': _src_kuna_js__WEBPACK_IMPORTED_MODULE_73__/* ["default"] */ .Z,
318302
- 'latoken': _src_latoken_js__WEBPACK_IMPORTED_MODULE_74__/* ["default"] */ .Z,
318303
- 'lbank': _src_lbank_js__WEBPACK_IMPORTED_MODULE_75__/* ["default"] */ .Z,
318304
- 'luno': _src_luno_js__WEBPACK_IMPORTED_MODULE_76__/* ["default"] */ .Z,
318305
- 'lykke': _src_lykke_js__WEBPACK_IMPORTED_MODULE_77__/* ["default"] */ .Z,
318306
- 'mercado': _src_mercado_js__WEBPACK_IMPORTED_MODULE_78__/* ["default"] */ .Z,
318307
- 'mexc': _src_mexc_js__WEBPACK_IMPORTED_MODULE_79__/* ["default"] */ .Z,
318308
- 'ndax': _src_ndax_js__WEBPACK_IMPORTED_MODULE_80__/* ["default"] */ .Z,
318309
- 'novadax': _src_novadax_js__WEBPACK_IMPORTED_MODULE_81__/* ["default"] */ .Z,
318310
- 'oceanex': _src_oceanex_js__WEBPACK_IMPORTED_MODULE_82__/* ["default"] */ .Z,
318311
- 'okcoin': _src_okcoin_js__WEBPACK_IMPORTED_MODULE_83__/* ["default"] */ .Z,
318312
- 'okx': _src_okx_js__WEBPACK_IMPORTED_MODULE_84__/* ["default"] */ .Z,
318313
- 'onetrading': _src_onetrading_js__WEBPACK_IMPORTED_MODULE_85__/* ["default"] */ .Z,
318314
- 'p2b': _src_p2b_js__WEBPACK_IMPORTED_MODULE_86__/* ["default"] */ .Z,
318315
- 'paymium': _src_paymium_js__WEBPACK_IMPORTED_MODULE_87__/* ["default"] */ .Z,
318316
- 'phemex': _src_phemex_js__WEBPACK_IMPORTED_MODULE_88__/* ["default"] */ .Z,
318317
- 'poloniex': _src_poloniex_js__WEBPACK_IMPORTED_MODULE_89__/* ["default"] */ .Z,
318318
- 'poloniexfutures': _src_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_90__/* ["default"] */ .Z,
318319
- 'probit': _src_probit_js__WEBPACK_IMPORTED_MODULE_91__/* ["default"] */ .Z,
318320
- 'timex': _src_timex_js__WEBPACK_IMPORTED_MODULE_92__/* ["default"] */ .Z,
318321
- 'tokocrypto': _src_tokocrypto_js__WEBPACK_IMPORTED_MODULE_93__/* ["default"] */ .Z,
318322
- 'upbit': _src_upbit_js__WEBPACK_IMPORTED_MODULE_94__/* ["default"] */ .Z,
318323
- 'wavesexchange': _src_wavesexchange_js__WEBPACK_IMPORTED_MODULE_95__/* ["default"] */ .Z,
318324
- 'wazirx': _src_wazirx_js__WEBPACK_IMPORTED_MODULE_96__/* ["default"] */ .Z,
318325
- 'whitebit': _src_whitebit_js__WEBPACK_IMPORTED_MODULE_97__/* ["default"] */ .Z,
318326
- 'woo': _src_woo_js__WEBPACK_IMPORTED_MODULE_98__/* ["default"] */ .Z,
318327
- 'yobit': _src_yobit_js__WEBPACK_IMPORTED_MODULE_99__/* ["default"] */ .Z,
318328
- 'zaif': _src_zaif_js__WEBPACK_IMPORTED_MODULE_100__/* ["default"] */ .Z,
318329
- '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,
318330
321065
  };
318331
321066
  const pro = {
318332
- 'alpaca': _src_pro_alpaca_js__WEBPACK_IMPORTED_MODULE_102__/* ["default"] */ .Z,
318333
- 'ascendex': _src_pro_ascendex_js__WEBPACK_IMPORTED_MODULE_103__/* ["default"] */ .Z,
318334
- 'bequant': _src_pro_bequant_js__WEBPACK_IMPORTED_MODULE_104__/* ["default"] */ .Z,
318335
- 'binance': _src_pro_binance_js__WEBPACK_IMPORTED_MODULE_105__/* ["default"] */ .Z,
318336
- 'binancecoinm': _src_pro_binancecoinm_js__WEBPACK_IMPORTED_MODULE_106__/* ["default"] */ .Z,
318337
- 'binanceus': _src_pro_binanceus_js__WEBPACK_IMPORTED_MODULE_107__/* ["default"] */ .Z,
318338
- 'binanceusdm': _src_pro_binanceusdm_js__WEBPACK_IMPORTED_MODULE_108__/* ["default"] */ .Z,
318339
- 'bingx': _src_pro_bingx_js__WEBPACK_IMPORTED_MODULE_109__/* ["default"] */ .Z,
318340
- 'bitcoincom': _src_pro_bitcoincom_js__WEBPACK_IMPORTED_MODULE_110__/* ["default"] */ .Z,
318341
- 'bitfinex': _src_pro_bitfinex_js__WEBPACK_IMPORTED_MODULE_111__/* ["default"] */ .Z,
318342
- 'bitfinex2': _src_pro_bitfinex2_js__WEBPACK_IMPORTED_MODULE_112__/* ["default"] */ .Z,
318343
- 'bitget': _src_pro_bitget_js__WEBPACK_IMPORTED_MODULE_113__/* ["default"] */ .Z,
318344
- 'bitmart': _src_pro_bitmart_js__WEBPACK_IMPORTED_MODULE_114__/* ["default"] */ .Z,
318345
- 'bitmex': _src_pro_bitmex_js__WEBPACK_IMPORTED_MODULE_115__/* ["default"] */ .Z,
318346
- 'bitopro': _src_pro_bitopro_js__WEBPACK_IMPORTED_MODULE_116__/* ["default"] */ .Z,
318347
- 'bitpanda': _src_pro_bitpanda_js__WEBPACK_IMPORTED_MODULE_117__/* ["default"] */ .Z,
318348
- 'bitrue': _src_pro_bitrue_js__WEBPACK_IMPORTED_MODULE_118__/* ["default"] */ .Z,
318349
- 'bitstamp': _src_pro_bitstamp_js__WEBPACK_IMPORTED_MODULE_119__/* ["default"] */ .Z,
318350
- 'bitvavo': _src_pro_bitvavo_js__WEBPACK_IMPORTED_MODULE_120__/* ["default"] */ .Z,
318351
- 'blockchaincom': _src_pro_blockchaincom_js__WEBPACK_IMPORTED_MODULE_121__/* ["default"] */ .Z,
318352
- 'bybit': _src_pro_bybit_js__WEBPACK_IMPORTED_MODULE_122__/* ["default"] */ .Z,
318353
- 'cex': _src_pro_cex_js__WEBPACK_IMPORTED_MODULE_123__/* ["default"] */ .Z,
318354
- 'coinbase': _src_pro_coinbase_js__WEBPACK_IMPORTED_MODULE_124__/* ["default"] */ .Z,
318355
- 'coinbasepro': _src_pro_coinbasepro_js__WEBPACK_IMPORTED_MODULE_125__/* ["default"] */ .Z,
318356
- 'coincheck': _src_pro_coincheck_js__WEBPACK_IMPORTED_MODULE_126__/* ["default"] */ .Z,
318357
- 'coinex': _src_pro_coinex_js__WEBPACK_IMPORTED_MODULE_127__/* ["default"] */ .Z,
318358
- 'coinone': _src_pro_coinone_js__WEBPACK_IMPORTED_MODULE_128__/* ["default"] */ .Z,
318359
- 'cryptocom': _src_pro_cryptocom_js__WEBPACK_IMPORTED_MODULE_129__/* ["default"] */ .Z,
318360
- 'currencycom': _src_pro_currencycom_js__WEBPACK_IMPORTED_MODULE_130__/* ["default"] */ .Z,
318361
- 'deribit': _src_pro_deribit_js__WEBPACK_IMPORTED_MODULE_131__/* ["default"] */ .Z,
318362
- 'exmo': _src_pro_exmo_js__WEBPACK_IMPORTED_MODULE_132__/* ["default"] */ .Z,
318363
- 'gate': _src_pro_gate_js__WEBPACK_IMPORTED_MODULE_133__/* ["default"] */ .Z,
318364
- 'gateio': _src_pro_gateio_js__WEBPACK_IMPORTED_MODULE_134__/* ["default"] */ .Z,
318365
- 'gemini': _src_pro_gemini_js__WEBPACK_IMPORTED_MODULE_135__/* ["default"] */ .Z,
318366
- 'hitbtc': _src_pro_hitbtc_js__WEBPACK_IMPORTED_MODULE_136__/* ["default"] */ .Z,
318367
- 'hollaex': _src_pro_hollaex_js__WEBPACK_IMPORTED_MODULE_137__/* ["default"] */ .Z,
318368
- 'htx': _src_pro_htx_js__WEBPACK_IMPORTED_MODULE_138__/* ["default"] */ .Z,
318369
- 'huobi': _src_pro_huobi_js__WEBPACK_IMPORTED_MODULE_139__/* ["default"] */ .Z,
318370
- 'huobijp': _src_pro_huobijp_js__WEBPACK_IMPORTED_MODULE_140__/* ["default"] */ .Z,
318371
- 'hyperliquid': _src_pro_hyperliquid_js__WEBPACK_IMPORTED_MODULE_141__/* ["default"] */ .Z,
318372
- 'idex': _src_pro_idex_js__WEBPACK_IMPORTED_MODULE_142__/* ["default"] */ .Z,
318373
- 'independentreserve': _src_pro_independentreserve_js__WEBPACK_IMPORTED_MODULE_143__/* ["default"] */ .Z,
318374
- 'kraken': _src_pro_kraken_js__WEBPACK_IMPORTED_MODULE_144__/* ["default"] */ .Z,
318375
- 'krakenfutures': _src_pro_krakenfutures_js__WEBPACK_IMPORTED_MODULE_145__/* ["default"] */ .Z,
318376
- 'kucoin': _src_pro_kucoin_js__WEBPACK_IMPORTED_MODULE_146__/* ["default"] */ .Z,
318377
- 'kucoinfutures': _src_pro_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_147__/* ["default"] */ .Z,
318378
- 'lbank': _src_pro_lbank_js__WEBPACK_IMPORTED_MODULE_148__/* ["default"] */ .Z,
318379
- 'luno': _src_pro_luno_js__WEBPACK_IMPORTED_MODULE_149__/* ["default"] */ .Z,
318380
- 'mexc': _src_pro_mexc_js__WEBPACK_IMPORTED_MODULE_150__/* ["default"] */ .Z,
318381
- 'ndax': _src_pro_ndax_js__WEBPACK_IMPORTED_MODULE_151__/* ["default"] */ .Z,
318382
- 'okcoin': _src_pro_okcoin_js__WEBPACK_IMPORTED_MODULE_152__/* ["default"] */ .Z,
318383
- 'okx': _src_pro_okx_js__WEBPACK_IMPORTED_MODULE_153__/* ["default"] */ .Z,
318384
- 'onetrading': _src_pro_onetrading_js__WEBPACK_IMPORTED_MODULE_154__/* ["default"] */ .Z,
318385
- 'p2b': _src_pro_p2b_js__WEBPACK_IMPORTED_MODULE_155__/* ["default"] */ .Z,
318386
- 'phemex': _src_pro_phemex_js__WEBPACK_IMPORTED_MODULE_156__/* ["default"] */ .Z,
318387
- 'poloniex': _src_pro_poloniex_js__WEBPACK_IMPORTED_MODULE_157__/* ["default"] */ .Z,
318388
- 'poloniexfutures': _src_pro_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_158__/* ["default"] */ .Z,
318389
- 'probit': _src_pro_probit_js__WEBPACK_IMPORTED_MODULE_159__/* ["default"] */ .Z,
318390
- 'upbit': _src_pro_upbit_js__WEBPACK_IMPORTED_MODULE_160__/* ["default"] */ .Z,
318391
- 'wazirx': _src_pro_wazirx_js__WEBPACK_IMPORTED_MODULE_161__/* ["default"] */ .Z,
318392
- 'whitebit': _src_pro_whitebit_js__WEBPACK_IMPORTED_MODULE_162__/* ["default"] */ .Z,
318393
- '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,
318394
321130
  };
318395
321131
  for (const exchange in pro) {
318396
321132
  // const ccxtExchange = exchanges[exchange]
@@ -318403,7 +321139,7 @@ for (const exchange in pro) {
318403
321139
  pro.exchanges = Object.keys(pro);
318404
321140
  pro['Exchange'] = _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange */ .e; // now the same for rest and ts
318405
321141
  //-----------------------------------------------------------------------------
318406
- 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__);
318407
321143
 
318408
321144
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ccxt);
318409
321145
  //-----------------------------------------------------------------------------