ccxt 4.1.35 → 4.1.37

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 (150) hide show
  1. package/README.md +4 -4
  2. package/build.sh +4 -0
  3. package/dist/ccxt.browser.js +1590 -496
  4. package/dist/ccxt.browser.min.js +3 -3
  5. package/dist/cjs/ccxt.js +1 -1
  6. package/dist/cjs/src/base/Exchange.js +31 -0
  7. package/dist/cjs/src/base/errors.js +6 -6
  8. package/dist/cjs/src/binance.js +3 -2
  9. package/dist/cjs/src/bingx.js +109 -2
  10. package/dist/cjs/src/bitforex.js +1 -1
  11. package/dist/cjs/src/bitget.js +3 -2
  12. package/dist/cjs/src/bitmart.js +2 -2
  13. package/dist/cjs/src/bitmex.js +3 -3
  14. package/dist/cjs/src/bitopro.js +1 -0
  15. package/dist/cjs/src/bitstamp.js +12 -0
  16. package/dist/cjs/src/bybit.js +112 -109
  17. package/dist/cjs/src/deribit.js +2 -2
  18. package/dist/cjs/src/gate.js +2 -2
  19. package/dist/cjs/src/hollaex.js +7 -7
  20. package/dist/cjs/src/huobi.js +2 -2
  21. package/dist/cjs/src/kucoinfutures.js +0 -3
  22. package/dist/cjs/src/kuna.js +1284 -350
  23. package/dist/cjs/src/latoken.js +2 -2
  24. package/dist/cjs/src/phemex.js +1 -0
  25. package/dist/cjs/src/wazirx.js +1 -1
  26. package/js/ccxt.d.ts +1 -1
  27. package/js/ccxt.js +1 -1
  28. package/js/src/abstract/binance.d.ts +1 -0
  29. package/js/src/abstract/binancecoinm.d.ts +1 -0
  30. package/js/src/abstract/binanceus.d.ts +1 -0
  31. package/js/src/abstract/binanceusdm.d.ts +1 -0
  32. package/js/src/abstract/bitopro.d.ts +1 -0
  33. package/js/src/abstract/bitstamp.d.ts +10 -0
  34. package/js/src/abstract/kuna.d.ts +29 -27
  35. package/js/src/ace.d.ts +7 -7
  36. package/js/src/alpaca.d.ts +7 -7
  37. package/js/src/ascendex.d.ts +3 -3
  38. package/js/src/base/Exchange.d.ts +7 -2
  39. package/js/src/base/Exchange.js +31 -0
  40. package/js/src/base/errorHierarchy.d.ts +1 -1
  41. package/js/src/base/errorHierarchy.js +1 -1
  42. package/js/src/base/errors.d.ts +3 -3
  43. package/js/src/base/errors.js +6 -6
  44. package/js/src/bigone.d.ts +10 -10
  45. package/js/src/binance.d.ts +48 -15
  46. package/js/src/binance.js +3 -2
  47. package/js/src/bingx.d.ts +10 -8
  48. package/js/src/bingx.js +109 -2
  49. package/js/src/bit2c.d.ts +5 -5
  50. package/js/src/bitbank.d.ts +7 -7
  51. package/js/src/bitbns.d.ts +6 -6
  52. package/js/src/bitfinex.d.ts +9 -9
  53. package/js/src/bitfinex2.d.ts +1 -1
  54. package/js/src/bitforex.d.ts +8 -8
  55. package/js/src/bitforex.js +1 -1
  56. package/js/src/bitget.d.ts +2 -12
  57. package/js/src/bitget.js +3 -2
  58. package/js/src/bithumb.d.ts +7 -7
  59. package/js/src/bitmart.d.ts +11 -21
  60. package/js/src/bitmart.js +2 -2
  61. package/js/src/bitmex.d.ts +2 -12
  62. package/js/src/bitmex.js +3 -3
  63. package/js/src/bitopro.d.ts +9 -9
  64. package/js/src/bitopro.js +1 -0
  65. package/js/src/bitpanda.d.ts +8 -8
  66. package/js/src/bitrue.d.ts +9 -9
  67. package/js/src/bitso.d.ts +7 -7
  68. package/js/src/bitstamp.d.ts +7 -7
  69. package/js/src/bitstamp.js +12 -0
  70. package/js/src/bittrex.d.ts +9 -9
  71. package/js/src/bitvavo.d.ts +1 -1
  72. package/js/src/blockchaincom.d.ts +8 -8
  73. package/js/src/btcalpha.d.ts +9 -9
  74. package/js/src/btcbox.d.ts +8 -8
  75. package/js/src/btcmarkets.d.ts +3 -3
  76. package/js/src/btctradeua.d.ts +3 -3
  77. package/js/src/btcturk.d.ts +6 -6
  78. package/js/src/bybit.d.ts +1 -1
  79. package/js/src/bybit.js +112 -109
  80. package/js/src/cex.d.ts +3 -3
  81. package/js/src/coinbase.d.ts +1 -1
  82. package/js/src/coinbasepro.d.ts +1 -1
  83. package/js/src/coinex.d.ts +11 -11
  84. package/js/src/coinfalcon.d.ts +6 -6
  85. package/js/src/coinmate.d.ts +6 -6
  86. package/js/src/coinone.d.ts +5 -5
  87. package/js/src/coinsph.d.ts +10 -10
  88. package/js/src/cryptocom.d.ts +1 -1
  89. package/js/src/currencycom.d.ts +8 -8
  90. package/js/src/delta.d.ts +10 -10
  91. package/js/src/deribit.d.ts +9 -19
  92. package/js/src/deribit.js +2 -2
  93. package/js/src/digifinex.d.ts +8 -8
  94. package/js/src/exmo.d.ts +3 -3
  95. package/js/src/gate.d.ts +2 -12
  96. package/js/src/gate.js +2 -2
  97. package/js/src/gemini.d.ts +6 -6
  98. package/js/src/hitbtc.d.ts +1 -1
  99. package/js/src/hollaex.d.ts +12 -12
  100. package/js/src/hollaex.js +7 -7
  101. package/js/src/huobi.d.ts +2 -12
  102. package/js/src/huobi.js +2 -2
  103. package/js/src/huobijp.d.ts +3 -3
  104. package/js/src/idex.d.ts +3 -3
  105. package/js/src/independentreserve.d.ts +6 -6
  106. package/js/src/kraken.d.ts +8 -8
  107. package/js/src/krakenfutures.d.ts +8 -8
  108. package/js/src/kucoin.d.ts +1 -1
  109. package/js/src/kucoinfutures.d.ts +4 -5
  110. package/js/src/kucoinfutures.js +0 -3
  111. package/js/src/kuna.d.ts +155 -7
  112. package/js/src/kuna.js +1290 -351
  113. package/js/src/latoken.d.ts +7 -7
  114. package/js/src/latoken.js +2 -2
  115. package/js/src/lbank.d.ts +3 -3
  116. package/js/src/lbank2.d.ts +10 -10
  117. package/js/src/luno.d.ts +8 -8
  118. package/js/src/lykke.d.ts +6 -6
  119. package/js/src/mercado.d.ts +9 -9
  120. package/js/src/mexc.d.ts +17 -17
  121. package/js/src/ndax.d.ts +9 -9
  122. package/js/src/novadax.d.ts +10 -10
  123. package/js/src/oceanex.d.ts +3 -3
  124. package/js/src/okcoin.d.ts +9 -9
  125. package/js/src/okx.d.ts +1 -1
  126. package/js/src/phemex.d.ts +13 -13
  127. package/js/src/phemex.js +1 -0
  128. package/js/src/poloniex.d.ts +9 -9
  129. package/js/src/poloniexfutures.d.ts +8 -8
  130. package/js/src/pro/bingx.d.ts +2 -2
  131. package/js/src/pro/bitget.d.ts +3 -3
  132. package/js/src/pro/bybit.d.ts +3 -3
  133. package/js/src/pro/hitbtc.d.ts +2 -2
  134. package/js/src/pro/mexc.d.ts +2 -2
  135. package/js/src/pro/poloniex.d.ts +2 -2
  136. package/js/src/pro/wazirx.d.ts +2 -2
  137. package/js/src/probit.d.ts +9 -9
  138. package/js/src/tidex.d.ts +5 -5
  139. package/js/src/timex.d.ts +9 -9
  140. package/js/src/tokocrypto.d.ts +10 -10
  141. package/js/src/upbit.d.ts +11 -11
  142. package/js/src/wavesexchange.d.ts +9 -9
  143. package/js/src/wazirx.d.ts +8 -8
  144. package/js/src/wazirx.js +1 -1
  145. package/js/src/whitebit.d.ts +3 -3
  146. package/js/src/woo.d.ts +8 -8
  147. package/js/src/yobit.d.ts +6 -6
  148. package/js/src/zaif.d.ts +5 -5
  149. package/js/src/zonda.d.ts +6 -6
  150. package/package.json +7 -3
package/dist/cjs/ccxt.js CHANGED
@@ -180,7 +180,7 @@ var woo$1 = require('./src/pro/woo.js');
180
180
 
181
181
  //-----------------------------------------------------------------------------
182
182
  // this is updated by vss.js when building
183
- const version = '4.1.35';
183
+ const version = '4.1.37';
184
184
  Exchange["default"].ccxtVersion = version;
185
185
  const exchanges = {
186
186
  'ace': ace,
@@ -80,6 +80,9 @@ class Exchange {
80
80
  this.last_json_response = undefined;
81
81
  this.last_response_headers = undefined;
82
82
  this.last_request_headers = undefined;
83
+ this.last_request_body = undefined;
84
+ this.last_request_url = undefined;
85
+ this.last_request_path = undefined;
83
86
  this.id = undefined;
84
87
  this.markets = undefined;
85
88
  this.status = undefined;
@@ -274,6 +277,9 @@ class Exchange {
274
277
  this.last_json_response = undefined;
275
278
  this.last_response_headers = undefined;
276
279
  this.last_request_headers = undefined;
280
+ this.last_request_body = undefined;
281
+ this.last_request_url = undefined;
282
+ this.last_request_path = undefined;
277
283
  // camelCase and snake_notation support
278
284
  const unCamelCaseProperties = (obj = this) => {
279
285
  if (obj !== null) {
@@ -2097,6 +2103,25 @@ class Exchange {
2097
2103
  'cost': this.parseNumber(cost),
2098
2104
  };
2099
2105
  }
2106
+ safeLiquidation(liquidation, market = undefined) {
2107
+ const contracts = this.safeString(liquidation, 'contracts');
2108
+ const contractSize = this.safeString(market, 'contractSize');
2109
+ const price = this.safeString(liquidation, 'price');
2110
+ let baseValue = this.safeString(liquidation, 'baseValue');
2111
+ let quoteValue = this.safeString(liquidation, 'quoteValue');
2112
+ if ((baseValue === undefined) && (contracts !== undefined) && (contractSize !== undefined) && (price !== undefined)) {
2113
+ baseValue = Precise["default"].stringMul(contracts, contractSize);
2114
+ }
2115
+ if ((quoteValue === undefined) && (baseValue !== undefined) && (price !== undefined)) {
2116
+ quoteValue = Precise["default"].stringMul(baseValue, price);
2117
+ }
2118
+ liquidation['contracts'] = this.parseNumber(contracts);
2119
+ liquidation['contractSize'] = this.parseNumber(contractSize);
2120
+ liquidation['price'] = this.parseNumber(price);
2121
+ liquidation['baseValue'] = this.parseNumber(baseValue);
2122
+ liquidation['quoteValue'] = this.parseNumber(quoteValue);
2123
+ return liquidation;
2124
+ }
2100
2125
  safeTrade(trade, market = undefined) {
2101
2126
  const amount = this.safeString(trade, 'amount');
2102
2127
  const price = this.safeString(trade, 'price');
@@ -2836,6 +2861,8 @@ class Exchange {
2836
2861
  this.lastRestRequestTimestamp = this.milliseconds();
2837
2862
  const request = this.sign(path, api, method, params, headers, body);
2838
2863
  this.last_request_headers = request['headers'];
2864
+ this.last_request_body = request['body'];
2865
+ this.last_request_url = request['url'];
2839
2866
  return await this.fetch(request['url'], request['method'], request['headers'], request['body']);
2840
2867
  }
2841
2868
  async request(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined, config = {}) {
@@ -3673,6 +3700,10 @@ class Exchange {
3673
3700
  filterByCurrencySinceLimit(array, code = undefined, since = undefined, limit = undefined, tail = false) {
3674
3701
  return this.filterByValueSinceLimit(array, 'currency', code, since, limit, 'timestamp', tail);
3675
3702
  }
3703
+ filterBySymbolsSinceLimit(array, symbols = undefined, since = undefined, limit = undefined, tail = false) {
3704
+ const result = this.filterByArray(array, 'symbol', symbols, false);
3705
+ return this.filterBySinceLimit(result, since, limit, 'timestamp', tail);
3706
+ }
3676
3707
  parseLastPrices(pricesData, symbols = undefined, params = {}) {
3677
3708
  //
3678
3709
  // the value of tickers is either a dict or a list
@@ -46,12 +46,6 @@ class ExchangeError extends Error {
46
46
  this.name = 'ExchangeError';
47
47
  }
48
48
  }
49
- class OperationFailed extends ExchangeError {
50
- constructor(message) {
51
- super(message);
52
- this.name = 'OperationFailed';
53
- }
54
- }
55
49
  class AuthenticationError extends ExchangeError {
56
50
  constructor(message) {
57
51
  super(message);
@@ -239,6 +233,12 @@ class RequestTimeout extends NetworkError {
239
233
  this.name = 'RequestTimeout';
240
234
  }
241
235
  }
236
+ class OperationFailed extends NetworkError {
237
+ constructor(message) {
238
+ super(message);
239
+ this.name = 'OperationFailed';
240
+ }
241
+ }
242
242
  /* ------------------------------------------------------------------------ */
243
243
  // export default subclass (
244
244
  // // Root class
@@ -721,6 +721,7 @@ class binance extends binance$1 {
721
721
  'topLongShortPositionRatio': 1,
722
722
  'globalLongShortAccountRatio': 1,
723
723
  'takerlongshortRatio': 1,
724
+ 'basis': 1,
724
725
  },
725
726
  },
726
727
  'fapiPrivate': {
@@ -9520,7 +9521,7 @@ class binance extends binance$1 {
9520
9521
  //
9521
9522
  const marketId = this.safeString(liquidation, 'symbol');
9522
9523
  const timestamp = this.safeInteger2(liquidation, 'updatedTime', 'updateTime');
9523
- return {
9524
+ return this.safeLiquidation({
9524
9525
  'info': liquidation,
9525
9526
  'symbol': this.safeSymbol(marketId, market),
9526
9527
  'contracts': this.safeNumber(liquidation, 'executedQty'),
@@ -9530,7 +9531,7 @@ class binance extends binance$1 {
9530
9531
  'quoteValue': this.safeNumber(liquidation, 'cumQuote'),
9531
9532
  'timestamp': timestamp,
9532
9533
  'datetime': this.iso8601(timestamp),
9533
- };
9534
+ });
9534
9535
  }
9535
9536
  }
9536
9537
 
@@ -40,7 +40,9 @@ class bingx extends bingx$1 {
40
40
  'fetchFundingRate': true,
41
41
  'fetchFundingRateHistory': true,
42
42
  'fetchLeverage': true,
43
+ 'fetchLiquidations': false,
43
44
  'fetchMarkets': true,
45
+ 'fetchMyLiquidations': true,
44
46
  'fetchOHLCV': true,
45
47
  'fetchOpenInterest': true,
46
48
  'fetchOpenOrders': true,
@@ -339,7 +341,8 @@ class bingx extends bingx$1 {
339
341
  'PFUTURES': 'swap',
340
342
  'SFUTURES': 'future',
341
343
  },
342
- 'recvWindow': 5 * 1000, // 5 sec
344
+ 'recvWindow': 5 * 1000,
345
+ 'broker': 'CCXT',
343
346
  },
344
347
  });
345
348
  }
@@ -3076,6 +3079,110 @@ class bingx extends bingx$1 {
3076
3079
  }
3077
3080
  return sortedParams;
3078
3081
  }
3082
+ async fetchMyLiquidations(symbol = undefined, since = undefined, limit = undefined, params = {}) {
3083
+ /**
3084
+ * @method
3085
+ * @name bingx#fetchMyLiquidations
3086
+ * @description retrieves the users liquidated positions
3087
+ * @see https://bingx-api.github.io/docs/#/swapV2/trade-api.html#User's%20Force%20Orders
3088
+ * @param {string} [symbol] unified CCXT market symbol
3089
+ * @param {int} [since] the earliest time in ms to fetch liquidations for
3090
+ * @param {int} [limit] the maximum number of liquidation structures to retrieve
3091
+ * @param {object} [params] exchange specific parameters for the bingx api endpoint
3092
+ * @param {int} [params.until] timestamp in ms of the latest liquidation
3093
+ * @returns {object} an array of [liquidation structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#liquidation-structure}
3094
+ */
3095
+ await this.loadMarkets();
3096
+ let request = {
3097
+ 'autoCloseType': 'LIQUIDATION',
3098
+ };
3099
+ [request, params] = this.handleUntilOption('endTime', request, params);
3100
+ let market = undefined;
3101
+ if (symbol !== undefined) {
3102
+ market = this.market(symbol);
3103
+ request['symbol'] = symbol;
3104
+ }
3105
+ if (since !== undefined) {
3106
+ request['startTime'] = since;
3107
+ }
3108
+ if (limit !== undefined) {
3109
+ request['limit'] = limit;
3110
+ }
3111
+ const response = await this.swapV2PrivateGetTradeForceOrders(this.extend(request, params));
3112
+ //
3113
+ // {
3114
+ // "code": 0,
3115
+ // "msg": "",
3116
+ // "data": {
3117
+ // "orders": [
3118
+ // {
3119
+ // "time": "int64",
3120
+ // "symbol": "string",
3121
+ // "side": "string",
3122
+ // "type": "string",
3123
+ // "positionSide": "string",
3124
+ // "cumQuote": "string",
3125
+ // "status": "string",
3126
+ // "stopPrice": "string",
3127
+ // "price": "string",
3128
+ // "origQty": "string",
3129
+ // "avgPrice": "string",
3130
+ // "executedQty": "string",
3131
+ // "orderId": "int64",
3132
+ // "profit": "string",
3133
+ // "commission": "string",
3134
+ // "workingType": "string",
3135
+ // "updateTime": "int64"
3136
+ // },
3137
+ // ]
3138
+ // }
3139
+ // }
3140
+ //
3141
+ const data = this.safeValue(response, 'data', {});
3142
+ const liquidations = this.safeValue(data, 'orders', []);
3143
+ return this.parseLiquidations(liquidations, market, since, limit);
3144
+ }
3145
+ parseLiquidation(liquidation, market = undefined) {
3146
+ //
3147
+ // {
3148
+ // "time": "int64",
3149
+ // "symbol": "string",
3150
+ // "side": "string",
3151
+ // "type": "string",
3152
+ // "positionSide": "string",
3153
+ // "cumQuote": "string",
3154
+ // "status": "string",
3155
+ // "stopPrice": "string",
3156
+ // "price": "string",
3157
+ // "origQty": "string",
3158
+ // "avgPrice": "string",
3159
+ // "executedQty": "string",
3160
+ // "orderId": "int64",
3161
+ // "profit": "string",
3162
+ // "commission": "string",
3163
+ // "workingType": "string",
3164
+ // "updateTime": "int64"
3165
+ // }
3166
+ //
3167
+ const marketId = this.safeString(liquidation, 'symbol');
3168
+ const timestamp = this.safeInteger(liquidation, 'time');
3169
+ const contractsString = this.safeString(liquidation, 'executedQty');
3170
+ const contractSizeString = this.safeString(market, 'contractSize');
3171
+ const priceString = this.safeString(liquidation, 'avgPrice');
3172
+ const baseValueString = Precise["default"].stringMul(contractsString, contractSizeString);
3173
+ const quoteValueString = Precise["default"].stringMul(baseValueString, priceString);
3174
+ return this.safeLiquidation({
3175
+ 'info': liquidation,
3176
+ 'symbol': this.safeSymbol(marketId, market),
3177
+ 'contracts': this.parseNumber(contractsString),
3178
+ 'contractSize': this.parseNumber(contractSizeString),
3179
+ 'price': this.parseNumber(priceString),
3180
+ 'baseValue': this.parseNumber(baseValueString),
3181
+ 'quoteValue': this.parseNumber(quoteValueString),
3182
+ 'timestamp': timestamp,
3183
+ 'datetime': this.iso8601(timestamp),
3184
+ });
3185
+ }
3079
3186
  sign(path, section = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
3080
3187
  const type = section[0];
3081
3188
  const version = section[1];
@@ -3113,7 +3220,7 @@ class bingx extends bingx$1 {
3113
3220
  query += 'signature=' + signature;
3114
3221
  headers = {
3115
3222
  'X-BX-APIKEY': this.apiKey,
3116
- 'X-SOURCE-KEY': 'CCXT',
3223
+ 'X-SOURCE-KEY': this.safeString(this.options, 'broker', 'CCXT'),
3117
3224
  };
3118
3225
  url += query;
3119
3226
  }
@@ -23,7 +23,7 @@ class bitforex extends bitforex$1 {
23
23
  'CORS': undefined,
24
24
  'spot': true,
25
25
  'margin': false,
26
- 'swap': undefined,
26
+ 'swap': false,
27
27
  'future': false,
28
28
  'option': false,
29
29
  'cancelOrder': true,
@@ -822,6 +822,7 @@ class bitget extends bitget$1 {
822
822
  '40017': errors.ExchangeError,
823
823
  '40018': errors.PermissionDenied,
824
824
  '40019': errors.BadRequest,
825
+ '40037': errors.AuthenticationError,
825
826
  '40102': errors.BadRequest,
826
827
  '40103': errors.BadRequest,
827
828
  '40104': errors.ExchangeError,
@@ -6311,7 +6312,7 @@ class bitget extends bitget$1 {
6311
6312
  const liquidationFee = this.safeString(liquidation, 'LiqFee');
6312
6313
  const totalDebt = this.safeString(liquidation, 'totalDebt');
6313
6314
  const quoteValueString = Precise["default"].stringAdd(liquidationFee, totalDebt);
6314
- return {
6315
+ return this.safeLiquidation({
6315
6316
  'info': liquidation,
6316
6317
  'symbol': this.safeSymbol(marketId, market),
6317
6318
  'contracts': undefined,
@@ -6321,7 +6322,7 @@ class bitget extends bitget$1 {
6321
6322
  'quoteValue': this.parseNumber(quoteValueString),
6322
6323
  'timestamp': timestamp,
6323
6324
  'datetime': this.iso8601(timestamp),
6324
- };
6325
+ });
6325
6326
  }
6326
6327
  async fetchBorrowRate(code, params = {}) {
6327
6328
  /**
@@ -4026,7 +4026,7 @@ class bitmart extends bitmart$1 {
4026
4026
  const priceString = this.safeString(liquidation, 'deal_avg_price');
4027
4027
  const baseValueString = Precise["default"].stringMul(contractsString, contractSizeString);
4028
4028
  const quoteValueString = Precise["default"].stringMul(baseValueString, priceString);
4029
- return {
4029
+ return this.safeLiquidation({
4030
4030
  'info': liquidation,
4031
4031
  'symbol': this.safeSymbol(marketId, market),
4032
4032
  'contracts': this.parseNumber(contractsString),
@@ -4036,7 +4036,7 @@ class bitmart extends bitmart$1 {
4036
4036
  'quoteValue': this.parseNumber(quoteValueString),
4037
4037
  'timestamp': timestamp,
4038
4038
  'datetime': this.iso8601(timestamp),
4039
- };
4039
+ });
4040
4040
  }
4041
4041
  nonce() {
4042
4042
  return this.milliseconds();
@@ -932,7 +932,7 @@ class bitmex extends bitmex$1 {
932
932
  */
933
933
  // Bitmex barfs if you set 'open': false in the filter...
934
934
  const orders = await this.fetchOrders(symbol, since, limit, params);
935
- return this.filterBy(orders, 'status', 'closed');
935
+ return this.filterByArray(orders, 'status', ['closed', 'canceled'], false);
936
936
  }
937
937
  async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
938
938
  /**
@@ -2703,7 +2703,7 @@ class bitmex extends bitmex$1 {
2703
2703
  // }
2704
2704
  //
2705
2705
  const marketId = this.safeString(liquidation, 'symbol');
2706
- return {
2706
+ return this.safeLiquidation({
2707
2707
  'info': liquidation,
2708
2708
  'symbol': this.safeSymbol(marketId, market),
2709
2709
  'contracts': undefined,
@@ -2713,7 +2713,7 @@ class bitmex extends bitmex$1 {
2713
2713
  'quoteValue': undefined,
2714
2714
  'timestamp': undefined,
2715
2715
  'datetime': undefined,
2716
- };
2716
+ });
2717
2717
  }
2718
2718
  handleErrors(code, reason, url, method, headers, body, response, requestHeaders, requestBody) {
2719
2719
  if (response === undefined) {
@@ -120,6 +120,7 @@ class bitopro extends bitopro$1 {
120
120
  'provisioning/trading-pairs': 1,
121
121
  'provisioning/limitations-and-fees': 1,
122
122
  'trading-history/{pair}': 1,
123
+ 'price/otc/{currency}': 1,
123
124
  },
124
125
  },
125
126
  'private': {
@@ -123,9 +123,16 @@ class bitstamp extends bitstamp$1 {
123
123
  'trading-pairs-info/': 1,
124
124
  'currencies/': 1,
125
125
  'eur_usd/': 1,
126
+ 'travel_rule/vasps/': 1,
126
127
  },
127
128
  },
128
129
  'private': {
130
+ 'get': {
131
+ 'travel_rule/contacts/': 1,
132
+ 'contacts/{contact_uuid}/': 1,
133
+ 'earn/subscriptions/': 1,
134
+ 'earn/transactions/': 1,
135
+ },
129
136
  'post': {
130
137
  'account_balances/': 1,
131
138
  'account_balances/{currency}/': 1,
@@ -152,6 +159,7 @@ class bitstamp extends bitstamp$1 {
152
159
  'transfer-from-main/': 1,
153
160
  'my_trading_pairs/': 1,
154
161
  'fees/trading/': 1,
162
+ 'fees/trading/{pair}': 1,
155
163
  'fees/withdrawal/': 1,
156
164
  'fees/withdrawal/{currency}/': 1,
157
165
  'withdrawal-requests/': 1,
@@ -325,6 +333,10 @@ class bitstamp extends bitstamp$1 {
325
333
  'dgld_address/': 1,
326
334
  'ldo_withdrawal/': 1,
327
335
  'ldo_address/': 1,
336
+ 'travel_rule/contacts/': 1,
337
+ 'earn/subscribe/': 1,
338
+ 'earn/subscriptions/setting/': 1,
339
+ 'earn/unsubscribe': 1,
328
340
  },
329
341
  },
330
342
  },