ccxt 4.4.91 → 4.4.93

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 (64) hide show
  1. package/README.md +3 -3
  2. package/dist/ccxt.browser.min.js +2 -2
  3. package/dist/cjs/ccxt.js +1 -1
  4. package/dist/cjs/src/ascendex.js +9 -8
  5. package/dist/cjs/src/base/Exchange.js +81 -33
  6. package/dist/cjs/src/binance.js +44 -1
  7. package/dist/cjs/src/bitmart.js +7 -0
  8. package/dist/cjs/src/bitmex.js +4 -4
  9. package/dist/cjs/src/bitvavo.js +10 -1
  10. package/dist/cjs/src/bybit.js +83 -8
  11. package/dist/cjs/src/coinbaseexchange.js +53 -0
  12. package/dist/cjs/src/coincheck.js +47 -4
  13. package/dist/cjs/src/coinex.js +19 -14
  14. package/dist/cjs/src/cryptomus.js +30 -53
  15. package/dist/cjs/src/deribit.js +6 -6
  16. package/dist/cjs/src/exmo.js +72 -59
  17. package/dist/cjs/src/htx.js +1 -1
  18. package/dist/cjs/src/hyperliquid.js +3 -2
  19. package/dist/cjs/src/krakenfutures.js +1 -1
  20. package/dist/cjs/src/kucoin.js +13 -15
  21. package/dist/cjs/src/latoken.js +19 -74
  22. package/dist/cjs/src/lbank.js +118 -34
  23. package/dist/cjs/src/okx.js +158 -2
  24. package/dist/cjs/src/paradex.js +54 -0
  25. package/dist/cjs/src/phemex.js +3 -3
  26. package/dist/cjs/src/pro/bitstamp.js +55 -16
  27. package/dist/cjs/src/pro/bybit.js +6 -7
  28. package/js/ccxt.d.ts +1 -1
  29. package/js/ccxt.js +1 -1
  30. package/js/src/abstract/lbank.d.ts +1 -0
  31. package/js/src/ascendex.js +9 -8
  32. package/js/src/base/Exchange.d.ts +5 -1
  33. package/js/src/base/Exchange.js +81 -33
  34. package/js/src/binance.d.ts +10 -0
  35. package/js/src/binance.js +44 -1
  36. package/js/src/bitmart.d.ts +7 -0
  37. package/js/src/bitmart.js +7 -0
  38. package/js/src/bitmex.d.ts +1 -1
  39. package/js/src/bitmex.js +4 -4
  40. package/js/src/bitvavo.js +10 -1
  41. package/js/src/bybit.d.ts +12 -1
  42. package/js/src/bybit.js +83 -8
  43. package/js/src/coinbaseexchange.js +53 -0
  44. package/js/src/coincheck.js +48 -5
  45. package/js/src/coinex.js +16 -13
  46. package/js/src/cryptomus.js +30 -53
  47. package/js/src/deribit.js +6 -6
  48. package/js/src/exmo.js +72 -59
  49. package/js/src/htx.js +1 -1
  50. package/js/src/hyperliquid.js +3 -2
  51. package/js/src/krakenfutures.js +1 -1
  52. package/js/src/kucoin.js +13 -15
  53. package/js/src/latoken.d.ts +0 -1
  54. package/js/src/latoken.js +19 -74
  55. package/js/src/lbank.d.ts +9 -1
  56. package/js/src/lbank.js +118 -34
  57. package/js/src/okx.d.ts +13 -1
  58. package/js/src/okx.js +158 -2
  59. package/js/src/paradex.d.ts +10 -0
  60. package/js/src/paradex.js +54 -0
  61. package/js/src/phemex.js +3 -3
  62. package/js/src/pro/bitstamp.js +55 -16
  63. package/js/src/pro/bybit.js +7 -8
  64. package/package.json +1 -1
@@ -8,6 +8,7 @@
8
8
  import bitstampRest from '../bitstamp.js';
9
9
  import { ArgumentsRequired, AuthenticationError } from '../base/errors.js';
10
10
  import { ArrayCache, ArrayCacheBySymbolById } from '../base/ws/Cache.js';
11
+ import { Precise } from '../base/Precise.js';
11
12
  // ---------------------------------------------------------------------------
12
13
  export default class bitstamp extends bitstampRest {
13
14
  describe() {
@@ -309,6 +310,7 @@ export default class bitstamp extends bitstampRest {
309
310
  // "price_str":"1000.00"
310
311
  // },
311
312
  // "channel":"private-my_orders_ltcusd-4848701",
313
+ // "event": "order_deleted" // field only present for cancelOrder
312
314
  // }
313
315
  //
314
316
  const channel = this.safeString(message, 'channel');
@@ -321,29 +323,65 @@ export default class bitstamp extends bitstampRest {
321
323
  const subscription = this.safeValue(client.subscriptions, channel);
322
324
  const symbol = this.safeString(subscription, 'symbol');
323
325
  const market = this.market(symbol);
326
+ order['event'] = this.safeString(message, 'event');
324
327
  const parsed = this.parseWsOrder(order, market);
325
328
  stored.append(parsed);
326
329
  client.resolve(this.orders, channel);
327
330
  }
328
331
  parseWsOrder(order, market = undefined) {
329
332
  //
330
- // {
331
- // "id":"1463471322288128",
332
- // "id_str":"1463471322288128",
333
- // "order_type":1,
334
- // "datetime":"1646127778",
335
- // "microtimestamp":"1646127777950000",
336
- // "amount":0.05,
337
- // "amount_str":"0.05000000",
338
- // "price":1000,
339
- // "price_str":"1000.00"
333
+ // {
334
+ // "id": "1894876776091648",
335
+ // "id_str": "1894876776091648",
336
+ // "order_type": 0,
337
+ // "order_subtype": 0,
338
+ // "datetime": "1751451375",
339
+ // "microtimestamp": "1751451375070000",
340
+ // "amount": 1.1,
341
+ // "amount_str": "1.10000000",
342
+ // "amount_traded": "0",
343
+ // "amount_at_create": "1.10000000",
344
+ // "price": 10.23,
345
+ // "price_str": "10.23",
346
+ // "is_liquidation": false,
347
+ // "trade_account_id": 0
340
348
  // }
341
349
  //
342
350
  const id = this.safeString(order, 'id_str');
343
- const orderType = this.safeStringLower(order, 'order_type');
351
+ const orderTypeRaw = this.safeStringLower(order, 'order_type');
352
+ const side = (orderTypeRaw === '1') ? 'sell' : 'buy';
353
+ const orderSubTypeRaw = this.safeStringLower(order, 'order_subtype'); // https://www.bitstamp.net/websocket/v2/#:~:text=order_subtype
354
+ let orderType = undefined;
355
+ let timeInForce = undefined;
356
+ if (orderSubTypeRaw === '0') {
357
+ orderType = 'limit';
358
+ }
359
+ else if (orderSubTypeRaw === '2') {
360
+ orderType = 'market';
361
+ }
362
+ else if (orderSubTypeRaw === '4') {
363
+ orderType = 'limit';
364
+ timeInForce = 'IOC';
365
+ }
366
+ else if (orderSubTypeRaw === '6') {
367
+ orderType = 'limit';
368
+ timeInForce = 'FOK';
369
+ }
370
+ else if (orderSubTypeRaw === '8') {
371
+ orderType = 'limit';
372
+ timeInForce = 'GTD';
373
+ }
344
374
  const price = this.safeString(order, 'price_str');
345
375
  const amount = this.safeString(order, 'amount_str');
346
- const side = (orderType === '1') ? 'sell' : 'buy';
376
+ const filled = this.safeString(order, 'amount_traded');
377
+ const event = this.safeString(order, 'event');
378
+ let status = undefined;
379
+ if (Precise.stringEq(filled, amount)) {
380
+ status = 'closed';
381
+ }
382
+ else if (event === 'order_deleted') {
383
+ status = 'canceled';
384
+ }
347
385
  const timestamp = this.safeTimestamp(order, 'datetime');
348
386
  market = this.safeMarket(undefined, market);
349
387
  const symbol = market['symbol'];
@@ -355,8 +393,8 @@ export default class bitstamp extends bitstampRest {
355
393
  'timestamp': timestamp,
356
394
  'datetime': this.iso8601(timestamp),
357
395
  'lastTradeTimestamp': undefined,
358
- 'type': undefined,
359
- 'timeInForce': undefined,
396
+ 'type': orderType,
397
+ 'timeInForce': timeInForce,
360
398
  'postOnly': undefined,
361
399
  'side': side,
362
400
  'price': price,
@@ -365,9 +403,9 @@ export default class bitstamp extends bitstampRest {
365
403
  'amount': amount,
366
404
  'cost': undefined,
367
405
  'average': undefined,
368
- 'filled': undefined,
406
+ 'filled': filled,
369
407
  'remaining': undefined,
370
- 'status': undefined,
408
+ 'status': status,
371
409
  'fee': undefined,
372
410
  'trades': undefined,
373
411
  }, market);
@@ -432,6 +470,7 @@ export default class bitstamp extends bitstampRest {
432
470
  // "price_str":"1000.00"
433
471
  // },
434
472
  // "channel":"private-my_orders_ltcusd-4848701",
473
+ // "event": "order_deleted" // field only present for cancelOrder
435
474
  // }
436
475
  //
437
476
  const channel = this.safeString(message, 'channel');
@@ -6,7 +6,7 @@
6
6
 
7
7
  // ---------------------------------------------------------------------------
8
8
  import bybitRest from '../bybit.js';
9
- import { ArgumentsRequired, AuthenticationError, ExchangeError, BadRequest } from '../base/errors.js';
9
+ import { ArgumentsRequired, AuthenticationError, ExchangeError, BadRequest, NotSupported } from '../base/errors.js';
10
10
  import { ArrayCache, ArrayCacheBySymbolById, ArrayCacheBySymbolBySide, ArrayCacheByTimestamp } from '../base/ws/Cache.js';
11
11
  import { sha256 } from '../static_dependencies/noble-hashes/sha256.js';
12
12
  // ---------------------------------------------------------------------------
@@ -1282,11 +1282,10 @@ export default class bybit extends bybitRest {
1282
1282
  async unWatchMyTrades(symbol = undefined, params = {}) {
1283
1283
  const method = 'watchMyTrades';
1284
1284
  const messageHash = 'unsubscribe:myTrades';
1285
- let subHash = 'myTrades';
1285
+ const subHash = 'myTrades';
1286
1286
  await this.loadMarkets();
1287
1287
  if (symbol !== undefined) {
1288
- symbol = this.symbol(symbol);
1289
- subHash += ':' + symbol;
1288
+ throw new NotSupported(this.id + ' unWatchMyTrades() does not support a symbol parameter, you must unwatch all my trades');
1290
1289
  }
1291
1290
  const url = await this.getUrlByMarketType(symbol, true, method, params);
1292
1291
  await this.authenticate(url);
@@ -1731,10 +1730,9 @@ export default class bybit extends bybitRest {
1731
1730
  await this.loadMarkets();
1732
1731
  const method = 'watchOrders';
1733
1732
  const messageHash = 'unsubscribe:orders';
1734
- let subHash = 'orders';
1733
+ const subHash = 'orders';
1735
1734
  if (symbol !== undefined) {
1736
- symbol = this.symbol(symbol);
1737
- subHash += ':' + symbol;
1735
+ throw new NotSupported(this.id + ' unWatchOrders() does not support a symbol parameter, you must unwatch all orders');
1738
1736
  }
1739
1737
  const url = await this.getUrlByMarketType(symbol, true, method, params);
1740
1738
  await this.authenticate(url);
@@ -2483,7 +2481,8 @@ export default class bybit extends bybitRest {
2483
2481
  for (let j = 0; j < messageHashes.length; j++) {
2484
2482
  const unsubHash = messageHashes[j];
2485
2483
  const subHash = subMessageHashes[j];
2486
- this.cleanUnsubscription(client, subHash, unsubHash);
2484
+ const usePrefix = (subHash === 'orders') || (subHash === 'myTrades');
2485
+ this.cleanUnsubscription(client, subHash, unsubHash, usePrefix);
2487
2486
  }
2488
2487
  this.cleanCache(subscription);
2489
2488
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ccxt",
3
- "version": "4.4.91",
3
+ "version": "4.4.93",
4
4
  "description": "A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 100+ exchanges",
5
5
  "unpkg": "dist/ccxt.browser.min.js",
6
6
  "type": "module",