ccxt 4.5.48 → 4.5.50

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 (60) hide show
  1. package/README.md +7 -5
  2. package/dist/ccxt.browser.min.js +10 -10
  3. package/dist/cjs/ccxt.js +6 -1
  4. package/dist/cjs/src/abstract/weex.js +11 -0
  5. package/dist/cjs/src/base/Exchange.js +48 -13
  6. package/dist/cjs/src/bitget.js +1 -0
  7. package/dist/cjs/src/btcbox.js +1 -1
  8. package/dist/cjs/src/bullish.js +2 -1
  9. package/dist/cjs/src/gate.js +0 -1
  10. package/dist/cjs/src/hibachi.js +1 -1
  11. package/dist/cjs/src/kraken.js +1 -0
  12. package/dist/cjs/src/krakenfutures.js +10 -1
  13. package/dist/cjs/src/kucoin.js +5 -1
  14. package/dist/cjs/src/lighter.js +312 -144
  15. package/dist/cjs/src/mexc.js +7 -12
  16. package/dist/cjs/src/okx.js +46 -1
  17. package/dist/cjs/src/paradex.js +5 -2
  18. package/dist/cjs/src/pro/binance.js +1 -1
  19. package/dist/cjs/src/pro/cex.js +1 -1
  20. package/dist/cjs/src/pro/coinbase.js +1 -1
  21. package/dist/cjs/src/pro/hyperliquid.js +361 -1
  22. package/dist/cjs/src/pro/lighter.js +339 -18
  23. package/dist/cjs/src/pro/weex.js +1906 -0
  24. package/dist/cjs/src/weex.js +3823 -0
  25. package/js/ccxt.d.ts +8 -2
  26. package/js/ccxt.js +6 -2
  27. package/js/src/abstract/myokx.d.ts +34 -0
  28. package/js/src/abstract/okx.d.ts +34 -0
  29. package/js/src/abstract/okxus.d.ts +34 -0
  30. package/js/src/abstract/weex.d.ts +83 -0
  31. package/js/src/abstract/weex.js +11 -0
  32. package/js/src/base/Exchange.d.ts +5 -1
  33. package/js/src/base/Exchange.js +48 -13
  34. package/js/src/bitget.js +1 -0
  35. package/js/src/btcbox.js +1 -1
  36. package/js/src/bullish.js +2 -1
  37. package/js/src/gate.js +0 -1
  38. package/js/src/hibachi.js +1 -1
  39. package/js/src/kraken.js +1 -0
  40. package/js/src/krakenfutures.js +10 -1
  41. package/js/src/kucoin.d.ts +4 -0
  42. package/js/src/kucoin.js +5 -1
  43. package/js/src/lighter.d.ts +12 -2
  44. package/js/src/lighter.js +313 -145
  45. package/js/src/mexc.d.ts +2 -0
  46. package/js/src/mexc.js +7 -12
  47. package/js/src/okx.js +46 -1
  48. package/js/src/paradex.js +5 -2
  49. package/js/src/pro/binance.js +1 -1
  50. package/js/src/pro/cex.js +1 -1
  51. package/js/src/pro/coinbase.js +1 -1
  52. package/js/src/pro/hyperliquid.d.ts +48 -1
  53. package/js/src/pro/hyperliquid.js +362 -2
  54. package/js/src/pro/lighter.d.ts +37 -2
  55. package/js/src/pro/lighter.js +339 -18
  56. package/js/src/pro/weex.d.ts +330 -0
  57. package/js/src/pro/weex.js +1905 -0
  58. package/js/src/weex.d.ts +675 -0
  59. package/js/src/weex.js +3822 -0
  60. package/package.json +1 -1
@@ -23,14 +23,14 @@ export default class lighter extends lighterRest {
23
23
  'watchTrades': true,
24
24
  'watchTradesForSymbols': false,
25
25
  'watchOrderBookForSymbols': false,
26
- 'watchBalance': false,
26
+ 'watchBalance': true,
27
27
  'watchLiquidations': true,
28
28
  'watchLiquidationsForSymbols': false,
29
29
  'watchMyLiquidations': false,
30
30
  'watchMyLiquidationsForSymbols': false,
31
31
  'watchOHLCV': false,
32
32
  'watchOHLCVForSymbols': false,
33
- 'watchOrders': false,
33
+ 'watchOrders': true,
34
34
  'watchMyTrades': true,
35
35
  'watchPositions': false,
36
36
  'watchFundingRate': false,
@@ -42,6 +42,7 @@ export default class lighter extends lighterRest {
42
42
  'unWatchMyTrades': true,
43
43
  'unWatchMarkPrice': true,
44
44
  'unWatchMarkPrices': true,
45
+ 'unWatchOrders': true,
45
46
  },
46
47
  'urls': {
47
48
  'api': {
@@ -89,7 +90,7 @@ export default class lighter extends lighterRest {
89
90
  };
90
91
  return await this.watchMultiple(url, messageHashes, this.extend(request, params), messageHashes, subscription);
91
92
  }
92
- async unsubscribePublic(messageHash, params = {}) {
93
+ async unsubscribe(messageHash, params = {}) {
93
94
  const url = this.urls['api']['ws'];
94
95
  const request = {
95
96
  'type': 'unsubscribe',
@@ -100,6 +101,11 @@ export default class lighter extends lighterRest {
100
101
  };
101
102
  return await this.watch(url, messageHash, this.extend(request, params), messageHash, subscription);
102
103
  }
104
+ async subscribePrivate(messageHash, params = {}) {
105
+ await this.preLoadLighterLibrary();
106
+ params['auth'] = this.createAuth(params);
107
+ return await this.subscribePublic(messageHash, params);
108
+ }
103
109
  handleDelta(bookside, delta) {
104
110
  const price = this.safeFloat(delta, 'price');
105
111
  const amount = this.safeFloat(delta, 'size');
@@ -205,7 +211,7 @@ export default class lighter extends lighterRest {
205
211
  'channel': 'order_book/' + market['id'],
206
212
  };
207
213
  const messageHash = this.getMessageHash('unsubscribe', symbol);
208
- return await this.unsubscribePublic(messageHash, this.extend(request, params));
214
+ return await this.unsubscribe(messageHash, this.extend(request, params));
209
215
  }
210
216
  handleTicker(client, message) {
211
217
  //
@@ -316,7 +322,7 @@ export default class lighter extends lighterRest {
316
322
  'channel': 'market_stats/' + market['id'],
317
323
  };
318
324
  const messageHash = this.getMessageHash('unsubscribe', symbol);
319
- return await this.unsubscribePublic(messageHash, this.extend(request, params));
325
+ return await this.unsubscribe(messageHash, this.extend(request, params));
320
326
  }
321
327
  /**
322
328
  * @method
@@ -371,7 +377,7 @@ export default class lighter extends lighterRest {
371
377
  'channel': 'market_stats/all',
372
378
  };
373
379
  const messageHash = this.getMessageHash('unsubscribe');
374
- return await this.unsubscribePublic(messageHash, this.extend(request, params));
380
+ return await this.unsubscribe(messageHash, this.extend(request, params));
375
381
  }
376
382
  /**
377
383
  * @method
@@ -455,10 +461,7 @@ export default class lighter extends lighterRest {
455
461
  const priceString = this.safeString(trade, 'price');
456
462
  const amountString = this.safeString(trade, 'size');
457
463
  const isMakerAsk = this.safeBool(trade, 'is_maker_ask');
458
- const side = (isMakerAsk === true) ? 'sell' : 'buy';
459
- const makerFeeRate = this.safeString(market, 'maker_fee');
460
- const maker = Precise.stringDiv(makerFeeRate, '100');
461
- const feeAmount = Precise.stringMul(maker, makerFeeRate);
464
+ const side = isMakerAsk ? 'buy' : 'sell';
462
465
  return this.safeTrade({
463
466
  'info': trade,
464
467
  'id': tradeId,
@@ -468,14 +471,11 @@ export default class lighter extends lighterRest {
468
471
  'symbol': this.safeSymbol(undefined, market),
469
472
  'type': undefined,
470
473
  'side': side,
471
- 'takerOrMaker': 'maker',
474
+ 'takerOrMaker': 'taker',
472
475
  'price': priceString,
473
476
  'amount': amountString,
474
477
  'cost': this.safeString(trade, 'usd_amount'),
475
- 'fee': {
476
- 'cost': feeAmount,
477
- 'currency': 'USDC',
478
- },
478
+ 'fee': undefined,
479
479
  }, market);
480
480
  }
481
481
  handleTrades(client, message) {
@@ -578,7 +578,83 @@ export default class lighter extends lighterRest {
578
578
  'channel': 'trade/' + market['id'],
579
579
  };
580
580
  const messageHash = this.getMessageHash('unsubscribe', symbol);
581
- return await this.unsubscribePublic(messageHash, this.extend(request, params));
581
+ return await this.unsubscribe(messageHash, this.extend(request, params));
582
+ }
583
+ parseWsOrderTrade(trade, market = undefined) {
584
+ //
585
+ // {
586
+ // "trade_id": 526801155,
587
+ // "tx_hash": "1998d9df580acb7540aa141cc369d6ef926d003b3062196d2007bca15f978ab208e0caae4ac5872b",
588
+ // "type": "trade",
589
+ // "market_id": 0,
590
+ // "size": "0.0346",
591
+ // "price": "3028.85",
592
+ // "usd_amount": "104.798210",
593
+ // "ask_id": 281475673670566,
594
+ // "bid_id": 562949291740362,
595
+ // "ask_client_id": 76303170,
596
+ // "bid_client_id": 27601,
597
+ // "ask_account_id": 99349,
598
+ // "bid_account_id": 243008,
599
+ // "is_maker_ask": false,
600
+ // "block_height": 102322769,
601
+ // "timestamp": 1763623734215,
602
+ // "taker_position_size_before": "0.0346",
603
+ // "taker_entry_quote_before": "104.359926",
604
+ // "taker_initial_margin_fraction_before": 500,
605
+ // "taker_position_sign_changed": true,
606
+ // "maker_fee": 20,
607
+ // "maker_position_size_before": "2.1277",
608
+ // "maker_entry_quote_before": "6444.179555",
609
+ // "maker_initial_margin_fraction_before": 200
610
+ // }
611
+ //
612
+ const timestamp = this.safeInteger(trade, 'timestamp');
613
+ const tradeId = this.safeString(trade, 'trade_id');
614
+ const priceString = this.safeString(trade, 'price');
615
+ const amountString = this.safeString(trade, 'size');
616
+ const costString = this.safeString(trade, 'usd_amount');
617
+ const isMakerAsk = this.safeBool(trade, 'is_maker_ask');
618
+ const side = isMakerAsk ? 'buy' : 'sell';
619
+ const accountIndex = this.safeInteger(trade, 'accountIndex');
620
+ let order = undefined;
621
+ let takerOrMaker = undefined;
622
+ if (accountIndex !== undefined) {
623
+ if (this.safeInteger(trade, 'bid_account_id') === accountIndex) {
624
+ order = this.safeString(trade, 'bid_id');
625
+ takerOrMaker = isMakerAsk ? 'taker' : 'maker';
626
+ }
627
+ else if (this.safeInteger(trade, 'ask_account_id') === accountIndex) {
628
+ order = this.safeString(trade, 'ask_id');
629
+ takerOrMaker = isMakerAsk ? 'maker' : 'taker';
630
+ }
631
+ }
632
+ let fee = undefined;
633
+ if (takerOrMaker !== undefined) {
634
+ const feeRateRaw = (takerOrMaker === 'maker') ? this.safeString(trade, 'maker_fee') : this.safeString(trade, 'taker_fee');
635
+ const feeRate = (feeRateRaw !== undefined) ? Precise.stringDiv(feeRateRaw, '1000000') : '0';
636
+ const feeAmount = Precise.stringMul(costString, feeRate);
637
+ fee = {
638
+ 'cost': feeAmount,
639
+ 'currency': 'USDC',
640
+ 'rate': feeRate,
641
+ };
642
+ }
643
+ return this.safeTrade({
644
+ 'info': trade,
645
+ 'id': tradeId,
646
+ 'order': order,
647
+ 'timestamp': timestamp,
648
+ 'datetime': this.iso8601(timestamp),
649
+ 'symbol': this.safeSymbol(undefined, market),
650
+ 'type': undefined,
651
+ 'side': side,
652
+ 'takerOrMaker': takerOrMaker,
653
+ 'price': priceString,
654
+ 'amount': amountString,
655
+ 'cost': costString,
656
+ 'fee': fee,
657
+ }, market);
582
658
  }
583
659
  handleMyTrades(client, message) {
584
660
  //
@@ -615,6 +691,9 @@ export default class lighter extends lighterRest {
615
691
  // "type": "update/account_all_trades"
616
692
  // }
617
693
  //
694
+ const channel = this.safeString(message, 'channel', '');
695
+ const parts = channel.split(':');
696
+ const accountIndex = parts[1];
618
697
  const data = this.safeDict(message, 'trades', {});
619
698
  const marketIds = Object.keys(data);
620
699
  const idsLength = marketIds.length;
@@ -634,7 +713,9 @@ export default class lighter extends lighterRest {
634
713
  const tradesLength = trades.length;
635
714
  for (let j = 0; j < tradesLength; j++) {
636
715
  const jReversed = tradesLength - 1 - j;
637
- const trade = this.parseWsTrade(trades[jReversed], market);
716
+ const tradeRaw = trades[jReversed];
717
+ tradeRaw['accountIndex'] = accountIndex;
718
+ const trade = this.parseWsOrderTrade(tradeRaw, market);
638
719
  stored.append(trade);
639
720
  const symbol = trade['symbol'];
640
721
  if (symbol !== undefined) {
@@ -698,7 +779,7 @@ export default class lighter extends lighterRest {
698
779
  const request = {
699
780
  'channel': 'account_all_trades/' + accountIndex,
700
781
  };
701
- return await this.unsubscribePublic(messageHash, this.extend(request, params));
782
+ return await this.unsubscribe(messageHash, this.extend(request, params));
702
783
  }
703
784
  parseWsLiquidation(liquidation, market = undefined) {
704
785
  //
@@ -828,6 +909,230 @@ export default class lighter extends lighterRest {
828
909
  const messageHash = this.getMessageHash('liquidations', symbol);
829
910
  return await this.subscribePublic(messageHash, this.extend(request, params));
830
911
  }
912
+ /**
913
+ * @method
914
+ * @name lighter#watchBalance
915
+ * @description watch balance and get the amount of funds available for trading or funds locked in orders
916
+ * @see https://apidocs.lighter.xyz/docs/websocket-reference#account-all-assets
917
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
918
+ * @param {string} [params.type] 'spot' or 'swap', default is 'swap'
919
+ * @returns {object} a [balance structure]{@link https://docs.ccxt.com/?id=balance-structure}
920
+ */
921
+ async watchBalance(params = {}) {
922
+ await this.loadMarkets();
923
+ const defaultType = this.safeString2(this.options, 'watchBalance', 'defaultType', 'spot');
924
+ let type = undefined;
925
+ [type, params] = this.handleParamString(params, 'type', defaultType);
926
+ let accountIndex = undefined;
927
+ [accountIndex, params] = await this.handleAccountIndex(params, 'watchBalance', 'accountIndex', 'account_index');
928
+ const messageHash = this.getMessageHash('balances', undefined, type);
929
+ const request = {};
930
+ if (type === 'spot') {
931
+ request['channel'] = 'account_all_assets/' + this.numberToString(accountIndex);
932
+ return await this.subscribePrivate(messageHash, this.extend(request, params));
933
+ }
934
+ else {
935
+ request['channel'] = 'user_stats/' + this.numberToString(accountIndex);
936
+ return await this.subscribePublic(messageHash, this.extend(request, params));
937
+ }
938
+ }
939
+ handleBalance(client, message) {
940
+ //
941
+ // spot balance
942
+ // {
943
+ // "assets": {
944
+ // "1": {
945
+ // "symbol": "ETH",
946
+ // "asset_id": 1,
947
+ // "balance": "7.1072",
948
+ // "locked_balance": "0.0000"
949
+ // },
950
+ // "3": {
951
+ // "symbol": "USDC",
952
+ // "asset_id": 3,
953
+ // "balance": "6343.581906",
954
+ // "locked_balance": "297.000000"
955
+ // }
956
+ // },
957
+ // "channel": "account_all_assets:1234",
958
+ // "timestamp": 1773158679717,
959
+ // "type": "update/account_all_assets"
960
+ // }
961
+ //
962
+ // swap balance
963
+ // {
964
+ // "channel": "user_stats:10",
965
+ // "stats": {
966
+ // "collateral": "5000.00",
967
+ // "portfolio_value": "15000.00",
968
+ // "leverage": "3.0",
969
+ // "available_balance": "2000.00",
970
+ // "margin_usage": "0.80",
971
+ // "buying_power": "4000.00",
972
+ // "account_trading_mode": 1,
973
+ // "cross_stats":{
974
+ // "collateral":"0.000000",
975
+ // "portfolio_value":"0.000000",
976
+ // "leverage":"0.00",
977
+ // "available_balance":"0.000000",
978
+ // "margin_usage":"0.00",
979
+ // "buying_power":"0"
980
+ // },
981
+ // "total_stats":{
982
+ // "collateral":"0.000000",
983
+ // "portfolio_value":"0.000000",
984
+ // "leverage":"0.00",
985
+ // "available_balance":"0.000000",
986
+ // "margin_usage":"0.00",
987
+ // "buying_power":"0"
988
+ // }
989
+ // },
990
+ // "timestamp": 1773158679717,
991
+ // "type": "update/user_stats"
992
+ // }
993
+ //
994
+ const channel = this.safeString(message, 'channel', '');
995
+ let type = 'spot';
996
+ if (channel.indexOf('user_stats:') >= 0) {
997
+ type = 'swap';
998
+ }
999
+ const balance = this.safeDict(this.balance, type, {});
1000
+ if (type === 'spot') {
1001
+ const assets = this.safeDict(message, 'assets', {});
1002
+ const assetIds = Object.keys(assets);
1003
+ for (let i = 0; i < assetIds.length; i++) {
1004
+ const assetId = assetIds[i];
1005
+ const asset = assets[assetId];
1006
+ const codeId = this.safeString(asset, 'symbol');
1007
+ const code = this.safeCurrencyCode(codeId);
1008
+ const account = this.account();
1009
+ account['used'] = this.safeString(asset, 'locked_balance');
1010
+ account['total'] = this.safeString(asset, 'balance');
1011
+ balance[code] = account;
1012
+ }
1013
+ }
1014
+ else {
1015
+ const stats = this.safeDict(message, 'stats', {});
1016
+ const account = this.account();
1017
+ account['free'] = this.safeString(stats, 'available_balance');
1018
+ account['total'] = this.safeString(stats, 'collateral');
1019
+ account['info'] = stats;
1020
+ balance['USDC'] = account;
1021
+ }
1022
+ const timestamp = this.safeInteger(message, 'timestamp');
1023
+ balance['timestamp'] = timestamp;
1024
+ balance['datetime'] = this.iso8601(timestamp);
1025
+ this.balance[type] = this.safeBalance(balance);
1026
+ const messageHash = this.getMessageHash('balances', undefined, type);
1027
+ client.resolve(this.balance[type], messageHash);
1028
+ return true;
1029
+ }
1030
+ /**
1031
+ * @name lighter#watchOrders
1032
+ * @description watches information on multiple orders made by the user
1033
+ * @see https://apidocs.lighter.xyz/docs/websocket-reference#account-all-orders
1034
+ * @param {string} symbol unified market symbol of the market orders were made in
1035
+ * @param {int} [since] the earliest time in ms to fetch orders for
1036
+ * @param {int} [limit] the maximum number of order structures to retrieve
1037
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1038
+ * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/?id=order-structure}
1039
+ */
1040
+ async watchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1041
+ await this.loadMarkets();
1042
+ let accountIndex = undefined;
1043
+ [accountIndex, params] = await this.handleAccountIndex(params, 'watchOrders', 'accountIndex', 'account_index');
1044
+ let messageHash = undefined;
1045
+ const request = {};
1046
+ if (symbol !== undefined) {
1047
+ const market = this.market(symbol);
1048
+ messageHash = this.getMessageHash('orders', market['symbol']);
1049
+ request['channel'] = 'account_orders/' + market['id'] + '/' + this.numberToString(accountIndex);
1050
+ }
1051
+ else {
1052
+ messageHash = this.getMessageHash('orders');
1053
+ request['channel'] = 'account_all_orders/' + this.numberToString(accountIndex);
1054
+ }
1055
+ const orders = await this.subscribePrivate(messageHash, this.extend(request, params));
1056
+ if (this.newUpdates) {
1057
+ limit = orders.getLimit(symbol, limit);
1058
+ }
1059
+ return this.filterBySymbolSinceLimit(orders, symbol, since, limit, true);
1060
+ }
1061
+ /**
1062
+ * @method
1063
+ * @name lighter#unWatchOrders
1064
+ * @description unWatches information on multiple orders made by the user
1065
+ * @see https://apidocs.lighter.xyz/docs/websocket-reference#account-all-orders
1066
+ * @param {string} symbol unified market symbol of the market orders were made in
1067
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1068
+ * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/?id=order-structure}
1069
+ */
1070
+ async unWatchOrders(symbol = undefined, params = {}) {
1071
+ await this.loadMarkets();
1072
+ let accountIndex = undefined;
1073
+ [accountIndex, params] = await this.handleAccountIndex(params, 'watchOrders', 'accountIndex', 'account_index');
1074
+ let messageHash = undefined;
1075
+ const request = {};
1076
+ if (symbol !== undefined) {
1077
+ const market = this.market(symbol);
1078
+ messageHash = this.getMessageHash('orders', market['symbol']);
1079
+ request['channel'] = 'account_orders/' + market['id'] + '/' + this.numberToString(accountIndex);
1080
+ }
1081
+ else {
1082
+ messageHash = this.getMessageHash('orders');
1083
+ request['channel'] = 'account_all_orders/' + this.numberToString(accountIndex);
1084
+ }
1085
+ return await this.unsubscribe(messageHash, this.extend(request, params));
1086
+ }
1087
+ handleOrders(client, message) {
1088
+ //
1089
+ // {
1090
+ // "account": {ACCOUNT_INDEX},
1091
+ // "channel": "account_orders:{MARKET_INDEX}",
1092
+ // "nonce": INTEGER,
1093
+ // "orders": {
1094
+ // "{MARKET_INDEX}": [Order] // the only present market index will be the one provided
1095
+ // },
1096
+ // "type": "update/account_orders"
1097
+ // }
1098
+ //
1099
+ // {
1100
+ // "channel": "account_all_orders:{ACCOUNT_ID}",
1101
+ // "orders": {
1102
+ // "{MARKET_INDEX}": [Order]
1103
+ // },
1104
+ // "type": "update/account_all_orders"
1105
+ // }
1106
+ //
1107
+ const data = this.safeDict(message, 'orders', {});
1108
+ const marketIds = Object.keys(data);
1109
+ const idsLength = marketIds.length;
1110
+ if (idsLength === 0) {
1111
+ return false; // nothing to process
1112
+ }
1113
+ if (this.orders === undefined) {
1114
+ const limit = this.safeInteger(this.options, 'ordersLimit', 1000);
1115
+ this.orders = new ArrayCache(limit);
1116
+ }
1117
+ const stored = this.orders;
1118
+ const messageHash = this.getMessageHash('orders');
1119
+ for (let i = 0; i < marketIds.length; i++) {
1120
+ const marketId = marketIds[i];
1121
+ const market = this.safeMarket(marketId);
1122
+ const orders = this.safeList(data, marketId, []);
1123
+ for (let j = 0; j < orders.length; j++) {
1124
+ const order = this.parseOrder(orders[j], market);
1125
+ stored.append(order);
1126
+ const symbol = order['symbol'];
1127
+ if (symbol !== undefined) {
1128
+ const symbolSpecificMessageHash = this.getMessageHash('orders', symbol);
1129
+ client.resolve(stored, symbolSpecificMessageHash);
1130
+ }
1131
+ }
1132
+ }
1133
+ client.resolve(stored, messageHash);
1134
+ return true;
1135
+ }
831
1136
  handleErrorMessage(client, message) {
832
1137
  //
833
1138
  // {
@@ -878,6 +1183,22 @@ export default class lighter extends lighterRest {
878
1183
  this.handleMyTrades(client, message);
879
1184
  return;
880
1185
  }
1186
+ if (channel.indexOf('account_all_assets:') >= 0) {
1187
+ this.handleBalance(client, message);
1188
+ return;
1189
+ }
1190
+ if (channel.indexOf('user_stats:') >= 0) {
1191
+ this.handleBalance(client, message);
1192
+ return;
1193
+ }
1194
+ if (channel.indexOf('account_orders:') >= 0) {
1195
+ this.handleOrders(client, message);
1196
+ return;
1197
+ }
1198
+ if (channel.indexOf('account_all_orders:') >= 0) {
1199
+ this.handleOrders(client, message);
1200
+ return;
1201
+ }
881
1202
  if (channel === '') {
882
1203
  this.handleSubscriptionStatus(client, message);
883
1204
  }