solver-sdk 1.8.0 → 1.8.1
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/README.md +176 -468
- package/dist/cjs/api/{chat-api.js → chat-api/index.js} +77 -125
- package/dist/cjs/api/chat-api/index.js.map +1 -0
- package/dist/cjs/api/chat-api/interfaces.js +3 -0
- package/dist/cjs/api/chat-api/interfaces.js.map +1 -0
- package/dist/cjs/api/chat-api/models.js +6 -0
- package/dist/cjs/api/chat-api/models.js.map +1 -0
- package/dist/cjs/api/chat-api/stream-utils.js +192 -0
- package/dist/cjs/api/chat-api/stream-utils.js.map +1 -0
- package/dist/cjs/api/chat-api/websocket-helpers.js +211 -0
- package/dist/cjs/api/chat-api/websocket-helpers.js.map +1 -0
- package/dist/cjs/api/projects-api.js +279 -5
- package/dist/cjs/api/projects-api.js.map +1 -1
- package/dist/cjs/code-solver-sdk.js +12 -17
- package/dist/cjs/code-solver-sdk.js.map +1 -1
- package/dist/cjs/constants/websocket-events.constants.js +77 -52
- package/dist/cjs/constants/websocket-events.constants.js.map +1 -1
- package/dist/cjs/utils/code-solver-websocket-client.js +87 -56
- package/dist/cjs/utils/code-solver-websocket-client.js.map +1 -1
- package/dist/cjs/utils/http-client.js +7 -0
- package/dist/cjs/utils/http-client.js.map +1 -1
- package/dist/cjs/utils/reasoning-auth-helper.js +58 -0
- package/dist/cjs/utils/reasoning-auth-helper.js.map +1 -0
- package/dist/cjs/utils/websocket-client.js +37 -10
- package/dist/cjs/utils/websocket-client.js.map +1 -1
- package/dist/esm/api/{chat-api.js → chat-api/index.js} +74 -125
- package/dist/esm/api/chat-api/index.js.map +1 -0
- package/dist/esm/api/chat-api/interfaces.js +2 -0
- package/dist/esm/api/chat-api/interfaces.js.map +1 -0
- package/dist/esm/api/chat-api/models.js +5 -0
- package/dist/esm/api/chat-api/models.js.map +1 -0
- package/dist/esm/api/chat-api/stream-utils.js +188 -0
- package/dist/esm/api/chat-api/stream-utils.js.map +1 -0
- package/dist/esm/api/chat-api/websocket-helpers.js +205 -0
- package/dist/esm/api/chat-api/websocket-helpers.js.map +1 -0
- package/dist/esm/api/projects-api.js +279 -5
- package/dist/esm/api/projects-api.js.map +1 -1
- package/dist/esm/code-solver-sdk.js +10 -15
- package/dist/esm/code-solver-sdk.js.map +1 -1
- package/dist/esm/constants/websocket-events.constants.js +76 -51
- package/dist/esm/constants/websocket-events.constants.js.map +1 -1
- package/dist/esm/utils/code-solver-websocket-client.js +87 -56
- package/dist/esm/utils/code-solver-websocket-client.js.map +1 -1
- package/dist/esm/utils/http-client.js +7 -0
- package/dist/esm/utils/http-client.js.map +1 -1
- package/dist/esm/utils/reasoning-auth-helper.js +54 -0
- package/dist/esm/utils/reasoning-auth-helper.js.map +1 -0
- package/dist/esm/utils/websocket-client.js +37 -10
- package/dist/esm/utils/websocket-client.js.map +1 -1
- package/dist/types/api/chat-api/index.d.ts +81 -0
- package/dist/types/api/chat-api/index.d.ts.map +1 -0
- package/dist/types/api/chat-api/interfaces.d.ts +47 -0
- package/dist/types/api/chat-api/interfaces.d.ts.map +1 -0
- package/dist/types/api/{chat-api.d.ts → chat-api/models.d.ts} +10 -73
- package/dist/types/api/chat-api/models.d.ts.map +1 -0
- package/dist/types/api/chat-api/stream-utils.d.ts +31 -0
- package/dist/types/api/chat-api/stream-utils.d.ts.map +1 -0
- package/dist/types/api/chat-api/websocket-helpers.d.ts +40 -0
- package/dist/types/api/chat-api/websocket-helpers.d.ts.map +1 -0
- package/dist/types/api/projects-api.d.ts +114 -1
- package/dist/types/api/projects-api.d.ts.map +1 -1
- package/dist/types/code-solver-sdk.d.ts +1 -1
- package/dist/types/code-solver-sdk.d.ts.map +1 -1
- package/dist/types/constants/websocket-events.constants.d.ts +65 -36
- package/dist/types/constants/websocket-events.constants.d.ts.map +1 -1
- package/dist/types/interfaces/http-client.d.ts +1 -1
- package/dist/types/interfaces/http-client.d.ts.map +1 -1
- package/dist/types/types/index.d.ts +8 -0
- package/dist/types/types/index.d.ts.map +1 -1
- package/dist/types/utils/code-solver-websocket-client.d.ts +44 -43
- package/dist/types/utils/code-solver-websocket-client.d.ts.map +1 -1
- package/dist/types/utils/http-client.d.ts +5 -0
- package/dist/types/utils/http-client.d.ts.map +1 -1
- package/dist/types/utils/reasoning-auth-helper.d.ts +24 -0
- package/dist/types/utils/reasoning-auth-helper.d.ts.map +1 -0
- package/dist/types/utils/websocket-client.d.ts +6 -0
- package/dist/types/utils/websocket-client.d.ts.map +1 -1
- package/docs/API_REFERENCE.md +432 -0
- package/docs/AUTHENTICATION.md +179 -0
- package/docs/ERROR_HANDLING.md +240 -0
- package/docs/INTEGRATION_EXAMPLES.md +342 -0
- package/docs/PING_PONG.md +212 -0
- package/docs/README.md +102 -0
- package/docs/WEBSOCKET.md +299 -0
- package/docs/advanced/PING_PONG.md +212 -0
- package/docs/features/THINKING.md +158 -0
- package/docs/indexing/INDEXING.md +231 -0
- package/package.json +4 -3
- package/dist/cjs/api/chat-api.js.map +0 -1
- package/dist/esm/api/chat-api.js.map +0 -1
- package/dist/types/api/chat-api.d.ts.map +0 -1
|
@@ -0,0 +1,432 @@
|
|
|
1
|
+
# API Reference
|
|
2
|
+
|
|
3
|
+
В этом документе описаны основные классы и методы SDK.
|
|
4
|
+
|
|
5
|
+
## Содержание
|
|
6
|
+
|
|
7
|
+
- [CodeSolverSDK](#codesolversdk)
|
|
8
|
+
- [ChatApi](#chatapi)
|
|
9
|
+
- [ProjectsApi](#projectsapi)
|
|
10
|
+
- [SearchApi](#searchapi)
|
|
11
|
+
- [ReasoningApi](#reasoningapi)
|
|
12
|
+
- [WebSocketClient](#websocketclient)
|
|
13
|
+
|
|
14
|
+
## CodeSolverSDK
|
|
15
|
+
|
|
16
|
+
Основной класс SDK, предоставляющий доступ ко всем API.
|
|
17
|
+
|
|
18
|
+
### Конструктор
|
|
19
|
+
|
|
20
|
+
```javascript
|
|
21
|
+
const sdk = new CodeSolverSDK(options);
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### Параметры
|
|
25
|
+
|
|
26
|
+
| Параметр | Тип | Описание | Обязательно |
|
|
27
|
+
|----------|-----|----------|-------------|
|
|
28
|
+
| `baseURL` | string | Базовый URL API | Да |
|
|
29
|
+
| `apiKey` | string | API ключ для авторизации | Нет |
|
|
30
|
+
| `wsURL` | string | URL для WebSocket соединений (если отличается от baseURL) | Нет |
|
|
31
|
+
| `timeout` | number | Таймаут для HTTP запросов (мс) | Нет |
|
|
32
|
+
| `headers` | object | Дополнительные HTTP заголовки | Нет |
|
|
33
|
+
| `websocket` | object | Настройки WebSocket соединений | Нет |
|
|
34
|
+
| `mode` | string | Режим работы SDK ('browser', 'node', 'auto') | Нет |
|
|
35
|
+
|
|
36
|
+
### Методы
|
|
37
|
+
|
|
38
|
+
#### `getWebSocketClient()`
|
|
39
|
+
|
|
40
|
+
Возвращает экземпляр WebSocket клиента для работы с соединениями.
|
|
41
|
+
|
|
42
|
+
```javascript
|
|
43
|
+
const wsClient = sdk.getWebSocketClient();
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
#### `checkHealth()`
|
|
47
|
+
|
|
48
|
+
Проверяет доступность API сервера.
|
|
49
|
+
|
|
50
|
+
```javascript
|
|
51
|
+
const isHealthy = await sdk.checkHealth();
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
#### `connect()`
|
|
55
|
+
|
|
56
|
+
Подключается к WebSocket серверу.
|
|
57
|
+
|
|
58
|
+
```javascript
|
|
59
|
+
await sdk.connect();
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
#### `disconnect()`
|
|
63
|
+
|
|
64
|
+
Отключается от WebSocket сервера.
|
|
65
|
+
|
|
66
|
+
```javascript
|
|
67
|
+
await sdk.disconnect();
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
#### `dispose()`
|
|
71
|
+
|
|
72
|
+
Освобождает ресурсы, включая WebSocket соединения.
|
|
73
|
+
|
|
74
|
+
```javascript
|
|
75
|
+
sdk.dispose();
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
#### `setApiKey(apiKey)`
|
|
79
|
+
|
|
80
|
+
Устанавливает новый API ключ для SDK.
|
|
81
|
+
|
|
82
|
+
```javascript
|
|
83
|
+
sdk.setApiKey('новый-api-ключ');
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## ChatApi
|
|
87
|
+
|
|
88
|
+
API для работы с чатом и AI-моделями.
|
|
89
|
+
|
|
90
|
+
### Методы
|
|
91
|
+
|
|
92
|
+
#### `chat(messages, options)`
|
|
93
|
+
|
|
94
|
+
Отправляет запрос чата и возвращает полный ответ.
|
|
95
|
+
|
|
96
|
+
```javascript
|
|
97
|
+
const response = await sdk.chat.chat(
|
|
98
|
+
messages,
|
|
99
|
+
options
|
|
100
|
+
);
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
##### Параметры
|
|
104
|
+
|
|
105
|
+
| Параметр | Тип | Описание | Обязательно |
|
|
106
|
+
|----------|-----|----------|-------------|
|
|
107
|
+
| `messages` | Array | Массив сообщений для отправки модели | Да |
|
|
108
|
+
| `options` | Object | Параметры запроса (модель, temperature и т.д.) | Нет |
|
|
109
|
+
|
|
110
|
+
#### `streamChatWithThinking(messages, options, onEvent)`
|
|
111
|
+
|
|
112
|
+
Отправляет запрос чата в потоковом режиме с получением "мышления" модели.
|
|
113
|
+
|
|
114
|
+
```javascript
|
|
115
|
+
const response = await sdk.chat.streamChatWithThinking(
|
|
116
|
+
messages,
|
|
117
|
+
{
|
|
118
|
+
model: 'claude-3-7-sonnet-20240229',
|
|
119
|
+
thinking: true,
|
|
120
|
+
temperature: 0.7
|
|
121
|
+
},
|
|
122
|
+
(eventType, data) => {
|
|
123
|
+
if (eventType === 'thinking_delta') {
|
|
124
|
+
console.log('Мышление:', data.thinking);
|
|
125
|
+
} else if (eventType === 'text_delta') {
|
|
126
|
+
console.log('Ответ:', data.text);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
);
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
#### `connectWebSocket()`
|
|
133
|
+
|
|
134
|
+
Создает новое WebSocket соединение для потокового чата.
|
|
135
|
+
|
|
136
|
+
```javascript
|
|
137
|
+
await sdk.chat.connectWebSocket();
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
#### `getModels()`
|
|
141
|
+
|
|
142
|
+
Получает список доступных моделей.
|
|
143
|
+
|
|
144
|
+
```javascript
|
|
145
|
+
const models = await sdk.chat.getModels();
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## ProjectsApi
|
|
149
|
+
|
|
150
|
+
API для работы с проектами.
|
|
151
|
+
|
|
152
|
+
### Методы
|
|
153
|
+
|
|
154
|
+
#### `getAllProjects()`
|
|
155
|
+
|
|
156
|
+
Получает список всех проектов.
|
|
157
|
+
|
|
158
|
+
```javascript
|
|
159
|
+
const projects = await sdk.projects.getAllProjects();
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
#### `getProject(projectId)`
|
|
163
|
+
|
|
164
|
+
Получает информацию о проекте по ID.
|
|
165
|
+
|
|
166
|
+
```javascript
|
|
167
|
+
const project = await sdk.projects.getProject('project-id');
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
#### `createProject(name, path, options)`
|
|
171
|
+
|
|
172
|
+
Создаёт новый проект.
|
|
173
|
+
|
|
174
|
+
```javascript
|
|
175
|
+
const project = await sdk.projects.createProject('Мой проект', '/path/to/project', {
|
|
176
|
+
excludePatterns: ['node_modules', '.git']
|
|
177
|
+
});
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
#### `updateProject(projectId, data)`
|
|
181
|
+
|
|
182
|
+
Обновляет проект.
|
|
183
|
+
|
|
184
|
+
```javascript
|
|
185
|
+
await sdk.projects.updateProject('project-id', { name: 'Новое имя' });
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
#### `deleteProject(projectId)`
|
|
189
|
+
|
|
190
|
+
Удаляет проект.
|
|
191
|
+
|
|
192
|
+
```javascript
|
|
193
|
+
await sdk.projects.deleteProject('project-id');
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
#### `indexProject(projectId)`
|
|
197
|
+
|
|
198
|
+
Запускает индексацию проекта.
|
|
199
|
+
|
|
200
|
+
```javascript
|
|
201
|
+
await sdk.projects.indexProject('project-id');
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
#### `getOrCreateProject(path, name)`
|
|
205
|
+
|
|
206
|
+
Получает существующий проект по пути или создает новый, если проект не найден.
|
|
207
|
+
|
|
208
|
+
```javascript
|
|
209
|
+
const project = await sdk.projects.getOrCreateProject('/path/to/project', 'Название проекта');
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
#### `indexProjectByPath(path, options)`
|
|
213
|
+
|
|
214
|
+
Индексирует проект по указанному пути. Если проект не существует, он будет создан автоматически.
|
|
215
|
+
|
|
216
|
+
```javascript
|
|
217
|
+
const result = await sdk.projects.indexProjectByPath('/path/to/project', {
|
|
218
|
+
name: 'Название проекта',
|
|
219
|
+
forceFull: true, // принудительная полная индексация
|
|
220
|
+
excludePatterns: ['node_modules', '.git'] // паттерны для исключения
|
|
221
|
+
});
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
#### `createAndIndexProject(path, options)`
|
|
225
|
+
|
|
226
|
+
Комбинированный метод для создания (если не существует) и индексации проекта в одной операции.
|
|
227
|
+
|
|
228
|
+
```javascript
|
|
229
|
+
const result = await sdk.projects.createAndIndexProject('/path/to/project', {
|
|
230
|
+
name: 'Название проекта',
|
|
231
|
+
forceFull: false,
|
|
232
|
+
excludePatterns: ['node_modules', '.git']
|
|
233
|
+
});
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
#### `connectWebSocket()`
|
|
237
|
+
|
|
238
|
+
Подключается к WebSocket для отслеживания индексации.
|
|
239
|
+
|
|
240
|
+
```javascript
|
|
241
|
+
await sdk.projects.connectWebSocket();
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
#### `disconnectWebSocket()`
|
|
245
|
+
|
|
246
|
+
Отключается от WebSocket индексации.
|
|
247
|
+
|
|
248
|
+
```javascript
|
|
249
|
+
await sdk.projects.disconnectWebSocket();
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
#### `on(event, callback)`
|
|
253
|
+
|
|
254
|
+
Добавляет обработчик события для индексации.
|
|
255
|
+
|
|
256
|
+
```javascript
|
|
257
|
+
sdk.projects.on('indexing_progress', (data) => {
|
|
258
|
+
console.log(`Прогресс: ${data.progress}%`);
|
|
259
|
+
});
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
#### `stopIndexing(projectId)`
|
|
263
|
+
|
|
264
|
+
Останавливает индексацию проекта.
|
|
265
|
+
|
|
266
|
+
```javascript
|
|
267
|
+
await sdk.projects.stopIndexing('project-id');
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
#### `getIndexingStatus(projectId)`
|
|
271
|
+
|
|
272
|
+
Получает статус индексации проекта.
|
|
273
|
+
|
|
274
|
+
```javascript
|
|
275
|
+
const status = await sdk.projects.getIndexingStatus('project-id');
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
## SearchApi
|
|
279
|
+
|
|
280
|
+
API для поиска кода.
|
|
281
|
+
|
|
282
|
+
### Методы
|
|
283
|
+
|
|
284
|
+
#### `searchCode(projectId, options)`
|
|
285
|
+
|
|
286
|
+
Выполняет поиск кода в проекте.
|
|
287
|
+
|
|
288
|
+
```javascript
|
|
289
|
+
const results = await sdk.search.searchCode('project-id', {
|
|
290
|
+
query: 'function example',
|
|
291
|
+
limit: 10
|
|
292
|
+
});
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
#### `semanticSearch(projectId, options)`
|
|
296
|
+
|
|
297
|
+
Выполняет семантический поиск в проекте.
|
|
298
|
+
|
|
299
|
+
```javascript
|
|
300
|
+
const results = await sdk.search.semanticSearch('project-id', {
|
|
301
|
+
query: 'функция для обработки HTTP запросов',
|
|
302
|
+
limit: 10,
|
|
303
|
+
includeContent: true
|
|
304
|
+
});
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
## ReasoningApi
|
|
308
|
+
|
|
309
|
+
API для работы с рассуждениями.
|
|
310
|
+
|
|
311
|
+
### Методы
|
|
312
|
+
|
|
313
|
+
#### `createReasoning(options)`
|
|
314
|
+
|
|
315
|
+
Создаёт новое рассуждение.
|
|
316
|
+
|
|
317
|
+
```javascript
|
|
318
|
+
const reasoning = await sdk.reasoning.createReasoning({
|
|
319
|
+
projectId: 'project-id',
|
|
320
|
+
query: 'Объясни этот проект'
|
|
321
|
+
});
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
#### `getReasoning(reasoningId)`
|
|
325
|
+
|
|
326
|
+
Получает информацию о рассуждении.
|
|
327
|
+
|
|
328
|
+
```javascript
|
|
329
|
+
const reasoning = await sdk.reasoning.getReasoning('reasoning-id');
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
#### `connectWebSocket(reasoningId)`
|
|
333
|
+
|
|
334
|
+
Подключается к WebSocket для отслеживания рассуждений.
|
|
335
|
+
|
|
336
|
+
```javascript
|
|
337
|
+
await sdk.reasoning.connectWebSocket('reasoning-id');
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
#### `startReasoning(reasoningId)`
|
|
341
|
+
|
|
342
|
+
Запускает процесс рассуждения.
|
|
343
|
+
|
|
344
|
+
```javascript
|
|
345
|
+
await sdk.reasoning.startReasoning('reasoning-id');
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
#### `on(event, callback)`
|
|
349
|
+
|
|
350
|
+
Добавляет обработчик события для рассуждений.
|
|
351
|
+
|
|
352
|
+
```javascript
|
|
353
|
+
sdk.reasoning.on('thinking', (data) => {
|
|
354
|
+
console.log('Мышление:', data.content);
|
|
355
|
+
});
|
|
356
|
+
|
|
357
|
+
sdk.reasoning.on('complete', (data) => {
|
|
358
|
+
console.log('Результат:', data.content);
|
|
359
|
+
});
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
## WebSocketClient
|
|
363
|
+
|
|
364
|
+
Клиент для работы с WebSocket соединениями. Получается через `sdk.getWebSocketClient()`.
|
|
365
|
+
|
|
366
|
+
### Методы
|
|
367
|
+
|
|
368
|
+
#### `connectToReasoning(reasoningId)`
|
|
369
|
+
|
|
370
|
+
Подключается к namespace рассуждений.
|
|
371
|
+
|
|
372
|
+
```javascript
|
|
373
|
+
await wsClient.connectToReasoning('reasoning-id');
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
#### `connectToIndexing(projectId)`
|
|
377
|
+
|
|
378
|
+
Подключается к namespace индексации.
|
|
379
|
+
|
|
380
|
+
```javascript
|
|
381
|
+
await wsClient.connectToIndexing('project-id');
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
#### `disconnect(namespace)`
|
|
385
|
+
|
|
386
|
+
Отключается от определенного namespace.
|
|
387
|
+
|
|
388
|
+
```javascript
|
|
389
|
+
await wsClient.disconnect(WebSocketNamespace.REASONING);
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
#### `disconnectAll()`
|
|
393
|
+
|
|
394
|
+
Отключается от всех namespace.
|
|
395
|
+
|
|
396
|
+
```javascript
|
|
397
|
+
await wsClient.disconnectAll();
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
#### `isConnected(namespace)`
|
|
401
|
+
|
|
402
|
+
Проверяет подключение к определенному namespace.
|
|
403
|
+
|
|
404
|
+
```javascript
|
|
405
|
+
const isConnected = wsClient.isConnected(WebSocketNamespace.REASONING);
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
#### `isConnectedToReasoning()`
|
|
409
|
+
|
|
410
|
+
Проверяет подключение к namespace рассуждений.
|
|
411
|
+
|
|
412
|
+
```javascript
|
|
413
|
+
const isConnected = wsClient.isConnectedToReasoning();
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
#### `isConnectedToIndexing()`
|
|
417
|
+
|
|
418
|
+
Проверяет подключение к namespace индексации.
|
|
419
|
+
|
|
420
|
+
```javascript
|
|
421
|
+
const isConnected = wsClient.isConnectedToIndexing();
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
#### `on(event, callback, namespace)`
|
|
425
|
+
|
|
426
|
+
Добавляет обработчик события для определенного namespace.
|
|
427
|
+
|
|
428
|
+
```javascript
|
|
429
|
+
wsClient.on('thinking', (data) => {
|
|
430
|
+
console.log('Мышление:', data);
|
|
431
|
+
}, WebSocketNamespace.REASONING);
|
|
432
|
+
```
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
# Аутентификация в Solver SDK
|
|
2
|
+
|
|
3
|
+
В этом документе описаны методы аутентификации в Solver SDK для различных API и WebSocket соединений.
|
|
4
|
+
|
|
5
|
+
## Содержание
|
|
6
|
+
|
|
7
|
+
- [HTTP API аутентификация](#http-api-аутентификация)
|
|
8
|
+
- [WebSocket аутентификация](#websocket-аутентификация)
|
|
9
|
+
- [Тестовая аутентификация](#тестовая-аутентификация)
|
|
10
|
+
- [Обработка ошибок аутентификации](#обработка-ошибок-аутентификации)
|
|
11
|
+
|
|
12
|
+
## HTTP API аутентификация
|
|
13
|
+
|
|
14
|
+
SDK поддерживает два основных метода аутентификации для HTTP запросов:
|
|
15
|
+
|
|
16
|
+
### 1. API ключ
|
|
17
|
+
|
|
18
|
+
```javascript
|
|
19
|
+
const sdk = new CodeSolverSDK({
|
|
20
|
+
baseURL: 'https://api.example.com',
|
|
21
|
+
apiKey: 'your-api-key'
|
|
22
|
+
});
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
API ключ автоматически добавляется в заголовок `X-API-Key` для всех HTTP запросов.
|
|
26
|
+
|
|
27
|
+
### 2. Пользовательские заголовки
|
|
28
|
+
|
|
29
|
+
```javascript
|
|
30
|
+
const sdk = new CodeSolverSDK({
|
|
31
|
+
baseURL: 'https://api.example.com',
|
|
32
|
+
headers: {
|
|
33
|
+
'Authorization': 'Bearer your-jwt-token',
|
|
34
|
+
'X-Custom-Header': 'Custom-Value'
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## WebSocket аутентификация
|
|
40
|
+
|
|
41
|
+
Для WebSocket соединений SDK использует отдельный механизм аутентификации через специальное событие `authenticate`.
|
|
42
|
+
|
|
43
|
+
### Стандартная аутентификация WebSocket
|
|
44
|
+
|
|
45
|
+
```javascript
|
|
46
|
+
// 1. Создаем экземпляр SDK
|
|
47
|
+
const sdk = new CodeSolverSDK({
|
|
48
|
+
baseURL: 'https://api.example.com',
|
|
49
|
+
apiKey: 'your-api-key'
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
// 2. Опции для streamChatWithThinking
|
|
53
|
+
const options = {
|
|
54
|
+
model: 'claude-3-7-sonnet-20240229',
|
|
55
|
+
thinking: true,
|
|
56
|
+
authToken: 'your-auth-token' // ← Токен для WebSocket аутентификации
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
// 3. Отправка запроса
|
|
60
|
+
const response = await sdk.chat.streamChatWithThinking(messages, options, handleEvent);
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Параметр `authToken` используется для аутентификации WebSocket соединений и передается в событии `authenticate`.
|
|
64
|
+
|
|
65
|
+
### Низкоуровневая WebSocket аутентификация
|
|
66
|
+
|
|
67
|
+
Если вы работаете напрямую с WebSocket клиентом, вы можете настроить аутентификацию следующим образом:
|
|
68
|
+
|
|
69
|
+
```javascript
|
|
70
|
+
// Получаем WebSocket клиент
|
|
71
|
+
const wsClient = sdk.getWebSocketClient();
|
|
72
|
+
|
|
73
|
+
// Настраиваем опции подключения с аутентификацией
|
|
74
|
+
const connectionOptions = {
|
|
75
|
+
namespace: 'reasoning',
|
|
76
|
+
authToken: 'your-auth-token',
|
|
77
|
+
query: {
|
|
78
|
+
reasoningId: 'reasoning-123'
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
// Подключаемся к WebSocket серверу
|
|
83
|
+
await wsClient.connect(connectionOptions);
|
|
84
|
+
|
|
85
|
+
// Проверяем статус аутентификации
|
|
86
|
+
const isAuthenticated = wsClient.isAuthenticated();
|
|
87
|
+
console.log('Аутентификация WebSocket:', isAuthenticated);
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Тестовая аутентификация
|
|
91
|
+
|
|
92
|
+
Для тестовых сред SDK поддерживает упрощенную аутентификацию:
|
|
93
|
+
|
|
94
|
+
```javascript
|
|
95
|
+
const options = {
|
|
96
|
+
// Другие параметры...
|
|
97
|
+
authToken: 'test-token'
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
const response = await sdk.chat.streamChatWithThinking(messages, options, handleEvent);
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
> **Важно**: Начиная с версии 1.7.4, устаревший параметр `testToken` удален в пользу унифицированного параметра `authToken`.
|
|
104
|
+
|
|
105
|
+
## Обработка ошибок аутентификации
|
|
106
|
+
|
|
107
|
+
SDK предоставляет механизм обработки ошибок аутентификации:
|
|
108
|
+
|
|
109
|
+
```javascript
|
|
110
|
+
// Обработчик событий WebSocket
|
|
111
|
+
const handleEvent = (eventType, data) => {
|
|
112
|
+
if (eventType === 'authentication_error') {
|
|
113
|
+
console.error('Ошибка аутентификации:', data.message);
|
|
114
|
+
|
|
115
|
+
// Возможная реакция на ошибку (переподключение, запрос нового токена и т.д.)
|
|
116
|
+
switch (data.code) {
|
|
117
|
+
case 'TOKEN_EXPIRED':
|
|
118
|
+
// Запросить новый токен
|
|
119
|
+
break;
|
|
120
|
+
case 'INVALID_TOKEN':
|
|
121
|
+
// Перенаправить на страницу входа
|
|
122
|
+
break;
|
|
123
|
+
default:
|
|
124
|
+
// Общая обработка ошибок
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### Коды ошибок аутентификации
|
|
132
|
+
|
|
133
|
+
| Код ошибки | Описание |
|
|
134
|
+
|------------|----------|
|
|
135
|
+
| `TOKEN_EXPIRED` | Истек срок действия токена |
|
|
136
|
+
| `INVALID_TOKEN` | Недействительный токен |
|
|
137
|
+
| `MISSING_TOKEN` | Отсутствует токен |
|
|
138
|
+
| `AUTH_ERROR` | Общая ошибка аутентификации |
|
|
139
|
+
| `FORBIDDEN` | Доступ запрещен |
|
|
140
|
+
|
|
141
|
+
## Примеры
|
|
142
|
+
|
|
143
|
+
### Полный пример аутентификации для рассуждений
|
|
144
|
+
|
|
145
|
+
```javascript
|
|
146
|
+
const { CodeSolverSDK, WebSocketNamespace } = require('solver-sdk');
|
|
147
|
+
|
|
148
|
+
async function exampleWithAuthentication() {
|
|
149
|
+
// 1. Создаем экземпляр SDK
|
|
150
|
+
const sdk = new CodeSolverSDK({
|
|
151
|
+
baseURL: 'https://api.example.com',
|
|
152
|
+
apiKey: 'your-api-key'
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
// 2. Создаем рассуждение
|
|
156
|
+
const reasoning = await sdk.reasoning.createReasoning({
|
|
157
|
+
projectId: 'project-id',
|
|
158
|
+
query: 'Объясни этот проект'
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
// 3. Подключаемся через WebSocket с аутентификацией
|
|
162
|
+
await sdk.reasoning.connectWebSocket({
|
|
163
|
+
reasoningId: reasoning.id,
|
|
164
|
+
authToken: 'your-auth-token'
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
// 4. Настраиваем обработчики событий
|
|
168
|
+
sdk.reasoning.on('authentication_error', (data) => {
|
|
169
|
+
console.error('Ошибка аутентификации:', data);
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
sdk.reasoning.on('authenticated', (data) => {
|
|
173
|
+
console.log('Успешная аутентификация:', data);
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
// 5. Отправляем запрос
|
|
177
|
+
await sdk.reasoning.startReasoning(reasoning.id);
|
|
178
|
+
}
|
|
179
|
+
```
|