ccxt 4.5.5 → 4.5.7

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 (151) hide show
  1. package/README.md +4 -4
  2. package/dist/ccxt.browser.min.js +15 -15
  3. package/dist/cjs/ccxt.js +6 -6
  4. package/dist/cjs/src/abstract/toobit.js +11 -0
  5. package/dist/cjs/src/abstract/tradeogre.js +1 -1
  6. package/dist/cjs/src/apex.js +2 -2
  7. package/dist/cjs/src/backpack.js +1 -1
  8. package/dist/cjs/src/base/Exchange.js +129 -2
  9. package/dist/cjs/src/bigone.js +4 -4
  10. package/dist/cjs/src/binance.js +82 -20
  11. package/dist/cjs/src/bingx.js +5 -2
  12. package/dist/cjs/src/bitbank.js +1 -0
  13. package/dist/cjs/src/bitbns.js +1 -0
  14. package/dist/cjs/src/bitflyer.js +1 -0
  15. package/dist/cjs/src/bitget.js +16 -9
  16. package/dist/cjs/src/bithumb.js +1 -0
  17. package/dist/cjs/src/bitso.js +1 -0
  18. package/dist/cjs/src/bitvavo.js +26 -40
  19. package/dist/cjs/src/blockchaincom.js +1 -0
  20. package/dist/cjs/src/btcalpha.js +1 -0
  21. package/dist/cjs/src/btcbox.js +1 -0
  22. package/dist/cjs/src/btcmarkets.js +1 -0
  23. package/dist/cjs/src/btcturk.js +1 -0
  24. package/dist/cjs/src/bybit.js +186 -127
  25. package/dist/cjs/src/coinsph.js +4 -1
  26. package/dist/cjs/src/cryptocom.js +6 -3
  27. package/dist/cjs/src/deribit.js +3 -2
  28. package/dist/cjs/src/digifinex.js +1 -1
  29. package/dist/cjs/src/gate.js +9 -13
  30. package/dist/cjs/src/gemini.js +5 -5
  31. package/dist/cjs/src/htx.js +11 -1
  32. package/dist/cjs/src/hyperliquid.js +3 -0
  33. package/dist/cjs/src/independentreserve.js +1 -0
  34. package/dist/cjs/src/indodax.js +17 -6
  35. package/dist/cjs/src/kraken.js +31 -8
  36. package/dist/cjs/src/krakenfutures.js +1 -0
  37. package/dist/cjs/src/kucoin.js +1 -2
  38. package/dist/cjs/src/luno.js +4 -1
  39. package/dist/cjs/src/mercado.js +1 -0
  40. package/dist/cjs/src/mexc.js +84 -37
  41. package/dist/cjs/src/novadax.js +1 -0
  42. package/dist/cjs/src/oceanex.js +1 -0
  43. package/dist/cjs/src/okcoin.js +4 -1
  44. package/dist/cjs/src/okx.js +52 -8
  45. package/dist/cjs/src/phemex.js +1 -1
  46. package/dist/cjs/src/pro/apex.js +8 -4
  47. package/dist/cjs/src/pro/backpack.js +7 -5
  48. package/dist/cjs/src/pro/binance.js +150 -19
  49. package/dist/cjs/src/pro/bingx.js +206 -220
  50. package/dist/cjs/src/pro/bitget.js +332 -76
  51. package/dist/cjs/src/pro/cex.js +1 -0
  52. package/dist/cjs/src/pro/htx.js +1 -1
  53. package/dist/cjs/src/pro/independentreserve.js +1 -0
  54. package/dist/cjs/src/pro/mexc.js +23 -23
  55. package/dist/cjs/src/pro/okx.js +46 -10
  56. package/dist/cjs/src/pro/toobit.js +1163 -0
  57. package/dist/cjs/src/pro/tradeogre.js +1 -1
  58. package/dist/cjs/src/toobit.js +2999 -0
  59. package/dist/cjs/src/tradeogre.js +1 -1
  60. package/dist/cjs/src/upbit.js +1 -0
  61. package/dist/cjs/src/wavesexchange.js +1 -0
  62. package/dist/cjs/src/yobit.js +1 -0
  63. package/dist/cjs/src/zaif.js +1 -0
  64. package/dist/cjs/src/zonda.js +1 -0
  65. package/js/ccxt.d.ts +8 -8
  66. package/js/ccxt.js +6 -6
  67. package/js/src/abstract/mexc.d.ts +1 -0
  68. package/js/src/abstract/myokx.d.ts +1 -0
  69. package/js/src/abstract/okx.d.ts +1 -0
  70. package/js/src/abstract/okxus.d.ts +1 -0
  71. package/js/src/abstract/toobit.d.ts +66 -0
  72. package/js/src/apex.js +2 -2
  73. package/js/src/backpack.js +1 -1
  74. package/js/src/base/Exchange.d.ts +9 -0
  75. package/js/src/base/Exchange.js +129 -2
  76. package/js/src/bigone.js +4 -4
  77. package/js/src/binance.d.ts +9 -0
  78. package/js/src/binance.js +82 -20
  79. package/js/src/bingx.js +5 -2
  80. package/js/src/bitbank.js +1 -0
  81. package/js/src/bitbns.js +1 -0
  82. package/js/src/bitflyer.js +1 -0
  83. package/js/src/bitget.js +16 -9
  84. package/js/src/bithumb.js +1 -0
  85. package/js/src/bitso.js +1 -0
  86. package/js/src/bitvavo.d.ts +0 -2
  87. package/js/src/bitvavo.js +27 -41
  88. package/js/src/blockchaincom.js +1 -0
  89. package/js/src/btcalpha.js +1 -0
  90. package/js/src/btcbox.js +1 -0
  91. package/js/src/btcmarkets.js +1 -0
  92. package/js/src/btcturk.js +1 -0
  93. package/js/src/bybit.d.ts +8 -0
  94. package/js/src/bybit.js +186 -127
  95. package/js/src/coinsph.js +4 -1
  96. package/js/src/cryptocom.js +6 -3
  97. package/js/src/deribit.js +3 -2
  98. package/js/src/digifinex.js +1 -1
  99. package/js/src/gate.d.ts +2 -2
  100. package/js/src/gate.js +9 -13
  101. package/js/src/gemini.js +5 -5
  102. package/js/src/htx.js +11 -1
  103. package/js/src/hyperliquid.js +3 -0
  104. package/js/src/independentreserve.js +1 -0
  105. package/js/src/indodax.js +17 -6
  106. package/js/src/kraken.d.ts +2 -2
  107. package/js/src/kraken.js +31 -8
  108. package/js/src/krakenfutures.js +1 -0
  109. package/js/src/kucoin.js +1 -2
  110. package/js/src/luno.js +4 -1
  111. package/js/src/mercado.js +1 -0
  112. package/js/src/mexc.d.ts +4 -1
  113. package/js/src/mexc.js +84 -37
  114. package/js/src/novadax.js +1 -0
  115. package/js/src/oceanex.js +1 -0
  116. package/js/src/okcoin.js +4 -1
  117. package/js/src/okx.js +52 -8
  118. package/js/src/phemex.js +1 -1
  119. package/js/src/pro/apex.js +8 -4
  120. package/js/src/pro/backpack.d.ts +1 -1
  121. package/js/src/pro/backpack.js +7 -5
  122. package/js/src/pro/binance.d.ts +24 -0
  123. package/js/src/pro/binance.js +150 -19
  124. package/js/src/pro/bingx.d.ts +53 -33
  125. package/js/src/pro/bingx.js +207 -221
  126. package/js/src/pro/bitget.d.ts +6 -0
  127. package/js/src/pro/bitget.js +332 -76
  128. package/js/src/pro/cex.js +1 -0
  129. package/js/src/pro/htx.js +1 -1
  130. package/js/src/pro/independentreserve.js +1 -0
  131. package/js/src/pro/mexc.js +23 -23
  132. package/js/src/pro/okx.d.ts +7 -1
  133. package/js/src/pro/okx.js +46 -10
  134. package/js/src/pro/toobit.d.ts +174 -0
  135. package/js/src/pro/toobit.js +1162 -0
  136. package/js/src/toobit.d.ts +456 -0
  137. package/js/src/toobit.js +2992 -0
  138. package/js/src/upbit.js +1 -0
  139. package/js/src/wavesexchange.js +1 -0
  140. package/js/src/yobit.js +1 -0
  141. package/js/src/zaif.js +1 -0
  142. package/js/src/zonda.js +1 -0
  143. package/package.json +1 -1
  144. package/dist/373.ccxt.browser.js +0 -7630
  145. package/dist/373.ccxt.browser.min.js +0 -1
  146. package/js/src/abstract/tradeogre.d.ts +0 -21
  147. package/js/src/pro/tradeogre.d.ts +0 -49
  148. package/js/src/pro/tradeogre.js +0 -278
  149. package/js/src/tradeogre.d.ts +0 -149
  150. package/js/src/tradeogre.js +0 -872
  151. /package/js/src/abstract/{tradeogre.js → toobit.js} +0 -0
@@ -1023,6 +1023,7 @@ class cex extends cex$1["default"] {
1023
1023
  if (incrementalId !== storedOrderBook['nonce'] + 1) {
1024
1024
  delete client.subscriptions[messageHash];
1025
1025
  client.reject(this.id + ' watchOrderBook() skipped a message', messageHash);
1026
+ return;
1026
1027
  }
1027
1028
  const timestamp = this.safeInteger(data, 'time');
1028
1029
  const asks = this.safeValue(data, 'asks', []);
@@ -969,7 +969,7 @@ class htx extends htx$1["default"] {
969
969
  else {
970
970
  // contract branch
971
971
  parsedOrder = this.parseWsOrder(message, market);
972
- const rawTrades = this.safeValue(message, 'trade', []);
972
+ const rawTrades = this.safeList(message, 'trade', []);
973
973
  const tradesLength = rawTrades.length;
974
974
  if (tradesLength > 0) {
975
975
  const tradesObject = {
@@ -225,6 +225,7 @@ class independentreserve extends independentreserve$1["default"] {
225
225
  delete client.subscriptions[messageHash];
226
226
  delete this.orderbooks[symbol];
227
227
  client.reject(error, messageHash);
228
+ return;
228
229
  }
229
230
  }
230
231
  if (receivedSnapshot) {
@@ -883,6 +883,7 @@ class mexc extends mexc$1["default"] {
883
883
  catch (e) {
884
884
  delete client.subscriptions[messageHash];
885
885
  client.reject(e, messageHash);
886
+ return;
886
887
  }
887
888
  client.resolve(storedOrderBook, messageHash);
888
889
  }
@@ -1503,18 +1504,21 @@ class mexc extends mexc$1["default"] {
1503
1504
  handleBalance(client, message) {
1504
1505
  //
1505
1506
  // spot
1507
+ //
1506
1508
  // {
1507
- // "c": "spot@private.account.v3.api",
1508
- // "d": {
1509
- // "a": "USDT",
1510
- // "c": 1678185928428,
1511
- // "f": "302.185113007893322435",
1512
- // "fd": "-4.990689704",
1513
- // "l": "4.990689704",
1514
- // "ld": "4.990689704",
1515
- // "o": "ENTRUST_PLACE"
1516
- // },
1517
- // "t": 1678185928435
1509
+ // channel: "spot@private.account.v3.api.pb",
1510
+ // createTime: "1758134605364",
1511
+ // sendTime: "1758134605373",
1512
+ // privateAccount: {
1513
+ // vcoinName: "USDT",
1514
+ // coinId: "128f589271cb4951b03e71e6323eb7be",
1515
+ // balanceAmount: "0.006016465074677006",
1516
+ // balanceAmountChange: "-4.4022",
1517
+ // frozenAmount: "4.4022",
1518
+ // frozenAmountChange: "4.4022",
1519
+ // type: "ENTRUST_PLACE",
1520
+ // time: "1758134605364",
1521
+ // }
1518
1522
  // }
1519
1523
  //
1520
1524
  //
@@ -1532,27 +1536,23 @@ class mexc extends mexc$1["default"] {
1532
1536
  // "ts": 1680059188190
1533
1537
  // }
1534
1538
  //
1535
- const c = this.safeString(message, 'c'); // do not add 'channel' here, this is especially for spot
1536
- const type = (c === undefined) ? 'swap' : 'spot';
1539
+ const channel = this.safeString(message, 'channel');
1540
+ const type = (channel === 'spot@private.account.v3.api.pb') ? 'spot' : 'swap';
1537
1541
  const messageHash = 'balance:' + type;
1538
- const data = this.safeDictN(message, ['d', 'data', 'privateAccount']);
1539
- const futuresTimestamp = this.safeInteger(message, 'ts');
1540
- const timestamp = this.safeInteger2(data, 'c', 'time', futuresTimestamp);
1542
+ const data = this.safeDictN(message, ['data', 'privateAccount']);
1543
+ const futuresTimestamp = this.safeInteger2(message, 'ts', 'createTime');
1544
+ const timestamp = this.safeInteger2(data, 'time', futuresTimestamp);
1541
1545
  if (!(type in this.balance)) {
1542
1546
  this.balance[type] = {};
1543
1547
  }
1544
1548
  this.balance[type]['info'] = data;
1545
1549
  this.balance[type]['timestamp'] = timestamp;
1546
1550
  this.balance[type]['datetime'] = this.iso8601(timestamp);
1547
- const currencyId = this.safeStringN(data, ['a', 'currency', 'vcoinName']);
1551
+ const currencyId = this.safeStringN(data, ['currency', 'vcoinName']);
1548
1552
  const code = this.safeCurrencyCode(currencyId);
1549
1553
  const account = this.account();
1550
- const balanceAmount = this.safeString(data, 'balanceAmount');
1551
- if (balanceAmount !== undefined) {
1552
- account['free'] = balanceAmount;
1553
- }
1554
- account['total'] = this.safeStringN(data, ['f', 'availableBalance']);
1555
- account['used'] = this.safeStringN(data, ['l', 'frozenBalance', 'frozenAmount']);
1554
+ account['free'] = this.safeString2(data, 'balanceAmount', 'availableBalance');
1555
+ account['used'] = this.safeStringN(data, ['frozenBalance', 'frozenAmount']);
1556
1556
  this.balance[type][code] = account;
1557
1557
  this.balance[type] = this.safeBalance(this.balance[type]);
1558
1558
  client.resolve(this.balance[type], messageHash);
@@ -169,6 +169,8 @@ class okx extends okx$1["default"] {
169
169
  /**
170
170
  * @method
171
171
  * @name okx#watchTrades
172
+ * @see https://www.okx.com/docs-v5/en/#order-book-trading-market-data-ws-trades-channel
173
+ * @see https://www.okx.com/docs-v5/en/#order-book-trading-market-data-ws-all-trades-channel
172
174
  * @description get the list of most recent trades for a particular symbol
173
175
  * @param {string} symbol unified symbol of the market to fetch trades for
174
176
  * @param {int} [since] timestamp in ms of the earliest trade to fetch
@@ -182,11 +184,14 @@ class okx extends okx$1["default"] {
182
184
  /**
183
185
  * @method
184
186
  * @name okx#watchTradesForSymbols
187
+ * @see https://www.okx.com/docs-v5/en/#order-book-trading-market-data-ws-trades-channel
188
+ * @see https://www.okx.com/docs-v5/en/#order-book-trading-market-data-ws-all-trades-channel
185
189
  * @description get the list of most recent trades for a particular symbol
186
190
  * @param {string} symbols
187
191
  * @param {int} [since] timestamp in ms of the earliest trade to fetch
188
192
  * @param {int} [limit] the maximum amount of trades to fetch
189
193
  * @param {object} [params] extra parameters specific to the exchange API endpoint
194
+ * @param {string} [params.channel] the channel to subscribe to, trades by default. Can be 'trades' and 'trades-all'
190
195
  * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
191
196
  */
192
197
  async watchTradesForSymbols(symbols, since = undefined, limit = undefined, params = {}) {
@@ -196,7 +201,8 @@ class okx extends okx$1["default"] {
196
201
  }
197
202
  await this.loadMarkets();
198
203
  symbols = this.marketSymbols(symbols);
199
- const channel = 'trades';
204
+ let channel = undefined;
205
+ [channel, params] = this.handleOptionAndParams(params, 'watchTrades', 'channel', 'trades');
200
206
  const topics = [];
201
207
  const messageHashes = [];
202
208
  for (let i = 0; i < symbols.length; i++) {
@@ -213,7 +219,12 @@ class okx extends okx$1["default"] {
213
219
  'op': 'subscribe',
214
220
  'args': topics,
215
221
  };
216
- const url = this.getUrl(channel, 'public');
222
+ let access = 'public';
223
+ if (channel === 'trades-all') {
224
+ access = 'business';
225
+ await this.authenticate({ 'access': access });
226
+ }
227
+ const url = this.getUrl(channel, access);
217
228
  const trades = await this.watchMultiple(url, messageHashes, request, messageHashes);
218
229
  if (this.newUpdates) {
219
230
  const first = this.safeValue(trades, 0);
@@ -228,17 +239,19 @@ class okx extends okx$1["default"] {
228
239
  * @description unWatches from the stream channel
229
240
  * @param {string[]} symbols
230
241
  * @param {object} [params] extra parameters specific to the exchange API endpoint
242
+ * @param {string} [params.channel] the channel to subscribe to, trades by default. Can be trades, trades-all
231
243
  * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
232
244
  */
233
245
  async unWatchTradesForSymbols(symbols, params = {}) {
234
246
  await this.loadMarkets();
235
247
  symbols = this.marketSymbols(symbols, undefined, false);
236
- const channel = 'trades';
248
+ let channel = undefined;
249
+ [channel, params] = this.handleOptionAndParams(params, 'watchTrades', 'channel', 'trades');
237
250
  const topics = [];
238
251
  const messageHashes = [];
239
252
  for (let i = 0; i < symbols.length; i++) {
240
253
  const symbol = symbols[i];
241
- messageHashes.push('unsubscribe:trades:' + symbol);
254
+ messageHashes.push('unsubscribe:' + channel + symbol);
242
255
  const marketId = this.marketId(symbol);
243
256
  const topic = {
244
257
  'channel': channel,
@@ -250,7 +263,12 @@ class okx extends okx$1["default"] {
250
263
  'op': 'unsubscribe',
251
264
  'args': topics,
252
265
  };
253
- const url = this.getUrl(channel, 'public');
266
+ let access = 'public';
267
+ if (channel === 'trades-all') {
268
+ access = 'business';
269
+ await this.authenticate({ 'access': access });
270
+ }
271
+ const url = this.getUrl(channel, access);
254
272
  return await this.watchMultiple(url, messageHashes, request, messageHashes);
255
273
  }
256
274
  /**
@@ -279,6 +297,23 @@ class okx extends okx$1["default"] {
279
297
  // }
280
298
  // ]
281
299
  // }
300
+ // {
301
+ // "arg": {
302
+ // "channel": "trades-all",
303
+ // "instId": "BTC-USDT"
304
+ // },
305
+ // "data": [
306
+ // {
307
+ // "instId": "BTC-USDT",
308
+ // "tradeId": "130639474",
309
+ // "px": "42219.9",
310
+ // "sz": "0.12060306",
311
+ // "side": "buy",
312
+ // "source": "0",
313
+ // "ts": "1630048897897"
314
+ // }
315
+ // ]
316
+ // }
282
317
  //
283
318
  const arg = this.safeValue(message, 'arg', {});
284
319
  const channel = this.safeString(arg, 'channel');
@@ -2392,6 +2427,7 @@ class okx extends okx$1["default"] {
2392
2427
  'sprd-tickers': this.handleTicker,
2393
2428
  'block-tickers': this.handleTicker,
2394
2429
  'trades': this.handleTrades,
2430
+ 'trades-all': this.handleTrades,
2395
2431
  'account': this.handleBalance,
2396
2432
  'funding-rate': this.handleFundingRate,
2397
2433
  // 'margin_account': this.handleBalance,
@@ -2411,9 +2447,9 @@ class okx extends okx$1["default"] {
2411
2447
  }
2412
2448
  }
2413
2449
  }
2414
- handleUnSubscriptionTrades(client, symbol) {
2415
- const subMessageHash = 'trades:' + symbol;
2416
- const messageHash = 'unsubscribe:trades:' + symbol;
2450
+ handleUnSubscriptionTrades(client, symbol, channel) {
2451
+ const subMessageHash = channel + ':' + symbol;
2452
+ const messageHash = 'unsubscribe:' + subMessageHash;
2417
2453
  this.cleanUnsubscription(client, subMessageHash, messageHash);
2418
2454
  if (symbol in this.trades) {
2419
2455
  delete this.trades[symbol];
@@ -2460,8 +2496,8 @@ class okx extends okx$1["default"] {
2460
2496
  const channel = this.safeString(arg, 'channel', '');
2461
2497
  const marketId = this.safeString(arg, 'instId');
2462
2498
  const symbol = this.safeSymbol(marketId);
2463
- if (channel === 'trades') {
2464
- this.handleUnSubscriptionTrades(client, symbol);
2499
+ if (channel === 'trades' || channel === 'trades-all') {
2500
+ this.handleUnSubscriptionTrades(client, symbol, channel);
2465
2501
  }
2466
2502
  else if (channel.startsWith('bbo') || channel.startsWith('book')) {
2467
2503
  this.handleUnsubscriptionOrderBook(client, symbol, channel);