solver-sdk 2.0.2 → 2.1.0
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/api/chat-api/index.js +205 -171
- package/dist/cjs/api/chat-api/index.js.map +1 -1
- package/dist/cjs/api/chat-api/models.js +1 -1
- package/dist/cjs/api/chat-api/stream-utils.js +139 -151
- package/dist/cjs/api/chat-api/stream-utils.js.map +1 -1
- package/dist/cjs/constants/websocket-events.constants.js +1 -1
- package/dist/cjs/constants/websocket-events.constants.js.map +1 -1
- package/dist/cjs/index.js +2 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/utils/message-helpers.js +212 -0
- package/dist/cjs/utils/message-helpers.js.map +1 -0
- package/dist/cjs/ws/filesystem-ws-client.js +0 -10
- package/dist/cjs/ws/filesystem-ws-client.js.map +1 -1
- package/dist/esm/api/chat-api/index.js +207 -151
- package/dist/esm/api/chat-api/index.js.map +1 -1
- package/dist/esm/api/chat-api/models.js +1 -1
- package/dist/esm/api/chat-api/stream-utils.js +139 -151
- package/dist/esm/api/chat-api/stream-utils.js.map +1 -1
- package/dist/esm/constants/websocket-events.constants.js +1 -1
- package/dist/esm/constants/websocket-events.constants.js.map +1 -1
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/utils/message-helpers.js +199 -0
- package/dist/esm/utils/message-helpers.js.map +1 -0
- package/dist/esm/ws/filesystem-ws-client.js +0 -10
- package/dist/esm/ws/filesystem-ws-client.js.map +1 -1
- package/dist/types/api/chat-api/index.d.ts +23 -8
- package/dist/types/api/chat-api/index.d.ts.map +1 -1
- package/dist/types/api/chat-api/interfaces.d.ts +125 -8
- package/dist/types/api/chat-api/interfaces.d.ts.map +1 -1
- package/dist/types/api/chat-api/models.d.ts +163 -43
- package/dist/types/api/chat-api/models.d.ts.map +1 -1
- package/dist/types/api/chat-api/stream-utils.d.ts +19 -16
- package/dist/types/api/chat-api/stream-utils.d.ts.map +1 -1
- package/dist/types/constants/websocket-events.constants.d.ts +2 -2
- package/dist/types/constants/websocket-events.constants.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/utils/message-helpers.d.ts +84 -0
- package/dist/types/utils/message-helpers.d.ts.map +1 -0
- package/dist/types/ws/filesystem-ws-client.d.ts +0 -2
- package/dist/types/ws/filesystem-ws-client.d.ts.map +1 -1
- package/docs/API_REFERENCE.md +38 -166
- package/docs/AUTHENTICATION.md +37 -59
- package/docs/ERROR_HANDLING.md +124 -191
- package/docs/INTEGRATION_EXAMPLES.md +38 -52
- package/docs/PING_PONG.md +79 -178
- package/docs/README.md +7 -3
- package/docs/WEBSOCKET.md +66 -37
- package/package.json +7 -2
- package/docs/advanced/PING_PONG.md +0 -212
package/docs/PING_PONG.md
CHANGED
|
@@ -1,212 +1,113 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Механизм Ping/Pong для WebSocket
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Для поддержания активных WebSocket соединений и проверки их состояния SDK использует механизм ping/pong.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Что такое ping/pong?
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Ping/pong - это механизм отправки специальных сообщений между клиентом и сервером для проверки активности соединения.
|
|
8
|
+
Клиент периодически отправляет сообщение "ping", на которое сервер должен ответить сообщением "pong".
|
|
9
|
+
Если ответа нет в течение определенного времени, соединение считается разорванным.
|
|
8
10
|
|
|
9
|
-
|
|
10
|
-
2. **Измерения времени отклика (Round Trip Time, RTT)** - мониторинг качества соединения
|
|
11
|
-
3. **Сбора статистики соединения** - для диагностики и отладки
|
|
12
|
-
4. **Автоматического обнаружения проблем** - уведомление о потере соединения
|
|
11
|
+
## Как это работает в SDK?
|
|
13
12
|
|
|
14
|
-
|
|
13
|
+
SDK автоматически настраивает и управляет ping/pong механизмом, когда вы используете следующие высокоуровневые методы:
|
|
15
14
|
|
|
16
|
-
```
|
|
17
|
-
|
|
15
|
+
```javascript
|
|
16
|
+
// Подключение к WebSocket пространствам имен
|
|
17
|
+
await sdk.connect(); // Подключается ко всем пространствам имен
|
|
18
18
|
|
|
19
|
-
//
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
19
|
+
// Или более специфичные подключения
|
|
20
|
+
await sdk.reasoning.connectWebSocket(reasoningId);
|
|
21
|
+
await sdk.dependencies.connectWebSocket(projectId);
|
|
22
|
+
await sdk.projects.connectWebSocket();
|
|
23
|
+
```
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
const wsClient = sdk.getWebSocketClient();
|
|
25
|
+
### Настройка ping/pong
|
|
27
26
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
await wsClient.connectToIndexing();
|
|
27
|
+
По умолчанию SDK использует следующие настройки:
|
|
28
|
+
- Интервал ping: 25 секунд
|
|
29
|
+
- Таймаут ожидания pong: 60 секунд
|
|
32
30
|
|
|
33
|
-
|
|
34
|
-
// параметры: интервал отправки в мс (по умолчанию 30000) и порог таймаута (по умолчанию 3)
|
|
35
|
-
wsClient.enablePingPong(10000, 3);
|
|
31
|
+
Эти настройки можно изменить при инициализации SDK:
|
|
36
32
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
33
|
+
```javascript
|
|
34
|
+
const sdk = new CodeSolverSDK({
|
|
35
|
+
baseURL: 'https://api.example.com',
|
|
36
|
+
apiKey: 'your-api-key',
|
|
37
|
+
websocket: {
|
|
38
|
+
pingInterval: 30000, // 30 секунд
|
|
39
|
+
pingTimeout: 90000 // 90 секунд
|
|
40
|
+
}
|
|
44
41
|
});
|
|
45
42
|
```
|
|
46
43
|
|
|
47
|
-
|
|
44
|
+
### Преимущества автоматического ping/pong
|
|
48
45
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
46
|
+
1. **Обнаружение разрывов соединения**: Если сервер не отвечает на ping, SDK обнаружит разрыв соединения.
|
|
47
|
+
2. **Предотвращение тайм-аутов**: Регулярные ping/pong сообщения поддерживают соединение активным и предотвращают тайм-ауты на промежуточных серверах и брандмауэрах.
|
|
48
|
+
3. **Автоматическое переподключение**: SDK может автоматически переподключаться при обнаружении разрыва соединения.
|
|
52
49
|
|
|
53
|
-
|
|
54
|
-
wsClient.disablePingPong(WebSocketNamespace.REASONING);
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
## Получение статистики ping/pong
|
|
58
|
-
|
|
59
|
-
```typescript
|
|
60
|
-
// Получение статистики для всех пространств имен
|
|
61
|
-
const allStats = wsClient.getPingStats();
|
|
62
|
-
console.log('Статистика для всех соединений:', allStats);
|
|
63
|
-
|
|
64
|
-
// Получение статистики для конкретного пространства имен
|
|
65
|
-
const reasoningStats = wsClient.getPingStats(WebSocketNamespace.REASONING);
|
|
66
|
-
console.log('Статистика для reasoning:', reasoningStats);
|
|
67
|
-
|
|
68
|
-
// Пример содержимого статистики:
|
|
69
|
-
// {
|
|
70
|
-
// namespace: '/reasoning',
|
|
71
|
-
// socketId: 'socket-id-123',
|
|
72
|
-
// pingSent: 10, // Количество отправленных ping
|
|
73
|
-
// pongReceived: 10, // Количество полученных pong
|
|
74
|
-
// averageRtt: 15.5, // Среднее время отклика (мс)
|
|
75
|
-
// minRtt: 5, // Минимальное время отклика (мс)
|
|
76
|
-
// maxRtt: 45, // Максимальное время отклика (мс)
|
|
77
|
-
// lastRtt: 12, // Последнее измеренное время отклика (мс)
|
|
78
|
-
// lastPongTimestamp: 1712345678901, // Timestamp последнего полученного pong
|
|
79
|
-
// isConnected: true // Текущий статус соединения
|
|
80
|
-
// }
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
## Ручная отправка ping/pong
|
|
50
|
+
### События ping/pong
|
|
84
51
|
|
|
85
|
-
|
|
52
|
+
SDK предоставляет события для отслеживания состояния ping/pong:
|
|
86
53
|
|
|
87
|
-
```
|
|
88
|
-
//
|
|
89
|
-
|
|
90
|
-
|
|
54
|
+
```javascript
|
|
55
|
+
// Настройка обработчиков для всех WebSocket соединений
|
|
56
|
+
sdk.on('connection_timeout', async (data) => {
|
|
57
|
+
console.warn(`Соединение с ${data.namespace} истекло по тайм-ауту`);
|
|
58
|
+
// Автоматически SDK попытается переподключиться
|
|
91
59
|
});
|
|
92
|
-
|
|
93
|
-
// Добавление обработчика для pong-ответов
|
|
94
|
-
wsClient.on('connection_pong', (data) => {
|
|
95
|
-
const rtt = Date.now() - data.echo;
|
|
96
|
-
console.log(`Получен pong, RTT: ${rtt}ms`);
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
// Альтернативно, можно использовать готовый обработчик
|
|
100
|
-
wsClient.on('connection_pong', wsClient.getPongHandler());
|
|
101
60
|
```
|
|
102
61
|
|
|
103
|
-
##
|
|
62
|
+
## Рекомендуемые практики
|
|
104
63
|
|
|
105
|
-
|
|
106
|
-
// Обработка события таймаута соединения
|
|
107
|
-
wsClient.onPingPongEvent('connection_timeout', async (data) => {
|
|
108
|
-
console.log(`Соединение потеряно для ${data.namespace}`);
|
|
109
|
-
|
|
110
|
-
// Попытка переподключения
|
|
111
|
-
try {
|
|
112
|
-
// Отключаемся от проблемного пространства имен
|
|
113
|
-
wsClient.disconnect(data.namespace);
|
|
114
|
-
|
|
115
|
-
// Пауза перед повторным подключением
|
|
116
|
-
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
117
|
-
|
|
118
|
-
// Переподключаемся
|
|
119
|
-
switch (data.namespace) {
|
|
120
|
-
case WebSocketNamespace.REASONING:
|
|
121
|
-
await wsClient.connectToReasoning();
|
|
122
|
-
break;
|
|
123
|
-
case WebSocketNamespace.DEPENDENCIES:
|
|
124
|
-
await wsClient.connectToDependencies();
|
|
125
|
-
break;
|
|
126
|
-
case WebSocketNamespace.INDEXING:
|
|
127
|
-
await wsClient.connectToIndexing();
|
|
128
|
-
break;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
console.log(`Успешно переподключились к ${data.namespace}`);
|
|
132
|
-
} catch (error) {
|
|
133
|
-
console.error(`Ошибка при переподключении к ${data.namespace}:`, error);
|
|
134
|
-
}
|
|
135
|
-
});
|
|
136
|
-
```
|
|
64
|
+
1. **Используйте высокоуровневые методы подключения**: Самый простой способ обеспечить надежное соединение - использовать встроенные высокоуровневые методы SDK.
|
|
137
65
|
|
|
138
|
-
|
|
66
|
+
2. **Включите автоматическое переподключение**: При инициализации SDK установите параметры:
|
|
67
|
+
```javascript
|
|
68
|
+
const sdk = new CodeSolverSDK({
|
|
69
|
+
baseURL: 'https://api.example.com',
|
|
70
|
+
apiKey: 'your-api-key',
|
|
71
|
+
websocket: {
|
|
72
|
+
reconnect: true,
|
|
73
|
+
reconnectAttempts: 5,
|
|
74
|
+
reconnectDelay: 2000
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
```
|
|
139
78
|
|
|
140
|
-
|
|
79
|
+
3. **Обрабатывайте события тайм-аута**: Регистрируйте обработчики событий, чтобы знать, когда соединение было потеряно.
|
|
141
80
|
|
|
142
|
-
|
|
81
|
+
4. **Правильно завершайте соединения**: Перед закрытием приложения вызывайте метод для отключения:
|
|
82
|
+
```javascript
|
|
83
|
+
// Отключение перед закрытием приложения
|
|
84
|
+
await sdk.disconnect();
|
|
85
|
+
```
|
|
143
86
|
|
|
144
|
-
|
|
87
|
+
## Пример обработки тайм-аутов
|
|
145
88
|
|
|
146
|
-
|
|
89
|
+
```javascript
|
|
90
|
+
// Инициализация SDK
|
|
91
|
+
const sdk = new CodeSolverSDK({
|
|
92
|
+
baseURL: 'https://api.example.com',
|
|
93
|
+
apiKey: 'your-api-key'
|
|
94
|
+
});
|
|
147
95
|
|
|
148
|
-
|
|
96
|
+
// Подключение к WebSocket
|
|
97
|
+
await sdk.connect();
|
|
149
98
|
|
|
150
|
-
|
|
99
|
+
// Обработка события тайм-аута
|
|
100
|
+
sdk.on('connection_timeout', handleConnectionTimeout);
|
|
151
101
|
|
|
152
|
-
|
|
153
|
-
async function
|
|
154
|
-
|
|
155
|
-
baseURL: 'https://api.example.com',
|
|
156
|
-
apiKey: 'your-api-key',
|
|
157
|
-
websocket: {
|
|
158
|
-
reconnect: true,
|
|
159
|
-
reconnectAttempts: 5,
|
|
160
|
-
reconnectDelay: 2000
|
|
161
|
-
}
|
|
162
|
-
});
|
|
163
|
-
|
|
164
|
-
const wsClient = sdk.getWebSocketClient();
|
|
165
|
-
|
|
166
|
-
// Подключаемся ко всем пространствам имен
|
|
167
|
-
await wsClient.connectToReasoning();
|
|
168
|
-
await wsClient.connectToDependencies();
|
|
169
|
-
await wsClient.connectToIndexing();
|
|
102
|
+
// Функция обработки тайм-аута
|
|
103
|
+
async function handleConnectionTimeout(data) {
|
|
104
|
+
console.warn(`Соединение с ${data.namespace} прервано по тайм-ауту`);
|
|
170
105
|
|
|
171
|
-
//
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
// Регистрируем обработчик для события таймаута
|
|
175
|
-
wsClient.onPingPongEvent('connection_timeout', handleConnectionTimeout);
|
|
176
|
-
|
|
177
|
-
// Периодически проверяем статистику соединений
|
|
178
|
-
const statsInterval = setInterval(() => {
|
|
179
|
-
const stats = wsClient.getPingStats();
|
|
180
|
-
|
|
181
|
-
// Анализируем статистику
|
|
182
|
-
for (const stat of stats) {
|
|
183
|
-
if (stat.averageRtt > 500) {
|
|
184
|
-
console.warn(`Высокая задержка для ${stat.namespace}: ${stat.averageRtt}ms`);
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
}, 60000); // Проверка каждую минуту
|
|
188
|
-
|
|
189
|
-
// Функция для обработки таймаута соединения
|
|
190
|
-
async function handleConnectionTimeout(data) {
|
|
191
|
-
console.error(`Соединение потеряно для ${data.namespace}`);
|
|
192
|
-
|
|
193
|
-
// Логика переподключения...
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
// Функция для корректного закрытия соединений
|
|
197
|
-
function cleanup() {
|
|
198
|
-
clearInterval(statsInterval);
|
|
199
|
-
wsClient.disablePingPong();
|
|
200
|
-
wsClient.disconnectAll();
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
// Возвращаем функцию очистки
|
|
204
|
-
return cleanup;
|
|
106
|
+
// Вы можете добавить свою логику обработки
|
|
107
|
+
// Например, уведомить пользователя или попытаться переподключиться
|
|
205
108
|
}
|
|
206
109
|
|
|
207
|
-
//
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
// При закрытии приложения
|
|
211
|
-
window.addEventListener('beforeunload', cleanup);
|
|
110
|
+
// Перед закрытием приложения
|
|
111
|
+
// Корректно отключаемся
|
|
112
|
+
await sdk.disconnect();
|
|
212
113
|
```
|
package/docs/README.md
CHANGED
|
@@ -38,6 +38,9 @@ if (!isAvailable) {
|
|
|
38
38
|
return;
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
+
// Единое подключение ко всем WebSocket сервисам
|
|
42
|
+
await sdk.connect();
|
|
43
|
+
|
|
41
44
|
// Создание проекта
|
|
42
45
|
const project = await sdk.projects.createProject(
|
|
43
46
|
'Мой проект',
|
|
@@ -88,9 +91,10 @@ console.log(chatResponse.answer);
|
|
|
88
91
|
Подробная документация доступна в следующих файлах:
|
|
89
92
|
|
|
90
93
|
- [API Reference](./API_REFERENCE.md) - подробное описание всех методов SDK
|
|
91
|
-
- [
|
|
92
|
-
- [
|
|
93
|
-
- [
|
|
94
|
+
- [WebSocket](./WEBSOCKET.md) - примеры работы с WebSocket соединениями
|
|
95
|
+
- [Примеры интеграции](./INTEGRATION_EXAMPLES.md) - примеры интеграции с VS Code/Cursor и другими приложениями
|
|
96
|
+
- [Аутентификация](./AUTHENTICATION.md) - информация по процессу аутентификации
|
|
97
|
+
- [Обработка ошибок](./ERROR_HANDLING.md) - руководство по обработке ошибок
|
|
94
98
|
|
|
95
99
|
## Поддерживаемые платформы
|
|
96
100
|
|
package/docs/WEBSOCKET.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Работа с WebSocket в Solver SDK
|
|
2
2
|
|
|
3
|
-
Эта документация описывает, как использовать WebSocket соединения через Solver SDK для работы в реальном времени.
|
|
3
|
+
Эта документация описывает, как использовать WebSocket соединения через высокоуровневые методы Solver SDK для работы в реальном времени.
|
|
4
4
|
|
|
5
5
|
## Инициализация SDK
|
|
6
6
|
|
|
@@ -10,13 +10,43 @@ const { CodeSolverSDK } = require('solver-sdk');
|
|
|
10
10
|
// Создаем экземпляр SDK с настройками
|
|
11
11
|
const sdk = new CodeSolverSDK({
|
|
12
12
|
baseURL: 'https://api.example.com',
|
|
13
|
-
apiKey: 'your-api-key'
|
|
13
|
+
apiKey: 'your-api-key',
|
|
14
|
+
websocket: {
|
|
15
|
+
reconnect: true, // Автоматическое переподключение при разрыве соединения
|
|
16
|
+
reconnectAttempts: 5, // Максимальное количество попыток переподключения
|
|
17
|
+
reconnectDelay: 3000 // Задержка между попытками (мс)
|
|
18
|
+
}
|
|
14
19
|
});
|
|
20
|
+
|
|
21
|
+
// Единое подключение ко всем сервисам
|
|
22
|
+
await sdk.connect();
|
|
15
23
|
```
|
|
16
24
|
|
|
17
|
-
## Работа с
|
|
25
|
+
## Работа с индексацией проектов
|
|
26
|
+
|
|
27
|
+
```javascript
|
|
28
|
+
// Подключение к WebSocket для проектов
|
|
29
|
+
await sdk.projects.connectWebSocket();
|
|
18
30
|
|
|
19
|
-
|
|
31
|
+
// Отслеживание прогресса индексации
|
|
32
|
+
sdk.projects.on('indexing_progress', (data) => {
|
|
33
|
+
console.log(`Прогресс индексации: ${data.progress}%`);
|
|
34
|
+
console.log(`Обработано файлов: ${data.processedFiles} из ${data.totalFiles}`);
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
// Завершение индексации
|
|
38
|
+
sdk.projects.on('indexing_complete', (data) => {
|
|
39
|
+
console.log('Индексация завершена!', data.success ? 'Успешно' : 'С ошибками');
|
|
40
|
+
|
|
41
|
+
// Отключение после завершения
|
|
42
|
+
sdk.projects.disconnectWebSocket();
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
// Запуск индексации проекта
|
|
46
|
+
await sdk.projects.indexProject('project-id');
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Работа с рассуждениями (Reasoning)
|
|
20
50
|
|
|
21
51
|
```javascript
|
|
22
52
|
// Создание рассуждения
|
|
@@ -25,7 +55,7 @@ const reasoning = await sdk.reasoning.createReasoning({
|
|
|
25
55
|
query: 'Объясни этот проект'
|
|
26
56
|
});
|
|
27
57
|
|
|
28
|
-
// Подключение к WebSocket
|
|
58
|
+
// Подключение к WebSocket для рассуждений
|
|
29
59
|
await sdk.reasoning.connectWebSocket(reasoning.id);
|
|
30
60
|
|
|
31
61
|
// Подписка на события
|
|
@@ -76,27 +106,6 @@ const response = await sdk.chat.streamChatWithThinking(
|
|
|
76
106
|
);
|
|
77
107
|
```
|
|
78
108
|
|
|
79
|
-
## Мониторинг индексации проектов
|
|
80
|
-
|
|
81
|
-
```javascript
|
|
82
|
-
// Подключение к WebSocket для проектов
|
|
83
|
-
await sdk.projects.connectWebSocket();
|
|
84
|
-
|
|
85
|
-
// Отслеживание прогресса индексации
|
|
86
|
-
sdk.projects.on('indexing_progress', (data) => {
|
|
87
|
-
console.log(`Прогресс индексации: ${data.progress}%`);
|
|
88
|
-
console.log(`Обработано файлов: ${data.processedFiles} из ${data.totalFiles}`);
|
|
89
|
-
});
|
|
90
|
-
|
|
91
|
-
// Завершение индексации
|
|
92
|
-
sdk.projects.on('indexing_complete', (data) => {
|
|
93
|
-
console.log('Индексация завершена!', data.success ? 'Успешно' : 'С ошибками');
|
|
94
|
-
|
|
95
|
-
// Отключение после завершения
|
|
96
|
-
sdk.projects.disconnectWebSocket();
|
|
97
|
-
});
|
|
98
|
-
```
|
|
99
|
-
|
|
100
109
|
## Работа с зависимостями
|
|
101
110
|
|
|
102
111
|
```javascript
|
|
@@ -112,21 +121,41 @@ sdk.dependencies.on('dependency_update', (data) => {
|
|
|
112
121
|
await sdk.dependencies.disconnectWebSocket();
|
|
113
122
|
```
|
|
114
123
|
|
|
115
|
-
##
|
|
124
|
+
## Автоматическая авторизация
|
|
125
|
+
|
|
126
|
+
**Важно:** Авторизация происходит автоматически, если указан `apiKey` при инициализации SDK. Отдельных действий для авторизации не требуется.
|
|
127
|
+
|
|
128
|
+
## Обработка ошибок и переподключение
|
|
129
|
+
|
|
130
|
+
Используйте параметры `reconnect` и `reconnectAttempts` для автоматического переподключения при разрыве соединения:
|
|
116
131
|
|
|
117
132
|
```javascript
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
133
|
+
// Инициализация SDK с настройками переподключения
|
|
134
|
+
const sdk = new CodeSolverSDK({
|
|
135
|
+
baseURL: 'https://api.example.com',
|
|
136
|
+
apiKey: 'your-api-key',
|
|
137
|
+
websocket: {
|
|
138
|
+
reconnect: true,
|
|
139
|
+
reconnectAttempts: 5,
|
|
140
|
+
reconnectDelay: 3000
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
// Проверка доступности сервера перед началом работы
|
|
145
|
+
const isHealthy = await sdk.checkHealth();
|
|
146
|
+
if (!isHealthy) {
|
|
147
|
+
console.error('API недоступен');
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// Попытка подключения
|
|
152
|
+
const connected = await sdk.connect();
|
|
153
|
+
if (!connected) {
|
|
154
|
+
console.warn('WebSocket соединение не установлено, работа будет ограничена');
|
|
126
155
|
}
|
|
127
156
|
```
|
|
128
157
|
|
|
129
|
-
## Основные события
|
|
158
|
+
## Основные события WebSocket
|
|
130
159
|
|
|
131
160
|
| Событие | Описание |
|
|
132
161
|
|---------|----------|
|
|
@@ -136,4 +165,4 @@ try {
|
|
|
136
165
|
| `message_stop` | Конец сообщения |
|
|
137
166
|
| `indexing_progress` | Прогресс индексации |
|
|
138
167
|
| `indexing_complete` | Завершение индексации |
|
|
139
|
-
| `error` | Уведомление об ошибке |
|
|
168
|
+
| `error` | Уведомление об ошибке |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "solver-sdk",
|
|
3
|
-
"version": "2.0
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"description": "SDK для интеграции с Code Solver Backend API",
|
|
5
5
|
"main": "dist/cjs/index.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
@@ -34,6 +34,11 @@
|
|
|
34
34
|
"build:esm": "tsc -p tsconfig.esm.json",
|
|
35
35
|
"build:types": "tsc -p tsconfig.types.json",
|
|
36
36
|
"test": "cross-env NODE_OPTIONS=--experimental-vm-modules jest",
|
|
37
|
+
"test:quick": "node quick-test.js",
|
|
38
|
+
"test:unit": "npx jest sdk-test/unit/ --testMatch=\"**/sdk-test/unit/**/*.test.js\"",
|
|
39
|
+
"test:mock": "./sdk-test/run-integration-tests.sh mock-only",
|
|
40
|
+
"test:integration": "./sdk-test/run-integration-tests.sh without-backend",
|
|
41
|
+
"test:integration:full": "./sdk-test/run-integration-tests.sh with-backend",
|
|
37
42
|
"test:node": "cross-env NODE_OPTIONS=--experimental-vm-modules jest tests/node",
|
|
38
43
|
"test:browser": "cross-env NODE_OPTIONS=--experimental-vm-modules jest tests/browser",
|
|
39
44
|
"test:indexing": "NODE_TLS_REJECT_UNAUTHORIZED=0 node --experimental-vm-modules node_modules/.bin/jest tests/unit/indexing",
|
|
@@ -97,7 +102,7 @@
|
|
|
97
102
|
"jest-junit": "^16.0.0",
|
|
98
103
|
"rollup": "^4.12.0",
|
|
99
104
|
"rollup-plugin-dts": "^6.1.1",
|
|
100
|
-
"rollup
|
|
105
|
+
"@rollup/plugin-terser": "^0.4.4",
|
|
101
106
|
"ts-jest": "^29.1.2",
|
|
102
107
|
"typescript": "^5.7.3",
|
|
103
108
|
"ws": "^8.18.1"
|