unicex 0.15.4__py3-none-any.whl → 0.16.2__py3-none-any.whl

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.
@@ -5,7 +5,7 @@ from typing import Any, overload
5
5
 
6
6
  from unicex._abc import IUniWebsocketManager
7
7
  from unicex._base import Websocket
8
- from unicex.enums import Timeframe
8
+ from unicex.enums import Exchange, Timeframe
9
9
  from unicex.types import LoggerLike
10
10
 
11
11
  from .adapter import Adapter
@@ -36,6 +36,23 @@ class UniWebsocketManager(IUniWebsocketManager):
36
36
  self._websocket_manager = WebsocketManager(self._client, **ws_kwargs) # type: ignore
37
37
  self._adapter = Adapter()
38
38
 
39
+ def _normalize_symbol(
40
+ self,
41
+ symbol: str | None,
42
+ symbols: Sequence[str] | None,
43
+ ) -> str:
44
+ """Преобразует параметры symbol/symbols в один тикер."""
45
+ if symbol and symbols:
46
+ raise ValueError("Parameters symbol and symbols cannot be used together")
47
+ if symbol:
48
+ return symbol
49
+ if symbols:
50
+ normalized = list(symbols)
51
+ if len(normalized) != 1:
52
+ raise ValueError("OKX websocket поддерживает только один тикер на соединение")
53
+ return normalized[0]
54
+ raise ValueError("Either symbol or symbols must be provided")
55
+
39
56
  @overload
40
57
  def klines(
41
58
  self,
@@ -76,7 +93,13 @@ class UniWebsocketManager(IUniWebsocketManager):
76
93
  Возвращает:
77
94
  `Websocket`: Экземпляр вебсокета для управления соединением.
78
95
  """
79
- raise NotImplementedError()
96
+ inst_id = self._normalize_symbol(symbol, symbols)
97
+ wrapper = self._make_wrapper(self._adapter.klines_message, callback)
98
+ return self._websocket_manager.candlesticks(
99
+ callback=wrapper,
100
+ interval=timeframe.to_exchange_format(Exchange.OKX), # type: ignore
101
+ inst_id=inst_id,
102
+ )
80
103
 
81
104
  @overload
82
105
  def futures_klines(
@@ -118,7 +141,13 @@ class UniWebsocketManager(IUniWebsocketManager):
118
141
  Возвращает:
119
142
  `Websocket`: Экземпляр вебсокета.
120
143
  """
121
- raise NotImplementedError()
144
+ inst_id = self._normalize_symbol(symbol, symbols)
145
+ wrapper = self._make_wrapper(self._adapter.klines_message, callback)
146
+ return self._websocket_manager.candlesticks(
147
+ callback=wrapper,
148
+ interval=timeframe.to_exchange_format(Exchange.OKX), # type: ignore
149
+ inst_id=inst_id,
150
+ )
122
151
 
123
152
  @overload
124
153
  def trades(
@@ -156,7 +185,9 @@ class UniWebsocketManager(IUniWebsocketManager):
156
185
  Возвращает:
157
186
  `Websocket`: Экземпляр вебсокета.
158
187
  """
159
- raise NotImplementedError()
188
+ inst_id = self._normalize_symbol(symbol, symbols)
189
+ wrapper = self._make_wrapper(self._adapter.trades_message, callback)
190
+ return self._websocket_manager.all_trades(callback=wrapper, inst_id=inst_id)
160
191
 
161
192
  @overload
162
193
  def aggtrades(
@@ -194,7 +225,9 @@ class UniWebsocketManager(IUniWebsocketManager):
194
225
  Возвращает:
195
226
  `Websocket`: Экземпляр вебсокета.
196
227
  """
197
- raise NotImplementedError()
228
+ inst_id = self._normalize_symbol(symbol, symbols)
229
+ wrapper = self._make_wrapper(self._adapter.trades_message, callback)
230
+ return self._websocket_manager.trades(callback=wrapper, inst_id=inst_id)
198
231
 
199
232
  @overload
200
233
  def futures_trades(
@@ -232,7 +265,9 @@ class UniWebsocketManager(IUniWebsocketManager):
232
265
  Возвращает:
233
266
  `Websocket`: Экземпляр вебсокета.
234
267
  """
235
- raise NotImplementedError()
268
+ inst_id = self._normalize_symbol(symbol, symbols)
269
+ wrapper = self._make_wrapper(self._adapter.trades_message, callback)
270
+ return self._websocket_manager.all_trades(callback=wrapper, inst_id=inst_id)
236
271
 
237
272
  @overload
238
273
  def futures_aggtrades(
@@ -270,4 +305,6 @@ class UniWebsocketManager(IUniWebsocketManager):
270
305
  Возвращает:
271
306
  `Websocket`: Экземпляр вебсокета.
272
307
  """
273
- raise NotImplementedError()
308
+ inst_id = self._normalize_symbol(symbol, symbols)
309
+ wrapper = self._make_wrapper(self._adapter.trades_message, callback)
310
+ return self._websocket_manager.trades(callback=wrapper, inst_id=inst_id)
@@ -34,6 +34,15 @@ class WebsocketManager:
34
34
  self.client = client
35
35
  self._ws_kwargs = {"ping_message": "ping", **ws_kwargs}
36
36
 
37
+ def _build_subscription_message(self, args: list[dict[str, Any]]) -> str:
38
+ """Формирует JSON-сообщение подписки."""
39
+ return json.dumps(
40
+ {
41
+ "op": "subscribe",
42
+ "args": args,
43
+ }
44
+ )
45
+
37
46
  def instruments(
38
47
  self,
39
48
  callback: CallbackType,
@@ -50,16 +59,13 @@ class WebsocketManager:
50
59
  Возвращает:
51
60
  `Websocket`: Объект для управления вебсокет соединением.
52
61
  """
53
- subscription_message = json.dumps(
54
- {
55
- "op": "subscribe",
56
- "args": [
57
- {
58
- "channel": "instruments",
59
- "instType": inst_type,
60
- }
61
- ],
62
- }
62
+ subscription_message = self._build_subscription_message(
63
+ [
64
+ {
65
+ "channel": "instruments",
66
+ "instType": inst_type,
67
+ }
68
+ ]
63
69
  )
64
70
 
65
71
  return Websocket(
@@ -85,16 +91,13 @@ class WebsocketManager:
85
91
  Возвращает:
86
92
  `Websocket`: Объект для управления вебсокет соединением.
87
93
  """
88
- subscription_message = json.dumps(
89
- {
90
- "op": "subscribe",
91
- "args": [
92
- {
93
- "channel": "open-interest",
94
- "instId": inst_id,
95
- }
96
- ],
97
- }
94
+ subscription_message = self._build_subscription_message(
95
+ [
96
+ {
97
+ "channel": "open-interest",
98
+ "instId": inst_id,
99
+ }
100
+ ]
98
101
  )
99
102
 
100
103
  return Websocket(
@@ -120,16 +123,13 @@ class WebsocketManager:
120
123
  Возвращает:
121
124
  `Websocket`: Объект для управления вебсокет соединением.
122
125
  """
123
- subscription_message = json.dumps(
124
- {
125
- "op": "subscribe",
126
- "args": [
127
- {
128
- "channel": "funding-rate",
129
- "instId": inst_id,
130
- }
131
- ],
132
- }
126
+ subscription_message = self._build_subscription_message(
127
+ [
128
+ {
129
+ "channel": "funding-rate",
130
+ "instId": inst_id,
131
+ }
132
+ ]
133
133
  )
134
134
 
135
135
  return Websocket(
@@ -155,16 +155,13 @@ class WebsocketManager:
155
155
  Возвращает:
156
156
  `Websocket`: Объект для управления вебсокет соединением.
157
157
  """
158
- subscription_message = json.dumps(
159
- {
160
- "op": "subscribe",
161
- "args": [
162
- {
163
- "channel": "price-limit",
164
- "instId": inst_id,
165
- }
166
- ],
167
- }
158
+ subscription_message = self._build_subscription_message(
159
+ [
160
+ {
161
+ "channel": "price-limit",
162
+ "instId": inst_id,
163
+ }
164
+ ]
168
165
  )
169
166
 
170
167
  return Websocket(
@@ -190,16 +187,13 @@ class WebsocketManager:
190
187
  Возвращает:
191
188
  `Websocket`: Объект для управления вебсокет соединением.
192
189
  """
193
- subscription_message = json.dumps(
194
- {
195
- "op": "subscribe",
196
- "args": [
197
- {
198
- "channel": "opt-summary",
199
- "instFamily": inst_family,
200
- }
201
- ],
202
- }
190
+ subscription_message = self._build_subscription_message(
191
+ [
192
+ {
193
+ "channel": "opt-summary",
194
+ "instFamily": inst_family,
195
+ }
196
+ ]
203
197
  )
204
198
 
205
199
  return Websocket(
@@ -244,12 +238,7 @@ class WebsocketManager:
244
238
  if inst_id:
245
239
  args["instId"] = inst_id
246
240
 
247
- subscription_message = json.dumps(
248
- {
249
- "op": "subscribe",
250
- "args": [args],
251
- }
252
- )
241
+ subscription_message = self._build_subscription_message([args])
253
242
 
254
243
  return Websocket(
255
244
  callback=callback,
@@ -274,16 +263,13 @@ class WebsocketManager:
274
263
  Возвращает:
275
264
  `Websocket`: Объект для управления вебсокет соединением.
276
265
  """
277
- subscription_message = json.dumps(
278
- {
279
- "op": "subscribe",
280
- "args": [
281
- {
282
- "channel": "mark-price",
283
- "instId": inst_id,
284
- }
285
- ],
286
- }
266
+ subscription_message = self._build_subscription_message(
267
+ [
268
+ {
269
+ "channel": "mark-price",
270
+ "instId": inst_id,
271
+ }
272
+ ]
287
273
  )
288
274
 
289
275
  return Websocket(
@@ -309,16 +295,13 @@ class WebsocketManager:
309
295
  Возвращает:
310
296
  `Websocket`: Объект для управления вебсокет соединением.
311
297
  """
312
- subscription_message = json.dumps(
313
- {
314
- "op": "subscribe",
315
- "args": [
316
- {
317
- "channel": "index-tickers",
318
- "instId": inst_id,
319
- }
320
- ],
321
- }
298
+ subscription_message = self._build_subscription_message(
299
+ [
300
+ {
301
+ "channel": "index-tickers",
302
+ "instId": inst_id,
303
+ }
304
+ ]
322
305
  )
323
306
 
324
307
  return Websocket(
@@ -375,16 +358,13 @@ class WebsocketManager:
375
358
  `Websocket`: Объект для управления вебсокет соединением.
376
359
  """
377
360
  channel = f"mark-price-candle{interval}"
378
- subscription_message = json.dumps(
379
- {
380
- "op": "subscribe",
381
- "args": [
382
- {
383
- "channel": channel,
384
- "instId": inst_id,
385
- }
386
- ],
387
- }
361
+ subscription_message = self._build_subscription_message(
362
+ [
363
+ {
364
+ "channel": channel,
365
+ "instId": inst_id,
366
+ }
367
+ ]
388
368
  )
389
369
 
390
370
  return Websocket(
@@ -440,16 +420,13 @@ class WebsocketManager:
440
420
  `Websocket`: Объект для управления вебсокет соединением.
441
421
  """
442
422
  channel = f"index-candle{interval}"
443
- subscription_message = json.dumps(
444
- {
445
- "op": "subscribe",
446
- "args": [
447
- {
448
- "channel": channel,
449
- "instId": inst_id,
450
- }
451
- ],
452
- }
423
+ subscription_message = self._build_subscription_message(
424
+ [
425
+ {
426
+ "channel": channel,
427
+ "instId": inst_id,
428
+ }
429
+ ]
453
430
  )
454
431
 
455
432
  return Websocket(
@@ -475,16 +452,13 @@ class WebsocketManager:
475
452
  Возвращает:
476
453
  `Websocket`: Объект для управления вебсокет соединением.
477
454
  """
478
- subscription_message = json.dumps(
479
- {
480
- "op": "subscribe",
481
- "args": [
482
- {
483
- "channel": "liquidation-orders",
484
- "instType": inst_type,
485
- }
486
- ],
487
- }
455
+ subscription_message = self._build_subscription_message(
456
+ [
457
+ {
458
+ "channel": "liquidation-orders",
459
+ "instType": inst_type,
460
+ }
461
+ ]
488
462
  )
489
463
 
490
464
  return Websocket(
@@ -520,12 +494,7 @@ class WebsocketManager:
520
494
  if inst_family:
521
495
  args["instFamily"] = inst_family
522
496
 
523
- subscription_message = json.dumps(
524
- {
525
- "op": "subscribe",
526
- "args": [args],
527
- }
528
- )
497
+ subscription_message = self._build_subscription_message([args])
529
498
 
530
499
  return Websocket(
531
500
  callback=callback,
@@ -550,16 +519,13 @@ class WebsocketManager:
550
519
  Возвращает:
551
520
  `Websocket`: Объект для управления вебсокет соединением.
552
521
  """
553
- subscription_message = json.dumps(
554
- {
555
- "op": "subscribe",
556
- "args": [
557
- {
558
- "channel": "tickers",
559
- "instId": inst_id,
560
- }
561
- ],
562
- }
522
+ subscription_message = self._build_subscription_message(
523
+ [
524
+ {
525
+ "channel": "tickers",
526
+ "instId": inst_id,
527
+ }
528
+ ]
563
529
  )
564
530
 
565
531
  return Websocket(
@@ -615,17 +581,13 @@ class WebsocketManager:
615
581
  Возвращает:
616
582
  `Websocket`: Объект для управления вебсокет соединением.
617
583
  """
618
- channel = f"candle{interval}"
619
- subscription_message = json.dumps(
620
- {
621
- "op": "subscribe",
622
- "args": [
623
- {
624
- "channel": channel,
625
- "instId": inst_id,
626
- }
627
- ],
628
- }
584
+ subscription_message = self._build_subscription_message(
585
+ [
586
+ {
587
+ "channel": f"candle{interval}",
588
+ "instId": inst_id,
589
+ }
590
+ ]
629
591
  )
630
592
 
631
593
  return Websocket(
@@ -651,16 +613,13 @@ class WebsocketManager:
651
613
  Возвращает:
652
614
  `Websocket`: Объект для управления вебсокет соединением.
653
615
  """
654
- subscription_message = json.dumps(
655
- {
656
- "op": "subscribe",
657
- "args": [
658
- {
659
- "channel": "trades",
660
- "instId": inst_id,
661
- }
662
- ],
663
- }
616
+ subscription_message = self._build_subscription_message(
617
+ [
618
+ {
619
+ "channel": "trades",
620
+ "instId": inst_id,
621
+ }
622
+ ]
664
623
  )
665
624
 
666
625
  return Websocket(
@@ -686,16 +645,13 @@ class WebsocketManager:
686
645
  Возвращает:
687
646
  `Websocket`: Объект для управления вебсокет соединением.
688
647
  """
689
- subscription_message = json.dumps(
690
- {
691
- "op": "subscribe",
692
- "args": [
693
- {
694
- "channel": "trades-all",
695
- "instId": inst_id,
696
- }
697
- ],
698
- }
648
+ subscription_message = self._build_subscription_message(
649
+ [
650
+ {
651
+ "channel": "trades-all",
652
+ "instId": inst_id,
653
+ }
654
+ ]
699
655
  )
700
656
 
701
657
  return Websocket(
@@ -723,16 +679,13 @@ class WebsocketManager:
723
679
  Возвращает:
724
680
  `Websocket`: Объект для управления вебсокет соединением.
725
681
  """
726
- subscription_message = json.dumps(
727
- {
728
- "op": "subscribe",
729
- "args": [
730
- {
731
- "channel": channel,
732
- "instId": inst_id,
733
- }
734
- ],
735
- }
682
+ subscription_message = self._build_subscription_message(
683
+ [
684
+ {
685
+ "channel": channel,
686
+ "instId": inst_id,
687
+ }
688
+ ]
736
689
  )
737
690
 
738
691
  return Websocket(
unicex/types.py CHANGED
@@ -5,7 +5,6 @@ __all__ = [
5
5
  "TickerDailyItem",
6
6
  "KlineDict",
7
7
  "TradeDict",
8
- "AggTradeDict",
9
8
  "RequestMethod",
10
9
  "LoggerLike",
11
10
  "NumberLike",
@@ -79,10 +78,10 @@ class KlineDict(TypedDict):
79
78
  q: float
80
79
  """Объем свечи. В долларах."""
81
80
 
82
- T: int | None
81
+ T: int | None # `None` means untrackable
83
82
  """Время закрытия. В миллисекундах."""
84
83
 
85
- x: bool | None
84
+ x: bool | None # `None` means untrackable
86
85
  """Флаг закрыта ли свеча."""
87
86
 
88
87
 
@@ -105,12 +104,6 @@ class TradeDict(TypedDict):
105
104
  """Объем сделки. В монетах."""
106
105
 
107
106
 
108
- class AggTradeDict(TradeDict):
109
- """Модель агрегированной сделки."""
110
-
111
- pass
112
-
113
-
114
107
  class OpenInterestItem(TypedDict):
115
108
  """Модель одного элемента открытого интереса."""
116
109
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: unicex
3
- Version: 0.15.4
3
+ Version: 0.16.2
4
4
  Summary: Unified Crypto Exchange API
5
5
  Author-email: LoveBloodAndDiamonds <ayazshakirzyanov27@gmail.com>
6
6
  License: BSD 3-Clause License
@@ -56,12 +56,12 @@ Dynamic: license-file
56
56
  | Exchange | Client | Auth | WS Manager | User WS | Uni Client | Uni WS Manager | ExchangeInfo |
57
57
  |-----------------|--------|------|------------|---------|------------|----------------|--------------|
58
58
  | **Binance** | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
59
- | **Bitget** | ✓ | ✓ | ✓ | | ✓ | | ✓ |
59
+ | **Bitget** | ✓ | ✓ | ✓ | | ✓ || ✓ |
60
60
  | **Bybit** | ✓ | ✓ | ✓ | | ✓ | ✓ | ✓ |
61
- | **Gateio** | ✓ | ✓ | ✓ | | ✓ | | ✓ |
61
+ | **Gateio** | ✓ | ✓ | ✓ | | ✓ || ✓ |
62
62
  | **Hyperliquid** | ✓ | ✓ | ✓ | ✓ | ✓ | | |
63
- | **Mexc** | ✓ | ✓ | ✓ | | ✓ | | ✓ |
64
- | **Okx** | ✓ | ✓ | ✓ | | ✓ | | ✓ |
63
+ | **Mexc** | ✓ | ✓ | ✓ | | ✓ || ✓ |
64
+ | **Okx** | ✓ | ✓ | ✓ | | ✓ || ✓ |
65
65
  | **Kucoin** | | | | | ✓ | | |
66
66
  | **BingX** | | | | | ✓ | | |
67
67
  ---
@@ -1,9 +1,9 @@
1
- unicex/__init__.py,sha256=NRfg04EGWTx-QTH0MGEkhbT1-f5XZRvzUEJQXESXz9k,6852
1
+ unicex/__init__.py,sha256=oP1ymnNwVqd6R2K8slN4UHn42I77bzRB-nKxN0TiU1g,6814
2
2
  unicex/enums.py,sha256=5iJo1uokNlS9FQQtomK0LiEcXuHqF9cBEg2aPAX3QDk,10296
3
3
  unicex/exceptions.py,sha256=r-xZzX78VuxVnI5pe99AM8FIiGcdIUDcF5CaTkQ4NE0,2213
4
4
  unicex/extra.py,sha256=YJKl2X-T1BtaSR0t-CpvxaGE0emNpgts807lmD_3ejA,13686
5
5
  unicex/mapper.py,sha256=b4a99_VVpEBGzctUJxvxLvu8urSrIQEziCt9cKlfg6w,5331
6
- unicex/types.py,sha256=u2OtyfiXMpmafHNOXBCEC1MI3jzfG9Km_Gdr3ig80vM,5074
6
+ unicex/types.py,sha256=dyWCZpiUkSwrsk8H8bf9rE8pkNZkokoddn6VRV4_NSk,5001
7
7
  unicex/utils.py,sha256=1iK-ifZ-hUaU4Z-YCLoZsjAZREfJO7amYsjzG70JEk8,9963
8
8
  unicex/_abc/__init__.py,sha256=fxZjNFJFeFwWTXz8iSDe7eCWwE6xfFwFwAuG6l-TI8A,289
9
9
  unicex/_abc/exchange_info.py,sha256=TP_theOj1JS3Dcx5hqGT1yma1Jed776N4okOKXB7ePw,9537
@@ -13,7 +13,7 @@ unicex/_base/__init__.py,sha256=0TmevATGnRB3qow6tkCR8dQKNZCWKeib6YQjNJ4a1b0,236
13
13
  unicex/_base/client.py,sha256=GuWfNNO6jVLAN-YUNKLmd-W5AfRelJIgKUe7vIQ12Qk,9318
14
14
  unicex/_base/websocket.py,sha256=J_okxWq1CiDqU64_GlcwE7Vgq8LZKsSRYpCoXVazJGk,13279
15
15
  unicex/binance/__init__.py,sha256=sDk4ZjakRdpFMaMSpOCfqjf6ZPfAS9tlrt4WlDHtDkw,932
16
- unicex/binance/adapter.py,sha256=BrrMM-crRC1wC6FqPVppXuL-Elpi0aco2dJ4foQrUMU,8244
16
+ unicex/binance/adapter.py,sha256=adRi2XxF-VyU0nmjgigx6I1MiQHHtsGPtSxzx3_bX9I,8220
17
17
  unicex/binance/client.py,sha256=LXHZJpX7HpaUTlQcjuGEjm3qin4mczemJnCay1LncZo,62444
18
18
  unicex/binance/exchange_info.py,sha256=LNDkgBC5HB3JxtIBi39puqDg6LIVWqIWjT-6akDxtMs,2437
19
19
  unicex/binance/uni_client.py,sha256=W4yxiU0kkJKPJjimhv4KAWreuEBwt7GgrWXefcw5BEA,8365
@@ -25,15 +25,15 @@ unicex/bingx/adapter.py,sha256=1QZSfrpgMlTu-ZuLWtO61caqC6ygRTViI5Plt25Ybi4,11937
25
25
  unicex/bingx/client.py,sha256=VPPIDKH86i1KR-6Xr8RXO7nSt7KhKNnp7Sz4spnZm-E,16899
26
26
  unicex/bingx/exchange_info.py,sha256=dfUl2V7ec82eEDE_u6AuMB9dQ8iAWh03HcaUPaOo_mo,786
27
27
  unicex/bingx/uni_client.py,sha256=NKJVq2ce4UbK1jnKTLOIX2X2a5LzhPh_oG6_JrH4P6o,8196
28
- unicex/bingx/uni_websocket_manager.py,sha256=cFVR5uPdpooF6gRsAX_6cGRnud2UjXNUa82A0WW2Z08,9962
28
+ unicex/bingx/uni_websocket_manager.py,sha256=Hg1XXyAO1FW3_4PmoTB3Z0KuRt7traLBYHWtPqy7-YQ,10068
29
29
  unicex/bingx/user_websocket.py,sha256=UgWt2hMaNqEUibf-1MfCIkJijx7Vb_HN8DiXaclMCog,128
30
30
  unicex/bingx/websocket_manager.py,sha256=Is9aurewMICA0n90YTGK3ET4J269bvklJFwDJRzQKNg,4855
31
31
  unicex/bitget/__init__.py,sha256=8govSOEyWjA62js-ZTQIiSYWSmcEUFSC9hVTpS8eosk,929
32
- unicex/bitget/adapter.py,sha256=t1Jsn9LYeMx_LUJjPmrAuuhTB1lcpyBViSMzjUIfX_k,7768
32
+ unicex/bitget/adapter.py,sha256=uxBO9fI_3DPP6BsZHMYO0qIufWSGev2sGoidgOSnves,7747
33
33
  unicex/bitget/client.py,sha256=0NFOixkMb0AcC5e-LytUd4Y1jxCO6Lv6-I4XlOGNtxQ,90618
34
34
  unicex/bitget/exchange_info.py,sha256=_UMvAqP0zcpmv9dkovkFxrXLlol6q8_v7-0sy6FSfrE,1959
35
35
  unicex/bitget/uni_client.py,sha256=MrXAmthTDTEQZ1ZY3LuqkCKL1bw_mKHMdiV4XiRFO-M,8641
36
- unicex/bitget/uni_websocket_manager.py,sha256=ybf-_HPU-aQy7M27rfKDPSdxjI5ZzkfKCzzim-WA5l8,10038
36
+ unicex/bitget/uni_websocket_manager.py,sha256=BAeH6GwVdYjpxe5xw1K7jrAyH6Lj02xawiv9kXvksLE,11105
37
37
  unicex/bitget/user_websocket.py,sha256=tlkv7Rmsw_FSfCJnEMOK_9jRsXRk2Ah_slqG8C-uhuo,129
38
38
  unicex/bitget/websocket_manager.py,sha256=Tra_E_z1QQ_snFYwqa49FmU-uWISYnbyJK5e7zqb48o,9765
39
39
  unicex/bybit/__init__.py,sha256=SrMBh6K5zUt4JheWUpNUYNb1NCDr2ujTFv4IDguaGZI,926
@@ -45,11 +45,11 @@ unicex/bybit/uni_websocket_manager.py,sha256=HhgFcGo2yQLT5knU3cFaKN85jJP0Z9EIwZ-
45
45
  unicex/bybit/user_websocket.py,sha256=IGGEnwyWs5jOppgK_R7SisBDvsiF1_piTswBrdQOgDg,128
46
46
  unicex/bybit/websocket_manager.py,sha256=y8YiQEPtVg3Xj7seuNSbQMt5FrM-snWx9KlNioKeNVo,14413
47
47
  unicex/gate/__init__.py,sha256=dsKvhQhDcw4_w0S4c9IjKkCoOg4DCUtSecEUOlfstug,929
48
- unicex/gate/adapter.py,sha256=wQcvwujl0aVwhJVLMjJE_yMWz19S98rVgT6oBzFBr7M,6956
48
+ unicex/gate/adapter.py,sha256=pPp4Syz99gmfkceoaA5rLcApPNj099SNtQNalFLA-ek,11163
49
49
  unicex/gate/client.py,sha256=Mu8qropad8DTSDuG6mxyn6ZW2hwQK47PZnfb5yOEt2M,53828
50
50
  unicex/gate/exchange_info.py,sha256=ANzfe4mqxtLnj2TBJJxoc31KUosvxdApp1_xYrRNQDs,2300
51
51
  unicex/gate/uni_client.py,sha256=EVhQ4KF7F6y67b2oARcYzSrSnHTFsUjoXK1vLntK6u0,9649
52
- unicex/gate/uni_websocket_manager.py,sha256=_baRRpC0zUgAqpn6PygULhGkO1mhlepyIo0kOpUItRM,9574
52
+ unicex/gate/uni_websocket_manager.py,sha256=dESHYEPf832b5tdMwo_9wdMaE6I_ZOKwEtnhnuofx_c,11285
53
53
  unicex/gate/user_websocket.py,sha256=4qZX9N2RjlJ-e25Eszz12OeCM17j5DdXVimBVaLj53w,129
54
54
  unicex/gate/websocket_manager.py,sha256=phtHbvAGQD3mtewCUxBuuD1Nj0FXN6oZrd7tnmT7c2c,25832
55
55
  unicex/hyperliquid/__init__.py,sha256=qGTAkwfXLvknvHET_iA7Qml3jkxxxA0moU_98nGTcVU,944
@@ -69,13 +69,13 @@ unicex/kucoin/uni_websocket_manager.py,sha256=rvrhQkvktZhbfb505KmkiBtf7Y4drClgtq
69
69
  unicex/kucoin/user_websocket.py,sha256=Tx0yuGpf2HrPbcOHHZioYjVp6LBfagOKF-zzD3UM0Ok,129
70
70
  unicex/kucoin/websocket_manager.py,sha256=GNNpzxONgTuTByrsGk1MNMlj5-zx5vs_WBTgssYSYDQ,270
71
71
  unicex/mexc/__init__.py,sha256=lltANqM_2P-fmF5j8o5-pjmORPuK6C5sVjcQhuUU_R0,923
72
- unicex/mexc/adapter.py,sha256=WhjOsdBssBkWQhQjbpMWIeAqaKXvsq6rDRQD7A34yws,9889
72
+ unicex/mexc/adapter.py,sha256=OGlTAJ0IRg4YVu9cMKDH9orPd6FnIUDqKO8jHa_BpQs,13631
73
73
  unicex/mexc/client.py,sha256=FBUSs4Hu2DExVKPKJG9OawbqidACPFJ1U_1md05E3Mc,31004
74
74
  unicex/mexc/exchange_info.py,sha256=z2bQsVU0ciXV2_DFkueZHo1X35KIK2alD-7ZZjNg5Kc,1763
75
75
  unicex/mexc/uni_client.py,sha256=_nYIl46-yvyUVKZxkSLCHRxgTnM75TmZqaxCsUp8woI,9482
76
- unicex/mexc/uni_websocket_manager.py,sha256=zN9U7geR1jO5VLWsjsTdITrlhyCnan5hiKO2p0gBhBQ,9572
76
+ unicex/mexc/uni_websocket_manager.py,sha256=4doElI-dPvAXs8a5HpU8gtpZznWf7YtAXTl8lTLjsiU,10804
77
77
  unicex/mexc/user_websocket.py,sha256=l77-e6i0B2btd7a5IcCytbgswnV171NqOhunTcbaq48,127
78
- unicex/mexc/websocket_manager.py,sha256=Z12jn6BEk1F1qvtuQ1xvTAlauK1sjo9fGgtcX9AoyCY,21750
78
+ unicex/mexc/websocket_manager.py,sha256=0VhgXJil4xXm-YLuW2WVT7REv0oaivd9nZ4VI14rUzI,22926
79
79
  unicex/mexc/_spot_ws_proto/PrivateAccountV3Api_pb2.py,sha256=3bP1pGjeO-Norp7DhhdrQ4FcQTEKkCiL2mLagyoJHp8,1879
80
80
  unicex/mexc/_spot_ws_proto/PrivateDealsV3Api_pb2.py,sha256=mamFaZHymW5HhoTO8_mZz9y8kQcIsguCpaLf6xpC4Cc,1991
81
81
  unicex/mexc/_spot_ws_proto/PrivateOrdersV3Api_pb2.py,sha256=HsQUfInnjlsn8SJkobN-5FK1PS_0NsIvyuT1ABtbdTY,2982
@@ -95,15 +95,15 @@ unicex/mexc/_spot_ws_proto/PublicSpotKlineV3Api_pb2.py,sha256=0FOMsSO4jzMQ6446yZ
95
95
  unicex/mexc/_spot_ws_proto/PushDataV3ApiWrapper_pb2.py,sha256=_V0StMrDE7-bsdRPQdTC2XLGDGqJ5U_scx8ZjcyCGgk,3735
96
96
  unicex/mexc/_spot_ws_proto/__init__.py,sha256=L8Jft1713_M8CLR9drgSjLBdY_46sPT3O9zDFlxYvgc,11431
97
97
  unicex/okx/__init__.py,sha256=Ljbw3AP0YrPF5bIPJi_3JP3B_czR9xurYHI24rgWk9M,920
98
- unicex/okx/adapter.py,sha256=B04_YmRr5R1FWSAbjWE51rd5zG_A88bmbXWrVez2HK8,5373
98
+ unicex/okx/adapter.py,sha256=4MpQh12nzlzB0HbOCHItYoWNFXbFCe9DntVC0smm-PY,7609
99
99
  unicex/okx/client.py,sha256=N7ma49ToMGjYiTvuoV52-NaG-vLx3s087KF67dQCRBs,91079
100
- unicex/okx/exchange_info.py,sha256=gkTwYnXgswa1FGLXdKo9qLYqZA0BS9VefpALhR4_t-Q,1772
100
+ unicex/okx/exchange_info.py,sha256=z2GrMkhZSJLdLsscqIfwQnWlnsX-RWPqGIbVfVbOVg4,1786
101
101
  unicex/okx/uni_client.py,sha256=E_Wod0JSGt1K6k1mAIWnOv350pELbv-nic7g1KgOuos,8694
102
- unicex/okx/uni_websocket_manager.py,sha256=CR877hj4pKwJbYlmKJvETl1Zlezpd81ZdzHkAMCYIwA,9571
102
+ unicex/okx/uni_websocket_manager.py,sha256=wrROl5RmxCJC8o_k6mc1UufbNsOKTRhIFqq5yinXUBQ,11626
103
103
  unicex/okx/user_websocket.py,sha256=8c9kpm-xVa729pW93OKUGLHaE9MY0uzEpjIgNIFRF80,126
104
- unicex/okx/websocket_manager.py,sha256=rougqBUOV8XeJszRDtmSFSyaaphmHr1kKQk926K080w,26042
105
- unicex-0.15.4.dist-info/licenses/LICENSE,sha256=lNNK4Vqak9cXm6qVJLhbqS7iR_BMj6k7fd7XQ6l1k54,1507
106
- unicex-0.15.4.dist-info/METADATA,sha256=qa34lhsjmWfZj1hkfjOU5iRiT6zgSWuWA6nxHsVn1M8,11964
107
- unicex-0.15.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
108
- unicex-0.15.4.dist-info/top_level.txt,sha256=_7rar-0OENIg4KRy6cgjWiebFYAJhjKEcMggAocGWG4,7
109
- unicex-0.15.4.dist-info/RECORD,,
104
+ unicex/okx/websocket_manager.py,sha256=3sXjN0BJGyj2aK05J4WJ_-hhwaSX9PvzhaZri86OlZg,25038
105
+ unicex-0.16.2.dist-info/licenses/LICENSE,sha256=lNNK4Vqak9cXm6qVJLhbqS7iR_BMj6k7fd7XQ6l1k54,1507
106
+ unicex-0.16.2.dist-info/METADATA,sha256=SagvkivMkeSaclaawc09cIbOMOit1jIXucHlZMKz7q8,11972
107
+ unicex-0.16.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
108
+ unicex-0.16.2.dist-info/top_level.txt,sha256=_7rar-0OENIg4KRy6cgjWiebFYAJhjKEcMggAocGWG4,7
109
+ unicex-0.16.2.dist-info/RECORD,,