solver-sdk 1.8.0 → 1.9.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.
Files changed (181) hide show
  1. package/README.md +176 -468
  2. package/dist/cjs/api/{chat-api.js → chat-api/index.js} +77 -125
  3. package/dist/cjs/api/chat-api/index.js.map +1 -0
  4. package/dist/cjs/api/chat-api/interfaces.js +3 -0
  5. package/dist/cjs/api/chat-api/interfaces.js.map +1 -0
  6. package/dist/cjs/api/chat-api/models.js +6 -0
  7. package/dist/cjs/api/chat-api/models.js.map +1 -0
  8. package/dist/cjs/api/chat-api/stream-utils.js +192 -0
  9. package/dist/cjs/api/chat-api/stream-utils.js.map +1 -0
  10. package/dist/cjs/api/chat-api/websocket-helpers.js +211 -0
  11. package/dist/cjs/api/chat-api/websocket-helpers.js.map +1 -0
  12. package/dist/cjs/api/projects-api.js +275 -3
  13. package/dist/cjs/api/projects-api.js.map +1 -1
  14. package/dist/cjs/code-solver-sdk.js +21 -23
  15. package/dist/cjs/code-solver-sdk.js.map +1 -1
  16. package/dist/cjs/constants/websocket-events.constants.js +90 -52
  17. package/dist/cjs/constants/websocket-events.constants.js.map +1 -1
  18. package/dist/cjs/constants/websocket-namespaces.constants.js +18 -0
  19. package/dist/cjs/constants/websocket-namespaces.constants.js.map +1 -0
  20. package/dist/cjs/interfaces/websocket/callbacks.interfaces.js +3 -0
  21. package/dist/cjs/interfaces/websocket/callbacks.interfaces.js.map +1 -0
  22. package/dist/cjs/interfaces/websocket/client-options.interfaces.js +3 -0
  23. package/dist/cjs/interfaces/websocket/client-options.interfaces.js.map +1 -0
  24. package/dist/cjs/interfaces/websocket/events.interfaces.js +3 -0
  25. package/dist/cjs/interfaces/websocket/events.interfaces.js.map +1 -0
  26. package/dist/cjs/interfaces/websocket/stats.interfaces.js +3 -0
  27. package/dist/cjs/interfaces/websocket/stats.interfaces.js.map +1 -0
  28. package/dist/cjs/utils/code-solver-websocket-client.js +383 -1473
  29. package/dist/cjs/utils/code-solver-websocket-client.js.map +1 -1
  30. package/dist/cjs/utils/connection-state-manager.js +133 -0
  31. package/dist/cjs/utils/connection-state-manager.js.map +1 -0
  32. package/dist/cjs/utils/http-client.js +7 -0
  33. package/dist/cjs/utils/http-client.js.map +1 -1
  34. package/dist/cjs/utils/logger.js +106 -0
  35. package/dist/cjs/utils/logger.js.map +1 -0
  36. package/dist/cjs/utils/ping-pong-manager.js +306 -0
  37. package/dist/cjs/utils/ping-pong-manager.js.map +1 -0
  38. package/dist/cjs/utils/reasoning-auth-helper.js +58 -0
  39. package/dist/cjs/utils/reasoning-auth-helper.js.map +1 -0
  40. package/dist/cjs/utils/session-manager.js +114 -0
  41. package/dist/cjs/utils/session-manager.js.map +1 -0
  42. package/dist/cjs/utils/websocket-client.js +37 -10
  43. package/dist/cjs/utils/websocket-client.js.map +1 -1
  44. package/dist/cjs/ws/base-ws-client.js +286 -0
  45. package/dist/cjs/ws/base-ws-client.js.map +1 -0
  46. package/dist/cjs/ws/dependencies-ws-client.js +11 -0
  47. package/dist/cjs/ws/dependencies-ws-client.js.map +1 -0
  48. package/dist/cjs/ws/diagnostics-service.js +170 -0
  49. package/dist/cjs/ws/diagnostics-service.js.map +1 -0
  50. package/dist/cjs/ws/indexing-ws-client.js +223 -0
  51. package/dist/cjs/ws/indexing-ws-client.js.map +1 -0
  52. package/dist/cjs/ws/notifications-ws-client.js +12 -0
  53. package/dist/cjs/ws/notifications-ws-client.js.map +1 -0
  54. package/dist/cjs/ws/reasoning-ws-client.js +330 -0
  55. package/dist/cjs/ws/reasoning-ws-client.js.map +1 -0
  56. package/dist/esm/api/{chat-api.js → chat-api/index.js} +74 -125
  57. package/dist/esm/api/chat-api/index.js.map +1 -0
  58. package/dist/esm/api/chat-api/interfaces.js +2 -0
  59. package/dist/esm/api/chat-api/interfaces.js.map +1 -0
  60. package/dist/esm/api/chat-api/models.js +5 -0
  61. package/dist/esm/api/chat-api/models.js.map +1 -0
  62. package/dist/esm/api/chat-api/stream-utils.js +188 -0
  63. package/dist/esm/api/chat-api/stream-utils.js.map +1 -0
  64. package/dist/esm/api/chat-api/websocket-helpers.js +205 -0
  65. package/dist/esm/api/chat-api/websocket-helpers.js.map +1 -0
  66. package/dist/esm/api/projects-api.js +275 -3
  67. package/dist/esm/api/projects-api.js.map +1 -1
  68. package/dist/esm/code-solver-sdk.js +13 -15
  69. package/dist/esm/code-solver-sdk.js.map +1 -1
  70. package/dist/esm/constants/websocket-events.constants.js +89 -51
  71. package/dist/esm/constants/websocket-events.constants.js.map +1 -1
  72. package/dist/esm/constants/websocket-namespaces.constants.js +15 -0
  73. package/dist/esm/constants/websocket-namespaces.constants.js.map +1 -0
  74. package/dist/esm/interfaces/websocket/callbacks.interfaces.js +2 -0
  75. package/dist/esm/interfaces/websocket/callbacks.interfaces.js.map +1 -0
  76. package/dist/esm/interfaces/websocket/client-options.interfaces.js +2 -0
  77. package/dist/esm/interfaces/websocket/client-options.interfaces.js.map +1 -0
  78. package/dist/esm/interfaces/websocket/events.interfaces.js +2 -0
  79. package/dist/esm/interfaces/websocket/events.interfaces.js.map +1 -0
  80. package/dist/esm/interfaces/websocket/stats.interfaces.js +2 -0
  81. package/dist/esm/interfaces/websocket/stats.interfaces.js.map +1 -0
  82. package/dist/esm/utils/code-solver-websocket-client.js +382 -1473
  83. package/dist/esm/utils/code-solver-websocket-client.js.map +1 -1
  84. package/dist/esm/utils/connection-state-manager.js +129 -0
  85. package/dist/esm/utils/connection-state-manager.js.map +1 -0
  86. package/dist/esm/utils/http-client.js +7 -0
  87. package/dist/esm/utils/http-client.js.map +1 -1
  88. package/dist/esm/utils/logger.js +101 -0
  89. package/dist/esm/utils/logger.js.map +1 -0
  90. package/dist/esm/utils/ping-pong-manager.js +302 -0
  91. package/dist/esm/utils/ping-pong-manager.js.map +1 -0
  92. package/dist/esm/utils/reasoning-auth-helper.js +54 -0
  93. package/dist/esm/utils/reasoning-auth-helper.js.map +1 -0
  94. package/dist/esm/utils/session-manager.js +109 -0
  95. package/dist/esm/utils/session-manager.js.map +1 -0
  96. package/dist/esm/utils/websocket-client.js +37 -10
  97. package/dist/esm/utils/websocket-client.js.map +1 -1
  98. package/dist/esm/ws/base-ws-client.js +282 -0
  99. package/dist/esm/ws/base-ws-client.js.map +1 -0
  100. package/dist/esm/ws/dependencies-ws-client.js +7 -0
  101. package/dist/esm/ws/dependencies-ws-client.js.map +1 -0
  102. package/dist/esm/ws/diagnostics-service.js +166 -0
  103. package/dist/esm/ws/diagnostics-service.js.map +1 -0
  104. package/dist/esm/ws/indexing-ws-client.js +219 -0
  105. package/dist/esm/ws/indexing-ws-client.js.map +1 -0
  106. package/dist/esm/ws/notifications-ws-client.js +8 -0
  107. package/dist/esm/ws/notifications-ws-client.js.map +1 -0
  108. package/dist/esm/ws/reasoning-ws-client.js +326 -0
  109. package/dist/esm/ws/reasoning-ws-client.js.map +1 -0
  110. package/dist/types/api/chat-api/index.d.ts +81 -0
  111. package/dist/types/api/chat-api/index.d.ts.map +1 -0
  112. package/dist/types/api/chat-api/interfaces.d.ts +47 -0
  113. package/dist/types/api/chat-api/interfaces.d.ts.map +1 -0
  114. package/dist/types/api/{chat-api.d.ts → chat-api/models.d.ts} +10 -73
  115. package/dist/types/api/chat-api/models.d.ts.map +1 -0
  116. package/dist/types/api/chat-api/stream-utils.d.ts +31 -0
  117. package/dist/types/api/chat-api/stream-utils.d.ts.map +1 -0
  118. package/dist/types/api/chat-api/websocket-helpers.d.ts +40 -0
  119. package/dist/types/api/chat-api/websocket-helpers.d.ts.map +1 -0
  120. package/dist/types/api/projects-api.d.ts +114 -1
  121. package/dist/types/api/projects-api.d.ts.map +1 -1
  122. package/dist/types/code-solver-sdk.d.ts +3 -2
  123. package/dist/types/code-solver-sdk.d.ts.map +1 -1
  124. package/dist/types/constants/websocket-events.constants.d.ts +77 -36
  125. package/dist/types/constants/websocket-events.constants.d.ts.map +1 -1
  126. package/dist/types/constants/websocket-namespaces.constants.d.ts +14 -0
  127. package/dist/types/constants/websocket-namespaces.constants.d.ts.map +1 -0
  128. package/dist/types/interfaces/http-client.d.ts +1 -1
  129. package/dist/types/interfaces/http-client.d.ts.map +1 -1
  130. package/dist/types/interfaces/websocket/callbacks.interfaces.d.ts +30 -0
  131. package/dist/types/interfaces/websocket/callbacks.interfaces.d.ts.map +1 -0
  132. package/dist/types/interfaces/websocket/client-options.interfaces.d.ts +51 -0
  133. package/dist/types/interfaces/websocket/client-options.interfaces.d.ts.map +1 -0
  134. package/dist/types/interfaces/websocket/events.interfaces.d.ts +165 -0
  135. package/dist/types/interfaces/websocket/events.interfaces.d.ts.map +1 -0
  136. package/dist/types/interfaces/websocket/stats.interfaces.d.ts +72 -0
  137. package/dist/types/interfaces/websocket/stats.interfaces.d.ts.map +1 -0
  138. package/dist/types/types/index.d.ts +8 -0
  139. package/dist/types/types/index.d.ts.map +1 -1
  140. package/dist/types/utils/code-solver-websocket-client.d.ts +67 -612
  141. package/dist/types/utils/code-solver-websocket-client.d.ts.map +1 -1
  142. package/dist/types/utils/connection-state-manager.d.ts +94 -0
  143. package/dist/types/utils/connection-state-manager.d.ts.map +1 -0
  144. package/dist/types/utils/http-client.d.ts +5 -0
  145. package/dist/types/utils/http-client.d.ts.map +1 -1
  146. package/dist/types/utils/logger.d.ts +62 -0
  147. package/dist/types/utils/logger.d.ts.map +1 -0
  148. package/dist/types/utils/ping-pong-manager.d.ts +118 -0
  149. package/dist/types/utils/ping-pong-manager.d.ts.map +1 -0
  150. package/dist/types/utils/reasoning-auth-helper.d.ts +24 -0
  151. package/dist/types/utils/reasoning-auth-helper.d.ts.map +1 -0
  152. package/dist/types/utils/session-manager.d.ts +98 -0
  153. package/dist/types/utils/session-manager.d.ts.map +1 -0
  154. package/dist/types/utils/websocket-client.d.ts +6 -0
  155. package/dist/types/utils/websocket-client.d.ts.map +1 -1
  156. package/dist/types/ws/base-ws-client.d.ts +119 -0
  157. package/dist/types/ws/base-ws-client.d.ts.map +1 -0
  158. package/dist/types/ws/dependencies-ws-client.d.ts +6 -0
  159. package/dist/types/ws/dependencies-ws-client.d.ts.map +1 -0
  160. package/dist/types/ws/diagnostics-service.d.ts +93 -0
  161. package/dist/types/ws/diagnostics-service.d.ts.map +1 -0
  162. package/dist/types/ws/indexing-ws-client.d.ts +78 -0
  163. package/dist/types/ws/indexing-ws-client.d.ts.map +1 -0
  164. package/dist/types/ws/notifications-ws-client.d.ts +5 -0
  165. package/dist/types/ws/notifications-ws-client.d.ts.map +1 -0
  166. package/dist/types/ws/reasoning-ws-client.d.ts +87 -0
  167. package/dist/types/ws/reasoning-ws-client.d.ts.map +1 -0
  168. package/docs/API_REFERENCE.md +432 -0
  169. package/docs/AUTHENTICATION.md +83 -0
  170. package/docs/ERROR_HANDLING.md +240 -0
  171. package/docs/INTEGRATION_EXAMPLES.md +342 -0
  172. package/docs/PING_PONG.md +212 -0
  173. package/docs/README.md +102 -0
  174. package/docs/WEBSOCKET.md +139 -0
  175. package/docs/advanced/PING_PONG.md +212 -0
  176. package/docs/features/THINKING.md +158 -0
  177. package/docs/indexing/INDEXING.md +231 -0
  178. package/package.json +4 -3
  179. package/dist/cjs/api/chat-api.js.map +0 -1
  180. package/dist/esm/api/chat-api.js.map +0 -1
  181. package/dist/types/api/chat-api.d.ts.map +0 -1
@@ -0,0 +1,306 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PingPongManager = void 0;
4
+ const logger_js_1 = require("./logger.js");
5
+ const websocket_events_constants_js_1 = require("../constants/websocket-events.constants.js");
6
+ /**
7
+ * Класс для управления механизмом ping/pong
8
+ */
9
+ class PingPongManager {
10
+ /**
11
+ * Создает новый менеджер ping/pong
12
+ * @param {PingPongManagerOptions} options Опции менеджера ping/pong
13
+ */
14
+ constructor(options = {}) {
15
+ /** Таймеры для ping/pong */
16
+ this.pingIntervals = new Map();
17
+ /** Статистика ping/pong */
18
+ this.pingStats = new Map();
19
+ /** Количество последовательных таймаутов */
20
+ this.pingTimeouts = new Map();
21
+ /** Хранилище обработчиков ping/pong */
22
+ this.pingPongEventHandlers = new Map();
23
+ /** Клиенты WebSocket по namespace */
24
+ this.clients = new Map();
25
+ this.pingInterval = options.pingInterval || 30000;
26
+ this.pingTimeoutThreshold = options.pingTimeoutThreshold || 3;
27
+ this.logger = options.logger || (0, logger_js_1.createWebSocketLogger)('PingPongManager');
28
+ }
29
+ /**
30
+ * Регистрирует WebSocket клиент для указанного пространства имен
31
+ * @param {WebSocketNamespace} namespace Пространство имен
32
+ * @param {WebSocketClient} client WebSocket клиент
33
+ */
34
+ registerClient(namespace, client) {
35
+ this.clients.set(namespace, client);
36
+ // Инициализируем статистику для namespace
37
+ if (!this.pingStats.has(namespace)) {
38
+ this.pingStats.set(namespace, {
39
+ namespace,
40
+ socketId: client.getSocketId(),
41
+ pingSent: 0,
42
+ pongReceived: 0,
43
+ averageRtt: 0,
44
+ minRtt: Number.MAX_SAFE_INTEGER,
45
+ maxRtt: 0,
46
+ lastRtt: 0,
47
+ lastPongTimestamp: 0,
48
+ isConnected: client.isConnected()
49
+ });
50
+ }
51
+ // Сбрасываем счетчик таймаутов
52
+ this.pingTimeouts.set(namespace, 0);
53
+ // Устанавливаем обработчик для события connection_pong
54
+ client.on(websocket_events_constants_js_1.WebSocketEvents.CONNECTION_PONG, this.createPongHandler(namespace));
55
+ this.logger.debug(`Зарегистрирован клиент для ${namespace}`, {
56
+ socketId: client.getSocketId()
57
+ });
58
+ }
59
+ /**
60
+ * Удаляет регистрацию WebSocket клиента для указанного пространства имен
61
+ * @param {WebSocketNamespace} namespace Пространство имен
62
+ */
63
+ unregisterClient(namespace) {
64
+ this.clients.delete(namespace);
65
+ this.logger.debug(`Удалена регистрация клиента для ${namespace}`);
66
+ }
67
+ /**
68
+ * Создает обработчик для события pong
69
+ * @param {WebSocketNamespace} namespace Пространство имен
70
+ * @returns {PingPongEventHandler} Обработчик события pong
71
+ */
72
+ createPongHandler(namespace) {
73
+ return (data) => {
74
+ // Обновляем статистику
75
+ const stats = this.pingStats.get(namespace);
76
+ if (stats) {
77
+ stats.pongReceived++;
78
+ stats.lastPongTimestamp = Date.now();
79
+ // Рассчитываем RTT, если есть метка времени эхо
80
+ if (data && data.echo) {
81
+ const rtt = Date.now() - data.echo;
82
+ stats.lastRtt = rtt;
83
+ // Обновляем min и max
84
+ stats.minRtt = Math.min(stats.minRtt, rtt);
85
+ stats.maxRtt = Math.max(stats.maxRtt, rtt);
86
+ // Обновляем среднее значение
87
+ stats.averageRtt = (stats.averageRtt * (stats.pongReceived - 1) + rtt) / stats.pongReceived;
88
+ }
89
+ // Сбрасываем счетчик таймаутов
90
+ this.pingTimeouts.set(namespace, 0);
91
+ // Обновляем ID сокета, если он изменился
92
+ const client = this.clients.get(namespace);
93
+ if (client) {
94
+ stats.socketId = client.getSocketId();
95
+ stats.isConnected = client.isConnected();
96
+ }
97
+ }
98
+ // Логируем получение pong
99
+ this.logger.debug(`Получен pong для ${namespace}`, {
100
+ rtt: stats?.lastRtt,
101
+ socketId: stats?.socketId
102
+ });
103
+ // Вызываем обработчики событий
104
+ this.notifyEventHandlers('connection_pong', {
105
+ namespace,
106
+ timestamp: Date.now(),
107
+ rtt: stats?.lastRtt,
108
+ socketId: stats?.socketId
109
+ });
110
+ };
111
+ }
112
+ /**
113
+ * Уведомляет обработчики о событии
114
+ * @param {string} eventType Тип события
115
+ * @param {any} data Данные события
116
+ */
117
+ notifyEventHandlers(eventType, data) {
118
+ const handlers = this.pingPongEventHandlers.get(eventType) || [];
119
+ for (const handler of handlers) {
120
+ try {
121
+ handler(data);
122
+ }
123
+ catch (error) {
124
+ this.logger.error(`Ошибка в обработчике события ${eventType}`, error);
125
+ }
126
+ }
127
+ }
128
+ /**
129
+ * Включает автоматическую отправку ping-сообщений
130
+ * @param {WebSocketNamespace} namespace Пространство имен
131
+ * @returns {boolean} true, если механизм успешно включен
132
+ */
133
+ enablePingPong(namespace) {
134
+ const client = this.clients.get(namespace);
135
+ if (!client || !client.isConnected()) {
136
+ this.logger.warn(`Невозможно включить ping/pong для неактивного соединения в ${namespace}`);
137
+ return false;
138
+ }
139
+ // Останавливаем существующий таймер, если есть
140
+ this.disablePingPong(namespace);
141
+ // Инициализируем статистику, если не была создана
142
+ if (!this.pingStats.has(namespace)) {
143
+ this.pingStats.set(namespace, {
144
+ namespace,
145
+ socketId: client.getSocketId(),
146
+ pingSent: 0,
147
+ pongReceived: 0,
148
+ averageRtt: 0,
149
+ minRtt: Number.MAX_SAFE_INTEGER,
150
+ maxRtt: 0,
151
+ lastRtt: 0,
152
+ lastPongTimestamp: 0,
153
+ isConnected: client.isConnected()
154
+ });
155
+ }
156
+ // Сбрасываем счетчик таймаутов
157
+ this.pingTimeouts.set(namespace, 0);
158
+ // Устанавливаем интервал отправки ping
159
+ const pingInterval = setInterval(() => {
160
+ const currentClient = this.clients.get(namespace);
161
+ if (!currentClient || !currentClient.isConnected()) {
162
+ this.disablePingPong(namespace);
163
+ return;
164
+ }
165
+ // Формируем данные ping
166
+ const pingData = {
167
+ timestamp: Date.now(),
168
+ echo: Date.now()
169
+ };
170
+ // Отправляем ping
171
+ const sent = currentClient.send({
172
+ event: websocket_events_constants_js_1.WebSocketEvents.CONNECTION_PING,
173
+ data: pingData
174
+ });
175
+ // Если успешно отправлено, обновляем статистику
176
+ if (sent) {
177
+ const stats = this.pingStats.get(namespace);
178
+ if (stats) {
179
+ stats.pingSent++;
180
+ }
181
+ this.logger.debug(`Отправлен ping для ${namespace}`, pingData);
182
+ }
183
+ else {
184
+ this.logger.warn(`Не удалось отправить ping для ${namespace}`);
185
+ }
186
+ // Проверяем таймаут
187
+ this.checkPingTimeout(namespace);
188
+ }, this.pingInterval);
189
+ // Сохраняем интервал
190
+ this.pingIntervals.set(namespace, pingInterval);
191
+ this.logger.info(`Включен механизм ping/pong для ${namespace} с интервалом ${this.pingInterval}ms`);
192
+ return true;
193
+ }
194
+ /**
195
+ * Проверяет таймаут для ping/pong
196
+ * @param {WebSocketNamespace} namespace Пространство имен
197
+ */
198
+ checkPingTimeout(namespace) {
199
+ const timeouts = this.pingTimeouts.get(namespace) || 0;
200
+ const stats = this.pingStats.get(namespace);
201
+ if (!stats)
202
+ return;
203
+ // Если разница между отправленными и полученными превышает порог,
204
+ // или последний pong был получен слишком давно
205
+ if ((stats.pingSent - stats.pongReceived > this.pingTimeoutThreshold) ||
206
+ (Date.now() - stats.lastPongTimestamp > this.pingInterval * this.pingTimeoutThreshold)) {
207
+ // Увеличиваем счетчик таймаутов
208
+ this.pingTimeouts.set(namespace, timeouts + 1);
209
+ if (timeouts + 1 >= this.pingTimeoutThreshold) {
210
+ // Соединение потеряно
211
+ this.logger.error(`Соединение потеряно (таймаут ping/pong) для ${namespace}`);
212
+ // Установка флага неактивного соединения
213
+ stats.isConnected = false;
214
+ // Уведомляем о таймауте соединения
215
+ this.notifyEventHandlers('connection_timeout', {
216
+ namespace,
217
+ socketId: stats.socketId,
218
+ timeouts: timeouts + 1,
219
+ threshold: this.pingTimeoutThreshold
220
+ });
221
+ }
222
+ }
223
+ }
224
+ /**
225
+ * Отключает автоматическую отправку ping-сообщений
226
+ * @param {WebSocketNamespace} namespace Пространство имен
227
+ */
228
+ disablePingPong(namespace) {
229
+ const interval = this.pingIntervals.get(namespace);
230
+ if (interval) {
231
+ clearInterval(interval);
232
+ this.pingIntervals.delete(namespace);
233
+ this.logger.info(`Отключен механизм ping/pong для ${namespace}`);
234
+ }
235
+ }
236
+ /**
237
+ * Отключает автоматическую отправку ping-сообщений для всех пространств имен
238
+ */
239
+ disablePingPongAll() {
240
+ for (const [namespace, interval] of this.pingIntervals.entries()) {
241
+ clearInterval(interval);
242
+ this.pingIntervals.delete(namespace);
243
+ this.logger.info(`Отключен механизм ping/pong для ${namespace}`);
244
+ }
245
+ }
246
+ /**
247
+ * Получает статистику ping/pong для указанного пространства имен
248
+ * @param {WebSocketNamespace} namespace Пространство имен
249
+ * @returns {PingPongStats | null} Статистика ping/pong
250
+ */
251
+ getPingStats(namespace) {
252
+ return this.pingStats.get(namespace) || null;
253
+ }
254
+ /**
255
+ * Получает статистику ping/pong для всех пространств имен
256
+ * @returns {PingPongStats[]} Массив статистики ping/pong
257
+ */
258
+ getAllPingStats() {
259
+ return Array.from(this.pingStats.values());
260
+ }
261
+ /**
262
+ * Добавляет обработчик для событий ping/pong
263
+ * @param {string} eventType Тип события (connection_timeout, connection_pong)
264
+ * @param {PingPongEventHandler} handler Обработчик события
265
+ */
266
+ onPingPongEvent(eventType, handler) {
267
+ if (!this.pingPongEventHandlers.has(eventType)) {
268
+ this.pingPongEventHandlers.set(eventType, []);
269
+ }
270
+ const handlers = this.pingPongEventHandlers.get(eventType);
271
+ if (handlers) {
272
+ handlers.push(handler);
273
+ }
274
+ }
275
+ /**
276
+ * Удаляет обработчик для событий ping/pong
277
+ * @param {string} eventType Тип события
278
+ * @param {PingPongEventHandler} [handler] Обработчик события (если не указан, удаляются все обработчики)
279
+ */
280
+ offPingPongEvent(eventType, handler) {
281
+ if (!handler) {
282
+ // Если обработчик не указан, удаляем все обработчики для этого типа события
283
+ this.pingPongEventHandlers.delete(eventType);
284
+ }
285
+ else {
286
+ // Если обработчик указан, удаляем только его
287
+ const handlers = this.pingPongEventHandlers.get(eventType);
288
+ if (handlers) {
289
+ const index = handlers.findIndex(h => h === handler);
290
+ if (index !== -1) {
291
+ handlers.splice(index, 1);
292
+ }
293
+ }
294
+ }
295
+ }
296
+ /**
297
+ * Проверяет, включен ли механизм ping/pong для указанного пространства имен
298
+ * @param {WebSocketNamespace} namespace Пространство имен
299
+ * @returns {boolean} true, если механизм включен
300
+ */
301
+ isPingPongEnabled(namespace) {
302
+ return this.pingIntervals.has(namespace);
303
+ }
304
+ }
305
+ exports.PingPongManager = PingPongManager;
306
+ //# sourceMappingURL=ping-pong-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ping-pong-manager.js","sourceRoot":"","sources":["../../../src/utils/ping-pong-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ /**
3
+ * Вспомогательные функции для авторизации в пространстве имен рассуждений
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createReasoningConnectionParams = createReasoningConnectionParams;
7
+ exports.createIndexingConnectionParams = createIndexingConnectionParams;
8
+ /**
9
+ * Создает параметры запроса для подключения к пространству имен рассуждений
10
+ * с добавлением apiKey в качестве authToken и другими необходимыми параметрами
11
+ *
12
+ * @param apiKey Ключ API для авторизации
13
+ * @param reasoningId ID рассуждения (опционально)
14
+ * @param sessionToken Токен сессии (опционально)
15
+ * @returns Параметры запроса для подключения
16
+ */
17
+ function createReasoningConnectionParams(apiKey, reasoningId, sessionToken) {
18
+ const params = {};
19
+ // Добавляем API ключ как authToken
20
+ if (apiKey) {
21
+ params.authToken = apiKey;
22
+ }
23
+ // Если есть ID рассуждения, добавляем его как параметр
24
+ if (reasoningId) {
25
+ params.reasoningId = reasoningId;
26
+ }
27
+ // Если есть токен сессии, добавляем его как параметр
28
+ if (sessionToken) {
29
+ params.sessionToken = sessionToken;
30
+ }
31
+ return params;
32
+ }
33
+ /**
34
+ * Создает параметры запроса для подключения к пространству имен индексации
35
+ * с добавлением apiKey в качестве authToken и другими необходимыми параметрами
36
+ *
37
+ * @param apiKey Ключ API для авторизации
38
+ * @param projectId ID проекта (опционально)
39
+ * @param sessionToken Токен сессии (опционально)
40
+ * @returns Параметры запроса для подключения
41
+ */
42
+ function createIndexingConnectionParams(apiKey, projectId, sessionToken) {
43
+ const params = {};
44
+ // Добавляем API ключ как authToken
45
+ if (apiKey) {
46
+ params.authToken = apiKey;
47
+ }
48
+ // Если есть ID проекта, добавляем его как параметр
49
+ if (projectId) {
50
+ params.projectId = projectId;
51
+ }
52
+ // Если есть токен сессии, добавляем его как параметр
53
+ if (sessionToken) {
54
+ params.sessionToken = sessionToken;
55
+ }
56
+ return params;
57
+ }
58
+ //# sourceMappingURL=reasoning-auth-helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reasoning-auth-helper.js","sourceRoot":"","sources":["../../../src/utils/reasoning-auth-helper.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAaH,0EAuBC;AAWD,wEAuBC;AAlED;;;;;;;;GAQG;AACH,SAAgB,+BAA+B,CAC7C,MAA0B,EAC1B,WAA2B,EAC3B,YAA4B;IAE5B,MAAM,MAAM,GAAwB,EAAE,CAAC;IAEvC,mCAAmC;IACnC,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC;IAC5B,CAAC;IAED,uDAAuD;IACvD,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,CAAC,WAAW,GAAG,WAAW,CAAC;IACnC,CAAC;IAED,qDAAqD;IACrD,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,CAAC,YAAY,GAAG,YAAY,CAAC;IACrC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,8BAA8B,CAC5C,MAA0B,EAC1B,SAAyB,EACzB,YAA4B;IAE5B,MAAM,MAAM,GAAwB,EAAE,CAAC;IAEvC,mCAAmC;IACnC,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC;IAC5B,CAAC;IAED,mDAAmD;IACnD,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;IAC/B,CAAC;IAED,qDAAqD;IACrD,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,CAAC,YAAY,GAAG,YAAY,CAAC;IACrC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SessionManager = exports.MemorySessionTokenStore = void 0;
4
+ /**
5
+ * Класс для хранения токенов сессий в памяти
6
+ */
7
+ class MemorySessionTokenStore {
8
+ constructor() {
9
+ /** Хранилище токенов */
10
+ this.tokens = new Map();
11
+ }
12
+ /**
13
+ * Получить токен сессии для указанного пространства имен
14
+ * @param {WebSocketNamespace} namespace Пространство имен
15
+ * @returns {string | null} Токен сессии или null, если не найден
16
+ */
17
+ getToken(namespace) {
18
+ return this.tokens.get(namespace) || null;
19
+ }
20
+ /**
21
+ * Сохранить токен сессии для указанного пространства имен
22
+ * @param {WebSocketNamespace} namespace Пространство имен
23
+ * @param {string} token Токен сессии
24
+ */
25
+ saveToken(namespace, token) {
26
+ this.tokens.set(namespace, token);
27
+ }
28
+ /**
29
+ * Удалить токен сессии для указанного пространства имен
30
+ * @param {WebSocketNamespace} namespace Пространство имен
31
+ */
32
+ removeToken(namespace) {
33
+ this.tokens.delete(namespace);
34
+ }
35
+ /**
36
+ * Проверить наличие токена для указанного пространства имен
37
+ * @param {WebSocketNamespace} namespace Пространство имен
38
+ * @returns {boolean} true, если токен есть
39
+ */
40
+ hasToken(namespace) {
41
+ return this.tokens.has(namespace);
42
+ }
43
+ /**
44
+ * Очистить все токены
45
+ */
46
+ clear() {
47
+ this.tokens.clear();
48
+ }
49
+ }
50
+ exports.MemorySessionTokenStore = MemorySessionTokenStore;
51
+ /**
52
+ * Класс для управления токенами сессий WebSocket
53
+ */
54
+ class SessionManager {
55
+ /**
56
+ * Создает новый менеджер сессий
57
+ * @param {SessionManagerOptions} options Опции менеджера сессий
58
+ */
59
+ constructor(options = {}) {
60
+ /** Хранилище токенов сессий */
61
+ this.sessionTokens = new Map();
62
+ this.enableSessionPersistence = options.enableSessionPersistence !== false;
63
+ this.logger = options.logger || {
64
+ debug: () => { },
65
+ info: () => { },
66
+ warn: () => { },
67
+ error: () => { },
68
+ withPrefix: () => this.logger
69
+ };
70
+ }
71
+ /**
72
+ * Сохраняет токен сессии для пространства имен
73
+ * @param {string} namespace Пространство имен
74
+ * @param {string} token Токен сессии
75
+ */
76
+ saveSessionToken(namespace, token) {
77
+ if (!this.enableSessionPersistence) {
78
+ this.logger.debug(`Сохранение сессий отключено, игнорируем токен для ${namespace}`);
79
+ return;
80
+ }
81
+ this.logger.debug(`Сохранение токена сессии для ${namespace}`);
82
+ this.sessionTokens.set(namespace, token);
83
+ }
84
+ /**
85
+ * Получает токен сессии для пространства имен
86
+ * @param {string} namespace Пространство имен
87
+ * @returns {string | undefined} Токен сессии или undefined, если не найден
88
+ */
89
+ getSessionToken(namespace) {
90
+ if (!this.enableSessionPersistence) {
91
+ return undefined;
92
+ }
93
+ const token = this.sessionTokens.get(namespace);
94
+ this.logger.debug(`Получение токена сессии для ${namespace}: ${token ? 'найден' : 'не найден'}`);
95
+ return token;
96
+ }
97
+ /**
98
+ * Удаляет токен сессии для пространства имен
99
+ * @param {string} namespace Пространство имен
100
+ */
101
+ clearSessionToken(namespace) {
102
+ this.logger.debug(`Удаление токена сессии для ${namespace}`);
103
+ this.sessionTokens.delete(namespace);
104
+ }
105
+ /**
106
+ * Удаляет все токены сессий
107
+ */
108
+ clearAllSessionTokens() {
109
+ this.logger.debug('Удаление всех токенов сессий');
110
+ this.sessionTokens.clear();
111
+ }
112
+ }
113
+ exports.SessionManager = SessionManager;
114
+ //# sourceMappingURL=session-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../../src/utils/session-manager.ts"],"names":[],"mappings":";;;AAuBA;;GAEG;AACH,MAAa,uBAAuB;IAApC;QACE,wBAAwB;QAChB,WAAM,GAAoC,IAAI,GAAG,EAAE,CAAC;IA2C9D,CAAC;IAzCC;;;;OAIG;IACI,QAAQ,CAAC,SAA6B;QAC3C,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;IAC5C,CAAC;IAED;;;;OAIG;IACI,SAAS,CAAC,SAA6B,EAAE,KAAa;QAC3D,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;IAED;;;OAGG;IACI,WAAW,CAAC,SAA6B;QAC9C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAChC,CAAC;IAED;;;;OAIG;IACI,QAAQ,CAAC,SAA6B;QAC3C,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACI,KAAK;QACV,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;CACF;AA7CD,0DA6CC;AAaD;;GAEG;AACH,MAAa,cAAc;IAUzB;;;OAGG;IACH,YAAY,UAAiC,EAAE;QAb/C,+BAA+B;QACvB,kBAAa,GAAwB,IAAI,GAAG,EAAE,CAAC;QAarD,IAAI,CAAC,wBAAwB,GAAG,OAAO,CAAC,wBAAwB,KAAK,KAAK,CAAC;QAC3E,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI;YAC9B,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;YACf,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;YACd,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;YACd,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;YACf,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM;SAC9B,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACI,gBAAgB,CAAC,SAAiB,EAAE,KAAa;QACtD,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,CAAC;YACnC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qDAAqD,SAAS,EAAE,CAAC,CAAC;YACpF,OAAO;QACT,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,SAAS,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED;;;;OAIG;IACI,eAAe,CAAC,SAAiB;QACtC,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,CAAC;YACnC,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QAEjG,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;OAGG;IACI,iBAAiB,CAAC,SAAiB;QACxC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,SAAS,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACI,qBAAqB;QAC1B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAClD,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;CACF;AAxED,wCAwEC"}
@@ -97,28 +97,55 @@ class WebSocketClient {
97
97
  maxRetries: this.options.maxRetries
98
98
  });
99
99
  }
100
+ /**
101
+ * Получает WebSocket URL из HTTP URL
102
+ * @returns {string} WebSocket URL
103
+ * @private
104
+ */
105
+ getWebSocketURL() {
106
+ let wsUrl = this.url;
107
+ // Замена протокола
108
+ if (wsUrl.startsWith('http://')) {
109
+ wsUrl = wsUrl.replace('http://', 'ws://');
110
+ }
111
+ else if (wsUrl.startsWith('https://')) {
112
+ wsUrl = wsUrl.replace('https://', 'wss://');
113
+ }
114
+ else if (!wsUrl.startsWith('ws://') && !wsUrl.startsWith('wss://')) {
115
+ // Если URL не содержит протокол, добавляем ws://
116
+ wsUrl = 'ws://' + wsUrl;
117
+ }
118
+ // Удаляем слеш в конце URL если он есть
119
+ if (wsUrl.endsWith('/')) {
120
+ wsUrl = wsUrl.slice(0, -1);
121
+ }
122
+ return wsUrl;
123
+ }
100
124
  /**
101
125
  * Подключается к WebSocket серверу используя Socket.IO клиент
102
126
  * @returns {Promise<void>}
103
127
  */
104
128
  connect() {
105
129
  // Если соединение уже установлено, возвращаем Promise.resolve
106
- if (this.socket && this.socket.connected) {
107
- this.logger('info', 'Соединение уже установлено');
130
+ if (this.isConnected()) {
131
+ this.logger('debug', 'Соединение уже установлено, пропускаем повторное подключение');
108
132
  return Promise.resolve();
109
133
  }
110
- // Сбрасываем флаг намеренного закрытия
111
- this.intentionallyClosed = false;
134
+ // Сбрасываем таймер reconnect
135
+ if (this.reconnectTimer) {
136
+ clearTimeout(this.reconnectTimer);
137
+ this.reconnectTimer = null;
138
+ }
112
139
  return new Promise((resolve, reject) => {
113
140
  try {
114
- // Формируем корректный URL с namespace для Socket.IO
115
- let wsUrl = this.url;
116
- let namespaceStr = this.namespace;
117
- // Для Socket.IO не нужно добавлять параметры в URL, они будут добавлены библиотекой
118
- this.logger('info', 'Выполняется подключение', { url: wsUrl, namespace: namespaceStr });
141
+ // Получаем WebSocket URL из http/https URL
142
+ const wsUrl = this.getWebSocketURL();
143
+ const namespaceStr = this.options.namespace || '';
144
+ this.logger('debug', `Подключение к ${wsUrl}${namespaceStr}`);
119
145
  // Настройки для Socket.IO клиента
120
146
  const socketOptions = {
121
- transports: ['websocket'], // Используем только WebSocket транспорт
147
+ path: '/socket.io', // Устанавливаем путь без слеша в конце
148
+ transports: ['websocket', 'polling'], // Поддерживаем оба транспорта
122
149
  reconnection: this.options.autoReconnect, // Автоматическое переподключение
123
150
  reconnectionAttempts: this.options.maxRetries, // Количество попыток
124
151
  reconnectionDelay: this.options.retryDelay, // Задержка между попытками