solver-sdk 1.4.0 → 1.4.2
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.
- package/dist/cjs/code-solver-sdk.js +29 -3
- package/dist/cjs/code-solver-sdk.js.map +1 -1
- package/dist/cjs/utils/code-solver-websocket-client.js +74 -2
- package/dist/cjs/utils/code-solver-websocket-client.js.map +1 -1
- package/dist/cjs/utils/websocket-client.js +397 -10
- package/dist/cjs/utils/websocket-client.js.map +1 -1
- package/dist/esm/code-solver-sdk.js +29 -3
- package/dist/esm/code-solver-sdk.js.map +1 -1
- package/dist/esm/utils/code-solver-websocket-client.js +74 -2
- package/dist/esm/utils/code-solver-websocket-client.js.map +1 -1
- package/dist/esm/utils/websocket-client.js +397 -10
- package/dist/esm/utils/websocket-client.js.map +1 -1
- package/dist/types/code-solver-sdk.d.ts +2 -0
- package/dist/types/code-solver-sdk.d.ts.map +1 -1
- package/dist/types/interfaces/sdk-options.d.ts +7 -0
- package/dist/types/interfaces/sdk-options.d.ts.map +1 -1
- package/dist/types/utils/code-solver-websocket-client.d.ts.map +1 -1
- package/dist/types/utils/websocket-client.d.ts +52 -0
- package/dist/types/utils/websocket-client.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -27,6 +27,8 @@ class WebSocketClient {
|
|
|
27
27
|
this.messageQueue = [];
|
|
28
28
|
/** Состояние соединения */
|
|
29
29
|
this.connected = false;
|
|
30
|
+
/** Аутентифицировано ли соединение */
|
|
31
|
+
this.authenticated = false;
|
|
30
32
|
this.url = url;
|
|
31
33
|
this.options = {
|
|
32
34
|
headers: options.headers || {},
|
|
@@ -35,10 +37,45 @@ class WebSocketClient {
|
|
|
35
37
|
maxRetries: options.maxRetries || 5,
|
|
36
38
|
retryDelay: options.retryDelay || 1000,
|
|
37
39
|
maxRetryDelay: options.maxRetryDelay || 30000,
|
|
38
|
-
autoReconnect: options.autoReconnect !== undefined ? options.autoReconnect : true
|
|
40
|
+
autoReconnect: options.autoReconnect !== undefined ? options.autoReconnect : true,
|
|
41
|
+
rejectUnauthorized: options.rejectUnauthorized !== undefined ? options.rejectUnauthorized : true,
|
|
42
|
+
apiKey: options.apiKey || '',
|
|
43
|
+
namespace: options.namespace || '',
|
|
44
|
+
logger: options.logger
|
|
39
45
|
};
|
|
40
46
|
// Определяем среду выполнения
|
|
41
47
|
this.isBrowser = typeof window !== 'undefined' && typeof window.document !== 'undefined';
|
|
48
|
+
// Инициализируем пространство имен
|
|
49
|
+
this.namespace = this.options.namespace || '';
|
|
50
|
+
// Если namespace не начинается с /, добавляем его
|
|
51
|
+
if (this.namespace && !this.namespace.startsWith('/')) {
|
|
52
|
+
this.namespace = '/' + this.namespace;
|
|
53
|
+
}
|
|
54
|
+
// Инициализируем логгер
|
|
55
|
+
this.logger = this.options.logger || ((level, message, data) => {
|
|
56
|
+
if (level === 'error') {
|
|
57
|
+
console.error(`[WebSocketClient] ${message}`, data);
|
|
58
|
+
}
|
|
59
|
+
else if (level === 'warn') {
|
|
60
|
+
console.warn(`[WebSocketClient] ${message}`, data);
|
|
61
|
+
}
|
|
62
|
+
else if (level === 'info') {
|
|
63
|
+
console.info(`[WebSocketClient] ${message}`, data);
|
|
64
|
+
}
|
|
65
|
+
else if (level === 'debug' && process.env.NODE_ENV === 'development') {
|
|
66
|
+
console.debug(`[WebSocketClient] ${message}`, data);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
// Логирование конфигурации при создании клиента
|
|
70
|
+
this.logger('info', 'Создан WebSocket клиент', {
|
|
71
|
+
url: this.url,
|
|
72
|
+
namespace: this.namespace,
|
|
73
|
+
hasApiKey: !!this.options.apiKey,
|
|
74
|
+
apiKeyLength: this.options.apiKey ? this.options.apiKey.length : 0,
|
|
75
|
+
connectionTimeout: this.options.connectionTimeout,
|
|
76
|
+
autoReconnect: this.options.autoReconnect,
|
|
77
|
+
maxRetries: this.options.maxRetries
|
|
78
|
+
});
|
|
42
79
|
}
|
|
43
80
|
/**
|
|
44
81
|
* Подключается к WebSocket серверу
|
|
@@ -47,29 +84,50 @@ class WebSocketClient {
|
|
|
47
84
|
connect() {
|
|
48
85
|
// Если соединение уже установлено, возвращаем Promise.resolve
|
|
49
86
|
if (this.webSocket && this.webSocket.readyState === WebSocket.OPEN) {
|
|
87
|
+
this.logger('info', 'Соединение уже установлено');
|
|
50
88
|
return Promise.resolve();
|
|
51
89
|
}
|
|
52
90
|
// Сбрасываем флаг намеренного закрытия
|
|
53
91
|
this.intentionallyClosed = false;
|
|
54
92
|
return new Promise((resolve, reject) => {
|
|
55
93
|
try {
|
|
94
|
+
// Проверяем, содержит ли URL параметры Socket.IO
|
|
95
|
+
let wsUrl = this.url;
|
|
96
|
+
// Проверяем, является ли это Socket.IO подключением
|
|
97
|
+
if (wsUrl.includes('/socket.io/') || wsUrl.includes('?EIO=')) {
|
|
98
|
+
// Убедимся, что в URL есть параметры для Socket.IO версии 4
|
|
99
|
+
if (!wsUrl.includes('EIO=')) {
|
|
100
|
+
// Добавляем разделитель: ? или &
|
|
101
|
+
const separator = wsUrl.includes('?') ? '&' : '?';
|
|
102
|
+
wsUrl += `${separator}EIO=4&transport=websocket`;
|
|
103
|
+
}
|
|
104
|
+
// Добавляем timestamp для предотвращения кеширования
|
|
105
|
+
if (!wsUrl.includes('t=')) {
|
|
106
|
+
const separator = wsUrl.includes('?') ? '&' : '?';
|
|
107
|
+
wsUrl += `${separator}t=${Date.now()}`;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
this.logger('info', 'Выполняется подключение', { url: wsUrl });
|
|
56
111
|
// Создаем новый экземпляр WebSocket
|
|
57
112
|
if (this.isBrowser) {
|
|
58
113
|
// Браузерное окружение
|
|
59
|
-
this.webSocket = new WebSocket(
|
|
114
|
+
this.webSocket = new WebSocket(wsUrl, this.options.protocols);
|
|
60
115
|
}
|
|
61
116
|
else {
|
|
62
117
|
// Node.js окружение
|
|
63
118
|
try {
|
|
64
119
|
// Динамически импортируем ws модуль в Node.js
|
|
65
120
|
const WebSocketImpl = require('ws');
|
|
66
|
-
this.webSocket = new WebSocketImpl(
|
|
121
|
+
this.webSocket = new WebSocketImpl(wsUrl, {
|
|
67
122
|
headers: this.options.headers,
|
|
68
|
-
protocol: this.options.protocols
|
|
123
|
+
protocol: this.options.protocols,
|
|
124
|
+
rejectUnauthorized: this.options.rejectUnauthorized !== false
|
|
69
125
|
});
|
|
70
126
|
}
|
|
71
127
|
catch (error) {
|
|
72
|
-
|
|
128
|
+
const errorMsg = `Не удалось загрузить модуль ws в Node.js: ${error.message}`;
|
|
129
|
+
this.logger('error', errorMsg);
|
|
130
|
+
reject(new Error(errorMsg));
|
|
73
131
|
return;
|
|
74
132
|
}
|
|
75
133
|
}
|
|
@@ -85,6 +143,7 @@ class WebSocketClient {
|
|
|
85
143
|
clearTimeout(this.connectionTimeoutTimer);
|
|
86
144
|
this.retryCount = 0;
|
|
87
145
|
this.connected = true;
|
|
146
|
+
this.logger('info', 'WebSocket соединение установлено');
|
|
88
147
|
// Отправляем сообщения из очереди
|
|
89
148
|
while (this.messageQueue.length > 0) {
|
|
90
149
|
const message = this.messageQueue.shift();
|
|
@@ -92,6 +151,8 @@ class WebSocketClient {
|
|
|
92
151
|
this.webSocket.send(message);
|
|
93
152
|
}
|
|
94
153
|
}
|
|
154
|
+
// Запускаем таймер для ping в Socket.IO
|
|
155
|
+
this.setupPingPongTimer();
|
|
95
156
|
resolve();
|
|
96
157
|
this.dispatchEvent('open', {});
|
|
97
158
|
};
|
|
@@ -100,18 +161,139 @@ class WebSocketClient {
|
|
|
100
161
|
try {
|
|
101
162
|
// Пытаемся распарсить сообщение как JSON
|
|
102
163
|
let data = event.data;
|
|
164
|
+
// Обработка сообщений Socket.IO
|
|
103
165
|
if (typeof data === 'string') {
|
|
104
|
-
|
|
105
|
-
|
|
166
|
+
// Обработка Engine.IO - Ping/Pong (2/3)
|
|
167
|
+
if (data === '2') {
|
|
168
|
+
// Engine.IO ping, отправляем понг
|
|
169
|
+
if (this.webSocket && this.webSocket.readyState === WebSocket.OPEN) {
|
|
170
|
+
this.webSocket.send('3');
|
|
171
|
+
}
|
|
172
|
+
this.dispatchEvent('ping', {});
|
|
173
|
+
return;
|
|
106
174
|
}
|
|
107
|
-
|
|
108
|
-
//
|
|
175
|
+
else if (data === '3') {
|
|
176
|
+
// Engine.IO pong
|
|
177
|
+
this.dispatchEvent('pong', {});
|
|
178
|
+
return;
|
|
109
179
|
}
|
|
180
|
+
// Обработка открытия соединения Socket.IO
|
|
181
|
+
if (data.startsWith('0')) {
|
|
182
|
+
try {
|
|
183
|
+
const authData = JSON.parse(data.substring(1));
|
|
184
|
+
this.dispatchEvent('socket.io_open', authData);
|
|
185
|
+
// Вызываем обработчик открытия соединения Socket.IO
|
|
186
|
+
this.handleSocketIOOpen(authData);
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
catch (e) {
|
|
190
|
+
// Игнорируем ошибки парсинга
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
// Обработка Socket.IO событий (42)
|
|
194
|
+
if (data.startsWith('42')) {
|
|
195
|
+
// Формат: 42/namespace,[event,data]
|
|
196
|
+
let namespace = '';
|
|
197
|
+
let eventData = data.substring(2);
|
|
198
|
+
// Извлекаем namespace, если есть
|
|
199
|
+
if (eventData.startsWith('/')) {
|
|
200
|
+
const namespaceEnd = eventData.indexOf(',');
|
|
201
|
+
if (namespaceEnd !== -1) {
|
|
202
|
+
namespace = eventData.substring(0, namespaceEnd);
|
|
203
|
+
eventData = eventData.substring(namespaceEnd + 1);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
try {
|
|
207
|
+
const parsedData = JSON.parse(eventData);
|
|
208
|
+
if (Array.isArray(parsedData) && parsedData.length >= 1) {
|
|
209
|
+
const event = parsedData[0];
|
|
210
|
+
const eventPayload = parsedData.length > 1 ? parsedData[1] : null;
|
|
211
|
+
// Запускаем обработчик для данного события
|
|
212
|
+
this.dispatchEvent(event, eventPayload);
|
|
213
|
+
// Также отправляем общее событие socket.io с информацией о полученном событии
|
|
214
|
+
this.dispatchEvent('socket.io_event', {
|
|
215
|
+
event,
|
|
216
|
+
data: eventPayload,
|
|
217
|
+
namespace
|
|
218
|
+
});
|
|
219
|
+
// Обработка специальных событий для стриминга
|
|
220
|
+
if (event === 'text_delta' && eventPayload?.delta?.text) {
|
|
221
|
+
this.dispatchEvent('streaming_delta', { type: 'text', content: eventPayload.delta.text });
|
|
222
|
+
}
|
|
223
|
+
else if (event === 'thinking_delta' && eventPayload?.delta?.thinking) {
|
|
224
|
+
this.dispatchEvent('streaming_delta', { type: 'thinking', content: eventPayload.delta.thinking });
|
|
225
|
+
}
|
|
226
|
+
else if (event === 'message_stop') {
|
|
227
|
+
this.dispatchEvent('streaming_complete', {});
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
catch (e) {
|
|
232
|
+
this.dispatchEvent('error', { message: `Ошибка парсинга Socket.IO данных: ${e instanceof Error ? e.message : 'Неизвестная ошибка'}` });
|
|
233
|
+
}
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
// Определяем тип пакета Socket.IO по первому символу
|
|
237
|
+
const packetType = data.charAt(0);
|
|
238
|
+
// Если это пакет данных (тип 0-6)
|
|
239
|
+
if (packetType >= '0' && packetType <= '6') {
|
|
240
|
+
// Отправляем особое событие для Socket.IO пакетов
|
|
241
|
+
this.dispatchEvent('socket.io_raw', {
|
|
242
|
+
type: packetType,
|
|
243
|
+
data: data.substring(1)
|
|
244
|
+
});
|
|
245
|
+
// Пытаемся обработать содержимое
|
|
246
|
+
if (data.length > 1) {
|
|
247
|
+
try {
|
|
248
|
+
// Обработка пакета с namespace
|
|
249
|
+
let jsonStart = 1;
|
|
250
|
+
let namespace = '';
|
|
251
|
+
// Если есть namespace, извлекаем его
|
|
252
|
+
if (data.charAt(1) === '/') {
|
|
253
|
+
const namespaceEnd = data.indexOf('{', 1);
|
|
254
|
+
if (namespaceEnd !== -1) {
|
|
255
|
+
namespace = data.substring(1, namespaceEnd);
|
|
256
|
+
jsonStart = namespaceEnd;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
// Пытаемся преобразовать оставшуюся часть в JSON
|
|
260
|
+
const jsonStr = data.substring(jsonStart);
|
|
261
|
+
if (jsonStr) {
|
|
262
|
+
try {
|
|
263
|
+
const parsedData = JSON.parse(jsonStr);
|
|
264
|
+
this.dispatchEvent('message', parsedData);
|
|
265
|
+
}
|
|
266
|
+
catch (e) {
|
|
267
|
+
// Если не можем преобразовать в JSON, отправляем как есть
|
|
268
|
+
this.dispatchEvent('message', jsonStr);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
catch (e) {
|
|
273
|
+
// Игнорируем ошибки парсинга
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
// Если это не Socket.IO пакет, пытаемся обработать как обычное сообщение
|
|
279
|
+
try {
|
|
280
|
+
const parsedData = JSON.parse(data);
|
|
281
|
+
this.dispatchEvent('message', parsedData);
|
|
282
|
+
}
|
|
283
|
+
catch (e) {
|
|
284
|
+
// Если не можем преобразовать в JSON, отправляем как есть
|
|
285
|
+
this.dispatchEvent('message', data);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
else {
|
|
290
|
+
// Если данные не строка (например, ArrayBuffer), отправляем как есть
|
|
291
|
+
this.dispatchEvent('message', data);
|
|
110
292
|
}
|
|
111
|
-
this.dispatchEvent('message', data);
|
|
112
293
|
}
|
|
113
294
|
catch (e) {
|
|
114
295
|
console.error('Ошибка при обработке сообщения WebSocket:', e);
|
|
296
|
+
this.dispatchEvent('error', { message: `Ошибка при обработке сообщения: ${e instanceof Error ? e.message : 'Неизвестная ошибка'}` });
|
|
115
297
|
}
|
|
116
298
|
};
|
|
117
299
|
// Обработчик закрытия соединения
|
|
@@ -143,6 +325,29 @@ class WebSocketClient {
|
|
|
143
325
|
}
|
|
144
326
|
});
|
|
145
327
|
}
|
|
328
|
+
/**
|
|
329
|
+
* Настраивает таймер для ping/pong сообщений Socket.IO
|
|
330
|
+
*/
|
|
331
|
+
setupPingPongTimer() {
|
|
332
|
+
// Если URL содержит параметры Socket.IO, настраиваем автоматический ping/pong
|
|
333
|
+
if (this.url.includes('EIO=4') && this.url.includes('transport=websocket')) {
|
|
334
|
+
// Типичный интервал ping для Socket.IO - 25 секунд
|
|
335
|
+
const pingInterval = 25000;
|
|
336
|
+
// Периодически отправляем ping
|
|
337
|
+
const pingTimer = setInterval(() => {
|
|
338
|
+
if (this.webSocket && this.webSocket.readyState === WebSocket.OPEN) {
|
|
339
|
+
// Socket.IO ping - это просто строка "2"
|
|
340
|
+
this.webSocket.send('2');
|
|
341
|
+
}
|
|
342
|
+
else {
|
|
343
|
+
// Если соединение закрыто, останавливаем таймер
|
|
344
|
+
clearInterval(pingTimer);
|
|
345
|
+
}
|
|
346
|
+
}, pingInterval);
|
|
347
|
+
// Останавливаем таймер при закрытии соединения
|
|
348
|
+
this.on('close', () => clearInterval(pingTimer));
|
|
349
|
+
}
|
|
350
|
+
}
|
|
146
351
|
/**
|
|
147
352
|
* Переподключается к WebSocket серверу
|
|
148
353
|
* @private
|
|
@@ -190,6 +395,41 @@ class WebSocketClient {
|
|
|
190
395
|
* @returns {boolean} Успешно ли отправлено сообщение
|
|
191
396
|
*/
|
|
192
397
|
send(message) {
|
|
398
|
+
// Если это объект с type='2' (Socket.IO EVENT), обрабатываем как Socket.IO сообщение
|
|
399
|
+
if (typeof message === 'object' && message.type === '2') {
|
|
400
|
+
const socketIOMessage = message;
|
|
401
|
+
let packet;
|
|
402
|
+
// Формат сообщения для Socket.IO протокола 4
|
|
403
|
+
if (socketIOMessage.event && socketIOMessage.data) {
|
|
404
|
+
// Format: 42namespace,[event,data]
|
|
405
|
+
const namespace = socketIOMessage.nsp ? socketIOMessage.nsp : '';
|
|
406
|
+
const namespaceStr = namespace && !namespace.startsWith('/') ? '/' + namespace : namespace;
|
|
407
|
+
const eventData = [socketIOMessage.event];
|
|
408
|
+
if (socketIOMessage.data !== undefined) {
|
|
409
|
+
eventData.push(socketIOMessage.data);
|
|
410
|
+
}
|
|
411
|
+
// 4 - Engine.IO message type
|
|
412
|
+
// 2 - Socket.IO EVENT type
|
|
413
|
+
packet = `42${namespaceStr}${namespaceStr ? ',' : ''}${JSON.stringify(eventData)}`;
|
|
414
|
+
}
|
|
415
|
+
else {
|
|
416
|
+
// Обратная совместимость со старым форматом
|
|
417
|
+
packet = `${socketIOMessage.type}${socketIOMessage.nsp ? socketIOMessage.nsp : ''}${JSON.stringify(socketIOMessage.data)}`;
|
|
418
|
+
}
|
|
419
|
+
if (this.webSocket && this.webSocket.readyState === WebSocket.OPEN) {
|
|
420
|
+
this.webSocket.send(packet);
|
|
421
|
+
return true;
|
|
422
|
+
}
|
|
423
|
+
else {
|
|
424
|
+
// Если соединение не установлено, добавляем сообщение в очередь
|
|
425
|
+
this.messageQueue.push(packet);
|
|
426
|
+
if ((!this.webSocket || this.webSocket.readyState === WebSocket.CLOSED) && !this.intentionallyClosed) {
|
|
427
|
+
this.connect().catch(() => { });
|
|
428
|
+
}
|
|
429
|
+
return false;
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
// Стандартная отправка
|
|
193
433
|
const data = typeof message === 'string' ? message : JSON.stringify(message);
|
|
194
434
|
if (this.webSocket && this.webSocket.readyState === WebSocket.OPEN) {
|
|
195
435
|
this.webSocket.send(data);
|
|
@@ -263,6 +503,153 @@ class WebSocketClient {
|
|
|
263
503
|
}
|
|
264
504
|
}
|
|
265
505
|
}
|
|
506
|
+
/**
|
|
507
|
+
* Обработка полученного сообщения от сервера
|
|
508
|
+
* @param message Сообщение от сервера
|
|
509
|
+
*/
|
|
510
|
+
handleMessage(message) {
|
|
511
|
+
try {
|
|
512
|
+
if (!message) {
|
|
513
|
+
this.dispatchEvent('error', { message: 'Получено пустое сообщение' });
|
|
514
|
+
return;
|
|
515
|
+
}
|
|
516
|
+
// Проверяем, является ли сообщение пингом Socket.IO (2)
|
|
517
|
+
if (message === '2') {
|
|
518
|
+
// Отправляем понг (3)
|
|
519
|
+
this.send('3');
|
|
520
|
+
this.dispatchEvent('debug', 'Получен ping, отправлен pong');
|
|
521
|
+
return;
|
|
522
|
+
}
|
|
523
|
+
// Если это сообщение Socket.IO с данными
|
|
524
|
+
if (message.startsWith('42')) {
|
|
525
|
+
// Формат: 42[event,data]
|
|
526
|
+
const eventDataStr = message.substring(2);
|
|
527
|
+
try {
|
|
528
|
+
const [event, data] = JSON.parse(eventDataStr);
|
|
529
|
+
// Вызываем соответствующий обработчик события
|
|
530
|
+
this.dispatchEvent(event, data);
|
|
531
|
+
// Добавляем специальную обработку для событий стриминга
|
|
532
|
+
if (event === 'text_delta' && data.delta?.text) {
|
|
533
|
+
this.dispatchEvent('streaming_delta', { type: 'text', content: data.delta.text });
|
|
534
|
+
}
|
|
535
|
+
else if (event === 'thinking_delta' && data.delta?.thinking) {
|
|
536
|
+
this.dispatchEvent('streaming_delta', { type: 'thinking', content: data.delta.thinking });
|
|
537
|
+
}
|
|
538
|
+
else if (event === 'message_stop') {
|
|
539
|
+
this.dispatchEvent('streaming_complete', {});
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
catch (error) {
|
|
543
|
+
const errorMessage = error instanceof Error ? error.message : 'Неизвестная ошибка';
|
|
544
|
+
this.dispatchEvent('error', { message: `Ошибка разбора данных события: ${errorMessage}` });
|
|
545
|
+
}
|
|
546
|
+
return;
|
|
547
|
+
}
|
|
548
|
+
// Пытаемся преобразовать сообщение в JSON
|
|
549
|
+
try {
|
|
550
|
+
const parsedMessage = JSON.parse(message);
|
|
551
|
+
// Если это объект с типом event и данными, это может быть событие
|
|
552
|
+
if (parsedMessage.event && parsedMessage.data) {
|
|
553
|
+
const { event, data } = parsedMessage;
|
|
554
|
+
this.dispatchEvent(event, data);
|
|
555
|
+
}
|
|
556
|
+
else {
|
|
557
|
+
this.dispatchEvent('message', parsedMessage);
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
catch (error) {
|
|
561
|
+
// Если не удалось преобразовать в JSON, обрабатываем как текстовое сообщение
|
|
562
|
+
this.dispatchEvent('message', message);
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
catch (error) {
|
|
566
|
+
const errorMessage = error instanceof Error ? error.message : 'Неизвестная ошибка';
|
|
567
|
+
this.dispatchEvent('error', { message: `Ошибка при обработке сообщения: ${errorMessage}` });
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
/**
|
|
571
|
+
* Отправляет событие Socket.IO
|
|
572
|
+
* @param {string} event Название события
|
|
573
|
+
* @param {any} data Данные события
|
|
574
|
+
* @param {string} [namespace=''] Namespace для Socket.IO
|
|
575
|
+
* @returns {boolean} Успешно ли отправлено сообщение
|
|
576
|
+
*/
|
|
577
|
+
sendSocketIOEvent(event, data, namespace = '') {
|
|
578
|
+
// Формируем объект для отправки через метод send
|
|
579
|
+
const socketIOMessage = {
|
|
580
|
+
type: '2',
|
|
581
|
+
event,
|
|
582
|
+
data,
|
|
583
|
+
nsp: namespace
|
|
584
|
+
};
|
|
585
|
+
return this.send(socketIOMessage);
|
|
586
|
+
}
|
|
587
|
+
/**
|
|
588
|
+
* Обработка подключения к пространству имен Socket.IO
|
|
589
|
+
*/
|
|
590
|
+
handleNamespaceConnection() {
|
|
591
|
+
if (!this.namespace) {
|
|
592
|
+
return;
|
|
593
|
+
}
|
|
594
|
+
// Отправляем запрос на подключение к namespace
|
|
595
|
+
this.logger('info', `Подключение к пространству имен ${this.namespace}`);
|
|
596
|
+
const connectMessage = `40${this.namespace}`;
|
|
597
|
+
if (this.webSocket && this.webSocket.readyState === WebSocket.OPEN) {
|
|
598
|
+
this.webSocket.send(connectMessage);
|
|
599
|
+
}
|
|
600
|
+
else {
|
|
601
|
+
this.messageQueue.push(connectMessage);
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
/**
|
|
605
|
+
* Отправка аутентификационного сообщения
|
|
606
|
+
*/
|
|
607
|
+
authenticate() {
|
|
608
|
+
if (!this.options.apiKey) {
|
|
609
|
+
this.logger('warn', 'API ключ не предоставлен, аутентификация пропущена');
|
|
610
|
+
return;
|
|
611
|
+
}
|
|
612
|
+
const apiKeySafe = this.options.apiKey.length > 8
|
|
613
|
+
? `${this.options.apiKey.substring(0, 4)}...${this.options.apiKey.substring(this.options.apiKey.length - 4)}`
|
|
614
|
+
: '[короткий ключ]';
|
|
615
|
+
this.logger('info', 'Отправка аутентификационного сообщения', {
|
|
616
|
+
namespace: this.namespace,
|
|
617
|
+
apiKey: apiKeySafe,
|
|
618
|
+
authenticated: this.authenticated,
|
|
619
|
+
socketState: this.webSocket ? this.webSocket.readyState : 'нет соединения'
|
|
620
|
+
});
|
|
621
|
+
// Отправляем событие authenticate с API ключом
|
|
622
|
+
this.sendSocketIOEvent('authenticate', { apiKey: this.options.apiKey }, this.namespace);
|
|
623
|
+
}
|
|
624
|
+
/**
|
|
625
|
+
* Обработка открытия соединения Socket.IO
|
|
626
|
+
* @param data Данные открытия соединения
|
|
627
|
+
*/
|
|
628
|
+
handleSocketIOOpen(data) {
|
|
629
|
+
this.logger('info', 'Socket.IO соединение открыто', {
|
|
630
|
+
pingInterval: data.pingInterval,
|
|
631
|
+
pingTimeout: data.pingTimeout,
|
|
632
|
+
sid: data.sid
|
|
633
|
+
});
|
|
634
|
+
// Если указано пространство имен, подключаемся к нему
|
|
635
|
+
if (this.namespace) {
|
|
636
|
+
this.handleNamespaceConnection();
|
|
637
|
+
}
|
|
638
|
+
// Добавляем обработчик успешного подключения к пространству имен
|
|
639
|
+
this.on('socket.io_event', (eventData) => {
|
|
640
|
+
// Если это событие connect и мы еще не аутентифицированы
|
|
641
|
+
if (!this.authenticated && eventData.event === 'connect') {
|
|
642
|
+
this.logger('info', `Подключено к пространству имен ${eventData.namespace || '/'}`, {
|
|
643
|
+
namespace: eventData.namespace || '/',
|
|
644
|
+
event: eventData.event,
|
|
645
|
+
data: eventData.data
|
|
646
|
+
});
|
|
647
|
+
// Аутентифицируем соединение
|
|
648
|
+
this.authenticate();
|
|
649
|
+
this.authenticated = true;
|
|
650
|
+
}
|
|
651
|
+
});
|
|
652
|
+
}
|
|
266
653
|
}
|
|
267
654
|
exports.WebSocketClient = WebSocketClient;
|
|
268
655
|
//# sourceMappingURL=websocket-client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket-client.js","sourceRoot":"","sources":["../../../src/utils/websocket-client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"websocket-client.js","sourceRoot":"","sources":["../../../src/utils/websocket-client.ts"],"names":[],"mappings":";;;AAmEA;;GAEG;AACH,MAAa,eAAe;IA2C1B;;;;OAIG;IACH,YAAY,GAAW,EAAE,UAAkC,EAAE;QAzC7D,0BAA0B;QAChB,cAAS,GAAqB,IAAI,CAAC;QAE7C,sCAAsC;QAC5B,eAAU,GAAG,CAAC,CAAC;QAEzB,+DAA+D;QACrD,wBAAmB,GAAG,KAAK,CAAC;QAEtC,6BAA6B;QACnB,mBAAc,GAAQ,IAAI,CAAC;QAErC,iCAAiC;QACvB,2BAAsB,GAAQ,IAAI,CAAC;QAE7C,0BAA0B;QAChB,kBAAa,GAA4C,EAAE,CAAC;QAEtE,uDAAuD;QAC7C,iBAAY,GAA6D,EAAE,CAAC;QAEtF,2BAA2B;QACjB,cAAS,GAAG,KAAK,CAAC;QAK5B,sCAAsC;QAC5B,kBAAa,GAAG,KAAK,CAAC;QAc9B,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,OAAO,GAAG;YACb,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;YAC9B,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,IAAI,KAAK;YACrD,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,EAAE;YAClC,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,CAAC;YACnC,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,IAAI;YACtC,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,KAAK;YAC7C,aAAa,EAAE,OAAO,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI;YACjF,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI;YAChG,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE;YAC5B,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,EAAE;YAClC,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC;QAEF,8BAA8B;QAC9B,IAAI,CAAC,SAAS,GAAG,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,WAAW,CAAC;QAEzF,mCAAmC;QACnC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;QAE9C,kDAAkD;QAClD,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACtD,IAAI,CAAC,SAAS,GAAG,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;QACxC,CAAC;QAED,wBAAwB;QACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;YAC7D,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;gBACtB,OAAO,CAAC,KAAK,CAAC,qBAAqB,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;YACtD,CAAC;iBAAM,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;gBAC5B,OAAO,CAAC,IAAI,CAAC,qBAAqB,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;YACrD,CAAC;iBAAM,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;gBAC5B,OAAO,CAAC,IAAI,CAAC,qBAAqB,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;YACrD,CAAC;iBAAM,IAAI,KAAK,KAAK,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;gBACvE,OAAO,CAAC,KAAK,CAAC,qBAAqB,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;YACtD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,gDAAgD;QAChD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,yBAAyB,EAAE;YAC7C,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM;YAChC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAClE,iBAAiB,EAAE,IAAI,CAAC,OAAO,CAAC,iBAAiB;YACjD,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa;YACzC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU;SACpC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACI,OAAO;QACZ,8DAA8D;QAC9D,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YACnE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,4BAA4B,CAAC,CAAC;YAClD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC3B,CAAC;QAED,uCAAuC;QACvC,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;QAEjC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC;gBACH,iDAAiD;gBACjD,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC;gBAErB,oDAAoD;gBACpD,IAAI,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC7D,4DAA4D;oBAC5D,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;wBAC5B,iCAAiC;wBACjC,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;wBAClD,KAAK,IAAI,GAAG,SAAS,2BAA2B,CAAC;oBACnD,CAAC;oBAED,qDAAqD;oBACrD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC1B,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;wBAClD,KAAK,IAAI,GAAG,SAAS,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;oBACzC,CAAC;gBACH,CAAC;gBAED,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,yBAAyB,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;gBAE/D,oCAAoC;gBACpC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;oBACnB,uBAAuB;oBACvB,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,SAAqB,CAAC,CAAC;gBAC5E,CAAC;qBAAM,CAAC;oBACN,oBAAoB;oBACpB,IAAI,CAAC;wBACH,8CAA8C;wBAC9C,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;wBACpC,IAAI,CAAC,SAAS,GAAG,IAAI,aAAa,CAAC,KAAK,EAAE;4BACxC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;4BAC7B,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;4BAChC,kBAAkB,EAAE,IAAI,CAAC,OAAO,CAAC,kBAAkB,KAAK,KAAK;yBAC9D,CAAC,CAAC;oBACL,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,MAAM,QAAQ,GAAG,6CAA8C,KAAe,CAAC,OAAO,EAAE,CAAC;wBACzF,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;wBAC/B,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;wBAC5B,OAAO;oBACT,CAAC;gBACH,CAAC;gBAED,mCAAmC;gBACnC,IAAI,CAAC,sBAAsB,GAAG,UAAU,CAAC,GAAG,EAAE;oBAC5C,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;wBACnE,MAAM,CAAC,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC;wBACnD,IAAI,CAAC,KAAK,EAAE,CAAC;oBACf,CAAC;gBACH,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;gBAEnC,iCAAiC;gBACjC,IAAI,CAAC,SAAU,CAAC,MAAM,GAAG,GAAG,EAAE;oBAC5B,YAAY,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;oBAC1C,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;oBACpB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;oBAEtB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,kCAAkC,CAAC,CAAC;oBAExD,kCAAkC;oBAClC,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACpC,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;wBAC1C,IAAI,OAAO,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;4BAC9E,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;wBAC/B,CAAC;oBACH,CAAC;oBAED,wCAAwC;oBACxC,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBAE1B,OAAO,EAAE,CAAC;oBACV,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBACjC,CAAC,CAAC;gBAEF,uBAAuB;gBACvB,IAAI,CAAC,SAAU,CAAC,SAAS,GAAG,CAAC,KAAK,EAAE,EAAE;oBACpC,IAAI,CAAC;wBACH,yCAAyC;wBACzC,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;wBAEtB,gCAAgC;wBAChC,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;4BAC7B,wCAAwC;4BACxC,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gCACjB,kCAAkC;gCAClC,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;oCACnE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gCAC3B,CAAC;gCACD,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gCAC/B,OAAO;4BACT,CAAC;iCAAM,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gCACxB,iBAAiB;gCACjB,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gCAC/B,OAAO;4BACT,CAAC;4BAED,0CAA0C;4BAC1C,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gCACzB,IAAI,CAAC;oCACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;oCAC/C,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;oCAE/C,oDAAoD;oCACpD,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;oCAElC,OAAO;gCACT,CAAC;gCAAC,OAAO,CAAC,EAAE,CAAC;oCACX,6BAA6B;gCAC/B,CAAC;4BACH,CAAC;4BAED,mCAAmC;4BACnC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gCAC1B,oCAAoC;gCACpC,IAAI,SAAS,GAAG,EAAE,CAAC;gCACnB,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gCAElC,iCAAiC;gCACjC,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oCAC9B,MAAM,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;oCAC5C,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;wCACxB,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;wCACjD,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;oCACpD,CAAC;gCACH,CAAC;gCAED,IAAI,CAAC;oCACH,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;oCACzC,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;wCACxD,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;wCAC5B,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;wCAElE,2CAA2C;wCAC3C,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;wCAExC,8EAA8E;wCAC9E,IAAI,CAAC,aAAa,CAAC,iBAAiB,EAAE;4CACpC,KAAK;4CACL,IAAI,EAAE,YAAY;4CAClB,SAAS;yCACV,CAAC,CAAC;wCAEH,8CAA8C;wCAC9C,IAAI,KAAK,KAAK,YAAY,IAAI,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;4CACxD,IAAI,CAAC,aAAa,CAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;wCAC5F,CAAC;6CAAM,IAAI,KAAK,KAAK,gBAAgB,IAAI,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;4CACvE,IAAI,CAAC,aAAa,CAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;wCACpG,CAAC;6CAAM,IAAI,KAAK,KAAK,cAAc,EAAE,CAAC;4CACpC,IAAI,CAAC,aAAa,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;wCAC/C,CAAC;oCACH,CAAC;gCACH,CAAC;gCAAC,OAAO,CAAC,EAAE,CAAC;oCACX,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,qCAAqC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;gCACzI,CAAC;gCAED,OAAO;4BACT,CAAC;4BAED,qDAAqD;4BACrD,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;4BAElC,kCAAkC;4BAClC,IAAI,UAAU,IAAI,GAAG,IAAI,UAAU,IAAI,GAAG,EAAE,CAAC;gCAC3C,kDAAkD;gCAClD,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE;oCAClC,IAAI,EAAE,UAAU;oCAChB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;iCACxB,CAAC,CAAC;gCAEH,iCAAiC;gCACjC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oCACpB,IAAI,CAAC;wCACH,+BAA+B;wCAC/B,IAAI,SAAS,GAAG,CAAC,CAAC;wCAClB,IAAI,SAAS,GAAG,EAAE,CAAC;wCAEnB,qCAAqC;wCACrC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;4CAC3B,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;4CAC1C,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;gDACxB,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;gDAC5C,SAAS,GAAG,YAAY,CAAC;4CAC3B,CAAC;wCACH,CAAC;wCAED,iDAAiD;wCACjD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;wCAC1C,IAAI,OAAO,EAAE,CAAC;4CACZ,IAAI,CAAC;gDACH,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gDACvC,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;4CAC5C,CAAC;4CAAC,OAAO,CAAC,EAAE,CAAC;gDACX,0DAA0D;gDAC1D,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;4CACzC,CAAC;wCACH,CAAC;oCACH,CAAC;oCAAC,OAAO,CAAC,EAAE,CAAC;wCACX,6BAA6B;oCAC/B,CAAC;gCACH,CAAC;4BACH,CAAC;iCAAM,CAAC;gCACN,yEAAyE;gCACzE,IAAI,CAAC;oCACH,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oCACpC,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;gCAC5C,CAAC;gCAAC,OAAO,CAAC,EAAE,CAAC;oCACX,0DAA0D;oCAC1D,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;gCACtC,CAAC;4BACH,CAAC;wBACH,CAAC;6BAAM,CAAC;4BACN,qEAAqE;4BACrE,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;wBACtC,CAAC;oBACH,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACX,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,CAAC,CAAC,CAAC;wBAC9D,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,mCAAmC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;oBACvI,CAAC;gBACH,CAAC,CAAC;gBAEF,iCAAiC;gBACjC,IAAI,CAAC,SAAU,CAAC,OAAO,GAAG,CAAC,KAAK,EAAE,EAAE;oBAClC,YAAY,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;oBAE1C,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;oBACvB,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;oBAExE,uEAAuE;oBACvE,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;wBAC7B,OAAO;oBACT,CAAC;oBAED,0EAA0E;oBAC1E,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;wBAC/B,IAAI,CAAC,SAAS,EAAE,CAAC;oBACnB,CAAC;gBACH,CAAC,CAAC;gBAEF,oBAAoB;gBACpB,IAAI,CAAC,SAAU,CAAC,OAAO,GAAG,CAAC,KAAK,EAAE,EAAE;oBAClC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;oBAEnC,yEAAyE;oBACzE,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;wBAC7C,YAAY,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;wBAC1C,MAAM,CAAC,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAC;oBACpD,CAAC;gBACH,CAAC,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,kBAAkB;QACxB,8EAA8E;QAC9E,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC;YAC3E,mDAAmD;YACnD,MAAM,YAAY,GAAG,KAAK,CAAC;YAE3B,+BAA+B;YAC/B,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE;gBACjC,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;oBACnE,yCAAyC;oBACzC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC3B,CAAC;qBAAM,CAAC;oBACN,gDAAgD;oBAChD,aAAa,CAAC,SAAS,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC,EAAE,YAAY,CAAC,CAAC;YAEjB,+CAA+C;YAC/C,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,SAAS;QACf,8BAA8B;QAC9B,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,+EAA+E;QAC/E,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC,EAAE,CAAC;YACrD,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;YAC/D,OAAO;QACT,CAAC;QAED,sEAAsE;QACtE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CACpB,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,EACpE,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,KAAK,CACpC,CAAC;QAEF,2CAA2C;QAC3C,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,GAAG,EAAE;YACpC,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;YAC9D,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACjC,CAAC,EAAE,KAAK,CAAC,CAAC;IACZ,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,OAAe,IAAI,EAAE,MAAe;QAC/C,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAEhC,kBAAkB;QAClB,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAClC,YAAY,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAE1C,4BAA4B;QAC5B,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QAEvB,uBAAuB;QACvB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;gBACjD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACrC,CAAC;YACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;IAED;;;;OAIG;IACI,IAAI,CAAC,OAAwB;QAClC,qFAAqF;QACrF,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAK,OAAe,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;YACjE,MAAM,eAAe,GAAG,OAAc,CAAC;YACvC,IAAI,MAAM,CAAC;YAEX,6CAA6C;YAC7C,IAAI,eAAe,CAAC,KAAK,IAAI,eAAe,CAAC,IAAI,EAAE,CAAC;gBAClD,mCAAmC;gBACnC,MAAM,SAAS,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjE,MAAM,YAAY,GAAG,SAAS,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;gBAE3F,MAAM,SAAS,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;gBAC1C,IAAI,eAAe,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBACvC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;gBACvC,CAAC;gBAED,6BAA6B;gBAC7B,2BAA2B;gBAC3B,MAAM,GAAG,KAAK,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;YACrF,CAAC;iBAAM,CAAC;gBACN,4CAA4C;gBAC5C,MAAM,GAAG,GAAG,eAAe,CAAC,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7H,CAAC;YAED,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;gBACnE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC5B,OAAO,IAAI,CAAC;YACd,CAAC;iBAAM,CAAC;gBACN,gEAAgE;gBAChE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAE/B,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,KAAK,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;oBACrG,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;gBACjC,CAAC;gBAED,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAED,uBAAuB;QACvB,MAAM,IAAI,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAE7E,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YACnE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;aAAM,CAAC;YACN,gEAAgE;YAChE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE7B,+EAA+E;YAC/E,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,KAAK,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBACrG,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACjC,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,WAAW;QAChB,OAAO,IAAI,CAAC,SAAS,KAAK,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,CAAC;IACjF,CAAC;IAED;;;;OAIG;IACI,EAAE,CAAC,SAAiB,EAAE,OAA8B;QACzD,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;QACrC,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED;;;;OAIG;IACI,GAAG,CAAC,SAAiB,EAAE,OAA+B;QAC3D,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,OAAO;QACT,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,yEAAyE;YACzE,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QACvC,CAAC;aAAM,CAAC;YACN,6CAA6C;YAC7C,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC;YAEzF,+CAA+C;YAC/C,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC/C,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;OAIG;IACO,aAAa,CAAC,SAAiB,EAAE,IAAS;QAClD,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,OAAO;QACT,CAAC;QAED,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;YACpD,IAAI,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CAAC,gCAAgC,SAAS,GAAG,EAAE,CAAC,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,aAAa,CAAC,OAAe;QACnC,IAAI,CAAC;YACH,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,EAAC,OAAO,EAAE,2BAA2B,EAAC,CAAC,CAAC;gBACpE,OAAO;YACT,CAAC;YAED,wDAAwD;YACxD,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC;gBACpB,sBAAsB;gBACtB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACf,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,8BAA8B,CAAC,CAAC;gBAC5D,OAAO;YACT,CAAC;YAED,yCAAyC;YACzC,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7B,yBAAyB;gBACzB,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBAC1C,IAAI,CAAC;oBACH,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;oBAE/C,8CAA8C;oBAC9C,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;oBAEhC,wDAAwD;oBACxD,IAAI,KAAK,KAAK,YAAY,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC;wBAC/C,IAAI,CAAC,aAAa,CAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;oBACpF,CAAC;yBAAM,IAAI,KAAK,KAAK,gBAAgB,IAAI,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC;wBAC9D,IAAI,CAAC,aAAa,CAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;oBAC5F,CAAC;yBAAM,IAAI,KAAK,KAAK,cAAc,EAAE,CAAC;wBACpC,IAAI,CAAC,aAAa,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;oBAC/C,CAAC;gBAEH,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC;oBACnF,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,kCAAkC,YAAY,EAAE,EAAE,CAAC,CAAC;gBAC7F,CAAC;gBACD,OAAO;YACT,CAAC;YAED,0CAA0C;YAC1C,IAAI,CAAC;gBACH,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAE1C,kEAAkE;gBAClE,IAAI,aAAa,CAAC,KAAK,IAAI,aAAa,CAAC,IAAI,EAAE,CAAC;oBAC9C,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC;oBACtC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBAClC,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;gBAC/C,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,6EAA6E;gBAC7E,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC;YACnF,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,mCAAmC,YAAY,EAAE,EAAE,CAAC,CAAC;QAC9F,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACI,iBAAiB,CAAC,KAAa,EAAE,IAAS,EAAE,YAAoB,EAAE;QACvE,iDAAiD;QACjD,MAAM,eAAe,GAAG;YACtB,IAAI,EAAE,GAAG;YACT,KAAK;YACL,IAAI;YACJ,GAAG,EAAE,SAAS;SACf,CAAC;QAEF,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACK,yBAAyB;QAC/B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QAED,+CAA+C;QAC/C,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,mCAAmC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QACzE,MAAM,cAAc,GAAG,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;QAE7C,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YACnE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED;;OAEG;IACK,YAAY;QAClB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,oDAAoD,CAAC,CAAC;YAC1E,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;YAC/C,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE;YAC7G,CAAC,CAAC,iBAAiB,CAAC;QAEtB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,wCAAwC,EAAE;YAC5D,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM,EAAE,UAAU;YAClB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,gBAAgB;SAC3E,CAAC,CAAC;QAEH,+CAA+C;QAC/C,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC1F,CAAC;IAED;;;OAGG;IACK,kBAAkB,CAAC,IAAS;QAClC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,8BAA8B,EAAE;YAClD,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,GAAG,EAAE,IAAI,CAAC,GAAG;SACd,CAAC,CAAC;QAEH,sDAAsD;QACtD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC,yBAAyB,EAAE,CAAC;QACnC,CAAC;QAED,iEAAiE;QACjE,IAAI,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,SAAS,EAAE,EAAE;YACvC,yDAAyD;YACzD,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,SAAS,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBACzD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,kCAAkC,SAAS,CAAC,SAAS,IAAI,GAAG,EAAE,EAAE;oBAClF,SAAS,EAAE,SAAS,CAAC,SAAS,IAAI,GAAG;oBACrC,KAAK,EAAE,SAAS,CAAC,KAAK;oBACtB,IAAI,EAAE,SAAS,CAAC,IAAI;iBACrB,CAAC,CAAC;gBAEH,6BAA6B;gBAC7B,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC5B,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAhuBD,0CAguBC"}
|
|
@@ -36,6 +36,27 @@ export class CodeSolverSDK {
|
|
|
36
36
|
constructor(options) {
|
|
37
37
|
/** WebSocket клиент для работы с реалтайм API */
|
|
38
38
|
this.wsClient = null;
|
|
39
|
+
/** Logger для внутреннего использования */
|
|
40
|
+
this.logger = {
|
|
41
|
+
log: (message) => {
|
|
42
|
+
if (this._options.debug) {
|
|
43
|
+
console.log(`[CodeSolverSDK] ${message}`);
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
warn: (message) => {
|
|
47
|
+
if (this._options.debug) {
|
|
48
|
+
console.warn(`[CodeSolverSDK] ⚠️ ${message}`);
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
error: (message) => {
|
|
52
|
+
console.error(`[CodeSolverSDK] 🔴 ${message}`);
|
|
53
|
+
},
|
|
54
|
+
debug: (message) => {
|
|
55
|
+
if (this._options.debug === 'verbose') {
|
|
56
|
+
console.debug(`[CodeSolverSDK] 🔍 ${message}`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
};
|
|
39
60
|
this._options = {
|
|
40
61
|
...options,
|
|
41
62
|
mode: options.mode || 'auto'
|
|
@@ -87,9 +108,9 @@ export class CodeSolverSDK {
|
|
|
87
108
|
this.wsClient = new CodeSolverWebSocketClient(wsURL, {
|
|
88
109
|
apiKey: this._options.apiKey,
|
|
89
110
|
headers: this._options.headers,
|
|
90
|
-
autoReconnect: this.wsConfig.reconnect,
|
|
91
|
-
maxRetries: this.wsConfig.reconnectAttempts,
|
|
92
|
-
retryDelay: this.wsConfig.reconnectDelay,
|
|
111
|
+
autoReconnect: this.wsConfig.reconnect !== false,
|
|
112
|
+
maxRetries: this.wsConfig.reconnectAttempts || 5,
|
|
113
|
+
retryDelay: this.wsConfig.reconnectDelay || 1000,
|
|
93
114
|
rejectUnauthorized: this.wsConfig.rejectUnauthorized
|
|
94
115
|
});
|
|
95
116
|
}
|
|
@@ -274,6 +295,11 @@ export class CodeSolverSDK {
|
|
|
274
295
|
async connect() {
|
|
275
296
|
try {
|
|
276
297
|
const wsClient = this.getWebSocketClient();
|
|
298
|
+
// Проверяем доступность сервера перед подключением
|
|
299
|
+
const serverAvailable = await this.checkHealth().catch(() => false);
|
|
300
|
+
if (!serverAvailable) {
|
|
301
|
+
this.logger.warn('Сервер недоступен, WebSocket подключение может быть нестабильным');
|
|
302
|
+
}
|
|
277
303
|
// Подключаемся к обоим пространствам имен
|
|
278
304
|
await wsClient.connectToReasoning();
|
|
279
305
|
await wsClient.connectToIndexing();
|