solver-sdk 1.0.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 (167) hide show
  1. package/README.md +248 -0
  2. package/dist/cjs/api/agents-api.js +94 -0
  3. package/dist/cjs/api/agents-api.js.map +1 -0
  4. package/dist/cjs/api/code-modification-api.js +60 -0
  5. package/dist/cjs/api/code-modification-api.js.map +1 -0
  6. package/dist/cjs/api/context-api.js +58 -0
  7. package/dist/cjs/api/context-api.js.map +1 -0
  8. package/dist/cjs/api/projects-api.js +82 -0
  9. package/dist/cjs/api/projects-api.js.map +1 -0
  10. package/dist/cjs/api/reasoning-api.js +73 -0
  11. package/dist/cjs/api/reasoning-api.js.map +1 -0
  12. package/dist/cjs/api/search-api.js +54 -0
  13. package/dist/cjs/api/search-api.js.map +1 -0
  14. package/dist/cjs/code-solver-sdk.js +327 -0
  15. package/dist/cjs/code-solver-sdk.js.map +1 -0
  16. package/dist/cjs/index.js +118 -0
  17. package/dist/cjs/index.js.map +1 -0
  18. package/dist/cjs/interfaces/http-client.js +3 -0
  19. package/dist/cjs/interfaces/http-client.js.map +1 -0
  20. package/dist/cjs/interfaces/sdk-options.js +3 -0
  21. package/dist/cjs/interfaces/sdk-options.js.map +1 -0
  22. package/dist/cjs/models/types.js +17 -0
  23. package/dist/cjs/models/types.js.map +1 -0
  24. package/dist/cjs/utils/code-solver-websocket-client.js +267 -0
  25. package/dist/cjs/utils/code-solver-websocket-client.js.map +1 -0
  26. package/dist/cjs/utils/http-client.js +234 -0
  27. package/dist/cjs/utils/http-client.js.map +1 -0
  28. package/dist/cjs/utils/indexing-websocket-client.js +107 -0
  29. package/dist/cjs/utils/indexing-websocket-client.js.map +1 -0
  30. package/dist/cjs/utils/sse-client.js +233 -0
  31. package/dist/cjs/utils/sse-client.js.map +1 -0
  32. package/dist/cjs/utils/websocket-client.js +268 -0
  33. package/dist/cjs/utils/websocket-client.js.map +1 -0
  34. package/dist/esm/api/agents-api.js +90 -0
  35. package/dist/esm/api/agents-api.js.map +1 -0
  36. package/dist/esm/api/code-modification-api.js +56 -0
  37. package/dist/esm/api/code-modification-api.js.map +1 -0
  38. package/dist/esm/api/context-api.js +54 -0
  39. package/dist/esm/api/context-api.js.map +1 -0
  40. package/dist/esm/api/projects-api.js +78 -0
  41. package/dist/esm/api/projects-api.js.map +1 -0
  42. package/dist/esm/api/reasoning-api.js +69 -0
  43. package/dist/esm/api/reasoning-api.js.map +1 -0
  44. package/dist/esm/api/search-api.js +50 -0
  45. package/dist/esm/api/search-api.js.map +1 -0
  46. package/dist/esm/code-solver-sdk.js +323 -0
  47. package/dist/esm/code-solver-sdk.js.map +1 -0
  48. package/dist/esm/index.js +1882 -0
  49. package/dist/esm/index.js.map +1 -0
  50. package/dist/esm/interfaces/http-client.js +2 -0
  51. package/dist/esm/interfaces/http-client.js.map +1 -0
  52. package/dist/esm/interfaces/sdk-options.js +2 -0
  53. package/dist/esm/interfaces/sdk-options.js.map +1 -0
  54. package/dist/esm/models/types.js +14 -0
  55. package/dist/esm/models/types.js.map +1 -0
  56. package/dist/esm/types/api/agents-api.d.ts +141 -0
  57. package/dist/esm/types/api/agents-api.d.ts.map +1 -0
  58. package/dist/esm/types/api/code-modification-api.d.ts +104 -0
  59. package/dist/esm/types/api/code-modification-api.d.ts.map +1 -0
  60. package/dist/esm/types/api/context-api.d.ts +86 -0
  61. package/dist/esm/types/api/context-api.d.ts.map +1 -0
  62. package/dist/esm/types/api/projects-api.d.ts +89 -0
  63. package/dist/esm/types/api/projects-api.d.ts.map +1 -0
  64. package/dist/esm/types/api/reasoning-api.d.ts +130 -0
  65. package/dist/esm/types/api/reasoning-api.d.ts.map +1 -0
  66. package/dist/esm/types/api/search-api.d.ts +92 -0
  67. package/dist/esm/types/api/search-api.d.ts.map +1 -0
  68. package/dist/esm/types/code-solver-sdk.d.ts +145 -0
  69. package/dist/esm/types/code-solver-sdk.d.ts.map +1 -0
  70. package/dist/esm/types/index.d.ts +81 -0
  71. package/dist/esm/types/index.d.ts.map +1 -0
  72. package/dist/esm/types/interfaces/http-client.d.ts +110 -0
  73. package/dist/esm/types/interfaces/http-client.d.ts.map +1 -0
  74. package/dist/esm/types/interfaces/sdk-options.d.ts +34 -0
  75. package/dist/esm/types/interfaces/sdk-options.d.ts.map +1 -0
  76. package/dist/esm/types/models/types.d.ts +139 -0
  77. package/dist/esm/types/models/types.d.ts.map +1 -0
  78. package/dist/esm/types/utils/code-solver-websocket-client.d.ts +138 -0
  79. package/dist/esm/types/utils/code-solver-websocket-client.d.ts.map +1 -0
  80. package/dist/esm/types/utils/http-client.d.ts +85 -0
  81. package/dist/esm/types/utils/http-client.d.ts.map +1 -0
  82. package/dist/esm/types/utils/indexing-websocket-client.d.ts +123 -0
  83. package/dist/esm/types/utils/indexing-websocket-client.d.ts.map +1 -0
  84. package/dist/esm/types/utils/sse-client.d.ts +92 -0
  85. package/dist/esm/types/utils/sse-client.d.ts.map +1 -0
  86. package/dist/esm/types/utils/websocket-client.d.ts +118 -0
  87. package/dist/esm/types/utils/websocket-client.d.ts.map +1 -0
  88. package/dist/esm/utils/code-solver-websocket-client.js +263 -0
  89. package/dist/esm/utils/code-solver-websocket-client.js.map +1 -0
  90. package/dist/esm/utils/http-client.js +227 -0
  91. package/dist/esm/utils/http-client.js.map +1 -0
  92. package/dist/esm/utils/indexing-websocket-client.js +103 -0
  93. package/dist/esm/utils/indexing-websocket-client.js.map +1 -0
  94. package/dist/esm/utils/sse-client.js +229 -0
  95. package/dist/esm/utils/sse-client.js.map +1 -0
  96. package/dist/esm/utils/websocket-client.js +264 -0
  97. package/dist/esm/utils/websocket-client.js.map +1 -0
  98. package/dist/index.d.ts +1599 -0
  99. package/dist/types/api/agents-api.d.ts +141 -0
  100. package/dist/types/api/agents-api.d.ts.map +1 -0
  101. package/dist/types/api/code-modification-api.d.ts +104 -0
  102. package/dist/types/api/code-modification-api.d.ts.map +1 -0
  103. package/dist/types/api/context-api.d.ts +86 -0
  104. package/dist/types/api/context-api.d.ts.map +1 -0
  105. package/dist/types/api/projects-api.d.ts +89 -0
  106. package/dist/types/api/projects-api.d.ts.map +1 -0
  107. package/dist/types/api/reasoning-api.d.ts +130 -0
  108. package/dist/types/api/reasoning-api.d.ts.map +1 -0
  109. package/dist/types/api/search-api.d.ts +92 -0
  110. package/dist/types/api/search-api.d.ts.map +1 -0
  111. package/dist/types/code-solver-sdk.d.ts +145 -0
  112. package/dist/types/code-solver-sdk.d.ts.map +1 -0
  113. package/dist/types/index.d.ts +81 -0
  114. package/dist/types/index.d.ts.map +1 -0
  115. package/dist/types/interfaces/http-client.d.ts +110 -0
  116. package/dist/types/interfaces/http-client.d.ts.map +1 -0
  117. package/dist/types/interfaces/sdk-options.d.ts +34 -0
  118. package/dist/types/interfaces/sdk-options.d.ts.map +1 -0
  119. package/dist/types/models/types.d.ts +139 -0
  120. package/dist/types/models/types.d.ts.map +1 -0
  121. package/dist/types/utils/code-solver-websocket-client.d.ts +138 -0
  122. package/dist/types/utils/code-solver-websocket-client.d.ts.map +1 -0
  123. package/dist/types/utils/http-client.d.ts +85 -0
  124. package/dist/types/utils/http-client.d.ts.map +1 -0
  125. package/dist/types/utils/indexing-websocket-client.d.ts +123 -0
  126. package/dist/types/utils/indexing-websocket-client.d.ts.map +1 -0
  127. package/dist/types/utils/sse-client.d.ts +92 -0
  128. package/dist/types/utils/sse-client.d.ts.map +1 -0
  129. package/dist/types/utils/websocket-client.d.ts +118 -0
  130. package/dist/types/utils/websocket-client.d.ts.map +1 -0
  131. package/dist/umd/code-solver-sdk.js +1902 -0
  132. package/dist/umd/code-solver-sdk.js.map +1 -0
  133. package/dist/umd/code-solver-sdk.min.js +2 -0
  134. package/dist/umd/code-solver-sdk.min.js.map +1 -0
  135. package/dist/umd/types/api/agents-api.d.ts +141 -0
  136. package/dist/umd/types/api/agents-api.d.ts.map +1 -0
  137. package/dist/umd/types/api/code-modification-api.d.ts +104 -0
  138. package/dist/umd/types/api/code-modification-api.d.ts.map +1 -0
  139. package/dist/umd/types/api/context-api.d.ts +86 -0
  140. package/dist/umd/types/api/context-api.d.ts.map +1 -0
  141. package/dist/umd/types/api/projects-api.d.ts +89 -0
  142. package/dist/umd/types/api/projects-api.d.ts.map +1 -0
  143. package/dist/umd/types/api/reasoning-api.d.ts +130 -0
  144. package/dist/umd/types/api/reasoning-api.d.ts.map +1 -0
  145. package/dist/umd/types/api/search-api.d.ts +92 -0
  146. package/dist/umd/types/api/search-api.d.ts.map +1 -0
  147. package/dist/umd/types/code-solver-sdk.d.ts +145 -0
  148. package/dist/umd/types/code-solver-sdk.d.ts.map +1 -0
  149. package/dist/umd/types/index.d.ts +81 -0
  150. package/dist/umd/types/index.d.ts.map +1 -0
  151. package/dist/umd/types/interfaces/http-client.d.ts +110 -0
  152. package/dist/umd/types/interfaces/http-client.d.ts.map +1 -0
  153. package/dist/umd/types/interfaces/sdk-options.d.ts +34 -0
  154. package/dist/umd/types/interfaces/sdk-options.d.ts.map +1 -0
  155. package/dist/umd/types/models/types.d.ts +139 -0
  156. package/dist/umd/types/models/types.d.ts.map +1 -0
  157. package/dist/umd/types/utils/code-solver-websocket-client.d.ts +138 -0
  158. package/dist/umd/types/utils/code-solver-websocket-client.d.ts.map +1 -0
  159. package/dist/umd/types/utils/http-client.d.ts +85 -0
  160. package/dist/umd/types/utils/http-client.d.ts.map +1 -0
  161. package/dist/umd/types/utils/indexing-websocket-client.d.ts +123 -0
  162. package/dist/umd/types/utils/indexing-websocket-client.d.ts.map +1 -0
  163. package/dist/umd/types/utils/sse-client.d.ts +92 -0
  164. package/dist/umd/types/utils/sse-client.d.ts.map +1 -0
  165. package/dist/umd/types/utils/websocket-client.d.ts +118 -0
  166. package/dist/umd/types/utils/websocket-client.d.ts.map +1 -0
  167. package/package.json +98 -0
@@ -0,0 +1,267 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CodeSolverWebSocketClient = exports.WebSocketNamespace = void 0;
4
+ const websocket_client_js_1 = require("./websocket-client.js");
5
+ /**
6
+ * Пространства имен для WebSocket
7
+ */
8
+ var WebSocketNamespace;
9
+ (function (WebSocketNamespace) {
10
+ /** Пространство имен для рассуждений */
11
+ WebSocketNamespace["REASONING"] = "reasoning";
12
+ /** Пространство имен для индексации */
13
+ WebSocketNamespace["INDEXING"] = "indexing";
14
+ /** Пространство имен для уведомлений */
15
+ WebSocketNamespace["NOTIFICATIONS"] = "notifications";
16
+ })(WebSocketNamespace || (exports.WebSocketNamespace = WebSocketNamespace = {}));
17
+ /**
18
+ * WebSocket клиент для работы с Code Solver API
19
+ */
20
+ class CodeSolverWebSocketClient {
21
+ /**
22
+ * Создает новый WebSocket клиент для Code Solver API
23
+ * @param {string} baseURL Базовый URL API
24
+ * @param {CodeSolverWebSocketOptions} [options] Опции клиента
25
+ */
26
+ constructor(baseURL, options = {}) {
27
+ /** WebSocket клиенты для разных пространств имен */
28
+ this.clients = new Map();
29
+ /** Активная сессия рассуждения */
30
+ this.activeReasoningId = null;
31
+ /** Активная сессия индексации */
32
+ this.activeProjectId = null;
33
+ this.baseURL = baseURL.replace(/^http/, 'ws');
34
+ this.options = {
35
+ ...options,
36
+ headers: {
37
+ ...(options.headers || {}),
38
+ ...(options.apiKey ? { 'Authorization': `Bearer ${options.apiKey}` } : {})
39
+ }
40
+ };
41
+ }
42
+ /**
43
+ * Подключается к пространству имен WebSocket
44
+ * @param {WebSocketNamespace} namespace Пространство имен
45
+ * @param {Record<string, any>} [params] Параметры подключения
46
+ * @returns {Promise<WebSocketClient>} WebSocket клиент
47
+ */
48
+ async connect(namespace, params = {}) {
49
+ // Если клиент уже существует, возвращаем его
50
+ if (this.clients.has(namespace)) {
51
+ const client = this.clients.get(namespace);
52
+ // Если клиент уже подключен, возвращаем его
53
+ if (client.isConnected()) {
54
+ return client;
55
+ }
56
+ }
57
+ // Формируем URL для подключения
58
+ const url = new URL(`${this.baseURL}/${namespace}`);
59
+ // Добавляем параметры к URL
60
+ Object.entries(params).forEach(([key, value]) => {
61
+ url.searchParams.append(key, String(value));
62
+ });
63
+ // Создаем новый WebSocket клиент
64
+ const client = new websocket_client_js_1.WebSocketClient(url.toString(), this.options);
65
+ // Подключаемся к серверу
66
+ await client.connect();
67
+ // Сохраняем клиент
68
+ this.clients.set(namespace, client);
69
+ return client;
70
+ }
71
+ /**
72
+ * Подключается к сессии рассуждения
73
+ * @param {string} [reasoningId] Идентификатор рассуждения
74
+ * @returns {Promise<void>}
75
+ */
76
+ async connectToReasoning(reasoningId) {
77
+ // Если reasoningId не указан, используем активный
78
+ const id = reasoningId || this.activeReasoningId;
79
+ if (!id) {
80
+ throw new Error('Необходимо указать идентификатор рассуждения');
81
+ }
82
+ // Сохраняем активный идентификатор рассуждения
83
+ this.activeReasoningId = id;
84
+ // Подключаемся к пространству имен
85
+ await this.connect(WebSocketNamespace.REASONING, { reasoningId: id });
86
+ }
87
+ /**
88
+ * Подключается к сессии индексации проекта
89
+ * @param {string} [projectId] Идентификатор проекта
90
+ * @returns {Promise<void>}
91
+ */
92
+ async connectToIndexing(projectId) {
93
+ // Если projectId не указан, используем активный
94
+ const id = projectId || this.activeProjectId;
95
+ if (!id) {
96
+ throw new Error('Необходимо указать идентификатор проекта');
97
+ }
98
+ // Сохраняем активный идентификатор проекта
99
+ this.activeProjectId = id;
100
+ // Подключаемся к пространству имен
101
+ await this.connect(WebSocketNamespace.INDEXING, { projectId: id });
102
+ }
103
+ /**
104
+ * Подключается к уведомлениям
105
+ * @returns {Promise<void>}
106
+ */
107
+ async connectToNotifications() {
108
+ // Подключаемся к пространству имен
109
+ await this.connect(WebSocketNamespace.NOTIFICATIONS);
110
+ }
111
+ /**
112
+ * Отключается от пространства имен
113
+ * @param {WebSocketNamespace} namespace Пространство имен
114
+ */
115
+ disconnect(namespace) {
116
+ const client = this.clients.get(namespace);
117
+ if (client) {
118
+ client.close();
119
+ this.clients.delete(namespace);
120
+ }
121
+ // Сбрасываем активные сессии
122
+ if (namespace === WebSocketNamespace.REASONING) {
123
+ this.activeReasoningId = null;
124
+ }
125
+ else if (namespace === WebSocketNamespace.INDEXING) {
126
+ this.activeProjectId = null;
127
+ }
128
+ }
129
+ /**
130
+ * Отключается от всех пространств имен
131
+ */
132
+ disconnectAll() {
133
+ for (const [namespace, client] of this.clients.entries()) {
134
+ client.close();
135
+ this.clients.delete(namespace);
136
+ }
137
+ // Сбрасываем активные сессии
138
+ this.activeReasoningId = null;
139
+ this.activeProjectId = null;
140
+ }
141
+ /**
142
+ * Добавляет обработчик события для пространства имен
143
+ * @param {string} eventType Тип события
144
+ * @param {Function} handler Обработчик события
145
+ * @param {WebSocketNamespace} [namespace] Пространство имен (если не указано, добавляется ко всем активным)
146
+ */
147
+ on(eventType, handler, namespace) {
148
+ if (namespace) {
149
+ // Если указано пространство имен, добавляем обработчик только к нему
150
+ const client = this.clients.get(namespace);
151
+ if (!client) {
152
+ throw new Error(`Не подключен к пространству имен ${namespace}`);
153
+ }
154
+ client.on(eventType, handler);
155
+ }
156
+ else {
157
+ // Если пространство имен не указано, добавляем обработчик ко всем активным пространствам
158
+ for (const client of this.clients.values()) {
159
+ client.on(eventType, handler);
160
+ }
161
+ }
162
+ }
163
+ /**
164
+ * Удаляет обработчик события для пространства имен
165
+ * @param {string} eventType Тип события
166
+ * @param {Function} [handler] Обработчик события (если не указан, удаляются все обработчики)
167
+ * @param {WebSocketNamespace} [namespace] Пространство имен (если не указано, удаляется из всех активных)
168
+ */
169
+ off(eventType, handler, namespace) {
170
+ if (namespace) {
171
+ // Если указано пространство имен, удаляем обработчик только из него
172
+ const client = this.clients.get(namespace);
173
+ if (!client) {
174
+ return;
175
+ }
176
+ client.off(eventType, handler);
177
+ }
178
+ else {
179
+ // Если пространство имен не указано, удаляем обработчик из всех активных пространств
180
+ for (const client of this.clients.values()) {
181
+ client.off(eventType, handler);
182
+ }
183
+ }
184
+ }
185
+ /**
186
+ * Отправляет сообщение в пространство имен
187
+ * @param {WebSocketNamespace} namespace Пространство имен
188
+ * @param {string} eventType Тип события
189
+ * @param {any} [data] Данные сообщения
190
+ * @returns {boolean} Успешно ли отправлено сообщение
191
+ */
192
+ send(namespace, eventType, data) {
193
+ const client = this.clients.get(namespace);
194
+ if (!client) {
195
+ throw new Error(`Не подключен к пространству имен ${namespace}`);
196
+ }
197
+ return client.send({
198
+ event: eventType,
199
+ data
200
+ });
201
+ }
202
+ /**
203
+ * Отправляет сообщение в активную сессию рассуждения
204
+ * @param {string} eventType Тип события
205
+ * @param {any} [data] Данные сообщения
206
+ * @returns {boolean} Успешно ли отправлено сообщение
207
+ */
208
+ sendToReasoning(eventType, data) {
209
+ if (!this.activeReasoningId) {
210
+ throw new Error('Не подключен к сессии рассуждения');
211
+ }
212
+ return this.send(WebSocketNamespace.REASONING, eventType, data);
213
+ }
214
+ /**
215
+ * Отправляет сообщение в активную сессию индексации
216
+ * @param {string} eventType Тип события
217
+ * @param {any} [data] Данные сообщения
218
+ * @returns {boolean} Успешно ли отправлено сообщение
219
+ */
220
+ sendToIndexing(eventType, data) {
221
+ if (!this.activeProjectId) {
222
+ throw new Error('Не подключен к сессии индексации');
223
+ }
224
+ return this.send(WebSocketNamespace.INDEXING, eventType, data);
225
+ }
226
+ /**
227
+ * Отправляет сообщение в уведомления
228
+ * @param {string} eventType Тип события
229
+ * @param {any} [data] Данные сообщения
230
+ * @returns {boolean} Успешно ли отправлено сообщение
231
+ */
232
+ sendToNotifications(eventType, data) {
233
+ return this.send(WebSocketNamespace.NOTIFICATIONS, eventType, data);
234
+ }
235
+ /**
236
+ * Проверяет, подключен ли клиент к указанному пространству имен
237
+ * @param {WebSocketNamespace} namespace Пространство имен
238
+ * @returns {boolean} Статус подключения
239
+ */
240
+ isConnected(namespace) {
241
+ const client = this.clients.get(namespace);
242
+ return client ? client.isConnected() : false;
243
+ }
244
+ /**
245
+ * Проверяет, подключен ли клиент к пространству имен рассуждений
246
+ * @returns {boolean} Статус подключения
247
+ */
248
+ isConnectedToReasoning() {
249
+ return this.isConnected(WebSocketNamespace.REASONING);
250
+ }
251
+ /**
252
+ * Проверяет, подключен ли клиент к пространству имен индексации
253
+ * @returns {boolean} Статус подключения
254
+ */
255
+ isConnectedToIndexing() {
256
+ return this.isConnected(WebSocketNamespace.INDEXING);
257
+ }
258
+ /**
259
+ * Проверяет, подключен ли клиент к пространству имен уведомлений
260
+ * @returns {boolean} Статус подключения
261
+ */
262
+ isConnectedToNotifications() {
263
+ return this.isConnected(WebSocketNamespace.NOTIFICATIONS);
264
+ }
265
+ }
266
+ exports.CodeSolverWebSocketClient = CodeSolverWebSocketClient;
267
+ //# sourceMappingURL=code-solver-websocket-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-solver-websocket-client.js","sourceRoot":"","sources":["../../../src/utils/code-solver-websocket-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,234 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.HttpClient = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ /**
9
+ * Определение типа среды выполнения
10
+ * @returns 'browser' | 'node'
11
+ */
12
+ function getEnvironment() {
13
+ return (typeof window !== 'undefined' && typeof window.document !== 'undefined')
14
+ ? 'browser'
15
+ : 'node';
16
+ }
17
+ /**
18
+ * HTTP клиент для выполнения запросов к API
19
+ *
20
+ * Предоставляет методы для работы с REST API, включая обработку ошибок,
21
+ * повторные попытки и таймауты.
22
+ */
23
+ class HttpClient {
24
+ /**
25
+ * Создает новый HTTP клиент
26
+ * @param {string} baseURL Базовый URL для запросов
27
+ * @param {HttpClientOptions} [options] Опции для HTTP клиента
28
+ */
29
+ constructor(baseURL, options = {}) {
30
+ this.baseURL = baseURL;
31
+ this.options = {
32
+ headers: {
33
+ 'Content-Type': 'application/json',
34
+ 'Accept': 'application/json',
35
+ ...(options.headers || {})
36
+ },
37
+ timeout: options.timeout || 30000,
38
+ retry: options.retry || {
39
+ maxRetries: 3,
40
+ retryDelay: 1000,
41
+ maxRetryDelay: 10000,
42
+ retryStatusCodes: [408, 429, 500, 502, 503, 504]
43
+ },
44
+ httpsAgent: options.httpsAgent
45
+ };
46
+ this.environment = getEnvironment();
47
+ // Создаем Axios инстанс с базовыми настройками
48
+ this.axiosInstance = axios_1.default.create({
49
+ baseURL: this.baseURL,
50
+ timeout: this.options.timeout,
51
+ headers: this.options.headers,
52
+ ...(this.environment === 'node' && this.options.httpsAgent ? { httpsAgent: this.options.httpsAgent } : {})
53
+ });
54
+ // Добавляем интерцептор для обработки ошибок и повторных попыток
55
+ this.setupInterceptors();
56
+ }
57
+ /**
58
+ * Настраивает интерцепторы Axios
59
+ */
60
+ setupInterceptors() {
61
+ // Интерцептор для ответов
62
+ this.axiosInstance.interceptors.response.use((response) => response.data, async (error) => {
63
+ const { config, response } = error;
64
+ // Если нет конфига запроса или это уже повторный запрос, или skipRetry установлен, возвращаем ошибку
65
+ if (!config || config._retryCount || config.skipRetry) {
66
+ return Promise.reject(error);
67
+ }
68
+ config._retryCount = config._retryCount || 0;
69
+ const retryConfig = this.options.retry;
70
+ // Проверяем, нужно ли делать повторную попытку для данного статуса
71
+ const shouldRetry = response &&
72
+ retryConfig.retryStatusCodes?.includes(response.status) &&
73
+ config._retryCount < (retryConfig.maxRetries || 3);
74
+ if (shouldRetry) {
75
+ config._retryCount += 1;
76
+ // Вычисляем время задержки перед повторной попыткой
77
+ const delay = Math.min((retryConfig.retryDelay || 1000) * Math.pow(2, config._retryCount - 1), retryConfig.maxRetryDelay || 10000);
78
+ // Ждем перед повторной попыткой
79
+ await new Promise(resolve => setTimeout(resolve, delay));
80
+ // Делаем повторную попытку
81
+ return this.axiosInstance(config);
82
+ }
83
+ // Если не нужно делать повторную попытку, возвращаем ошибку
84
+ return Promise.reject(error);
85
+ });
86
+ }
87
+ /**
88
+ * Выполняет HTTP запрос
89
+ * @param {RequestOptions} options Опции запроса
90
+ * @returns {Promise<T>} Ответ от API
91
+ */
92
+ async request(options) {
93
+ const axiosConfig = {
94
+ url: options.url,
95
+ method: options.method,
96
+ data: options.data,
97
+ params: options.params,
98
+ headers: {
99
+ ...this.options.headers,
100
+ ...(options.headers || {})
101
+ },
102
+ timeout: options.timeout || this.options.timeout
103
+ };
104
+ // Если указано не делать повторные попытки, добавляем специальный флаг
105
+ if (options.noRetry) {
106
+ axiosConfig.skipRetry = true;
107
+ }
108
+ try {
109
+ return await this.axiosInstance.request(axiosConfig);
110
+ }
111
+ catch (error) {
112
+ throw this.handleError(error);
113
+ }
114
+ }
115
+ /**
116
+ * Выполняет GET запрос
117
+ * @param {string} url URL для запроса
118
+ * @param {Record<string, any>} [params] Query параметры
119
+ * @param {Record<string, string>} [headers] HTTP заголовки
120
+ * @returns {Promise<T>} Ответ от API
121
+ */
122
+ async get(url, params, headers) {
123
+ return this.request({
124
+ url,
125
+ method: 'GET',
126
+ params,
127
+ headers
128
+ });
129
+ }
130
+ /**
131
+ * Выполняет POST запрос
132
+ * @param {string} url URL для запроса
133
+ * @param {any} [data] Данные для отправки
134
+ * @param {Record<string, string>} [headers] HTTP заголовки
135
+ * @returns {Promise<T>} Ответ от API
136
+ */
137
+ async post(url, data, headers) {
138
+ return this.request({
139
+ url,
140
+ method: 'POST',
141
+ data,
142
+ headers
143
+ });
144
+ }
145
+ /**
146
+ * Выполняет PUT запрос
147
+ * @param {string} url URL для запроса
148
+ * @param {any} [data] Данные для отправки
149
+ * @param {Record<string, string>} [headers] HTTP заголовки
150
+ * @returns {Promise<T>} Ответ от API
151
+ */
152
+ async put(url, data, headers) {
153
+ return this.request({
154
+ url,
155
+ method: 'PUT',
156
+ data,
157
+ headers
158
+ });
159
+ }
160
+ /**
161
+ * Выполняет DELETE запрос
162
+ * @param {string} url URL для запроса
163
+ * @param {Record<string, any>} [params] Query параметры
164
+ * @param {Record<string, string>} [headers] HTTP заголовки
165
+ * @returns {Promise<T>} Ответ от API
166
+ */
167
+ async delete(url, params, headers) {
168
+ return this.request({
169
+ url,
170
+ method: 'DELETE',
171
+ params,
172
+ headers
173
+ });
174
+ }
175
+ /**
176
+ * Выполняет PATCH запрос
177
+ * @param {string} url URL для запроса
178
+ * @param {any} [data] Данные для отправки
179
+ * @param {Record<string, string>} [headers] HTTP заголовки
180
+ * @returns {Promise<T>} Ответ от API
181
+ */
182
+ async patch(url, data, headers) {
183
+ return this.request({
184
+ url,
185
+ method: 'PATCH',
186
+ data,
187
+ headers
188
+ });
189
+ }
190
+ /**
191
+ * Обрабатывает ошибки от Axios
192
+ * @param {any} error Ошибка от Axios
193
+ * @returns {Error} Обработанная ошибка
194
+ */
195
+ handleError(error) {
196
+ let enhancedError;
197
+ if (error.response) {
198
+ // Ошибка от сервера с кодом ответа
199
+ const { status, data } = error.response;
200
+ const message = data?.message || data?.error || `HTTP ошибка ${status}`;
201
+ enhancedError = new Error(message);
202
+ enhancedError.status = status;
203
+ enhancedError.data = data;
204
+ enhancedError.isApiError = true;
205
+ }
206
+ else if (error.request) {
207
+ // Запрос был сделан, но ответ не получен
208
+ enhancedError = new Error('Нет ответа от сервера. Проверьте подключение к интернету.');
209
+ enhancedError.request = error.request;
210
+ enhancedError.isNetworkError = true;
211
+ }
212
+ else {
213
+ // Произошла ошибка при настройке запроса
214
+ enhancedError = new Error(error.message || 'Произошла неизвестная ошибка');
215
+ enhancedError.isUnknownError = true;
216
+ }
217
+ // Сохраняем оригинальную ошибку для отладки
218
+ enhancedError.originalError = error;
219
+ // Пытаемся обработать ошибку через глобальный обработчик
220
+ try {
221
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
222
+ const { CodeSolverSDK } = require('../code-solver-sdk.js');
223
+ if (typeof CodeSolverSDK.handleError === 'function') {
224
+ CodeSolverSDK.handleError(enhancedError);
225
+ }
226
+ }
227
+ catch (e) {
228
+ // Игнорируем ошибки при импорте или вызове обработчика
229
+ }
230
+ return enhancedError;
231
+ }
232
+ }
233
+ exports.HttpClient = HttpClient;
234
+ //# sourceMappingURL=http-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-client.js","sourceRoot":"","sources":["../../../src/utils/http-client.ts"],"names":[],"mappings":";;;;;;AAAA,kDAAgF;AAUhF;;;GAGG;AACH,SAAS,cAAc;IACrB,OAAO,CAAC,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,WAAW,CAAC;QAC9E,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,MAAM,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAa,UAAU;IAarB;;;;OAIG;IACH,YAAY,OAAe,EAAE,UAA6B,EAAE;QAC1D,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG;YACb,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,QAAQ,EAAE,kBAAkB;gBAC5B,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;aAC3B;YACD,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,KAAK;YACjC,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI;gBACtB,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,IAAI;gBAChB,aAAa,EAAE,KAAK;gBACpB,gBAAgB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;aACjD;YACD,UAAU,EAAE,OAAO,CAAC,UAAU;SAC/B,CAAC;QAEF,IAAI,CAAC,WAAW,GAAG,cAAc,EAAE,CAAC;QAEpC,+CAA+C;QAC/C,IAAI,CAAC,aAAa,GAAG,eAAK,CAAC,MAAM,CAAC;YAChC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;YAC7B,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;YAC7B,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC3G,CAAC,CAAC;QAEH,iEAAiE;QACjE,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IACK,iBAAiB;QACvB,0BAA0B;QAC1B,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAC1C,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAC3B,KAAK,EAAE,KAAK,EAAE,EAAE;YACd,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;YAEnC,qGAAqG;YACrG,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACtD,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC/B,CAAC;YAED,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC;YAE7C,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,KAAqB,CAAC;YAEvD,mEAAmE;YACnE,MAAM,WAAW,GAAG,QAAQ;gBAC1B,WAAW,CAAC,gBAAgB,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACvD,MAAM,CAAC,WAAW,GAAG,CAAC,WAAW,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC;YAErD,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC;gBAExB,oDAAoD;gBACpD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CACpB,CAAC,WAAW,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,EACtE,WAAW,CAAC,aAAa,IAAI,KAAK,CACnC,CAAC;gBAEF,gCAAgC;gBAChC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;gBAEzD,2BAA2B;gBAC3B,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YACpC,CAAC;YAED,4DAA4D;YAC5D,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC,CACF,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,OAAO,CAAU,OAAuB;QACnD,MAAM,WAAW,GAAuB;YACtC,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE;gBACP,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO;gBACvB,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;aAC3B;YACD,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO;SACjD,CAAC;QAEF,uEAAuE;QACvE,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC;QAC/B,CAAC;QAED,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACvD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,GAAG,CACd,GAAW,EACX,MAA4B,EAC5B,OAAgC;QAEhC,OAAO,IAAI,CAAC,OAAO,CAAI;YACrB,GAAG;YACH,MAAM,EAAE,KAAK;YACb,MAAM;YACN,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,IAAI,CACf,GAAW,EACX,IAAU,EACV,OAAgC;QAEhC,OAAO,IAAI,CAAC,OAAO,CAAI;YACrB,GAAG;YACH,MAAM,EAAE,MAAM;YACd,IAAI;YACJ,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,GAAG,CACd,GAAW,EACX,IAAU,EACV,OAAgC;QAEhC,OAAO,IAAI,CAAC,OAAO,CAAI;YACrB,GAAG;YACH,MAAM,EAAE,KAAK;YACb,IAAI;YACJ,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,MAAM,CACjB,GAAW,EACX,MAA4B,EAC5B,OAAgC;QAEhC,OAAO,IAAI,CAAC,OAAO,CAAI;YACrB,GAAG;YACH,MAAM,EAAE,QAAQ;YAChB,MAAM;YACN,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,KAAK,CAChB,GAAW,EACX,IAAU,EACV,OAAgC;QAEhC,OAAO,IAAI,CAAC,OAAO,CAAI;YACrB,GAAG;YACH,MAAM,EAAE,OAAO;YACf,IAAI;YACJ,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACK,WAAW,CAAC,KAAU;QAC5B,IAAI,aAAkB,CAAC;QAEvB,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,mCAAmC;YACnC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC;YACxC,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,IAAI,IAAI,EAAE,KAAK,IAAI,eAAe,MAAM,EAAE,CAAC;YAExE,aAAa,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;YACnC,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC;YAC9B,aAAa,CAAC,IAAI,GAAG,IAAI,CAAC;YAC1B,aAAa,CAAC,UAAU,GAAG,IAAI,CAAC;QAClC,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YACzB,yCAAyC;YACzC,aAAa,GAAG,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;YACvF,aAAa,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YACtC,aAAa,CAAC,cAAc,GAAG,IAAI,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,yCAAyC;YACzC,aAAa,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,8BAA8B,CAAC,CAAC;YAC3E,aAAa,CAAC,cAAc,GAAG,IAAI,CAAC;QACtC,CAAC;QAED,4CAA4C;QAC5C,aAAa,CAAC,aAAa,GAAG,KAAK,CAAC;QAEpC,yDAAyD;QACzD,IAAI,CAAC;YACH,8DAA8D;YAC9D,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;YAC3D,IAAI,OAAO,aAAa,CAAC,WAAW,KAAK,UAAU,EAAE,CAAC;gBACpD,aAAa,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,uDAAuD;QACzD,CAAC;QAED,OAAO,aAAa,CAAC;IACvB,CAAC;CACF;AA9QD,gCA8QC"}
@@ -0,0 +1,107 @@
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
@@ -0,0 +1 @@
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"}