ccxt 4.1.95 → 4.1.97

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 (198) hide show
  1. package/README.md +3 -3
  2. package/build.sh +16 -16
  3. package/dist/ccxt.browser.js +1570 -1401
  4. package/dist/ccxt.browser.min.js +3 -3
  5. package/dist/cjs/ccxt.js +1 -1
  6. package/dist/cjs/src/ace.js +1 -1
  7. package/dist/cjs/src/ascendex.js +1 -1
  8. package/dist/cjs/src/base/Exchange.js +6 -5
  9. package/dist/cjs/src/base/errors.js +8 -1
  10. package/dist/cjs/src/bigone.js +2 -2
  11. package/dist/cjs/src/binance.js +145 -135
  12. package/dist/cjs/src/bingx.js +50 -8
  13. package/dist/cjs/src/bit2c.js +2 -3
  14. package/dist/cjs/src/bitfinex.js +1 -1
  15. package/dist/cjs/src/bitfinex2.js +3 -4
  16. package/dist/cjs/src/bitflyer.js +2 -2
  17. package/dist/cjs/src/bitmart.js +2 -2
  18. package/dist/cjs/src/bitmex.js +2 -2
  19. package/dist/cjs/src/bitopro.js +1 -1
  20. package/dist/cjs/src/bitpanda.js +1 -1
  21. package/dist/cjs/src/bitvavo.js +1 -1
  22. package/dist/cjs/src/blockchaincom.js +1 -1
  23. package/dist/cjs/src/btcalpha.js +2 -2
  24. package/dist/cjs/src/btcbox.js +3 -4
  25. package/dist/cjs/src/btcmarkets.js +2 -2
  26. package/dist/cjs/src/btcturk.js +1 -1
  27. package/dist/cjs/src/bybit.js +2 -2
  28. package/dist/cjs/src/cex.js +1 -1
  29. package/dist/cjs/src/coinbase.js +11 -5
  30. package/dist/cjs/src/coinbasepro.js +2 -2
  31. package/dist/cjs/src/coinex.js +1 -1
  32. package/dist/cjs/src/coinlist.js +1 -1
  33. package/dist/cjs/src/cryptocom.js +2 -1
  34. package/dist/cjs/src/delta.js +25 -0
  35. package/dist/cjs/src/deribit.js +1 -1
  36. package/dist/cjs/src/digifinex.js +1 -1
  37. package/dist/cjs/src/gate.js +3 -3
  38. package/dist/cjs/src/hitbtc.js +1 -1
  39. package/dist/cjs/src/hollaex.js +2 -2
  40. package/dist/cjs/src/htx.js +1 -1
  41. package/dist/cjs/src/huobijp.js +2 -2
  42. package/dist/cjs/src/idex.js +1 -1
  43. package/dist/cjs/src/independentreserve.js +1 -1
  44. package/dist/cjs/src/kraken.js +47 -46
  45. package/dist/cjs/src/krakenfutures.js +53 -26
  46. package/dist/cjs/src/kucoin.js +74 -4
  47. package/dist/cjs/src/kucoinfutures.js +2 -2
  48. package/dist/cjs/src/kuna.js +1 -1
  49. package/dist/cjs/src/latoken.js +1 -1
  50. package/dist/cjs/src/luno.js +2 -2
  51. package/dist/cjs/src/lykke.js +1 -1
  52. package/dist/cjs/src/mexc.js +2 -2
  53. package/dist/cjs/src/ndax.js +1 -1
  54. package/dist/cjs/src/novadax.js +2 -2
  55. package/dist/cjs/src/oceanex.js +1 -1
  56. package/dist/cjs/src/okcoin.js +1 -1
  57. package/dist/cjs/src/okx.js +1 -1
  58. package/dist/cjs/src/poloniexfutures.js +1 -1
  59. package/dist/cjs/src/pro/alpaca.js +1 -1
  60. package/dist/cjs/src/pro/ascendex.js +1 -1
  61. package/dist/cjs/src/pro/binance.js +4 -5
  62. package/dist/cjs/src/pro/bingx.js +6 -3
  63. package/dist/cjs/src/pro/bitfinex.js +3 -4
  64. package/dist/cjs/src/pro/bitfinex2.js +1 -1
  65. package/dist/cjs/src/pro/bitmex.js +1 -1
  66. package/dist/cjs/src/pro/bitpanda.js +1 -1
  67. package/dist/cjs/src/pro/blockchaincom.js +1 -1
  68. package/dist/cjs/src/pro/bybit.js +2 -2
  69. package/dist/cjs/src/pro/cex.js +1 -1
  70. package/dist/cjs/src/pro/coinbase.js +1 -1
  71. package/dist/cjs/src/pro/coinbasepro.js +1 -1
  72. package/dist/cjs/src/pro/deribit.js +1 -1
  73. package/dist/cjs/src/pro/gate.js +3 -3
  74. package/dist/cjs/src/pro/gemini.js +1 -1
  75. package/dist/cjs/src/pro/hollaex.js +1 -1
  76. package/dist/cjs/src/pro/htx.js +1 -1
  77. package/dist/cjs/src/pro/idex.js +1 -1
  78. package/dist/cjs/src/pro/kraken.js +3 -4
  79. package/dist/cjs/src/pro/krakenfutures.js +1 -1
  80. package/dist/cjs/src/pro/kucoinfutures.js +1 -1
  81. package/dist/cjs/src/pro/mexc.js +1 -1
  82. package/dist/cjs/src/pro/okcoin.js +1 -1
  83. package/dist/cjs/src/pro/okx.js +2 -2
  84. package/dist/cjs/src/pro/phemex.js +1 -1
  85. package/dist/cjs/src/pro/poloniexfutures.js +1 -1
  86. package/dist/cjs/src/pro/woo.js +2 -3
  87. package/dist/cjs/src/probit.js +1 -1
  88. package/dist/cjs/src/timex.js +1 -1
  89. package/dist/cjs/src/tokocrypto.js +1 -1
  90. package/dist/cjs/src/upbit.js +1 -1
  91. package/dist/cjs/src/wavesexchange.js +1 -1
  92. package/dist/cjs/src/whitebit.js +1 -1
  93. package/dist/cjs/src/woo.js +1 -1
  94. package/dist/cjs/src/zaif.js +1 -1
  95. package/js/ccxt.d.ts +1 -1
  96. package/js/ccxt.js +1 -1
  97. package/js/src/abstract/bingx.d.ts +2 -0
  98. package/js/src/abstract/kucoin.d.ts +12 -0
  99. package/js/src/abstract/kucoinfutures.d.ts +12 -1
  100. package/js/src/ace.js +1 -1
  101. package/js/src/ascendex.js +1 -1
  102. package/js/src/base/Exchange.d.ts +1 -1
  103. package/js/src/base/Exchange.js +7 -6
  104. package/js/src/base/errorHierarchy.d.ts +1 -0
  105. package/js/src/base/errorHierarchy.js +1 -0
  106. package/js/src/base/errors.d.ts +5 -1
  107. package/js/src/base/errors.js +8 -2
  108. package/js/src/bigone.js +2 -2
  109. package/js/src/binance.js +145 -135
  110. package/js/src/bingx.d.ts +1 -0
  111. package/js/src/bingx.js +50 -8
  112. package/js/src/bit2c.js +2 -3
  113. package/js/src/bitfinex.js +1 -1
  114. package/js/src/bitfinex2.js +3 -4
  115. package/js/src/bitflyer.js +2 -2
  116. package/js/src/bitmart.js +2 -2
  117. package/js/src/bitmex.js +2 -2
  118. package/js/src/bitopro.js +1 -1
  119. package/js/src/bitpanda.js +1 -1
  120. package/js/src/bitso.d.ts +1 -1
  121. package/js/src/bitvavo.js +1 -1
  122. package/js/src/blockchaincom.js +1 -1
  123. package/js/src/btcalpha.js +2 -2
  124. package/js/src/btcbox.js +3 -4
  125. package/js/src/btcmarkets.js +2 -2
  126. package/js/src/btcturk.js +1 -1
  127. package/js/src/bybit.js +2 -2
  128. package/js/src/cex.js +1 -1
  129. package/js/src/coinbase.js +11 -5
  130. package/js/src/coinbasepro.js +2 -2
  131. package/js/src/coinex.js +1 -1
  132. package/js/src/coinlist.js +1 -1
  133. package/js/src/cryptocom.js +2 -1
  134. package/js/src/delta.d.ts +5 -4
  135. package/js/src/delta.js +25 -0
  136. package/js/src/deribit.js +1 -1
  137. package/js/src/digifinex.js +1 -1
  138. package/js/src/gate.js +3 -3
  139. package/js/src/hitbtc.js +1 -1
  140. package/js/src/hollaex.js +2 -2
  141. package/js/src/htx.js +1 -1
  142. package/js/src/huobijp.js +2 -2
  143. package/js/src/idex.js +1 -1
  144. package/js/src/independentreserve.js +1 -1
  145. package/js/src/kraken.js +47 -46
  146. package/js/src/krakenfutures.js +53 -26
  147. package/js/src/kucoin.d.ts +3 -0
  148. package/js/src/kucoin.js +74 -4
  149. package/js/src/kucoinfutures.js +2 -2
  150. package/js/src/kuna.js +1 -1
  151. package/js/src/latoken.js +1 -1
  152. package/js/src/luno.js +2 -2
  153. package/js/src/lykke.js +1 -1
  154. package/js/src/mexc.js +2 -2
  155. package/js/src/ndax.js +1 -1
  156. package/js/src/novadax.js +2 -2
  157. package/js/src/oceanex.js +1 -1
  158. package/js/src/okcoin.js +1 -1
  159. package/js/src/okx.js +1 -1
  160. package/js/src/poloniexfutures.js +1 -1
  161. package/js/src/pro/alpaca.js +1 -1
  162. package/js/src/pro/ascendex.js +1 -1
  163. package/js/src/pro/binance.js +4 -5
  164. package/js/src/pro/bingx.js +6 -3
  165. package/js/src/pro/bitfinex.js +3 -4
  166. package/js/src/pro/bitfinex2.js +1 -1
  167. package/js/src/pro/bitmex.js +1 -1
  168. package/js/src/pro/bitpanda.js +1 -1
  169. package/js/src/pro/blockchaincom.js +1 -1
  170. package/js/src/pro/bybit.js +2 -2
  171. package/js/src/pro/cex.js +1 -1
  172. package/js/src/pro/coinbase.js +1 -1
  173. package/js/src/pro/coinbasepro.js +1 -1
  174. package/js/src/pro/deribit.js +1 -1
  175. package/js/src/pro/gate.js +3 -3
  176. package/js/src/pro/gemini.js +1 -1
  177. package/js/src/pro/hollaex.js +1 -1
  178. package/js/src/pro/htx.js +1 -1
  179. package/js/src/pro/idex.js +1 -1
  180. package/js/src/pro/kraken.js +3 -4
  181. package/js/src/pro/krakenfutures.js +1 -1
  182. package/js/src/pro/kucoinfutures.js +1 -1
  183. package/js/src/pro/mexc.js +1 -1
  184. package/js/src/pro/okcoin.js +1 -1
  185. package/js/src/pro/okx.js +2 -2
  186. package/js/src/pro/phemex.js +1 -1
  187. package/js/src/pro/poloniexfutures.js +1 -1
  188. package/js/src/pro/woo.js +2 -3
  189. package/js/src/probit.js +1 -1
  190. package/js/src/timex.js +1 -1
  191. package/js/src/tokocrypto.js +1 -1
  192. package/js/src/upbit.js +1 -1
  193. package/js/src/wavesexchange.js +1 -1
  194. package/js/src/whitebit.js +1 -1
  195. package/js/src/woo.js +1 -1
  196. package/js/src/zaif.js +1 -1
  197. package/package.json +2 -2
  198. package/skip-tests.json +1 -0
@@ -1360,22 +1360,6 @@ class Exchange extends _base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchang
1360
1360
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Exchange);
1361
1361
 
1362
1362
 
1363
- /***/ }),
1364
-
1365
- /***/ 5224:
1366
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1367
-
1368
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
1369
- /* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__)
1370
- /* harmony export */ });
1371
- /* harmony import */ var _base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3043);
1372
- // -------------------------------------------------------------------------------
1373
-
1374
- class Exchange extends _base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange */ .e {
1375
- }
1376
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Exchange);
1377
-
1378
-
1379
1363
  /***/ }),
1380
1364
 
1381
1365
  /***/ 3565:
@@ -2101,7 +2085,7 @@ class ace extends _abstract_ace_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
2101
2085
  * @see https://github.com/ace-exchange/ace-official-api-docs/blob/master/api_v2.md#open-api---order-list
2102
2086
  * @param {string} symbol unified market symbol of the market orders were made in
2103
2087
  * @param {int} [since] the earliest time in ms to fetch orders for
2104
- * @param {int} [limit] the maximum number of orde structures to retrieve
2088
+ * @param {int} [limit] the maximum number of order structures to retrieve
2105
2089
  * @param {object} [params] extra parameters specific to the exchange API endpoint
2106
2090
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
2107
2091
  */
@@ -5588,7 +5572,7 @@ class ascendex extends _abstract_ascendex_js__WEBPACK_IMPORTED_MODULE_0__/* ["de
5588
5572
  * @see https://ascendex.github.io/ascendex-futures-pro-api-v2/#list-current-history-orders
5589
5573
  * @param {string} symbol unified market symbol of the market orders were made in
5590
5574
  * @param {int} [since] the earliest time in ms to fetch orders for
5591
- * @param {int} [limit] the maximum number of orde structures to retrieve
5575
+ * @param {int} [limit] the maximum number of order structures to retrieve
5592
5576
  * @param {object} [params] extra parameters specific to the exchange API endpoint
5593
5577
  * @param {int} [params.until] the latest time in ms to fetch orders for
5594
5578
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
@@ -8349,7 +8333,7 @@ class Exchange {
8349
8333
  const length = usedProxies.length;
8350
8334
  if (length > 1) {
8351
8335
  const joinedProxyNames = usedProxies.join(',');
8352
- throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.ExchangeError(this.id + ' you have multiple conflicting proxy_url settings (' + joinedProxyNames + '), please use only one from : proxyUrl, proxy_url, proxyUrlCallback, proxy_url_callback');
8336
+ throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.ProxyError(this.id + ' you have multiple conflicting proxy settings (' + joinedProxyNames + '), please use only one from : proxyUrl, proxy_url, proxyUrlCallback, proxy_url_callback');
8353
8337
  }
8354
8338
  return proxyUrl;
8355
8339
  }
@@ -8413,7 +8397,7 @@ class Exchange {
8413
8397
  const length = usedProxies.length;
8414
8398
  if (length > 1) {
8415
8399
  const joinedProxyNames = usedProxies.join(',');
8416
- throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.ExchangeError(this.id + ' you have multiple conflicting settings (' + joinedProxyNames + '), please use only one from: httpProxy, httpsProxy, httpProxyCallback, httpsProxyCallback, socksProxy, socksProxyCallback');
8400
+ throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.ProxyError(this.id + ' you have multiple conflicting proxy settings (' + joinedProxyNames + '), please use only one from: httpProxy, httpsProxy, httpProxyCallback, httpsProxyCallback, socksProxy, socksProxyCallback');
8417
8401
  }
8418
8402
  return [httpProxy, httpsProxy, socksProxy];
8419
8403
  }
@@ -8453,13 +8437,13 @@ class Exchange {
8453
8437
  const length = usedProxies.length;
8454
8438
  if (length > 1) {
8455
8439
  const joinedProxyNames = usedProxies.join(',');
8456
- throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.ExchangeError(this.id + ' you have multiple conflicting settings (' + joinedProxyNames + '), please use only one from: wsProxy, wssProxy, wsSocksProxy');
8440
+ throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.ProxyError(this.id + ' you have multiple conflicting proxy settings (' + joinedProxyNames + '), please use only one from: wsProxy, wssProxy, wsSocksProxy');
8457
8441
  }
8458
8442
  return [wsProxy, wssProxy, wsSocksProxy];
8459
8443
  }
8460
8444
  checkConflictingProxies(proxyAgentSet, proxyUrlSet) {
8461
8445
  if (proxyAgentSet && proxyUrlSet) {
8462
- throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.ExchangeError(this.id + ' you have multiple conflicting proxy settings, please use only one from : proxyUrl, httpProxy, httpsProxy, socksProxy');
8446
+ throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.ProxyError(this.id + ' you have multiple conflicting proxy settings, please use only one from : proxyUrl, httpProxy, httpsProxy, socksProxy');
8463
8447
  }
8464
8448
  }
8465
8449
  findMessageHashes(client, element) {
@@ -8776,6 +8760,7 @@ class Exchange {
8776
8760
  fee['cost'] = this.safeNumber(fee, 'cost');
8777
8761
  }
8778
8762
  const timestamp = this.safeInteger(entry, 'timestamp');
8763
+ const info = this.safeValue(entry, 'info', {});
8779
8764
  return {
8780
8765
  'id': this.safeString(entry, 'id'),
8781
8766
  'timestamp': timestamp,
@@ -8791,7 +8776,7 @@ class Exchange {
8791
8776
  'after': this.parseNumber(after),
8792
8777
  'status': this.safeString(entry, 'status'),
8793
8778
  'fee': fee,
8794
- 'info': entry,
8779
+ 'info': info,
8795
8780
  };
8796
8781
  }
8797
8782
  safeCurrencyStructure(currency) {
@@ -12214,6 +12199,7 @@ __webpack_require__.r(__webpack_exports__);
12214
12199
  /* harmony export */ OrderNotFillable: () => (/* binding */ OrderNotFillable),
12215
12200
  /* harmony export */ OrderNotFound: () => (/* binding */ OrderNotFound),
12216
12201
  /* harmony export */ PermissionDenied: () => (/* binding */ PermissionDenied),
12202
+ /* harmony export */ ProxyError: () => (/* binding */ ProxyError),
12217
12203
  /* harmony export */ RateLimitExceeded: () => (/* binding */ RateLimitExceeded),
12218
12204
  /* harmony export */ RequestTimeout: () => (/* binding */ RequestTimeout),
12219
12205
  /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
@@ -12412,6 +12398,12 @@ class OperationFailed extends BaseError {
12412
12398
  this.name = 'OperationFailed';
12413
12399
  }
12414
12400
  }
12401
+ class ProxyError extends ExchangeError {
12402
+ constructor(message) {
12403
+ super(message);
12404
+ this.name = 'OperationFailed';
12405
+ }
12406
+ }
12415
12407
  // Network error
12416
12408
  class NetworkError extends OperationFailed {
12417
12409
  constructor(message) {
@@ -12462,7 +12454,7 @@ class RequestTimeout extends NetworkError {
12462
12454
  // // Derived class hierarchy
12463
12455
  // errorHierarchy
12464
12456
  // )
12465
- const errors = { BaseError, ExchangeError, PermissionDenied, AccountNotEnabled, AccountSuspended, ArgumentsRequired, BadRequest, BadSymbol, MarginModeAlreadySet, BadResponse, NullResponse, InsufficientFunds, InvalidAddress, InvalidOrder, OrderNotFound, OrderNotCached, CancelPending, OrderImmediatelyFillable, OrderNotFillable, DuplicateOrderId, NotSupported, NetworkError, DDoSProtection, RateLimitExceeded, ExchangeNotAvailable, OnMaintenance, InvalidNonce, RequestTimeout, AuthenticationError, AddressPending, ContractUnavailable, NoChange, OperationRejected, OperationFailed };
12457
+ const errors = { BaseError, ExchangeError, PermissionDenied, AccountNotEnabled, AccountSuspended, ArgumentsRequired, BadRequest, BadSymbol, MarginModeAlreadySet, BadResponse, NullResponse, InsufficientFunds, InvalidAddress, InvalidOrder, OrderNotFound, OrderNotCached, CancelPending, OrderImmediatelyFillable, OrderNotFillable, DuplicateOrderId, NotSupported, NetworkError, DDoSProtection, RateLimitExceeded, ExchangeNotAvailable, OnMaintenance, InvalidNonce, RequestTimeout, AuthenticationError, AddressPending, ContractUnavailable, NoChange, OperationRejected, OperationFailed, ProxyError };
12466
12458
 
12467
12459
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (errors);
12468
12460
 
@@ -16485,7 +16477,7 @@ class bigone extends _abstract_bigone_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
16485
16477
  * @description fetches information on multiple orders made by the user
16486
16478
  * @param {string} symbol unified market symbol of the market orders were made in
16487
16479
  * @param {int} [since] the earliest time in ms to fetch orders for
16488
- * @param {int} [limit] the maximum number of orde structures to retrieve
16480
+ * @param {int} [limit] the maximum number of order structures to retrieve
16489
16481
  * @param {object} [params] extra parameters specific to the exchange API endpoint
16490
16482
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
16491
16483
  */
@@ -16620,7 +16612,7 @@ class bigone extends _abstract_bigone_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
16620
16612
  * @description fetches information on multiple closed orders made by the user
16621
16613
  * @param {string} symbol unified market symbol of the market orders were made in
16622
16614
  * @param {int} [since] the earliest time in ms to fetch orders for
16623
- * @param {int} [limit] the maximum number of orde structures to retrieve
16615
+ * @param {int} [limit] the maximum number of order structures to retrieve
16624
16616
  * @param {object} [params] extra parameters specific to the exchange API endpoint
16625
16617
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
16626
16618
  */
@@ -19647,24 +19639,23 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
19647
19639
  let type = this.safeString(params, 'type', defaultType);
19648
19640
  let subType = undefined;
19649
19641
  [subType, params] = this.handleSubTypeAndParams('fetchBalance', undefined, params);
19650
- const [marginMode, query] = this.handleMarginModeAndParams('fetchBalance', params);
19651
- let method = 'privateGetAccount';
19642
+ let marginMode = undefined;
19643
+ let query = undefined;
19644
+ [marginMode, query] = this.handleMarginModeAndParams('fetchBalance', params);
19645
+ query = this.omit(query, 'type');
19646
+ let response = undefined;
19652
19647
  const request = {};
19653
19648
  if (this.isLinear(type, subType)) {
19654
- const options = this.safeValue(this.options, type, {});
19655
- const fetchBalanceOptions = this.safeValue(options, 'fetchBalance', {});
19656
- method = this.safeString(fetchBalanceOptions, 'method', 'fapiPrivateV2GetAccount');
19657
19649
  type = 'linear';
19650
+ response = await this.fapiPrivateV2GetAccount(this.extend(request, query));
19658
19651
  }
19659
19652
  else if (this.isInverse(type, subType)) {
19660
- const options = this.safeValue(this.options, type, {});
19661
- const fetchBalanceOptions = this.safeValue(options, 'fetchBalance', {});
19662
- method = this.safeString(fetchBalanceOptions, 'method', 'dapiPrivateGetAccount');
19663
19653
  type = 'inverse';
19654
+ response = await this.dapiPrivateGetAccount(this.extend(request, query));
19664
19655
  }
19665
19656
  else if (marginMode === 'isolated') {
19666
- method = 'sapiGetMarginIsolatedAccount';
19667
19657
  const paramSymbols = this.safeValue(params, 'symbols');
19658
+ query = this.omit(query, 'symbols');
19668
19659
  if (paramSymbols !== undefined) {
19669
19660
  let symbols = '';
19670
19661
  if (Array.isArray(paramSymbols)) {
@@ -19680,18 +19671,20 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
19680
19671
  }
19681
19672
  request['symbols'] = symbols;
19682
19673
  }
19674
+ response = await this.sapiGetMarginIsolatedAccount(this.extend(request, query));
19683
19675
  }
19684
19676
  else if ((type === 'margin') || (marginMode === 'cross')) {
19685
- method = 'sapiGetMarginAccount';
19677
+ response = await this.sapiGetMarginAccount(this.extend(request, query));
19686
19678
  }
19687
19679
  else if (type === 'savings') {
19688
- method = 'sapiGetLendingUnionAccount';
19680
+ response = await this.sapiGetLendingUnionAccount(this.extend(request, query));
19689
19681
  }
19690
19682
  else if (type === 'funding') {
19691
- method = 'sapiPostAssetGetFundingAsset';
19683
+ response = await this.sapiPostAssetGetFundingAsset(this.extend(request, query));
19684
+ }
19685
+ else {
19686
+ response = await this.privateGetAccount(this.extend(request, query));
19692
19687
  }
19693
- const requestParams = this.omit(query, ['type', 'symbols']);
19694
- const response = await this[method](this.extend(request, requestParams));
19695
19688
  //
19696
19689
  // spot
19697
19690
  //
@@ -20383,33 +20376,35 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
20383
20376
  if (until !== undefined) {
20384
20377
  request['endTime'] = until;
20385
20378
  }
20386
- let method = 'publicGetKlines';
20379
+ let response = undefined;
20387
20380
  if (market['option']) {
20388
- method = 'eapiPublicGetKlines';
20381
+ response = await this.eapiPublicGetKlines(this.extend(request, params));
20389
20382
  }
20390
20383
  else if (price === 'mark') {
20391
20384
  if (market['inverse']) {
20392
- method = 'dapiPublicGetMarkPriceKlines';
20385
+ response = await this.dapiPublicGetMarkPriceKlines(this.extend(request, params));
20393
20386
  }
20394
20387
  else {
20395
- method = 'fapiPublicGetMarkPriceKlines';
20388
+ response = await this.fapiPublicGetMarkPriceKlines(this.extend(request, params));
20396
20389
  }
20397
20390
  }
20398
20391
  else if (price === 'index') {
20399
20392
  if (market['inverse']) {
20400
- method = 'dapiPublicGetIndexPriceKlines';
20393
+ response = await this.dapiPublicGetIndexPriceKlines(this.extend(request, params));
20401
20394
  }
20402
20395
  else {
20403
- method = 'fapiPublicGetIndexPriceKlines';
20396
+ response = await this.fapiPublicGetIndexPriceKlines(this.extend(request, params));
20404
20397
  }
20405
20398
  }
20406
20399
  else if (market['linear']) {
20407
- method = 'fapiPublicGetKlines';
20400
+ response = await this.fapiPublicGetKlines(this.extend(request, params));
20408
20401
  }
20409
20402
  else if (market['inverse']) {
20410
- method = 'dapiPublicGetKlines';
20403
+ response = await this.dapiPublicGetKlines(this.extend(request, params));
20404
+ }
20405
+ else {
20406
+ response = await this.publicGetKlines(this.extend(request, params));
20411
20407
  }
20412
- const response = await this[method](this.extend(request, params));
20413
20408
  //
20414
20409
  // [
20415
20410
  // [1591478520000,"0.02501300","0.02501800","0.02500000","0.02500000","22.19000000",1591478579999,"0.55490906",40,"10.92900000","0.27336462","0"],
@@ -21825,22 +21820,6 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
21825
21820
  const request = {
21826
21821
  'symbol': market['id'],
21827
21822
  };
21828
- let method = 'privateGetOrder';
21829
- if (market['option']) {
21830
- method = 'eapiPrivateGetOrder';
21831
- }
21832
- else if (market['linear']) {
21833
- method = 'fapiPrivateGetOrder';
21834
- }
21835
- else if (market['inverse']) {
21836
- method = 'dapiPrivateGetOrder';
21837
- }
21838
- else if (type === 'margin' || marginMode !== undefined) {
21839
- method = 'sapiGetMarginOrder';
21840
- if (marginMode === 'isolated') {
21841
- request['isIsolated'] = true;
21842
- }
21843
- }
21844
21823
  const clientOrderId = this.safeValue2(params, 'origClientOrderId', 'clientOrderId');
21845
21824
  if (clientOrderId !== undefined) {
21846
21825
  if (market['option']) {
@@ -21854,7 +21833,25 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
21854
21833
  request['orderId'] = id;
21855
21834
  }
21856
21835
  const requestParams = this.omit(query, ['type', 'clientOrderId', 'origClientOrderId']);
21857
- const response = await this[method](this.extend(request, requestParams));
21836
+ let response = undefined;
21837
+ if (market['option']) {
21838
+ response = await this.eapiPrivateGetOrder(this.extend(request, requestParams));
21839
+ }
21840
+ else if (market['linear']) {
21841
+ response = await this.fapiPrivateGetOrder(this.extend(request, requestParams));
21842
+ }
21843
+ else if (market['inverse']) {
21844
+ response = await this.dapiPrivateGetOrder(this.extend(request, requestParams));
21845
+ }
21846
+ else if (type === 'margin' || marginMode !== undefined) {
21847
+ if (marginMode === 'isolated') {
21848
+ request['isIsolated'] = true;
21849
+ }
21850
+ response = await this.sapiGetMarginOrder(this.extend(request, requestParams));
21851
+ }
21852
+ else {
21853
+ response = await this.privateGetOrder(this.extend(request, requestParams));
21854
+ }
21858
21855
  return this.parseOrder(response, market);
21859
21856
  }
21860
21857
  async fetchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
@@ -21892,34 +21889,36 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
21892
21889
  const request = {
21893
21890
  'symbol': market['id'],
21894
21891
  };
21895
- let method = 'privateGetAllOrders';
21892
+ const until = this.safeInteger(params, 'until');
21893
+ if (until !== undefined) {
21894
+ params = this.omit(params, 'until');
21895
+ request['endTime'] = until;
21896
+ }
21897
+ if (since !== undefined) {
21898
+ request['startTime'] = since;
21899
+ }
21900
+ if (limit !== undefined) {
21901
+ request['limit'] = limit;
21902
+ }
21903
+ let response = undefined;
21896
21904
  if (market['option']) {
21897
- method = 'eapiPrivateGetHistoryOrders';
21905
+ response = await this.eapiPrivateGetHistoryOrders(this.extend(request, query));
21898
21906
  }
21899
21907
  else if (market['linear']) {
21900
- method = 'fapiPrivateGetAllOrders';
21908
+ response = await this.fapiPrivateGetAllOrders(this.extend(request, query));
21901
21909
  }
21902
21910
  else if (market['inverse']) {
21903
- method = 'dapiPrivateGetAllOrders';
21911
+ response = await this.dapiPrivateGetAllOrders(this.extend(request, query));
21904
21912
  }
21905
21913
  else if (type === 'margin' || marginMode !== undefined) {
21906
- method = 'sapiGetMarginAllOrders';
21907
21914
  if (marginMode === 'isolated') {
21908
21915
  request['isIsolated'] = true;
21909
21916
  }
21917
+ response = await this.sapiGetMarginAllOrders(this.extend(request, query));
21910
21918
  }
21911
- const until = this.safeInteger(params, 'until');
21912
- if (until !== undefined) {
21913
- params = this.omit(params, 'until');
21914
- request['endTime'] = until;
21915
- }
21916
- if (since !== undefined) {
21917
- request['startTime'] = since;
21918
- }
21919
- if (limit !== undefined) {
21920
- request['limit'] = limit;
21919
+ else {
21920
+ response = await this.privateGetAllOrders(this.extend(request, query));
21921
21921
  }
21922
- const response = await this[method](this.extend(request, query));
21923
21922
  //
21924
21923
  // spot
21925
21924
  //
@@ -22044,32 +22043,34 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
22044
22043
  let subType = undefined;
22045
22044
  [subType, query] = this.handleSubTypeAndParams('fetchOpenOrders', market, query);
22046
22045
  const requestParams = this.omit(query, 'type');
22047
- let method = 'privateGetOpenOrders';
22046
+ let response = undefined;
22048
22047
  if (type === 'option') {
22049
- method = 'eapiPrivateGetOpenOrders';
22050
22048
  if (since !== undefined) {
22051
22049
  request['startTime'] = since;
22052
22050
  }
22053
22051
  if (limit !== undefined) {
22054
22052
  request['limit'] = limit;
22055
22053
  }
22054
+ response = await this.eapiPrivateGetOpenOrders(this.extend(request, requestParams));
22056
22055
  }
22057
22056
  else if (this.isLinear(type, subType)) {
22058
- method = 'fapiPrivateGetOpenOrders';
22057
+ response = await this.fapiPrivateGetOpenOrders(this.extend(request, requestParams));
22059
22058
  }
22060
22059
  else if (this.isInverse(type, subType)) {
22061
- method = 'dapiPrivateGetOpenOrders';
22060
+ response = await this.dapiPrivateGetOpenOrders(this.extend(request, requestParams));
22062
22061
  }
22063
22062
  else if (type === 'margin' || marginMode !== undefined) {
22064
- method = 'sapiGetMarginOpenOrders';
22065
22063
  if (marginMode === 'isolated') {
22066
22064
  request['isIsolated'] = true;
22067
22065
  if (symbol === undefined) {
22068
22066
  throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.ArgumentsRequired(this.id + ' fetchOpenOrders() requires a symbol argument for isolated markets');
22069
22067
  }
22070
22068
  }
22069
+ response = await this.sapiGetMarginOpenOrders(this.extend(request, requestParams));
22070
+ }
22071
+ else {
22072
+ response = await this.privateGetOpenOrders(this.extend(request, requestParams));
22071
22073
  }
22072
- const response = await this[method](this.extend(request, requestParams));
22073
22074
  return this.parseOrders(response, market, since, limit);
22074
22075
  }
22075
22076
  async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
@@ -22160,24 +22161,26 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
22160
22161
  else {
22161
22162
  request['orderId'] = id;
22162
22163
  }
22163
- let method = 'privateDeleteOrder';
22164
+ const requestParams = this.omit(query, ['type', 'origClientOrderId', 'clientOrderId']);
22165
+ let response = undefined;
22164
22166
  if (market['option']) {
22165
- method = 'eapiPrivateDeleteOrder';
22167
+ response = await this.eapiPrivateDeleteOrder(this.extend(request, requestParams));
22166
22168
  }
22167
22169
  else if (market['linear']) {
22168
- method = 'fapiPrivateDeleteOrder';
22170
+ response = await this.fapiPrivateDeleteOrder(this.extend(request, requestParams));
22169
22171
  }
22170
22172
  else if (market['inverse']) {
22171
- method = 'dapiPrivateDeleteOrder';
22173
+ response = await this.dapiPrivateDeleteOrder(this.extend(request, requestParams));
22172
22174
  }
22173
22175
  else if (type === 'margin' || marginMode !== undefined) {
22174
- method = 'sapiDeleteMarginOrder';
22175
22176
  if (marginMode === 'isolated') {
22176
22177
  request['isIsolated'] = true;
22177
22178
  }
22179
+ response = await this.sapiDeleteMarginOrder(this.extend(request, requestParams));
22180
+ }
22181
+ else {
22182
+ response = await this.privateDeleteOrder(this.extend(request, requestParams));
22178
22183
  }
22179
- const requestParams = this.omit(query, ['type', 'origClientOrderId', 'clientOrderId']);
22180
- const response = await this[method](this.extend(request, requestParams));
22181
22184
  return this.parseOrder(response, market);
22182
22185
  }
22183
22186
  async cancelAllOrders(symbol = undefined, params = {}) {
@@ -22206,23 +22209,25 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
22206
22209
  const type = this.safeString(params, 'type', market['type']);
22207
22210
  params = this.omit(params, ['type']);
22208
22211
  const [marginMode, query] = this.handleMarginModeAndParams('cancelAllOrders', params);
22209
- let method = 'privateDeleteOpenOrders';
22212
+ let response = undefined;
22210
22213
  if (market['option']) {
22211
- method = 'eapiPrivateDeleteAllOpenOrders';
22214
+ response = await this.eapiPrivateDeleteAllOpenOrders(this.extend(request, query));
22212
22215
  }
22213
22216
  else if (market['linear']) {
22214
- method = 'fapiPrivateDeleteAllOpenOrders';
22217
+ response = await this.fapiPrivateDeleteAllOpenOrders(this.extend(request, query));
22215
22218
  }
22216
22219
  else if (market['inverse']) {
22217
- method = 'dapiPrivateDeleteAllOpenOrders';
22220
+ response = await this.dapiPrivateDeleteAllOpenOrders(this.extend(request, query));
22218
22221
  }
22219
22222
  else if ((type === 'margin') || (marginMode !== undefined)) {
22220
- method = 'sapiDeleteMarginOpenOrders';
22221
22223
  if (marginMode === 'isolated') {
22222
22224
  request['isIsolated'] = true;
22223
22225
  }
22226
+ response = await this.sapiDeleteMarginOpenOrders(this.extend(request, query));
22227
+ }
22228
+ else {
22229
+ response = await this.privateDeleteOpenOrders(this.extend(request, query));
22224
22230
  }
22225
- const response = await this[method](this.extend(request, query));
22226
22231
  if (Array.isArray(response)) {
22227
22232
  return this.parseOrders(response, market);
22228
22233
  }
@@ -22359,37 +22364,12 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
22359
22364
  const request = {};
22360
22365
  let market = undefined;
22361
22366
  let type = undefined;
22362
- let method = undefined;
22363
22367
  let marginMode = undefined;
22364
22368
  if (symbol !== undefined) {
22365
22369
  market = this.market(symbol);
22366
22370
  request['symbol'] = market['id'];
22367
22371
  }
22368
22372
  [type, params] = this.handleMarketTypeAndParams('fetchMyTrades', market, params);
22369
- if (type === 'option') {
22370
- method = 'eapiPrivateGetUserTrades';
22371
- }
22372
- else {
22373
- if (symbol === undefined) {
22374
- throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.ArgumentsRequired(this.id + ' fetchMyTrades() requires a symbol argument');
22375
- }
22376
- [marginMode, params] = this.handleMarginModeAndParams('fetchMyTrades', params);
22377
- if (type === 'spot' || type === 'margin') {
22378
- method = 'privateGetMyTrades';
22379
- if ((type === 'margin') || (marginMode !== undefined)) {
22380
- method = 'sapiGetMarginMyTrades';
22381
- if (marginMode === 'isolated') {
22382
- request['isIsolated'] = true;
22383
- }
22384
- }
22385
- }
22386
- else if (market['linear']) {
22387
- method = 'fapiPrivateGetUserTrades';
22388
- }
22389
- else if (market['inverse']) {
22390
- method = 'dapiPrivateGetUserTrades';
22391
- }
22392
- }
22393
22373
  let endTime = this.safeInteger2(params, 'until', 'endTime');
22394
22374
  if (since !== undefined) {
22395
22375
  const startTime = since;
@@ -22417,7 +22397,33 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
22417
22397
  }
22418
22398
  request['limit'] = limit;
22419
22399
  }
22420
- const response = await this[method](this.extend(request, params));
22400
+ let response = undefined;
22401
+ if (type === 'option') {
22402
+ response = await this.eapiPrivateGetUserTrades(this.extend(request, params));
22403
+ }
22404
+ else {
22405
+ if (symbol === undefined) {
22406
+ throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.ArgumentsRequired(this.id + ' fetchMyTrades() requires a symbol argument');
22407
+ }
22408
+ [marginMode, params] = this.handleMarginModeAndParams('fetchMyTrades', params);
22409
+ if (type === 'spot' || type === 'margin') {
22410
+ if ((type === 'margin') || (marginMode !== undefined)) {
22411
+ if (marginMode === 'isolated') {
22412
+ request['isIsolated'] = true;
22413
+ }
22414
+ response = await this.sapiGetMarginMyTrades(this.extend(request, params));
22415
+ }
22416
+ else {
22417
+ response = await this.privateGetMyTrades(this.extend(request, params));
22418
+ }
22419
+ }
22420
+ else if (market['linear']) {
22421
+ response = await this.fapiPrivateGetUserTrades(this.extend(request, params));
22422
+ }
22423
+ else if (market['inverse']) {
22424
+ response = await this.dapiPrivateGetUserTrades(this.extend(request, params));
22425
+ }
22426
+ }
22421
22427
  //
22422
22428
  // spot trade
22423
22429
  //
@@ -23747,7 +23753,6 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
23747
23753
  * @returns {object} a dictionary of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure} indexed by market symbols
23748
23754
  */
23749
23755
  await this.loadMarkets();
23750
- let method = undefined;
23751
23756
  let type = undefined;
23752
23757
  [type, params] = this.handleMarketTypeAndParams('fetchTradingFees', undefined, params);
23753
23758
  let subType = undefined;
@@ -23755,16 +23760,16 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
23755
23760
  const isSpotOrMargin = (type === 'spot') || (type === 'margin');
23756
23761
  const isLinear = this.isLinear(type, subType);
23757
23762
  const isInverse = this.isInverse(type, subType);
23763
+ let response = undefined;
23758
23764
  if (isSpotOrMargin) {
23759
- method = 'sapiGetAssetTradeFee';
23765
+ response = await this.sapiGetAssetTradeFee(params);
23760
23766
  }
23761
23767
  else if (isLinear) {
23762
- method = 'fapiPrivateV2GetAccount';
23768
+ response = await this.fapiPrivateV2GetAccount(params);
23763
23769
  }
23764
23770
  else if (isInverse) {
23765
- method = 'dapiPrivateGetAccount';
23771
+ response = await this.dapiPrivateGetAccount(params);
23766
23772
  }
23767
- const response = await this[method](params);
23768
23773
  //
23769
23774
  // sapi / spot
23770
23775
  //
@@ -23962,17 +23967,16 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
23962
23967
  const request = {
23963
23968
  'symbol': market['id'],
23964
23969
  };
23965
- let method = undefined;
23970
+ let response = undefined;
23966
23971
  if (market['linear']) {
23967
- method = 'fapiPublicGetPremiumIndex';
23972
+ response = await this.fapiPublicGetPremiumIndex(this.extend(request, params));
23968
23973
  }
23969
23974
  else if (market['inverse']) {
23970
- method = 'dapiPublicGetPremiumIndex';
23975
+ response = await this.dapiPublicGetPremiumIndex(this.extend(request, params));
23971
23976
  }
23972
23977
  else {
23973
23978
  throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.NotSupported(this.id + ' fetchFundingRate() supports linear and inverse contracts only');
23974
23979
  }
23975
- let response = await this[method](this.extend(request, params));
23976
23980
  if (market['inverse']) {
23977
23981
  response = response[0];
23978
23982
  }
@@ -24610,20 +24614,20 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
24610
24614
  * @returns {object} a dictionary of [leverage tiers structures]{@link https://docs.ccxt.com/#/?id=leverage-tiers-structure}, indexed by market symbols
24611
24615
  */
24612
24616
  await this.loadMarkets();
24613
- const [type, query] = this.handleMarketTypeAndParams('fetchLeverageTiers', undefined, params);
24617
+ let type = undefined;
24618
+ [type, params] = this.handleMarketTypeAndParams('fetchLeverageTiers', undefined, params);
24614
24619
  let subType = undefined;
24615
- [subType, params] = this.handleSubTypeAndParams('fetchLeverageTiers', undefined, query, 'linear');
24616
- let method = undefined;
24620
+ [subType, params] = this.handleSubTypeAndParams('fetchLeverageTiers', undefined, params, 'linear');
24621
+ let response = undefined;
24617
24622
  if (this.isLinear(type, subType)) {
24618
- method = 'fapiPrivateGetLeverageBracket';
24623
+ response = await this.fapiPrivateGetLeverageBracket(params);
24619
24624
  }
24620
24625
  else if (this.isInverse(type, subType)) {
24621
- method = 'dapiPrivateV2GetLeverageBracket';
24626
+ response = await this.dapiPrivateV2GetLeverageBracket(params);
24622
24627
  }
24623
24628
  else {
24624
24629
  throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.NotSupported(this.id + ' fetchLeverageTiers() supports linear and inverse contracts only');
24625
24630
  }
24626
- const response = await this[method](query);
24627
24631
  //
24628
24632
  // usdm
24629
24633
  //
@@ -25097,21 +25101,21 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
25097
25101
  }
25098
25102
  await this.loadMarkets();
25099
25103
  const market = this.market(symbol);
25100
- let method;
25104
+ const request = {
25105
+ 'symbol': market['id'],
25106
+ 'leverage': leverage,
25107
+ };
25108
+ let response = undefined;
25101
25109
  if (market['linear']) {
25102
- method = 'fapiPrivatePostLeverage';
25110
+ response = await this.fapiPrivatePostLeverage(this.extend(request, params));
25103
25111
  }
25104
25112
  else if (market['inverse']) {
25105
- method = 'dapiPrivatePostLeverage';
25113
+ response = await this.dapiPrivatePostLeverage(this.extend(request, params));
25106
25114
  }
25107
25115
  else {
25108
25116
  throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.NotSupported(this.id + ' setLeverage() supports linear and inverse contracts only');
25109
25117
  }
25110
- const request = {
25111
- 'symbol': market['id'],
25112
- 'leverage': leverage,
25113
- };
25114
- return await this[method](this.extend(request, params));
25118
+ return response;
25115
25119
  }
25116
25120
  async setMarginMode(marginMode, symbol = undefined, params = {}) {
25117
25121
  /**
@@ -25144,23 +25148,21 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
25144
25148
  }
25145
25149
  await this.loadMarkets();
25146
25150
  const market = this.market(symbol);
25147
- let method = undefined;
25148
- if (market['linear']) {
25149
- method = 'fapiPrivatePostMarginType';
25150
- }
25151
- else if (market['inverse']) {
25152
- method = 'dapiPrivatePostMarginType';
25153
- }
25154
- else {
25155
- throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.NotSupported(this.id + ' setMarginMode() supports linear and inverse contracts only');
25156
- }
25157
25151
  const request = {
25158
25152
  'symbol': market['id'],
25159
25153
  'marginType': marginMode,
25160
25154
  };
25161
25155
  let response = undefined;
25162
25156
  try {
25163
- response = await this[method](this.extend(request, params));
25157
+ if (market['linear']) {
25158
+ response = await this.fapiPrivatePostMarginType(this.extend(request, params));
25159
+ }
25160
+ else if (market['inverse']) {
25161
+ response = await this.dapiPrivatePostMarginType(this.extend(request, params));
25162
+ }
25163
+ else {
25164
+ throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.NotSupported(this.id + ' setMarginMode() supports linear and inverse contracts only');
25165
+ }
25164
25166
  }
25165
25167
  catch (e) {
25166
25168
  // not an error
@@ -27111,6 +27113,16 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
27111
27113
  },
27112
27114
  },
27113
27115
  'swap': {
27116
+ 'v1': {
27117
+ 'private': {
27118
+ 'get': {
27119
+ 'positionSide/dual': 1,
27120
+ },
27121
+ 'post': {
27122
+ 'positionSide/dual': 1,
27123
+ },
27124
+ },
27125
+ },
27114
27126
  'v2': {
27115
27127
  'public': {
27116
27128
  'get': {
@@ -27297,6 +27309,7 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
27297
27309
  '100202': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InsufficientFunds,
27298
27310
  '100204': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest,
27299
27311
  '100400': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest,
27312
+ '100421': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadSymbol,
27300
27313
  '100440': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.ExchangeError,
27301
27314
  '100500': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.ExchangeError,
27302
27315
  '100503': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.ExchangeError,
@@ -28272,7 +28285,7 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
28272
28285
  // }
28273
28286
  //
28274
28287
  const marketId = this.safeString(ticker, 'symbol');
28275
- const change = this.safeString(ticker, 'priceChange');
28288
+ // const change = this.safeString (ticker, 'priceChange'); // this is not ccxt's change because it does high-low instead of last-open
28276
28289
  const lastQty = this.safeString(ticker, 'lastQty');
28277
28290
  // in spot markets, lastQty is not present
28278
28291
  // it's (bad, but) the only way we can check the tickers origin
@@ -28284,10 +28297,10 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
28284
28297
  const close = this.safeString(ticker, 'lastPrice');
28285
28298
  const quoteVolume = this.safeString(ticker, 'quoteVolume');
28286
28299
  const baseVolume = this.safeString(ticker, 'volume');
28287
- let percentage = this.safeString(ticker, 'priceChangePercent');
28288
- if (percentage !== undefined) {
28289
- percentage = percentage.replace('%', '');
28290
- }
28300
+ // let percentage = this.safeString (ticker, 'priceChangePercent');
28301
+ // if (percentage !== undefined) {
28302
+ // percentage = percentage.replace ('%', '');
28303
+ // } similarly to change, it's not ccxt's percentage because it does priceChange/open, and priceChange is high-low
28291
28304
  const ts = this.safeInteger(ticker, 'closeTime');
28292
28305
  const datetime = this.iso8601(ts);
28293
28306
  const bid = this.safeString(ticker, 'bidPrice');
@@ -28309,8 +28322,8 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
28309
28322
  'close': close,
28310
28323
  'last': undefined,
28311
28324
  'previousClose': undefined,
28312
- 'change': change,
28313
- 'percentage': percentage,
28325
+ 'change': undefined,
28326
+ 'percentage': undefined,
28314
28327
  'average': undefined,
28315
28328
  'baseVolume': baseVolume,
28316
28329
  'quoteVolume': quoteVolume,
@@ -29438,7 +29451,7 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
29438
29451
  * @see https://bingx-api.github.io/docs/#/standard/contract-interface.html#Historical%20order
29439
29452
  * @param {string} [symbol] unified market symbol of the market orders were made in
29440
29453
  * @param {int} [since] the earliest time in ms to fetch orders for
29441
- * @param {int} [limit] the maximum number of orde structures to retrieve
29454
+ * @param {int} [limit] the maximum number of order structures to retrieve
29442
29455
  * @param {object} [params] extra parameters specific to the exchange API endpoint
29443
29456
  * @param {int} [params.until] the latest time in ms to fetch orders for
29444
29457
  * @param {boolean} [params.standard] whether to fetch standard contract orders
@@ -30381,6 +30394,37 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
30381
30394
  }
30382
30395
  return positions;
30383
30396
  }
30397
+ async setPositionMode(hedged, symbol = undefined, params = {}) {
30398
+ /**
30399
+ * @method
30400
+ * @name bingx#setPositionMode
30401
+ * @description set hedged to true or false for a market
30402
+ * @see https://bingx-api.github.io/docs/#/en-us/swapV2/trade-api.html#Set%20Position%20Mode
30403
+ * @param {bool} hedged set to true to use dualSidePosition
30404
+ * @param {string} symbol not used by bingx setPositionMode ()
30405
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
30406
+ * @returns {object} response from the exchange
30407
+ */
30408
+ let dualSidePosition = undefined;
30409
+ if (hedged) {
30410
+ dualSidePosition = 'true';
30411
+ }
30412
+ else {
30413
+ dualSidePosition = 'false';
30414
+ }
30415
+ const request = {
30416
+ 'dualSidePosition': dualSidePosition,
30417
+ };
30418
+ //
30419
+ // {
30420
+ // code: '0',
30421
+ // msg: '',
30422
+ // timeStamp: '1703327432734',
30423
+ // data: { dualSidePosition: 'false' }
30424
+ // }
30425
+ //
30426
+ return await this.swapV1PrivatePostPositionSideDual(this.extend(request, params));
30427
+ }
30384
30428
  sign(path, section = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
30385
30429
  const type = section[0];
30386
30430
  const version = section[1];
@@ -30741,14 +30785,13 @@ class bit2c extends _abstract_bit2c_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
30741
30785
  }
30742
30786
  parseTicker(ticker, market = undefined) {
30743
30787
  const symbol = this.safeSymbol(undefined, market);
30744
- const timestamp = this.milliseconds();
30745
30788
  const averagePrice = this.safeString(ticker, 'av');
30746
30789
  const baseVolume = this.safeString(ticker, 'a');
30747
30790
  const last = this.safeString(ticker, 'll');
30748
30791
  return this.safeTicker({
30749
30792
  'symbol': symbol,
30750
- 'timestamp': timestamp,
30751
- 'datetime': this.iso8601(timestamp),
30793
+ 'timestamp': undefined,
30794
+ 'datetime': undefined,
30752
30795
  'high': undefined,
30753
30796
  'low': undefined,
30754
30797
  'bid': this.safeString(ticker, 'h'),
@@ -34915,7 +34958,7 @@ class bitfinex extends _abstract_bitfinex_js__WEBPACK_IMPORTED_MODULE_0__/* ["de
34915
34958
  * @description fetches information on multiple closed orders made by the user
34916
34959
  * @param {string} symbol unified market symbol of the market orders were made in
34917
34960
  * @param {int} [since] the earliest time in ms to fetch orders for
34918
- * @param {int} [limit] the maximum number of orde structures to retrieve
34961
+ * @param {int} [limit] the maximum number of order structures to retrieve
34919
34962
  * @param {object} [params] extra parameters specific to the exchange API endpoint
34920
34963
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
34921
34964
  */
@@ -36421,15 +36464,14 @@ class bitfinex2 extends _abstract_bitfinex2_js__WEBPACK_IMPORTED_MODULE_0__/* ["
36421
36464
  // FRR_AMOUNT_AVAILABLE
36422
36465
  // ]
36423
36466
  //
36424
- const timestamp = this.milliseconds();
36425
36467
  const symbol = this.safeSymbol(undefined, market);
36426
36468
  const length = ticker.length;
36427
36469
  const last = this.safeString(ticker, length - 4);
36428
36470
  const percentage = this.safeString(ticker, length - 5);
36429
36471
  return this.safeTicker({
36430
36472
  'symbol': symbol,
36431
- 'timestamp': timestamp,
36432
- 'datetime': this.iso8601(timestamp),
36473
+ 'timestamp': undefined,
36474
+ 'datetime': undefined,
36433
36475
  'high': this.safeString(ticker, length - 2),
36434
36476
  'low': this.safeString(ticker, length - 1),
36435
36477
  'bid': this.safeString(ticker, length - 10),
@@ -37172,7 +37214,7 @@ class bitfinex2 extends _abstract_bitfinex2_js__WEBPACK_IMPORTED_MODULE_0__/* ["
37172
37214
  * @see https://docs.bitfinex.com/reference/rest-auth-retrieve-orders-by-symbol
37173
37215
  * @param {string} symbol unified market symbol of the market orders were made in
37174
37216
  * @param {int} [since] the earliest time in ms to fetch orders for
37175
- * @param {int} [limit] the maximum number of orde structures to retrieve
37217
+ * @param {int} [limit] the maximum number of order structures to retrieve
37176
37218
  * @param {object} [params] extra parameters specific to the exchange API endpoint
37177
37219
  * @param {int} [params.until] the latest time in ms to fetch entries for
37178
37220
  * @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)
@@ -39010,7 +39052,7 @@ class bitflyer extends _abstract_bitflyer_js__WEBPACK_IMPORTED_MODULE_0__/* ["de
39010
39052
  * @see https://lightning.bitflyer.com/docs?lang=en#list-orders
39011
39053
  * @param {string} symbol unified market symbol of the market orders were made in
39012
39054
  * @param {int} [since] the earliest time in ms to fetch orders for
39013
- * @param {int} [limit] the maximum number of orde structures to retrieve
39055
+ * @param {int} [limit] the maximum number of order structures to retrieve
39014
39056
  * @param {object} [params] extra parameters specific to the exchange API endpoint
39015
39057
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
39016
39058
  */
@@ -39055,7 +39097,7 @@ class bitflyer extends _abstract_bitflyer_js__WEBPACK_IMPORTED_MODULE_0__/* ["de
39055
39097
  * @see https://lightning.bitflyer.com/docs?lang=en#list-orders
39056
39098
  * @param {string} symbol unified market symbol of the market orders were made in
39057
39099
  * @param {int} [since] the earliest time in ms to fetch orders for
39058
- * @param {int} [limit] the maximum number of orde structures to retrieve
39100
+ * @param {int} [limit] the maximum number of order structures to retrieve
39059
39101
  * @param {object} [params] extra parameters specific to the exchange API endpoint
39060
39102
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
39061
39103
  */
@@ -50659,7 +50701,7 @@ class bitmart extends _abstract_bitmart_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
50659
50701
  // "legal_coin_price":"0.1302699"
50660
50702
  // }
50661
50703
  //
50662
- const timestamp = this.safeInteger(ticker, 'timestamp', this.milliseconds());
50704
+ const timestamp = this.safeInteger(ticker, 'timestamp');
50663
50705
  const marketId = this.safeString2(ticker, 'symbol', 'contract_symbol');
50664
50706
  market = this.safeMarket(marketId, market);
50665
50707
  const symbol = market['symbol'];
@@ -52334,7 +52376,7 @@ class bitmart extends _abstract_bitmart_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
52334
52376
  * @description fetches information on multiple closed orders made by the user
52335
52377
  * @param {string} symbol unified market symbol of the market orders were made in
52336
52378
  * @param {int} [since] the earliest time in ms to fetch orders for
52337
- * @param {int} [limit] the maximum number of orde structures to retrieve
52379
+ * @param {int} [limit] the maximum number of order structures to retrieve
52338
52380
  * @param {object} [params] extra parameters specific to the exchange API endpoint
52339
52381
  * @param {int} [params.until] timestamp in ms of the latest entry
52340
52382
  * @param {string} [params.marginMode] *spot only* 'cross' or 'isolated', for margin trading
@@ -54775,7 +54817,7 @@ class bitmex extends _abstract_bitmex_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
54775
54817
  * @description fetches information on multiple orders made by the user
54776
54818
  * @param {string} symbol unified market symbol of the market orders were made in
54777
54819
  * @param {int} [since] the earliest time in ms to fetch orders for
54778
- * @param {int} [limit] the maximum number of orde structures to retrieve
54820
+ * @param {int} [limit] the maximum number of order structures to retrieve
54779
54821
  * @param {object} [params] extra parameters specific to the exchange API endpoint
54780
54822
  * @param {int} [params.until] the earliest time in ms to fetch orders for
54781
54823
  * @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)
@@ -54839,7 +54881,7 @@ class bitmex extends _abstract_bitmex_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
54839
54881
  * @description fetches information on multiple closed orders made by the user
54840
54882
  * @param {string} symbol unified market symbol of the market orders were made in
54841
54883
  * @param {int} [since] the earliest time in ms to fetch orders for
54842
- * @param {int} [limit] the maximum number of orde structures to retrieve
54884
+ * @param {int} [limit] the maximum number of order structures to retrieve
54843
54885
  * @param {object} [params] extra parameters specific to the exchange API endpoint
54844
54886
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
54845
54887
  */
@@ -58001,7 +58043,7 @@ class bitopro extends _abstract_bitopro_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
58001
58043
  * @see https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/private/get_orders_data.md
58002
58044
  * @param {string} symbol unified market symbol of the market orders were made in
58003
58045
  * @param {int} [since] the earliest time in ms to fetch orders for
58004
- * @param {int} [limit] the maximum number of orde structures to retrieve
58046
+ * @param {int} [limit] the maximum number of order structures to retrieve
58005
58047
  * @param {object} [params] extra parameters specific to the exchange API endpoint
58006
58048
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
58007
58049
  */
@@ -60284,7 +60326,7 @@ class bitpanda extends _abstract_bitpanda_js__WEBPACK_IMPORTED_MODULE_0__/* ["de
60284
60326
  * @description fetches information on multiple closed orders made by the user
60285
60327
  * @param {string} symbol unified market symbol of the market orders were made in
60286
60328
  * @param {int} [since] the earliest time in ms to fetch orders for
60287
- * @param {int} [limit] the maximum number of orde structures to retrieve
60329
+ * @param {int} [limit] the maximum number of order structures to retrieve
60288
60330
  * @param {object} [params] extra parameters specific to the exchange API endpoint
60289
60331
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
60290
60332
  */
@@ -68937,7 +68979,7 @@ class bitvavo extends _abstract_bitvavo_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
68937
68979
  * @description fetches information on multiple orders made by the user
68938
68980
  * @param {string} symbol unified market symbol of the market orders were made in
68939
68981
  * @param {int} [since] the earliest time in ms to fetch orders for
68940
- * @param {int} [limit] the maximum number of orde structures to retrieve
68982
+ * @param {int} [limit] the maximum number of order structures to retrieve
68941
68983
  * @param {object} [params] extra parameters specific to the exchange API endpoint
68942
68984
  * @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)
68943
68985
  * @param {int} [params.until] the latest time in ms to fetch entries for
@@ -70762,7 +70804,7 @@ class blockchaincom extends _abstract_blockchaincom_js__WEBPACK_IMPORTED_MODULE_
70762
70804
  * @description fetches information on multiple closed orders made by the user
70763
70805
  * @param {string} symbol unified market symbol of the market orders were made in
70764
70806
  * @param {int} [since] the earliest time in ms to fetch orders for
70765
- * @param {int} [limit] the maximum number of orde structures to retrieve
70807
+ * @param {int} [limit] the maximum number of order structures to retrieve
70766
70808
  * @param {object} [params] extra parameters specific to the exchange API endpoint
70767
70809
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
70768
70810
  */
@@ -72039,7 +72081,7 @@ class btcalpha extends _abstract_btcalpha_js__WEBPACK_IMPORTED_MODULE_0__/* ["de
72039
72081
  * @description fetches information on multiple orders made by the user
72040
72082
  * @param {string} symbol unified market symbol of the market orders were made in
72041
72083
  * @param {int} [since] the earliest time in ms to fetch orders for
72042
- * @param {int} [limit] the maximum number of orde structures to retrieve
72084
+ * @param {int} [limit] the maximum number of order structures to retrieve
72043
72085
  * @param {object} [params] extra parameters specific to the exchange API endpoint
72044
72086
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
72045
72087
  */
@@ -72079,7 +72121,7 @@ class btcalpha extends _abstract_btcalpha_js__WEBPACK_IMPORTED_MODULE_0__/* ["de
72079
72121
  * @description fetches information on multiple closed orders made by the user
72080
72122
  * @param {string} symbol unified market symbol of the market orders were made in
72081
72123
  * @param {int} [since] the earliest time in ms to fetch orders for
72082
- * @param {int} [limit] the maximum number of orde structures to retrieve
72124
+ * @param {int} [limit] the maximum number of order structures to retrieve
72083
72125
  * @param {object} [params] extra parameters specific to the exchange API endpoint
72084
72126
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
72085
72127
  */
@@ -72357,13 +72399,12 @@ class btcbox extends _abstract_btcbox_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
72357
72399
  return this.parseOrderBook(response, market['symbol']);
72358
72400
  }
72359
72401
  parseTicker(ticker, market = undefined) {
72360
- const timestamp = this.milliseconds();
72361
72402
  const symbol = this.safeSymbol(undefined, market);
72362
72403
  const last = this.safeString(ticker, 'last');
72363
72404
  return this.safeTicker({
72364
72405
  'symbol': symbol,
72365
- 'timestamp': timestamp,
72366
- 'datetime': this.iso8601(timestamp),
72406
+ 'timestamp': undefined,
72407
+ 'datetime': undefined,
72367
72408
  'high': this.safeString(ticker, 'high'),
72368
72409
  'low': this.safeString(ticker, 'low'),
72369
72410
  'bid': this.safeString(ticker, 'buy'),
@@ -72669,7 +72710,7 @@ class btcbox extends _abstract_btcbox_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
72669
72710
  * @description fetches information on multiple orders made by the user
72670
72711
  * @param {string} symbol unified market symbol of the market orders were made in
72671
72712
  * @param {int} [since] the earliest time in ms to fetch orders for
72672
- * @param {int} [limit] the maximum number of orde structures to retrieve
72713
+ * @param {int} [limit] the maximum number of order structures to retrieve
72673
72714
  * @param {object} [params] extra parameters specific to the exchange API endpoint
72674
72715
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
72675
72716
  */
@@ -73781,7 +73822,7 @@ class btcmarkets extends _abstract_btcmarkets_js__WEBPACK_IMPORTED_MODULE_0__/*
73781
73822
  * @description fetches information on multiple orders made by the user
73782
73823
  * @param {string} symbol unified market symbol of the market orders were made in
73783
73824
  * @param {int} [since] the earliest time in ms to fetch orders for
73784
- * @param {int} [limit] the maximum number of orde structures to retrieve
73825
+ * @param {int} [limit] the maximum number of order structures to retrieve
73785
73826
  * @param {object} [params] extra parameters specific to the exchange API endpoint
73786
73827
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
73787
73828
  */
@@ -73824,7 +73865,7 @@ class btcmarkets extends _abstract_btcmarkets_js__WEBPACK_IMPORTED_MODULE_0__/*
73824
73865
  * @description fetches information on multiple closed orders made by the user
73825
73866
  * @param {string} symbol unified market symbol of the market orders were made in
73826
73867
  * @param {int} [since] the earliest time in ms to fetch orders for
73827
- * @param {int} [limit] the maximum number of orde structures to retrieve
73868
+ * @param {int} [limit] the maximum number of order structures to retrieve
73828
73869
  * @param {object} [params] extra parameters specific to the exchange API endpoint
73829
73870
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
73830
73871
  */
@@ -74734,7 +74775,7 @@ class btcturk extends _abstract_btcturk_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
74734
74775
  * @description fetches information on multiple orders made by the user
74735
74776
  * @param {string} symbol unified market symbol of the market orders were made in
74736
74777
  * @param {int} [since] the earliest time in ms to fetch orders for
74737
- * @param {int} [limit] the maximum number of orde structures to retrieve
74778
+ * @param {int} [limit] the maximum number of order structures to retrieve
74738
74779
  * @param {object} [params] extra parameters specific to the exchange API endpoint
74739
74780
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
74740
74781
  */
@@ -79379,7 +79420,7 @@ class bybit extends _abstract_bybit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
79379
79420
  * @see https://bybit-exchange.github.io/docs/v5/order/order-list
79380
79421
  * @param {string} symbol unified market symbol of the market orders were made in
79381
79422
  * @param {int} [since] the earliest time in ms to fetch orders for
79382
- * @param {int} [limit] the maximum number of orde structures to retrieve
79423
+ * @param {int} [limit] the maximum number of order structures to retrieve
79383
79424
  * @param {object} [params] extra parameters specific to the exchange API endpoint
79384
79425
  * @param {boolean} [params.stop] true if stop order
79385
79426
  * @param {string} [params.type] market type, ['swap', 'option', 'spot']
@@ -79495,7 +79536,7 @@ class bybit extends _abstract_bybit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
79495
79536
  * @see https://bybit-exchange.github.io/docs/v5/order/order-list
79496
79537
  * @param {string} symbol unified market symbol of the market orders were made in
79497
79538
  * @param {int} [since] the earliest time in ms to fetch orders for
79498
- * @param {int} [limit] the maximum number of orde structures to retrieve
79539
+ * @param {int} [limit] the maximum number of order structures to retrieve
79499
79540
  * @param {object} [params] extra parameters specific to the exchange API endpoint
79500
79541
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
79501
79542
  */
@@ -83909,7 +83950,7 @@ class cex extends _abstract_cex_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
83909
83950
  * @description fetches information on multiple orders made by the user
83910
83951
  * @param {string} symbol unified market symbol of the market orders were made in
83911
83952
  * @param {int} [since] the earliest time in ms to fetch orders for
83912
- * @param {int} [limit] the maximum number of orde structures to retrieve
83953
+ * @param {int} [limit] the maximum number of order structures to retrieve
83913
83954
  * @param {object} [params] extra parameters specific to the exchange API endpoint
83914
83955
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
83915
83956
  */
@@ -86645,6 +86686,12 @@ class coinbase extends _abstract_coinbase_js__WEBPACK_IMPORTED_MODULE_0__/* ["de
86645
86686
  // "base_size": "0.2",
86646
86687
  // "limit_price": "0.006",
86647
86688
  // "post_only": false
86689
+ // },
86690
+ // "stop_limit_stop_limit_gtc": {
86691
+ // "base_size": "48.54",
86692
+ // "limit_price": "6.998",
86693
+ // "stop_price": "7.0687",
86694
+ // "stop_direction": "STOP_DIRECTION_STOP_DOWN"
86648
86695
  // }
86649
86696
  // },
86650
86697
  // "side": "SELL",
@@ -86678,11 +86725,11 @@ class coinbase extends _abstract_coinbase_js__WEBPACK_IMPORTED_MODULE_0__/* ["de
86678
86725
  market = this.market(symbol);
86679
86726
  }
86680
86727
  const orderConfiguration = this.safeValue(order, 'order_configuration', {});
86681
- const limitGTC = this.safeValue(orderConfiguration, 'limit_limit_gtc', {});
86682
- const limitGTD = this.safeValue(orderConfiguration, 'limit_limit_gtd', {});
86683
- const stopLimitGTC = this.safeValue(orderConfiguration, 'stop_limit_stop_limit_gtc', {});
86684
- const stopLimitGTD = this.safeValue(orderConfiguration, 'stop_limit_stop_limit_gtd', {});
86685
- const marketIOC = this.safeValue(orderConfiguration, 'market_market_ioc', {});
86728
+ const limitGTC = this.safeValue(orderConfiguration, 'limit_limit_gtc');
86729
+ const limitGTD = this.safeValue(orderConfiguration, 'limit_limit_gtd');
86730
+ const stopLimitGTC = this.safeValue(orderConfiguration, 'stop_limit_stop_limit_gtc');
86731
+ const stopLimitGTD = this.safeValue(orderConfiguration, 'stop_limit_stop_limit_gtd');
86732
+ const marketIOC = this.safeValue(orderConfiguration, 'market_market_ioc');
86686
86733
  const isLimit = ((limitGTC !== undefined) || (limitGTD !== undefined));
86687
86734
  const isStop = ((stopLimitGTC !== undefined) || (stopLimitGTD !== undefined));
86688
86735
  let price = undefined;
@@ -88693,7 +88740,7 @@ class coinbasepro extends _abstract_coinbasepro_js__WEBPACK_IMPORTED_MODULE_0__/
88693
88740
  * @description fetches information on multiple orders made by the user
88694
88741
  * @param {string} symbol unified market symbol of the market orders were made in
88695
88742
  * @param {int} [since] the earliest time in ms to fetch orders for
88696
- * @param {int} [limit] the maximum number of orde structures to retrieve
88743
+ * @param {int} [limit] the maximum number of order structures to retrieve
88697
88744
  * @param {object} [params] extra parameters specific to the exchange API endpoint
88698
88745
  * @param {int} [params.until] the latest time in ms to fetch open orders for
88699
88746
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
@@ -88751,7 +88798,7 @@ class coinbasepro extends _abstract_coinbasepro_js__WEBPACK_IMPORTED_MODULE_0__/
88751
88798
  * @description fetches information on multiple closed orders made by the user
88752
88799
  * @param {string} symbol unified market symbol of the market orders were made in
88753
88800
  * @param {int} [since] the earliest time in ms to fetch orders for
88754
- * @param {int} [limit] the maximum number of orde structures to retrieve
88801
+ * @param {int} [limit] the maximum number of order structures to retrieve
88755
88802
  * @param {object} [params] extra parameters specific to the exchange API endpoint
88756
88803
  * @param {int} [params.until] the latest time in ms to fetch open orders for
88757
88804
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
@@ -93479,7 +93526,7 @@ class coinex extends _abstract_coinex_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
93479
93526
  * @see https://viabtc.github.io/coinex_api_en_doc/spot/#docsspot003_trade012_finished_order
93480
93527
  * @param {string} symbol unified market symbol of the market orders were made in
93481
93528
  * @param {int} [since] the earliest time in ms to fetch orders for
93482
- * @param {int} [limit] the maximum number of orde structures to retrieve
93529
+ * @param {int} [limit] the maximum number of order structures to retrieve
93483
93530
  * @param {object} [params] extra parameters specific to the exchange API endpoint
93484
93531
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
93485
93532
  */
@@ -96893,7 +96940,7 @@ class coinlist extends _abstract_coinlist_js__WEBPACK_IMPORTED_MODULE_0__/* ["de
96893
96940
  * @see https://trade-docs.coinlist.co/?javascript--nodejs#list-orders
96894
96941
  * @param {string} symbol unified market symbol of the market orders were made in
96895
96942
  * @param {int} [since] the earliest time in ms to fetch orders for
96896
- * @param {int} [limit] the maximum number of orde structures to retrieve (default 200, max 500)
96943
+ * @param {int} [limit] the maximum number of order structures to retrieve (default 200, max 500)
96897
96944
  * @param {object} [params] extra parameters specific to the exchange API endpoint
96898
96945
  * @param {int} [params.until] the latest time in ms to fetch entries for
96899
96946
  * @param {string|string[]} [params.status] the status of the order - 'accepted', 'done', 'canceled', 'rejected', 'pending' (default [ 'accepted', 'done', 'canceled', 'rejected', 'pending' ])
@@ -104601,6 +104648,7 @@ class cryptocom extends _abstract_cryptocom_js__WEBPACK_IMPORTED_MODULE_0__/* ["
104601
104648
  const timestamp = this.safeInteger(ticker, 't');
104602
104649
  const marketId = this.safeString(ticker, 'i');
104603
104650
  market = this.safeMarket(marketId, market, '_');
104651
+ const quote = this.safeString(market, 'quote');
104604
104652
  const last = this.safeString(ticker, 'a');
104605
104653
  return this.safeTicker({
104606
104654
  'symbol': market['symbol'],
@@ -104621,7 +104669,7 @@ class cryptocom extends _abstract_cryptocom_js__WEBPACK_IMPORTED_MODULE_0__/* ["
104621
104669
  'percentage': this.safeString(ticker, 'c'),
104622
104670
  'average': undefined,
104623
104671
  'baseVolume': this.safeString(ticker, 'v'),
104624
- 'quoteVolume': this.safeString(ticker, 'vv'),
104672
+ 'quoteVolume': (quote === 'USD') ? this.safeString(ticker, 'vv') : undefined,
104625
104673
  'info': ticker,
104626
104674
  }, market);
104627
104675
  }
@@ -107764,6 +107812,8 @@ class delta extends _abstract_delta_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
107764
107812
  'addMargin': true,
107765
107813
  'cancelAllOrders': true,
107766
107814
  'cancelOrder': true,
107815
+ 'closeAllPositions': true,
107816
+ 'closePosition': false,
107767
107817
  'createOrder': true,
107768
107818
  'createReduceOnlyOrder': true,
107769
107819
  'editOrder': true,
@@ -110908,6 +110958,29 @@ class delta extends _abstract_delta_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
110908
110958
  'info': greeks,
110909
110959
  };
110910
110960
  }
110961
+ async closeAllPositions(params = {}) {
110962
+ /**
110963
+ * @method
110964
+ * @name delta#closeAllPositions
110965
+ * @description closes all open positions for a market type
110966
+ * @see https://docs.delta.exchange/#close-all-positions
110967
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
110968
+ * @param {int} [params.user_id] the users id
110969
+ * @returns {object[]} A list of [position structures]{@link https://docs.ccxt.com/#/?id=position-structure}
110970
+ */
110971
+ await this.loadMarkets();
110972
+ const request = {
110973
+ 'close_all_portfolio': true,
110974
+ 'close_all_isolated': true,
110975
+ // 'user_id': 12345,
110976
+ };
110977
+ const response = await this.privatePostPositionsCloseAll(this.extend(request, params));
110978
+ //
110979
+ // {"result":{},"success":true}
110980
+ //
110981
+ const position = this.parsePosition(this.safeValue(response, 'result', {}));
110982
+ return [position];
110983
+ }
110911
110984
  sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
110912
110985
  const requestPath = '/' + this.version + '/' + this.implodeParams(path, params);
110913
110986
  let url = this.urls['api'][api] + requestPath;
@@ -112962,7 +113035,7 @@ class deribit extends _abstract_deribit_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
112962
113035
  * @description fetches information on multiple closed orders made by the user
112963
113036
  * @param {string} symbol unified market symbol of the market orders were made in
112964
113037
  * @param {int} [since] the earliest time in ms to fetch orders for
112965
- * @param {int} [limit] the maximum number of orde structures to retrieve
113038
+ * @param {int} [limit] the maximum number of order structures to retrieve
112966
113039
  * @param {object} [params] extra parameters specific to the exchange API endpoint
112967
113040
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
112968
113041
  */
@@ -116501,7 +116574,7 @@ class digifinex extends _abstract_digifinex_js__WEBPACK_IMPORTED_MODULE_0__/* ["
116501
116574
  * @see https://docs.digifinex.com/en-ww/swap/v2/rest.html#historyorder
116502
116575
  * @param {string} symbol unified market symbol of the market orders were made in
116503
116576
  * @param {int} [since] the earliest time in ms to fetch orders for
116504
- * @param {int} [limit] the maximum number of orde structures to retrieve
116577
+ * @param {int} [limit] the maximum number of order structures to retrieve
116505
116578
  * @param {object} [params] extra parameters specific to the exchange API endpoint
116506
116579
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
116507
116580
  */
@@ -125944,7 +126017,7 @@ class gate extends _abstract_gate_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
125944
126017
  * @see https://www.gate.io/docs/developers/apiv4/en/#list-options-orders
125945
126018
  * @param {string} symbol unified market symbol of the market orders were made in
125946
126019
  * @param {int} [since] the earliest time in ms to fetch orders for
125947
- * @param {int} [limit] the maximum number of orde structures to retrieve
126020
+ * @param {int} [limit] the maximum number of order structures to retrieve
125948
126021
  * @param {object} [params] extra parameters specific to the exchange API endpoint
125949
126022
  * @param {bool} [params.stop] true for fetching stop orders
125950
126023
  * @param {string} [params.type] spot, swap or future, if not provided this.options['defaultType'] is used
@@ -128292,7 +128365,7 @@ class gate extends _abstract_gate_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
128292
128365
  async closePosition(symbol, side = undefined, params = {}) {
128293
128366
  /**
128294
128367
  * @method
128295
- * @name gate#closePositions
128368
+ * @name gate#closePosition
128296
128369
  * @description closes open positions for a market
128297
128370
  * @see https://www.gate.io/docs/developers/apiv4/en/#create-a-futures-order
128298
128371
  * @see https://www.gate.io/docs/developers/apiv4/en/#create-a-futures-order-2
@@ -128300,7 +128373,7 @@ class gate extends _abstract_gate_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
128300
128373
  * @param {string} symbol Unified CCXT market symbol
128301
128374
  * @param {string} side 'buy' or 'sell'
128302
128375
  * @param {object} [params] extra parameters specific to the okx api endpoint
128303
- * @returns {[object]} [A list of position structures]{@link https://docs.ccxt.com/#/?id=position-structure}
128376
+ * @returns {object[]} [A list of position structures]{@link https://docs.ccxt.com/#/?id=position-structure}
128304
128377
  */
128305
128378
  const request = {
128306
128379
  'close': true,
@@ -131990,7 +132063,7 @@ class hitbtc extends _abstract_hitbtc_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
131990
132063
  * @see https://api.hitbtc.com/#margin-orders-history
131991
132064
  * @param {string} symbol unified market symbol of the market orders were made in
131992
132065
  * @param {int} [since] the earliest time in ms to fetch orders for
131993
- * @param {int} [limit] the maximum number of orde structures to retrieve
132066
+ * @param {int} [limit] the maximum number of order structures to retrieve
131994
132067
  * @param {object} [params] extra parameters specific to the exchange API endpoint
131995
132068
  * @param {string} [params.marginMode] 'cross' or 'isolated' only 'isolated' is supported
131996
132069
  * @param {bool} [params.margin] true for fetching margin orders
@@ -134796,7 +134869,7 @@ class hollaex extends _abstract_hollaex_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
134796
134869
  * @description fetches information on multiple closed orders made by the user
134797
134870
  * @param {string} symbol unified market symbol of the market orders were made in
134798
134871
  * @param {int} [since] the earliest time in ms to fetch orders for
134799
- * @param {int} [limit] the maximum number of orde structures to retrieve
134872
+ * @param {int} [limit] the maximum number of order structures to retrieve
134800
134873
  * @param {object} [params] extra parameters specific to the exchange API endpoint
134801
134874
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
134802
134875
  */
@@ -134854,7 +134927,7 @@ class hollaex extends _abstract_hollaex_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
134854
134927
  * @description fetches information on multiple orders made by the user
134855
134928
  * @param {string} symbol unified market symbol of the market orders were made in
134856
134929
  * @param {int} [since] the earliest time in ms to fetch orders for
134857
- * @param {int} [limit] the maximum number of orde structures to retrieve
134930
+ * @param {int} [limit] the maximum number of order structures to retrieve
134858
134931
  * @param {object} [params] extra parameters specific to the exchange API endpoint
134859
134932
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
134860
134933
  */
@@ -139892,7 +139965,7 @@ class htx extends _abstract_htx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
139892
139965
  * @description fetches information on multiple closed orders made by the user
139893
139966
  * @param {string} symbol unified market symbol of the market orders were made in
139894
139967
  * @param {int} [since] the earliest time in ms to fetch orders for
139895
- * @param {int} [limit] the maximum number of orde structures to retrieve
139968
+ * @param {int} [limit] the maximum number of order structures to retrieve
139896
139969
  * @param {object} [params] extra parameters specific to the exchange API endpoint
139897
139970
  * @param {int} [params.until] the latest time in ms to fetch entries for
139898
139971
  * @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)
@@ -145782,7 +145855,7 @@ class huobijp extends _abstract_huobijp_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
145782
145855
  * @description fetches information on multiple orders made by the user
145783
145856
  * @param {string} symbol unified market symbol of the market orders were made in
145784
145857
  * @param {int} [since] the earliest time in ms to fetch orders for
145785
- * @param {int} [limit] the maximum number of orde structures to retrieve
145858
+ * @param {int} [limit] the maximum number of order structures to retrieve
145786
145859
  * @param {object} [params] extra parameters specific to the exchange API endpoint
145787
145860
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
145788
145861
  */
@@ -145815,7 +145888,7 @@ class huobijp extends _abstract_huobijp_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
145815
145888
  * @description fetches information on multiple closed orders made by the user
145816
145889
  * @param {string} symbol unified market symbol of the market orders were made in
145817
145890
  * @param {int} [since] the earliest time in ms to fetch orders for
145818
- * @param {int} [limit] the maximum number of orde structures to retrieve
145891
+ * @param {int} [limit] the maximum number of order structures to retrieve
145819
145892
  * @param {object} [params] extra parameters specific to the exchange API endpoint
145820
145893
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
145821
145894
  */
@@ -147465,7 +147538,7 @@ class idex extends _abstract_idex_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
147465
147538
  * @description fetches information on multiple closed orders made by the user
147466
147539
  * @param {string} symbol unified market symbol of the market orders were made in
147467
147540
  * @param {int} [since] the earliest time in ms to fetch orders for
147468
- * @param {int} [limit] the maximum number of orde structures to retrieve
147541
+ * @param {int} [limit] the maximum number of order structures to retrieve
147469
147542
  * @param {object} [params] extra parameters specific to the exchange API endpoint
147470
147543
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
147471
147544
  */
@@ -148829,7 +148902,7 @@ class independentreserve extends _abstract_independentreserve_js__WEBPACK_IMPORT
148829
148902
  * @description fetches information on multiple closed orders made by the user
148830
148903
  * @param {string} symbol unified market symbol of the market orders were made in
148831
148904
  * @param {int} [since] the earliest time in ms to fetch orders for
148832
- * @param {int} [limit] the maximum number of orde structures to retrieve
148905
+ * @param {int} [limit] the maximum number of order structures to retrieve
148833
148906
  * @param {object} [params] extra parameters specific to the exchange API endpoint
148834
148907
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
148835
148908
  */
@@ -150989,7 +151062,6 @@ class kraken extends _abstract_kraken_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
150989
151062
  // "o":"2571.56000"
150990
151063
  // }
150991
151064
  //
150992
- const timestamp = this.milliseconds();
150993
151065
  const symbol = this.safeSymbol(undefined, market);
150994
151066
  const v = this.safeValue(ticker, 'v', []);
150995
151067
  const baseVolume = this.safeString(v, 1);
@@ -151004,8 +151076,8 @@ class kraken extends _abstract_kraken_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
151004
151076
  const ask = this.safeValue(ticker, 'a', []);
151005
151077
  return this.safeTicker({
151006
151078
  'symbol': symbol,
151007
- 'timestamp': timestamp,
151008
- 'datetime': this.iso8601(timestamp),
151079
+ 'timestamp': undefined,
151080
+ 'datetime': undefined,
151009
151081
  'high': this.safeString(high, 1),
151010
151082
  'low': this.safeString(low, 1),
151011
151083
  'bid': this.safeString(bid, 0),
@@ -151519,8 +151591,12 @@ class kraken extends _abstract_kraken_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
151519
151591
  * @param {float} amount how much of currency you want to trade in units of base currency
151520
151592
  * @param {float} [price] the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
151521
151593
  * @param {object} [params] extra parameters specific to the exchange API endpoint
151522
- * @param {bool} params.postOnly
151523
- * @param {bool} params.reduceOnly
151594
+ * @param {bool} [params.postOnly] if true, the order will only be posted to the order book and not executed immediately
151595
+ * @param {bool} [params.reduceOnly] *margin only* indicates if this order is to reduce the size of a position
151596
+ * @param {float} [params.stopLossPrice] *margin only* the price that a stop loss order is triggered at
151597
+ * @param {float} [params.takeProfitPrice] *margin only* the price that a take profit order is triggered at
151598
+ * @param {string} [params.trailingStopPrice] *margin only* the quote amount to trail away from the current market price
151599
+ * @param {string} [params.trigger] *margin only* the activation price type, 'last' or 'index', default is 'last'
151524
151600
  * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
151525
151601
  */
151526
151602
  await this.loadMarkets();
@@ -151775,50 +151851,48 @@ class kraken extends _abstract_kraken_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
151775
151851
  if (clientOrderId !== undefined) {
151776
151852
  request['userref'] = clientOrderId;
151777
151853
  }
151778
- //
151779
- // market
151780
- // limit (price = limit price)
151781
- // stop-loss (price = stop loss trigger price)
151782
- // take-profit (price = take profit trigger price)
151783
- // stop-loss-limit (price = stop loss trigger price, price2 = triggered limit price)
151784
- // take-profit-limit (price = take profit trigger price, price2 = triggered limit price)
151785
- // settle-position
151786
- //
151854
+ const stopLossTriggerPrice = this.safeString(params, 'stopLossPrice');
151855
+ const takeProfitTriggerPrice = this.safeString(params, 'takeProfitPrice');
151856
+ const isStopLossTriggerOrder = stopLossTriggerPrice !== undefined;
151857
+ const isTakeProfitTriggerOrder = takeProfitTriggerPrice !== undefined;
151858
+ const isStopLossOrTakeProfitTrigger = isStopLossTriggerOrder || isTakeProfitTriggerOrder;
151859
+ const trailingStopPrice = this.safeString(params, 'trailingStopPrice');
151860
+ const isTrailingStopPriceOrder = trailingStopPrice !== undefined;
151787
151861
  if (type === 'limit') {
151788
151862
  request['price'] = this.priceToPrecision(symbol, price);
151789
151863
  }
151790
- else if ((type === 'stop-loss') || (type === 'take-profit')) {
151791
- const stopPrice = this.safeNumber2(params, 'price', 'stopPrice', price);
151792
- if (stopPrice === undefined) {
151793
- throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.ArgumentsRequired(this.id + method + ' requires a price argument or a price/stopPrice parameter for a ' + type + ' order');
151864
+ let reduceOnly = this.safeValue2(params, 'reduceOnly', 'reduce_only');
151865
+ if (isStopLossOrTakeProfitTrigger) {
151866
+ if (isStopLossTriggerOrder) {
151867
+ request['price'] = this.priceToPrecision(symbol, stopLossTriggerPrice);
151868
+ request['ordertype'] = 'stop-loss-limit';
151794
151869
  }
151795
- else {
151796
- request['price'] = this.priceToPrecision(symbol, stopPrice);
151870
+ else if (isTakeProfitTriggerOrder) {
151871
+ request['price'] = this.priceToPrecision(symbol, takeProfitTriggerPrice);
151872
+ request['ordertype'] = 'take-profit-limit';
151797
151873
  }
151874
+ request['price2'] = this.priceToPrecision(symbol, price);
151875
+ reduceOnly = true;
151798
151876
  }
151799
- else if ((type === 'stop-loss-limit') || (type === 'take-profit-limit')) {
151800
- const stopPrice = this.safeNumber2(params, 'price', 'stopPrice');
151801
- const limitPrice = this.safeNumber(params, 'price2');
151802
- const stopPriceDefined = (stopPrice !== undefined);
151803
- const limitPriceDefined = (limitPrice !== undefined);
151804
- if (stopPriceDefined && limitPriceDefined) {
151805
- request['price'] = this.priceToPrecision(symbol, stopPrice);
151806
- request['price2'] = this.priceToPrecision(symbol, limitPrice);
151807
- }
151808
- else if ((price === undefined) || (!(stopPriceDefined || limitPriceDefined))) {
151809
- throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.ArgumentsRequired(this.id + method + ' requires a price argument and/or price/stopPrice/price2 parameters for a ' + type + ' order');
151877
+ else if (isTrailingStopPriceOrder) {
151878
+ const trailingStopActivationPriceType = this.safeString(params, 'trigger', 'last');
151879
+ const trailingStopPriceString = '+' + trailingStopPrice;
151880
+ request['trigger'] = trailingStopActivationPriceType;
151881
+ reduceOnly = true;
151882
+ if (type === 'limit') {
151883
+ const trailingStopLimitPriceString = '+' + this.numberToString(price);
151884
+ request['price'] = trailingStopPriceString;
151885
+ request['price2'] = trailingStopLimitPriceString;
151886
+ request['ordertype'] = 'trailing-stop-limit';
151810
151887
  }
151811
151888
  else {
151812
- if (stopPriceDefined) {
151813
- request['price'] = this.priceToPrecision(symbol, stopPrice);
151814
- request['price2'] = this.priceToPrecision(symbol, price);
151815
- }
151816
- else if (limitPriceDefined) {
151817
- request['price'] = this.priceToPrecision(symbol, price);
151818
- request['price2'] = this.priceToPrecision(symbol, limitPrice);
151819
- }
151889
+ request['price'] = trailingStopPriceString;
151890
+ request['ordertype'] = 'trailing-stop';
151820
151891
  }
151821
151892
  }
151893
+ if (reduceOnly) {
151894
+ request['reduce_only'] = 'true'; // not using boolean in this case, because the urlencodedNested transforms it into 'True' string
151895
+ }
151822
151896
  let close = this.safeValue(params, 'close');
151823
151897
  if (close !== undefined) {
151824
151898
  close = this.extend({}, close);
@@ -151842,11 +151916,7 @@ class kraken extends _abstract_kraken_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
151842
151916
  if (postOnly) {
151843
151917
  request['oflags'] = 'post';
151844
151918
  }
151845
- const reduceOnly = this.safeValue(params, 'reduceOnly');
151846
- if (reduceOnly) {
151847
- request['reduce_only'] = true;
151848
- }
151849
- params = this.omit(params, ['price', 'stopPrice', 'price2', 'close', 'timeInForce', 'reduceOnly']);
151919
+ params = this.omit(params, ['timeInForce', 'reduceOnly', 'stopLossPrice', 'takeProfitPrice', 'trailingStopPrice']);
151850
151920
  return [request, params];
151851
151921
  }
151852
151922
  async editOrder(id, symbol, type, side, amount = undefined, price = undefined, params = {}) {
@@ -151862,6 +151932,10 @@ class kraken extends _abstract_kraken_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
151862
151932
  * @param {float} amount how much of the currency you want to trade in units of the base currency
151863
151933
  * @param {float} [price] the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
151864
151934
  * @param {object} [params] extra parameters specific to the exchange API endpoint
151935
+ * @param {float} [params.stopLossPrice] *margin only* the price that a stop loss order is triggered at
151936
+ * @param {float} [params.takeProfitPrice] *margin only* the price that a take profit order is triggered at
151937
+ * @param {string} [params.trailingStopPrice] *margin only* the quote price away from the current market price
151938
+ * @param {string} [params.trigger] *margin only* the activation price type, 'last' or 'index', default is 'last'
151865
151939
  * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
151866
151940
  */
151867
151941
  await this.loadMarkets();
@@ -152244,7 +152318,7 @@ class kraken extends _abstract_kraken_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
152244
152318
  * @see https://docs.kraken.com/rest/#tag/Account-Data/operation/getClosedOrders
152245
152319
  * @param {string} symbol unified market symbol of the market orders were made in
152246
152320
  * @param {int} [since] the earliest time in ms to fetch orders for
152247
- * @param {int} [limit] the maximum number of orde structures to retrieve
152321
+ * @param {int} [limit] the maximum number of order structures to retrieve
152248
152322
  * @param {object} [params] extra parameters specific to the exchange API endpoint
152249
152323
  * @param {int} [params.until] timestamp in ms of the latest entry
152250
152324
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
@@ -153871,20 +153945,12 @@ class krakenfutures extends _abstract_krakenfutures_js__WEBPACK_IMPORTED_MODULE_
153871
153945
  });
153872
153946
  }
153873
153947
  createOrderRequest(symbol, type, side, amount, price = undefined, params = {}) {
153948
+ const market = this.market(symbol);
153874
153949
  type = this.safeString(params, 'orderType', type);
153875
153950
  const timeInForce = this.safeString(params, 'timeInForce');
153876
- const stopPrice = this.safeString(params, 'stopPrice');
153877
153951
  let postOnly = false;
153878
153952
  [postOnly, params] = this.handlePostOnly(type === 'market', type === 'post', params);
153879
- const clientOrderId = this.safeString2(params, 'clientOrderId', 'cliOrdId');
153880
- params = this.omit(params, ['clientOrderId', 'cliOrdId']);
153881
- if ((type === 'stp' || type === 'take_profit') && stopPrice === undefined) {
153882
- throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_1__.ArgumentsRequired(this.id + ' createOrder requires params.stopPrice when type is ' + type);
153883
- }
153884
- if (stopPrice !== undefined && type !== 'take_profit') {
153885
- type = 'stp';
153886
- }
153887
- else if (postOnly) {
153953
+ if (postOnly) {
153888
153954
  type = 'post';
153889
153955
  }
153890
153956
  else if (timeInForce === 'ioc') {
@@ -153897,17 +153963,49 @@ class krakenfutures extends _abstract_krakenfutures_js__WEBPACK_IMPORTED_MODULE_
153897
153963
  type = 'mkt';
153898
153964
  }
153899
153965
  const request = {
153900
- 'orderType': type,
153901
- 'symbol': this.marketId(symbol),
153966
+ 'symbol': market['id'],
153902
153967
  'side': side,
153903
153968
  'size': amount,
153904
153969
  };
153905
- if (price !== undefined) {
153906
- request['limitPrice'] = price;
153907
- }
153970
+ const clientOrderId = this.safeString2(params, 'clientOrderId', 'cliOrdId');
153908
153971
  if (clientOrderId !== undefined) {
153909
153972
  request['cliOrdId'] = clientOrderId;
153910
153973
  }
153974
+ const triggerPrice = this.safeString2(params, 'triggerPrice', 'stopPrice');
153975
+ const isTriggerOrder = triggerPrice !== undefined;
153976
+ const stopLossTriggerPrice = this.safeString(params, 'stopLossPrice');
153977
+ const takeProfitTriggerPrice = this.safeString(params, 'takeProfitPrice');
153978
+ const isStopLossTriggerOrder = stopLossTriggerPrice !== undefined;
153979
+ const isTakeProfitTriggerOrder = takeProfitTriggerPrice !== undefined;
153980
+ const isStopLossOrTakeProfitTrigger = isStopLossTriggerOrder || isTakeProfitTriggerOrder;
153981
+ const triggerSignal = this.safeString(params, 'triggerSignal', 'last');
153982
+ let reduceOnly = this.safeValue(params, 'reduceOnly');
153983
+ if (isStopLossOrTakeProfitTrigger || isTriggerOrder) {
153984
+ request['triggerSignal'] = triggerSignal;
153985
+ }
153986
+ if (isTriggerOrder) {
153987
+ type = 'stp';
153988
+ request['stopPrice'] = this.priceToPrecision(symbol, triggerPrice);
153989
+ }
153990
+ else if (isStopLossOrTakeProfitTrigger) {
153991
+ reduceOnly = true;
153992
+ if (isStopLossTriggerOrder) {
153993
+ type = 'stp';
153994
+ request['stopPrice'] = this.priceToPrecision(symbol, stopLossTriggerPrice);
153995
+ }
153996
+ else if (isTakeProfitTriggerOrder) {
153997
+ type = 'take_profit';
153998
+ request['stopPrice'] = this.priceToPrecision(symbol, takeProfitTriggerPrice);
153999
+ }
154000
+ }
154001
+ if (reduceOnly) {
154002
+ request['reduceOnly'] = true;
154003
+ }
154004
+ request['orderType'] = type;
154005
+ if (price !== undefined) {
154006
+ request['limitPrice'] = price;
154007
+ }
154008
+ params = this.omit(params, ['clientOrderId', 'timeInForce', 'triggerPrice', 'stopLossPrice', 'takeProfitPrice']);
153911
154009
  return this.extend(request, params);
153912
154010
  }
153913
154011
  async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
@@ -153915,19 +154013,22 @@ class krakenfutures extends _abstract_krakenfutures_js__WEBPACK_IMPORTED_MODULE_
153915
154013
  * @method
153916
154014
  * @name krakenfutures#createOrder
153917
154015
  * @description Create an order on the exchange
153918
- * @param {string} symbol market symbol
153919
- * @param {string} type One of 'limit', 'market', 'take_profit'
153920
- * @param {string} side buy or sell
153921
- * @param {int} amount Contract quantity
153922
- * @param {float} [price] Limit order price
153923
- * @param {float} [params.stopPrice] The stop price associated with a stop or take profit order, Required if orderType is stp or take_profit, Must not have more than 2 decimal places, Note that for stop orders, limitPrice denotes the worst price at which the stop or take_profit order can get filled at. If no limitPrice is provided the stop or take_profit order will trigger a market order,
153924
- * @param {bool} [params.reduceOnly] Set as true if you wish the order to only reduce an existing position, Any order which increases an existing position will be rejected, Default false,
153925
- * @param {bool} [params.postOnly] Set as true if you wish to make a postOnly order, Default false
153926
- * @param {string} [params.triggerSignal] If placing a stp or take_profit, the signal used for trigger, One of: 'mark', 'index', 'last', last is market price
153927
- * @param {string} [params.cliOrdId] UUID The order identity that is specified from the user, It must be globally unique
154016
+ * @see https://docs.futures.kraken.com/#http-api-trading-v3-api-order-management-send-order
154017
+ * @param {string} symbol unified market symbol
154018
+ * @param {string} type 'limit' or 'market'
154019
+ * @param {string} side 'buy' or 'sell'
154020
+ * @param {float} amount number of contracts
154021
+ * @param {float} [price] limit order price
154022
+ * @param {bool} [params.reduceOnly] set as true if you wish the order to only reduce an existing position, any order which increases an existing position will be rejected, default is false
154023
+ * @param {bool} [params.postOnly] set as true if you wish to make a postOnly order, default is false
153928
154024
  * @param {string} [params.clientOrderId] UUID The order identity that is specified from the user, It must be globally unique
154025
+ * @param {float} [params.triggerPrice] the price that a stop order is triggered at
154026
+ * @param {float} [params.stopLossPrice] the price that a stop loss order is triggered at
154027
+ * @param {float} [params.takeProfitPrice] the price that a take profit order is triggered at
154028
+ * @param {string} [params.triggerSignal] for triggerPrice, stopLossPrice and takeProfitPrice orders, the trigger price type, 'last', 'mark' or 'index', default is 'last'
153929
154029
  */
153930
154030
  await this.loadMarkets();
154031
+ const market = this.market(symbol);
153931
154032
  const orderRequest = this.createOrderRequest(symbol, type, side, amount, price, params);
153932
154033
  const response = await this.privatePostSendorder(orderRequest);
153933
154034
  //
@@ -153963,7 +154064,7 @@ class krakenfutures extends _abstract_krakenfutures_js__WEBPACK_IMPORTED_MODULE_
153963
154064
  const sendStatus = this.safeValue(response, 'sendStatus');
153964
154065
  const status = this.safeString(sendStatus, 'status');
153965
154066
  this.verifyOrderActionSuccess(status, 'createOrder', ['filled']);
153966
- return this.parseOrder(sendStatus);
154067
+ return this.parseOrder(sendStatus, market);
153967
154068
  }
153968
154069
  async createOrders(orders, params = {}) {
153969
154070
  /**
@@ -155458,6 +155559,9 @@ class kucoin extends _abstract_kucoin_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
155458
155559
  'closeAllPositions': false,
155459
155560
  'closePosition': false,
155460
155561
  'createDepositAddress': true,
155562
+ 'createMarketBuyOrderWithCost': true,
155563
+ 'createMarketOrderWithCost': true,
155564
+ 'createMarketSellOrderWithCost': true,
155461
155565
  'createOrder': true,
155462
155566
  'createOrders': true,
155463
155567
  'createPostOnlyOrder': true,
@@ -155625,6 +155729,10 @@ class kucoin extends _abstract_kucoin_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
155625
155729
  'stop-order': 8,
155626
155730
  'stop-order/{orderId}': 3,
155627
155731
  'stop-order/queryOrderByClientOid': 3,
155732
+ 'oco/order/{orderId}': 2,
155733
+ 'oco/order/details/{orderId}': 2,
155734
+ 'oco/client-order/{clientOid}': 2,
155735
+ 'oco/orders': 2,
155628
155736
  // margin trading
155629
155737
  'hf/margin/orders/active': 4,
155630
155738
  'hf/margin/orders/done': 10,
@@ -155632,6 +155740,7 @@ class kucoin extends _abstract_kucoin_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
155632
155740
  'hf/margin/orders/client-order/{clientOid}': 5,
155633
155741
  'hf/margin/fills': 5,
155634
155742
  'etf/info': 25,
155743
+ 'margin/currencies': 20,
155635
155744
  'risk/limit/strategy': 20,
155636
155745
  'isolated/symbols': 20,
155637
155746
  'isolated/account/{symbol}': 50,
@@ -155667,6 +155776,7 @@ class kucoin extends _abstract_kucoin_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
155667
155776
  'orders/test': 2,
155668
155777
  'orders/multi': 3,
155669
155778
  'stop-order': 2,
155779
+ 'oco/order': 2,
155670
155780
  // margin trading
155671
155781
  'hf/margin/order': 5,
155672
155782
  'hf/margin/order/test': 5,
@@ -155692,12 +155802,16 @@ class kucoin extends _abstract_kucoin_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
155692
155802
  'hf/orders/sync/client-order/{clientOid}': 1,
155693
155803
  'hf/orders/cancel/{orderId}': 2,
155694
155804
  'hf/orders': 2,
155805
+ 'hf/orders/cancelAll': 30,
155695
155806
  'orders/{orderId}': 3,
155696
155807
  'order/client-order/{clientOid}': 5,
155697
155808
  'orders': 20,
155698
155809
  'stop-order/{orderId}': 3,
155699
155810
  'stop-order/cancelOrderByClientOid': 5,
155700
155811
  'stop-order/cancel': 3,
155812
+ 'oco/order/{orderId}': 3,
155813
+ 'oco/client-order/{clientOid}': 3,
155814
+ 'oco/orders': 3,
155701
155815
  // margin trading
155702
155816
  'hf/margin/orders/{orderId}': 5,
155703
155817
  'hf/margin/orders/client-order/{clientOid}': 5,
@@ -155718,6 +155832,7 @@ class kucoin extends _abstract_kucoin_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
155718
155832
  'index/query': 3,
155719
155833
  'mark-price/{symbol}/current': 4.5,
155720
155834
  'premium/query': 4.5,
155835
+ 'trade-statistics': 4.5,
155721
155836
  'funding-rate/{symbol}/current': 3,
155722
155837
  'timestamp': 3,
155723
155838
  'status': 6,
@@ -155766,6 +155881,7 @@ class kucoin extends _abstract_kucoin_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
155766
155881
  },
155767
155882
  'delete': {
155768
155883
  'orders/{orderId}': 1.5,
155884
+ 'orders/client-order/{clientOid}': 1.5,
155769
155885
  'orders': 45,
155770
155886
  'stopOrders': 22.5, // 15FW
155771
155887
  },
@@ -155953,6 +156069,10 @@ class kucoin extends _abstract_kucoin_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
155953
156069
  'market/orderbook/level2': 'v3',
155954
156070
  'market/orderbook/level3': 'v3',
155955
156071
  'market/orderbook/level{level}': 'v3',
156072
+ 'oco/order/{orderId}': 'v3',
156073
+ 'oco/order/details/{orderId}': 'v3',
156074
+ 'oco/client-order/{clientOid}': 'v3',
156075
+ 'oco/orders': 'v3',
155956
156076
  // margin trading
155957
156077
  'hf/margin/orders/active': 'v3',
155958
156078
  'hf/margin/orders/done': 'v3',
@@ -155960,6 +156080,7 @@ class kucoin extends _abstract_kucoin_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
155960
156080
  'hf/margin/orders/client-order/{clientOid}': 'v3',
155961
156081
  'hf/margin/fills': 'v3',
155962
156082
  'etf/info': 'v3',
156083
+ 'margin/currencies': 'v3',
155963
156084
  'margin/borrow': 'v3',
155964
156085
  'margin/repay': 'v3',
155965
156086
  'project/list': 'v3',
@@ -155976,6 +156097,7 @@ class kucoin extends _abstract_kucoin_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
155976
156097
  'accounts/inner-transfer': 'v2',
155977
156098
  'transfer-out': 'v3',
155978
156099
  // spot trading
156100
+ 'oco/order': 'v3',
155979
156101
  // margin trading
155980
156102
  'hf/margin/order': 'v3',
155981
156103
  'hf/margin/order/test': 'v3',
@@ -155992,6 +156114,9 @@ class kucoin extends _abstract_kucoin_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
155992
156114
  'hf/margin/orders/{orderId}': 'v3',
155993
156115
  'hf/margin/orders/client-order/{clientOid}': 'v3',
155994
156116
  'hf/margin/orders': 'v3',
156117
+ 'oco/order/{orderId}': 'v3',
156118
+ 'oco/client-order/{clientOid}': 'v3',
156119
+ 'oco/orders': 'v3',
155995
156120
  // margin trading
155996
156121
  },
155997
156122
  },
@@ -157347,6 +157472,50 @@ class kucoin extends _abstract_kucoin_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
157347
157472
  const data = this.safeValue(response, 'data', {});
157348
157473
  return this.parseOrder(data, market);
157349
157474
  }
157475
+ async createMarketOrderWithCost(symbol, side, cost, params = {}) {
157476
+ /**
157477
+ * @method
157478
+ * @name kucoin#createMarketOrderWithCost
157479
+ * @description create a market order by providing the symbol, side and cost
157480
+ * @see https://www.kucoin.com/docs/rest/spot-trading/orders/place-order
157481
+ * @param {string} symbol unified symbol of the market to create an order in
157482
+ * @param {string} side 'buy' or 'sell'
157483
+ * @param {float} cost how much you want to trade in units of the quote currency
157484
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
157485
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
157486
+ */
157487
+ await this.loadMarkets();
157488
+ params['cost'] = cost;
157489
+ return await this.createOrder(symbol, 'market', side, cost, undefined, params);
157490
+ }
157491
+ async createMarketBuyOrderWithCost(symbol, cost, params = {}) {
157492
+ /**
157493
+ * @method
157494
+ * @name kucoin#createMarketBuyOrderWithCost
157495
+ * @description create a market buy order by providing the symbol and cost
157496
+ * @see https://www.kucoin.com/docs/rest/spot-trading/orders/place-order
157497
+ * @param {string} symbol unified symbol of the market to create an order in
157498
+ * @param {float} cost how much you want to trade in units of the quote currency
157499
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
157500
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
157501
+ */
157502
+ await this.loadMarkets();
157503
+ return await this.createMarketOrderWithCost(symbol, 'buy', cost, params);
157504
+ }
157505
+ async createMarketSellOrderWithCost(symbol, cost, params = {}) {
157506
+ /**
157507
+ * @method
157508
+ * @name kucoin#createMarketSellOrderWithCost
157509
+ * @description create a market sell order by providing the symbol and cost
157510
+ * @see https://www.kucoin.com/docs/rest/spot-trading/orders/place-order
157511
+ * @param {string} symbol unified symbol of the market to create an order in
157512
+ * @param {float} cost how much you want to trade in units of the quote currency
157513
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
157514
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
157515
+ */
157516
+ await this.loadMarkets();
157517
+ return await this.createMarketOrderWithCost(symbol, 'sell', cost, params);
157518
+ }
157350
157519
  async createOrders(orders, params = {}) {
157351
157520
  /**
157352
157521
  * @method
@@ -157645,9 +157814,11 @@ class kucoin extends _abstract_kucoin_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
157645
157814
  }
157646
157815
  else if (hf) {
157647
157816
  if (symbol === undefined) {
157648
- throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.ArgumentsRequired(this.id + ' cancelAllOrders() requires a symbol parameter for hf orders');
157817
+ response = await this.privateDeleteHfOrdersCancelAll(this.extend(request, query));
157818
+ }
157819
+ else {
157820
+ response = await this.privateDeleteHfOrders(this.extend(request, query));
157649
157821
  }
157650
- response = await this.privateDeleteHfOrders(this.extend(request, query));
157651
157822
  }
157652
157823
  else {
157653
157824
  response = await this.privateDeleteOrders(this.extend(request, query));
@@ -157783,7 +157954,7 @@ class kucoin extends _abstract_kucoin_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
157783
157954
  * @see https://docs.kucoin.com/spot-hf/#obtain-list-of-filled-hf-orders
157784
157955
  * @param {string} symbol unified market symbol of the market orders were made in
157785
157956
  * @param {int} [since] the earliest time in ms to fetch orders for
157786
- * @param {int} [limit] the maximum number of orde structures to retrieve
157957
+ * @param {int} [limit] the maximum number of order structures to retrieve
157787
157958
  * @param {object} [params] extra parameters specific to the exchange API endpoint
157788
157959
  * @param {int} [params.till] end time in ms
157789
157960
  * @param {string} [params.side] buy or sell
@@ -157904,7 +158075,7 @@ class kucoin extends _abstract_kucoin_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
157904
158075
  response = await this.privateGetOrdersOrderId(this.extend(request, params));
157905
158076
  }
157906
158077
  }
157907
- let responseData = this.safeValue(response, 'data');
158078
+ let responseData = this.safeValue(response, 'data', {});
157908
158079
  if (Array.isArray(responseData)) {
157909
158080
  responseData = this.safeValue(responseData, 0);
157910
158081
  }
@@ -161390,7 +161561,7 @@ class kucoinfutures extends _abstract_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_
161390
161561
  * @see https://docs.kucoin.com/futures/#get-order-list
161391
161562
  * @param {string} symbol unified market symbol of the market orders were made in
161392
161563
  * @param {int} [since] the earliest time in ms to fetch orders for
161393
- * @param {int} [limit] the maximum number of orde structures to retrieve
161564
+ * @param {int} [limit] the maximum number of order structures to retrieve
161394
161565
  * @param {object} [params] extra parameters specific to the exchange API endpoint
161395
161566
  * @param {int} [params.till] end time in ms
161396
161567
  * @param {string} [params.side] buy or sell
@@ -162264,7 +162435,7 @@ class kucoinfutures extends _abstract_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_
162264
162435
  * @param {string} side not used by kucoinfutures closePositions
162265
162436
  * @param {object} [params] extra parameters specific to the okx api endpoint
162266
162437
  * @param {string} [params.clientOrderId] client order id of the order
162267
- * @returns {[object]} [A list of position structures]{@link https://docs.ccxt.com/#/?id=position-structure}
162438
+ * @returns {object[]} [A list of position structures]{@link https://docs.ccxt.com/#/?id=position-structure}
162268
162439
  */
162269
162440
  await this.loadMarkets();
162270
162441
  const market = this.market(symbol);
@@ -163570,7 +163741,7 @@ class kuna extends _abstract_kuna_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
163570
163741
  * @see https://docs.kuna.io/docs/get-private-orders-history
163571
163742
  * @param {string} symbol unified market symbol of the market orders were made in
163572
163743
  * @param {int} [since] the earliest time in ms to fetch orders for
163573
- * @param {int} [limit] the maximum number of orde structures to retrieve
163744
+ * @param {int} [limit] the maximum number of order structures to retrieve
163574
163745
  * @param {object} [params] extra parameters specific to the exchange API endpoint
163575
163746
  * @param {int} [params.until] the latest time in ms to fetch orders for
163576
163747
  *
@@ -165401,7 +165572,7 @@ class latoken extends _abstract_latoken_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
165401
165572
  * @see https://api.latoken.com/doc/v2/#tag/StopOrder/operation/getMyStopOrdersByPair // stop
165402
165573
  * @param {string} symbol unified market symbol of the market orders were made in
165403
165574
  * @param {int} [since] the earliest time in ms to fetch orders for
165404
- * @param {int} [limit] the maximum number of orde structures to retrieve
165575
+ * @param {int} [limit] the maximum number of order structures to retrieve
165405
165576
  * @param {object} [params] extra parameters specific to the exchange API endpoint
165406
165577
  * @param {boolean} [params.trigger] true if fetching trigger orders
165407
165578
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
@@ -169309,7 +169480,7 @@ class luno extends _abstract_luno_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
169309
169480
  * @description fetches information on multiple orders made by the user
169310
169481
  * @param {string} symbol unified market symbol of the market orders were made in
169311
169482
  * @param {int} [since] the earliest time in ms to fetch orders for
169312
- * @param {int} [limit] the maximum number of orde structures to retrieve
169483
+ * @param {int} [limit] the maximum number of order structures to retrieve
169313
169484
  * @param {object} [params] extra parameters specific to the exchange API endpoint
169314
169485
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
169315
169486
  */
@@ -169335,7 +169506,7 @@ class luno extends _abstract_luno_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
169335
169506
  * @description fetches information on multiple closed orders made by the user
169336
169507
  * @param {string} symbol unified market symbol of the market orders were made in
169337
169508
  * @param {int} [since] the earliest time in ms to fetch orders for
169338
- * @param {int} [limit] the maximum number of orde structures to retrieve
169509
+ * @param {int} [limit] the maximum number of order structures to retrieve
169339
169510
  * @param {object} [params] extra parameters specific to the exchange API endpoint
169340
169511
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
169341
169512
  */
@@ -170863,7 +171034,7 @@ class lykke extends _abstract_lykke_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
170863
171034
  * @description fetches information on multiple closed orders made by the user
170864
171035
  * @param {string} symbol unified market symbol of the market orders were made in
170865
171036
  * @param {int} [since] the earliest time in ms to fetch orders for
170866
- * @param {int} [limit] the maximum number of orde structures to retrieve
171037
+ * @param {int} [limit] the maximum number of order structures to retrieve
170867
171038
  * @param {object} [params] extra parameters specific to the exchange API endpoint
170868
171039
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
170869
171040
  */
@@ -174610,7 +174781,7 @@ class mexc extends _abstract_mexc_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
174610
174781
  * @description fetches information on multiple orders made by the user
174611
174782
  * @param {string} symbol unified market symbol of the market orders were made in
174612
174783
  * @param {int} [since] the earliest time in ms to fetch orders for
174613
- * @param {int} [limit] the maximum number of orde structures to retrieve
174784
+ * @param {int} [limit] the maximum number of order structures to retrieve
174614
174785
  * @param {object} [params] extra parameters specific to the exchange API endpoint
174615
174786
  * @param {string} [params.marginMode] only 'isolated' is supported, for spot-margin trading
174616
174787
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
@@ -174933,7 +175104,7 @@ class mexc extends _abstract_mexc_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
174933
175104
  * @description fetches information on multiple closed orders made by the user
174934
175105
  * @param {string} symbol unified market symbol of the market orders were made in
174935
175106
  * @param {int} [since] the earliest time in ms to fetch orders for
174936
- * @param {int} [limit] the maximum number of orde structures to retrieve
175107
+ * @param {int} [limit] the maximum number of order structures to retrieve
174937
175108
  * @param {object} [params] extra parameters specific to the exchange API endpoint
174938
175109
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
174939
175110
  */
@@ -179198,7 +179369,7 @@ class ndax extends _abstract_ndax_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
179198
179369
  * @description fetches information on multiple orders made by the user
179199
179370
  * @param {string} symbol unified market symbol of the market orders were made in
179200
179371
  * @param {int} [since] the earliest time in ms to fetch orders for
179201
- * @param {int} [limit] the maximum number of orde structures to retrieve
179372
+ * @param {int} [limit] the maximum number of order structures to retrieve
179202
179373
  * @param {object} [params] extra parameters specific to the exchange API endpoint
179203
179374
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
179204
179375
  */
@@ -180881,7 +181052,7 @@ class novadax extends _abstract_novadax_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
180881
181052
  * @see https://doc.novadax.com/en-US/#get-order-history
180882
181053
  * @param {string} symbol unified market symbol of the market orders were made in
180883
181054
  * @param {int} [since] the earliest time in ms to fetch orders for
180884
- * @param {int} [limit] the maximum number of orde structures to retrieve
181055
+ * @param {int} [limit] the maximum number of order structures to retrieve
180885
181056
  * @param {object} [params] extra parameters specific to the exchange API endpoint
180886
181057
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
180887
181058
  */
@@ -180958,7 +181129,7 @@ class novadax extends _abstract_novadax_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
180958
181129
  * @see https://doc.novadax.com/en-US/#get-order-history
180959
181130
  * @param {string} symbol unified market symbol of the market orders were made in
180960
181131
  * @param {int} [since] the earliest time in ms to fetch orders for
180961
- * @param {int} [limit] the maximum number of orde structures to retrieve
181132
+ * @param {int} [limit] the maximum number of order structures to retrieve
180962
181133
  * @param {object} [params] extra parameters specific to the exchange API endpoint
180963
181134
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
180964
181135
  */
@@ -182247,7 +182418,7 @@ class oceanex extends _abstract_oceanex_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
182247
182418
  * @see https://api.oceanex.pro/doc/v1/#order-status-get
182248
182419
  * @param {string} symbol unified market symbol of the market orders were made in
182249
182420
  * @param {int} [since] the earliest time in ms to fetch orders for
182250
- * @param {int} [limit] the maximum number of orde structures to retrieve
182421
+ * @param {int} [limit] the maximum number of order structures to retrieve
182251
182422
  * @param {object} [params] extra parameters specific to the exchange API endpoint
182252
182423
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
182253
182424
  */
@@ -184576,7 +184747,7 @@ class okcoin extends _abstract_okcoin_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
184576
184747
  * @description fetches information on multiple closed orders made by the user
184577
184748
  * @param {string} symbol unified market symbol of the market orders were made in
184578
184749
  * @param {int} [since] the earliest time in ms to fetch orders for
184579
- * @param {int} [limit] the maximum number of orde structures to retrieve
184750
+ * @param {int} [limit] the maximum number of order structures to retrieve
184580
184751
  * @param {object} [params] extra parameters specific to the exchange API endpoint
184581
184752
  * @param {bool} [params.stop] True if fetching trigger or conditional orders
184582
184753
  * @param {string} [params.ordType] "conditional", "oco", "trigger", "move_order_stop", "iceberg", or "twap"
@@ -189546,7 +189717,7 @@ class okx extends _abstract_okx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
189546
189717
  * @see https://www.okx.com/docs-v5/en/#order-book-trading-algo-trading-get-algo-order-history
189547
189718
  * @param {string} symbol unified market symbol of the market orders were made in
189548
189719
  * @param {int} [since] the earliest time in ms to fetch orders for
189549
- * @param {int} [limit] the maximum number of orde structures to retrieve
189720
+ * @param {int} [limit] the maximum number of order structures to retrieve
189550
189721
  * @param {object} [params] extra parameters specific to the exchange API endpoint
189551
189722
  * @param {bool} [params.stop] True if fetching trigger or conditional orders
189552
189723
  * @param {string} [params.ordType] "conditional", "oco", "trigger", "move_order_stop", "iceberg", or "twap"
@@ -203248,7 +203419,7 @@ class poloniexfutures extends _abstract_poloniexfutures_js__WEBPACK_IMPORTED_MOD
203248
203419
  * @see https://futures-docs.poloniex.com/#get-untriggered-stop-order-list
203249
203420
  * @param {string} symbol unified market symbol of the market orders were made in
203250
203421
  * @param {int} [since] the earliest time in ms to fetch orders for
203251
- * @param {int} [limit] the maximum number of orde structures to retrieve
203422
+ * @param {int} [limit] the maximum number of order structures to retrieve
203252
203423
  * @param {object} [params] extra parameters specific to the exchange API endpoint
203253
203424
  * @param {int} [params.till] end time in ms
203254
203425
  * @param {string} [params.side] buy or sell
@@ -204018,7 +204189,7 @@ class alpaca extends _alpaca_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z
204018
204189
  * @description watches information on multiple orders made by the user
204019
204190
  * @param {string} symbol unified market symbol of the market orders were made in
204020
204191
  * @param {int} [since] the earliest time in ms to fetch orders for
204021
- * @param {int} [limit] the maximum number of orde structures to retrieve
204192
+ * @param {int} [limit] the maximum number of order structures to retrieve
204022
204193
  * @param {object} [params] extra parameters specific to the exchange API endpoint
204023
204194
  * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure
204024
204195
  */
@@ -204871,7 +205042,7 @@ class ascendex extends _ascendex_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] *
204871
205042
  * @description watches information on multiple orders made by the user
204872
205043
  * @param {string} symbol unified market symbol of the market orders were made in
204873
205044
  * @param {int} [since] the earliest time in ms to fetch orders for
204874
- * @param {int} [limit] the maximum number of orde structures to retrieve
205045
+ * @param {int} [limit] the maximum number of order structures to retrieve
204875
205046
  * @param {object} [params] extra parameters specific to the exchange API endpoint
204876
205047
  * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
204877
205048
  */
@@ -206347,14 +206518,13 @@ class binance extends _binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
206347
206518
  event = 'ticker';
206348
206519
  }
206349
206520
  let timestamp = undefined;
206350
- const now = this.milliseconds();
206351
206521
  if (event === 'bookTicker') {
206352
206522
  // take the event timestamp, if available, for spot tickers it is not
206353
- timestamp = this.safeInteger(message, 'E', now);
206523
+ timestamp = this.safeInteger(message, 'E');
206354
206524
  }
206355
206525
  else {
206356
206526
  // take the timestamp of the closing price for candlestick streams
206357
- timestamp = this.safeInteger(message, 'C', now);
206527
+ timestamp = this.safeInteger(message, 'C');
206358
206528
  }
206359
206529
  const marketId = this.safeString(message, 's');
206360
206530
  const symbol = this.safeSymbol(marketId, undefined, undefined, marketType);
@@ -207333,7 +207503,7 @@ class binance extends _binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
207333
207503
  * @description watches information on multiple orders made by the user
207334
207504
  * @param {string} symbol unified market symbol of the market orders were made in
207335
207505
  * @param {int} [since] the earliest time in ms to fetch orders for
207336
- * @param {int} [limit] the maximum number of orde structures to retrieve
207506
+ * @param {int} [limit] the maximum number of order structures to retrieve
207337
207507
  * @param {object} [params] extra parameters specific to the exchange API endpoint
207338
207508
  * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
207339
207509
  */
@@ -207889,7 +208059,7 @@ class binance extends _binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
207889
208059
  * @description watches information on multiple trades made by the user
207890
208060
  * @param {string} symbol unified market symbol of the market orders were made in
207891
208061
  * @param {int} [since] the earliest time in ms to fetch orders for
207892
- * @param {int} [limit] the maximum number of orde structures to retrieve
208062
+ * @param {int} [limit] the maximum number of order structures to retrieve
207893
208063
  * @param {object} [params] extra parameters specific to the exchange API endpoint
207894
208064
  * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure
207895
208065
  */
@@ -208361,7 +208531,7 @@ class bingx extends _bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
208361
208531
  * @see https://bingx-api.github.io/docs/#/swapV2/socket/market.html#Subscribe%20the%20Latest%20Trade%20Detail
208362
208532
  * @param {string} symbol unified market symbol of the market orders were made in
208363
208533
  * @param {int} [since] the earliest time in ms to fetch orders for
208364
- * @param {int} [limit] the maximum number of orde structures to retrieve
208534
+ * @param {int} [limit] the maximum number of order structures to retrieve
208365
208535
  * @param {object} [params] extra parameters specific to the exchange API endpoint
208366
208536
  * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure
208367
208537
  */
@@ -208589,8 +208759,11 @@ class bingx extends _bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
208589
208759
  // "t": 1696687440000
208590
208760
  // }
208591
208761
  //
208762
+ // for spot, opening-time (t) is used instead of closing-time (T), to be compatible with fetchOHLCV
208763
+ // for swap, (T) is the opening time
208764
+ const timestamp = (market['spot']) ? 't' : 'T';
208592
208765
  return [
208593
- this.safeInteger(ohlcv, 't'),
208766
+ this.safeInteger(ohlcv, timestamp),
208594
208767
  this.safeNumber(ohlcv, 'o'),
208595
208768
  this.safeNumber(ohlcv, 'h'),
208596
208769
  this.safeNumber(ohlcv, 'l'),
@@ -208718,7 +208891,7 @@ class bingx extends _bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
208718
208891
  * @description watches information on multiple orders made by the user
208719
208892
  * @param {string} symbol unified market symbol of the market orders were made in
208720
208893
  * @param {int} [since] the earliest time in ms to fetch orders for
208721
- * @param {int} [limit] the maximum number of orde structures to retrieve
208894
+ * @param {int} [limit] the maximum number of order structures to retrieve
208722
208895
  * @param {object} [params] extra parameters specific to the exchange API endpoint
208723
208896
  * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
208724
208897
  */
@@ -209472,7 +209645,6 @@ class bitfinex extends _bitfinex_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] *
209472
209645
  // 220.05, // 10 LOW float Daily low
209473
209646
  // ]
209474
209647
  //
209475
- const timestamp = this.milliseconds();
209476
209648
  const marketId = this.safeString(subscription, 'pair');
209477
209649
  const symbol = this.safeSymbol(marketId);
209478
209650
  const channel = 'ticker';
@@ -209485,8 +209657,8 @@ class bitfinex extends _bitfinex_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] *
209485
209657
  }
209486
209658
  const result = {
209487
209659
  'symbol': symbol,
209488
- 'timestamp': timestamp,
209489
- 'datetime': this.iso8601(timestamp),
209660
+ 'timestamp': undefined,
209661
+ 'datetime': undefined,
209490
209662
  'high': this.safeFloat(message, 9),
209491
209663
  'low': this.safeFloat(message, 10),
209492
209664
  'bid': this.safeFloat(message, 1),
@@ -209721,7 +209893,7 @@ class bitfinex extends _bitfinex_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] *
209721
209893
  * @description watches information on multiple orders made by the user
209722
209894
  * @param {string} symbol unified market symbol of the market orders were made in
209723
209895
  * @param {int} [since] the earliest time in ms to fetch orders for
209724
- * @param {int} [limit] the maximum number of orde structures to retrieve
209896
+ * @param {int} [limit] the maximum number of order structures to retrieve
209725
209897
  * @param {object} [params] extra parameters specific to the exchange API endpoint
209726
209898
  * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
209727
209899
  */
@@ -210828,7 +211000,7 @@ class bitfinex2 extends _bitfinex2_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
210828
211000
  * @description watches information on multiple orders made by the user
210829
211001
  * @param {string} symbol unified market symbol of the market orders were made in
210830
211002
  * @param {int} [since] the earliest time in ms to fetch orders for
210831
- * @param {int} [limit] the maximum number of orde structures to retrieve
211003
+ * @param {int} [limit] the maximum number of order structures to retrieve
210832
211004
  * @param {object} [params] extra parameters specific to the exchange API endpoint
210833
211005
  * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure
210834
211006
  */
@@ -215081,7 +215253,7 @@ class bitmex extends _bitmex_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z
215081
215253
  * @description watches information on multiple orders made by the user
215082
215254
  * @param {string} symbol unified market symbol of the market orders were made in
215083
215255
  * @param {int} [since] the earliest time in ms to fetch orders for
215084
- * @param {int} [limit] the maximum number of orde structures to retrieve
215256
+ * @param {int} [limit] the maximum number of order structures to retrieve
215085
215257
  * @param {object} [params] extra parameters specific to the exchange API endpoint
215086
215258
  * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
215087
215259
  */
@@ -216622,7 +216794,7 @@ class bitpanda extends _bitpanda_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] *
216622
216794
  * @description watches information on multiple orders made by the user
216623
216795
  * @param {string} symbol unified market symbol of the market orders were made in
216624
216796
  * @param {int} [since] the earliest time in ms to fetch orders for
216625
- * @param {int} [limit] the maximum number of orde structures to retrieve
216797
+ * @param {int} [limit] the maximum number of order structures to retrieve
216626
216798
  * @param {object} [params] extra parameters specific to the exchange API endpoint
216627
216799
  * @param {string} [params.channel] can listen to orders using ACCOUNT_HISTORY or TRADING
216628
216800
  * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
@@ -219696,7 +219868,7 @@ class blockchaincom extends _blockchaincom_js__WEBPACK_IMPORTED_MODULE_0__/* ["d
219696
219868
  * @see https://exchange.blockchain.com/api/#mass-order-status-request-ordermassstatusrequest
219697
219869
  * @param {string} symbol unified market symbol of the market orders were made in
219698
219870
  * @param {int} [since] the earliest time in ms to fetch orders for
219699
- * @param {int} [limit] the maximum number of orde structures to retrieve
219871
+ * @param {int} [limit] the maximum number of order structures to retrieve
219700
219872
  * @param {object} [params] extra parameters specific to the exchange API endpoint
219701
219873
  * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
219702
219874
  */
@@ -220899,7 +221071,7 @@ class bybit extends _bybit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
220899
221071
  * @see https://bybit-exchange.github.io/docs/v5/websocket/private/execution
220900
221072
  * @param {string} symbol unified market symbol of the market orders were made in
220901
221073
  * @param {int} [since] the earliest time in ms to fetch orders for
220902
- * @param {int} [limit] the maximum number of orde structures to retrieve
221074
+ * @param {int} [limit] the maximum number of order structures to retrieve
220903
221075
  * @param {object} [params] extra parameters specific to the exchange API endpoint
220904
221076
  * @param {boolean} [params.unifiedMargin] use unified margin account
220905
221077
  * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure
@@ -221164,7 +221336,7 @@ class bybit extends _bybit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
221164
221336
  * @see https://bybit-exchange.github.io/docs/v5/websocket/private/order
221165
221337
  * @param {string} symbol unified market symbol of the market orders were made in
221166
221338
  * @param {int} [since] the earliest time in ms to fetch orders for
221167
- * @param {int} [limit] the maximum number of orde structures to retrieve
221339
+ * @param {int} [limit] the maximum number of order structures to retrieve
221168
221340
  * @param {object} [params] extra parameters specific to the exchange API endpoint
221169
221341
  * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure
221170
221342
  */
@@ -222702,7 +222874,7 @@ class cex extends _cex_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
222702
222874
  'rate': undefined,
222703
222875
  };
222704
222876
  }
222705
- const timestamp = this.safeInteger(data, 'time', this.milliseconds());
222877
+ const timestamp = this.safeInteger(data, 'time');
222706
222878
  order['timestamp'] = timestamp;
222707
222879
  order['datetime'] = this.iso8601(timestamp);
222708
222880
  order = this.safeOrder(order);
@@ -223756,7 +223928,7 @@ class coinbase extends _coinbase_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] *
223756
223928
  * @see https://docs.cloud.coinbase.com/advanced-trade-api/docs/ws-channels#user-channel
223757
223929
  * @param {string} [symbol] unified market symbol of the market orders were made in
223758
223930
  * @param {int} [since] the earliest time in ms to fetch orders for
223759
- * @param {int} [limit] the maximum number of orde structures to retrieve
223931
+ * @param {int} [limit] the maximum number of order structures to retrieve
223760
223932
  * @param {object} [params] extra parameters specific to the exchange API endpoint
223761
223933
  * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
223762
223934
  */
@@ -224324,7 +224496,7 @@ class coinbasepro extends _coinbasepro_js__WEBPACK_IMPORTED_MODULE_0__/* ["defau
224324
224496
  * @description watches information on multiple orders made by the user
224325
224497
  * @param {string} symbol unified market symbol of the market orders were made in
224326
224498
  * @param {int} [since] the earliest time in ms to fetch orders for
224327
- * @param {int} [limit] the maximum number of orde structures to retrieve
224499
+ * @param {int} [limit] the maximum number of order structures to retrieve
224328
224500
  * @param {object} [params] extra parameters specific to the exchange API endpoint
224329
224501
  * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
224330
224502
  */
@@ -228171,7 +228343,7 @@ class deribit extends _deribit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
228171
228343
  * @description watches information on multiple orders made by the user
228172
228344
  * @param {string} symbol unified market symbol of the market orders were made in
228173
228345
  * @param {int} [since] the earliest time in ms to fetch orders for
228174
- * @param {int} [limit] the maximum number of orde structures to retrieve
228346
+ * @param {int} [limit] the maximum number of order structures to retrieve
228175
228347
  * @param {object} [params] extra parameters specific to the exchange API endpoint
228176
228348
  * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure
228177
228349
  */
@@ -229883,7 +230055,7 @@ class gate extends _gate_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
229883
230055
  // }
229884
230056
  //
229885
230057
  const result = this.safeValue(message, 'result', []);
229886
- const timestamp = this.safeInteger(message, 'time');
230058
+ const timestamp = this.safeInteger(message, 'time_ms');
229887
230059
  this.balance['info'] = result;
229888
230060
  this.balance['timestamp'] = timestamp;
229889
230061
  this.balance['datetime'] = this.iso8601(timestamp);
@@ -229959,7 +230131,7 @@ class gate extends _gate_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
229959
230131
  if (this.newUpdates) {
229960
230132
  return positions;
229961
230133
  }
229962
- return this.filterBySymbolsSinceLimit(this.positions, symbols, since, limit, true);
230134
+ return this.filterBySymbolsSinceLimit(this.positions[type], symbols, since, limit, true);
229963
230135
  }
229964
230136
  setPositionsCache(client, type, symbols = undefined) {
229965
230137
  if (this.positions === undefined) {
@@ -230054,7 +230226,7 @@ class gate extends _gate_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
230054
230226
  * @description watches information on multiple orders made by the user
230055
230227
  * @param {string} symbol unified market symbol of the market orders were made in
230056
230228
  * @param {int} [since] the earliest time in ms to fetch orders for
230057
- * @param {int} [limit] the maximum number of orde structures to retrieve
230229
+ * @param {int} [limit] the maximum number of order structures to retrieve
230058
230230
  * @param {object} [params] extra parameters specific to the exchange API endpoint
230059
230231
  * @param {string} [params.type] spot, margin, swap, future, or option. Required if listening to all symbols.
230060
230232
  * @param {boolean} [params.isInverse] if future, listen to inverse or linear contracts
@@ -230887,7 +231059,7 @@ class gemini extends _gemini_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z
230887
231059
  * @see https://docs.gemini.com/websocket-api/#order-events
230888
231060
  * @param {string} symbol unified market symbol of the market orders were made in
230889
231061
  * @param {int} [since] the earliest time in ms to fetch orders for
230890
- * @param {int} [limit] the maximum number of orde structures to retrieve
231062
+ * @param {int} [limit] the maximum number of order structures to retrieve
230891
231063
  * @param {object} [params] extra parameters specific to the exchange API endpoint
230892
231064
  * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
230893
231065
  */
@@ -232721,7 +232893,7 @@ class hollaex extends _hollaex_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
232721
232893
  * @description watches information on multiple orders made by the user
232722
232894
  * @param {string} symbol unified market symbol of the market orders were made in
232723
232895
  * @param {int} [since] the earliest time in ms to fetch orders for
232724
- * @param {int} [limit] the maximum number of orde structures to retrieve
232896
+ * @param {int} [limit] the maximum number of order structures to retrieve
232725
232897
  * @param {object} [params] extra parameters specific to the exchange API endpoint
232726
232898
  * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
232727
232899
  */
@@ -233843,7 +234015,7 @@ class htx extends _htx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
233843
234015
  * @description watches information on multiple orders made by the user
233844
234016
  * @param {string} symbol unified market symbol of the market orders were made in
233845
234017
  * @param {int} [since] the earliest time in ms to fetch orders for
233846
- * @param {int} [limit] the maximum number of orde structures to retrieve
234018
+ * @param {int} [limit] the maximum number of order structures to retrieve
233847
234019
  * @param {object} [params] extra parameters specific to the exchange API endpoint
233848
234020
  * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
233849
234021
  */
@@ -236613,7 +236785,7 @@ class idex extends _idex_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
236613
236785
  * @description watches information on multiple orders made by the user
236614
236786
  * @param {string} symbol unified market symbol of the market orders were made in
236615
236787
  * @param {int} [since] the earliest time in ms to fetch orders for
236616
- * @param {int} [limit] the maximum number of orde structures to retrieve
236788
+ * @param {int} [limit] the maximum number of order structures to retrieve
236617
236789
  * @param {object} [params] extra parameters specific to the exchange API endpoint
236618
236790
  * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
236619
236791
  */
@@ -237437,11 +237609,10 @@ class kraken extends _kraken_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z
237437
237609
  quoteVolume = _base_Precise_js__WEBPACK_IMPORTED_MODULE_2__/* .Precise */ .O.stringMul(baseVolume, vwap);
237438
237610
  }
237439
237611
  const last = this.safeString(ticker['c'], 0);
237440
- const timestamp = this.milliseconds();
237441
237612
  const result = this.safeTicker({
237442
237613
  'symbol': symbol,
237443
- 'timestamp': timestamp,
237444
- 'datetime': this.iso8601(timestamp),
237614
+ 'timestamp': undefined,
237615
+ 'datetime': undefined,
237445
237616
  'high': this.safeString(ticker['h'], 0),
237446
237617
  'low': this.safeString(ticker['l'], 0),
237447
237618
  'bid': this.safeString(ticker['b'], 0),
@@ -238106,7 +238277,7 @@ class kraken extends _kraken_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z
238106
238277
  * @param {string} symbol unified market symbol of the market orders were made in
238107
238278
  * @param {int} [since] the earliest time in ms to fetch orders for
238108
238279
  * @param {int} [limit] the maximum number of orde structures to retrieve
238109
- * @param {object} [params] extra parameters specific to the exchange API endpoint
238280
+ * @param {object} [params] maximum number of orderic to the exchange API endpoint
238110
238281
  * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
238111
238282
  */
238112
238283
  return await this.watchPrivate('openOrders', symbol, since, limit, params);
@@ -238866,7 +239037,7 @@ class krakenfutures extends _krakenfutures_js__WEBPACK_IMPORTED_MODULE_0__/* ["d
238866
239037
  * @see https://docs.futures.kraken.com/#websocket-api-private-feeds-fills
238867
239038
  * @param {string} symbol unified market symbol of the market orders were made in
238868
239039
  * @param {int} [since] the earliest time in ms to fetch orders for
238869
- * @param {int} [limit] the maximum number of orde structures to retrieve
239040
+ * @param {int} [limit] the maximum number of order structures to retrieve
238870
239041
  * @param {object} [params] extra parameters specific to the exchange API endpoint
238871
239042
  * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
238872
239043
  */
@@ -241723,7 +241894,7 @@ class kucoinfutures extends _kucoinfutures_js__WEBPACK_IMPORTED_MODULE_0__/* ["d
241723
241894
  * @see https://docs.kucoin.com/futures/#trade-orders-according-to-the-market
241724
241895
  * @param {string} symbol unified market symbol of the market orders were made in
241725
241896
  * @param {int} [since] the earliest time in ms to fetch orders for
241726
- * @param {int} [limit] the maximum number of orde structures to retrieve
241897
+ * @param {int} [limit] the maximum number of order structures to retrieve
241727
241898
  * @param {object} [params] extra parameters specific to the exchange API endpoint
241728
241899
  * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
241729
241900
  */
@@ -243099,7 +243270,7 @@ class mexc extends _mexc_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
243099
243270
  * @description watches information on multiple orders made by the user
243100
243271
  * @param {string} symbol unified market symbol of the market orders were made in
243101
243272
  * @param {int} [since] the earliest time in ms to fetch orders for
243102
- * @param {int} [limit] the maximum number of orde structures to retrieve
243273
+ * @param {int} [limit] the maximum number of order structures to retrieve
243103
243274
  * @param {object} [params] extra parameters specific to the exchange API endpoint
243104
243275
  * @param {string|undefined} params.type the type of orders to retrieve, can be 'spot' or 'margin'
243105
243276
  * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
@@ -244181,7 +244352,7 @@ class okcoin extends _okcoin_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z
244181
244352
  * @description watches information on multiple orders made by the user
244182
244353
  * @param {string} symbol unified market symbol of the market orders were made in
244183
244354
  * @param {int} [since] the earliest time in ms to fetch orders for
244184
- * @param {int} [limit] the maximum number of orde structures to retrieve
244355
+ * @param {int} [limit] the maximum number of order structures to retrieve
244185
244356
  * @param {object} [params] extra parameters specific to the exchange API endpoint
244186
244357
  * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
244187
244358
  */
@@ -245651,7 +245822,7 @@ class okx extends _okx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
245651
245822
  'side': this.safeString(order, 'side'),
245652
245823
  'price': this.safeNumber(info, 'fillPx'),
245653
245824
  'amount': this.safeNumber(info, 'fillSz'),
245654
- 'cost': undefined,
245825
+ 'cost': this.safeNumber(order, 'cost'),
245655
245826
  'fee': {
245656
245827
  'cost': this.safeNumber(info, 'fillFee'),
245657
245828
  'currency': this.safeCurrencyCode(feeMarketId),
@@ -245827,7 +245998,7 @@ class okx extends _okx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
245827
245998
  * @description watches information on multiple orders made by the user
245828
245999
  * @param {string} [symbol] unified market symbol of the market orders were made in
245829
246000
  * @param {int} [since] the earliest time in ms to fetch orders for
245830
- * @param {int} [limit] the maximum number of orde structures to retrieve
246001
+ * @param {int} [limit] the maximum number of order structures to retrieve
245831
246002
  * @param {object} [params] extra parameters specific to the exchange API endpoint
245832
246003
  * @param {bool} [params.stop] true if fetching trigger or conditional orders
245833
246004
  * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
@@ -247316,7 +247487,7 @@ class phemex extends _phemex_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z
247316
247487
  * @description watches information on multiple orders made by the user
247317
247488
  * @param {string} symbol unified market symbol of the market orders were made in
247318
247489
  * @param {int} [since] the earliest time in ms to fetch orders for
247319
- * @param {int} [limit] the maximum number of orde structures to retrieve
247490
+ * @param {int} [limit] the maximum number of order structures to retrieve
247320
247491
  * @param {object} [params] extra parameters specific to the exchange API endpoint
247321
247492
  * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
247322
247493
  */
@@ -249510,7 +249681,7 @@ class poloniexfutures extends _poloniexfutures_js__WEBPACK_IMPORTED_MODULE_0__/*
249510
249681
  * @see https://futures-docs.poloniex.com/#private-messages
249511
249682
  * @param {string} symbol filter by unified market symbol of the market orders were made in
249512
249683
  * @param {int} [since] the earliest time in ms to fetch orders for
249513
- * @param {int} [limit] the maximum number of orde structures to retrieve
249684
+ * @param {int} [limit] the maximum number of order structures to retrieve
249514
249685
  * @param {object} [params] extra parameters specific to the exchange API endpoint
249515
249686
  * @param {string} [params.method] the method to use will default to /contractMarket/tradeOrders. Set to /contractMarket/advancedOrders to watch stop orders
249516
249687
  * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
@@ -252937,11 +253108,10 @@ class woo extends _woo_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
252937
253108
  // "count": 3689
252938
253109
  // }
252939
253110
  //
252940
- const timestamp = this.safeInteger(ticker, 'date', this.milliseconds());
252941
253111
  return this.safeTicker({
252942
253112
  'symbol': this.safeSymbol(undefined, market),
252943
- 'timestamp': timestamp,
252944
- 'datetime': this.iso8601(timestamp),
253113
+ 'timestamp': undefined,
253114
+ 'datetime': undefined,
252945
253115
  'high': this.safeString(ticker, 'high'),
252946
253116
  'low': this.safeString(ticker, 'low'),
252947
253117
  'bid': undefined,
@@ -254628,7 +254798,7 @@ class probit extends _abstract_probit_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
254628
254798
  * @description fetches information on multiple closed orders made by the user
254629
254799
  * @param {string} symbol unified market symbol of the market orders were made in
254630
254800
  * @param {int} [since] the earliest time in ms to fetch orders for
254631
- * @param {int} [limit] the maximum number of orde structures to retrieve
254801
+ * @param {int} [limit] the maximum number of order structures to retrieve
254632
254802
  * @param {object} [params] extra parameters specific to the exchange API endpoint
254633
254803
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
254634
254804
  */
@@ -265376,7 +265546,7 @@ class timex extends _abstract_timex_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
265376
265546
  * @description fetches information on multiple closed orders made by the user
265377
265547
  * @param {string} symbol unified market symbol of the market orders were made in
265378
265548
  * @param {int} [since] the earliest time in ms to fetch orders for
265379
- * @param {int} [limit] the maximum number of orde structures to retrieve
265549
+ * @param {int} [limit] the maximum number of order structures to retrieve
265380
265550
  * @param {object} [params] extra parameters specific to the exchange API endpoint
265381
265551
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
265382
265552
  */
@@ -267853,7 +268023,7 @@ class tokocrypto extends _abstract_tokocrypto_js__WEBPACK_IMPORTED_MODULE_0__/*
267853
268023
  * @description fetches information on multiple closed orders made by the user
267854
268024
  * @param {string} symbol unified market symbol of the market orders were made in
267855
268025
  * @param {int} [since] the earliest time in ms to fetch orders for
267856
- * @param {int} [limit] the maximum number of orde structures to retrieve
268026
+ * @param {int} [limit] the maximum number of order structures to retrieve
267857
268027
  * @param {object} [params] extra parameters specific to the exchange API endpoint
267858
268028
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
267859
268029
  */
@@ -270024,7 +270194,7 @@ class upbit extends _abstract_upbit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
270024
270194
  * @description fetches information on multiple closed orders made by the user
270025
270195
  * @param {string} symbol unified market symbol of the market orders were made in
270026
270196
  * @param {int} [since] the earliest time in ms to fetch orders for
270027
- * @param {int} [limit] the maximum number of orde structures to retrieve
270197
+ * @param {int} [limit] the maximum number of order structures to retrieve
270028
270198
  * @param {object} [params] extra parameters specific to the exchange API endpoint
270029
270199
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
270030
270200
  */
@@ -271990,7 +272160,7 @@ class wavesexchange extends _abstract_wavesexchange_js__WEBPACK_IMPORTED_MODULE_
271990
272160
  * @description fetches information on multiple closed orders made by the user
271991
272161
  * @param {string} symbol unified market symbol of the market orders were made in
271992
272162
  * @param {int} [since] the earliest time in ms to fetch orders for
271993
- * @param {int} [limit] the maximum number of orde structures to retrieve
272163
+ * @param {int} [limit] the maximum number of order structures to retrieve
271994
272164
  * @param {object} [params] extra parameters specific to the exchange API endpoint
271995
272165
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
271996
272166
  */
@@ -275344,7 +275514,7 @@ class whitebit extends _abstract_whitebit_js__WEBPACK_IMPORTED_MODULE_0__/* ["de
275344
275514
  * @see https://docs.whitebit.com/private/http-trade-v4/#query-executed-orders
275345
275515
  * @param {string} symbol unified market symbol of the market orders were made in
275346
275516
  * @param {int} [since] the earliest time in ms to fetch orders for
275347
- * @param {int} [limit] the maximum number of orde structures to retrieve
275517
+ * @param {int} [limit] the maximum number of order structures to retrieve
275348
275518
  * @param {object} [params] extra parameters specific to the exchange API endpoint
275349
275519
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
275350
275520
  */
@@ -277446,7 +277616,7 @@ class woo extends _abstract_woo_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
277446
277616
  * @description fetches information on multiple orders made by the user
277447
277617
  * @param {string} symbol unified market symbol of the market orders were made in
277448
277618
  * @param {int} [since] the earliest time in ms to fetch orders for
277449
- * @param {int} [limit] the maximum number of orde structures to retrieve
277619
+ * @param {int} [limit] the maximum number of order structures to retrieve
277450
277620
  * @param {object} [params] extra parameters specific to the exchange API endpoint
277451
277621
  * @param {boolean} [params.stop] whether the order is a stop/algo order
277452
277622
  * @param {boolean} [params.isTriggered] whether the order has been triggered (false by default)
@@ -280243,752 +280413,6 @@ class yobit extends _abstract_yobit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
280243
280413
  }
280244
280414
 
280245
280415
 
280246
- /***/ }),
280247
-
280248
- /***/ 5934:
280249
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
280250
-
280251
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
280252
- /* harmony export */ Z: () => (/* binding */ zaif)
280253
- /* harmony export */ });
280254
- /* harmony import */ var _abstract_zaif_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5224);
280255
- /* harmony import */ var _base_errors_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6689);
280256
- /* harmony import */ var _base_Precise_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(2194);
280257
- /* harmony import */ var _base_functions_number_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9292);
280258
- /* harmony import */ var _static_dependencies_noble_hashes_sha512_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(7110);
280259
- // ---------------------------------------------------------------------------
280260
-
280261
-
280262
-
280263
-
280264
-
280265
- // ---------------------------------------------------------------------------
280266
- /**
280267
- * @class zaif
280268
- * @augments Exchange
280269
- */
280270
- class zaif extends _abstract_zaif_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
280271
- describe() {
280272
- return this.deepExtend(super.describe(), {
280273
- 'id': 'zaif',
280274
- 'name': 'Zaif',
280275
- 'countries': ['JP'],
280276
- // 10 requests per second = 1000ms / 10 = 100ms between requests (public market endpoints)
280277
- 'rateLimit': 100,
280278
- 'version': '1',
280279
- 'has': {
280280
- 'CORS': undefined,
280281
- 'spot': true,
280282
- 'margin': undefined,
280283
- 'swap': false,
280284
- 'future': false,
280285
- 'option': false,
280286
- 'cancelOrder': true,
280287
- 'createMarketOrder': false,
280288
- 'createOrder': true,
280289
- 'fetchBalance': true,
280290
- 'fetchClosedOrders': true,
280291
- 'fetchFundingHistory': false,
280292
- 'fetchFundingRate': false,
280293
- 'fetchFundingRateHistory': false,
280294
- 'fetchFundingRates': false,
280295
- 'fetchIndexOHLCV': false,
280296
- 'fetchMarkets': true,
280297
- 'fetchMarkOHLCV': false,
280298
- 'fetchOpenInterestHistory': false,
280299
- 'fetchOpenOrders': true,
280300
- 'fetchOrderBook': true,
280301
- 'fetchPremiumIndexOHLCV': false,
280302
- 'fetchTicker': true,
280303
- 'fetchTrades': true,
280304
- 'fetchTradingFee': false,
280305
- 'fetchTradingFees': false,
280306
- 'withdraw': true,
280307
- },
280308
- 'urls': {
280309
- 'logo': 'https://user-images.githubusercontent.com/1294454/27766927-39ca2ada-5eeb-11e7-972f-1b4199518ca6.jpg',
280310
- 'api': {
280311
- 'rest': 'https://api.zaif.jp',
280312
- },
280313
- 'www': 'https://zaif.jp',
280314
- 'doc': [
280315
- 'https://techbureau-api-document.readthedocs.io/ja/latest/index.html',
280316
- 'https://corp.zaif.jp/api-docs',
280317
- 'https://corp.zaif.jp/api-docs/api_links',
280318
- 'https://www.npmjs.com/package/zaif.jp',
280319
- 'https://github.com/you21979/node-zaif',
280320
- ],
280321
- 'fees': 'https://zaif.jp/fee?lang=en',
280322
- },
280323
- 'fees': {
280324
- 'trading': {
280325
- 'percentage': true,
280326
- 'taker': this.parseNumber('0.001'),
280327
- 'maker': this.parseNumber('0'),
280328
- },
280329
- },
280330
- 'api': {
280331
- 'public': {
280332
- 'get': {
280333
- 'depth/{pair}': 1,
280334
- 'currencies/{pair}': 1,
280335
- 'currencies/all': 1,
280336
- 'currency_pairs/{pair}': 1,
280337
- 'currency_pairs/all': 1,
280338
- 'last_price/{pair}': 1,
280339
- 'ticker/{pair}': 1,
280340
- 'trades/{pair}': 1,
280341
- },
280342
- },
280343
- 'private': {
280344
- 'post': {
280345
- 'active_orders': 5,
280346
- 'cancel_order': 5,
280347
- 'deposit_history': 5,
280348
- 'get_id_info': 5,
280349
- 'get_info': 10,
280350
- 'get_info2': 5,
280351
- 'get_personal_info': 5,
280352
- 'trade': 5,
280353
- 'trade_history': 50,
280354
- 'withdraw': 5,
280355
- 'withdraw_history': 5,
280356
- },
280357
- },
280358
- 'ecapi': {
280359
- 'post': {
280360
- 'createInvoice': 1,
280361
- 'getInvoice': 1,
280362
- 'getInvoiceIdsByOrderNumber': 1,
280363
- 'cancelInvoice': 1,
280364
- },
280365
- },
280366
- 'tlapi': {
280367
- 'post': {
280368
- 'get_positions': 66,
280369
- 'position_history': 66,
280370
- 'active_positions': 5,
280371
- 'create_position': 33,
280372
- 'change_position': 33,
280373
- 'cancel_position': 33, // 3 in 10 seconds
280374
- },
280375
- },
280376
- 'fapi': {
280377
- 'get': {
280378
- 'groups/{group_id}': 1,
280379
- 'last_price/{group_id}/{pair}': 1,
280380
- 'ticker/{group_id}/{pair}': 1,
280381
- 'trades/{group_id}/{pair}': 1,
280382
- 'depth/{group_id}/{pair}': 1,
280383
- },
280384
- },
280385
- },
280386
- 'options': {},
280387
- 'precisionMode': _base_functions_number_js__WEBPACK_IMPORTED_MODULE_1__/* .TICK_SIZE */ .sh,
280388
- 'exceptions': {
280389
- 'exact': {
280390
- 'unsupported currency_pair': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest, // {"error": "unsupported currency_pair"}
280391
- },
280392
- 'broad': {},
280393
- },
280394
- });
280395
- }
280396
- async fetchMarkets(params = {}) {
280397
- /**
280398
- * @method
280399
- * @name zaif#fetchMarkets
280400
- * @see https://zaif-api-document.readthedocs.io/ja/latest/PublicAPI.html#id12
280401
- * @description retrieves data on all markets for zaif
280402
- * @param {object} [params] extra parameters specific to the exchange API endpoint
280403
- * @returns {object[]} an array of objects representing market data
280404
- */
280405
- const markets = await this.publicGetCurrencyPairsAll(params);
280406
- //
280407
- // [
280408
- // {
280409
- // "aux_unit_point": 0,
280410
- // "item_japanese": "\u30d3\u30c3\u30c8\u30b3\u30a4\u30f3",
280411
- // "aux_unit_step": 5.0,
280412
- // "description": "\u30d3\u30c3\u30c8\u30b3\u30a4\u30f3\u30fb\u65e5\u672c\u5186\u306e\u53d6\u5f15\u3092\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059",
280413
- // "item_unit_min": 0.001,
280414
- // "event_number": 0,
280415
- // "currency_pair": "btc_jpy",
280416
- // "is_token": false,
280417
- // "aux_unit_min": 5.0,
280418
- // "aux_japanese": "\u65e5\u672c\u5186",
280419
- // "id": 1,
280420
- // "item_unit_step": 0.0001,
280421
- // "name": "BTC/JPY",
280422
- // "seq": 0,
280423
- // "title": "BTC/JPY"
280424
- // }
280425
- // ]
280426
- //
280427
- return this.parseMarkets(markets);
280428
- }
280429
- parseMarket(market) {
280430
- const id = this.safeString(market, 'currency_pair');
280431
- const name = this.safeString(market, 'name');
280432
- const [baseId, quoteId] = name.split('/');
280433
- const base = this.safeCurrencyCode(baseId);
280434
- const quote = this.safeCurrencyCode(quoteId);
280435
- const symbol = base + '/' + quote;
280436
- return {
280437
- 'id': id,
280438
- 'symbol': symbol,
280439
- 'base': base,
280440
- 'quote': quote,
280441
- 'settle': undefined,
280442
- 'baseId': baseId,
280443
- 'quoteId': quoteId,
280444
- 'settleId': undefined,
280445
- 'type': 'spot',
280446
- 'spot': true,
280447
- 'margin': undefined,
280448
- 'swap': false,
280449
- 'future': false,
280450
- 'option': false,
280451
- 'active': undefined,
280452
- 'contract': false,
280453
- 'linear': undefined,
280454
- 'inverse': undefined,
280455
- 'contractSize': undefined,
280456
- 'expiry': undefined,
280457
- 'expiryDatetime': undefined,
280458
- 'strike': undefined,
280459
- 'optionType': undefined,
280460
- 'precision': {
280461
- 'amount': this.safeNumber(market, 'item_unit_step'),
280462
- 'price': this.parseNumber(this.parsePrecision(this.safeString(market, 'aux_unit_point'))),
280463
- },
280464
- 'limits': {
280465
- 'leverage': {
280466
- 'min': undefined,
280467
- 'max': undefined,
280468
- },
280469
- 'amount': {
280470
- 'min': this.safeNumber(market, 'item_unit_min'),
280471
- 'max': undefined,
280472
- },
280473
- 'price': {
280474
- 'min': this.safeNumber(market, 'aux_unit_min'),
280475
- 'max': undefined,
280476
- },
280477
- 'cost': {
280478
- 'min': undefined,
280479
- 'max': undefined,
280480
- },
280481
- },
280482
- 'created': undefined,
280483
- 'info': market,
280484
- };
280485
- }
280486
- parseBalance(response) {
280487
- const balances = this.safeValue(response, 'return', {});
280488
- const deposit = this.safeValue(balances, 'deposit');
280489
- const result = {
280490
- 'info': response,
280491
- 'timestamp': undefined,
280492
- 'datetime': undefined,
280493
- };
280494
- const funds = this.safeValue(balances, 'funds', {});
280495
- const currencyIds = Object.keys(funds);
280496
- for (let i = 0; i < currencyIds.length; i++) {
280497
- const currencyId = currencyIds[i];
280498
- const code = this.safeCurrencyCode(currencyId);
280499
- const balance = this.safeString(funds, currencyId);
280500
- const account = this.account();
280501
- account['free'] = balance;
280502
- account['total'] = balance;
280503
- if (deposit !== undefined) {
280504
- if (currencyId in deposit) {
280505
- account['total'] = this.safeString(deposit, currencyId);
280506
- }
280507
- }
280508
- result[code] = account;
280509
- }
280510
- return this.safeBalance(result);
280511
- }
280512
- async fetchBalance(params = {}) {
280513
- /**
280514
- * @method
280515
- * @name zaif#fetchBalance
280516
- * @see https://zaif-api-document.readthedocs.io/ja/latest/TradingAPI.html#id10
280517
- * @description query for balance and get the amount of funds available for trading or funds locked in orders
280518
- * @param {object} [params] extra parameters specific to the exchange API endpoint
280519
- * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
280520
- */
280521
- await this.loadMarkets();
280522
- const response = await this.privatePostGetInfo(params);
280523
- return this.parseBalance(response);
280524
- }
280525
- async fetchOrderBook(symbol, limit = undefined, params = {}) {
280526
- /**
280527
- * @method
280528
- * @name zaif#fetchOrderBook
280529
- * @see https://zaif-api-document.readthedocs.io/ja/latest/PublicAPI.html#id34
280530
- * @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
280531
- * @param {string} symbol unified symbol of the market to fetch the order book for
280532
- * @param {int} [limit] the maximum amount of order book entries to return
280533
- * @param {object} [params] extra parameters specific to the exchange API endpoint
280534
- * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
280535
- */
280536
- await this.loadMarkets();
280537
- const market = this.market(symbol);
280538
- const request = {
280539
- 'pair': market['id'],
280540
- };
280541
- const response = await this.publicGetDepthPair(this.extend(request, params));
280542
- return this.parseOrderBook(response, market['symbol']);
280543
- }
280544
- parseTicker(ticker, market = undefined) {
280545
- //
280546
- // {
280547
- // "last": 9e-08,
280548
- // "high": 1e-07,
280549
- // "low": 9e-08,
280550
- // "vwap": 0.0,
280551
- // "volume": 135250.0,
280552
- // "bid": 9e-08,
280553
- // "ask": 1e-07
280554
- // }
280555
- //
280556
- const symbol = this.safeSymbol(undefined, market);
280557
- const vwap = this.safeString(ticker, 'vwap');
280558
- const baseVolume = this.safeString(ticker, 'volume');
280559
- const quoteVolume = _base_Precise_js__WEBPACK_IMPORTED_MODULE_3__/* .Precise */ .O.stringMul(baseVolume, vwap);
280560
- const last = this.safeString(ticker, 'last');
280561
- return this.safeTicker({
280562
- 'symbol': symbol,
280563
- 'timestamp': undefined,
280564
- 'datetime': undefined,
280565
- 'high': this.safeString(ticker, 'high'),
280566
- 'low': this.safeString(ticker, 'low'),
280567
- 'bid': this.safeString(ticker, 'bid'),
280568
- 'bidVolume': undefined,
280569
- 'ask': this.safeString(ticker, 'ask'),
280570
- 'askVolume': undefined,
280571
- 'vwap': vwap,
280572
- 'open': undefined,
280573
- 'close': last,
280574
- 'last': last,
280575
- 'previousClose': undefined,
280576
- 'change': undefined,
280577
- 'percentage': undefined,
280578
- 'average': undefined,
280579
- 'baseVolume': baseVolume,
280580
- 'quoteVolume': quoteVolume,
280581
- 'info': ticker,
280582
- }, market);
280583
- }
280584
- async fetchTicker(symbol, params = {}) {
280585
- /**
280586
- * @method
280587
- * @name zaif#fetchTicker
280588
- * @see https://zaif-api-document.readthedocs.io/ja/latest/PublicAPI.html#id22
280589
- * @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
280590
- * @param {string} symbol unified symbol of the market to fetch the ticker for
280591
- * @param {object} [params] extra parameters specific to the exchange API endpoint
280592
- * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
280593
- */
280594
- await this.loadMarkets();
280595
- const market = this.market(symbol);
280596
- const request = {
280597
- 'pair': market['id'],
280598
- };
280599
- const ticker = await this.publicGetTickerPair(this.extend(request, params));
280600
- //
280601
- // {
280602
- // "last": 9e-08,
280603
- // "high": 1e-07,
280604
- // "low": 9e-08,
280605
- // "vwap": 0.0,
280606
- // "volume": 135250.0,
280607
- // "bid": 9e-08,
280608
- // "ask": 1e-07
280609
- // }
280610
- //
280611
- return this.parseTicker(ticker, market);
280612
- }
280613
- parseTrade(trade, market = undefined) {
280614
- //
280615
- // fetchTrades (public)
280616
- //
280617
- // {
280618
- // "date": 1648559414,
280619
- // "price": 5880375.0,
280620
- // "amount": 0.017,
280621
- // "tid": 176126557,
280622
- // "currency_pair": "btc_jpy",
280623
- // "trade_type": "ask"
280624
- // }
280625
- //
280626
- let side = this.safeString(trade, 'trade_type');
280627
- side = (side === 'bid') ? 'buy' : 'sell';
280628
- const timestamp = this.safeTimestamp(trade, 'date');
280629
- const id = this.safeString2(trade, 'id', 'tid');
280630
- const priceString = this.safeString(trade, 'price');
280631
- const amountString = this.safeString(trade, 'amount');
280632
- const marketId = this.safeString(trade, 'currency_pair');
280633
- const symbol = this.safeSymbol(marketId, market, '_');
280634
- return this.safeTrade({
280635
- 'id': id,
280636
- 'info': trade,
280637
- 'timestamp': timestamp,
280638
- 'datetime': this.iso8601(timestamp),
280639
- 'symbol': symbol,
280640
- 'type': undefined,
280641
- 'side': side,
280642
- 'order': undefined,
280643
- 'takerOrMaker': undefined,
280644
- 'price': priceString,
280645
- 'amount': amountString,
280646
- 'cost': undefined,
280647
- 'fee': undefined,
280648
- }, market);
280649
- }
280650
- async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {
280651
- /**
280652
- * @method
280653
- * @name zaif#fetchTrades
280654
- * @see https://zaif-api-document.readthedocs.io/ja/latest/PublicAPI.html#id28
280655
- * @description get the list of most recent trades for a particular symbol
280656
- * @param {string} symbol unified symbol of the market to fetch trades for
280657
- * @param {int} [since] timestamp in ms of the earliest trade to fetch
280658
- * @param {int} [limit] the maximum amount of trades to fetch
280659
- * @param {object} [params] extra parameters specific to the exchange API endpoint
280660
- * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
280661
- */
280662
- await this.loadMarkets();
280663
- const market = this.market(symbol);
280664
- const request = {
280665
- 'pair': market['id'],
280666
- };
280667
- let response = await this.publicGetTradesPair(this.extend(request, params));
280668
- //
280669
- // [
280670
- // {
280671
- // "date": 1648559414,
280672
- // "price": 5880375.0,
280673
- // "amount": 0.017,
280674
- // "tid": 176126557,
280675
- // "currency_pair": "btc_jpy",
280676
- // "trade_type": "ask"
280677
- // }, ...
280678
- // ]
280679
- //
280680
- const numTrades = response.length;
280681
- if (numTrades === 1) {
280682
- const firstTrade = response[0];
280683
- if (!Object.keys(firstTrade).length) {
280684
- response = [];
280685
- }
280686
- }
280687
- return this.parseTrades(response, market, since, limit);
280688
- }
280689
- async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
280690
- /**
280691
- * @method
280692
- * @name zaif#createOrder
280693
- * @see https://zaif-api-document.readthedocs.io/ja/latest/MarginTradingAPI.html#id23
280694
- * @description create a trade order
280695
- * @param {string} symbol unified symbol of the market to create an order in
280696
- * @param {string} type must be 'limit'
280697
- * @param {string} side 'buy' or 'sell'
280698
- * @param {float} amount how much of currency you want to trade in units of base currency
280699
- * @param {float} [price] the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
280700
- * @param {object} [params] extra parameters specific to the exchange API endpoint
280701
- * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
280702
- */
280703
- await this.loadMarkets();
280704
- if (type !== 'limit') {
280705
- throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.ExchangeError(this.id + ' createOrder() allows limit orders only');
280706
- }
280707
- const market = this.market(symbol);
280708
- const request = {
280709
- 'currency_pair': market['id'],
280710
- 'action': (side === 'buy') ? 'bid' : 'ask',
280711
- 'amount': amount,
280712
- 'price': price,
280713
- };
280714
- const response = await this.privatePostTrade(this.extend(request, params));
280715
- return this.safeOrder({
280716
- 'info': response,
280717
- 'id': response['return']['order_id'].toString(),
280718
- }, market);
280719
- }
280720
- async cancelOrder(id, symbol = undefined, params = {}) {
280721
- /**
280722
- * @method
280723
- * @name zaif#cancelOrder
280724
- * @see https://zaif-api-document.readthedocs.io/ja/latest/TradingAPI.html#id37
280725
- * @description cancels an open order
280726
- * @param {string} id order id
280727
- * @param {string} symbol not used by zaif cancelOrder ()
280728
- * @param {object} [params] extra parameters specific to the exchange API endpoint
280729
- * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
280730
- */
280731
- const request = {
280732
- 'order_id': id,
280733
- };
280734
- return await this.privatePostCancelOrder(this.extend(request, params));
280735
- }
280736
- parseOrder(order, market = undefined) {
280737
- //
280738
- // {
280739
- // "currency_pair": "btc_jpy",
280740
- // "action": "ask",
280741
- // "amount": 0.03,
280742
- // "price": 56000,
280743
- // "timestamp": 1402021125,
280744
- // "comment" : "demo"
280745
- // }
280746
- //
280747
- let side = this.safeString(order, 'action');
280748
- side = (side === 'bid') ? 'buy' : 'sell';
280749
- const timestamp = this.safeTimestamp(order, 'timestamp');
280750
- const marketId = this.safeString(order, 'currency_pair');
280751
- const symbol = this.safeSymbol(marketId, market, '_');
280752
- const price = this.safeString(order, 'price');
280753
- const amount = this.safeString(order, 'amount');
280754
- const id = this.safeString(order, 'id');
280755
- return this.safeOrder({
280756
- 'id': id,
280757
- 'clientOrderId': undefined,
280758
- 'timestamp': timestamp,
280759
- 'datetime': this.iso8601(timestamp),
280760
- 'lastTradeTimestamp': undefined,
280761
- 'status': 'open',
280762
- 'symbol': symbol,
280763
- 'type': 'limit',
280764
- 'timeInForce': undefined,
280765
- 'postOnly': undefined,
280766
- 'side': side,
280767
- 'price': price,
280768
- 'stopPrice': undefined,
280769
- 'triggerPrice': undefined,
280770
- 'cost': undefined,
280771
- 'amount': amount,
280772
- 'filled': undefined,
280773
- 'remaining': undefined,
280774
- 'trades': undefined,
280775
- 'fee': undefined,
280776
- 'info': order,
280777
- 'average': undefined,
280778
- }, market);
280779
- }
280780
- async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
280781
- /**
280782
- * @method
280783
- * @name zaif#fetchOpenOrders
280784
- * @see https://zaif-api-document.readthedocs.io/ja/latest/MarginTradingAPI.html#id28
280785
- * @description fetch all unfilled currently open orders
280786
- * @param {string} symbol unified market symbol
280787
- * @param {int} [since] the earliest time in ms to fetch open orders for
280788
- * @param {int} [limit] the maximum number of open orders structures to retrieve
280789
- * @param {object} [params] extra parameters specific to the exchange API endpoint
280790
- * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
280791
- */
280792
- await this.loadMarkets();
280793
- let market = undefined;
280794
- const request = {
280795
- // 'is_token': false,
280796
- // 'is_token_both': false,
280797
- };
280798
- if (symbol !== undefined) {
280799
- market = this.market(symbol);
280800
- request['currency_pair'] = market['id'];
280801
- }
280802
- const response = await this.privatePostActiveOrders(this.extend(request, params));
280803
- return this.parseOrders(response['return'], market, since, limit);
280804
- }
280805
- async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
280806
- /**
280807
- * @method
280808
- * @name zaif#fetchClosedOrders
280809
- * @see https://zaif-api-document.readthedocs.io/ja/latest/TradingAPI.html#id24
280810
- * @description fetches information on multiple closed orders made by the user
280811
- * @param {string} symbol unified market symbol of the market orders were made in
280812
- * @param {int} [since] the earliest time in ms to fetch orders for
280813
- * @param {int} [limit] the maximum number of orde structures to retrieve
280814
- * @param {object} [params] extra parameters specific to the exchange API endpoint
280815
- * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
280816
- */
280817
- await this.loadMarkets();
280818
- let market = undefined;
280819
- const request = {
280820
- // 'from': 0,
280821
- // 'count': 1000,
280822
- // 'from_id': 0,
280823
- // 'end_id': 1000,
280824
- // 'order': 'DESC',
280825
- // 'since': 1503821051,
280826
- // 'end': 1503821051,
280827
- // 'is_token': false,
280828
- };
280829
- if (symbol !== undefined) {
280830
- market = this.market(symbol);
280831
- request['currency_pair'] = market['id'];
280832
- }
280833
- const response = await this.privatePostTradeHistory(this.extend(request, params));
280834
- return this.parseOrders(response['return'], market, since, limit);
280835
- }
280836
- async withdraw(code, amount, address, tag = undefined, params = {}) {
280837
- /**
280838
- * @method
280839
- * @name zaif#withdraw
280840
- * @see https://zaif-api-document.readthedocs.io/ja/latest/TradingAPI.html#id41
280841
- * @description make a withdrawal
280842
- * @param {string} code unified currency code
280843
- * @param {float} amount the amount to withdraw
280844
- * @param {string} address the address to withdraw to
280845
- * @param {string} tag
280846
- * @param {object} [params] extra parameters specific to the exchange API endpoint
280847
- * @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}
280848
- */
280849
- [tag, params] = this.handleWithdrawTagAndParams(tag, params);
280850
- this.checkAddress(address);
280851
- await this.loadMarkets();
280852
- const currency = this.currency(code);
280853
- if (code === 'JPY') {
280854
- throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.ExchangeError(this.id + ' withdraw() does not allow ' + code + ' withdrawals');
280855
- }
280856
- const request = {
280857
- 'currency': currency['id'],
280858
- 'amount': amount,
280859
- 'address': address,
280860
- // 'message': 'Hi!', // XEM and others
280861
- // 'opt_fee': 0.003, // BTC and MONA only
280862
- };
280863
- if (tag !== undefined) {
280864
- request['message'] = tag;
280865
- }
280866
- const result = await this.privatePostWithdraw(this.extend(request, params));
280867
- //
280868
- // {
280869
- // "success": 1,
280870
- // "return": {
280871
- // "id": 23634,
280872
- // "fee": 0.001,
280873
- // "txid":,
280874
- // "funds": {
280875
- // "jpy": 15320,
280876
- // "btc": 1.392,
280877
- // "xem": 100.2,
280878
- // "mona": 2600
280879
- // }
280880
- // }
280881
- // }
280882
- //
280883
- const returnData = this.safeValue(result, 'return');
280884
- return this.parseTransaction(returnData, currency);
280885
- }
280886
- parseTransaction(transaction, currency = undefined) {
280887
- //
280888
- // {
280889
- // "id": 23634,
280890
- // "fee": 0.001,
280891
- // "txid":,
280892
- // "funds": {
280893
- // "jpy": 15320,
280894
- // "btc": 1.392,
280895
- // "xem": 100.2,
280896
- // "mona": 2600
280897
- // }
280898
- // }
280899
- //
280900
- currency = this.safeCurrency(undefined, currency);
280901
- let fee = undefined;
280902
- const feeCost = this.safeValue(transaction, 'fee');
280903
- if (feeCost !== undefined) {
280904
- fee = {
280905
- 'cost': feeCost,
280906
- 'currency': currency['code'],
280907
- };
280908
- }
280909
- return {
280910
- 'id': this.safeString(transaction, 'id'),
280911
- 'txid': this.safeString(transaction, 'txid'),
280912
- 'timestamp': undefined,
280913
- 'datetime': undefined,
280914
- 'network': undefined,
280915
- 'addressFrom': undefined,
280916
- 'address': undefined,
280917
- 'addressTo': undefined,
280918
- 'amount': undefined,
280919
- 'type': undefined,
280920
- 'currency': currency['code'],
280921
- 'status': undefined,
280922
- 'updated': undefined,
280923
- 'tagFrom': undefined,
280924
- 'tag': undefined,
280925
- 'tagTo': undefined,
280926
- 'comment': undefined,
280927
- 'internal': undefined,
280928
- 'fee': fee,
280929
- 'info': transaction,
280930
- };
280931
- }
280932
- customNonce() {
280933
- const num = (this.milliseconds() / 1000).toString();
280934
- const nonce = parseFloat(num);
280935
- return nonce.toFixed(8);
280936
- }
280937
- sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
280938
- let url = this.urls['api']['rest'] + '/';
280939
- if (api === 'public') {
280940
- url += 'api/' + this.version + '/' + this.implodeParams(path, params);
280941
- }
280942
- else if (api === 'fapi') {
280943
- url += 'fapi/' + this.version + '/' + this.implodeParams(path, params);
280944
- }
280945
- else {
280946
- this.checkRequiredCredentials();
280947
- if (api === 'ecapi') {
280948
- url += 'ecapi';
280949
- }
280950
- else if (api === 'tlapi') {
280951
- url += 'tlapi';
280952
- }
280953
- else {
280954
- url += 'tapi';
280955
- }
280956
- const nonce = this.customNonce();
280957
- body = this.urlencode(this.extend({
280958
- 'method': path,
280959
- 'nonce': nonce,
280960
- }, params));
280961
- headers = {
280962
- 'Content-Type': 'application/x-www-form-urlencoded',
280963
- 'Key': this.apiKey,
280964
- 'Sign': this.hmac(this.encode(body), this.encode(this.secret), _static_dependencies_noble_hashes_sha512_js__WEBPACK_IMPORTED_MODULE_4__/* .sha512 */ .o),
280965
- };
280966
- }
280967
- return { 'url': url, 'method': method, 'body': body, 'headers': headers };
280968
- }
280969
- handleErrors(httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody) {
280970
- if (response === undefined) {
280971
- return undefined;
280972
- }
280973
- //
280974
- // {"error": "unsupported currency_pair"}
280975
- //
280976
- const feedback = this.id + ' ' + body;
280977
- const error = this.safeString(response, 'error');
280978
- if (error !== undefined) {
280979
- this.throwExactlyMatchedException(this.exceptions['exact'], error, feedback);
280980
- this.throwBroadlyMatchedException(this.exceptions['broad'], error, feedback);
280981
- throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.ExchangeError(feedback); // unknown message
280982
- }
280983
- const success = this.safeValue(response, 'success', true);
280984
- if (!success) {
280985
- throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.ExchangeError(feedback);
280986
- }
280987
- return undefined;
280988
- }
280989
- }
280990
-
280991
-
280992
280416
  /***/ }),
280993
280417
 
280994
280418
  /***/ 5140:
@@ -288032,6 +287456,751 @@ YAHOO.lang = {
288032
287456
  }
288033
287457
  };
288034
287458
 
287459
+ /***/ }),
287460
+
287461
+ /***/ 7558:
287462
+ /***/ (() => {
287463
+
287464
+
287465
+ // ---------------------------------------------------------------------------
287466
+ var __importDefault = (undefined && undefined.__importDefault) || function (mod) {
287467
+ return (mod && mod.__esModule) ? mod : { "default": mod };
287468
+ };
287469
+ Object.defineProperty(exports, "__esModule", { value: true });
287470
+ const zaif_js_1 = __importDefault(require("./abstract/zaif.js"));
287471
+ const errors_js_1 = require("./base/errors.js");
287472
+ const Precise_js_1 = require("./base/Precise.js");
287473
+ const number_js_1 = require("./base/functions/number.js");
287474
+ const sha512_js_1 = require("./static_dependencies/noble-hashes/sha512.js");
287475
+ // ---------------------------------------------------------------------------
287476
+ /**
287477
+ * @class zaif
287478
+ * @extends Exchange
287479
+ */
287480
+ class zaif extends zaif_js_1.default {
287481
+ describe() {
287482
+ return this.deepExtend(super.describe(), {
287483
+ 'id': 'zaif',
287484
+ 'name': 'Zaif',
287485
+ 'countries': ['JP'],
287486
+ // 10 requests per second = 1000ms / 10 = 100ms between requests (public market endpoints)
287487
+ 'rateLimit': 100,
287488
+ 'version': '1',
287489
+ 'has': {
287490
+ 'CORS': undefined,
287491
+ 'spot': true,
287492
+ 'margin': undefined,
287493
+ 'swap': false,
287494
+ 'future': false,
287495
+ 'option': false,
287496
+ 'cancelOrder': true,
287497
+ 'createMarketOrder': false,
287498
+ 'createOrder': true,
287499
+ 'fetchBalance': true,
287500
+ 'fetchClosedOrders': true,
287501
+ 'fetchFundingHistory': false,
287502
+ 'fetchFundingRate': false,
287503
+ 'fetchFundingRateHistory': false,
287504
+ 'fetchFundingRates': false,
287505
+ 'fetchIndexOHLCV': false,
287506
+ 'fetchMarkets': true,
287507
+ 'fetchMarkOHLCV': false,
287508
+ 'fetchOpenInterestHistory': false,
287509
+ 'fetchOpenOrders': true,
287510
+ 'fetchOrderBook': true,
287511
+ 'fetchPremiumIndexOHLCV': false,
287512
+ 'fetchTicker': true,
287513
+ 'fetchTrades': true,
287514
+ 'fetchTradingFee': false,
287515
+ 'fetchTradingFees': false,
287516
+ 'withdraw': true,
287517
+ },
287518
+ 'urls': {
287519
+ 'logo': 'https://user-images.githubusercontent.com/1294454/27766927-39ca2ada-5eeb-11e7-972f-1b4199518ca6.jpg',
287520
+ 'api': {
287521
+ 'rest': 'https://api.zaif.jp',
287522
+ },
287523
+ 'www': 'https://zaif.jp',
287524
+ 'doc': [
287525
+ 'https://techbureau-api-document.readthedocs.io/ja/latest/index.html',
287526
+ 'https://corp.zaif.jp/api-docs',
287527
+ 'https://corp.zaif.jp/api-docs/api_links',
287528
+ 'https://www.npmjs.com/package/zaif.jp',
287529
+ 'https://github.com/you21979/node-zaif',
287530
+ ],
287531
+ 'fees': 'https://zaif.jp/fee?lang=en',
287532
+ },
287533
+ 'fees': {
287534
+ 'trading': {
287535
+ 'percentage': true,
287536
+ 'taker': this.parseNumber('0.001'),
287537
+ 'maker': this.parseNumber('0'),
287538
+ },
287539
+ },
287540
+ 'api': {
287541
+ 'public': {
287542
+ 'get': {
287543
+ 'depth/{pair}': 1,
287544
+ 'currencies/{pair}': 1,
287545
+ 'currencies/all': 1,
287546
+ 'currency_pairs/{pair}': 1,
287547
+ 'currency_pairs/all': 1,
287548
+ 'last_price/{pair}': 1,
287549
+ 'ticker/{pair}': 1,
287550
+ 'trades/{pair}': 1,
287551
+ },
287552
+ },
287553
+ 'private': {
287554
+ 'post': {
287555
+ 'active_orders': 5,
287556
+ 'cancel_order': 5,
287557
+ 'deposit_history': 5,
287558
+ 'get_id_info': 5,
287559
+ 'get_info': 10,
287560
+ 'get_info2': 5,
287561
+ 'get_personal_info': 5,
287562
+ 'trade': 5,
287563
+ 'trade_history': 50,
287564
+ 'withdraw': 5,
287565
+ 'withdraw_history': 5,
287566
+ },
287567
+ },
287568
+ 'ecapi': {
287569
+ 'post': {
287570
+ 'createInvoice': 1,
287571
+ 'getInvoice': 1,
287572
+ 'getInvoiceIdsByOrderNumber': 1,
287573
+ 'cancelInvoice': 1,
287574
+ },
287575
+ },
287576
+ 'tlapi': {
287577
+ 'post': {
287578
+ 'get_positions': 66,
287579
+ 'position_history': 66,
287580
+ 'active_positions': 5,
287581
+ 'create_position': 33,
287582
+ 'change_position': 33,
287583
+ 'cancel_position': 33, // 3 in 10 seconds
287584
+ },
287585
+ },
287586
+ 'fapi': {
287587
+ 'get': {
287588
+ 'groups/{group_id}': 1,
287589
+ 'last_price/{group_id}/{pair}': 1,
287590
+ 'ticker/{group_id}/{pair}': 1,
287591
+ 'trades/{group_id}/{pair}': 1,
287592
+ 'depth/{group_id}/{pair}': 1,
287593
+ },
287594
+ },
287595
+ },
287596
+ 'options': {},
287597
+ 'precisionMode': number_js_1.TICK_SIZE,
287598
+ 'exceptions': {
287599
+ 'exact': {
287600
+ 'unsupported currency_pair': errors_js_1.BadRequest, // {"error": "unsupported currency_pair"}
287601
+ },
287602
+ 'broad': {},
287603
+ },
287604
+ });
287605
+ }
287606
+ async fetchMarkets(params = {}) {
287607
+ /**
287608
+ * @method
287609
+ * @name zaif#fetchMarkets
287610
+ * @see https://zaif-api-document.readthedocs.io/ja/latest/PublicAPI.html#id12
287611
+ * @description retrieves data on all markets for zaif
287612
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
287613
+ * @returns {object[]} an array of objects representing market data
287614
+ */
287615
+ const markets = await this.publicGetCurrencyPairsAll(params);
287616
+ //
287617
+ // [
287618
+ // {
287619
+ // "aux_unit_point": 0,
287620
+ // "item_japanese": "\u30d3\u30c3\u30c8\u30b3\u30a4\u30f3",
287621
+ // "aux_unit_step": 5.0,
287622
+ // "description": "\u30d3\u30c3\u30c8\u30b3\u30a4\u30f3\u30fb\u65e5\u672c\u5186\u306e\u53d6\u5f15\u3092\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059",
287623
+ // "item_unit_min": 0.001,
287624
+ // "event_number": 0,
287625
+ // "currency_pair": "btc_jpy",
287626
+ // "is_token": false,
287627
+ // "aux_unit_min": 5.0,
287628
+ // "aux_japanese": "\u65e5\u672c\u5186",
287629
+ // "id": 1,
287630
+ // "item_unit_step": 0.0001,
287631
+ // "name": "BTC/JPY",
287632
+ // "seq": 0,
287633
+ // "title": "BTC/JPY"
287634
+ // }
287635
+ // ]
287636
+ //
287637
+ return this.parseMarkets(markets);
287638
+ }
287639
+ parseMarket(market) {
287640
+ const id = this.safeString(market, 'currency_pair');
287641
+ const name = this.safeString(market, 'name');
287642
+ const [baseId, quoteId] = name.split('/');
287643
+ const base = this.safeCurrencyCode(baseId);
287644
+ const quote = this.safeCurrencyCode(quoteId);
287645
+ const symbol = base + '/' + quote;
287646
+ return {
287647
+ 'id': id,
287648
+ 'symbol': symbol,
287649
+ 'base': base,
287650
+ 'quote': quote,
287651
+ 'settle': undefined,
287652
+ 'baseId': baseId,
287653
+ 'quoteId': quoteId,
287654
+ 'settleId': undefined,
287655
+ 'type': 'spot',
287656
+ 'spot': true,
287657
+ 'margin': undefined,
287658
+ 'swap': false,
287659
+ 'future': false,
287660
+ 'option': false,
287661
+ 'active': undefined,
287662
+ 'contract': false,
287663
+ 'linear': undefined,
287664
+ 'inverse': undefined,
287665
+ 'contractSize': undefined,
287666
+ 'expiry': undefined,
287667
+ 'expiryDatetime': undefined,
287668
+ 'strike': undefined,
287669
+ 'optionType': undefined,
287670
+ 'precision': {
287671
+ 'amount': this.safeNumber(market, 'item_unit_step'),
287672
+ 'price': this.parseNumber(this.parsePrecision(this.safeString(market, 'aux_unit_point'))),
287673
+ },
287674
+ 'limits': {
287675
+ 'leverage': {
287676
+ 'min': undefined,
287677
+ 'max': undefined,
287678
+ },
287679
+ 'amount': {
287680
+ 'min': this.safeNumber(market, 'item_unit_min'),
287681
+ 'max': undefined,
287682
+ },
287683
+ 'price': {
287684
+ 'min': this.safeNumber(market, 'aux_unit_min'),
287685
+ 'max': undefined,
287686
+ },
287687
+ 'cost': {
287688
+ 'min': undefined,
287689
+ 'max': undefined,
287690
+ },
287691
+ },
287692
+ 'created': undefined,
287693
+ 'info': market,
287694
+ };
287695
+ }
287696
+ parseBalance(response) {
287697
+ const balances = this.safeValue(response, 'return', {});
287698
+ const deposit = this.safeValue(balances, 'deposit');
287699
+ const result = {
287700
+ 'info': response,
287701
+ 'timestamp': undefined,
287702
+ 'datetime': undefined,
287703
+ };
287704
+ const funds = this.safeValue(balances, 'funds', {});
287705
+ const currencyIds = Object.keys(funds);
287706
+ for (let i = 0; i < currencyIds.length; i++) {
287707
+ const currencyId = currencyIds[i];
287708
+ const code = this.safeCurrencyCode(currencyId);
287709
+ const balance = this.safeString(funds, currencyId);
287710
+ const account = this.account();
287711
+ account['free'] = balance;
287712
+ account['total'] = balance;
287713
+ if (deposit !== undefined) {
287714
+ if (currencyId in deposit) {
287715
+ account['total'] = this.safeString(deposit, currencyId);
287716
+ }
287717
+ }
287718
+ result[code] = account;
287719
+ }
287720
+ return this.safeBalance(result);
287721
+ }
287722
+ async fetchBalance(params = {}) {
287723
+ /**
287724
+ * @method
287725
+ * @name zaif#fetchBalance
287726
+ * @see https://zaif-api-document.readthedocs.io/ja/latest/TradingAPI.html#id10
287727
+ * @description query for balance and get the amount of funds available for trading or funds locked in orders
287728
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
287729
+ * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
287730
+ */
287731
+ await this.loadMarkets();
287732
+ const response = await this.privatePostGetInfo(params);
287733
+ return this.parseBalance(response);
287734
+ }
287735
+ async fetchOrderBook(symbol, limit = undefined, params = {}) {
287736
+ /**
287737
+ * @method
287738
+ * @name zaif#fetchOrderBook
287739
+ * @see https://zaif-api-document.readthedocs.io/ja/latest/PublicAPI.html#id34
287740
+ * @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
287741
+ * @param {string} symbol unified symbol of the market to fetch the order book for
287742
+ * @param {int} [limit] the maximum amount of order book entries to return
287743
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
287744
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
287745
+ */
287746
+ await this.loadMarkets();
287747
+ const market = this.market(symbol);
287748
+ const request = {
287749
+ 'pair': market['id'],
287750
+ };
287751
+ const response = await this.publicGetDepthPair(this.extend(request, params));
287752
+ return this.parseOrderBook(response, market['symbol']);
287753
+ }
287754
+ parseTicker(ticker, market = undefined) {
287755
+ //
287756
+ // {
287757
+ // "last": 9e-08,
287758
+ // "high": 1e-07,
287759
+ // "low": 9e-08,
287760
+ // "vwap": 0.0,
287761
+ // "volume": 135250.0,
287762
+ // "bid": 9e-08,
287763
+ // "ask": 1e-07
287764
+ // }
287765
+ //
287766
+ const symbol = this.safeSymbol(undefined, market);
287767
+ const timestamp = this.milliseconds();
287768
+ const vwap = this.safeString(ticker, 'vwap');
287769
+ const baseVolume = this.safeString(ticker, 'volume');
287770
+ const quoteVolume = Precise_js_1.Precise.stringMul(baseVolume, vwap);
287771
+ const last = this.safeString(ticker, 'last');
287772
+ return this.safeTicker({
287773
+ 'symbol': symbol,
287774
+ 'timestamp': timestamp,
287775
+ 'datetime': this.iso8601(timestamp),
287776
+ 'high': this.safeString(ticker, 'high'),
287777
+ 'low': this.safeString(ticker, 'low'),
287778
+ 'bid': this.safeString(ticker, 'bid'),
287779
+ 'bidVolume': undefined,
287780
+ 'ask': this.safeString(ticker, 'ask'),
287781
+ 'askVolume': undefined,
287782
+ 'vwap': vwap,
287783
+ 'open': undefined,
287784
+ 'close': last,
287785
+ 'last': last,
287786
+ 'previousClose': undefined,
287787
+ 'change': undefined,
287788
+ 'percentage': undefined,
287789
+ 'average': undefined,
287790
+ 'baseVolume': baseVolume,
287791
+ 'quoteVolume': quoteVolume,
287792
+ 'info': ticker,
287793
+ }, market);
287794
+ }
287795
+ async fetchTicker(symbol, params = {}) {
287796
+ /**
287797
+ * @method
287798
+ * @name zaif#fetchTicker
287799
+ * @see https://zaif-api-document.readthedocs.io/ja/latest/PublicAPI.html#id22
287800
+ * @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
287801
+ * @param {string} symbol unified symbol of the market to fetch the ticker for
287802
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
287803
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
287804
+ */
287805
+ await this.loadMarkets();
287806
+ const market = this.market(symbol);
287807
+ const request = {
287808
+ 'pair': market['id'],
287809
+ };
287810
+ const ticker = await this.publicGetTickerPair(this.extend(request, params));
287811
+ //
287812
+ // {
287813
+ // "last": 9e-08,
287814
+ // "high": 1e-07,
287815
+ // "low": 9e-08,
287816
+ // "vwap": 0.0,
287817
+ // "volume": 135250.0,
287818
+ // "bid": 9e-08,
287819
+ // "ask": 1e-07
287820
+ // }
287821
+ //
287822
+ return this.parseTicker(ticker, market);
287823
+ }
287824
+ parseTrade(trade, market = undefined) {
287825
+ //
287826
+ // fetchTrades (public)
287827
+ //
287828
+ // {
287829
+ // "date": 1648559414,
287830
+ // "price": 5880375.0,
287831
+ // "amount": 0.017,
287832
+ // "tid": 176126557,
287833
+ // "currency_pair": "btc_jpy",
287834
+ // "trade_type": "ask"
287835
+ // }
287836
+ //
287837
+ let side = this.safeString(trade, 'trade_type');
287838
+ side = (side === 'bid') ? 'buy' : 'sell';
287839
+ const timestamp = this.safeTimestamp(trade, 'date');
287840
+ const id = this.safeString2(trade, 'id', 'tid');
287841
+ const priceString = this.safeString(trade, 'price');
287842
+ const amountString = this.safeString(trade, 'amount');
287843
+ const marketId = this.safeString(trade, 'currency_pair');
287844
+ const symbol = this.safeSymbol(marketId, market, '_');
287845
+ return this.safeTrade({
287846
+ 'id': id,
287847
+ 'info': trade,
287848
+ 'timestamp': timestamp,
287849
+ 'datetime': this.iso8601(timestamp),
287850
+ 'symbol': symbol,
287851
+ 'type': undefined,
287852
+ 'side': side,
287853
+ 'order': undefined,
287854
+ 'takerOrMaker': undefined,
287855
+ 'price': priceString,
287856
+ 'amount': amountString,
287857
+ 'cost': undefined,
287858
+ 'fee': undefined,
287859
+ }, market);
287860
+ }
287861
+ async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {
287862
+ /**
287863
+ * @method
287864
+ * @name zaif#fetchTrades
287865
+ * @see https://zaif-api-document.readthedocs.io/ja/latest/PublicAPI.html#id28
287866
+ * @description get the list of most recent trades for a particular symbol
287867
+ * @param {string} symbol unified symbol of the market to fetch trades for
287868
+ * @param {int} [since] timestamp in ms of the earliest trade to fetch
287869
+ * @param {int} [limit] the maximum amount of trades to fetch
287870
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
287871
+ * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
287872
+ */
287873
+ await this.loadMarkets();
287874
+ const market = this.market(symbol);
287875
+ const request = {
287876
+ 'pair': market['id'],
287877
+ };
287878
+ let response = await this.publicGetTradesPair(this.extend(request, params));
287879
+ //
287880
+ // [
287881
+ // {
287882
+ // "date": 1648559414,
287883
+ // "price": 5880375.0,
287884
+ // "amount": 0.017,
287885
+ // "tid": 176126557,
287886
+ // "currency_pair": "btc_jpy",
287887
+ // "trade_type": "ask"
287888
+ // }, ...
287889
+ // ]
287890
+ //
287891
+ const numTrades = response.length;
287892
+ if (numTrades === 1) {
287893
+ const firstTrade = response[0];
287894
+ if (!Object.keys(firstTrade).length) {
287895
+ response = [];
287896
+ }
287897
+ }
287898
+ return this.parseTrades(response, market, since, limit);
287899
+ }
287900
+ async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
287901
+ /**
287902
+ * @method
287903
+ * @name zaif#createOrder
287904
+ * @see https://zaif-api-document.readthedocs.io/ja/latest/MarginTradingAPI.html#id23
287905
+ * @description create a trade order
287906
+ * @param {string} symbol unified symbol of the market to create an order in
287907
+ * @param {string} type must be 'limit'
287908
+ * @param {string} side 'buy' or 'sell'
287909
+ * @param {float} amount how much of currency you want to trade in units of base currency
287910
+ * @param {float} [price] the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
287911
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
287912
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
287913
+ */
287914
+ await this.loadMarkets();
287915
+ if (type !== 'limit') {
287916
+ throw new errors_js_1.ExchangeError(this.id + ' createOrder() allows limit orders only');
287917
+ }
287918
+ const market = this.market(symbol);
287919
+ const request = {
287920
+ 'currency_pair': market['id'],
287921
+ 'action': (side === 'buy') ? 'bid' : 'ask',
287922
+ 'amount': amount,
287923
+ 'price': price,
287924
+ };
287925
+ const response = await this.privatePostTrade(this.extend(request, params));
287926
+ return this.safeOrder({
287927
+ 'info': response,
287928
+ 'id': response['return']['order_id'].toString(),
287929
+ }, market);
287930
+ }
287931
+ async cancelOrder(id, symbol = undefined, params = {}) {
287932
+ /**
287933
+ * @method
287934
+ * @name zaif#cancelOrder
287935
+ * @see https://zaif-api-document.readthedocs.io/ja/latest/TradingAPI.html#id37
287936
+ * @description cancels an open order
287937
+ * @param {string} id order id
287938
+ * @param {string} symbol not used by zaif cancelOrder ()
287939
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
287940
+ * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
287941
+ */
287942
+ const request = {
287943
+ 'order_id': id,
287944
+ };
287945
+ return await this.privatePostCancelOrder(this.extend(request, params));
287946
+ }
287947
+ parseOrder(order, market = undefined) {
287948
+ //
287949
+ // {
287950
+ // "currency_pair": "btc_jpy",
287951
+ // "action": "ask",
287952
+ // "amount": 0.03,
287953
+ // "price": 56000,
287954
+ // "timestamp": 1402021125,
287955
+ // "comment" : "demo"
287956
+ // }
287957
+ //
287958
+ let side = this.safeString(order, 'action');
287959
+ side = (side === 'bid') ? 'buy' : 'sell';
287960
+ const timestamp = this.safeTimestamp(order, 'timestamp');
287961
+ const marketId = this.safeString(order, 'currency_pair');
287962
+ const symbol = this.safeSymbol(marketId, market, '_');
287963
+ const price = this.safeString(order, 'price');
287964
+ const amount = this.safeString(order, 'amount');
287965
+ const id = this.safeString(order, 'id');
287966
+ return this.safeOrder({
287967
+ 'id': id,
287968
+ 'clientOrderId': undefined,
287969
+ 'timestamp': timestamp,
287970
+ 'datetime': this.iso8601(timestamp),
287971
+ 'lastTradeTimestamp': undefined,
287972
+ 'status': 'open',
287973
+ 'symbol': symbol,
287974
+ 'type': 'limit',
287975
+ 'timeInForce': undefined,
287976
+ 'postOnly': undefined,
287977
+ 'side': side,
287978
+ 'price': price,
287979
+ 'stopPrice': undefined,
287980
+ 'triggerPrice': undefined,
287981
+ 'cost': undefined,
287982
+ 'amount': amount,
287983
+ 'filled': undefined,
287984
+ 'remaining': undefined,
287985
+ 'trades': undefined,
287986
+ 'fee': undefined,
287987
+ 'info': order,
287988
+ 'average': undefined,
287989
+ }, market);
287990
+ }
287991
+ async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
287992
+ /**
287993
+ * @method
287994
+ * @name zaif#fetchOpenOrders
287995
+ * @see https://zaif-api-document.readthedocs.io/ja/latest/MarginTradingAPI.html#id28
287996
+ * @description fetch all unfilled currently open orders
287997
+ * @param {string} symbol unified market symbol
287998
+ * @param {int} [since] the earliest time in ms to fetch open orders for
287999
+ * @param {int} [limit] the maximum number of open orders structures to retrieve
288000
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
288001
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
288002
+ */
288003
+ await this.loadMarkets();
288004
+ let market = undefined;
288005
+ const request = {
288006
+ // 'is_token': false,
288007
+ // 'is_token_both': false,
288008
+ };
288009
+ if (symbol !== undefined) {
288010
+ market = this.market(symbol);
288011
+ request['currency_pair'] = market['id'];
288012
+ }
288013
+ const response = await this.privatePostActiveOrders(this.extend(request, params));
288014
+ return this.parseOrders(response['return'], market, since, limit);
288015
+ }
288016
+ async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
288017
+ /**
288018
+ * @method
288019
+ * @name zaif#fetchClosedOrders
288020
+ * @see https://zaif-api-document.readthedocs.io/ja/latest/TradingAPI.html#id24
288021
+ * @description fetches information on multiple closed orders made by the user
288022
+ * @param {string} symbol unified market symbol of the market orders were made in
288023
+ * @param {int} [since] the earliest time in ms to fetch orders for
288024
+ * @param {int} [limit] the maximum number of order structures to retrieve
288025
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
288026
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
288027
+ */
288028
+ await this.loadMarkets();
288029
+ let market = undefined;
288030
+ const request = {
288031
+ // 'from': 0,
288032
+ // 'count': 1000,
288033
+ // 'from_id': 0,
288034
+ // 'end_id': 1000,
288035
+ // 'order': 'DESC',
288036
+ // 'since': 1503821051,
288037
+ // 'end': 1503821051,
288038
+ // 'is_token': false,
288039
+ };
288040
+ if (symbol !== undefined) {
288041
+ market = this.market(symbol);
288042
+ request['currency_pair'] = market['id'];
288043
+ }
288044
+ const response = await this.privatePostTradeHistory(this.extend(request, params));
288045
+ return this.parseOrders(response['return'], market, since, limit);
288046
+ }
288047
+ async withdraw(code, amount, address, tag = undefined, params = {}) {
288048
+ /**
288049
+ * @method
288050
+ * @name zaif#withdraw
288051
+ * @see https://zaif-api-document.readthedocs.io/ja/latest/TradingAPI.html#id41
288052
+ * @description make a withdrawal
288053
+ * @param {string} code unified currency code
288054
+ * @param {float} amount the amount to withdraw
288055
+ * @param {string} address the address to withdraw to
288056
+ * @param {string} tag
288057
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
288058
+ * @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}
288059
+ */
288060
+ [tag, params] = this.handleWithdrawTagAndParams(tag, params);
288061
+ this.checkAddress(address);
288062
+ await this.loadMarkets();
288063
+ const currency = this.currency(code);
288064
+ if (code === 'JPY') {
288065
+ throw new errors_js_1.ExchangeError(this.id + ' withdraw() does not allow ' + code + ' withdrawals');
288066
+ }
288067
+ const request = {
288068
+ 'currency': currency['id'],
288069
+ 'amount': amount,
288070
+ 'address': address,
288071
+ // 'message': 'Hi!', // XEM and others
288072
+ // 'opt_fee': 0.003, // BTC and MONA only
288073
+ };
288074
+ if (tag !== undefined) {
288075
+ request['message'] = tag;
288076
+ }
288077
+ const result = await this.privatePostWithdraw(this.extend(request, params));
288078
+ //
288079
+ // {
288080
+ // "success": 1,
288081
+ // "return": {
288082
+ // "id": 23634,
288083
+ // "fee": 0.001,
288084
+ // "txid":,
288085
+ // "funds": {
288086
+ // "jpy": 15320,
288087
+ // "btc": 1.392,
288088
+ // "xem": 100.2,
288089
+ // "mona": 2600
288090
+ // }
288091
+ // }
288092
+ // }
288093
+ //
288094
+ const returnData = this.safeValue(result, 'return');
288095
+ return this.parseTransaction(returnData, currency);
288096
+ }
288097
+ parseTransaction(transaction, currency = undefined) {
288098
+ //
288099
+ // {
288100
+ // "id": 23634,
288101
+ // "fee": 0.001,
288102
+ // "txid":,
288103
+ // "funds": {
288104
+ // "jpy": 15320,
288105
+ // "btc": 1.392,
288106
+ // "xem": 100.2,
288107
+ // "mona": 2600
288108
+ // }
288109
+ // }
288110
+ //
288111
+ currency = this.safeCurrency(undefined, currency);
288112
+ let fee = undefined;
288113
+ const feeCost = this.safeValue(transaction, 'fee');
288114
+ if (feeCost !== undefined) {
288115
+ fee = {
288116
+ 'cost': feeCost,
288117
+ 'currency': currency['code'],
288118
+ };
288119
+ }
288120
+ return {
288121
+ 'id': this.safeString(transaction, 'id'),
288122
+ 'txid': this.safeString(transaction, 'txid'),
288123
+ 'timestamp': undefined,
288124
+ 'datetime': undefined,
288125
+ 'network': undefined,
288126
+ 'addressFrom': undefined,
288127
+ 'address': undefined,
288128
+ 'addressTo': undefined,
288129
+ 'amount': undefined,
288130
+ 'type': undefined,
288131
+ 'currency': currency['code'],
288132
+ 'status': undefined,
288133
+ 'updated': undefined,
288134
+ 'tagFrom': undefined,
288135
+ 'tag': undefined,
288136
+ 'tagTo': undefined,
288137
+ 'comment': undefined,
288138
+ 'internal': undefined,
288139
+ 'fee': fee,
288140
+ 'info': transaction,
288141
+ };
288142
+ }
288143
+ customNonce() {
288144
+ const num = (this.milliseconds() / 1000).toString();
288145
+ const nonce = parseFloat(num);
288146
+ return nonce.toFixed(8);
288147
+ }
288148
+ sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
288149
+ let url = this.urls['api']['rest'] + '/';
288150
+ if (api === 'public') {
288151
+ url += 'api/' + this.version + '/' + this.implodeParams(path, params);
288152
+ }
288153
+ else if (api === 'fapi') {
288154
+ url += 'fapi/' + this.version + '/' + this.implodeParams(path, params);
288155
+ }
288156
+ else {
288157
+ this.checkRequiredCredentials();
288158
+ if (api === 'ecapi') {
288159
+ url += 'ecapi';
288160
+ }
288161
+ else if (api === 'tlapi') {
288162
+ url += 'tlapi';
288163
+ }
288164
+ else {
288165
+ url += 'tapi';
288166
+ }
288167
+ const nonce = this.customNonce();
288168
+ body = this.urlencode(this.extend({
288169
+ 'method': path,
288170
+ 'nonce': nonce,
288171
+ }, params));
288172
+ headers = {
288173
+ 'Content-Type': 'application/x-www-form-urlencoded',
288174
+ 'Key': this.apiKey,
288175
+ 'Sign': this.hmac(this.encode(body), this.encode(this.secret), sha512_js_1.sha512),
288176
+ };
288177
+ }
288178
+ return { 'url': url, 'method': method, 'body': body, 'headers': headers };
288179
+ }
288180
+ handleErrors(httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody) {
288181
+ if (response === undefined) {
288182
+ return undefined;
288183
+ }
288184
+ //
288185
+ // {"error": "unsupported currency_pair"}
288186
+ //
288187
+ const feedback = this.id + ' ' + body;
288188
+ const error = this.safeString(response, 'error');
288189
+ if (error !== undefined) {
288190
+ this.throwExactlyMatchedException(this.exceptions['exact'], error, feedback);
288191
+ this.throwBroadlyMatchedException(this.exceptions['broad'], error, feedback);
288192
+ throw new errors_js_1.ExchangeError(feedback); // unknown message
288193
+ }
288194
+ const success = this.safeValue(response, 'success', true);
288195
+ if (!success) {
288196
+ throw new errors_js_1.ExchangeError(feedback);
288197
+ }
288198
+ return undefined;
288199
+ }
288200
+ }
288201
+ exports.default = zaif;
288202
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemFpZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInphaWYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLCtFQUErRTs7Ozs7QUFFL0UsaUVBQTBDO0FBQzFDLGdEQUE2RDtBQUM3RCxrREFBNEM7QUFDNUMsMERBQXVEO0FBQ3ZELDRFQUFzRTtBQUd0RSwrRUFBK0U7QUFFL0U7OztHQUdHO0FBQ0gsTUFBcUIsSUFBSyxTQUFRLGlCQUFRO0lBQ3RDLFFBQVE7UUFDSixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRyxFQUFFO1lBQ3ZDLElBQUksRUFBRSxNQUFNO1lBQ1osTUFBTSxFQUFFLE1BQU07WUFDZCxXQUFXLEVBQUUsQ0FBRSxJQUFJLENBQUU7WUFDckIsMEZBQTBGO1lBQzFGLFdBQVcsRUFBRSxHQUFHO1lBQ2hCLFNBQVMsRUFBRSxHQUFHO1lBQ2QsS0FBSyxFQUFFO2dCQUNILE1BQU0sRUFBRSxTQUFTO2dCQUNqQixNQUFNLEVBQUUsSUFBSTtnQkFDWixRQUFRLEVBQUUsU0FBUztnQkFDbkIsTUFBTSxFQUFFLEtBQUs7Z0JBQ2IsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsYUFBYSxFQUFFLElBQUk7Z0JBQ25CLG1CQUFtQixFQUFFLEtBQUs7Z0JBQzFCLGFBQWEsRUFBRSxJQUFJO2dCQUNuQixjQUFjLEVBQUUsSUFBSTtnQkFDcEIsbUJBQW1CLEVBQUUsSUFBSTtnQkFDekIscUJBQXFCLEVBQUUsS0FBSztnQkFDNUIsa0JBQWtCLEVBQUUsS0FBSztnQkFDekIseUJBQXlCLEVBQUUsS0FBSztnQkFDaEMsbUJBQW1CLEVBQUUsS0FBSztnQkFDMUIsaUJBQWlCLEVBQUUsS0FBSztnQkFDeEIsY0FBYyxFQUFFLElBQUk7Z0JBQ3BCLGdCQUFnQixFQUFFLEtBQUs7Z0JBQ3ZCLDBCQUEwQixFQUFFLEtBQUs7Z0JBQ2pDLGlCQUFpQixFQUFFLElBQUk7Z0JBQ3ZCLGdCQUFn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QVMsRUFBRTtZQUNyQixJQUFJLENBQUMsNEJBQTRCLENBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDOUUsSUFBSSxDQUFDLDRCQUE0QixDQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzlFLE1BQU0sSUFBSSx5QkFBYSxDQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsa0JBQWtCO1NBQ3pEO1FBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDVixNQUFNLElBQUkseUJBQWEsQ0FBRSxRQUFRLENBQUMsQ0FBQztTQUN0QztRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7Q0FDSjtBQWp1QkQsdUJBaXVCQyIsInNvdXJjZXNDb250ZW50IjpbIlxuLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5pbXBvcnQgRXhjaGFuZ2UgZnJvbSAnLi9hYnN0cmFjdC96YWlmLmpzJztcbmltcG9ydCB7IEV4Y2hhbmdlRXJyb3IsIEJhZFJlcXVlc3QgfSBmcm9tICcuL2Jhc2UvZXJyb3JzLmpzJztcbmltcG9ydCB7IFByZWNpc2UgfSBmcm9tICcuL2Jhc2UvUHJlY2lzZS5qcyc7XG5pbXBvcnQgeyBUSUNLX1NJWkUgfSBmcm9tICcuL2Jhc2UvZnVuY3Rpb25zL251bWJlci5qcyc7XG5pbXBvcnQgeyBzaGE1MTIgfSBmcm9tICcuL3N0YXRpY19kZXBlbmRlbmNpZXMvbm9ibGUtaGFzaGVzL3NoYTUxMi5qcyc7XG5pbXBvcnQgeyBCYWxhbmNlcywgQ3VycmVuY3ksIEludCwgTWFya2V0LCBPcmRlciwgT3JkZXJCb29rLCBPcmRlclNpZGUsIE9yZGVyVHlwZSwgU3RyLCBUaWNrZXIsIFRyYWRlLCBUcmFuc2FjdGlvbiB9IGZyb20gJy4vYmFzZS90eXBlcy5qcyc7XG5cbi8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBAY2xhc3MgemFpZlxuICogQGV4dGVuZHMgRXhjaGFuZ2VcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgemFpZiBleHRlbmRzIEV4Y2hhbmdlIHtcbiAgICBkZXNjcmliZSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZXBFeHRlbmQgKHN1cGVyLmRlc2NyaWJlICgpLCB7XG4gICAgICAgICAgICAnaWQnOiAnemFpZicsXG4gICAgICAgICAgICAnbmFtZSc6ICdaYWlmJyxcbiAgICAgICAgICAgICdjb3VudHJpZXMnOiBbICdKUCcgXSxcbiAgICAgICAgICAgIC8vIDEwIHJlcXVlc3RzIHBlciBzZWNvbmQgPSAxMDAwbXMgLyAxMCA9IDEwMG1zIGJldHdlZW4gcmVxdWVzdHMgKHB1YmxpYyBtYXJrZXQgZW5kcG9pbnRzKVxuICAgICAgICAgICAgJ3JhdGVMaW1pdCc6IDEwMCxcbiAgICAgICAgICAgICd2ZXJzaW9uJzogJzEnLFxuICAgICAgICAgICAgJ2hhcyc6IHtcbiAgICAgICAgICAgICAgICAnQ09SUyc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAnc3BvdCc6IHRydWUsXG4gICAgICAgICAgICAgICAgJ21hcmdpbic6IHVuZGVmaW5lZCwgLy8gaGFzIGJ1dCB1bmltcGxlbWVudGVkXG4gICAgICAgICAgICAgICAgJ3N3YXAnOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAnZnV0dXJlJzogZmFsc2UsXG4gICAgICAgICAgICAgICAgJ29wdGlvbic6IGZhbHNlLFxuICAgICAgICAgICAgICAgICdjYW5jZWxPcmRlcic6IHRydWUsXG4gICAgICAgICAgICAgICAgJ2NyZWF0ZU1hcmtldE9yZGVyJzogZmFsc2UsXG4gICAgICAgICAgICAgICAgJ2NyZWF0ZU9yZGVyJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAnZmV0Y2hCYWxhbmNlJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAnZmV0Y2hDbG9zZWRPcmRlcnMnOiB0cnVlLFxuICAgICAgICAgICAgICAgICdmZXRjaEZ1bmRpbmdIaXN0b3J5JzogZmFsc2UsXG4gICAgICAgICAgICAgICAgJ2ZldGNoRnVuZGluZ1JhdGUnOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAnZmV0Y2hGdW5kaW5nUmF0ZUhpc3RvcnknOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAnZmV0Y2hGdW5kaW5nUmF0ZXMnOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAnZmV0Y2hJbmRleE9ITENWJzogZmFsc2UsXG4gICAgICAgICAgICAgICAgJ2ZldGNoTWFya2V0cyc6IHRydWUsXG4gICAgICAgICAgICAgICAgJ2ZldGNoTWFya09ITENWJzogZmFsc2UsXG4gICAgICAgICAgICAgICAgJ2ZldGNoT3BlbkludGVyZXN0SGlzdG9yeSc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICdmZXRjaE9wZW5PcmRlcnMnOiB0cnVlLFxuICAgICAgICAgICAgICAgICdmZXRjaE9yZGVyQm9vayc6IHRydWUsXG4gICAgICAgICAgICAgICAgJ2ZldGNoUHJlbWl1bUluZGV4T0hMQ1YnOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAnZmV0Y2hUaWNrZXInOiB0cnVlLFxuICAgICAgICAgICAgICAgICdmZXRjaFRyYWRlcyc6IHRydWUsXG4gICAgICAgICAgICAgICAgJ2ZldGNoVHJhZGluZ0ZlZSc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICdmZXRjaFRyYWRpbmdGZWVzJzogZmFsc2UsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3JzogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAndXJscyc6IHtcbiAgICAgICAgICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2OTI3LTM5Y2EyYWRhLTVlZWItMTFlNy05NzJmLTFiNDE5OTUxOGNhNi5qcGcnLFxuICAgICAgICAgICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAgICAgICAgICdyZXN0JzogJ2h0dHBzOi8vYXBpLnphaWYuanAnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgJ3d3dyc6ICdodHRwczovL3phaWYuanAnLFxuICAgICAgICAgICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAgICAgICAgICdodHRwczovL3RlY2hidXJlYXUtYXBpLWRvY3VtZW50LnJlYWR0aGVkb2NzLmlvL2phL2xhdGVzdC9pbmRleC5odG1sJyxcbiAgICAgICAgICAgICAgICAgICAgJ2h0dHBzOi8vY29ycC56YWlmLmpwL2FwaS1kb2NzJyxcbiAgICAgICAgICAgICAgICAgICAgJ2h0dHBzOi8vY29ycC56YWlmLmpwL2FwaS1kb2NzL2FwaV9saW5rcycsXG4gICAgICAgICAgICAgICAgICAgICdodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS96YWlmLmpwJyxcbiAgICAgICAgICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS95b3UyMTk3OS9ub2RlLXphaWYnLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgJ2ZlZXMnOiAnaHR0cHM6Ly96YWlmLmpwL2ZlZT9sYW5nPWVuJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnZmVlcyc6IHtcbiAgICAgICAgICAgICAgICAndHJhZGluZyc6IHtcbiAgICAgICAgICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAndGFrZXInOiB0aGlzLnBhcnNlTnVtYmVyICgnMC4wMDEnKSxcbiAgICAgICAgICAgICAgICAgICAgJ21ha2VyJzogdGhpcy5wYXJzZU51bWJlciAoJzAnKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICAgICAgICAgJ2dldCc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdkZXB0aC97cGFpcn0nOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2N1cnJlbmNpZXMve3BhaXJ9JzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdjdXJyZW5jaWVzL2FsbCc6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAnY3VycmVuY3lfcGFpcnMve3BhaXJ9JzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdjdXJyZW5jeV9wYWlycy9hbGwnOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2xhc3RfcHJpY2Uve3BhaXJ9JzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICd0aWNrZXIve3BhaXJ9JzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICd0cmFkZXMve3BhaXJ9JzogMSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgICAgICAgICAncG9zdCc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdhY3RpdmVfb3JkZXJzJzogNSwgLy8gMTAgaW4gNSBzZWNvbmRzID0gMiBwZXIgc2Vjb25kID0+IGNvc3QgPSAxMCAvIDIgPSA1XG4gICAgICAgICAgICAgICAgICAgICAgICAnY2FuY2VsX29yZGVyJzogNSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdkZXBvc2l0X2hpc3RvcnknOiA1LFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2dldF9pZF9pbmZvJzogNSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdnZXRfaW5mbyc6IDEwLCAvLyAxMCBpbiAxMCBzZWNvbmRzID0gMSBwZXIgc2Vjb25kID0+IGNvc3QgPSAxMCAvIDEgPSAxMFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2dldF9pbmZvMic6IDUsIC8vIDIwIGluIDEwIHNlY29uZHMgPSAyIHBlciBzZWNvbmQgPT4gY29zdCA9IDEwIC8gMiA9IDVcbiAgICAgICAgICAgICAgICAgICAgICAgICdnZXRfcGVyc29uYWxfaW5mbyc6IDUsXG4gICAgICAgICAgICAgICAgICAgICAgICAndHJhZGUnOiA1LFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3RyYWRlX2hpc3RvcnknOiA1MCwgLy8gMTIgaW4gNjAgc2Vjb25kcyA9IDAuMiBwZXIgc2Vjb25kID0+IGNvc3QgPSAxMCAvIDAuMiA9IDUwXG4gICAgICAgICAgICAgICAgICAgICAgICAnd2l0aGRyYXcnOiA1LFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3dpdGhkcmF3X2hpc3RvcnknOiA1LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgJ2VjYXBpJzoge1xuICAgICAgICAgICAgICAgICAgICAncG9zdCc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdjcmVhdGVJbnZvaWNlJzogMSwgLy8gdW52ZXJpZmllZFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2dldEludm9pY2UnOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2dldEludm9pY2VJZHNCeU9yZGVyTnVtYmVyJzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdjYW5jZWxJbnZvaWNlJzogMSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICd0bGFwaSc6IHtcbiAgICAgICAgICAgICAgICAgICAgJ3Bvc3QnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnZ2V0X3Bvc2l0aW9ucyc6IDY2LCAvLyAxMCBpbiA2MCBzZWNvbmRzID0gMC4xNjYgcGVyIHNlY29uZCA9PiBjb3N0ID0gMTAgLyAwLjE2NiA9IDY2XG4gICAgICAgICAgICAgICAgICAgICAgICAncG9zaXRpb25faGlzdG9yeSc6IDY2LCAvLyAxMCBpbiA2MCBzZWNvbmRzXG4gICAgICAgICAgICAgICAgICAgICAgICAnYWN0aXZlX3Bvc2l0aW9ucyc6IDUsIC8vIDIwIGluIDEwIHNlY29uZHNcbiAgICAgICAgICAgICAgICAgICAgICAgICdjcmVhdGVfcG9zaXRpb24nOiAzMywgLy8gMyBpbiAxMCBzZWNvbmRzID0gMC4zIHBlciBzZWNvbmQgPT4gY29zdCA9IDEwIC8gMC4zID0gMzNcbiAgICAgICAgICAgICAgICAgICAgICAgICdjaGFuZ2VfcG9zaXRpb24nOiAzMywgLy8gMyBpbiAxMCBzZWNvbmRzXG4gICAgICAgICAgICAgICAgICAgICAgICAnY2FuY2VsX3Bvc2l0aW9uJzogMzMsIC8vIDMgaW4gMTAgc2Vjb25kc1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgJ2ZhcGknOiB7XG4gICAgICAgICAgICAgICAgICAgICdnZXQnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnZ3JvdXBzL3tncm91cF9pZH0nOiAxLCAvLyB0ZXN0aW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAnbGFzdF9wcmljZS97Z3JvdXBfaWR9L3twYWlyfSc6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAndGlja2VyL3tncm91cF9pZH0ve3BhaXJ9JzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICd0cmFkZXMve2dyb3VwX2lkfS97cGFpcn0nOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2RlcHRoL3tncm91cF9pZH0ve3BhaXJ9JzogMSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdvcHRpb25zJzoge1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdwcmVjaXNpb25Nb2RlJzogVElDS19TSVpFLFxuICAgICAgICAgICAgJ2V4Y2VwdGlvbnMnOiB7XG4gICAgICAgICAgICAgICAgJ2V4YWN0Jzoge1xuICAgICAgICAgICAgICAgICAgICAndW5zdXBwb3J0ZWQgY3VycmVuY3lfcGFpcic6IEJhZFJlcXVlc3QsIC8vIHtcImVycm9yXCI6IFwidW5zdXBwb3J0ZWQgY3VycmVuY3lfcGFpclwifVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgJ2Jyb2FkJzoge1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAbWV0aG9kXG4gICAgICAgICAqIEBuYW1lIHphaWYjZmV0Y2hNYXJrZXRzXG4gICAgICAgICAqIEBzZWUgaHR0cHM6Ly96YWlmLWFwaS1kb2N1bWVudC5yZWFkdGhlZG9jcy5pby9qYS9sYXRlc3QvUHVibGljQVBJLmh0bWwjaWQxMlxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gcmV0cmlldmVzIGRhdGEgb24gYWxsIG1hcmtldHMgZm9yIHphaWZcbiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IFtwYXJhbXNdIGV4dHJhIHBhcmFtZXRlcnMgc3BlY2lmaWMgdG8gdGhlIGV4Y2hhbmdlIEFQSSBlbmRwb2ludFxuICAgICAgICAgKiBAcmV0dXJucyB7b2JqZWN0W119IGFuIGFycmF5IG9mIG9iamVjdHMgcmVwcmVzZW50aW5nIG1hcmtldCBkYXRhXG4gICAgICAgICAqL1xuICAgICAgICBjb25zdCBtYXJrZXRzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRDdXJyZW5jeVBhaXJzQWxsIChwYXJhbXMpO1xuICAgICAgICAvL1xuICAgICAgICAvLyAgICAgW1xuICAgICAgICAvLyAgICAgICAgIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgXCJhdXhfdW5pdF9wb2ludFwiOiAwLFxuICAgICAgICAvLyAgICAgICAgICAgICBcIml0ZW1famFwYW5lc2VcIjogXCJcXHUzMGQzXFx1MzBjM1xcdTMwYzhcXHUzMGIzXFx1MzBhNFxcdTMwZjNcIixcbiAgICAgICAgLy8gICAgICAgICAgICAgXCJhdXhfdW5pdF9zdGVwXCI6IDUuMCxcbiAgICAgICAgLy8gICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlxcdTMwZDNcXHUzMGMzXFx1MzBjOFxcdTMwYjNcXHUzMGE0XFx1MzBmM1xcdTMwZmJcXHU2NWU1XFx1NjcyY1xcdTUxODZcXHUzMDZlXFx1NTNkNlxcdTVmMTVcXHUzMDkyXFx1ODg0Y1xcdTMwNDZcXHUzMDUzXFx1MzA2OFxcdTMwNGNcXHUzMDY3XFx1MzA0ZFxcdTMwN2VcXHUzMDU5XCIsXG4gICAgICAgIC8vICAgICAgICAgICAgIFwiaXRlbV91bml0X21pblwiOiAwLjAwMSxcbiAgICAgICAgLy8gICAgICAgICAgICAgXCJldmVudF9udW1iZXJcIjogMCxcbiAgICAgICAgLy8gICAgICAgICAgICAgXCJjdXJyZW5jeV9wYWlyXCI6IFwiYnRjX2pweVwiLFxuICAgICAgICAvLyAgICAgICAgICAgICBcImlzX3Rva2VuXCI6IGZhbHNlLFxuICAgICAgICAvLyAgICAgICAgICAgICBcImF1eF91bml0X21pblwiOiA1LjAsXG4gICAgICAgIC8vICAgICAgICAgICAgIFwiYXV4X2phcGFuZXNlXCI6IFwiXFx1NjVlNVxcdTY3MmNcXHU1MTg2XCIsXG4gICAgICAgIC8vICAgICAgICAgICAgIFwiaWRcIjogMSxcbiAgICAgICAgLy8gICAgICAgICAgICAgXCJpdGVtX3VuaXRfc3RlcFwiOiAwLjAwMDEsXG4gICAgICAgIC8vICAgICAgICAgICAgIFwibmFtZVwiOiBcIkJUQy9KUFlcIixcbiAgICAgICAgLy8gICAgICAgICAgICAgXCJzZXFcIjogMCxcbiAgICAgICAgLy8gICAgICAgICAgICAgXCJ0aXRsZVwiOiBcIkJUQy9KUFlcIlxuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgIF1cbiAgICAgICAgLy9cbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VNYXJrZXRzIChtYXJrZXRzKTtcbiAgICB9XG5cbiAgICBwYXJzZU1hcmtldCAobWFya2V0KTogTWFya2V0IHtcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLnNhZmVTdHJpbmcgKG1hcmtldCwgJ2N1cnJlbmN5X3BhaXInKTtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuc2FmZVN0cmluZyAobWFya2V0LCAnbmFtZScpO1xuICAgICAgICBjb25zdCBbIGJhc2VJZCwgcXVvdGVJZCBdID0gbmFtZS5zcGxpdCAoJy8nKTtcbiAgICAgICAgY29uc3QgYmFzZSA9IHRoaXMuc2FmZUN1cnJlbmN5Q29kZSAoYmFzZUlkKTtcbiAgICAgICAgY29uc3QgcXVvdGUgPSB0aGlzLnNhZmVDdXJyZW5jeUNvZGUgKHF1b3RlSWQpO1xuICAgICAgICBjb25zdCBzeW1ib2wgPSBiYXNlICsgJy8nICsgcXVvdGU7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICdzZXR0bGUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZUlkJzogYmFzZUlkLFxuICAgICAgICAgICAgJ3F1b3RlSWQnOiBxdW90ZUlkLFxuICAgICAgICAgICAgJ3NldHRsZUlkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3R5cGUnOiAnc3BvdCcsXG4gICAgICAgICAgICAnc3BvdCc6IHRydWUsXG4gICAgICAgICAgICAnbWFyZ2luJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3N3YXAnOiBmYWxzZSxcbiAgICAgICAgICAgICdmdXR1cmUnOiBmYWxzZSxcbiAgICAgICAgICAgICdvcHRpb24nOiBmYWxzZSxcbiAgICAgICAgICAgICdhY3RpdmUnOiB1bmRlZmluZWQsIC8vIGNhbiB0cmFkZSBvciBub3RcbiAgICAgICAgICAgICdjb250cmFjdCc6IGZhbHNlLFxuICAgICAgICAgICAgJ2xpbmVhcic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdpbnZlcnNlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2NvbnRyYWN0U2l6ZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdleHBpcnknOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZXhwaXJ5RGF0ZXRpbWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnc3RyaWtlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wdGlvblR5cGUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncHJlY2lzaW9uJzoge1xuICAgICAgICAgICAgICAgICdhbW91bnQnOiB0aGlzLnNhZmVOdW1iZXIgKG1hcmtldCwgJ2l0ZW1fdW5pdF9zdGVwJyksXG4gICAgICAgICAgICAgICAgJ3ByaWNlJzogdGhpcy5wYXJzZU51bWJlciAodGhpcy5wYXJzZVByZWNpc2lvbiAodGhpcy5zYWZlU3RyaW5nIChtYXJrZXQsICdhdXhfdW5pdF9wb2ludCcpKSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ2xpbWl0cyc6IHtcbiAgICAgICAgICAgICAgICAnbGV2ZXJhZ2UnOiB7XG4gICAgICAgICAgICAgICAgICAgICdtaW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICdtYXgnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAnYW1vdW50Jzoge1xuICAgICAgICAgICAgICAgICAgICAnbWluJzogdGhpcy5zYWZlTnVtYmVyIChtYXJrZXQsICdpdGVtX3VuaXRfbWluJyksXG4gICAgICAgICAgICAgICAgICAgICdtYXgnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAncHJpY2UnOiB7XG4gICAgICAgICAgICAgICAgICAgICdtaW4nOiB0aGlzLnNhZmVOdW1iZXIgKG1hcmtldCwgJ2F1eF91bml0X21pbicpLFxuICAgICAgICAgICAgICAgICAgICAnbWF4JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgJ2Nvc3QnOiB7XG4gICAgICAgICAgICAgICAgICAgICdtaW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICdtYXgnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnY3JlYXRlZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHBhcnNlQmFsYW5jZSAocmVzcG9uc2UpOiBCYWxhbmNlcyB7XG4gICAgICAgIGNvbnN0IGJhbGFuY2VzID0gdGhpcy5zYWZlVmFsdWUgKHJlc3BvbnNlLCAncmV0dXJuJywge30pO1xuICAgICAgICBjb25zdCBkZXBvc2l0ID0gdGhpcy5zYWZlVmFsdWUgKGJhbGFuY2VzLCAnZGVwb3NpdCcpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZnVuZHMgPSB0aGlzLnNhZmVWYWx1ZSAoYmFsYW5jZXMsICdmdW5kcycsIHt9KTtcbiAgICAgICAgY29uc3QgY3VycmVuY3lJZHMgPSBPYmplY3Qua2V5cyAoZnVuZHMpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1cnJlbmN5SWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW5jeUlkID0gY3VycmVuY3lJZHNbaV07XG4gICAgICAgICAgICBjb25zdCBjb2RlID0gdGhpcy5zYWZlQ3VycmVuY3lDb2RlIChjdXJyZW5jeUlkKTtcbiAgICAgICAgICAgIGNvbnN0IGJhbGFuY2UgPSB0aGlzLnNhZmVTdHJpbmcgKGZ1bmRzLCBjdXJyZW5jeUlkKTtcbiAgICAgICAgICAgIGNvbnN0IGFjY291bnQgPSB0aGlzLmFjY291bnQgKCk7XG4gICAgICAgICAgICBhY2NvdW50WydmcmVlJ10gPSBiYWxhbmNlO1xuICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IGJhbGFuY2U7XG4gICAgICAgICAgICBpZiAoZGVwb3NpdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbmN5SWQgaW4gZGVwb3NpdCkge1xuICAgICAgICAgICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gdGhpcy5zYWZlU3RyaW5nIChkZXBvc2l0LCBjdXJyZW5jeUlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRbY29kZV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnNhZmVCYWxhbmNlIChyZXN1bHQpO1xuICAgIH1cblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAocGFyYW1zID0ge30pOiBQcm9taXNlPEJhbGFuY2VzPiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAbWV0aG9kXG4gICAgICAgICAqIEBuYW1lIHphaWYjZmV0Y2hCYWxhbmNlXG4gICAgICAgICAqIEBzZWUgaHR0cHM6Ly96YWlmLWFwaS1kb2N1bWVudC5yZWFkdGhlZG9jcy5pby9qYS9sYXRlc3QvVHJhZGluZ0FQSS5odG1sI2lkMTBcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIHF1ZXJ5IGZvciBiYWxhbmNlIGFuZCBnZXQgdGhlIGFtb3VudCBvZiBmdW5kcyBhdmFpbGFibGUgZm9yIHRyYWRpbmcgb3IgZnVuZHMgbG9ja2VkIGluIG9yZGVyc1xuICAgICAgICAgKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gZXh0cmEgcGFyYW1ldGVycyBzcGVjaWZpYyB0byB0aGUgZXhjaGFuZ2UgQVBJIGVuZHBvaW50XG4gICAgICAgICAqIEByZXR1cm5zIHtvYmplY3R9IGEgW2JhbGFuY2Ugc3RydWN0dXJlXXtAbGluayBodHRwczovL2RvY3MuY2N4dC5jb20vIy8/aWQ9YmFsYW5jZS1zdHJ1Y3R1cmV9XG4gICAgICAgICAqL1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RHZXRJbmZvIChwYXJhbXMpO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUJhbGFuY2UgKHJlc3BvbnNlKTtcbiAgICB9XG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAoc3ltYm9sOiBzdHJpbmcsIGxpbWl0OiBJbnQgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KTogUHJvbWlzZTxPcmRlckJvb2s+IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBtZXRob2RcbiAgICAgICAgICogQG5hbWUgemFpZiNmZXRjaE9yZGVyQm9va1xuICAgICAgICAgKiBAc2VlIGh0dHBzOi8vemFpZi1hcGktZG9jdW1lbnQucmVhZHRoZWRvY3MuaW8vamEvbGF0ZXN0L1B1YmxpY0FQSS5odG1sI2lkMzRcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIGZldGNoZXMgaW5mb3JtYXRpb24gb24gb3BlbiBvcmRlcnMgd2l0aCBiaWQgKGJ1eSkgYW5kIGFzayAoc2VsbCkgcHJpY2VzLCB2b2x1bWVzIGFuZCBvdGhlciBkYXRhXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzeW1ib2wgdW5pZmllZCBzeW1ib2wgb2YgdGhlIG1hcmtldCB0byBmZXRjaCB0aGUgb3JkZXIgYm9vayBmb3JcbiAgICAgICAgICogQHBhcmFtIHtpbnR9IFtsaW1pdF0gdGhlIG1heGltdW0gYW1vdW50IG9mIG9yZGVyIGJvb2sgZW50cmllcyB0byByZXR1cm5cbiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IFtwYXJhbXNdIGV4dHJhIHBhcmFtZXRlcnMgc3BlY2lmaWMgdG8gdGhlIGV4Y2hhbmdlIEFQSSBlbmRwb2ludFxuICAgICAgICAgKiBAcmV0dXJucyB7b2JqZWN0fSBBIGRpY3Rpb25hcnkgb2YgW29yZGVyIGJvb2sgc3RydWN0dXJlc117QGxpbmsgaHR0cHM6Ly9kb2NzLmNjeHQuY29tLyMvP2lkPW9yZGVyLWJvb2stc3RydWN0dXJlfSBpbmRleGVkIGJ5IG1hcmtldCBzeW1ib2xzXG4gICAgICAgICAqL1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBjb25zdCBtYXJrZXQgPSB0aGlzLm1hcmtldCAoc3ltYm9sKTtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgICAgICAgICdwYWlyJzogbWFya2V0WydpZCddLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0RGVwdGhQYWlyICh0aGlzLmV4dGVuZCAocmVxdWVzdCwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlT3JkZXJCb29rIChyZXNwb25zZSwgbWFya2V0WydzeW1ib2wnXSk7XG4gICAgfVxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0OiBNYXJrZXQgPSB1bmRlZmluZWQpOiBUaWNrZXIge1xuICAgICAgICAvL1xuICAgICAgICAvLyB7XG4gICAgICAgIC8vICAgICBcImxhc3RcIjogOWUtMDgsXG4gICAgICAgIC8vICAgICBcImhpZ2hcIjogMWUtMDcsXG4gICAgICAgIC8vICAgICBcImxvd1wiOiA5ZS0wOCxcbiAgICAgICAgLy8gICAgIFwidndhcFwiOiAwLjAsXG4gICAgICAgIC8vICAgICBcInZvbHVtZVwiOiAxMzUyNTAuMCxcbiAgICAgICAgLy8gICAgIFwiYmlkXCI6IDllLTA4LFxuICAgICAgICAvLyAgICAgXCJhc2tcIjogMWUtMDdcbiAgICAgICAgLy8gfVxuICAgICAgICAvL1xuICAgICAgICBjb25zdCBzeW1ib2wgPSB0aGlzLnNhZmVTeW1ib2wgKHVuZGVmaW5lZCwgbWFya2V0KTtcbiAgICAgICAgY29uc3QgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGNvbnN0IHZ3YXAgPSB0aGlzLnNhZmVTdHJpbmcgKHRpY2tlciwgJ3Z3YXAnKTtcbiAgICAgICAgY29uc3QgYmFzZVZvbHVtZSA9IHRoaXMuc2FmZVN0cmluZyAodGlja2VyLCAndm9sdW1lJyk7XG4gICAgICAgIGNvbnN0IHF1b3RlVm9sdW1lID0gUHJlY2lzZS5zdHJpbmdNdWwgKGJhc2VWb2x1bWUsIHZ3YXApO1xuICAgICAgICBjb25zdCBsYXN0ID0gdGhpcy5zYWZlU3RyaW5nICh0aWNrZXIsICdsYXN0Jyk7XG4gICAgICAgIHJldHVybiB0aGlzLnNhZmVUaWNrZXIgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiB0aGlzLnNhZmVTdHJpbmcgKHRpY2tlciwgJ2hpZ2gnKSxcbiAgICAgICAgICAgICdsb3cnOiB0aGlzLnNhZmVTdHJpbmcgKHRpY2tlciwgJ2xvdycpLFxuICAgICAgICAgICAgJ2JpZCc6IHRoaXMuc2FmZVN0cmluZyAodGlja2VyLCAnYmlkJyksXG4gICAgICAgICAgICAnYmlkVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Fzayc6IHRoaXMuc2FmZVN0cmluZyAodGlja2VyLCAnYXNrJyksXG4gICAgICAgICAgICAnYXNrVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3Z3YXAnOiB2d2FwLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiBsYXN0LFxuICAgICAgICAgICAgJ2xhc3QnOiBsYXN0LFxuICAgICAgICAgICAgJ3ByZXZpb3VzQ2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogYmFzZVZvbHVtZSxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHF1b3RlVm9sdW1lLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH0sIG1hcmtldCk7XG4gICAgfVxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKHN5bWJvbDogc3RyaW5nLCBwYXJhbXMgPSB7fSk6IFByb21pc2U8VGlja2VyPiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAbWV0aG9kXG4gICAgICAgICAqIEBuYW1lIHphaWYjZmV0Y2hUaWNrZXJcbiAgICAgICAgICogQHNlZSBodHRwczovL3phaWYtYXBpLWRvY3VtZW50LnJlYWR0aGVkb2NzLmlvL2phL2xhdGVzdC9QdWJsaWNBUEkuaHRtbCNpZDIyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBmZXRjaGVzIGEgcHJpY2UgdGlja2VyLCBhIHN0YXRpc3RpY2FsIGNhbGN1bGF0aW9uIHdpdGggdGhlIGluZm9ybWF0aW9uIGNhbGN1bGF0ZWQgb3ZlciB0aGUgcGFzdCAyNCBob3VycyBmb3IgYSBzcGVjaWZpYyBtYXJrZXRcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHN5bWJvbCB1bmlmaWVkIHN5bWJvbCBvZiB0aGUgbWFya2V0IHRvIGZldGNoIHRoZSB0aWNrZXIgZm9yXG4gICAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zXSBleHRyYSBwYXJhbWV0ZXJzIHNwZWNpZmljIHRvIHRoZSBleGNoYW5nZSBBUEkgZW5kcG9pbnRcbiAgICAgICAgICogQHJldHVybnMge29iamVjdH0gYSBbdGlja2VyIHN0cnVjdHVyZV17QGxpbmsgaHR0cHM6Ly9kb2NzLmNjeHQuY29tLyMvP2lkPXRpY2tlci1zdHJ1Y3R1cmV9XG4gICAgICAgICAqL1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBjb25zdCBtYXJrZXQgPSB0aGlzLm1hcmtldCAoc3ltYm9sKTtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgICAgICAgICdwYWlyJzogbWFya2V0WydpZCddLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB0aWNrZXIgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRpY2tlclBhaXIgKHRoaXMuZXh0ZW5kIChyZXF1ZXN0LCBwYXJhbXMpKTtcbiAgICAgICAgLy9cbiAgICAgICAgLy8ge1xuICAgICAgICAvLyAgICAgXCJsYXN0XCI6IDllLTA4LFxuICAgICAgICAvLyAgICAgXCJoaWdoXCI6IDFlLTA3LFxuICAgICAgICAvLyAgICAgXCJsb3dcIjogOWUtMDgsXG4gICAgICAgIC8vICAgICBcInZ3YXBcIjogMC4wLFxuICAgICAgICAvLyAgICAgXCJ2b2x1bWVcIjogMTM1MjUwLjAsXG4gICAgICAgIC8vICAgICBcImJpZFwiOiA5ZS0wOCxcbiAgICAgICAgLy8gICAgIFwiYXNrXCI6IDFlLTA3XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy9cbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KTtcbiAgICB9XG5cbiAgICBwYXJzZVRyYWRlICh0cmFkZSwgbWFya2V0OiBNYXJrZXQgPSB1bmRlZmluZWQpOiBUcmFkZSB7XG4gICAgICAgIC8vXG4gICAgICAgIC8vIGZldGNoVHJhZGVzIChwdWJsaWMpXG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgICAge1xuICAgICAgICAvLyAgICAgICAgICBcImRhdGVcIjogMTY0ODU1OTQxNCxcbiAgICAgICAgLy8gICAgICAgICAgXCJwcmljZVwiOiA1ODgwMzc1LjAsXG4gICAgICAgIC8vICAgICAgICAgIFwiYW1vdW50XCI6IDAuMDE3LFxuICAgICAgICAvLyAgICAgICAgICBcInRpZFwiOiAxNzYxMjY1NTcsXG4gICAgICAgIC8vICAgICAgICAgIFwiY3VycmVuY3lfcGFpclwiOiBcImJ0Y19qcHlcIixcbiAgICAgICAgLy8gICAgICAgICAgXCJ0cmFkZV90eXBlXCI6IFwiYXNrXCJcbiAgICAgICAgLy8gICAgICB9XG4gICAgICAgIC8vXG4gICAgICAgIGxldCBzaWRlID0gdGhpcy5zYWZlU3RyaW5nICh0cmFkZSwgJ3RyYWRlX3R5cGUnKTtcbiAgICAgICAgc2lkZSA9IChzaWRlID09PSAnYmlkJykgPyAnYnV5JyA6ICdzZWxsJztcbiAgICAgICAgY29uc3QgdGltZXN0YW1wID0gdGhpcy5zYWZlVGltZXN0YW1wICh0cmFkZSwgJ2RhdGUnKTtcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLnNhZmVTdHJpbmcyICh0cmFkZSwgJ2lkJywgJ3RpZCcpO1xuICAgICAgICBjb25zdCBwcmljZVN0cmluZyA9IHRoaXMuc2FmZVN0cmluZyAodHJhZGUsICdwcmljZScpO1xuICAgICAgICBjb25zdCBhbW91bnRTdHJpbmcgPSB0aGlzLnNhZmVTdHJpbmcgKHRyYWRlLCAnYW1vdW50Jyk7XG4gICAgICAgIGNvbnN0IG1hcmtldElkID0gdGhpcy5zYWZlU3RyaW5nICh0cmFkZSwgJ2N1cnJlbmN5X3BhaXInKTtcbiAgICAgICAgY29uc3Qgc3ltYm9sID0gdGhpcy5zYWZlU3ltYm9sIChtYXJrZXRJZCwgbWFya2V0LCAnXycpO1xuICAgICAgICByZXR1cm4gdGhpcy5zYWZlVHJhZGUgKHtcbiAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgJ2luZm8nOiB0cmFkZSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgJ3R5cGUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnc2lkZSc6IHNpZGUsXG4gICAgICAgICAgICAnb3JkZXInOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAndGFrZXJPck1ha2VyJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3ByaWNlJzogcHJpY2VTdHJpbmcsXG4gICAgICAgICAgICAnYW1vdW50JzogYW1vdW50U3RyaW5nLFxuICAgICAgICAgICAgJ2Nvc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmVlJzogdW5kZWZpbmVkLFxuICAgICAgICB9LCBtYXJrZXQpO1xuICAgIH1cblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChzeW1ib2w6IHN0cmluZywgc2luY2U6IEludCA9IHVuZGVmaW5lZCwgbGltaXQ6IEludCA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pOiBQcm9taXNlPFRyYWRlW10+IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBtZXRob2RcbiAgICAgICAgICogQG5hbWUgemFpZiNmZXRjaFRyYWRlc1xuICAgICAgICAgKiBAc2VlIGh0dHBzOi8vemFpZi1hcGktZG9jdW1lbnQucmVhZHRoZWRvY3MuaW8vamEvbGF0ZXN0L1B1YmxpY0FQSS5odG1sI2lkMjhcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIGdldCB0aGUgbGlzdCBvZiBtb3N0IHJlY2VudCB0cmFkZXMgZm9yIGEgcGFydGljdWxhciBzeW1ib2xcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHN5bWJvbCB1bmlmaWVkIHN5bWJvbCBvZiB0aGUgbWFya2V0IHRvIGZldGNoIHRyYWRlcyBmb3JcbiAgICAgICAgICogQHBhcmFtIHtpbnR9IFtzaW5jZV0gdGltZXN0YW1wIGluIG1zIG9mIHRoZSBlYXJsaWVzdCB0cmFkZSB0byBmZXRjaFxuICAgICAgICAgKiBAcGFyYW0ge2ludH0gW2xpbWl0XSB0aGUgbWF4aW11bSBhbW91bnQgb2YgdHJhZGVzIHRvIGZldGNoXG4gICAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zXSBleHRyYSBwYXJhbWV0ZXJzIHNwZWNpZmljIHRvIHRoZSBleGNoYW5nZSBBUEkgZW5kcG9pbnRcbiAgICAgICAgICogQHJldHVybnMge1RyYWRlW119IGEgbGlzdCBvZiBbdHJhZGUgc3RydWN0dXJlc117QGxpbmsgaHR0cHM6Ly9kb2NzLmNjeHQuY29tLyMvP2lkPXB1YmxpYy10cmFkZXN9XG4gICAgICAgICAqL1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBjb25zdCBtYXJrZXQgPSB0aGlzLm1hcmtldCAoc3ltYm9sKTtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgICAgICAgICdwYWlyJzogbWFya2V0WydpZCddLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRyYWRlc1BhaXIgKHRoaXMuZXh0ZW5kIChyZXF1ZXN0LCBwYXJhbXMpKTtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgICBbXG4gICAgICAgIC8vICAgICAgICAgIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgIFwiZGF0ZVwiOiAxNjQ4NTU5NDE0LFxuICAgICAgICAvLyAgICAgICAgICAgICAgXCJwcmljZVwiOiA1ODgwMzc1LjAsXG4gICAgICAgIC8vICAgICAgICAgICAgICBcImFtb3VudFwiOiAwLjAxNyxcbiAgICAgICAgLy8gICAgICAgICAgICAgIFwidGlkXCI6IDE3NjEyNjU1NyxcbiAgICAgICAgLy8gICAgICAgICAgICAgIFwiY3VycmVuY3lfcGFpclwiOiBcImJ0Y19qcHlcIixcbiAgICAgICAgLy8gICAgICAgICAgICAgIFwidHJhZGVfdHlwZVwiOiBcImFza1wiXG4gICAgICAgIC8vICAgICAgICAgIH0sIC4uLlxuICAgICAgICAvLyAgICAgIF1cbiAgICAgICAgLy9cbiAgICAgICAgY29uc3QgbnVtVHJhZGVzID0gcmVzcG9uc2UubGVuZ3RoO1xuICAgICAgICBpZiAobnVtVHJhZGVzID09PSAxKSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdFRyYWRlID0gcmVzcG9uc2VbMF07XG4gICAgICAgICAgICBpZiAoIU9iamVjdC5rZXlzIChmaXJzdFRyYWRlKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVHJhZGVzIChyZXNwb25zZSwgbWFya2V0LCBzaW5jZSwgbGltaXQpO1xuICAgIH1cblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChzeW1ib2w6IHN0cmluZywgdHlwZTogT3JkZXJUeXBlLCBzaWRlOiBPcmRlclNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAbWV0aG9kXG4gICAgICAgICAqIEBuYW1lIHphaWYjY3JlYXRlT3JkZXJcbiAgICAgICAgICogQHNlZSBodHRwczovL3phaWYtYXBpLWRvY3VtZW50LnJlYWR0aGVkb2NzLmlvL2phL2xhdGVzdC9NYXJnaW5UcmFkaW5nQVBJLmh0bWwjaWQyM1xuICAgICAgICAgKiBAZGVzY3JpcHRpb24gY3JlYXRlIGEgdHJhZGUgb3JkZXJcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHN5bWJvbCB1bmlmaWVkIHN5bWJvbCBvZiB0aGUgbWFya2V0IHRvIGNyZWF0ZSBhbiBvcmRlciBpblxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBtdXN0IGJlICdsaW1pdCdcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHNpZGUgJ2J1eScgb3IgJ3NlbGwnXG4gICAgICAgICAqIEBwYXJhbSB7ZmxvYXR9IGFtb3VudCBob3cgbXVjaCBvZiBjdXJyZW5jeSB5b3Ugd2FudCB0byB0cmFkZSBpbiB1bml0cyBvZiBiYXNlIGN1cnJlbmN5XG4gICAgICAgICAqIEBwYXJhbSB7ZmxvYXR9IFtwcmljZV0gdGhlIHByaWNlIGF0IHdoaWNoIHRoZSBvcmRlciBpcyB0byBiZSBmdWxsZmlsbGVkLCBpbiB1bml0cyBvZiB0aGUgcXVvdGUgY3VycmVuY3ksIGlnbm9yZWQgaW4gbWFya2V0IG9yZGVyc1xuICAgICAgICAgKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gZXh0cmEgcGFyYW1ldGVycyBzcGVjaWZpYyB0byB0aGUgZXhjaGFuZ2UgQVBJIGVuZHBvaW50XG4gICAgICAgICAqIEByZXR1cm5zIHtvYmplY3R9IGFuIFtvcmRlciBzdHJ1Y3R1cmVde0BsaW5rIGh0dHBzOi8vZG9jcy5jY3h0LmNvbS8jLz9pZD1vcmRlci1zdHJ1Y3R1cmV9XG4gICAgICAgICAqL1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBpZiAodHlwZSAhPT0gJ2xpbWl0Jykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnIGNyZWF0ZU9yZGVyKCkgYWxsb3dzIGxpbWl0IG9yZGVycyBvbmx5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWFya2V0ID0gdGhpcy5tYXJrZXQgKHN5bWJvbCk7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICAgICAgICAnY3VycmVuY3lfcGFpcic6IG1hcmtldFsnaWQnXSxcbiAgICAgICAgICAgICdhY3Rpb24nOiAoc2lkZSA9PT0gJ2J1eScpID8gJ2JpZCcgOiAnYXNrJyxcbiAgICAgICAgICAgICdhbW91bnQnOiBhbW91bnQsXG4gICAgICAgICAgICAncHJpY2UnOiBwcmljZSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0VHJhZGUgKHRoaXMuZXh0ZW5kIChyZXF1ZXN0LCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2FmZU9yZGVyICh7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ3JldHVybiddWydvcmRlcl9pZCddLnRvU3RyaW5nICgpLFxuICAgICAgICB9LCBtYXJrZXQpO1xuICAgIH1cblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZDogc3RyaW5nLCBzeW1ib2w6IFN0ciA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBtZXRob2RcbiAgICAgICAgICogQG5hbWUgemFpZiNjYW5jZWxPcmRlclxuICAgICAgICAgKiBAc2VlIGh0dHBzOi8vemFpZi1hcGktZG9jdW1lbnQucmVhZHRoZWRvY3MuaW8vamEvbGF0ZXN0L1RyYWRpbmdBUEkuaHRtbCNpZDM3XG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBjYW5jZWxzIGFuIG9wZW4gb3JkZXJcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIG9yZGVyIGlkXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzeW1ib2wgbm90IHVzZWQgYnkgemFpZiBjYW5jZWxPcmRlciAoKVxuICAgICAgICAgKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gZXh0cmEgcGFyYW1ldGVycyBzcGVjaWZpYyB0byB0aGUgZXhjaGFuZ2UgQVBJIGVuZHBvaW50XG4gICAgICAgICAqIEByZXR1cm5zIHtvYmplY3R9IEFuIFtvcmRlciBzdHJ1Y3R1cmVde0BsaW5rIGh0dHBzOi8vZG9jcy5jY3h0LmNvbS8jLz9pZD1vcmRlci1zdHJ1Y3R1cmV9XG4gICAgICAgICAqL1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0ge1xuICAgICAgICAgICAgJ29yZGVyX2lkJzogaWQsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsT3JkZXIgKHRoaXMuZXh0ZW5kIChyZXF1ZXN0LCBwYXJhbXMpKTtcbiAgICB9XG5cbiAgICBwYXJzZU9yZGVyIChvcmRlciwgbWFya2V0OiBNYXJrZXQgPSB1bmRlZmluZWQpOiBPcmRlciB7XG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgICB7XG4gICAgICAgIC8vICAgICAgICAgXCJjdXJyZW5jeV9wYWlyXCI6IFwiYnRjX2pweVwiLFxuICAgICAgICAvLyAgICAgICAgIFwiYWN0aW9uXCI6IFwiYXNrXCIsXG4gICAgICAgIC8vICAgICAgICAgXCJhbW91bnRcIjogMC4wMyxcbiAgICAgICAgLy8gICAgICAgICBcInByaWNlXCI6IDU2MDAwLFxuICAgICAgICAvLyAgICAgICAgIFwidGltZXN0YW1wXCI6IDE0MDIwMjExMjUsXG4gICAgICAgIC8vICAgICAgICAgXCJjb21tZW50XCIgOiBcImRlbW9cIlxuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvL1xuICAgICAgICBsZXQgc2lkZSA9IHRoaXMuc2FmZVN0cmluZyAob3JkZXIsICdhY3Rpb24nKTtcbiAgICAgICAgc2lkZSA9IChzaWRlID09PSAnYmlkJykgPyAnYnV5JyA6ICdzZWxsJztcbiAgICAgICAgY29uc3QgdGltZXN0YW1wID0gdGhpcy5zYWZlVGltZXN0YW1wIChvcmRlciwgJ3RpbWVzdGFtcCcpO1xuICAgICAgICBjb25zdCBtYXJrZXRJZCA9IHRoaXMuc2FmZVN0cmluZyAob3JkZXIsICdjdXJyZW5jeV9wYWlyJyk7XG4gICAgICAgIGNvbnN0IHN5bWJvbCA9IHRoaXMuc2FmZVN5bWJvbCAobWFya2V0SWQsIG1hcmtldCwgJ18nKTtcbiAgICAgICAgY29uc3QgcHJpY2UgPSB0aGlzLnNhZmVTdHJpbmcgKG9yZGVyLCAncHJpY2UnKTtcbiAgICAgICAgY29uc3QgYW1vdW50ID0gdGhpcy5zYWZlU3RyaW5nIChvcmRlciwgJ2Ftb3VudCcpO1xuICAgICAgICBjb25zdCBpZCA9IHRoaXMuc2FmZVN0cmluZyAob3JkZXIsICdpZCcpO1xuICAgICAgICByZXR1cm4gdGhpcy5zYWZlT3JkZXIgKHtcbiAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgJ2NsaWVudE9yZGVySWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2xhc3RUcmFkZVRpbWVzdGFtcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdzdGF0dXMnOiAnb3BlbicsXG4gICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgJ3R5cGUnOiAnbGltaXQnLFxuICAgICAgICAgICAgJ3RpbWVJbkZvcmNlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3Bvc3RPbmx5JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3NpZGUnOiBzaWRlLFxuICAgICAgICAgICAgJ3ByaWNlJzogcHJpY2UsXG4gICAgICAgICAgICAnc3RvcFByaWNlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3RyaWdnZXJQcmljZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjb3N0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgICAgICdmaWxsZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncmVtYWluaW5nJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3RyYWRlcyc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnaW5mbyc6IG9yZGVyLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgIH0sIG1hcmtldCk7XG4gICAgfVxuXG4gICAgYXN5bmMgZmV0Y2hPcGVuT3JkZXJzIChzeW1ib2w6IFN0ciA9IHVuZGVmaW5lZCwgc2luY2U6IEludCA9IHVuZGVmaW5lZCwgbGltaXQ6IEludCA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pOiBQcm9taXNlPE9yZGVyW10+IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBtZXRob2RcbiAgICAgICAgICogQG5hbWUgemFpZiNmZXRjaE9wZW5PcmRlcnNcbiAgICAgICAgICogQHNlZSBodHRwczovL3phaWYtYXBpLWRvY3VtZW50LnJlYWR0aGVkb2NzLmlvL2phL2xhdGVzdC9NYXJnaW5UcmFkaW5nQVBJLmh0bWwjaWQyOFxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gZmV0Y2ggYWxsIHVuZmlsbGVkIGN1cnJlbnRseSBvcGVuIG9yZGVyc1xuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3ltYm9sIHVuaWZpZWQgbWFya2V0IHN5bWJvbFxuICAgICAgICAgKiBAcGFyYW0ge2ludH0gW3NpbmNlXSB0aGUgZWFybGllc3QgdGltZSBpbiBtcyB0byBmZXRjaCBvcGVuIG9yZGVycyBmb3JcbiAgICAgICAgICogQHBhcmFtIHtpbnR9IFtsaW1pdF0gdGhlIG1heGltdW0gbnVtYmVyIG9mICBvcGVuIG9yZGVycyBzdHJ1Y3R1cmVzIHRvIHJldHJpZXZlXG4gICAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zXSBleHRyYSBwYXJhbWV0ZXJzIHNwZWNpZmljIHRvIHRoZSBleGNoYW5nZSBBUEkgZW5kcG9pbnRcbiAgICAgICAgICogQHJldHVybnMge09yZGVyW119IGEgbGlzdCBvZiBbb3JkZXIgc3RydWN0dXJlc117QGxpbmsgaHR0cHM6Ly9kb2NzLmNjeHQuY29tLyMvP2lkPW9yZGVyLXN0cnVjdHVyZX1cbiAgICAgICAgICovXG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBtYXJrZXQ6IE1hcmtldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgICAgICAgIC8vICdpc190b2tlbic6IGZhbHNlLFxuICAgICAgICAgICAgLy8gJ2lzX3Rva2VuX2JvdGgnOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHN5bWJvbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBtYXJrZXQgPSB0aGlzLm1hcmtldCAoc3ltYm9sKTtcbiAgICAgICAgICAgIHJlcXVlc3RbJ2N1cnJlbmN5X3BhaXInXSA9IG1hcmtldFsnaWQnXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RBY3RpdmVPcmRlcnMgKHRoaXMuZXh0ZW5kIChyZXF1ZXN0LCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VPcmRlcnMgKHJlc3BvbnNlWydyZXR1cm4nXSwgbWFya2V0LCBzaW5jZSwgbGltaXQpO1xuICAgIH1cblxuICAgIGFzeW5jIGZldGNoQ2xvc2VkT3JkZXJzIChzeW1ib2w6IFN0ciA9IHVuZGVmaW5lZCwgc2luY2U6IEludCA9IHVuZGVmaW5lZCwgbGltaXQ6IEludCA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pOiBQcm9taXNlPE9yZGVyW10+IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBtZXRob2RcbiAgICAgICAgICogQG5hbWUgemFpZiNmZXRjaENsb3NlZE9yZGVyc1xuICAgICAgICAgKiBAc2VlIGh0dHBzOi8vemFpZi1hcGktZG9jdW1lbnQucmVhZHRoZWRvY3MuaW8vamEvbGF0ZXN0L1RyYWRpbmdBUEkuaHRtbCNpZDI0XG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBmZXRjaGVzIGluZm9ybWF0aW9uIG9uIG11bHRpcGxlIGNsb3NlZCBvcmRlcnMgbWFkZSBieSB0aGUgdXNlclxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3ltYm9sIHVuaWZpZWQgbWFya2V0IHN5bWJvbCBvZiB0aGUgbWFya2V0IG9yZGVycyB3ZXJlIG1hZGUgaW5cbiAgICAgICAgICogQHBhcmFtIHtpbnR9IFtzaW5jZV0gdGhlIGVhcmxpZXN0IHRpbWUgaW4gbXMgdG8gZmV0Y2ggb3JkZXJzIGZvclxuICAgICAgICAgKiBAcGFyYW0ge2ludH0gW2xpbWl0XSB0aGUgbWF4aW11bSBudW1iZXIgb2YgIG9yZGUgc3RydWN0dXJlcyB0byByZXRyaWV2ZVxuICAgICAgICAgKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gZXh0cmEgcGFyYW1ldGVycyBzcGVjaWZpYyB0byB0aGUgZXhjaGFuZ2UgQVBJIGVuZHBvaW50XG4gICAgICAgICAqIEByZXR1cm5zIHtPcmRlcltdfSBhIGxpc3Qgb2YgW29yZGVyIHN0cnVjdHVyZXNde0BsaW5rIGh0dHBzOi8vZG9jcy5jY3h0LmNvbS8jLz9pZD1vcmRlci1zdHJ1Y3R1cmV9XG4gICAgICAgICAqL1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgbWFya2V0OiBNYXJrZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICAgICAgICAvLyAnZnJvbSc6IDAsXG4gICAgICAgICAgICAvLyAnY291bnQnOiAxMDAwLFxuICAgICAgICAgICAgLy8gJ2Zyb21faWQnOiAwLFxuICAgICAgICAgICAgLy8gJ2VuZF9pZCc6IDEwMDAsXG4gICAgICAgICAgICAvLyAnb3JkZXInOiAnREVTQycsXG4gICAgICAgICAgICAvLyAnc2luY2UnOiAxNTAzODIxMDUxLFxuICAgICAgICAgICAgLy8gJ2VuZCc6IDE1MDM4MjEwNTEsXG4gICAgICAgICAgICAvLyAnaXNfdG9rZW4nOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHN5bWJvbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBtYXJrZXQgPSB0aGlzLm1hcmtldCAoc3ltYm9sKTtcbiAgICAgICAgICAgIHJlcXVlc3RbJ2N1cnJlbmN5X3BhaXInXSA9IG1hcmtldFsnaWQnXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RUcmFkZUhpc3RvcnkgKHRoaXMuZXh0ZW5kIChyZXF1ZXN0LCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VPcmRlcnMgKHJlc3BvbnNlWydyZXR1cm4nXSwgbWFya2V0LCBzaW5jZSwgbGltaXQpO1xuICAgIH1cblxuICAgIGFzeW5jIHdpdGhkcmF3IChjb2RlOiBzdHJpbmcsIGFtb3VudCwgYWRkcmVzcywgdGFnID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICAvKipcbiAgICAgICAgICogQG1ldGhvZFxuICAgICAgICAgKiBAbmFtZSB6YWlmI3dpdGhkcmF3XG4gICAgICAgICAqIEBzZWUgaHR0cHM6Ly96YWlmLWFwaS1kb2N1bWVudC5yZWFkdGhlZG9jcy5pby9qYS9sYXRlc3QvVHJhZGluZ0FQSS5odG1sI2lkNDFcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIG1ha2UgYSB3aXRoZHJhd2FsXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjb2RlIHVuaWZpZWQgY3VycmVuY3kgY29kZVxuICAgICAgICAgKiBAcGFyYW0ge2Zsb2F0fSBhbW91bnQgdGhlIGFtb3VudCB0byB3aXRoZHJhd1xuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gYWRkcmVzcyB0aGUgYWRkcmVzcyB0byB3aXRoZHJhdyB0b1xuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGFnXG4gICAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zXSBleHRyYSBwYXJhbWV0ZXJzIHNwZWNpZmljIHRvIHRoZSBleGNoYW5nZSBBUEkgZW5kcG9pbnRcbiAgICAgICAgICogQHJldHVybnMge29iamVjdH0gYSBbdHJhbnNhY3Rpb24gc3RydWN0dXJlXXtAbGluayBodHRwczovL2RvY3MuY2N4dC5jb20vIy8/aWQ9dHJhbnNhY3Rpb24tc3RydWN0dXJlfVxuICAgICAgICAgKi9cbiAgICAgICAgWyB0YWcsIHBhcmFtcyBdID0gdGhpcy5oYW5kbGVXaXRoZHJhd1RhZ0FuZFBhcmFtcyAodGFnLCBwYXJhbXMpO1xuICAgICAgICB0aGlzLmNoZWNrQWRkcmVzcyAoYWRkcmVzcyk7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jeSAoY29kZSk7XG4gICAgICAgIGlmIChjb2RlID09PSAnSlBZJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnIHdpdGhkcmF3KCkgZG9lcyBub3QgYWxsb3cgJyArIGNvZGUgKyAnIHdpdGhkcmF3YWxzJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgICAgICAgICdjdXJyZW5jeSc6IGN1cnJlbmN5WydpZCddLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgICAgICdhZGRyZXNzJzogYWRkcmVzcyxcbiAgICAgICAgICAgIC8vICdtZXNzYWdlJzogJ0hpIScsIC8vIFhFTSBhbmQgb3RoZXJzXG4gICAgICAgICAgICAvLyAnb3B0X2ZlZSc6IDAuMDAzLCAvLyBCVEMgYW5kIE1PTkEgb25seVxuICAgICAgICB9O1xuICAgICAgICBpZiAodGFnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJlcXVlc3RbJ21lc3NhZ2UnXSA9IHRhZztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0V2l0aGRyYXcgKHRoaXMuZXh0ZW5kIChyZXF1ZXN0LCBwYXJhbXMpKTtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgIHtcbiAgICAgICAgLy8gICAgICAgICBcInN1Y2Nlc3NcIjogMSxcbiAgICAgICAgLy8gICAgICAgICBcInJldHVyblwiOiB7XG4gICAgICAgIC8vICAgICAgICAgICAgIFwiaWRcIjogMjM2MzQsXG4gICAgICAgIC8vICAgICAgICAgICAgIFwiZmVlXCI6IDAuMDAxLFxuICAgICAgICAvLyAgICAgICAgICAgICBcInR4aWRcIjosXG4gICAgICAgIC8vICAgICAgICAgICAgIFwiZnVuZHNcIjoge1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgXCJqcHlcIjogMTUzMjAsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICBcImJ0Y1wiOiAxLjM5MixcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIFwieGVtXCI6IDEwMC4yLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgXCJtb25hXCI6IDI2MDBcbiAgICAgICAgLy8gICAgICAgICAgICAgfVxuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy9cbiAgICAgICAgY29uc3QgcmV0dXJuRGF0YSA9IHRoaXMuc2FmZVZhbHVlIChyZXN1bHQsICdyZXR1cm4nKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUcmFuc2FjdGlvbiAocmV0dXJuRGF0YSwgY3VycmVuY3kpO1xuICAgIH1cblxuICAgIHBhcnNlVHJhbnNhY3Rpb24gKHRyYW5zYWN0aW9uLCBjdXJyZW5jeTogQ3VycmVuY3kgPSB1bmRlZmluZWQpOiBUcmFuc2FjdGlvbiB7XG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgICB7XG4gICAgICAgIC8vICAgICAgICAgXCJpZFwiOiAyMzYzNCxcbiAgICAgICAgLy8gICAgICAgICBcImZlZVwiOiAwLjAwMSxcbiAgICAgICAgLy8gICAgICAgICBcInR4aWRcIjosXG4gICAgICAgIC8vICAgICAgICAgXCJmdW5kc1wiOiB7XG4gICAgICAgIC8vICAgICAgICAgICAgIFwianB5XCI6IDE1MzIwLFxuICAgICAgICAvLyAgICAgICAgICAgICBcImJ0Y1wiOiAxLjM5MixcbiAgICAgICAgLy8gICAgICAgICAgICAgXCJ4ZW1cIjogMTAwLjIsXG4gICAgICAgIC8vICAgICAgICAgICAgIFwibW9uYVwiOiAyNjAwXG4gICAgICAgIC8vICAgICAgICAgfVxuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvL1xuICAgICAgICBjdXJyZW5jeSA9IHRoaXMuc2FmZUN1cnJlbmN5ICh1bmRlZmluZWQsIGN1cnJlbmN5KTtcbiAgICAgICAgbGV0IGZlZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgZmVlQ29zdCA9IHRoaXMuc2FmZVZhbHVlICh0cmFuc2FjdGlvbiwgJ2ZlZScpO1xuICAgICAgICBpZiAoZmVlQ29zdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmZWUgPSB7XG4gICAgICAgICAgICAgICAgJ2Nvc3QnOiBmZWVDb3N0LFxuICAgICAgICAgICAgICAgICdjdXJyZW5jeSc6IGN1cnJlbmN5Wydjb2RlJ10sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLnNhZmVTdHJpbmcgKHRyYW5zYWN0aW9uLCAnaWQnKSxcbiAgICAgICAgICAgICd0eGlkJzogdGhpcy5zYWZlU3RyaW5nICh0cmFuc2FjdGlvbiwgJ3R4aWQnKSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbmV0d29yayc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhZGRyZXNzRnJvbSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhZGRyZXNzJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2FkZHJlc3NUbyc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhbW91bnQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAndHlwZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjdXJyZW5jeSc6IGN1cnJlbmN5Wydjb2RlJ10sXG4gICAgICAgICAgICAnc3RhdHVzJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3VwZGF0ZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAndGFnRnJvbSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICd0YWcnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAndGFnVG8nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY29tbWVudCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdpbnRlcm5hbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmZWUnOiBmZWUsXG4gICAgICAgICAgICAnaW5mbyc6IHRyYW5zYWN0aW9uLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGN1c3RvbU5vbmNlICgpIHtcbiAgICAgICAgY29uc3QgbnVtID0gKHRoaXMubWlsbGlzZWNvbmRzICgpIC8gMTAwMCkudG9TdHJpbmcgKCk7XG4gICAgICAgIGNvbnN0IG5vbmNlID0gcGFyc2VGbG9hdCAobnVtKTtcbiAgICAgICAgcmV0dXJuIG5vbmNlLnRvRml4ZWQgKDgpO1xuICAgIH1cblxuICAgIHNpZ24gKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ11bJ3Jlc3QnXSArICcvJztcbiAgICAgICAgaWYgKGFwaSA9PT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIHVybCArPSAnYXBpLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSBpZiAoYXBpID09PSAnZmFwaScpIHtcbiAgICAgICAgICAgIHVybCArPSAnZmFwaS8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkQ3JlZGVudGlhbHMgKCk7XG4gICAgICAgICAgICBpZiAoYXBpID09PSAnZWNhcGknKSB7XG4gICAgICAgICAgICAgICAgdXJsICs9ICdlY2FwaSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGFwaSA9PT0gJ3RsYXBpJykge1xuICAgICAgICAgICAgICAgIHVybCArPSAndGxhcGknO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB1cmwgKz0gJ3RhcGknO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgbm9uY2UgPSB0aGlzLmN1c3RvbU5vbmNlICgpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMudXJsZW5jb2RlICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgICAgICdtZXRob2QnOiBwYXRoLFxuICAgICAgICAgICAgICAgICdub25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgICAgICAnS2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ1NpZ24nOiB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChib2R5KSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgc2hhNTEyKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgJ3VybCc6IHVybCwgJ21ldGhvZCc6IG1ldGhvZCwgJ2JvZHknOiBib2R5LCAnaGVhZGVycyc6IGhlYWRlcnMgfTtcbiAgICB9XG5cbiAgICBoYW5kbGVFcnJvcnMgKGh0dHBDb2RlLCByZWFzb24sIHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5LCByZXNwb25zZSwgcmVxdWVzdEhlYWRlcnMsIHJlcXVlc3RCb2R5KSB7XG4gICAgICAgIGlmIChyZXNwb25zZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgICB7XCJlcnJvclwiOiBcInVuc3VwcG9ydGVkIGN1cnJlbmN5X3BhaXJcIn1cbiAgICAgICAgLy9cbiAgICAgICAgY29uc3QgZmVlZGJhY2sgPSB0aGlzLmlkICsgJyAnICsgYm9keTtcbiAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLnNhZmVTdHJpbmcgKHJlc3BvbnNlLCAnZXJyb3InKTtcbiAgICAgICAgaWYgKGVycm9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMudGhyb3dFeGFjdGx5TWF0Y2hlZEV4Y2VwdGlvbiAodGhpcy5leGNlcHRpb25zWydleGFjdCddLCBlcnJvciwgZmVlZGJhY2spO1xuICAgICAgICAgICAgdGhpcy50aHJvd0Jyb2FkbHlNYXRjaGVkRXhjZXB0aW9uICh0aGlzLmV4Y2VwdGlvbnNbJ2Jyb2FkJ10sIGVycm9yLCBmZWVkYmFjayk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAoZmVlZGJhY2spOyAvLyB1bmtub3duIG1lc3NhZ2VcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdWNjZXNzID0gdGhpcy5zYWZlVmFsdWUgKHJlc3BvbnNlLCAnc3VjY2VzcycsIHRydWUpO1xuICAgICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yIChmZWVkYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG4iXX0=
288203
+
288035
288204
  /***/ })
288036
288205
 
288037
288206
  /******/ });
@@ -288140,210 +288309,210 @@ __webpack_require__.r(__webpack_exports__);
288140
288309
  /* harmony export */ Precise: () => (/* reexport safe */ _src_base_Precise_js__WEBPACK_IMPORTED_MODULE_154__.O),
288141
288310
  /* harmony export */ RateLimitExceeded: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_156__.RateLimitExceeded),
288142
288311
  /* harmony export */ RequestTimeout: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_156__.RequestTimeout),
288143
- /* harmony export */ ace: () => (/* reexport safe */ _src_ace_js__WEBPACK_IMPORTED_MODULE_1__.Z),
288144
- /* harmony export */ alpaca: () => (/* reexport safe */ _src_alpaca_js__WEBPACK_IMPORTED_MODULE_2__.Z),
288145
- /* harmony export */ ascendex: () => (/* reexport safe */ _src_ascendex_js__WEBPACK_IMPORTED_MODULE_3__.Z),
288146
- /* harmony export */ bequant: () => (/* reexport safe */ _src_bequant_js__WEBPACK_IMPORTED_MODULE_4__.Z),
288147
- /* harmony export */ bigone: () => (/* reexport safe */ _src_bigone_js__WEBPACK_IMPORTED_MODULE_5__.Z),
288148
- /* harmony export */ binance: () => (/* reexport safe */ _src_binance_js__WEBPACK_IMPORTED_MODULE_6__.Z),
288149
- /* harmony export */ binancecoinm: () => (/* reexport safe */ _src_binancecoinm_js__WEBPACK_IMPORTED_MODULE_7__.Z),
288150
- /* harmony export */ binanceus: () => (/* reexport safe */ _src_binanceus_js__WEBPACK_IMPORTED_MODULE_8__.Z),
288151
- /* harmony export */ binanceusdm: () => (/* reexport safe */ _src_binanceusdm_js__WEBPACK_IMPORTED_MODULE_9__.Z),
288152
- /* harmony export */ bingx: () => (/* reexport safe */ _src_bingx_js__WEBPACK_IMPORTED_MODULE_10__.Z),
288153
- /* harmony export */ bit2c: () => (/* reexport safe */ _src_bit2c_js__WEBPACK_IMPORTED_MODULE_11__.Z),
288154
- /* harmony export */ bitbank: () => (/* reexport safe */ _src_bitbank_js__WEBPACK_IMPORTED_MODULE_12__.Z),
288155
- /* harmony export */ bitbay: () => (/* reexport safe */ _src_bitbay_js__WEBPACK_IMPORTED_MODULE_13__.Z),
288156
- /* harmony export */ bitbns: () => (/* reexport safe */ _src_bitbns_js__WEBPACK_IMPORTED_MODULE_14__.Z),
288157
- /* harmony export */ bitcoincom: () => (/* reexport safe */ _src_bitcoincom_js__WEBPACK_IMPORTED_MODULE_15__.Z),
288158
- /* harmony export */ bitfinex: () => (/* reexport safe */ _src_bitfinex_js__WEBPACK_IMPORTED_MODULE_16__.Z),
288159
- /* harmony export */ bitfinex2: () => (/* reexport safe */ _src_bitfinex2_js__WEBPACK_IMPORTED_MODULE_17__.Z),
288160
- /* harmony export */ bitflyer: () => (/* reexport safe */ _src_bitflyer_js__WEBPACK_IMPORTED_MODULE_18__.Z),
288161
- /* harmony export */ bitforex: () => (/* reexport safe */ _src_bitforex_js__WEBPACK_IMPORTED_MODULE_19__.Z),
288162
- /* harmony export */ bitget: () => (/* reexport safe */ _src_bitget_js__WEBPACK_IMPORTED_MODULE_20__.Z),
288163
- /* harmony export */ bithumb: () => (/* reexport safe */ _src_bithumb_js__WEBPACK_IMPORTED_MODULE_21__.Z),
288164
- /* harmony export */ bitmart: () => (/* reexport safe */ _src_bitmart_js__WEBPACK_IMPORTED_MODULE_22__.Z),
288165
- /* harmony export */ bitmex: () => (/* reexport safe */ _src_bitmex_js__WEBPACK_IMPORTED_MODULE_23__.Z),
288166
- /* harmony export */ bitopro: () => (/* reexport safe */ _src_bitopro_js__WEBPACK_IMPORTED_MODULE_24__.Z),
288167
- /* harmony export */ bitpanda: () => (/* reexport safe */ _src_bitpanda_js__WEBPACK_IMPORTED_MODULE_25__.Z),
288168
- /* harmony export */ bitrue: () => (/* reexport safe */ _src_bitrue_js__WEBPACK_IMPORTED_MODULE_26__.Z),
288169
- /* harmony export */ bitso: () => (/* reexport safe */ _src_bitso_js__WEBPACK_IMPORTED_MODULE_27__.Z),
288170
- /* harmony export */ bitstamp: () => (/* reexport safe */ _src_bitstamp_js__WEBPACK_IMPORTED_MODULE_28__.Z),
288171
- /* harmony export */ bitvavo: () => (/* reexport safe */ _src_bitvavo_js__WEBPACK_IMPORTED_MODULE_29__.Z),
288172
- /* harmony export */ bl3p: () => (/* reexport safe */ _src_bl3p_js__WEBPACK_IMPORTED_MODULE_30__.Z),
288173
- /* harmony export */ blockchaincom: () => (/* reexport safe */ _src_blockchaincom_js__WEBPACK_IMPORTED_MODULE_31__.Z),
288174
- /* harmony export */ btcalpha: () => (/* reexport safe */ _src_btcalpha_js__WEBPACK_IMPORTED_MODULE_32__.Z),
288175
- /* harmony export */ btcbox: () => (/* reexport safe */ _src_btcbox_js__WEBPACK_IMPORTED_MODULE_33__.Z),
288176
- /* harmony export */ btcmarkets: () => (/* reexport safe */ _src_btcmarkets_js__WEBPACK_IMPORTED_MODULE_34__.Z),
288177
- /* harmony export */ btcturk: () => (/* reexport safe */ _src_btcturk_js__WEBPACK_IMPORTED_MODULE_35__.Z),
288178
- /* harmony export */ bybit: () => (/* reexport safe */ _src_bybit_js__WEBPACK_IMPORTED_MODULE_36__.Z),
288179
- /* harmony export */ cex: () => (/* reexport safe */ _src_cex_js__WEBPACK_IMPORTED_MODULE_37__.Z),
288180
- /* harmony export */ coinbase: () => (/* reexport safe */ _src_coinbase_js__WEBPACK_IMPORTED_MODULE_38__.Z),
288181
- /* harmony export */ coinbasepro: () => (/* reexport safe */ _src_coinbasepro_js__WEBPACK_IMPORTED_MODULE_39__.Z),
288182
- /* harmony export */ coincheck: () => (/* reexport safe */ _src_coincheck_js__WEBPACK_IMPORTED_MODULE_40__.Z),
288183
- /* harmony export */ coinex: () => (/* reexport safe */ _src_coinex_js__WEBPACK_IMPORTED_MODULE_41__.Z),
288184
- /* harmony export */ coinlist: () => (/* reexport safe */ _src_coinlist_js__WEBPACK_IMPORTED_MODULE_42__.Z),
288185
- /* harmony export */ coinmate: () => (/* reexport safe */ _src_coinmate_js__WEBPACK_IMPORTED_MODULE_43__.Z),
288186
- /* harmony export */ coinone: () => (/* reexport safe */ _src_coinone_js__WEBPACK_IMPORTED_MODULE_44__.Z),
288187
- /* harmony export */ coinsph: () => (/* reexport safe */ _src_coinsph_js__WEBPACK_IMPORTED_MODULE_45__.Z),
288188
- /* harmony export */ coinspot: () => (/* reexport safe */ _src_coinspot_js__WEBPACK_IMPORTED_MODULE_46__.Z),
288189
- /* harmony export */ cryptocom: () => (/* reexport safe */ _src_cryptocom_js__WEBPACK_IMPORTED_MODULE_47__.Z),
288190
- /* harmony export */ currencycom: () => (/* reexport safe */ _src_currencycom_js__WEBPACK_IMPORTED_MODULE_48__.Z),
288312
+ /* harmony export */ ace: () => (/* reexport safe */ _src_ace_js__WEBPACK_IMPORTED_MODULE_2__.Z),
288313
+ /* harmony export */ alpaca: () => (/* reexport safe */ _src_alpaca_js__WEBPACK_IMPORTED_MODULE_3__.Z),
288314
+ /* harmony export */ ascendex: () => (/* reexport safe */ _src_ascendex_js__WEBPACK_IMPORTED_MODULE_4__.Z),
288315
+ /* harmony export */ bequant: () => (/* reexport safe */ _src_bequant_js__WEBPACK_IMPORTED_MODULE_5__.Z),
288316
+ /* harmony export */ bigone: () => (/* reexport safe */ _src_bigone_js__WEBPACK_IMPORTED_MODULE_6__.Z),
288317
+ /* harmony export */ binance: () => (/* reexport safe */ _src_binance_js__WEBPACK_IMPORTED_MODULE_7__.Z),
288318
+ /* harmony export */ binancecoinm: () => (/* reexport safe */ _src_binancecoinm_js__WEBPACK_IMPORTED_MODULE_8__.Z),
288319
+ /* harmony export */ binanceus: () => (/* reexport safe */ _src_binanceus_js__WEBPACK_IMPORTED_MODULE_9__.Z),
288320
+ /* harmony export */ binanceusdm: () => (/* reexport safe */ _src_binanceusdm_js__WEBPACK_IMPORTED_MODULE_10__.Z),
288321
+ /* harmony export */ bingx: () => (/* reexport safe */ _src_bingx_js__WEBPACK_IMPORTED_MODULE_11__.Z),
288322
+ /* harmony export */ bit2c: () => (/* reexport safe */ _src_bit2c_js__WEBPACK_IMPORTED_MODULE_12__.Z),
288323
+ /* harmony export */ bitbank: () => (/* reexport safe */ _src_bitbank_js__WEBPACK_IMPORTED_MODULE_13__.Z),
288324
+ /* harmony export */ bitbay: () => (/* reexport safe */ _src_bitbay_js__WEBPACK_IMPORTED_MODULE_14__.Z),
288325
+ /* harmony export */ bitbns: () => (/* reexport safe */ _src_bitbns_js__WEBPACK_IMPORTED_MODULE_15__.Z),
288326
+ /* harmony export */ bitcoincom: () => (/* reexport safe */ _src_bitcoincom_js__WEBPACK_IMPORTED_MODULE_16__.Z),
288327
+ /* harmony export */ bitfinex: () => (/* reexport safe */ _src_bitfinex_js__WEBPACK_IMPORTED_MODULE_17__.Z),
288328
+ /* harmony export */ bitfinex2: () => (/* reexport safe */ _src_bitfinex2_js__WEBPACK_IMPORTED_MODULE_18__.Z),
288329
+ /* harmony export */ bitflyer: () => (/* reexport safe */ _src_bitflyer_js__WEBPACK_IMPORTED_MODULE_19__.Z),
288330
+ /* harmony export */ bitforex: () => (/* reexport safe */ _src_bitforex_js__WEBPACK_IMPORTED_MODULE_20__.Z),
288331
+ /* harmony export */ bitget: () => (/* reexport safe */ _src_bitget_js__WEBPACK_IMPORTED_MODULE_21__.Z),
288332
+ /* harmony export */ bithumb: () => (/* reexport safe */ _src_bithumb_js__WEBPACK_IMPORTED_MODULE_22__.Z),
288333
+ /* harmony export */ bitmart: () => (/* reexport safe */ _src_bitmart_js__WEBPACK_IMPORTED_MODULE_23__.Z),
288334
+ /* harmony export */ bitmex: () => (/* reexport safe */ _src_bitmex_js__WEBPACK_IMPORTED_MODULE_24__.Z),
288335
+ /* harmony export */ bitopro: () => (/* reexport safe */ _src_bitopro_js__WEBPACK_IMPORTED_MODULE_25__.Z),
288336
+ /* harmony export */ bitpanda: () => (/* reexport safe */ _src_bitpanda_js__WEBPACK_IMPORTED_MODULE_26__.Z),
288337
+ /* harmony export */ bitrue: () => (/* reexport safe */ _src_bitrue_js__WEBPACK_IMPORTED_MODULE_27__.Z),
288338
+ /* harmony export */ bitso: () => (/* reexport safe */ _src_bitso_js__WEBPACK_IMPORTED_MODULE_28__.Z),
288339
+ /* harmony export */ bitstamp: () => (/* reexport safe */ _src_bitstamp_js__WEBPACK_IMPORTED_MODULE_29__.Z),
288340
+ /* harmony export */ bitvavo: () => (/* reexport safe */ _src_bitvavo_js__WEBPACK_IMPORTED_MODULE_30__.Z),
288341
+ /* harmony export */ bl3p: () => (/* reexport safe */ _src_bl3p_js__WEBPACK_IMPORTED_MODULE_31__.Z),
288342
+ /* harmony export */ blockchaincom: () => (/* reexport safe */ _src_blockchaincom_js__WEBPACK_IMPORTED_MODULE_32__.Z),
288343
+ /* harmony export */ btcalpha: () => (/* reexport safe */ _src_btcalpha_js__WEBPACK_IMPORTED_MODULE_33__.Z),
288344
+ /* harmony export */ btcbox: () => (/* reexport safe */ _src_btcbox_js__WEBPACK_IMPORTED_MODULE_34__.Z),
288345
+ /* harmony export */ btcmarkets: () => (/* reexport safe */ _src_btcmarkets_js__WEBPACK_IMPORTED_MODULE_35__.Z),
288346
+ /* harmony export */ btcturk: () => (/* reexport safe */ _src_btcturk_js__WEBPACK_IMPORTED_MODULE_36__.Z),
288347
+ /* harmony export */ bybit: () => (/* reexport safe */ _src_bybit_js__WEBPACK_IMPORTED_MODULE_37__.Z),
288348
+ /* harmony export */ cex: () => (/* reexport safe */ _src_cex_js__WEBPACK_IMPORTED_MODULE_38__.Z),
288349
+ /* harmony export */ coinbase: () => (/* reexport safe */ _src_coinbase_js__WEBPACK_IMPORTED_MODULE_39__.Z),
288350
+ /* harmony export */ coinbasepro: () => (/* reexport safe */ _src_coinbasepro_js__WEBPACK_IMPORTED_MODULE_40__.Z),
288351
+ /* harmony export */ coincheck: () => (/* reexport safe */ _src_coincheck_js__WEBPACK_IMPORTED_MODULE_41__.Z),
288352
+ /* harmony export */ coinex: () => (/* reexport safe */ _src_coinex_js__WEBPACK_IMPORTED_MODULE_42__.Z),
288353
+ /* harmony export */ coinlist: () => (/* reexport safe */ _src_coinlist_js__WEBPACK_IMPORTED_MODULE_43__.Z),
288354
+ /* harmony export */ coinmate: () => (/* reexport safe */ _src_coinmate_js__WEBPACK_IMPORTED_MODULE_44__.Z),
288355
+ /* harmony export */ coinone: () => (/* reexport safe */ _src_coinone_js__WEBPACK_IMPORTED_MODULE_45__.Z),
288356
+ /* harmony export */ coinsph: () => (/* reexport safe */ _src_coinsph_js__WEBPACK_IMPORTED_MODULE_46__.Z),
288357
+ /* harmony export */ coinspot: () => (/* reexport safe */ _src_coinspot_js__WEBPACK_IMPORTED_MODULE_47__.Z),
288358
+ /* harmony export */ cryptocom: () => (/* reexport safe */ _src_cryptocom_js__WEBPACK_IMPORTED_MODULE_48__.Z),
288359
+ /* harmony export */ currencycom: () => (/* reexport safe */ _src_currencycom_js__WEBPACK_IMPORTED_MODULE_49__.Z),
288191
288360
  /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__),
288192
- /* harmony export */ delta: () => (/* reexport safe */ _src_delta_js__WEBPACK_IMPORTED_MODULE_49__.Z),
288193
- /* harmony export */ deribit: () => (/* reexport safe */ _src_deribit_js__WEBPACK_IMPORTED_MODULE_50__.Z),
288194
- /* harmony export */ digifinex: () => (/* reexport safe */ _src_digifinex_js__WEBPACK_IMPORTED_MODULE_51__.Z),
288361
+ /* harmony export */ delta: () => (/* reexport safe */ _src_delta_js__WEBPACK_IMPORTED_MODULE_50__.Z),
288362
+ /* harmony export */ deribit: () => (/* reexport safe */ _src_deribit_js__WEBPACK_IMPORTED_MODULE_51__.Z),
288363
+ /* harmony export */ digifinex: () => (/* reexport safe */ _src_digifinex_js__WEBPACK_IMPORTED_MODULE_52__.Z),
288195
288364
  /* harmony export */ errors: () => (/* reexport module object */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_156__),
288196
288365
  /* harmony export */ exchanges: () => (/* binding */ exchanges),
288197
- /* harmony export */ exmo: () => (/* reexport safe */ _src_exmo_js__WEBPACK_IMPORTED_MODULE_52__.Z),
288198
- /* harmony export */ fmfwio: () => (/* reexport safe */ _src_fmfwio_js__WEBPACK_IMPORTED_MODULE_53__.Z),
288366
+ /* harmony export */ exmo: () => (/* reexport safe */ _src_exmo_js__WEBPACK_IMPORTED_MODULE_53__.Z),
288367
+ /* harmony export */ fmfwio: () => (/* reexport safe */ _src_fmfwio_js__WEBPACK_IMPORTED_MODULE_54__.Z),
288199
288368
  /* harmony export */ functions: () => (/* reexport module object */ _src_base_functions_js__WEBPACK_IMPORTED_MODULE_155__),
288200
- /* harmony export */ gate: () => (/* reexport safe */ _src_gate_js__WEBPACK_IMPORTED_MODULE_54__.Z),
288201
- /* harmony export */ gateio: () => (/* reexport safe */ _src_gateio_js__WEBPACK_IMPORTED_MODULE_55__.Z),
288202
- /* harmony export */ gemini: () => (/* reexport safe */ _src_gemini_js__WEBPACK_IMPORTED_MODULE_56__.Z),
288203
- /* harmony export */ hitbtc: () => (/* reexport safe */ _src_hitbtc_js__WEBPACK_IMPORTED_MODULE_57__.Z),
288204
- /* harmony export */ hitbtc3: () => (/* reexport safe */ _src_hitbtc3_js__WEBPACK_IMPORTED_MODULE_58__.Z),
288205
- /* harmony export */ hollaex: () => (/* reexport safe */ _src_hollaex_js__WEBPACK_IMPORTED_MODULE_59__.Z),
288206
- /* harmony export */ htx: () => (/* reexport safe */ _src_htx_js__WEBPACK_IMPORTED_MODULE_60__.Z),
288207
- /* harmony export */ huobi: () => (/* reexport safe */ _src_huobi_js__WEBPACK_IMPORTED_MODULE_61__.Z),
288208
- /* harmony export */ huobijp: () => (/* reexport safe */ _src_huobijp_js__WEBPACK_IMPORTED_MODULE_62__.Z),
288209
- /* harmony export */ idex: () => (/* reexport safe */ _src_idex_js__WEBPACK_IMPORTED_MODULE_63__.Z),
288210
- /* harmony export */ independentreserve: () => (/* reexport safe */ _src_independentreserve_js__WEBPACK_IMPORTED_MODULE_64__.Z),
288211
- /* harmony export */ indodax: () => (/* reexport safe */ _src_indodax_js__WEBPACK_IMPORTED_MODULE_65__.Z),
288212
- /* harmony export */ kraken: () => (/* reexport safe */ _src_kraken_js__WEBPACK_IMPORTED_MODULE_66__.Z),
288213
- /* harmony export */ krakenfutures: () => (/* reexport safe */ _src_krakenfutures_js__WEBPACK_IMPORTED_MODULE_67__.Z),
288214
- /* harmony export */ kucoin: () => (/* reexport safe */ _src_kucoin_js__WEBPACK_IMPORTED_MODULE_68__.Z),
288215
- /* harmony export */ kucoinfutures: () => (/* reexport safe */ _src_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_69__.Z),
288216
- /* harmony export */ kuna: () => (/* reexport safe */ _src_kuna_js__WEBPACK_IMPORTED_MODULE_70__.Z),
288217
- /* harmony export */ latoken: () => (/* reexport safe */ _src_latoken_js__WEBPACK_IMPORTED_MODULE_71__.Z),
288218
- /* harmony export */ lbank: () => (/* reexport safe */ _src_lbank_js__WEBPACK_IMPORTED_MODULE_72__.Z),
288219
- /* harmony export */ luno: () => (/* reexport safe */ _src_luno_js__WEBPACK_IMPORTED_MODULE_73__.Z),
288220
- /* harmony export */ lykke: () => (/* reexport safe */ _src_lykke_js__WEBPACK_IMPORTED_MODULE_74__.Z),
288221
- /* harmony export */ mercado: () => (/* reexport safe */ _src_mercado_js__WEBPACK_IMPORTED_MODULE_75__.Z),
288222
- /* harmony export */ mexc: () => (/* reexport safe */ _src_mexc_js__WEBPACK_IMPORTED_MODULE_76__.Z),
288223
- /* harmony export */ ndax: () => (/* reexport safe */ _src_ndax_js__WEBPACK_IMPORTED_MODULE_77__.Z),
288224
- /* harmony export */ novadax: () => (/* reexport safe */ _src_novadax_js__WEBPACK_IMPORTED_MODULE_78__.Z),
288225
- /* harmony export */ oceanex: () => (/* reexport safe */ _src_oceanex_js__WEBPACK_IMPORTED_MODULE_79__.Z),
288226
- /* harmony export */ okcoin: () => (/* reexport safe */ _src_okcoin_js__WEBPACK_IMPORTED_MODULE_80__.Z),
288227
- /* harmony export */ okx: () => (/* reexport safe */ _src_okx_js__WEBPACK_IMPORTED_MODULE_81__.Z),
288228
- /* harmony export */ p2b: () => (/* reexport safe */ _src_p2b_js__WEBPACK_IMPORTED_MODULE_82__.Z),
288229
- /* harmony export */ paymium: () => (/* reexport safe */ _src_paymium_js__WEBPACK_IMPORTED_MODULE_83__.Z),
288230
- /* harmony export */ phemex: () => (/* reexport safe */ _src_phemex_js__WEBPACK_IMPORTED_MODULE_84__.Z),
288231
- /* harmony export */ poloniex: () => (/* reexport safe */ _src_poloniex_js__WEBPACK_IMPORTED_MODULE_85__.Z),
288232
- /* harmony export */ poloniexfutures: () => (/* reexport safe */ _src_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_86__.Z),
288369
+ /* harmony export */ gate: () => (/* reexport safe */ _src_gate_js__WEBPACK_IMPORTED_MODULE_55__.Z),
288370
+ /* harmony export */ gateio: () => (/* reexport safe */ _src_gateio_js__WEBPACK_IMPORTED_MODULE_56__.Z),
288371
+ /* harmony export */ gemini: () => (/* reexport safe */ _src_gemini_js__WEBPACK_IMPORTED_MODULE_57__.Z),
288372
+ /* harmony export */ hitbtc: () => (/* reexport safe */ _src_hitbtc_js__WEBPACK_IMPORTED_MODULE_58__.Z),
288373
+ /* harmony export */ hitbtc3: () => (/* reexport safe */ _src_hitbtc3_js__WEBPACK_IMPORTED_MODULE_59__.Z),
288374
+ /* harmony export */ hollaex: () => (/* reexport safe */ _src_hollaex_js__WEBPACK_IMPORTED_MODULE_60__.Z),
288375
+ /* harmony export */ htx: () => (/* reexport safe */ _src_htx_js__WEBPACK_IMPORTED_MODULE_61__.Z),
288376
+ /* harmony export */ huobi: () => (/* reexport safe */ _src_huobi_js__WEBPACK_IMPORTED_MODULE_62__.Z),
288377
+ /* harmony export */ huobijp: () => (/* reexport safe */ _src_huobijp_js__WEBPACK_IMPORTED_MODULE_63__.Z),
288378
+ /* harmony export */ idex: () => (/* reexport safe */ _src_idex_js__WEBPACK_IMPORTED_MODULE_64__.Z),
288379
+ /* harmony export */ independentreserve: () => (/* reexport safe */ _src_independentreserve_js__WEBPACK_IMPORTED_MODULE_65__.Z),
288380
+ /* harmony export */ indodax: () => (/* reexport safe */ _src_indodax_js__WEBPACK_IMPORTED_MODULE_66__.Z),
288381
+ /* harmony export */ kraken: () => (/* reexport safe */ _src_kraken_js__WEBPACK_IMPORTED_MODULE_67__.Z),
288382
+ /* harmony export */ krakenfutures: () => (/* reexport safe */ _src_krakenfutures_js__WEBPACK_IMPORTED_MODULE_68__.Z),
288383
+ /* harmony export */ kucoin: () => (/* reexport safe */ _src_kucoin_js__WEBPACK_IMPORTED_MODULE_69__.Z),
288384
+ /* harmony export */ kucoinfutures: () => (/* reexport safe */ _src_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_70__.Z),
288385
+ /* harmony export */ kuna: () => (/* reexport safe */ _src_kuna_js__WEBPACK_IMPORTED_MODULE_71__.Z),
288386
+ /* harmony export */ latoken: () => (/* reexport safe */ _src_latoken_js__WEBPACK_IMPORTED_MODULE_72__.Z),
288387
+ /* harmony export */ lbank: () => (/* reexport safe */ _src_lbank_js__WEBPACK_IMPORTED_MODULE_73__.Z),
288388
+ /* harmony export */ luno: () => (/* reexport safe */ _src_luno_js__WEBPACK_IMPORTED_MODULE_74__.Z),
288389
+ /* harmony export */ lykke: () => (/* reexport safe */ _src_lykke_js__WEBPACK_IMPORTED_MODULE_75__.Z),
288390
+ /* harmony export */ mercado: () => (/* reexport safe */ _src_mercado_js__WEBPACK_IMPORTED_MODULE_76__.Z),
288391
+ /* harmony export */ mexc: () => (/* reexport safe */ _src_mexc_js__WEBPACK_IMPORTED_MODULE_77__.Z),
288392
+ /* harmony export */ ndax: () => (/* reexport safe */ _src_ndax_js__WEBPACK_IMPORTED_MODULE_78__.Z),
288393
+ /* harmony export */ novadax: () => (/* reexport safe */ _src_novadax_js__WEBPACK_IMPORTED_MODULE_79__.Z),
288394
+ /* harmony export */ oceanex: () => (/* reexport safe */ _src_oceanex_js__WEBPACK_IMPORTED_MODULE_80__.Z),
288395
+ /* harmony export */ okcoin: () => (/* reexport safe */ _src_okcoin_js__WEBPACK_IMPORTED_MODULE_81__.Z),
288396
+ /* harmony export */ okx: () => (/* reexport safe */ _src_okx_js__WEBPACK_IMPORTED_MODULE_82__.Z),
288397
+ /* harmony export */ p2b: () => (/* reexport safe */ _src_p2b_js__WEBPACK_IMPORTED_MODULE_83__.Z),
288398
+ /* harmony export */ paymium: () => (/* reexport safe */ _src_paymium_js__WEBPACK_IMPORTED_MODULE_84__.Z),
288399
+ /* harmony export */ phemex: () => (/* reexport safe */ _src_phemex_js__WEBPACK_IMPORTED_MODULE_85__.Z),
288400
+ /* harmony export */ poloniex: () => (/* reexport safe */ _src_poloniex_js__WEBPACK_IMPORTED_MODULE_86__.Z),
288401
+ /* harmony export */ poloniexfutures: () => (/* reexport safe */ _src_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_87__.Z),
288233
288402
  /* harmony export */ pro: () => (/* binding */ pro),
288234
- /* harmony export */ probit: () => (/* reexport safe */ _src_probit_js__WEBPACK_IMPORTED_MODULE_87__.Z),
288235
- /* harmony export */ timex: () => (/* reexport safe */ _src_timex_js__WEBPACK_IMPORTED_MODULE_88__.Z),
288236
- /* harmony export */ tokocrypto: () => (/* reexport safe */ _src_tokocrypto_js__WEBPACK_IMPORTED_MODULE_89__.Z),
288237
- /* harmony export */ upbit: () => (/* reexport safe */ _src_upbit_js__WEBPACK_IMPORTED_MODULE_90__.Z),
288403
+ /* harmony export */ probit: () => (/* reexport safe */ _src_probit_js__WEBPACK_IMPORTED_MODULE_88__.Z),
288404
+ /* harmony export */ timex: () => (/* reexport safe */ _src_timex_js__WEBPACK_IMPORTED_MODULE_89__.Z),
288405
+ /* harmony export */ tokocrypto: () => (/* reexport safe */ _src_tokocrypto_js__WEBPACK_IMPORTED_MODULE_90__.Z),
288406
+ /* harmony export */ upbit: () => (/* reexport safe */ _src_upbit_js__WEBPACK_IMPORTED_MODULE_91__.Z),
288238
288407
  /* harmony export */ version: () => (/* binding */ version),
288239
- /* harmony export */ wavesexchange: () => (/* reexport safe */ _src_wavesexchange_js__WEBPACK_IMPORTED_MODULE_91__.Z),
288240
- /* harmony export */ wazirx: () => (/* reexport safe */ _src_wazirx_js__WEBPACK_IMPORTED_MODULE_92__.Z),
288241
- /* harmony export */ whitebit: () => (/* reexport safe */ _src_whitebit_js__WEBPACK_IMPORTED_MODULE_93__.Z),
288242
- /* harmony export */ woo: () => (/* reexport safe */ _src_woo_js__WEBPACK_IMPORTED_MODULE_94__.Z),
288243
- /* harmony export */ yobit: () => (/* reexport safe */ _src_yobit_js__WEBPACK_IMPORTED_MODULE_95__.Z),
288244
- /* harmony export */ zaif: () => (/* reexport safe */ _src_zaif_js__WEBPACK_IMPORTED_MODULE_96__.Z),
288408
+ /* harmony export */ wavesexchange: () => (/* reexport safe */ _src_wavesexchange_js__WEBPACK_IMPORTED_MODULE_92__.Z),
288409
+ /* harmony export */ wazirx: () => (/* reexport safe */ _src_wazirx_js__WEBPACK_IMPORTED_MODULE_93__.Z),
288410
+ /* harmony export */ whitebit: () => (/* reexport safe */ _src_whitebit_js__WEBPACK_IMPORTED_MODULE_94__.Z),
288411
+ /* harmony export */ woo: () => (/* reexport safe */ _src_woo_js__WEBPACK_IMPORTED_MODULE_95__.Z),
288412
+ /* harmony export */ yobit: () => (/* reexport safe */ _src_yobit_js__WEBPACK_IMPORTED_MODULE_96__.Z),
288413
+ /* harmony export */ zaif: () => (/* reexport safe */ _src_zaif_js__WEBPACK_IMPORTED_MODULE_1__.Z),
288245
288414
  /* harmony export */ zonda: () => (/* reexport safe */ _src_zonda_js__WEBPACK_IMPORTED_MODULE_97__.Z)
288246
288415
  /* harmony export */ });
288247
288416
  /* harmony import */ var _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3043);
288248
288417
  /* harmony import */ var _src_base_Precise_js__WEBPACK_IMPORTED_MODULE_154__ = __webpack_require__(2194);
288249
288418
  /* harmony import */ var _src_base_functions_js__WEBPACK_IMPORTED_MODULE_155__ = __webpack_require__(7100);
288250
288419
  /* harmony import */ var _src_base_errors_js__WEBPACK_IMPORTED_MODULE_156__ = __webpack_require__(6689);
288251
- /* harmony import */ var _src_ace_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9869);
288252
- /* harmony import */ var _src_alpaca_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5660);
288253
- /* harmony import */ var _src_ascendex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9612);
288254
- /* harmony import */ var _src_bequant_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(2049);
288255
- /* harmony import */ var _src_bigone_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(7679);
288256
- /* harmony import */ var _src_binance_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(9987);
288257
- /* harmony import */ var _src_binancecoinm_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(9212);
288258
- /* harmony import */ var _src_binanceus_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(2723);
288259
- /* harmony import */ var _src_binanceusdm_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(3254);
288260
- /* harmony import */ var _src_bingx_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(7960);
288261
- /* harmony import */ var _src_bit2c_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(7691);
288262
- /* harmony import */ var _src_bitbank_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(7820);
288263
- /* harmony import */ var _src_bitbay_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(668);
288264
- /* harmony import */ var _src_bitbns_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(7790);
288265
- /* harmony import */ var _src_bitcoincom_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(1819);
288266
- /* harmony import */ var _src_bitfinex_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(6537);
288267
- /* harmony import */ var _src_bitfinex2_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(730);
288268
- /* harmony import */ var _src_bitflyer_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(8429);
288269
- /* harmony import */ var _src_bitforex_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(2035);
288270
- /* harmony import */ var _src_bitget_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(9051);
288271
- /* harmony import */ var _src_bithumb_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(5305);
288272
- /* harmony import */ var _src_bitmart_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(3718);
288273
- /* harmony import */ var _src_bitmex_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(7077);
288274
- /* harmony import */ var _src_bitopro_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(172);
288275
- /* harmony import */ var _src_bitpanda_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(2737);
288276
- /* harmony import */ var _src_bitrue_js__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(854);
288277
- /* harmony import */ var _src_bitso_js__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(4388);
288278
- /* harmony import */ var _src_bitstamp_js__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(4667);
288279
- /* harmony import */ var _src_bitvavo_js__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(9943);
288280
- /* harmony import */ var _src_bl3p_js__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(9476);
288281
- /* harmony import */ var _src_blockchaincom_js__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(182);
288282
- /* harmony import */ var _src_btcalpha_js__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(6246);
288283
- /* harmony import */ var _src_btcbox_js__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(7796);
288284
- /* harmony import */ var _src_btcmarkets_js__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(1776);
288285
- /* harmony import */ var _src_btcturk_js__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(6304);
288286
- /* harmony import */ var _src_bybit_js__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(3527);
288287
- /* harmony import */ var _src_cex_js__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(6445);
288288
- /* harmony import */ var _src_coinbase_js__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(437);
288289
- /* harmony import */ var _src_coinbasepro_js__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(8856);
288290
- /* harmony import */ var _src_coincheck_js__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(2117);
288291
- /* harmony import */ var _src_coinex_js__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(332);
288292
- /* harmony import */ var _src_coinlist_js__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(3623);
288293
- /* harmony import */ var _src_coinmate_js__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(9816);
288294
- /* harmony import */ var _src_coinone_js__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(7811);
288295
- /* harmony import */ var _src_coinsph_js__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(5782);
288296
- /* harmony import */ var _src_coinspot_js__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(7794);
288297
- /* harmony import */ var _src_cryptocom_js__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(9129);
288298
- /* harmony import */ var _src_currencycom_js__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(3214);
288299
- /* harmony import */ var _src_delta_js__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(1753);
288300
- /* harmony import */ var _src_deribit_js__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(24);
288301
- /* harmony import */ var _src_digifinex_js__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(8846);
288302
- /* harmony import */ var _src_exmo_js__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(1729);
288303
- /* harmony import */ var _src_fmfwio_js__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(5788);
288304
- /* harmony import */ var _src_gate_js__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(7290);
288305
- /* harmony import */ var _src_gateio_js__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(7036);
288306
- /* harmony import */ var _src_gemini_js__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(6743);
288307
- /* harmony import */ var _src_hitbtc_js__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(4714);
288308
- /* harmony import */ var _src_hitbtc3_js__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(4815);
288309
- /* harmony import */ var _src_hollaex_js__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(8422);
288310
- /* harmony import */ var _src_htx_js__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(5939);
288311
- /* harmony import */ var _src_huobi_js__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(8146);
288312
- /* harmony import */ var _src_huobijp_js__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(7034);
288313
- /* harmony import */ var _src_idex_js__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(8232);
288314
- /* harmony import */ var _src_independentreserve_js__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(9570);
288315
- /* harmony import */ var _src_indodax_js__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(1605);
288316
- /* harmony import */ var _src_kraken_js__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(9922);
288317
- /* harmony import */ var _src_krakenfutures_js__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(4470);
288318
- /* harmony import */ var _src_kucoin_js__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(3583);
288319
- /* harmony import */ var _src_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(1924);
288320
- /* harmony import */ var _src_kuna_js__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(7732);
288321
- /* harmony import */ var _src_latoken_js__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(2545);
288322
- /* harmony import */ var _src_lbank_js__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(3944);
288323
- /* harmony import */ var _src_luno_js__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(1758);
288324
- /* harmony import */ var _src_lykke_js__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(3803);
288325
- /* harmony import */ var _src_mercado_js__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(9013);
288326
- /* harmony import */ var _src_mexc_js__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(6641);
288327
- /* harmony import */ var _src_ndax_js__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(4531);
288328
- /* harmony import */ var _src_novadax_js__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(2449);
288329
- /* harmony import */ var _src_oceanex_js__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(6749);
288330
- /* harmony import */ var _src_okcoin_js__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(3007);
288331
- /* harmony import */ var _src_okx_js__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(4042);
288332
- /* harmony import */ var _src_p2b_js__WEBPACK_IMPORTED_MODULE_82__ = __webpack_require__(2466);
288333
- /* harmony import */ var _src_paymium_js__WEBPACK_IMPORTED_MODULE_83__ = __webpack_require__(7082);
288334
- /* harmony import */ var _src_phemex_js__WEBPACK_IMPORTED_MODULE_84__ = __webpack_require__(79);
288335
- /* harmony import */ var _src_poloniex_js__WEBPACK_IMPORTED_MODULE_85__ = __webpack_require__(8891);
288336
- /* harmony import */ var _src_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_86__ = __webpack_require__(6877);
288337
- /* harmony import */ var _src_probit_js__WEBPACK_IMPORTED_MODULE_87__ = __webpack_require__(3657);
288338
- /* harmony import */ var _src_timex_js__WEBPACK_IMPORTED_MODULE_88__ = __webpack_require__(1067);
288339
- /* harmony import */ var _src_tokocrypto_js__WEBPACK_IMPORTED_MODULE_89__ = __webpack_require__(5261);
288340
- /* harmony import */ var _src_upbit_js__WEBPACK_IMPORTED_MODULE_90__ = __webpack_require__(7584);
288341
- /* harmony import */ var _src_wavesexchange_js__WEBPACK_IMPORTED_MODULE_91__ = __webpack_require__(3853);
288342
- /* harmony import */ var _src_wazirx_js__WEBPACK_IMPORTED_MODULE_92__ = __webpack_require__(6536);
288343
- /* harmony import */ var _src_whitebit_js__WEBPACK_IMPORTED_MODULE_93__ = __webpack_require__(5467);
288344
- /* harmony import */ var _src_woo_js__WEBPACK_IMPORTED_MODULE_94__ = __webpack_require__(517);
288345
- /* harmony import */ var _src_yobit_js__WEBPACK_IMPORTED_MODULE_95__ = __webpack_require__(3850);
288346
- /* harmony import */ var _src_zaif_js__WEBPACK_IMPORTED_MODULE_96__ = __webpack_require__(5934);
288420
+ /* harmony import */ var _src_ace_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(9869);
288421
+ /* harmony import */ var _src_alpaca_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(5660);
288422
+ /* harmony import */ var _src_ascendex_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(9612);
288423
+ /* harmony import */ var _src_bequant_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(2049);
288424
+ /* harmony import */ var _src_bigone_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(7679);
288425
+ /* harmony import */ var _src_binance_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(9987);
288426
+ /* harmony import */ var _src_binancecoinm_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(9212);
288427
+ /* harmony import */ var _src_binanceus_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(2723);
288428
+ /* harmony import */ var _src_binanceusdm_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(3254);
288429
+ /* harmony import */ var _src_bingx_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(7960);
288430
+ /* harmony import */ var _src_bit2c_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(7691);
288431
+ /* harmony import */ var _src_bitbank_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(7820);
288432
+ /* harmony import */ var _src_bitbay_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(668);
288433
+ /* harmony import */ var _src_bitbns_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(7790);
288434
+ /* harmony import */ var _src_bitcoincom_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(1819);
288435
+ /* harmony import */ var _src_bitfinex_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(6537);
288436
+ /* harmony import */ var _src_bitfinex2_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(730);
288437
+ /* harmony import */ var _src_bitflyer_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(8429);
288438
+ /* harmony import */ var _src_bitforex_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(2035);
288439
+ /* harmony import */ var _src_bitget_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(9051);
288440
+ /* harmony import */ var _src_bithumb_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(5305);
288441
+ /* harmony import */ var _src_bitmart_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(3718);
288442
+ /* harmony import */ var _src_bitmex_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(7077);
288443
+ /* harmony import */ var _src_bitopro_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(172);
288444
+ /* harmony import */ var _src_bitpanda_js__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(2737);
288445
+ /* harmony import */ var _src_bitrue_js__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(854);
288446
+ /* harmony import */ var _src_bitso_js__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(4388);
288447
+ /* harmony import */ var _src_bitstamp_js__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(4667);
288448
+ /* harmony import */ var _src_bitvavo_js__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(9943);
288449
+ /* harmony import */ var _src_bl3p_js__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(9476);
288450
+ /* harmony import */ var _src_blockchaincom_js__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(182);
288451
+ /* harmony import */ var _src_btcalpha_js__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(6246);
288452
+ /* harmony import */ var _src_btcbox_js__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(7796);
288453
+ /* harmony import */ var _src_btcmarkets_js__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(1776);
288454
+ /* harmony import */ var _src_btcturk_js__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(6304);
288455
+ /* harmony import */ var _src_bybit_js__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(3527);
288456
+ /* harmony import */ var _src_cex_js__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(6445);
288457
+ /* harmony import */ var _src_coinbase_js__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(437);
288458
+ /* harmony import */ var _src_coinbasepro_js__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(8856);
288459
+ /* harmony import */ var _src_coincheck_js__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(2117);
288460
+ /* harmony import */ var _src_coinex_js__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(332);
288461
+ /* harmony import */ var _src_coinlist_js__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(3623);
288462
+ /* harmony import */ var _src_coinmate_js__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(9816);
288463
+ /* harmony import */ var _src_coinone_js__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(7811);
288464
+ /* harmony import */ var _src_coinsph_js__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(5782);
288465
+ /* harmony import */ var _src_coinspot_js__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(7794);
288466
+ /* harmony import */ var _src_cryptocom_js__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(9129);
288467
+ /* harmony import */ var _src_currencycom_js__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(3214);
288468
+ /* harmony import */ var _src_delta_js__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(1753);
288469
+ /* harmony import */ var _src_deribit_js__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(24);
288470
+ /* harmony import */ var _src_digifinex_js__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(8846);
288471
+ /* harmony import */ var _src_exmo_js__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(1729);
288472
+ /* harmony import */ var _src_fmfwio_js__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(5788);
288473
+ /* harmony import */ var _src_gate_js__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(7290);
288474
+ /* harmony import */ var _src_gateio_js__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(7036);
288475
+ /* harmony import */ var _src_gemini_js__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(6743);
288476
+ /* harmony import */ var _src_hitbtc_js__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(4714);
288477
+ /* harmony import */ var _src_hitbtc3_js__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(4815);
288478
+ /* harmony import */ var _src_hollaex_js__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(8422);
288479
+ /* harmony import */ var _src_htx_js__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(5939);
288480
+ /* harmony import */ var _src_huobi_js__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(8146);
288481
+ /* harmony import */ var _src_huobijp_js__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(7034);
288482
+ /* harmony import */ var _src_idex_js__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(8232);
288483
+ /* harmony import */ var _src_independentreserve_js__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(9570);
288484
+ /* harmony import */ var _src_indodax_js__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(1605);
288485
+ /* harmony import */ var _src_kraken_js__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(9922);
288486
+ /* harmony import */ var _src_krakenfutures_js__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(4470);
288487
+ /* harmony import */ var _src_kucoin_js__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(3583);
288488
+ /* harmony import */ var _src_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(1924);
288489
+ /* harmony import */ var _src_kuna_js__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(7732);
288490
+ /* harmony import */ var _src_latoken_js__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(2545);
288491
+ /* harmony import */ var _src_lbank_js__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(3944);
288492
+ /* harmony import */ var _src_luno_js__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(1758);
288493
+ /* harmony import */ var _src_lykke_js__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(3803);
288494
+ /* harmony import */ var _src_mercado_js__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(9013);
288495
+ /* harmony import */ var _src_mexc_js__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(6641);
288496
+ /* harmony import */ var _src_ndax_js__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(4531);
288497
+ /* harmony import */ var _src_novadax_js__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(2449);
288498
+ /* harmony import */ var _src_oceanex_js__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(6749);
288499
+ /* harmony import */ var _src_okcoin_js__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(3007);
288500
+ /* harmony import */ var _src_okx_js__WEBPACK_IMPORTED_MODULE_82__ = __webpack_require__(4042);
288501
+ /* harmony import */ var _src_p2b_js__WEBPACK_IMPORTED_MODULE_83__ = __webpack_require__(2466);
288502
+ /* harmony import */ var _src_paymium_js__WEBPACK_IMPORTED_MODULE_84__ = __webpack_require__(7082);
288503
+ /* harmony import */ var _src_phemex_js__WEBPACK_IMPORTED_MODULE_85__ = __webpack_require__(79);
288504
+ /* harmony import */ var _src_poloniex_js__WEBPACK_IMPORTED_MODULE_86__ = __webpack_require__(8891);
288505
+ /* harmony import */ var _src_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_87__ = __webpack_require__(6877);
288506
+ /* harmony import */ var _src_probit_js__WEBPACK_IMPORTED_MODULE_88__ = __webpack_require__(3657);
288507
+ /* harmony import */ var _src_timex_js__WEBPACK_IMPORTED_MODULE_89__ = __webpack_require__(1067);
288508
+ /* harmony import */ var _src_tokocrypto_js__WEBPACK_IMPORTED_MODULE_90__ = __webpack_require__(5261);
288509
+ /* harmony import */ var _src_upbit_js__WEBPACK_IMPORTED_MODULE_91__ = __webpack_require__(7584);
288510
+ /* harmony import */ var _src_wavesexchange_js__WEBPACK_IMPORTED_MODULE_92__ = __webpack_require__(3853);
288511
+ /* harmony import */ var _src_wazirx_js__WEBPACK_IMPORTED_MODULE_93__ = __webpack_require__(6536);
288512
+ /* harmony import */ var _src_whitebit_js__WEBPACK_IMPORTED_MODULE_94__ = __webpack_require__(5467);
288513
+ /* harmony import */ var _src_woo_js__WEBPACK_IMPORTED_MODULE_95__ = __webpack_require__(517);
288514
+ /* harmony import */ var _src_yobit_js__WEBPACK_IMPORTED_MODULE_96__ = __webpack_require__(3850);
288515
+ /* harmony import */ var _src_zaif_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7558);
288347
288516
  /* harmony import */ var _src_zonda_js__WEBPACK_IMPORTED_MODULE_97__ = __webpack_require__(5140);
288348
288517
  /* harmony import */ var _src_pro_alpaca_js__WEBPACK_IMPORTED_MODULE_98__ = __webpack_require__(2467);
288349
288518
  /* harmony import */ var _src_pro_ascendex_js__WEBPACK_IMPORTED_MODULE_99__ = __webpack_require__(2383);
@@ -288435,7 +288604,7 @@ SOFTWARE.
288435
288604
 
288436
288605
  //-----------------------------------------------------------------------------
288437
288606
  // this is updated by vss.js when building
288438
- const version = '4.1.95';
288607
+ const version = '4.1.97';
288439
288608
  _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange */ .e.ccxtVersion = version;
288440
288609
  //-----------------------------------------------------------------------------
288441
288610
 
@@ -288593,102 +288762,102 @@ _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange */ .e.ccxtVersion
288593
288762
 
288594
288763
 
288595
288764
  const exchanges = {
288596
- 'ace': _src_ace_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z,
288597
- 'alpaca': _src_alpaca_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z,
288598
- 'ascendex': _src_ascendex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z,
288599
- 'bequant': _src_bequant_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z,
288600
- 'bigone': _src_bigone_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z,
288601
- 'binance': _src_binance_js__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .Z,
288602
- 'binancecoinm': _src_binancecoinm_js__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .Z,
288603
- 'binanceus': _src_binanceus_js__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .Z,
288604
- 'binanceusdm': _src_binanceusdm_js__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .Z,
288605
- 'bingx': _src_bingx_js__WEBPACK_IMPORTED_MODULE_10__/* ["default"] */ .Z,
288606
- 'bit2c': _src_bit2c_js__WEBPACK_IMPORTED_MODULE_11__/* ["default"] */ .Z,
288607
- 'bitbank': _src_bitbank_js__WEBPACK_IMPORTED_MODULE_12__/* ["default"] */ .Z,
288608
- 'bitbay': _src_bitbay_js__WEBPACK_IMPORTED_MODULE_13__/* ["default"] */ .Z,
288609
- 'bitbns': _src_bitbns_js__WEBPACK_IMPORTED_MODULE_14__/* ["default"] */ .Z,
288610
- 'bitcoincom': _src_bitcoincom_js__WEBPACK_IMPORTED_MODULE_15__/* ["default"] */ .Z,
288611
- 'bitfinex': _src_bitfinex_js__WEBPACK_IMPORTED_MODULE_16__/* ["default"] */ .Z,
288612
- 'bitfinex2': _src_bitfinex2_js__WEBPACK_IMPORTED_MODULE_17__/* ["default"] */ .Z,
288613
- 'bitflyer': _src_bitflyer_js__WEBPACK_IMPORTED_MODULE_18__/* ["default"] */ .Z,
288614
- 'bitforex': _src_bitforex_js__WEBPACK_IMPORTED_MODULE_19__/* ["default"] */ .Z,
288615
- 'bitget': _src_bitget_js__WEBPACK_IMPORTED_MODULE_20__/* ["default"] */ .Z,
288616
- 'bithumb': _src_bithumb_js__WEBPACK_IMPORTED_MODULE_21__/* ["default"] */ .Z,
288617
- 'bitmart': _src_bitmart_js__WEBPACK_IMPORTED_MODULE_22__/* ["default"] */ .Z,
288618
- 'bitmex': _src_bitmex_js__WEBPACK_IMPORTED_MODULE_23__/* ["default"] */ .Z,
288619
- 'bitopro': _src_bitopro_js__WEBPACK_IMPORTED_MODULE_24__/* ["default"] */ .Z,
288620
- 'bitpanda': _src_bitpanda_js__WEBPACK_IMPORTED_MODULE_25__/* ["default"] */ .Z,
288621
- 'bitrue': _src_bitrue_js__WEBPACK_IMPORTED_MODULE_26__/* ["default"] */ .Z,
288622
- 'bitso': _src_bitso_js__WEBPACK_IMPORTED_MODULE_27__/* ["default"] */ .Z,
288623
- 'bitstamp': _src_bitstamp_js__WEBPACK_IMPORTED_MODULE_28__/* ["default"] */ .Z,
288624
- 'bitvavo': _src_bitvavo_js__WEBPACK_IMPORTED_MODULE_29__/* ["default"] */ .Z,
288625
- 'bl3p': _src_bl3p_js__WEBPACK_IMPORTED_MODULE_30__/* ["default"] */ .Z,
288626
- 'blockchaincom': _src_blockchaincom_js__WEBPACK_IMPORTED_MODULE_31__/* ["default"] */ .Z,
288627
- 'btcalpha': _src_btcalpha_js__WEBPACK_IMPORTED_MODULE_32__/* ["default"] */ .Z,
288628
- 'btcbox': _src_btcbox_js__WEBPACK_IMPORTED_MODULE_33__/* ["default"] */ .Z,
288629
- 'btcmarkets': _src_btcmarkets_js__WEBPACK_IMPORTED_MODULE_34__/* ["default"] */ .Z,
288630
- 'btcturk': _src_btcturk_js__WEBPACK_IMPORTED_MODULE_35__/* ["default"] */ .Z,
288631
- 'bybit': _src_bybit_js__WEBPACK_IMPORTED_MODULE_36__/* ["default"] */ .Z,
288632
- 'cex': _src_cex_js__WEBPACK_IMPORTED_MODULE_37__/* ["default"] */ .Z,
288633
- 'coinbase': _src_coinbase_js__WEBPACK_IMPORTED_MODULE_38__/* ["default"] */ .Z,
288634
- 'coinbasepro': _src_coinbasepro_js__WEBPACK_IMPORTED_MODULE_39__/* ["default"] */ .Z,
288635
- 'coincheck': _src_coincheck_js__WEBPACK_IMPORTED_MODULE_40__/* ["default"] */ .Z,
288636
- 'coinex': _src_coinex_js__WEBPACK_IMPORTED_MODULE_41__/* ["default"] */ .Z,
288637
- 'coinlist': _src_coinlist_js__WEBPACK_IMPORTED_MODULE_42__/* ["default"] */ .Z,
288638
- 'coinmate': _src_coinmate_js__WEBPACK_IMPORTED_MODULE_43__/* ["default"] */ .Z,
288639
- 'coinone': _src_coinone_js__WEBPACK_IMPORTED_MODULE_44__/* ["default"] */ .Z,
288640
- 'coinsph': _src_coinsph_js__WEBPACK_IMPORTED_MODULE_45__/* ["default"] */ .Z,
288641
- 'coinspot': _src_coinspot_js__WEBPACK_IMPORTED_MODULE_46__/* ["default"] */ .Z,
288642
- 'cryptocom': _src_cryptocom_js__WEBPACK_IMPORTED_MODULE_47__/* ["default"] */ .Z,
288643
- 'currencycom': _src_currencycom_js__WEBPACK_IMPORTED_MODULE_48__/* ["default"] */ .Z,
288644
- 'delta': _src_delta_js__WEBPACK_IMPORTED_MODULE_49__/* ["default"] */ .Z,
288645
- 'deribit': _src_deribit_js__WEBPACK_IMPORTED_MODULE_50__/* ["default"] */ .Z,
288646
- 'digifinex': _src_digifinex_js__WEBPACK_IMPORTED_MODULE_51__/* ["default"] */ .Z,
288647
- 'exmo': _src_exmo_js__WEBPACK_IMPORTED_MODULE_52__/* ["default"] */ .Z,
288648
- 'fmfwio': _src_fmfwio_js__WEBPACK_IMPORTED_MODULE_53__/* ["default"] */ .Z,
288649
- 'gate': _src_gate_js__WEBPACK_IMPORTED_MODULE_54__/* ["default"] */ .Z,
288650
- 'gateio': _src_gateio_js__WEBPACK_IMPORTED_MODULE_55__/* ["default"] */ .Z,
288651
- 'gemini': _src_gemini_js__WEBPACK_IMPORTED_MODULE_56__/* ["default"] */ .Z,
288652
- 'hitbtc': _src_hitbtc_js__WEBPACK_IMPORTED_MODULE_57__/* ["default"] */ .Z,
288653
- 'hitbtc3': _src_hitbtc3_js__WEBPACK_IMPORTED_MODULE_58__/* ["default"] */ .Z,
288654
- 'hollaex': _src_hollaex_js__WEBPACK_IMPORTED_MODULE_59__/* ["default"] */ .Z,
288655
- 'htx': _src_htx_js__WEBPACK_IMPORTED_MODULE_60__/* ["default"] */ .Z,
288656
- 'huobi': _src_huobi_js__WEBPACK_IMPORTED_MODULE_61__/* ["default"] */ .Z,
288657
- 'huobijp': _src_huobijp_js__WEBPACK_IMPORTED_MODULE_62__/* ["default"] */ .Z,
288658
- 'idex': _src_idex_js__WEBPACK_IMPORTED_MODULE_63__/* ["default"] */ .Z,
288659
- 'independentreserve': _src_independentreserve_js__WEBPACK_IMPORTED_MODULE_64__/* ["default"] */ .Z,
288660
- 'indodax': _src_indodax_js__WEBPACK_IMPORTED_MODULE_65__/* ["default"] */ .Z,
288661
- 'kraken': _src_kraken_js__WEBPACK_IMPORTED_MODULE_66__/* ["default"] */ .Z,
288662
- 'krakenfutures': _src_krakenfutures_js__WEBPACK_IMPORTED_MODULE_67__/* ["default"] */ .Z,
288663
- 'kucoin': _src_kucoin_js__WEBPACK_IMPORTED_MODULE_68__/* ["default"] */ .Z,
288664
- 'kucoinfutures': _src_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_69__/* ["default"] */ .Z,
288665
- 'kuna': _src_kuna_js__WEBPACK_IMPORTED_MODULE_70__/* ["default"] */ .Z,
288666
- 'latoken': _src_latoken_js__WEBPACK_IMPORTED_MODULE_71__/* ["default"] */ .Z,
288667
- 'lbank': _src_lbank_js__WEBPACK_IMPORTED_MODULE_72__/* ["default"] */ .Z,
288668
- 'luno': _src_luno_js__WEBPACK_IMPORTED_MODULE_73__/* ["default"] */ .Z,
288669
- 'lykke': _src_lykke_js__WEBPACK_IMPORTED_MODULE_74__/* ["default"] */ .Z,
288670
- 'mercado': _src_mercado_js__WEBPACK_IMPORTED_MODULE_75__/* ["default"] */ .Z,
288671
- 'mexc': _src_mexc_js__WEBPACK_IMPORTED_MODULE_76__/* ["default"] */ .Z,
288672
- 'ndax': _src_ndax_js__WEBPACK_IMPORTED_MODULE_77__/* ["default"] */ .Z,
288673
- 'novadax': _src_novadax_js__WEBPACK_IMPORTED_MODULE_78__/* ["default"] */ .Z,
288674
- 'oceanex': _src_oceanex_js__WEBPACK_IMPORTED_MODULE_79__/* ["default"] */ .Z,
288675
- 'okcoin': _src_okcoin_js__WEBPACK_IMPORTED_MODULE_80__/* ["default"] */ .Z,
288676
- 'okx': _src_okx_js__WEBPACK_IMPORTED_MODULE_81__/* ["default"] */ .Z,
288677
- 'p2b': _src_p2b_js__WEBPACK_IMPORTED_MODULE_82__/* ["default"] */ .Z,
288678
- 'paymium': _src_paymium_js__WEBPACK_IMPORTED_MODULE_83__/* ["default"] */ .Z,
288679
- 'phemex': _src_phemex_js__WEBPACK_IMPORTED_MODULE_84__/* ["default"] */ .Z,
288680
- 'poloniex': _src_poloniex_js__WEBPACK_IMPORTED_MODULE_85__/* ["default"] */ .Z,
288681
- 'poloniexfutures': _src_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_86__/* ["default"] */ .Z,
288682
- 'probit': _src_probit_js__WEBPACK_IMPORTED_MODULE_87__/* ["default"] */ .Z,
288683
- 'timex': _src_timex_js__WEBPACK_IMPORTED_MODULE_88__/* ["default"] */ .Z,
288684
- 'tokocrypto': _src_tokocrypto_js__WEBPACK_IMPORTED_MODULE_89__/* ["default"] */ .Z,
288685
- 'upbit': _src_upbit_js__WEBPACK_IMPORTED_MODULE_90__/* ["default"] */ .Z,
288686
- 'wavesexchange': _src_wavesexchange_js__WEBPACK_IMPORTED_MODULE_91__/* ["default"] */ .Z,
288687
- 'wazirx': _src_wazirx_js__WEBPACK_IMPORTED_MODULE_92__/* ["default"] */ .Z,
288688
- 'whitebit': _src_whitebit_js__WEBPACK_IMPORTED_MODULE_93__/* ["default"] */ .Z,
288689
- 'woo': _src_woo_js__WEBPACK_IMPORTED_MODULE_94__/* ["default"] */ .Z,
288690
- 'yobit': _src_yobit_js__WEBPACK_IMPORTED_MODULE_95__/* ["default"] */ .Z,
288691
- 'zaif': _src_zaif_js__WEBPACK_IMPORTED_MODULE_96__/* ["default"] */ .Z,
288765
+ 'ace': _src_ace_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z,
288766
+ 'alpaca': _src_alpaca_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z,
288767
+ 'ascendex': _src_ascendex_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z,
288768
+ 'bequant': _src_bequant_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z,
288769
+ 'bigone': _src_bigone_js__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .Z,
288770
+ 'binance': _src_binance_js__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .Z,
288771
+ 'binancecoinm': _src_binancecoinm_js__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .Z,
288772
+ 'binanceus': _src_binanceus_js__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .Z,
288773
+ 'binanceusdm': _src_binanceusdm_js__WEBPACK_IMPORTED_MODULE_10__/* ["default"] */ .Z,
288774
+ 'bingx': _src_bingx_js__WEBPACK_IMPORTED_MODULE_11__/* ["default"] */ .Z,
288775
+ 'bit2c': _src_bit2c_js__WEBPACK_IMPORTED_MODULE_12__/* ["default"] */ .Z,
288776
+ 'bitbank': _src_bitbank_js__WEBPACK_IMPORTED_MODULE_13__/* ["default"] */ .Z,
288777
+ 'bitbay': _src_bitbay_js__WEBPACK_IMPORTED_MODULE_14__/* ["default"] */ .Z,
288778
+ 'bitbns': _src_bitbns_js__WEBPACK_IMPORTED_MODULE_15__/* ["default"] */ .Z,
288779
+ 'bitcoincom': _src_bitcoincom_js__WEBPACK_IMPORTED_MODULE_16__/* ["default"] */ .Z,
288780
+ 'bitfinex': _src_bitfinex_js__WEBPACK_IMPORTED_MODULE_17__/* ["default"] */ .Z,
288781
+ 'bitfinex2': _src_bitfinex2_js__WEBPACK_IMPORTED_MODULE_18__/* ["default"] */ .Z,
288782
+ 'bitflyer': _src_bitflyer_js__WEBPACK_IMPORTED_MODULE_19__/* ["default"] */ .Z,
288783
+ 'bitforex': _src_bitforex_js__WEBPACK_IMPORTED_MODULE_20__/* ["default"] */ .Z,
288784
+ 'bitget': _src_bitget_js__WEBPACK_IMPORTED_MODULE_21__/* ["default"] */ .Z,
288785
+ 'bithumb': _src_bithumb_js__WEBPACK_IMPORTED_MODULE_22__/* ["default"] */ .Z,
288786
+ 'bitmart': _src_bitmart_js__WEBPACK_IMPORTED_MODULE_23__/* ["default"] */ .Z,
288787
+ 'bitmex': _src_bitmex_js__WEBPACK_IMPORTED_MODULE_24__/* ["default"] */ .Z,
288788
+ 'bitopro': _src_bitopro_js__WEBPACK_IMPORTED_MODULE_25__/* ["default"] */ .Z,
288789
+ 'bitpanda': _src_bitpanda_js__WEBPACK_IMPORTED_MODULE_26__/* ["default"] */ .Z,
288790
+ 'bitrue': _src_bitrue_js__WEBPACK_IMPORTED_MODULE_27__/* ["default"] */ .Z,
288791
+ 'bitso': _src_bitso_js__WEBPACK_IMPORTED_MODULE_28__/* ["default"] */ .Z,
288792
+ 'bitstamp': _src_bitstamp_js__WEBPACK_IMPORTED_MODULE_29__/* ["default"] */ .Z,
288793
+ 'bitvavo': _src_bitvavo_js__WEBPACK_IMPORTED_MODULE_30__/* ["default"] */ .Z,
288794
+ 'bl3p': _src_bl3p_js__WEBPACK_IMPORTED_MODULE_31__/* ["default"] */ .Z,
288795
+ 'blockchaincom': _src_blockchaincom_js__WEBPACK_IMPORTED_MODULE_32__/* ["default"] */ .Z,
288796
+ 'btcalpha': _src_btcalpha_js__WEBPACK_IMPORTED_MODULE_33__/* ["default"] */ .Z,
288797
+ 'btcbox': _src_btcbox_js__WEBPACK_IMPORTED_MODULE_34__/* ["default"] */ .Z,
288798
+ 'btcmarkets': _src_btcmarkets_js__WEBPACK_IMPORTED_MODULE_35__/* ["default"] */ .Z,
288799
+ 'btcturk': _src_btcturk_js__WEBPACK_IMPORTED_MODULE_36__/* ["default"] */ .Z,
288800
+ 'bybit': _src_bybit_js__WEBPACK_IMPORTED_MODULE_37__/* ["default"] */ .Z,
288801
+ 'cex': _src_cex_js__WEBPACK_IMPORTED_MODULE_38__/* ["default"] */ .Z,
288802
+ 'coinbase': _src_coinbase_js__WEBPACK_IMPORTED_MODULE_39__/* ["default"] */ .Z,
288803
+ 'coinbasepro': _src_coinbasepro_js__WEBPACK_IMPORTED_MODULE_40__/* ["default"] */ .Z,
288804
+ 'coincheck': _src_coincheck_js__WEBPACK_IMPORTED_MODULE_41__/* ["default"] */ .Z,
288805
+ 'coinex': _src_coinex_js__WEBPACK_IMPORTED_MODULE_42__/* ["default"] */ .Z,
288806
+ 'coinlist': _src_coinlist_js__WEBPACK_IMPORTED_MODULE_43__/* ["default"] */ .Z,
288807
+ 'coinmate': _src_coinmate_js__WEBPACK_IMPORTED_MODULE_44__/* ["default"] */ .Z,
288808
+ 'coinone': _src_coinone_js__WEBPACK_IMPORTED_MODULE_45__/* ["default"] */ .Z,
288809
+ 'coinsph': _src_coinsph_js__WEBPACK_IMPORTED_MODULE_46__/* ["default"] */ .Z,
288810
+ 'coinspot': _src_coinspot_js__WEBPACK_IMPORTED_MODULE_47__/* ["default"] */ .Z,
288811
+ 'cryptocom': _src_cryptocom_js__WEBPACK_IMPORTED_MODULE_48__/* ["default"] */ .Z,
288812
+ 'currencycom': _src_currencycom_js__WEBPACK_IMPORTED_MODULE_49__/* ["default"] */ .Z,
288813
+ 'delta': _src_delta_js__WEBPACK_IMPORTED_MODULE_50__/* ["default"] */ .Z,
288814
+ 'deribit': _src_deribit_js__WEBPACK_IMPORTED_MODULE_51__/* ["default"] */ .Z,
288815
+ 'digifinex': _src_digifinex_js__WEBPACK_IMPORTED_MODULE_52__/* ["default"] */ .Z,
288816
+ 'exmo': _src_exmo_js__WEBPACK_IMPORTED_MODULE_53__/* ["default"] */ .Z,
288817
+ 'fmfwio': _src_fmfwio_js__WEBPACK_IMPORTED_MODULE_54__/* ["default"] */ .Z,
288818
+ 'gate': _src_gate_js__WEBPACK_IMPORTED_MODULE_55__/* ["default"] */ .Z,
288819
+ 'gateio': _src_gateio_js__WEBPACK_IMPORTED_MODULE_56__/* ["default"] */ .Z,
288820
+ 'gemini': _src_gemini_js__WEBPACK_IMPORTED_MODULE_57__/* ["default"] */ .Z,
288821
+ 'hitbtc': _src_hitbtc_js__WEBPACK_IMPORTED_MODULE_58__/* ["default"] */ .Z,
288822
+ 'hitbtc3': _src_hitbtc3_js__WEBPACK_IMPORTED_MODULE_59__/* ["default"] */ .Z,
288823
+ 'hollaex': _src_hollaex_js__WEBPACK_IMPORTED_MODULE_60__/* ["default"] */ .Z,
288824
+ 'htx': _src_htx_js__WEBPACK_IMPORTED_MODULE_61__/* ["default"] */ .Z,
288825
+ 'huobi': _src_huobi_js__WEBPACK_IMPORTED_MODULE_62__/* ["default"] */ .Z,
288826
+ 'huobijp': _src_huobijp_js__WEBPACK_IMPORTED_MODULE_63__/* ["default"] */ .Z,
288827
+ 'idex': _src_idex_js__WEBPACK_IMPORTED_MODULE_64__/* ["default"] */ .Z,
288828
+ 'independentreserve': _src_independentreserve_js__WEBPACK_IMPORTED_MODULE_65__/* ["default"] */ .Z,
288829
+ 'indodax': _src_indodax_js__WEBPACK_IMPORTED_MODULE_66__/* ["default"] */ .Z,
288830
+ 'kraken': _src_kraken_js__WEBPACK_IMPORTED_MODULE_67__/* ["default"] */ .Z,
288831
+ 'krakenfutures': _src_krakenfutures_js__WEBPACK_IMPORTED_MODULE_68__/* ["default"] */ .Z,
288832
+ 'kucoin': _src_kucoin_js__WEBPACK_IMPORTED_MODULE_69__/* ["default"] */ .Z,
288833
+ 'kucoinfutures': _src_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_70__/* ["default"] */ .Z,
288834
+ 'kuna': _src_kuna_js__WEBPACK_IMPORTED_MODULE_71__/* ["default"] */ .Z,
288835
+ 'latoken': _src_latoken_js__WEBPACK_IMPORTED_MODULE_72__/* ["default"] */ .Z,
288836
+ 'lbank': _src_lbank_js__WEBPACK_IMPORTED_MODULE_73__/* ["default"] */ .Z,
288837
+ 'luno': _src_luno_js__WEBPACK_IMPORTED_MODULE_74__/* ["default"] */ .Z,
288838
+ 'lykke': _src_lykke_js__WEBPACK_IMPORTED_MODULE_75__/* ["default"] */ .Z,
288839
+ 'mercado': _src_mercado_js__WEBPACK_IMPORTED_MODULE_76__/* ["default"] */ .Z,
288840
+ 'mexc': _src_mexc_js__WEBPACK_IMPORTED_MODULE_77__/* ["default"] */ .Z,
288841
+ 'ndax': _src_ndax_js__WEBPACK_IMPORTED_MODULE_78__/* ["default"] */ .Z,
288842
+ 'novadax': _src_novadax_js__WEBPACK_IMPORTED_MODULE_79__/* ["default"] */ .Z,
288843
+ 'oceanex': _src_oceanex_js__WEBPACK_IMPORTED_MODULE_80__/* ["default"] */ .Z,
288844
+ 'okcoin': _src_okcoin_js__WEBPACK_IMPORTED_MODULE_81__/* ["default"] */ .Z,
288845
+ 'okx': _src_okx_js__WEBPACK_IMPORTED_MODULE_82__/* ["default"] */ .Z,
288846
+ 'p2b': _src_p2b_js__WEBPACK_IMPORTED_MODULE_83__/* ["default"] */ .Z,
288847
+ 'paymium': _src_paymium_js__WEBPACK_IMPORTED_MODULE_84__/* ["default"] */ .Z,
288848
+ 'phemex': _src_phemex_js__WEBPACK_IMPORTED_MODULE_85__/* ["default"] */ .Z,
288849
+ 'poloniex': _src_poloniex_js__WEBPACK_IMPORTED_MODULE_86__/* ["default"] */ .Z,
288850
+ 'poloniexfutures': _src_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_87__/* ["default"] */ .Z,
288851
+ 'probit': _src_probit_js__WEBPACK_IMPORTED_MODULE_88__/* ["default"] */ .Z,
288852
+ 'timex': _src_timex_js__WEBPACK_IMPORTED_MODULE_89__/* ["default"] */ .Z,
288853
+ 'tokocrypto': _src_tokocrypto_js__WEBPACK_IMPORTED_MODULE_90__/* ["default"] */ .Z,
288854
+ 'upbit': _src_upbit_js__WEBPACK_IMPORTED_MODULE_91__/* ["default"] */ .Z,
288855
+ 'wavesexchange': _src_wavesexchange_js__WEBPACK_IMPORTED_MODULE_92__/* ["default"] */ .Z,
288856
+ 'wazirx': _src_wazirx_js__WEBPACK_IMPORTED_MODULE_93__/* ["default"] */ .Z,
288857
+ 'whitebit': _src_whitebit_js__WEBPACK_IMPORTED_MODULE_94__/* ["default"] */ .Z,
288858
+ 'woo': _src_woo_js__WEBPACK_IMPORTED_MODULE_95__/* ["default"] */ .Z,
288859
+ 'yobit': _src_yobit_js__WEBPACK_IMPORTED_MODULE_96__/* ["default"] */ .Z,
288860
+ 'zaif': _src_zaif_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z,
288692
288861
  'zonda': _src_zonda_js__WEBPACK_IMPORTED_MODULE_97__/* ["default"] */ .Z,
288693
288862
  };
288694
288863
  const pro = {