unicex 0.13.17__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.
Files changed (93) hide show
  1. unicex/__init__.py +200 -0
  2. unicex/_abc/__init__.py +11 -0
  3. unicex/_abc/exchange_info.py +216 -0
  4. unicex/_abc/uni_client.py +329 -0
  5. unicex/_abc/uni_websocket_manager.py +294 -0
  6. unicex/_base/__init__.py +9 -0
  7. unicex/_base/client.py +214 -0
  8. unicex/_base/websocket.py +261 -0
  9. unicex/binance/__init__.py +27 -0
  10. unicex/binance/adapter.py +202 -0
  11. unicex/binance/client.py +1577 -0
  12. unicex/binance/exchange_info.py +62 -0
  13. unicex/binance/uni_client.py +188 -0
  14. unicex/binance/uni_websocket_manager.py +166 -0
  15. unicex/binance/user_websocket.py +186 -0
  16. unicex/binance/websocket_manager.py +912 -0
  17. unicex/bitget/__init__.py +27 -0
  18. unicex/bitget/adapter.py +188 -0
  19. unicex/bitget/client.py +2514 -0
  20. unicex/bitget/exchange_info.py +48 -0
  21. unicex/bitget/uni_client.py +198 -0
  22. unicex/bitget/uni_websocket_manager.py +275 -0
  23. unicex/bitget/user_websocket.py +7 -0
  24. unicex/bitget/websocket_manager.py +232 -0
  25. unicex/bybit/__init__.py +27 -0
  26. unicex/bybit/adapter.py +208 -0
  27. unicex/bybit/client.py +1876 -0
  28. unicex/bybit/exchange_info.py +53 -0
  29. unicex/bybit/uni_client.py +200 -0
  30. unicex/bybit/uni_websocket_manager.py +291 -0
  31. unicex/bybit/user_websocket.py +7 -0
  32. unicex/bybit/websocket_manager.py +339 -0
  33. unicex/enums.py +273 -0
  34. unicex/exceptions.py +64 -0
  35. unicex/extra.py +335 -0
  36. unicex/gate/__init__.py +27 -0
  37. unicex/gate/adapter.py +178 -0
  38. unicex/gate/client.py +1667 -0
  39. unicex/gate/exchange_info.py +55 -0
  40. unicex/gate/uni_client.py +214 -0
  41. unicex/gate/uni_websocket_manager.py +269 -0
  42. unicex/gate/user_websocket.py +7 -0
  43. unicex/gate/websocket_manager.py +513 -0
  44. unicex/hyperliquid/__init__.py +27 -0
  45. unicex/hyperliquid/adapter.py +261 -0
  46. unicex/hyperliquid/client.py +2315 -0
  47. unicex/hyperliquid/exchange_info.py +119 -0
  48. unicex/hyperliquid/uni_client.py +325 -0
  49. unicex/hyperliquid/uni_websocket_manager.py +269 -0
  50. unicex/hyperliquid/user_websocket.py +7 -0
  51. unicex/hyperliquid/websocket_manager.py +393 -0
  52. unicex/mapper.py +111 -0
  53. unicex/mexc/__init__.py +27 -0
  54. unicex/mexc/_spot_ws_proto/PrivateAccountV3Api_pb2.py +38 -0
  55. unicex/mexc/_spot_ws_proto/PrivateDealsV3Api_pb2.py +38 -0
  56. unicex/mexc/_spot_ws_proto/PrivateOrdersV3Api_pb2.py +38 -0
  57. unicex/mexc/_spot_ws_proto/PublicAggreBookTickerV3Api_pb2.py +38 -0
  58. unicex/mexc/_spot_ws_proto/PublicAggreDealsV3Api_pb2.py +40 -0
  59. unicex/mexc/_spot_ws_proto/PublicAggreDepthsV3Api_pb2.py +40 -0
  60. unicex/mexc/_spot_ws_proto/PublicBookTickerBatchV3Api_pb2.py +38 -0
  61. unicex/mexc/_spot_ws_proto/PublicBookTickerV3Api_pb2.py +38 -0
  62. unicex/mexc/_spot_ws_proto/PublicDealsV3Api_pb2.py +40 -0
  63. unicex/mexc/_spot_ws_proto/PublicFuture_pb2.py +103 -0
  64. unicex/mexc/_spot_ws_proto/PublicIncreaseDepthsBatchV3Api_pb2.py +38 -0
  65. unicex/mexc/_spot_ws_proto/PublicIncreaseDepthsV3Api_pb2.py +40 -0
  66. unicex/mexc/_spot_ws_proto/PublicLimitDepthsV3Api_pb2.py +40 -0
  67. unicex/mexc/_spot_ws_proto/PublicMiniTickerV3Api_pb2.py +38 -0
  68. unicex/mexc/_spot_ws_proto/PublicMiniTickersV3Api_pb2.py +38 -0
  69. unicex/mexc/_spot_ws_proto/PublicSpotKlineV3Api_pb2.py +38 -0
  70. unicex/mexc/_spot_ws_proto/PushDataV3ApiWrapper_pb2.py +38 -0
  71. unicex/mexc/_spot_ws_proto/__init__.py +335 -0
  72. unicex/mexc/adapter.py +239 -0
  73. unicex/mexc/client.py +846 -0
  74. unicex/mexc/exchange_info.py +47 -0
  75. unicex/mexc/uni_client.py +211 -0
  76. unicex/mexc/uni_websocket_manager.py +269 -0
  77. unicex/mexc/user_websocket.py +7 -0
  78. unicex/mexc/websocket_manager.py +456 -0
  79. unicex/okx/__init__.py +27 -0
  80. unicex/okx/adapter.py +150 -0
  81. unicex/okx/client.py +2864 -0
  82. unicex/okx/exchange_info.py +47 -0
  83. unicex/okx/uni_client.py +202 -0
  84. unicex/okx/uni_websocket_manager.py +269 -0
  85. unicex/okx/user_websocket.py +7 -0
  86. unicex/okx/websocket_manager.py +743 -0
  87. unicex/types.py +164 -0
  88. unicex/utils.py +218 -0
  89. unicex-0.13.17.dist-info/METADATA +243 -0
  90. unicex-0.13.17.dist-info/RECORD +93 -0
  91. unicex-0.13.17.dist-info/WHEEL +5 -0
  92. unicex-0.13.17.dist-info/licenses/LICENSE +28 -0
  93. unicex-0.13.17.dist-info/top_level.txt +1 -0
@@ -0,0 +1,269 @@
1
+ __all__ = ["IUniWebsocketManager"]
2
+
3
+ from collections.abc import Awaitable, Callable, Sequence
4
+ from typing import Any, overload
5
+
6
+ from unicex._abc import IUniWebsocketManager
7
+ from unicex._base import Websocket
8
+ from unicex.enums import Timeframe
9
+ from unicex.types import LoggerLike
10
+
11
+ from .adapter import Adapter
12
+ from .client import Client
13
+ from .uni_client import UniClient
14
+ from .websocket_manager import WebsocketManager
15
+
16
+ type CallbackType = Callable[[Any], Awaitable[None]]
17
+
18
+
19
+ class UniWebsocketManager(IUniWebsocketManager):
20
+ """Реализация менеджера асинхронных унифицированных вебсокетов."""
21
+
22
+ def __init__(
23
+ self, client: Client | UniClient | None = None, logger: LoggerLike | None = None
24
+ ) -> None:
25
+ """Инициализирует унифицированный менеджер вебсокетов.
26
+
27
+ Параметры:
28
+ client (`Client | UniClient | None`): Клиент Hyperliquid или унифицированный клиент. Нужен для подключения к приватным топикам.
29
+ logger (`LoggerLike | None`): Логгер для записи логов.
30
+ """
31
+ super().__init__(client=client, logger=logger)
32
+ self._websocket_manager = WebsocketManager(self._client) # type: ignore
33
+ self._adapter = Adapter()
34
+
35
+ @overload
36
+ def klines(
37
+ self,
38
+ callback: CallbackType,
39
+ timeframe: Timeframe,
40
+ *,
41
+ symbol: str,
42
+ symbols: None = None,
43
+ ) -> Websocket: ...
44
+
45
+ @overload
46
+ def klines(
47
+ self,
48
+ callback: CallbackType,
49
+ timeframe: Timeframe,
50
+ *,
51
+ symbol: None = None,
52
+ symbols: Sequence[str],
53
+ ) -> Websocket: ...
54
+
55
+ def klines(
56
+ self,
57
+ callback: CallbackType,
58
+ timeframe: Timeframe,
59
+ symbol: str | None = None,
60
+ symbols: Sequence[str] | None = None,
61
+ ) -> Websocket:
62
+ """Открывает стрим свечей (spot) с унификацией сообщений.
63
+
64
+ Параметры:
65
+ callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
66
+ timeframe (`Timeframe`): Временной интервал свечей.
67
+ symbol (`str | None`): Один символ для подписки.
68
+ symbols (`Sequence[str] | None`): Список символов для мультиплекс‑подключения.
69
+
70
+ Должен быть указан либо `symbol`, либо `symbols`.
71
+
72
+ Возвращает:
73
+ `Websocket`: Экземпляр вебсокета для управления соединением.
74
+ """
75
+ raise NotImplementedError()
76
+
77
+ @overload
78
+ def futures_klines(
79
+ self,
80
+ callback: CallbackType,
81
+ timeframe: Timeframe,
82
+ *,
83
+ symbol: str,
84
+ symbols: None = None,
85
+ ) -> Websocket: ...
86
+
87
+ @overload
88
+ def futures_klines(
89
+ self,
90
+ callback: CallbackType,
91
+ timeframe: Timeframe,
92
+ *,
93
+ symbol: None = None,
94
+ symbols: Sequence[str],
95
+ ) -> Websocket: ...
96
+
97
+ def futures_klines(
98
+ self,
99
+ callback: CallbackType,
100
+ timeframe: Timeframe,
101
+ symbol: str | None = None,
102
+ symbols: Sequence[str] | None = None,
103
+ ) -> Websocket:
104
+ """Открывает стрим свечей (futures) с унификацией сообщений.
105
+
106
+ Параметры:
107
+ callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
108
+ timeframe (`Timeframe`): Временной интервал свечей.
109
+ symbol (`str | None`): Один символ для подписки.
110
+ symbols (`Sequence[str] | None`): Список символов для мультиплекс‑подключения.
111
+
112
+ Должен быть указан либо `symbol`, либо `symbols`.
113
+
114
+ Возвращает:
115
+ `Websocket`: Экземпляр вебсокета.
116
+ """
117
+ raise NotImplementedError()
118
+
119
+ @overload
120
+ def trades(
121
+ self,
122
+ callback: CallbackType,
123
+ *,
124
+ symbol: str,
125
+ symbols: None = None,
126
+ ) -> Websocket: ...
127
+
128
+ @overload
129
+ def trades(
130
+ self,
131
+ callback: CallbackType,
132
+ *,
133
+ symbol: None = None,
134
+ symbols: Sequence[str],
135
+ ) -> Websocket: ...
136
+
137
+ def trades(
138
+ self,
139
+ callback: CallbackType,
140
+ symbol: str | None = None,
141
+ symbols: Sequence[str] | None = None,
142
+ ) -> Websocket:
143
+ """Открывает стрим сделок (spot) с унификацией сообщений.
144
+
145
+ Параметры:
146
+ callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
147
+ symbol (`str | None`): Один символ для подписки.
148
+ symbols (`Sequence[str] | None`): Список символов для мультиплекс‑подключения.
149
+
150
+ Должен быть указан либо `symbol`, либо `symbols`.
151
+
152
+ Возвращает:
153
+ `Websocket`: Экземпляр вебсокета.
154
+ """
155
+ raise NotImplementedError()
156
+
157
+ @overload
158
+ def aggtrades(
159
+ self,
160
+ callback: CallbackType,
161
+ *,
162
+ symbol: str,
163
+ symbols: None = None,
164
+ ) -> Websocket: ...
165
+
166
+ @overload
167
+ def aggtrades(
168
+ self,
169
+ callback: CallbackType,
170
+ *,
171
+ symbol: None = None,
172
+ symbols: Sequence[str],
173
+ ) -> Websocket: ...
174
+
175
+ def aggtrades(
176
+ self,
177
+ callback: CallbackType,
178
+ symbol: str | None = None,
179
+ symbols: Sequence[str] | None = None,
180
+ ) -> Websocket:
181
+ """Открывает стрим агрегированных сделок (spot) с унификацией сообщений.
182
+
183
+ Параметры:
184
+ callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
185
+ symbol (`str | None`): Один символ для подписки.
186
+ symbols (`Sequence[str] | None`): Список символов для мультиплекс‑подключения.
187
+
188
+ Должен быть указан либо `symbol`, либо `symbols`.
189
+
190
+ Возвращает:
191
+ `Websocket`: Экземпляр вебсокета.
192
+ """
193
+ raise NotImplementedError()
194
+
195
+ @overload
196
+ def futures_trades(
197
+ self,
198
+ callback: CallbackType,
199
+ *,
200
+ symbol: str,
201
+ symbols: None = None,
202
+ ) -> Websocket: ...
203
+
204
+ @overload
205
+ def futures_trades(
206
+ self,
207
+ callback: CallbackType,
208
+ *,
209
+ symbol: None = None,
210
+ symbols: Sequence[str],
211
+ ) -> Websocket: ...
212
+
213
+ def futures_trades(
214
+ self,
215
+ callback: CallbackType,
216
+ symbol: str | None = None,
217
+ symbols: Sequence[str] | None = None,
218
+ ) -> Websocket:
219
+ """Открывает стрим сделок (futures) с унификацией сообщений.
220
+
221
+ Параметры:
222
+ callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
223
+ symbol (`str | None`): Один символ для подписки.
224
+ symbols (`Sequence[str] | None`): Список символов для мультиплекс‑подключения.
225
+
226
+ Должен быть указан либо `symbol`, либо `symbols`.
227
+
228
+ Возвращает:
229
+ `Websocket`: Экземпляр вебсокета.
230
+ """
231
+ raise NotImplementedError()
232
+
233
+ @overload
234
+ def futures_aggtrades(
235
+ self,
236
+ callback: CallbackType,
237
+ *,
238
+ symbol: str,
239
+ symbols: None = None,
240
+ ) -> Websocket: ...
241
+
242
+ @overload
243
+ def futures_aggtrades(
244
+ self,
245
+ callback: CallbackType,
246
+ *,
247
+ symbol: None = None,
248
+ symbols: Sequence[str],
249
+ ) -> Websocket: ...
250
+
251
+ def futures_aggtrades(
252
+ self,
253
+ callback: CallbackType,
254
+ symbol: str | None = None,
255
+ symbols: Sequence[str] | None = None,
256
+ ) -> Websocket:
257
+ """Открывает стрим агрегированных сделок (futures) с унификацией сообщений.
258
+
259
+ Параметры:
260
+ callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
261
+ symbol (`str | None`): Один символ для подписки.
262
+ symbols (`Sequence[str] | None`): Список символов для мультиплекс‑подключения.
263
+
264
+ Должен быть указан либо `symbol`, либо `symbols`.
265
+
266
+ Возвращает:
267
+ `Websocket`: Экземпляр вебсокета.
268
+ """
269
+ raise NotImplementedError()
@@ -0,0 +1,7 @@
1
+ __all__ = ["UserWebsocket"]
2
+
3
+
4
+ class UserWebsocket:
5
+ """Пользовательский вебсокет Hyperliquid."""
6
+
7
+ pass
@@ -0,0 +1,393 @@
1
+ __all__ = ["WebsocketManager"]
2
+
3
+ import json
4
+ from collections.abc import Awaitable, Callable
5
+ from typing import Any
6
+
7
+ from unicex._base import Websocket
8
+
9
+ from .client import Client
10
+
11
+ type CallbackType = Callable[[Any], Awaitable[None]]
12
+
13
+
14
+ class WebsocketManager:
15
+ """Менеджер асинхронных вебсокетов для Hyperliquid."""
16
+
17
+ _URL: str = "wss://api.hyperliquid.xyz/ws"
18
+ """Базовый URL для вебсокета."""
19
+
20
+ def __init__(self, client: Client | None = None, **ws_kwargs: Any) -> None:
21
+ """Инициализирует менеджер вебсокетов для Hyperliquid.
22
+
23
+ Параметры:
24
+ client (`Client | None`): Клиент для выполнения запросов. Нужен, чтобы открыть приватные вебсокеты.
25
+ ws_kwargs (`dict[str, Any]`): Дополнительные аргументы, которые прокидываются в `Websocket`.
26
+ """
27
+ self.client = client
28
+ self._ws_kwargs = {
29
+ "ping_message": json.dumps({"method": "ping"}),
30
+ "ping_interval": 30,
31
+ **ws_kwargs,
32
+ }
33
+
34
+ def _create_subscription_message(self, subscription_type: str, **params: Any) -> str:
35
+ """Создает сообщение подписки для Hyperliquid.
36
+
37
+ Параметры:
38
+ subscription_type (`str`): Тип подписки.
39
+ params (`dict[str, Any]`): Параметры подписки.
40
+
41
+ Возвращает:
42
+ `str`: JSON-строка с сообщением подписки.
43
+ """
44
+ subscription = {"type": subscription_type, **params}
45
+ message = {"method": "subscribe", "subscription": subscription}
46
+ return json.dumps(message)
47
+
48
+ def all_mids(self, callback: CallbackType, dex: str | None = None) -> Websocket:
49
+ """Создает вебсокет для получения средних цен всех активов.
50
+
51
+ Параметры:
52
+ callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
53
+ dex (`str | None`): Perp dex для получения средних цен. Если не указан, используется первый perp dex.
54
+
55
+ Возвращает:
56
+ `Websocket`: Объект для управления вебсокет соединением.
57
+ """
58
+ params = {}
59
+ if dex is not None:
60
+ params["dex"] = dex
61
+
62
+ subscription_message = self._create_subscription_message("allMids", **params)
63
+ return Websocket(
64
+ callback=callback,
65
+ url=self._URL,
66
+ subscription_messages=[subscription_message],
67
+ **self._ws_kwargs,
68
+ )
69
+
70
+ def notification(self, callback: CallbackType, user: str) -> Websocket:
71
+ """Создает вебсокет для получения уведомлений пользователя.
72
+
73
+ Параметры:
74
+ callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
75
+ user (`str`): Адрес пользователя.
76
+
77
+ Возвращает:
78
+ `Websocket`: Объект для управления вебсокет соединением.
79
+ """
80
+ subscription_message = self._create_subscription_message("notification", user=user)
81
+ return Websocket(
82
+ callback=callback,
83
+ url=self._URL,
84
+ subscription_messages=[subscription_message],
85
+ **self._ws_kwargs,
86
+ )
87
+
88
+ def web_data2(self, callback: CallbackType, user: str) -> Websocket:
89
+ """Создает вебсокет для получения веб-данных пользователя.
90
+
91
+ Параметры:
92
+ callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
93
+ user (`str`): Адрес пользователя.
94
+
95
+ Возвращает:
96
+ `Websocket`: Объект для управления вебсокет соединением.
97
+ """
98
+ subscription_message = self._create_subscription_message("webData2", user=user)
99
+ return Websocket(
100
+ callback=callback,
101
+ url=self._URL,
102
+ subscription_messages=[subscription_message],
103
+ **self._ws_kwargs,
104
+ )
105
+
106
+ def candle(
107
+ self,
108
+ callback: CallbackType,
109
+ interval: str,
110
+ coin: str | None = None,
111
+ coins: list[str] | None = None,
112
+ ) -> Websocket:
113
+ """Создает вебсокет для получения свечей.
114
+
115
+ Параметры:
116
+ callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
117
+ coin (`str`): Символ монеты.
118
+ coins (`list[str]`): Список символов монет для мультиплекс подключения.
119
+ interval (`str`): Интервал свечей ("1m", "3m", "5m", "15m", "30m", "1h", "2h", "4h", "8h", "12h", "1d", "3d", "1w", "1M").
120
+
121
+ Возвращает:
122
+ `Websocket`: Объект для управления вебсокет соединением.
123
+ """
124
+ if coin and coins:
125
+ raise ValueError("Parameters coin and coins cannot be used together")
126
+ if not (coin or coins):
127
+ raise ValueError("Either coin or coins must be provided")
128
+ if coin:
129
+ coins = [coin]
130
+ subscription_messages = [
131
+ self._create_subscription_message("candle", coin=coin, interval=interval)
132
+ for coin in coins # type: ignore
133
+ ]
134
+ return Websocket(
135
+ callback=callback,
136
+ url=self._URL,
137
+ subscription_messages=subscription_messages,
138
+ **self._ws_kwargs,
139
+ )
140
+
141
+ def l2_book(
142
+ self,
143
+ callback: CallbackType,
144
+ coin: str,
145
+ n_sig_figs: int | None = None,
146
+ mantissa: int | None = None,
147
+ ) -> Websocket:
148
+ """Создает вебсокет для получения стакана L2.
149
+
150
+ Параметры:
151
+ callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
152
+ coin (`str`): Символ монеты.
153
+ n_sig_figs (`int | None`): Количество значащих цифр для округления цен.
154
+ mantissa (`int | None`): Мантисса для округления цен.
155
+
156
+ Возвращает:
157
+ `Websocket`: Объект для управления вебсокет соединением.
158
+ """
159
+ params = {"coin": coin}
160
+ if n_sig_figs is not None:
161
+ params["nSigFigs"] = n_sig_figs # type: ignore
162
+ if mantissa is not None:
163
+ params["mantissa"] = mantissa # type: ignore
164
+
165
+ subscription_message = self._create_subscription_message("l2Book", **params)
166
+ return Websocket(
167
+ callback=callback,
168
+ url=self._URL,
169
+ subscription_messages=[subscription_message],
170
+ **self._ws_kwargs,
171
+ )
172
+
173
+ def trades(
174
+ self, callback: CallbackType, coin: str | None = None, coins: list[str] | None = None
175
+ ) -> Websocket:
176
+ """Создает вебсокет для получения сделок.
177
+
178
+ Параметры:
179
+ callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
180
+ coin (`str | None`): Символ монеты.
181
+ coins (`list[str] | None`): Список символов монет для мультиплекс подключения.
182
+
183
+ Возвращает:
184
+ `Websocket`: Объект для управления вебсокет соединением.
185
+ """
186
+ if coin and coins:
187
+ raise ValueError("Parameters coin and coins cannot be used together")
188
+ if not (coin or coins):
189
+ raise ValueError("Either coin or coins must be provided")
190
+ if coin:
191
+ coins = [coin]
192
+ subscription_messages = [
193
+ self._create_subscription_message("trades", coin=coin)
194
+ for coin in coins # type: ignore
195
+ ]
196
+ return Websocket(
197
+ callback=callback,
198
+ url=self._URL,
199
+ subscription_messages=subscription_messages,
200
+ **self._ws_kwargs,
201
+ )
202
+
203
+ def order_updates(self, callback: CallbackType, user: str) -> Websocket:
204
+ """Создает вебсокет для получения обновлений ордеров пользователя.
205
+
206
+ Параметры:
207
+ callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
208
+ user (`str`): Адрес пользователя.
209
+
210
+ Возвращает:
211
+ `Websocket`: Объект для управления вебсокет соединением.
212
+ """
213
+ subscription_message = self._create_subscription_message("orderUpdates", user=user)
214
+ return Websocket(
215
+ callback=callback,
216
+ url=self._URL,
217
+ subscription_messages=[subscription_message],
218
+ **self._ws_kwargs,
219
+ )
220
+
221
+ def user_events(self, callback: CallbackType, user: str) -> Websocket:
222
+ """Создает вебсокет для получения событий пользователя.
223
+
224
+ Параметры:
225
+ callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
226
+ user (`str`): Адрес пользователя.
227
+
228
+ Возвращает:
229
+ `Websocket`: Объект для управления вебсокет соединением.
230
+ """
231
+ subscription_message = self._create_subscription_message("userEvents", user=user)
232
+ return Websocket(
233
+ callback=callback,
234
+ url=self._URL,
235
+ subscription_messages=[subscription_message],
236
+ **self._ws_kwargs,
237
+ )
238
+
239
+ def user_fills(
240
+ self, callback: CallbackType, user: str, aggregate_by_time: bool | None = None
241
+ ) -> Websocket:
242
+ """Создает вебсокет для получения исполнений пользователя.
243
+
244
+ Параметры:
245
+ callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
246
+ user (`str`): Адрес пользователя.
247
+ aggregate_by_time (`bool | None`): Агрегировать по времени.
248
+
249
+ Возвращает:
250
+ `Websocket`: Объект для управления вебсокет соединением.
251
+ """
252
+ params = {"user": user}
253
+ if aggregate_by_time is not None:
254
+ params["aggregateByTime"] = aggregate_by_time # type: ignore
255
+
256
+ subscription_message = self._create_subscription_message("userFills", **params)
257
+ return Websocket(
258
+ callback=callback,
259
+ url=self._URL,
260
+ subscription_messages=[subscription_message],
261
+ **self._ws_kwargs,
262
+ )
263
+
264
+ def user_fundings(self, callback: CallbackType, user: str) -> Websocket:
265
+ """Создает вебсокет для получения фандинга пользователя.
266
+
267
+ Параметры:
268
+ callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
269
+ user (`str`): Адрес пользователя.
270
+
271
+ Возвращает:
272
+ `Websocket`: Объект для управления вебсокет соединением.
273
+ """
274
+ subscription_message = self._create_subscription_message("userFundings", user=user)
275
+ return Websocket(
276
+ callback=callback,
277
+ url=self._URL,
278
+ subscription_messages=[subscription_message],
279
+ **self._ws_kwargs,
280
+ )
281
+
282
+ def user_non_funding_ledger_updates(self, callback: CallbackType, user: str) -> Websocket:
283
+ """Создает вебсокет для получения обновлений леджера пользователя (кроме фандинга).
284
+
285
+ Параметры:
286
+ callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
287
+ user (`str`): Адрес пользователя.
288
+
289
+ Возвращает:
290
+ `Websocket`: Объект для управления вебсокет соединением.
291
+ """
292
+ subscription_message = self._create_subscription_message(
293
+ "userNonFundingLedgerUpdates", user=user
294
+ )
295
+ return Websocket(
296
+ callback=callback,
297
+ url=self._URL,
298
+ subscription_messages=[subscription_message],
299
+ **self._ws_kwargs,
300
+ )
301
+
302
+ def active_asset_ctx(self, callback: CallbackType, coin: str) -> Websocket:
303
+ """Создает вебсокет для получения контекста активного актива.
304
+
305
+ Параметры:
306
+ callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
307
+ coin (`str`): Символ монеты.
308
+
309
+ Возвращает:
310
+ `Websocket`: Объект для управления вебсокет соединением.
311
+ """
312
+ subscription_message = self._create_subscription_message("activeAssetCtx", coin=coin)
313
+ return Websocket(
314
+ callback=callback,
315
+ url=self._URL,
316
+ subscription_messages=[subscription_message],
317
+ **self._ws_kwargs,
318
+ )
319
+
320
+ def active_asset_data(self, callback: CallbackType, user: str, coin: str) -> Websocket:
321
+ """Создает вебсокет для получения данных активного актива пользователя (только Perps).
322
+
323
+ Параметры:
324
+ callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
325
+ user (`str`): Адрес пользователя.
326
+ coin (`str`): Символ монеты.
327
+
328
+ Возвращает:
329
+ `Websocket`: Объект для управления вебсокет соединением.
330
+ """
331
+ subscription_message = self._create_subscription_message(
332
+ "activeAssetData", user=user, coin=coin
333
+ )
334
+ return Websocket(
335
+ callback=callback,
336
+ url=self._URL,
337
+ subscription_messages=[subscription_message],
338
+ **self._ws_kwargs,
339
+ )
340
+
341
+ def user_twap_slice_fills(self, callback: CallbackType, user: str) -> Websocket:
342
+ """Создает вебсокет для получения TWAP slice fills пользователя.
343
+
344
+ Параметры:
345
+ callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
346
+ user (`str`): Адрес пользователя.
347
+
348
+ Возвращает:
349
+ `Websocket`: Объект для управления вебсокет соединением.
350
+ """
351
+ subscription_message = self._create_subscription_message("userTwapSliceFills", user=user)
352
+ return Websocket(
353
+ callback=callback,
354
+ url=self._URL,
355
+ subscription_messages=[subscription_message],
356
+ **self._ws_kwargs,
357
+ )
358
+
359
+ def user_twap_history(self, callback: CallbackType, user: str) -> Websocket:
360
+ """Создает вебсокет для получения TWAP истории пользователя.
361
+
362
+ Параметры:
363
+ callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
364
+ user (`str`): Адрес пользователя.
365
+
366
+ Возвращает:
367
+ `Websocket`: Объект для управления вебсокет соединением.
368
+ """
369
+ subscription_message = self._create_subscription_message("userTwapHistory", user=user)
370
+ return Websocket(
371
+ callback=callback,
372
+ url=self._URL,
373
+ subscription_messages=[subscription_message],
374
+ **self._ws_kwargs,
375
+ )
376
+
377
+ def bbo(self, callback: CallbackType, coin: str) -> Websocket:
378
+ """Создает вебсокет для получения лучшего бида/аска.
379
+
380
+ Параметры:
381
+ callback (`CallbackType`): Асинхронная функция обратного вызова для обработки сообщений.
382
+ coin (`str`): Символ монеты.
383
+
384
+ Возвращает:
385
+ `Websocket`: Объект для управления вебсокет соединением.
386
+ """
387
+ subscription_message = self._create_subscription_message("bbo", coin=coin)
388
+ return Websocket(
389
+ callback=callback,
390
+ url=self._URL,
391
+ subscription_messages=[subscription_message],
392
+ **self._ws_kwargs,
393
+ )