ccxt 4.2.29 → 4.2.31

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 (164) hide show
  1. package/README.md +5 -6
  2. package/dist/ccxt.browser.js +2196 -601
  3. package/dist/ccxt.browser.min.js +7 -7
  4. package/dist/cjs/ccxt.js +3 -1
  5. package/dist/cjs/src/ascendex.js +5 -5
  6. package/dist/cjs/src/base/Exchange.js +33 -25
  7. package/dist/cjs/src/base/errors.js +3 -3
  8. package/dist/cjs/src/base/functions/type.js +12 -0
  9. package/dist/cjs/src/bigone.js +2 -2
  10. package/dist/cjs/src/binance.js +897 -218
  11. package/dist/cjs/src/bingx.js +1 -1
  12. package/dist/cjs/src/bitfinex.js +1 -1
  13. package/dist/cjs/src/bitfinex2.js +457 -93
  14. package/dist/cjs/src/bitforex.js +3 -0
  15. package/dist/cjs/src/bitget.js +8 -4
  16. package/dist/cjs/src/bitmart.js +3 -3
  17. package/dist/cjs/src/bitmex.js +4 -4
  18. package/dist/cjs/src/bitrue.js +1 -1
  19. package/dist/cjs/src/bitso.js +1 -1
  20. package/dist/cjs/src/bitteam.js +2 -2
  21. package/dist/cjs/src/btcalpha.js +1 -1
  22. package/dist/cjs/src/bybit.js +3 -3
  23. package/dist/cjs/src/coinbase.js +22 -5
  24. package/dist/cjs/src/coincheck.js +1 -1
  25. package/dist/cjs/src/coinex.js +2 -2
  26. package/dist/cjs/src/coinlist.js +1 -1
  27. package/dist/cjs/src/coinmate.js +1 -1
  28. package/dist/cjs/src/coinmetro.js +2 -2
  29. package/dist/cjs/src/coinsph.js +1 -1
  30. package/dist/cjs/src/cryptocom.js +3 -3
  31. package/dist/cjs/src/deribit.js +1 -0
  32. package/dist/cjs/src/digifinex.js +6 -4
  33. package/dist/cjs/src/exmo.js +2 -2
  34. package/dist/cjs/src/gate.js +5 -5
  35. package/dist/cjs/src/gemini.js +3 -3
  36. package/dist/cjs/src/hitbtc.js +14 -20
  37. package/dist/cjs/src/hollaex.js +2 -2
  38. package/dist/cjs/src/htx.js +6 -6
  39. package/dist/cjs/src/huobijp.js +1 -1
  40. package/dist/cjs/src/kraken.js +3 -1
  41. package/dist/cjs/src/krakenfutures.js +4 -1
  42. package/dist/cjs/src/kucoin.js +17 -17
  43. package/dist/cjs/src/kucoinfutures.js +3 -3
  44. package/dist/cjs/src/lbank.js +28 -27
  45. package/dist/cjs/src/mexc.js +7 -7
  46. package/dist/cjs/src/novadax.js +1 -1
  47. package/dist/cjs/src/okcoin.js +2 -2
  48. package/dist/cjs/src/okx.js +23 -8
  49. package/dist/cjs/src/p2b.js +1 -0
  50. package/dist/cjs/src/phemex.js +3 -3
  51. package/dist/cjs/src/poloniexfutures.js +6 -3
  52. package/dist/cjs/src/pro/alpaca.js +1 -1
  53. package/dist/cjs/src/pro/binance.js +4 -4
  54. package/dist/cjs/src/pro/bitget.js +1 -1
  55. package/dist/cjs/src/pro/bitmart.js +1 -1
  56. package/dist/cjs/src/pro/bitmex.js +49 -6
  57. package/dist/cjs/src/pro/bitvavo.js +1 -1
  58. package/dist/cjs/src/pro/bybit.js +2 -2
  59. package/dist/cjs/src/pro/cex.js +2 -2
  60. package/dist/cjs/src/pro/independentreserve.js +1 -1
  61. package/dist/cjs/src/pro/okx.js +1 -1
  62. package/dist/cjs/src/pro/onetrading.js +2 -2
  63. package/dist/cjs/src/pro/p2b.js +432 -0
  64. package/dist/cjs/src/pro/probit.js +5 -5
  65. package/dist/cjs/src/pro/whitebit.js +1 -1
  66. package/dist/cjs/src/probit.js +1 -1
  67. package/dist/cjs/src/timex.js +2 -2
  68. package/dist/cjs/src/tokocrypto.js +3 -3
  69. package/dist/cjs/src/wavesexchange.js +2 -2
  70. package/dist/cjs/src/whitebit.js +3 -3
  71. package/dist/cjs/src/woo.js +3 -3
  72. package/dist/cjs/src/yobit.js +1 -1
  73. package/dist/cjs/src/zaif.js +1 -1
  74. package/dist/cjs/src/zonda.js +3 -3
  75. package/js/ccxt.d.ts +4 -1
  76. package/js/ccxt.js +3 -1
  77. package/js/src/abstract/bybit.d.ts +2 -2
  78. package/js/src/abstract/coinbase.d.ts +10 -0
  79. package/js/src/abstract/okx.d.ts +12 -1
  80. package/js/src/ascendex.js +5 -5
  81. package/js/src/base/Exchange.d.ts +2 -2
  82. package/js/src/base/Exchange.js +33 -25
  83. package/js/src/base/errorHierarchy.d.ts +7 -6
  84. package/js/src/base/errorHierarchy.js +7 -6
  85. package/js/src/base/errors.d.ts +3 -3
  86. package/js/src/base/errors.js +3 -3
  87. package/js/src/base/functions/type.js +12 -0
  88. package/js/src/bigone.js +2 -2
  89. package/js/src/binance.d.ts +1 -0
  90. package/js/src/binance.js +898 -219
  91. package/js/src/bingx.js +1 -1
  92. package/js/src/bitfinex.js +1 -1
  93. package/js/src/bitfinex2.d.ts +6 -1
  94. package/js/src/bitfinex2.js +457 -93
  95. package/js/src/bitforex.js +3 -0
  96. package/js/src/bitget.js +8 -4
  97. package/js/src/bitmart.js +3 -3
  98. package/js/src/bitmex.js +4 -4
  99. package/js/src/bitrue.js +1 -1
  100. package/js/src/bitso.d.ts +1 -1
  101. package/js/src/bitso.js +1 -1
  102. package/js/src/bitteam.js +2 -2
  103. package/js/src/btcalpha.js +1 -1
  104. package/js/src/bybit.js +3 -3
  105. package/js/src/coinbase.js +22 -5
  106. package/js/src/coincheck.js +1 -1
  107. package/js/src/coinex.js +2 -2
  108. package/js/src/coinlist.js +1 -1
  109. package/js/src/coinmate.js +1 -1
  110. package/js/src/coinmetro.d.ts +1 -1
  111. package/js/src/coinmetro.js +2 -2
  112. package/js/src/coinsph.js +1 -1
  113. package/js/src/cryptocom.js +3 -3
  114. package/js/src/deribit.js +1 -0
  115. package/js/src/digifinex.js +6 -4
  116. package/js/src/exmo.js +2 -2
  117. package/js/src/gate.js +5 -5
  118. package/js/src/gemini.d.ts +1 -1
  119. package/js/src/gemini.js +3 -3
  120. package/js/src/hitbtc.js +14 -20
  121. package/js/src/hollaex.js +2 -2
  122. package/js/src/htx.js +6 -6
  123. package/js/src/huobijp.js +1 -1
  124. package/js/src/kraken.js +3 -1
  125. package/js/src/krakenfutures.js +4 -1
  126. package/js/src/kucoin.js +17 -17
  127. package/js/src/kucoinfutures.js +3 -3
  128. package/js/src/lbank.d.ts +1 -1
  129. package/js/src/lbank.js +28 -27
  130. package/js/src/mexc.js +7 -7
  131. package/js/src/novadax.js +1 -1
  132. package/js/src/okcoin.js +2 -2
  133. package/js/src/okx.js +23 -8
  134. package/js/src/p2b.js +1 -0
  135. package/js/src/phemex.js +3 -3
  136. package/js/src/poloniexfutures.js +6 -3
  137. package/js/src/pro/alpaca.js +1 -1
  138. package/js/src/pro/binance.js +4 -4
  139. package/js/src/pro/bitget.js +1 -1
  140. package/js/src/pro/bitmart.js +1 -1
  141. package/js/src/pro/bitmex.d.ts +2 -1
  142. package/js/src/pro/bitmex.js +49 -6
  143. package/js/src/pro/bitvavo.js +1 -1
  144. package/js/src/pro/bybit.js +2 -2
  145. package/js/src/pro/cex.js +2 -2
  146. package/js/src/pro/independentreserve.js +1 -1
  147. package/js/src/pro/okx.js +1 -1
  148. package/js/src/pro/onetrading.js +2 -2
  149. package/js/src/pro/p2b.d.ts +23 -0
  150. package/js/src/pro/p2b.js +433 -0
  151. package/js/src/pro/probit.js +5 -5
  152. package/js/src/pro/whitebit.js +1 -1
  153. package/js/src/probit.js +1 -1
  154. package/js/src/timex.js +2 -2
  155. package/js/src/tokocrypto.js +3 -3
  156. package/js/src/wavesexchange.js +2 -2
  157. package/js/src/whitebit.js +3 -3
  158. package/js/src/woo.js +3 -3
  159. package/js/src/yobit.js +1 -1
  160. package/js/src/zaif.js +1 -1
  161. package/js/src/zonda.d.ts +1 -1
  162. package/js/src/zonda.js +3 -3
  163. package/package.json +1 -1
  164. package/skip-tests.json +3 -10
package/js/src/okx.js CHANGED
@@ -344,9 +344,11 @@ export default class okx extends Exchange {
344
344
  'tradingBot/grid/sub-orders': 1,
345
345
  'tradingBot/grid/positions': 1,
346
346
  'tradingBot/grid/ai-param': 1,
347
- 'tradingBot/public/rsi-back-testing': 1,
347
+ 'tradingBot/signal/signals': 1,
348
348
  'tradingBot/signal/orders-algo-details': 1,
349
+ 'tradingBot/signal/orders-algo-history': 1,
349
350
  'tradingBot/signal/positions': 1,
351
+ 'tradingBot/signal/positions-history': 1,
350
352
  'tradingBot/signal/sub-orders': 1,
351
353
  'tradingBot/signal/event-history': 1,
352
354
  'tradingBot/recurring/orders-algo-pending': 1,
@@ -466,6 +468,15 @@ export default class okx extends Exchange {
466
468
  'tradingBot/grid/compute-margin-balance': 1,
467
469
  'tradingBot/grid/margin-balance': 1,
468
470
  'tradingBot/grid/min-investment': 1,
471
+ 'tradingBot/signal/create-signal': 1,
472
+ 'tradingBot/signal/order-algo': 1,
473
+ 'tradingBot/signal/stop-order-algo': 1,
474
+ 'tradingBot/signal/margin-balance': 1,
475
+ 'tradingBot/signal/amendTPSL': 1,
476
+ 'tradingBot/signal/set-instruments': 1,
477
+ 'tradingBot/signal/close-position': 1,
478
+ 'tradingBot/signal/sub-order': 1,
479
+ 'tradingBot/signal/cancel-sub-order': 1,
469
480
  'tradingBot/recurring/order-algo': 1,
470
481
  'tradingBot/recurring/amend-order-algo': 1,
471
482
  'tradingBot/recurring/stop-order-algo': 1,
@@ -2141,7 +2152,8 @@ export default class okx extends Exchange {
2141
2152
  if (since < historyBorder) {
2142
2153
  defaultType = 'HistoryCandles';
2143
2154
  }
2144
- request['before'] = since;
2155
+ const startTime = Math.max(since - 1, 0);
2156
+ request['before'] = startTime;
2145
2157
  request['after'] = this.sum(since, durationInMilliseconds * limit);
2146
2158
  }
2147
2159
  const until = this.safeInteger(params, 'until');
@@ -3106,7 +3118,7 @@ export default class okx extends Exchange {
3106
3118
  throw new ArgumentsRequired(this.id + ' cancelOrder() requires a symbol argument');
3107
3119
  }
3108
3120
  const stop = this.safeValue2(params, 'stop', 'trigger');
3109
- const trailing = this.safeValue(params, 'trailing', false);
3121
+ const trailing = this.safeBool(params, 'trailing', false);
3110
3122
  if (stop || trailing) {
3111
3123
  const orderInner = await this.cancelOrders([id], symbol, params);
3112
3124
  return this.safeValue(orderInner, 0);
@@ -3174,7 +3186,7 @@ export default class okx extends Exchange {
3174
3186
  const clientOrderIds = this.parseIds(this.safeValue2(params, 'clOrdId', 'clientOrderId'));
3175
3187
  const algoIds = this.parseIds(this.safeValue(params, 'algoId'));
3176
3188
  const stop = this.safeValue2(params, 'stop', 'trigger');
3177
- const trailing = this.safeValue(params, 'trailing', false);
3189
+ const trailing = this.safeBool(params, 'trailing', false);
3178
3190
  if (stop || trailing) {
3179
3191
  method = 'privatePostTradeCancelAlgos';
3180
3192
  }
@@ -3673,7 +3685,7 @@ export default class okx extends Exchange {
3673
3685
  let method = this.safeString(params, 'method', defaultMethod);
3674
3686
  const ordType = this.safeString(params, 'ordType');
3675
3687
  const stop = this.safeValue2(params, 'stop', 'trigger');
3676
- const trailing = this.safeValue(params, 'trailing', false);
3688
+ const trailing = this.safeBool(params, 'trailing', false);
3677
3689
  if (trailing || stop || (ordType in algoOrderTypes)) {
3678
3690
  method = 'privateGetTradeOrdersAlgoPending';
3679
3691
  }
@@ -3842,7 +3854,7 @@ export default class okx extends Exchange {
3842
3854
  let method = this.safeString(params, 'method', defaultMethod);
3843
3855
  const ordType = this.safeString(params, 'ordType');
3844
3856
  const stop = this.safeValue2(params, 'stop', 'trigger');
3845
- const trailing = this.safeValue(params, 'trailing', false);
3857
+ const trailing = this.safeBool(params, 'trailing', false);
3846
3858
  if (trailing) {
3847
3859
  method = 'privateGetTradeOrdersAlgoHistory';
3848
3860
  request['ordType'] = 'move_order_stop';
@@ -4036,7 +4048,7 @@ export default class okx extends Exchange {
4036
4048
  let method = this.safeString(params, 'method', defaultMethod);
4037
4049
  const ordType = this.safeString(params, 'ordType');
4038
4050
  const stop = this.safeValue2(params, 'stop', 'trigger');
4039
- const trailing = this.safeValue(params, 'trailing', false);
4051
+ const trailing = this.safeBool(params, 'trailing', false);
4040
4052
  if (trailing || stop || (ordType in algoOrderTypes)) {
4041
4053
  method = 'privateGetTradeOrdersAlgoHistory';
4042
4054
  request['state'] = 'effective';
@@ -4205,10 +4217,13 @@ export default class okx extends Exchange {
4205
4217
  market = this.market(symbol);
4206
4218
  request['instId'] = market['id'];
4207
4219
  }
4220
+ if (since !== undefined) {
4221
+ request['begin'] = since;
4222
+ }
4208
4223
  [request, params] = this.handleUntilOption('end', request, params);
4209
4224
  const [type, query] = this.handleMarketTypeAndParams('fetchMyTrades', market, params);
4210
4225
  request['instType'] = this.convertToInstrumentType(type);
4211
- if (limit !== undefined) {
4226
+ if ((limit !== undefined) && (since === undefined)) { // let limit = n, okx will return the n most recent results, instead of the n results after limit, so limit should only be sent when since is undefined
4212
4227
  request['limit'] = limit; // default 100, max 100
4213
4228
  }
4214
4229
  const response = await this.privateGetTradeFillsHistory(this.extend(request, query));
package/js/src/p2b.js CHANGED
@@ -22,6 +22,7 @@ export default class p2b extends Exchange {
22
22
  'countries': ['LT'],
23
23
  'rateLimit': 100,
24
24
  'version': 'v2',
25
+ 'pro': true,
25
26
  'has': {
26
27
  'CORS': undefined,
27
28
  'spot': true,
package/js/src/phemex.js CHANGED
@@ -2420,7 +2420,7 @@ export default class phemex extends Exchange {
2420
2420
  });
2421
2421
  }
2422
2422
  parseOrder(order, market = undefined) {
2423
- const isSwap = this.safeValue(market, 'swap', false);
2423
+ const isSwap = this.safeBool(market, 'swap', false);
2424
2424
  const hasPnl = ('closedPnl' in order);
2425
2425
  if (isSwap || hasPnl) {
2426
2426
  return this.parseSwapOrder(order, market);
@@ -4332,7 +4332,7 @@ export default class phemex extends Exchange {
4332
4332
  throw new BadRequest(this.id + ' setLeverage() leverage should be between -100 and 100');
4333
4333
  }
4334
4334
  await this.loadMarkets();
4335
- const isHedged = this.safeValue(params, 'hedged', false);
4335
+ const isHedged = this.safeBool(params, 'hedged', false);
4336
4336
  const longLeverageRr = this.safeInteger(params, 'longLeverageRr');
4337
4337
  const shortLeverageRr = this.safeInteger(params, 'shortLeverageRr');
4338
4338
  const market = this.market(symbol);
@@ -4428,7 +4428,7 @@ export default class phemex extends Exchange {
4428
4428
  transfer = this.parseTransfer(response);
4429
4429
  }
4430
4430
  const transferOptions = this.safeValue(this.options, 'transfer', {});
4431
- const fillResponseFromRequest = this.safeValue(transferOptions, 'fillResponseFromRequest', true);
4431
+ const fillResponseFromRequest = this.safeBool(transferOptions, 'fillResponseFromRequest', true);
4432
4432
  if (fillResponseFromRequest) {
4433
4433
  if (transfer['fromAccount'] === undefined) {
4434
4434
  transfer['fromAccount'] = fromAccount;
@@ -37,6 +37,9 @@ export default class poloniexfutures extends Exchange {
37
37
  'fetchBalance': true,
38
38
  'fetchClosedOrders': true,
39
39
  'fetchCurrencies': false,
40
+ 'fetchDepositAddress': false,
41
+ 'fetchDepositAddresses': false,
42
+ 'fetchDepositAddressesByNetwork': false,
40
43
  'fetchFundingRate': true,
41
44
  'fetchFundingRateHistory': false,
42
45
  'fetchL3OrderBook': true,
@@ -864,7 +867,7 @@ export default class poloniexfutures extends Exchange {
864
867
  request['timeInForce'] = timeInForce;
865
868
  }
866
869
  }
867
- const postOnly = this.safeValue(params, 'postOnly', false);
870
+ const postOnly = this.safeBool(params, 'postOnly', false);
868
871
  const hidden = this.safeValue(params, 'hidden');
869
872
  if (postOnly && (hidden !== undefined)) {
870
873
  throw new BadRequest(this.id + ' createOrder() does not support the postOnly parameter together with a hidden parameter');
@@ -1555,8 +1558,8 @@ export default class poloniexfutures extends Exchange {
1555
1558
  // precision reported by their api is 8 d.p.
1556
1559
  // const average = Precise.stringDiv (rawCost, Precise.stringMul (filled, market['contractSize']));
1557
1560
  // bool
1558
- const isActive = this.safeValue(order, 'isActive', false);
1559
- const cancelExist = this.safeValue(order, 'cancelExist', false);
1561
+ const isActive = this.safeBool(order, 'isActive', false);
1562
+ const cancelExist = this.safeBool(order, 'cancelExist', false);
1560
1563
  const status = isActive ? 'open' : 'closed';
1561
1564
  let id = this.safeString(order, 'id');
1562
1565
  if ('cancelledOrderIds' in order) {
@@ -227,7 +227,7 @@ export default class alpaca extends alpacaRest {
227
227
  const symbol = this.safeSymbol(marketId);
228
228
  const datetime = this.safeString(message, 't');
229
229
  const timestamp = this.parse8601(datetime);
230
- const isSnapshot = this.safeValue(message, 'r', false);
230
+ const isSnapshot = this.safeBool(message, 'r', false);
231
231
  let orderbook = this.safeValue(this.orderbooks, symbol);
232
232
  if (orderbook === undefined) {
233
233
  orderbook = this.orderBook();
@@ -1273,7 +1273,7 @@ export default class binance extends binanceRest {
1273
1273
  return undefined;
1274
1274
  }
1275
1275
  const options = this.safeValue(this.options, 'watchBalance');
1276
- const fetchBalanceSnapshot = this.safeValue(options, 'fetchBalanceSnapshot', false);
1276
+ const fetchBalanceSnapshot = this.safeBool(options, 'fetchBalanceSnapshot', false);
1277
1277
  if (fetchBalanceSnapshot) {
1278
1278
  const messageHash = type + ':fetchBalanceSnapshot';
1279
1279
  if (!(messageHash in client.futures)) {
@@ -1399,8 +1399,8 @@ export default class binance extends binanceRest {
1399
1399
  this.setBalanceCache(client, type);
1400
1400
  this.setPositionsCache(client, type);
1401
1401
  const options = this.safeValue(this.options, 'watchBalance');
1402
- const fetchBalanceSnapshot = this.safeValue(options, 'fetchBalanceSnapshot', false);
1403
- const awaitBalanceSnapshot = this.safeValue(options, 'awaitBalanceSnapshot', true);
1402
+ const fetchBalanceSnapshot = this.safeBool(options, 'fetchBalanceSnapshot', false);
1403
+ const awaitBalanceSnapshot = this.safeBool(options, 'awaitBalanceSnapshot', true);
1404
1404
  if (fetchBalanceSnapshot && awaitBalanceSnapshot) {
1405
1405
  await client.future(type + ':fetchBalanceSnapshot');
1406
1406
  }
@@ -1561,7 +1561,7 @@ export default class binance extends binanceRest {
1561
1561
  let returnRateLimits = false;
1562
1562
  [returnRateLimits, params] = this.handleOptionAndParams(params, 'createOrderWs', 'returnRateLimits', false);
1563
1563
  payload['returnRateLimits'] = returnRateLimits;
1564
- const test = this.safeValue(params, 'test', false);
1564
+ const test = this.safeBool(params, 'test', false);
1565
1565
  params = this.omit(params, 'test');
1566
1566
  const message = {
1567
1567
  'id': messageHash,
@@ -895,7 +895,7 @@ export default class bitget extends bitgetRest {
895
895
  await this.loadMarkets();
896
896
  let market = undefined;
897
897
  let marketId = undefined;
898
- const isStop = this.safeValue(params, 'stop', false);
898
+ const isStop = this.safeBool(params, 'stop', false);
899
899
  params = this.omit(params, 'stop');
900
900
  let messageHash = (isStop) ? 'triggerOrder' : 'order';
901
901
  let subscriptionHash = 'order:trades';
@@ -146,7 +146,7 @@ export default class bitmart extends bitmartRest {
146
146
  return;
147
147
  }
148
148
  const options = this.safeValue(this.options, 'watchBalance');
149
- const snapshot = this.safeValue(options, 'fetchBalanceSnapshot', true);
149
+ const snapshot = this.safeBool(options, 'fetchBalanceSnapshot', true);
150
150
  if (snapshot) {
151
151
  const messageHash = type + ':' + 'fetchBalanceSnapshot';
152
152
  if (!(messageHash in client.futures)) {
@@ -1,9 +1,10 @@
1
1
  import bitmexRest from '../bitmex.js';
2
- import type { Int, Str, Strings, OrderBook, Order, Trade, Ticker, OHLCV, Position, Balances } from '../base/types.js';
2
+ import type { Int, Str, Strings, OrderBook, Order, Trade, Ticker, Tickers, OHLCV, Position, Balances } from '../base/types.js';
3
3
  import Client from '../base/ws/Client.js';
4
4
  export default class bitmex extends bitmexRest {
5
5
  describe(): any;
6
6
  watchTicker(symbol: string, params?: {}): Promise<Ticker>;
7
+ watchTickers(symbols?: Strings, params?: {}): Promise<Tickers>;
7
8
  handleTicker(client: Client, message: any): any;
8
9
  watchBalance(params?: {}): Promise<Balances>;
9
10
  handleBalance(client: Client, message: any): void;
@@ -23,7 +23,7 @@ export default class bitmex extends bitmexRest {
23
23
  'watchOrders': true,
24
24
  'watchPostions': true,
25
25
  'watchTicker': true,
26
- 'watchTickers': false,
26
+ 'watchTickers': true,
27
27
  'watchTrades': true,
28
28
  'watchTradesForSymbols': true,
29
29
  },
@@ -75,6 +75,46 @@ export default class bitmex extends bitmexRest {
75
75
  };
76
76
  return await this.watch(url, messageHash, this.extend(request, params), messageHash);
77
77
  }
78
+ async watchTickers(symbols = undefined, params = {}) {
79
+ /**
80
+ * @method
81
+ * @name bitmex#watchTickers
82
+ * @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list
83
+ * @param {string[]} symbols unified symbol of the market to fetch the ticker for
84
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
85
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
86
+ */
87
+ await this.loadMarkets();
88
+ symbols = this.marketSymbols(symbols, undefined, true);
89
+ const name = 'instrument';
90
+ const url = this.urls['api']['ws'];
91
+ const messageHashes = [];
92
+ if (symbols !== undefined) {
93
+ for (let i = 0; i < symbols.length; i++) {
94
+ const symbol = symbols[i];
95
+ const market = this.market(symbol);
96
+ const hash = name + ':' + market['id'];
97
+ messageHashes.push(hash);
98
+ }
99
+ }
100
+ else {
101
+ messageHashes.push(name);
102
+ }
103
+ const request = {
104
+ 'op': 'subscribe',
105
+ 'args': messageHashes,
106
+ };
107
+ const ticker = await this.watchMultiple(url, messageHashes, this.extend(request, params), messageHashes);
108
+ if (this.newUpdates) {
109
+ if (symbols === undefined) {
110
+ return ticker;
111
+ }
112
+ const result = {};
113
+ result[ticker['symbol']] = ticker;
114
+ return result;
115
+ }
116
+ return this.filterByArray(this.tickers, 'symbol', symbols);
117
+ }
78
118
  handleTicker(client, message) {
79
119
  //
80
120
  // {
@@ -303,19 +343,22 @@ export default class bitmex extends bitmexRest {
303
343
  // }
304
344
  //
305
345
  const table = this.safeString(message, 'table');
306
- const data = this.safeValue(message, 'data', []);
346
+ const data = this.safeList(message, 'data', []);
347
+ const tickers = {};
307
348
  for (let i = 0; i < data.length; i++) {
308
349
  const update = data[i];
309
- const marketId = this.safeValue(update, 'symbol');
350
+ const marketId = this.safeString(update, 'symbol');
310
351
  const market = this.safeMarket(marketId);
311
352
  const symbol = market['symbol'];
312
353
  const messageHash = table + ':' + marketId;
313
- let ticker = this.safeValue(this.tickers, symbol, {});
314
- const info = this.safeValue(ticker, 'info', {});
354
+ let ticker = this.safeDict(this.tickers, symbol, {});
355
+ const info = this.safeDict(ticker, 'info', {});
315
356
  ticker = this.parseTicker(this.extend(info, update), market);
357
+ tickers[symbol] = ticker;
316
358
  this.tickers[symbol] = ticker;
317
359
  client.resolve(ticker, messageHash);
318
360
  }
361
+ client.resolve(tickers, 'instrument');
319
362
  return message;
320
363
  }
321
364
  async watchBalance(params = {}) {
@@ -579,7 +622,7 @@ export default class bitmex extends bitmexRest {
579
622
  return future;
580
623
  }
581
624
  handleAuthenticationMessage(client, message) {
582
- const authenticated = this.safeValue(message, 'success', false);
625
+ const authenticated = this.safeBool(message, 'success', false);
583
626
  const messageHash = 'authenticated';
584
627
  if (authenticated) {
585
628
  // we resolve the future here permanently so authentication only happens once
@@ -1228,7 +1228,7 @@ export default class bitvavo extends bitvavoRest {
1228
1228
  // }
1229
1229
  //
1230
1230
  const messageHash = 'authenticated';
1231
- const authenticated = this.safeValue(message, 'authenticated', false);
1231
+ const authenticated = this.safeBool(message, 'authenticated', false);
1232
1232
  if (authenticated) {
1233
1233
  // we resolve the future here permanently so authentication only happens once
1234
1234
  client.resolve(message, messageHash);
@@ -1345,8 +1345,8 @@ export default class bybit extends bybitRest {
1345
1345
  let subType = undefined;
1346
1346
  [subType, params] = this.handleSubTypeAndParams('watchBalance', undefined, params);
1347
1347
  const unified = await this.isUnifiedEnabled();
1348
- const isUnifiedMargin = this.safeValue(unified, 0, false);
1349
- const isUnifiedAccount = this.safeValue(unified, 1, false);
1348
+ const isUnifiedMargin = this.safeBool(unified, 0, false);
1349
+ const isUnifiedAccount = this.safeBool(unified, 1, false);
1350
1350
  const url = this.getUrlByMarketType(undefined, true, method, params);
1351
1351
  await this.authenticate(url);
1352
1352
  const topicByMarket = {
package/js/src/pro/cex.js CHANGED
@@ -720,7 +720,7 @@ export default class cex extends cexRest {
720
720
  order = this.parseWsOrderUpdate(data, market);
721
721
  }
722
722
  order['remaining'] = remains;
723
- const canceled = this.safeValue(data, 'cancel', false);
723
+ const canceled = this.safeBool(data, 'cancel', false);
724
724
  if (canceled) {
725
725
  order['status'] = 'canceled';
726
726
  }
@@ -809,7 +809,7 @@ export default class cex extends cexRest {
809
809
  if (isTransaction) {
810
810
  timestamp = this.parse8601(time);
811
811
  }
812
- const canceled = this.safeValue(order, 'cancel', false);
812
+ const canceled = this.safeBool(order, 'cancel', false);
813
813
  let status = 'open';
814
814
  if (canceled) {
815
815
  status = 'canceled';
@@ -179,7 +179,7 @@ export default class independentreserve extends independentreserveRest {
179
179
  const orderBook = this.safeValue(message, 'Data', {});
180
180
  const messageHash = 'orderbook:' + symbol + ':' + depth;
181
181
  const subscription = this.safeValue(client.subscriptions, messageHash, {});
182
- const receivedSnapshot = this.safeValue(subscription, 'receivedSnapshot', false);
182
+ const receivedSnapshot = this.safeBool(subscription, 'receivedSnapshot', false);
183
183
  const timestamp = this.safeInteger(message, 'Time');
184
184
  let storedOrderBook = this.safeValue(this.orderbooks, symbol);
185
185
  if (storedOrderBook === undefined) {
package/js/src/pro/okx.js CHANGED
@@ -867,7 +867,7 @@ export default class okx extends okxRest {
867
867
  // By default, receive order updates from any instrument type
868
868
  let type = undefined;
869
869
  [type, params] = this.handleOptionAndParams(params, 'watchMyTrades', 'type', 'ANY');
870
- const isStop = this.safeValue(params, 'stop', false);
870
+ const isStop = this.safeBool(params, 'stop', false);
871
871
  params = this.omit(params, ['stop']);
872
872
  await this.loadMarkets();
873
873
  await this.authenticate({ 'access': isStop ? 'business' : 'private' });
@@ -1060,7 +1060,7 @@ export default class onetrading extends onetradingRest {
1060
1060
  subscription = this.safeValue(client.subscriptions, subscriptionHash);
1061
1061
  if (subscription !== undefined) {
1062
1062
  const ohlcvMarket = this.safeValue(subscription, marketId, {});
1063
- const marketSubscribed = this.safeValue(ohlcvMarket, timeframe, false);
1063
+ const marketSubscribed = this.safeBool(ohlcvMarket, timeframe, false);
1064
1064
  if (!marketSubscribed) {
1065
1065
  type = 'UPDATE_SUBSCRIPTION';
1066
1066
  client.subscriptions[subscriptionHash] = undefined;
@@ -1301,7 +1301,7 @@ export default class onetrading extends onetradingRest {
1301
1301
  if (subscription !== undefined) {
1302
1302
  for (let i = 0; i < marketIds.length; i++) {
1303
1303
  const marketId = marketIds[i];
1304
- const marketSubscribed = this.safeValue(subscription, marketId, false);
1304
+ const marketSubscribed = this.safeBool(subscription, marketId, false);
1305
1305
  if (!marketSubscribed) {
1306
1306
  type = 'UPDATE_SUBSCRIPTION';
1307
1307
  client.subscriptions[subscriptionHash] = undefined;
@@ -0,0 +1,23 @@
1
+ import p2bRest from '../p2b.js';
2
+ import type { Int, OHLCV, OrderBook, Trade, Ticker } from '../base/types.js';
3
+ import Client from '../base/ws/Client.js';
4
+ export default class p2b extends p2bRest {
5
+ describe(): any;
6
+ subscribe(name: string, messageHash: string, request: any, params?: {}): Promise<any>;
7
+ watchOHLCV(symbol: string, timeframe?: string, since?: Int, limit?: Int, params?: {}): Promise<OHLCV[]>;
8
+ watchTicker(symbol: string, params?: {}): Promise<Ticker>;
9
+ watchTrades(symbol: string, since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
10
+ watchOrderBook(symbol: string, limit?: Int, params?: {}): Promise<OrderBook>;
11
+ handleOHLCV(client: Client, message: any): any;
12
+ handleTrade(client: Client, message: any): any;
13
+ handleTicker(client: Client, message: any): any;
14
+ handleOrderBook(client: Client, message: any): void;
15
+ handleMessage(client: Client, message: any): any;
16
+ handleErrorMessage(client: Client, message: any): boolean;
17
+ ping(client: any): {
18
+ method: string;
19
+ params: any[];
20
+ id: number;
21
+ };
22
+ handlePong(client: Client, message: any): any;
23
+ }