solver-sdk 2.8.0 → 3.1.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.
Files changed (197) hide show
  1. package/README.md +327 -360
  2. package/dist/cjs/api/chat-api/index.js +23 -49
  3. package/dist/cjs/api/chat-api/index.js.map +1 -1
  4. package/dist/cjs/api/chat-api/interfaces.js +1 -0
  5. package/dist/cjs/api/chat-api/interfaces.js.map +1 -1
  6. package/dist/cjs/api/context-api.js +6 -1
  7. package/dist/cjs/api/context-api.js.map +1 -1
  8. package/dist/cjs/api/models-api.js +43 -60
  9. package/dist/cjs/api/models-api.js.map +1 -1
  10. package/dist/cjs/api/projects-api.js +67 -295
  11. package/dist/cjs/api/projects-api.js.map +1 -1
  12. package/dist/cjs/api/search-api.js +131 -8
  13. package/dist/cjs/api/search-api.js.map +1 -1
  14. package/dist/cjs/code-solver-sdk.js +68 -322
  15. package/dist/cjs/code-solver-sdk.js.map +1 -1
  16. package/dist/cjs/index.js +3 -19
  17. package/dist/cjs/index.js.map +1 -1
  18. package/dist/cjs/utils/logger.js +4 -4
  19. package/dist/cjs/utils/logger.js.map +1 -1
  20. package/dist/esm/api/chat-api/index.js +22 -48
  21. package/dist/esm/api/chat-api/index.js.map +1 -1
  22. package/dist/esm/api/chat-api/interfaces.js +1 -0
  23. package/dist/esm/api/chat-api/interfaces.js.map +1 -1
  24. package/dist/esm/api/context-api.js +6 -1
  25. package/dist/esm/api/context-api.js.map +1 -1
  26. package/dist/esm/api/models-api.js +43 -60
  27. package/dist/esm/api/models-api.js.map +1 -1
  28. package/dist/esm/api/projects-api.js +67 -295
  29. package/dist/esm/api/projects-api.js.map +1 -1
  30. package/dist/esm/api/search-api.js +131 -8
  31. package/dist/esm/api/search-api.js.map +1 -1
  32. package/dist/esm/code-solver-sdk.js +68 -322
  33. package/dist/esm/code-solver-sdk.js.map +1 -1
  34. package/dist/esm/index.js +2 -18
  35. package/dist/esm/index.js.map +1 -1
  36. package/dist/esm/utils/logger.js +3 -3
  37. package/dist/esm/utils/logger.js.map +1 -1
  38. package/dist/types/api/chat-api/index.d.ts +1 -13
  39. package/dist/types/api/chat-api/index.d.ts.map +1 -1
  40. package/dist/types/api/chat-api/interfaces.d.ts +6 -54
  41. package/dist/types/api/chat-api/interfaces.d.ts.map +1 -1
  42. package/dist/types/api/chat-api/models.d.ts +3 -26
  43. package/dist/types/api/chat-api/models.d.ts.map +1 -1
  44. package/dist/types/api/context-api.d.ts.map +1 -1
  45. package/dist/types/api/models-api.d.ts +31 -62
  46. package/dist/types/api/models-api.d.ts.map +1 -1
  47. package/dist/types/api/projects-api.d.ts +50 -127
  48. package/dist/types/api/projects-api.d.ts.map +1 -1
  49. package/dist/types/api/search-api.d.ts +147 -6
  50. package/dist/types/api/search-api.d.ts.map +1 -1
  51. package/dist/types/code-solver-sdk.d.ts +36 -86
  52. package/dist/types/code-solver-sdk.d.ts.map +1 -1
  53. package/dist/types/index.d.ts +1 -14
  54. package/dist/types/index.d.ts.map +1 -1
  55. package/dist/types/interfaces/sdk-options.d.ts +18 -66
  56. package/dist/types/interfaces/sdk-options.d.ts.map +1 -1
  57. package/dist/types/utils/logger.d.ts +3 -3
  58. package/dist/types/utils/logger.d.ts.map +1 -1
  59. package/docs/README.md +53 -37
  60. package/docs/VSCODE_INTEGRATION.md +208 -371
  61. package/docs/indexing/INDEXING.md +658 -335
  62. package/package.json +26 -23
  63. package/dist/cjs/api/agents-api.js +0 -94
  64. package/dist/cjs/api/agents-api.js.map +0 -1
  65. package/dist/cjs/api/chat-api/websocket-helpers.js +0 -211
  66. package/dist/cjs/api/chat-api/websocket-helpers.js.map +0 -1
  67. package/dist/cjs/api/dependencies-api.js +0 -286
  68. package/dist/cjs/api/dependencies-api.js.map +0 -1
  69. package/dist/cjs/constants/websocket-events.constants.js +0 -170
  70. package/dist/cjs/constants/websocket-events.constants.js.map +0 -1
  71. package/dist/cjs/constants/websocket-namespaces.constants.js +0 -22
  72. package/dist/cjs/constants/websocket-namespaces.constants.js.map +0 -1
  73. package/dist/cjs/interfaces/websocket/callbacks.interfaces.js +0 -3
  74. package/dist/cjs/interfaces/websocket/callbacks.interfaces.js.map +0 -1
  75. package/dist/cjs/interfaces/websocket/client-options.interfaces.js +0 -3
  76. package/dist/cjs/interfaces/websocket/client-options.interfaces.js.map +0 -1
  77. package/dist/cjs/interfaces/websocket/events.interfaces.js +0 -3
  78. package/dist/cjs/interfaces/websocket/events.interfaces.js.map +0 -1
  79. package/dist/cjs/interfaces/websocket/vscode-command.interfaces.js +0 -42
  80. package/dist/cjs/interfaces/websocket/vscode-command.interfaces.js.map +0 -1
  81. package/dist/cjs/simple-indexing-client.js +0 -138
  82. package/dist/cjs/simple-indexing-client.js.map +0 -1
  83. package/dist/cjs/utils/code-solver-websocket-client.js +0 -497
  84. package/dist/cjs/utils/code-solver-websocket-client.js.map +0 -1
  85. package/dist/cjs/utils/connection-state-manager.js +0 -133
  86. package/dist/cjs/utils/connection-state-manager.js.map +0 -1
  87. package/dist/cjs/utils/indexing-websocket-client.js +0 -107
  88. package/dist/cjs/utils/indexing-websocket-client.js.map +0 -1
  89. package/dist/cjs/utils/session-manager.js +0 -114
  90. package/dist/cjs/utils/session-manager.js.map +0 -1
  91. package/dist/cjs/utils/simple-connection-monitor.js +0 -52
  92. package/dist/cjs/utils/simple-connection-monitor.js.map +0 -1
  93. package/dist/cjs/utils/websocket-client.js +0 -638
  94. package/dist/cjs/utils/websocket-client.js.map +0 -1
  95. package/dist/cjs/ws/base-ws-client.js +0 -280
  96. package/dist/cjs/ws/base-ws-client.js.map +0 -1
  97. package/dist/cjs/ws/dependencies-ws-client.js +0 -11
  98. package/dist/cjs/ws/dependencies-ws-client.js.map +0 -1
  99. package/dist/cjs/ws/file-editing-ws-client.js +0 -162
  100. package/dist/cjs/ws/file-editing-ws-client.js.map +0 -1
  101. package/dist/cjs/ws/filesystem-ws-client.js +0 -305
  102. package/dist/cjs/ws/filesystem-ws-client.js.map +0 -1
  103. package/dist/cjs/ws/indexing-ws-client.js +0 -275
  104. package/dist/cjs/ws/indexing-ws-client.js.map +0 -1
  105. package/dist/cjs/ws/notifications-ws-client.js +0 -12
  106. package/dist/cjs/ws/notifications-ws-client.js.map +0 -1
  107. package/dist/esm/api/agents-api.js +0 -90
  108. package/dist/esm/api/agents-api.js.map +0 -1
  109. package/dist/esm/api/chat-api/websocket-helpers.js +0 -205
  110. package/dist/esm/api/chat-api/websocket-helpers.js.map +0 -1
  111. package/dist/esm/api/dependencies-api.js +0 -282
  112. package/dist/esm/api/dependencies-api.js.map +0 -1
  113. package/dist/esm/constants/websocket-events.constants.js +0 -167
  114. package/dist/esm/constants/websocket-events.constants.js.map +0 -1
  115. package/dist/esm/constants/websocket-namespaces.constants.js +0 -19
  116. package/dist/esm/constants/websocket-namespaces.constants.js.map +0 -1
  117. package/dist/esm/interfaces/websocket/callbacks.interfaces.js +0 -2
  118. package/dist/esm/interfaces/websocket/callbacks.interfaces.js.map +0 -1
  119. package/dist/esm/interfaces/websocket/client-options.interfaces.js +0 -2
  120. package/dist/esm/interfaces/websocket/client-options.interfaces.js.map +0 -1
  121. package/dist/esm/interfaces/websocket/events.interfaces.js +0 -2
  122. package/dist/esm/interfaces/websocket/events.interfaces.js.map +0 -1
  123. package/dist/esm/interfaces/websocket/vscode-command.interfaces.js +0 -39
  124. package/dist/esm/interfaces/websocket/vscode-command.interfaces.js.map +0 -1
  125. package/dist/esm/simple-indexing-client.js +0 -134
  126. package/dist/esm/simple-indexing-client.js.map +0 -1
  127. package/dist/esm/utils/code-solver-websocket-client.js +0 -492
  128. package/dist/esm/utils/code-solver-websocket-client.js.map +0 -1
  129. package/dist/esm/utils/connection-state-manager.js +0 -129
  130. package/dist/esm/utils/connection-state-manager.js.map +0 -1
  131. package/dist/esm/utils/indexing-websocket-client.js +0 -103
  132. package/dist/esm/utils/indexing-websocket-client.js.map +0 -1
  133. package/dist/esm/utils/session-manager.js +0 -109
  134. package/dist/esm/utils/session-manager.js.map +0 -1
  135. package/dist/esm/utils/simple-connection-monitor.js +0 -48
  136. package/dist/esm/utils/simple-connection-monitor.js.map +0 -1
  137. package/dist/esm/utils/websocket-client.js +0 -634
  138. package/dist/esm/utils/websocket-client.js.map +0 -1
  139. package/dist/esm/ws/base-ws-client.js +0 -276
  140. package/dist/esm/ws/base-ws-client.js.map +0 -1
  141. package/dist/esm/ws/dependencies-ws-client.js +0 -7
  142. package/dist/esm/ws/dependencies-ws-client.js.map +0 -1
  143. package/dist/esm/ws/file-editing-ws-client.js +0 -158
  144. package/dist/esm/ws/file-editing-ws-client.js.map +0 -1
  145. package/dist/esm/ws/filesystem-ws-client.js +0 -301
  146. package/dist/esm/ws/filesystem-ws-client.js.map +0 -1
  147. package/dist/esm/ws/indexing-ws-client.js +0 -271
  148. package/dist/esm/ws/indexing-ws-client.js.map +0 -1
  149. package/dist/esm/ws/notifications-ws-client.js +0 -8
  150. package/dist/esm/ws/notifications-ws-client.js.map +0 -1
  151. package/dist/types/api/agents-api.d.ts +0 -141
  152. package/dist/types/api/agents-api.d.ts.map +0 -1
  153. package/dist/types/api/chat-api/websocket-helpers.d.ts +0 -40
  154. package/dist/types/api/chat-api/websocket-helpers.d.ts.map +0 -1
  155. package/dist/types/api/dependencies-api.d.ts +0 -109
  156. package/dist/types/api/dependencies-api.d.ts.map +0 -1
  157. package/dist/types/constants/websocket-events.constants.d.ts +0 -144
  158. package/dist/types/constants/websocket-events.constants.d.ts.map +0 -1
  159. package/dist/types/constants/websocket-namespaces.constants.d.ts +0 -17
  160. package/dist/types/constants/websocket-namespaces.constants.d.ts.map +0 -1
  161. package/dist/types/interfaces/websocket/callbacks.interfaces.d.ts +0 -30
  162. package/dist/types/interfaces/websocket/callbacks.interfaces.d.ts.map +0 -1
  163. package/dist/types/interfaces/websocket/client-options.interfaces.d.ts +0 -51
  164. package/dist/types/interfaces/websocket/client-options.interfaces.d.ts.map +0 -1
  165. package/dist/types/interfaces/websocket/events.interfaces.d.ts +0 -165
  166. package/dist/types/interfaces/websocket/events.interfaces.d.ts.map +0 -1
  167. package/dist/types/interfaces/websocket/vscode-command.interfaces.d.ts +0 -56
  168. package/dist/types/interfaces/websocket/vscode-command.interfaces.d.ts.map +0 -1
  169. package/dist/types/simple-indexing-client.d.ts +0 -66
  170. package/dist/types/simple-indexing-client.d.ts.map +0 -1
  171. package/dist/types/utils/code-solver-websocket-client.d.ts +0 -144
  172. package/dist/types/utils/code-solver-websocket-client.d.ts.map +0 -1
  173. package/dist/types/utils/connection-state-manager.d.ts +0 -94
  174. package/dist/types/utils/connection-state-manager.d.ts.map +0 -1
  175. package/dist/types/utils/indexing-websocket-client.d.ts +0 -123
  176. package/dist/types/utils/indexing-websocket-client.d.ts.map +0 -1
  177. package/dist/types/utils/session-manager.d.ts +0 -98
  178. package/dist/types/utils/session-manager.d.ts.map +0 -1
  179. package/dist/types/utils/simple-connection-monitor.d.ts +0 -26
  180. package/dist/types/utils/simple-connection-monitor.d.ts.map +0 -1
  181. package/dist/types/utils/websocket-client.d.ts +0 -233
  182. package/dist/types/utils/websocket-client.d.ts.map +0 -1
  183. package/dist/types/ws/base-ws-client.d.ts +0 -119
  184. package/dist/types/ws/base-ws-client.d.ts.map +0 -1
  185. package/dist/types/ws/dependencies-ws-client.d.ts +0 -6
  186. package/dist/types/ws/dependencies-ws-client.d.ts.map +0 -1
  187. package/dist/types/ws/file-editing-ws-client.d.ts +0 -85
  188. package/dist/types/ws/file-editing-ws-client.d.ts.map +0 -1
  189. package/dist/types/ws/filesystem-ws-client.d.ts +0 -201
  190. package/dist/types/ws/filesystem-ws-client.d.ts.map +0 -1
  191. package/dist/types/ws/indexing-ws-client.d.ts +0 -94
  192. package/dist/types/ws/indexing-ws-client.d.ts.map +0 -1
  193. package/dist/types/ws/notifications-ws-client.d.ts +0 -5
  194. package/dist/types/ws/notifications-ws-client.d.ts.map +0 -1
  195. package/docs/ARCHITECTURE.md +0 -268
  196. package/docs/QUICK_START.md +0 -126
  197. package/docs/WEBSOCKET.md +0 -472
@@ -1,133 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ConnectionStateManager = void 0;
4
- const logger_js_1 = require("./logger.js");
5
- /**
6
- * Класс для управления состоянием подключений
7
- */
8
- class ConnectionStateManager {
9
- /**
10
- * Создает новый менеджер состояния подключений
11
- * @param {ConnectionStateManagerOptions} options Опции менеджера состояния подключений
12
- */
13
- constructor(options = {}) {
14
- /** Хранилище состояний подключений */
15
- this.states = new Map();
16
- this.reconnectStrategy = options.reconnectStrategy || 'exponential';
17
- this.retryDelay = options.retryDelay || 1000;
18
- this.maxRetryDelay = options.maxRetryDelay || 30000;
19
- this.logger = options.logger || (0, logger_js_1.createWebSocketLogger)('ConnectionStateManager');
20
- }
21
- /**
22
- * Получает состояние подключения для указанного пространства имен
23
- * @param {WebSocketNamespace} namespace Пространство имен
24
- * @returns {ConnectionState} Состояние подключения
25
- */
26
- getState(namespace) {
27
- if (!this.states.has(namespace)) {
28
- // Инициализируем состояние по умолчанию
29
- this.states.set(namespace, {
30
- lastConnectTime: 0,
31
- reconnectAttempts: 0,
32
- connected: false,
33
- reconnecting: false
34
- });
35
- }
36
- return this.states.get(namespace);
37
- }
38
- /**
39
- * Устанавливает состояние подключения для указанного пространства имен
40
- * @param {WebSocketNamespace} namespace Пространство имен
41
- * @param {boolean} connected Состояние подключения
42
- * @param {boolean} reconnecting Состояние переподключения
43
- */
44
- setConnectionState(namespace, connected, reconnecting = false) {
45
- const state = this.getState(namespace);
46
- state.connected = connected;
47
- state.reconnecting = reconnecting;
48
- if (connected) {
49
- state.lastConnectTime = Date.now();
50
- // Сбрасываем счетчик попыток переподключения, если успешно подключились
51
- if (!reconnecting) {
52
- state.reconnectAttempts = 0;
53
- }
54
- }
55
- this.states.set(namespace, state);
56
- this.logger.debug(`Обновлено состояние подключения для ${namespace}`, {
57
- connected,
58
- reconnecting,
59
- attempts: state.reconnectAttempts,
60
- lastConnect: state.lastConnectTime
61
- });
62
- }
63
- /**
64
- * Увеличивает счетчик попыток переподключения для указанного пространства имен
65
- * @param {WebSocketNamespace} namespace Пространство имен
66
- * @returns {number} Новое количество попыток
67
- */
68
- incrementReconnectAttempts(namespace) {
69
- const state = this.getState(namespace);
70
- state.reconnectAttempts++;
71
- state.reconnecting = true;
72
- this.states.set(namespace, state);
73
- this.logger.debug(`Увеличен счетчик попыток переподключения для ${namespace}`, {
74
- attempts: state.reconnectAttempts
75
- });
76
- return state.reconnectAttempts;
77
- }
78
- /**
79
- * Рассчитывает задержку для переподключения на основе количества попыток и стратегии
80
- * @param {WebSocketNamespace} namespace Пространство имен
81
- * @returns {number} Задержка в миллисекундах
82
- */
83
- calculateReconnectDelay(namespace) {
84
- const state = this.getState(namespace);
85
- const attempts = state.reconnectAttempts;
86
- if (this.reconnectStrategy === 'exponential') {
87
- // Экспоненциальный рост с фактором 1.5
88
- const calculatedDelay = Math.min(this.retryDelay * Math.pow(1.5, attempts), this.maxRetryDelay);
89
- // Добавляем случайный фактор (jitter) для предотвращения штормов переподключений
90
- return calculatedDelay * (0.8 + Math.random() * 0.4);
91
- }
92
- else {
93
- // Линейный рост
94
- return Math.min(this.retryDelay * (attempts + 1), this.maxRetryDelay);
95
- }
96
- }
97
- /**
98
- * Сбрасывает счетчик попыток переподключения для указанного пространства имен
99
- * @param {WebSocketNamespace} namespace Пространство имен
100
- */
101
- resetReconnectAttempts(namespace) {
102
- const state = this.getState(namespace);
103
- state.reconnectAttempts = 0;
104
- state.reconnecting = false;
105
- this.states.set(namespace, state);
106
- this.logger.debug(`Сброшен счетчик попыток переподключения для ${namespace}`);
107
- }
108
- /**
109
- * Регистрирует успешное подключение
110
- * @param {WebSocketNamespace} namespace Пространство имен
111
- */
112
- registerSuccessfulConnection(namespace) {
113
- this.setConnectionState(namespace, true, false);
114
- this.resetReconnectAttempts(namespace);
115
- }
116
- /**
117
- * Регистрирует отключение
118
- * @param {WebSocketNamespace} namespace Пространство имен
119
- */
120
- registerDisconnection(namespace) {
121
- this.setConnectionState(namespace, false, false);
122
- }
123
- /**
124
- * Регистрирует начало процесса переподключения
125
- * @param {WebSocketNamespace} namespace Пространство имен
126
- */
127
- registerReconnecting(namespace) {
128
- this.setConnectionState(namespace, false, true);
129
- this.incrementReconnectAttempts(namespace);
130
- }
131
- }
132
- exports.ConnectionStateManager = ConnectionStateManager;
133
- //# sourceMappingURL=connection-state-manager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"connection-state-manager.js","sourceRoot":"","sources":["../../../src/utils/connection-state-manager.ts"],"names":[],"mappings":"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"}
@@ -1,107 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.IndexingWebSocketClient = exports.IndexingEvent = void 0;
4
- const websocket_client_js_1 = require("./websocket-client.js");
5
- /**
6
- * События индексации
7
- */
8
- var IndexingEvent;
9
- (function (IndexingEvent) {
10
- /** Начало индексации */
11
- IndexingEvent["START"] = "indexing_start";
12
- /** Прогресс индексации */
13
- IndexingEvent["PROGRESS"] = "indexing_progress";
14
- /** Завершение индексации */
15
- IndexingEvent["COMPLETE"] = "indexing_complete";
16
- /** Ошибка индексации */
17
- IndexingEvent["ERROR"] = "indexing_error";
18
- })(IndexingEvent || (exports.IndexingEvent = IndexingEvent = {}));
19
- /**
20
- * WebSocket клиент для работы с индексацией
21
- */
22
- class IndexingWebSocketClient extends websocket_client_js_1.WebSocketClient {
23
- /**
24
- * Создает новый WebSocket клиент для индексации
25
- * @param {string} url URL для подключения
26
- * @param {IndexingWebSocketOptions} [options] Опции клиента
27
- */
28
- constructor(url, options = {}) {
29
- // Сохраняем базовый URL
30
- const baseUrl = url;
31
- // Формируем URL с параметрами для проекта если он указан
32
- let targetUrl = url;
33
- if (options.projectId) {
34
- const urlWithParams = new URL(url);
35
- urlWithParams.searchParams.append('projectId', options.projectId);
36
- urlWithParams.searchParams.append('type', 'indexing');
37
- targetUrl = urlWithParams.toString();
38
- }
39
- super(targetUrl, {
40
- ...options,
41
- headers: {
42
- ...(options.headers || {}),
43
- ...(options.apiKey ? { 'Authorization': `Bearer ${options.apiKey}` } : {})
44
- }
45
- });
46
- /** Идентификатор проекта */
47
- this.projectId = null;
48
- this.baseUrl = baseUrl;
49
- this.projectId = options.projectId || null;
50
- }
51
- /**
52
- * Устанавливает идентификатор проекта
53
- * @param {string} projectId Идентификатор проекта
54
- */
55
- setProjectId(projectId) {
56
- this.projectId = projectId;
57
- }
58
- /**
59
- * Подключается к WebSocket для отслеживания индексации
60
- * @param {string} [projectId] Идентификатор проекта (если не был указан в конструкторе)
61
- * @returns {Promise<void>}
62
- */
63
- async connect(projectId) {
64
- const targetProjectId = projectId || this.projectId;
65
- if (!targetProjectId) {
66
- throw new Error('Project ID is required for indexing WebSocket connection');
67
- }
68
- // Сохраняем ID проекта
69
- this.projectId = targetProjectId;
70
- // Если проект изменился и клиент уже подключен, отключаемся
71
- if (projectId && this.isConnected()) {
72
- this.close();
73
- }
74
- // Выполняем соединение
75
- await super.connect();
76
- }
77
- /**
78
- * Подписывается на события начала индексации
79
- * @param {(data: {projectId: string}) => void} handler Обработчик события
80
- */
81
- onStart(handler) {
82
- this.on(IndexingEvent.START, handler);
83
- }
84
- /**
85
- * Подписывается на события прогресса индексации
86
- * @param {(data: IndexingProgressData) => void} handler Обработчик события
87
- */
88
- onProgress(handler) {
89
- this.on(IndexingEvent.PROGRESS, handler);
90
- }
91
- /**
92
- * Подписывается на события завершения индексации
93
- * @param {(data: IndexingCompleteData) => void} handler Обработчик события
94
- */
95
- onComplete(handler) {
96
- this.on(IndexingEvent.COMPLETE, handler);
97
- }
98
- /**
99
- * Подписывается на события ошибок индексации
100
- * @param {(data: IndexingErrorData) => void} handler Обработчик события
101
- */
102
- onError(handler) {
103
- this.on(IndexingEvent.ERROR, handler);
104
- }
105
- }
106
- exports.IndexingWebSocketClient = IndexingWebSocketClient;
107
- //# sourceMappingURL=indexing-websocket-client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"indexing-websocket-client.js","sourceRoot":"","sources":["../../../src/utils/indexing-websocket-client.ts"],"names":[],"mappings":";;;AAAA,+DAAgF;AAEhF;;GAEG;AACH,IAAY,aAYX;AAZD,WAAY,aAAa;IACvB,wBAAwB;IACxB,yCAAwB,CAAA;IAExB,0BAA0B;IAC1B,+CAA8B,CAAA;IAE9B,4BAA4B;IAC5B,+CAA8B,CAAA;IAE9B,wBAAwB;IACxB,yCAAwB,CAAA;AAC1B,CAAC,EAZW,aAAa,6BAAb,aAAa,QAYxB;AAkFD;;GAEG;AACH,MAAa,uBAAwB,SAAQ,qCAAe;IAO1D;;;;OAIG;IACH,YAAY,GAAW,EAAE,UAAoC,EAAE;QAC7D,wBAAwB;QACxB,MAAM,OAAO,GAAG,GAAG,CAAC;QAEpB,yDAAyD;QACzD,IAAI,SAAS,GAAG,GAAG,CAAC;QACpB,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YACnC,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;YAClE,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YACtD,SAAS,GAAG,aAAa,CAAC,QAAQ,EAAE,CAAC;QACvC,CAAC;QAED,KAAK,CAAC,SAAS,EAAE;YACf,GAAG,OAAO;YACV,OAAO,EAAE;gBACP,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;gBAC1B,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,UAAU,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC3E;SACF,CAAC,CAAC;QA9BL,4BAA4B;QACpB,cAAS,GAAkB,IAAI,CAAC;QA+BtC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC;IAC7C,CAAC;IAED;;;OAGG;IACI,YAAY,CAAC,SAAiB;QACnC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,OAAO,CAAC,SAAkB;QACrC,MAAM,eAAe,GAAG,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC;QAEpD,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAC9E,CAAC;QAED,uBAAuB;QACvB,IAAI,CAAC,SAAS,GAAG,eAAe,CAAC;QAEjC,4DAA4D;QAC5D,IAAI,SAAS,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACpC,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC;QAED,uBAAuB;QACvB,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;IAED;;;OAGG;IACI,OAAO,CAAC,OAA4C;QACzD,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IAED;;;OAGG;IACI,UAAU,CAAC,OAA6C;QAC7D,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED;;;OAGG;IACI,UAAU,CAAC,OAA6C;QAC7D,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED;;;OAGG;IACI,OAAO,CAAC,OAA0C;QACvD,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;CACF;AApGD,0DAoGC"}
@@ -1,114 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,52 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SimpleConnectionMonitor = void 0;
4
- /**
5
- * Минимальный мониторинг WebSocket соединения
6
- */
7
- class SimpleConnectionMonitor {
8
- constructor() {
9
- this.monitors = new Map();
10
- this.checkInterval = 30000; // 30 секунд
11
- }
12
- /**
13
- * Запускает мониторинг для клиента
14
- */
15
- startMonitoring(namespace, client) {
16
- this.stopMonitoring(namespace);
17
- const monitor = setInterval(() => {
18
- // Простая проверка состояния соединения
19
- if (!client.isConnected()) {
20
- this.stopMonitoring(namespace);
21
- return;
22
- }
23
- }, this.checkInterval);
24
- this.monitors.set(namespace, monitor);
25
- }
26
- /**
27
- * Останавливает мониторинг
28
- */
29
- stopMonitoring(namespace) {
30
- const monitor = this.monitors.get(namespace);
31
- if (monitor) {
32
- clearInterval(monitor);
33
- this.monitors.delete(namespace);
34
- }
35
- }
36
- /**
37
- * Останавливает весь мониторинг
38
- */
39
- stopAll() {
40
- for (const [namespace] of this.monitors) {
41
- this.stopMonitoring(namespace);
42
- }
43
- }
44
- /**
45
- * Проверяет активен ли мониторинг
46
- */
47
- isMonitoring(namespace) {
48
- return this.monitors.has(namespace);
49
- }
50
- }
51
- exports.SimpleConnectionMonitor = SimpleConnectionMonitor;
52
- //# sourceMappingURL=simple-connection-monitor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"simple-connection-monitor.js","sourceRoot":"","sources":["../../../src/utils/simple-connection-monitor.ts"],"names":[],"mappings":";;;AAGA;;GAEG;AACH,MAAa,uBAAuB;IAApC;QACmB,aAAQ,GAA4C,IAAI,GAAG,EAAE,CAAC;QAC9D,kBAAa,GAAG,KAAK,CAAC,CAAC,YAAY;IA6CtD,CAAC;IA3CC;;OAEG;IACH,eAAe,CAAC,SAA6B,EAAE,MAAuB;QACpE,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QAE/B,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE;YAC/B,wCAAwC;YACxC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;gBAC1B,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;gBAC/B,OAAO;YACT,CAAC;QACH,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAEvB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,SAA6B;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,OAAO,EAAE,CAAC;YACZ,aAAa,CAAC,OAAO,CAAC,CAAC;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,OAAO;QACL,KAAK,MAAM,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACxC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,SAA6B;QACxC,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;CACF;AA/CD,0DA+CC"}