solver-sdk 1.8.1 → 2.0.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 (131) hide show
  1. package/dist/cjs/api/projects-api.js +4 -6
  2. package/dist/cjs/api/projects-api.js.map +1 -1
  3. package/dist/cjs/{code-solver-sdk.js → code-solver-sdk-v2.js} +220 -271
  4. package/dist/cjs/code-solver-sdk-v2.js.map +1 -0
  5. package/dist/cjs/constants/websocket-events.constants.js +37 -1
  6. package/dist/cjs/constants/websocket-events.constants.js.map +1 -1
  7. package/dist/cjs/constants/websocket-namespaces.constants.js +20 -0
  8. package/dist/cjs/constants/websocket-namespaces.constants.js.map +1 -0
  9. package/dist/cjs/index.js +24 -49
  10. package/dist/cjs/index.js.map +1 -1
  11. package/dist/cjs/interfaces/websocket/callbacks.interfaces.js +3 -0
  12. package/dist/cjs/interfaces/websocket/callbacks.interfaces.js.map +1 -0
  13. package/dist/cjs/interfaces/websocket/client-options.interfaces.js +3 -0
  14. package/dist/cjs/interfaces/websocket/client-options.interfaces.js.map +1 -0
  15. package/dist/cjs/interfaces/websocket/events.interfaces.js +3 -0
  16. package/dist/cjs/interfaces/websocket/events.interfaces.js.map +1 -0
  17. package/dist/cjs/interfaces/websocket/stats.interfaces.js +3 -0
  18. package/dist/cjs/interfaces/websocket/stats.interfaces.js.map +1 -0
  19. package/dist/cjs/utils/code-solver-websocket-client.js +382 -1503
  20. package/dist/cjs/utils/code-solver-websocket-client.js.map +1 -1
  21. package/dist/cjs/utils/connection-state-manager.js +133 -0
  22. package/dist/cjs/utils/connection-state-manager.js.map +1 -0
  23. package/dist/cjs/utils/logger.js +106 -0
  24. package/dist/cjs/utils/logger.js.map +1 -0
  25. package/dist/cjs/utils/ping-pong-manager.js +306 -0
  26. package/dist/cjs/utils/ping-pong-manager.js.map +1 -0
  27. package/dist/cjs/utils/session-manager.js +114 -0
  28. package/dist/cjs/utils/session-manager.js.map +1 -0
  29. package/dist/cjs/ws/base-ws-client.js +286 -0
  30. package/dist/cjs/ws/base-ws-client.js.map +1 -0
  31. package/dist/cjs/ws/dependencies-ws-client.js +11 -0
  32. package/dist/cjs/ws/dependencies-ws-client.js.map +1 -0
  33. package/dist/cjs/ws/diagnostics-service.js +170 -0
  34. package/dist/cjs/ws/diagnostics-service.js.map +1 -0
  35. package/dist/cjs/ws/filesystem-ws-client.js +315 -0
  36. package/dist/cjs/ws/filesystem-ws-client.js.map +1 -0
  37. package/dist/cjs/ws/indexing-ws-client.js +223 -0
  38. package/dist/cjs/ws/indexing-ws-client.js.map +1 -0
  39. package/dist/cjs/ws/notifications-ws-client.js +12 -0
  40. package/dist/cjs/ws/notifications-ws-client.js.map +1 -0
  41. package/dist/cjs/ws/reasoning-ws-client.js +330 -0
  42. package/dist/cjs/ws/reasoning-ws-client.js.map +1 -0
  43. package/dist/esm/api/projects-api.js +4 -6
  44. package/dist/esm/api/projects-api.js.map +1 -1
  45. package/dist/esm/{code-solver-sdk.js → code-solver-sdk-v2.js} +220 -271
  46. package/dist/esm/code-solver-sdk-v2.js.map +1 -0
  47. package/dist/esm/constants/websocket-events.constants.js +36 -0
  48. package/dist/esm/constants/websocket-events.constants.js.map +1 -1
  49. package/dist/esm/constants/websocket-namespaces.constants.js +17 -0
  50. package/dist/esm/constants/websocket-namespaces.constants.js.map +1 -0
  51. package/dist/esm/index.js +22 -97
  52. package/dist/esm/index.js.map +1 -1
  53. package/dist/esm/interfaces/websocket/callbacks.interfaces.js +2 -0
  54. package/dist/esm/interfaces/websocket/callbacks.interfaces.js.map +1 -0
  55. package/dist/esm/interfaces/websocket/client-options.interfaces.js +2 -0
  56. package/dist/esm/interfaces/websocket/client-options.interfaces.js.map +1 -0
  57. package/dist/esm/interfaces/websocket/events.interfaces.js +2 -0
  58. package/dist/esm/interfaces/websocket/events.interfaces.js.map +1 -0
  59. package/dist/esm/interfaces/websocket/stats.interfaces.js +2 -0
  60. package/dist/esm/interfaces/websocket/stats.interfaces.js.map +1 -0
  61. package/dist/esm/utils/code-solver-websocket-client.js +381 -1503
  62. package/dist/esm/utils/code-solver-websocket-client.js.map +1 -1
  63. package/dist/esm/utils/connection-state-manager.js +129 -0
  64. package/dist/esm/utils/connection-state-manager.js.map +1 -0
  65. package/dist/esm/utils/logger.js +101 -0
  66. package/dist/esm/utils/logger.js.map +1 -0
  67. package/dist/esm/utils/ping-pong-manager.js +302 -0
  68. package/dist/esm/utils/ping-pong-manager.js.map +1 -0
  69. package/dist/esm/utils/session-manager.js +109 -0
  70. package/dist/esm/utils/session-manager.js.map +1 -0
  71. package/dist/esm/ws/base-ws-client.js +282 -0
  72. package/dist/esm/ws/base-ws-client.js.map +1 -0
  73. package/dist/esm/ws/dependencies-ws-client.js +7 -0
  74. package/dist/esm/ws/dependencies-ws-client.js.map +1 -0
  75. package/dist/esm/ws/diagnostics-service.js +166 -0
  76. package/dist/esm/ws/diagnostics-service.js.map +1 -0
  77. package/dist/esm/ws/filesystem-ws-client.js +311 -0
  78. package/dist/esm/ws/filesystem-ws-client.js.map +1 -0
  79. package/dist/esm/ws/indexing-ws-client.js +219 -0
  80. package/dist/esm/ws/indexing-ws-client.js.map +1 -0
  81. package/dist/esm/ws/notifications-ws-client.js +8 -0
  82. package/dist/esm/ws/notifications-ws-client.js.map +1 -0
  83. package/dist/esm/ws/reasoning-ws-client.js +326 -0
  84. package/dist/esm/ws/reasoning-ws-client.js.map +1 -0
  85. package/dist/types/api/projects-api.d.ts.map +1 -1
  86. package/dist/types/{code-solver-sdk.d.ts → code-solver-sdk-v2.d.ts} +82 -85
  87. package/dist/types/code-solver-sdk-v2.d.ts.map +1 -0
  88. package/dist/types/constants/websocket-events.constants.d.ts +33 -0
  89. package/dist/types/constants/websocket-events.constants.d.ts.map +1 -1
  90. package/dist/types/constants/websocket-namespaces.constants.d.ts +16 -0
  91. package/dist/types/constants/websocket-namespaces.constants.d.ts.map +1 -0
  92. package/dist/types/index.d.ts +20 -90
  93. package/dist/types/index.d.ts.map +1 -1
  94. package/dist/types/interfaces/websocket/callbacks.interfaces.d.ts +30 -0
  95. package/dist/types/interfaces/websocket/callbacks.interfaces.d.ts.map +1 -0
  96. package/dist/types/interfaces/websocket/client-options.interfaces.d.ts +51 -0
  97. package/dist/types/interfaces/websocket/client-options.interfaces.d.ts.map +1 -0
  98. package/dist/types/interfaces/websocket/events.interfaces.d.ts +165 -0
  99. package/dist/types/interfaces/websocket/events.interfaces.d.ts.map +1 -0
  100. package/dist/types/interfaces/websocket/stats.interfaces.d.ts +72 -0
  101. package/dist/types/interfaces/websocket/stats.interfaces.d.ts.map +1 -0
  102. package/dist/types/utils/code-solver-websocket-client.d.ts +70 -616
  103. package/dist/types/utils/code-solver-websocket-client.d.ts.map +1 -1
  104. package/dist/types/utils/connection-state-manager.d.ts +94 -0
  105. package/dist/types/utils/connection-state-manager.d.ts.map +1 -0
  106. package/dist/types/utils/logger.d.ts +62 -0
  107. package/dist/types/utils/logger.d.ts.map +1 -0
  108. package/dist/types/utils/ping-pong-manager.d.ts +118 -0
  109. package/dist/types/utils/ping-pong-manager.d.ts.map +1 -0
  110. package/dist/types/utils/session-manager.d.ts +98 -0
  111. package/dist/types/utils/session-manager.d.ts.map +1 -0
  112. package/dist/types/ws/base-ws-client.d.ts +119 -0
  113. package/dist/types/ws/base-ws-client.d.ts.map +1 -0
  114. package/dist/types/ws/dependencies-ws-client.d.ts +6 -0
  115. package/dist/types/ws/dependencies-ws-client.d.ts.map +1 -0
  116. package/dist/types/ws/diagnostics-service.d.ts +93 -0
  117. package/dist/types/ws/diagnostics-service.d.ts.map +1 -0
  118. package/dist/types/ws/filesystem-ws-client.d.ts +203 -0
  119. package/dist/types/ws/filesystem-ws-client.d.ts.map +1 -0
  120. package/dist/types/ws/indexing-ws-client.d.ts +78 -0
  121. package/dist/types/ws/indexing-ws-client.d.ts.map +1 -0
  122. package/dist/types/ws/notifications-ws-client.d.ts +5 -0
  123. package/dist/types/ws/notifications-ws-client.d.ts.map +1 -0
  124. package/dist/types/ws/reasoning-ws-client.d.ts +87 -0
  125. package/dist/types/ws/reasoning-ws-client.d.ts.map +1 -0
  126. package/docs/AUTHENTICATION.md +31 -127
  127. package/docs/WEBSOCKET.md +51 -211
  128. package/package.json +1 -1
  129. package/dist/cjs/code-solver-sdk.js.map +0 -1
  130. package/dist/esm/code-solver-sdk.js.map +0 -1
  131. package/dist/types/code-solver-sdk.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,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"}