flex-mcp 1.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/LICENSE +21 -0
  2. package/README.md +154 -0
  3. package/dist/api/auth.d.ts +6 -0
  4. package/dist/api/auth.d.ts.map +1 -0
  5. package/dist/api/auth.js +111 -0
  6. package/dist/api/auth.js.map +1 -0
  7. package/dist/api/configs.d.ts +6 -0
  8. package/dist/api/configs.d.ts.map +1 -0
  9. package/dist/api/configs.js +693 -0
  10. package/dist/api/configs.js.map +1 -0
  11. package/dist/api/index.d.ts +6 -0
  12. package/dist/api/index.d.ts.map +1 -0
  13. package/dist/api/index.js +24 -0
  14. package/dist/api/index.js.map +1 -0
  15. package/dist/api/mcp.d.ts +7 -0
  16. package/dist/api/mcp.d.ts.map +1 -0
  17. package/dist/api/mcp.js +46 -0
  18. package/dist/api/mcp.js.map +1 -0
  19. package/dist/api/middleware.d.ts +25 -0
  20. package/dist/api/middleware.d.ts.map +1 -0
  21. package/dist/api/middleware.js +65 -0
  22. package/dist/api/middleware.js.map +1 -0
  23. package/dist/api/prompts.d.ts +6 -0
  24. package/dist/api/prompts.d.ts.map +1 -0
  25. package/dist/api/prompts.js +260 -0
  26. package/dist/api/prompts.js.map +1 -0
  27. package/dist/api/resources.d.ts +6 -0
  28. package/dist/api/resources.d.ts.map +1 -0
  29. package/dist/api/resources.js +159 -0
  30. package/dist/api/resources.js.map +1 -0
  31. package/dist/api/tables.d.ts +15 -0
  32. package/dist/api/tables.d.ts.map +1 -0
  33. package/dist/api/tables.js +702 -0
  34. package/dist/api/tables.js.map +1 -0
  35. package/dist/api/users.d.ts +6 -0
  36. package/dist/api/users.d.ts.map +1 -0
  37. package/dist/api/users.js +96 -0
  38. package/dist/api/users.js.map +1 -0
  39. package/dist/auth/index.d.ts +15 -0
  40. package/dist/auth/index.d.ts.map +1 -0
  41. package/dist/auth/index.js +126 -0
  42. package/dist/auth/index.js.map +1 -0
  43. package/dist/cli.d.ts +7 -0
  44. package/dist/cli.d.ts.map +1 -0
  45. package/dist/cli.js +288 -0
  46. package/dist/cli.js.map +1 -0
  47. package/dist/config.d.ts +21 -0
  48. package/dist/config.d.ts.map +1 -0
  49. package/dist/config.js +54 -0
  50. package/dist/config.js.map +1 -0
  51. package/dist/db/index.d.ts +11 -0
  52. package/dist/db/index.d.ts.map +1 -0
  53. package/dist/db/index.js +164 -0
  54. package/dist/db/index.js.map +1 -0
  55. package/dist/db/schema.d.ts +646 -0
  56. package/dist/db/schema.d.ts.map +1 -0
  57. package/dist/db/schema.js +73 -0
  58. package/dist/db/schema.js.map +1 -0
  59. package/dist/index.d.ts +5 -0
  60. package/dist/index.d.ts.map +1 -0
  61. package/dist/index.js +153 -0
  62. package/dist/index.js.map +1 -0
  63. package/dist/mcp/aggregator.d.ts +78 -0
  64. package/dist/mcp/aggregator.d.ts.map +1 -0
  65. package/dist/mcp/aggregator.js +1266 -0
  66. package/dist/mcp/aggregator.js.map +1 -0
  67. package/dist/mcp/component-loader.d.ts +17 -0
  68. package/dist/mcp/component-loader.d.ts.map +1 -0
  69. package/dist/mcp/component-loader.js +131 -0
  70. package/dist/mcp/component-loader.js.map +1 -0
  71. package/dist/mcp/index.d.ts +7 -0
  72. package/dist/mcp/index.d.ts.map +1 -0
  73. package/dist/mcp/index.js +107 -0
  74. package/dist/mcp/index.js.map +1 -0
  75. package/dist/mcp/mcp-client.d.ts +53 -0
  76. package/dist/mcp/mcp-client.d.ts.map +1 -0
  77. package/dist/mcp/mcp-client.js +418 -0
  78. package/dist/mcp/mcp-client.js.map +1 -0
  79. package/dist/mcp/post-sse-transport.d.ts +52 -0
  80. package/dist/mcp/post-sse-transport.d.ts.map +1 -0
  81. package/dist/mcp/post-sse-transport.js +375 -0
  82. package/dist/mcp/post-sse-transport.js.map +1 -0
  83. package/dist/mcp/service.d.ts +49 -0
  84. package/dist/mcp/service.d.ts.map +1 -0
  85. package/dist/mcp/service.js +358 -0
  86. package/dist/mcp/service.js.map +1 -0
  87. package/dist/mcp/tool-sync.d.ts +27 -0
  88. package/dist/mcp/tool-sync.d.ts.map +1 -0
  89. package/dist/mcp/tool-sync.js +200 -0
  90. package/dist/mcp/tool-sync.js.map +1 -0
  91. package/dist/script/compiler.d.ts +15 -0
  92. package/dist/script/compiler.d.ts.map +1 -0
  93. package/dist/script/compiler.js +163 -0
  94. package/dist/script/compiler.js.map +1 -0
  95. package/dist/script/context.d.ts +11 -0
  96. package/dist/script/context.d.ts.map +1 -0
  97. package/dist/script/context.js +786 -0
  98. package/dist/script/context.js.map +1 -0
  99. package/dist/script/executor.d.ts +43 -0
  100. package/dist/script/executor.d.ts.map +1 -0
  101. package/dist/script/executor.js +126 -0
  102. package/dist/script/executor.js.map +1 -0
  103. package/dist/static.d.ts +21 -0
  104. package/dist/static.d.ts.map +1 -0
  105. package/dist/static.js +95 -0
  106. package/dist/static.js.map +1 -0
  107. package/dist/types/index.d.ts +337 -0
  108. package/dist/types/index.d.ts.map +1 -0
  109. package/dist/types/index.js +5 -0
  110. package/dist/types/index.js.map +1 -0
  111. package/dist/utils/id.d.ts +5 -0
  112. package/dist/utils/id.d.ts.map +1 -0
  113. package/dist/utils/id.js +8 -0
  114. package/dist/utils/id.js.map +1 -0
  115. package/dist/utils/logger.d.ts +21 -0
  116. package/dist/utils/logger.d.ts.map +1 -0
  117. package/dist/utils/logger.js +31 -0
  118. package/dist/utils/logger.js.map +1 -0
  119. package/dist/utils/prompt-template.d.ts +15 -0
  120. package/dist/utils/prompt-template.d.ts.map +1 -0
  121. package/dist/utils/prompt-template.js +82 -0
  122. package/dist/utils/prompt-template.js.map +1 -0
  123. package/dist/utils/telemetry.d.ts +45 -0
  124. package/dist/utils/telemetry.d.ts.map +1 -0
  125. package/dist/utils/telemetry.js +245 -0
  126. package/dist/utils/telemetry.js.map +1 -0
  127. package/dist/utils/variables.d.ts +24 -0
  128. package/dist/utils/variables.d.ts.map +1 -0
  129. package/dist/utils/variables.js +45 -0
  130. package/dist/utils/variables.js.map +1 -0
  131. package/package.json +70 -0
@@ -0,0 +1,375 @@
1
+ /**
2
+ * POST-based SSE Transport
3
+ * 实现 MCP SDK Transport 接口,支持需要 POST 方法的 SSE 端点(streamable-http)
4
+ */
5
+ import axios from 'axios';
6
+ /**
7
+ * POST-based SSE Transport
8
+ * 兼容 MCP SDK Transport 接口
9
+ * 通过 POST 请求建立 SSE 连接,使用流式响应处理 SSE 消息
10
+ */
11
+ export class PostSSETransport {
12
+ url;
13
+ headers;
14
+ stream = null;
15
+ abortController = null;
16
+ endpoint = null;
17
+ buffer = '';
18
+ isStarted = false;
19
+ startPromise = null;
20
+ endpointReceived = false;
21
+ initializeResponseReceived = false;
22
+ // Transport 接口要求的回调
23
+ onclose;
24
+ onerror;
25
+ onmessage;
26
+ constructor(options) {
27
+ this.url = options.url;
28
+ this.headers = {
29
+ 'Content-Type': 'application/json',
30
+ 'Accept': 'application/json, text/event-stream',
31
+ ...options.headers,
32
+ };
33
+ }
34
+ /**
35
+ * 启动传输(实现 Transport 接口)
36
+ */
37
+ async start() {
38
+ if (this.isStarted) {
39
+ throw new Error('PostSSETransport already started!');
40
+ }
41
+ this.abortController = new AbortController();
42
+ this.isStarted = true;
43
+ this.endpointReceived = false;
44
+ this.initializeResponseReceived = false;
45
+ return new Promise((resolve, reject) => {
46
+ this.startPromise = { resolve, reject };
47
+ // 发送 POST 请求建立 SSE 连接
48
+ // 根据 curl 测试,端点需要 POST 方法,且需要 Accept: application/json, text/event-stream
49
+ axios.post(this.url.toString(), {
50
+ jsonrpc: '2.0',
51
+ method: 'initialize',
52
+ id: 1,
53
+ params: {
54
+ protocolVersion: '2024-11-05',
55
+ capabilities: {},
56
+ clientInfo: {
57
+ name: 'flex-mcp-client',
58
+ version: '1.0.0',
59
+ },
60
+ },
61
+ }, {
62
+ headers: this.headers,
63
+ responseType: 'stream',
64
+ timeout: 0, // 无超时,保持连接
65
+ signal: this.abortController.signal,
66
+ })
67
+ .then((response) => {
68
+ console.log(`[MCP] POST-based SSE connection established, status: ${response.status}`);
69
+ // 处理流式响应
70
+ this.stream = response.data;
71
+ this.handleStream();
72
+ // 设置超时,如果 10 秒内没有收到响应,reject
73
+ setTimeout(() => {
74
+ if (this.startPromise && !this.endpointReceived && !this.initializeResponseReceived) {
75
+ const err = new Error('Timeout waiting for endpoint or initialize response');
76
+ this.startPromise.reject(err);
77
+ this.startPromise = null;
78
+ }
79
+ }, 10000);
80
+ })
81
+ .catch((error) => {
82
+ this.isStarted = false;
83
+ const err = new Error(`Failed to connect to POST-based SSE endpoint: ${error.message}`);
84
+ this.onerror?.(err);
85
+ if (this.startPromise) {
86
+ this.startPromise.reject(err);
87
+ this.startPromise = null;
88
+ }
89
+ });
90
+ });
91
+ }
92
+ /**
93
+ * 处理 SSE 流式响应
94
+ */
95
+ handleStream() {
96
+ if (!this.stream) {
97
+ return;
98
+ }
99
+ this.stream.on('data', (chunk) => {
100
+ this.buffer += chunk.toString();
101
+ // 处理 SSE 格式的数据
102
+ const lines = this.buffer.split('\n');
103
+ this.buffer = lines.pop() || ''; // 保留最后不完整的行
104
+ let currentEvent = 'message';
105
+ let currentData = '';
106
+ for (const line of lines) {
107
+ const trimmedLine = line.trim();
108
+ if (trimmedLine.startsWith('event:')) {
109
+ currentEvent = trimmedLine.substring(6).trim();
110
+ }
111
+ else if (trimmedLine.startsWith('data:')) {
112
+ // 处理多行 data(SSE 规范支持多行 data)
113
+ const dataContent = trimmedLine.substring(5);
114
+ if (currentData) {
115
+ currentData += '\n' + dataContent;
116
+ }
117
+ else {
118
+ currentData = dataContent;
119
+ }
120
+ }
121
+ else if (trimmedLine === '') {
122
+ // 空行表示一个完整的 SSE 消息
123
+ if (currentData) {
124
+ this.processSSEMessage(currentEvent, currentData);
125
+ currentEvent = 'message';
126
+ currentData = '';
127
+ }
128
+ }
129
+ }
130
+ });
131
+ this.stream.on('end', () => {
132
+ console.log(`[MCP] POST-based SSE stream ended`);
133
+ // 对于 streamable-http,流可能在发送响应后结束
134
+ // 如果已经收到 initialize 响应,这是正常的,不要立即关闭连接
135
+ // 只有在明确关闭时才调用 onclose
136
+ if (!this.initializeResponseReceived && !this.endpointReceived) {
137
+ // 如果流结束但还没有收到响应,可能是错误
138
+ console.warn(`[MCP] Stream ended before receiving initialize response or endpoint`);
139
+ this.isStarted = false;
140
+ this.onclose?.();
141
+ }
142
+ else {
143
+ // 已经收到响应,流结束是正常的,保持连接状态
144
+ console.log(`[MCP] Stream ended after receiving response, keeping connection alive`);
145
+ }
146
+ });
147
+ this.stream.on('error', (error) => {
148
+ console.error(`[MCP] POST-based SSE stream error:`, error);
149
+ this.isStarted = false;
150
+ this.onerror?.(error);
151
+ if (this.startPromise) {
152
+ this.startPromise.reject(error);
153
+ this.startPromise = null;
154
+ }
155
+ });
156
+ }
157
+ /**
158
+ * 处理 SSE 消息
159
+ */
160
+ processSSEMessage(event, data) {
161
+ try {
162
+ const trimmedData = data.trim();
163
+ // 处理 endpoint 事件(MCP SSE 协议)
164
+ if (event === 'endpoint') {
165
+ try {
166
+ // endpoint 事件的 data 是直接的 URL 字符串
167
+ this.endpoint = new URL(trimmedData, this.url);
168
+ if (this.endpoint.origin !== this.url.origin) {
169
+ throw new Error(`Endpoint origin does not match connection origin: ${this.endpoint.origin}`);
170
+ }
171
+ console.log(`[MCP] Received endpoint: ${this.endpoint.toString()}`);
172
+ // 如果 start() 还在等待,resolve 它
173
+ if (this.startPromise && !this.endpointReceived) {
174
+ this.endpointReceived = true;
175
+ this.startPromise.resolve();
176
+ this.startPromise = null;
177
+ }
178
+ }
179
+ catch (error) {
180
+ const err = new Error(`Invalid endpoint URL: ${error.message}`);
181
+ this.onerror?.(err);
182
+ if (this.startPromise) {
183
+ this.startPromise.reject(err);
184
+ this.startPromise = null;
185
+ }
186
+ return;
187
+ }
188
+ return;
189
+ }
190
+ // 处理普通消息(message 事件或默认事件)
191
+ if (event === 'message' || !event || event === '') {
192
+ try {
193
+ const message = JSON.parse(trimmedData);
194
+ // 检查是否是 initialize 响应
195
+ // 类型守卫:确保 message 有 id 和 result 属性
196
+ if (message.jsonrpc === '2.0' && 'id' in message && message.id === 1 && 'result' in message && message.result && !this.initializeResponseReceived) {
197
+ this.initializeResponseReceived = true;
198
+ // 对于 streamable-http,如果没有 endpoint,使用原始 URL
199
+ if (!this.endpoint) {
200
+ this.endpoint = this.url;
201
+ console.log(`[MCP] Initialize response received, using original URL as endpoint`);
202
+ }
203
+ // 如果 start() 还在等待,resolve 它
204
+ if (this.startPromise && !this.endpointReceived) {
205
+ this.startPromise.resolve();
206
+ this.startPromise = null;
207
+ }
208
+ }
209
+ // 调用消息回调
210
+ this.onmessage?.(message);
211
+ }
212
+ catch (parseError) {
213
+ // 如果不是有效的 JSON-RPC 消息,记录警告但不中断连接
214
+ console.warn(`[MCP] Failed to parse SSE message as JSON-RPC:`, parseError.message);
215
+ console.warn(`[MCP] Raw data:`, trimmedData.substring(0, 200));
216
+ }
217
+ }
218
+ else {
219
+ // 其他事件类型(如 ping),记录但不处理
220
+ console.log(`[MCP] Received SSE event '${event}':`, trimmedData.substring(0, 100));
221
+ }
222
+ }
223
+ catch (error) {
224
+ console.error(`[MCP] Error processing SSE message:`, error);
225
+ this.onerror?.(error);
226
+ if (this.startPromise) {
227
+ this.startPromise.reject(error);
228
+ this.startPromise = null;
229
+ }
230
+ }
231
+ }
232
+ /**
233
+ * 发送消息(实现 Transport 接口)
234
+ */
235
+ async send(message) {
236
+ if (!this.isStarted) {
237
+ throw new Error('Transport not started');
238
+ }
239
+ // 对于 POST-based SSE,使用 endpoint(如果已收到)或原始 URL
240
+ const targetUrl = this.endpoint || this.url;
241
+ try {
242
+ // 对于 streamable-http,每个请求都是独立的 POST
243
+ // 如果响应是流式的,需要处理 SSE 流
244
+ const response = await axios.post(targetUrl.toString(), message, {
245
+ headers: {
246
+ ...this.headers,
247
+ 'Content-Type': 'application/json',
248
+ 'Accept': 'application/json, text/event-stream',
249
+ },
250
+ responseType: 'stream',
251
+ signal: this.abortController?.signal,
252
+ });
253
+ // 检查响应内容类型
254
+ const contentType = response.headers['content-type'] || '';
255
+ // 如果响应是流式的(SSE),处理 SSE 流
256
+ if (response.data && typeof response.data.on === 'function' && contentType.includes('text/event-stream')) {
257
+ const stream = response.data;
258
+ let buffer = '';
259
+ // Remove unused 'currentEvent'
260
+ let currentData = '';
261
+ stream.on('data', (chunk) => {
262
+ buffer += chunk.toString();
263
+ const lines = buffer.split('\n');
264
+ buffer = lines.pop() || '';
265
+ for (const line of lines) {
266
+ const trimmedLine = line.trim();
267
+ // Remove assignment and use of 'currentEvent' since it's unused
268
+ // if (trimmedLine.startsWith('event:')) {
269
+ // currentEvent = trimmedLine.substring(6).trim();
270
+ // } else
271
+ if (trimmedLine.startsWith('data:')) {
272
+ const dataContent = trimmedLine.substring(5);
273
+ if (currentData) {
274
+ currentData += '\n' + dataContent;
275
+ }
276
+ else {
277
+ currentData = dataContent;
278
+ }
279
+ }
280
+ else if (trimmedLine === '') {
281
+ if (currentData) {
282
+ try {
283
+ const responseMessage = JSON.parse(currentData.trim());
284
+ this.onmessage?.(responseMessage);
285
+ }
286
+ catch (e) {
287
+ console.warn(`[MCP] Failed to parse response message:`, e);
288
+ }
289
+ currentData = '';
290
+ }
291
+ }
292
+ }
293
+ });
294
+ stream.on('end', () => {
295
+ // 流结束是正常的
296
+ });
297
+ stream.on('error', (error) => {
298
+ this.onerror?.(error);
299
+ });
300
+ }
301
+ else {
302
+ // 如果响应是 JSON(不是流),直接处理
303
+ // 某些端点可能返回 JSON 而不是 SSE 流
304
+ let responseData = response.data;
305
+ // 如果响应是流但内容类型是 JSON,读取整个流
306
+ if (response.data && typeof response.data.on === 'function' && contentType.includes('application/json')) {
307
+ const stream = response.data;
308
+ let buffer = '';
309
+ stream.on('data', (chunk) => {
310
+ buffer += chunk.toString();
311
+ });
312
+ stream.on('end', () => {
313
+ try {
314
+ responseData = JSON.parse(buffer);
315
+ this.onmessage?.(responseData);
316
+ }
317
+ catch (e) {
318
+ console.warn(`[MCP] Failed to parse JSON response:`, e);
319
+ this.onerror?.(new Error(`Failed to parse JSON response: ${e}`));
320
+ }
321
+ });
322
+ stream.on('error', (error) => {
323
+ this.onerror?.(error);
324
+ });
325
+ }
326
+ else if (typeof responseData === 'object') {
327
+ // 如果响应已经是对象,直接处理
328
+ this.onmessage?.(responseData);
329
+ }
330
+ else if (typeof responseData === 'string') {
331
+ // 如果响应是字符串,尝试解析为 JSON
332
+ try {
333
+ const parsed = JSON.parse(responseData);
334
+ this.onmessage?.(parsed);
335
+ }
336
+ catch (e) {
337
+ console.warn(`[MCP] Failed to parse string response as JSON:`, e);
338
+ this.onerror?.(new Error(`Failed to parse response: ${e}`));
339
+ }
340
+ }
341
+ }
342
+ }
343
+ catch (error) {
344
+ const err = error.response?.data
345
+ ? new Error(`Error POSTing to endpoint (HTTP ${error.response.status}): ${JSON.stringify(error.response.data)}`)
346
+ : error;
347
+ this.onerror?.(err);
348
+ throw err;
349
+ }
350
+ }
351
+ /**
352
+ * 关闭连接(实现 Transport 接口)
353
+ */
354
+ async close() {
355
+ this.abortController?.abort();
356
+ if (this.stream) {
357
+ // 移除所有事件监听器,避免内存泄漏
358
+ this.stream.removeAllListeners();
359
+ this.stream.destroy();
360
+ this.stream = null;
361
+ }
362
+ this.isStarted = false;
363
+ this.endpoint = null;
364
+ this.buffer = '';
365
+ this.endpointReceived = false;
366
+ this.initializeResponseReceived = false;
367
+ if (this.startPromise) {
368
+ // 如果 start() 还在等待,reject 它
369
+ this.startPromise.reject(new Error('Transport closed before connection established'));
370
+ this.startPromise = null;
371
+ }
372
+ this.onclose?.();
373
+ }
374
+ }
375
+ //# sourceMappingURL=post-sse-transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post-sse-transport.js","sourceRoot":"","sources":["../../src/mcp/post-sse-transport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * MCP 服务核心逻辑
3
+ */
4
+ import type { User } from '../types/index.js';
5
+ import type { MCPConfig } from '../types/index.js';
6
+ import { MCPAggregator } from './aggregator.js';
7
+ export declare class MCPService {
8
+ private aggregators;
9
+ private aggregatorPromises;
10
+ private sseStreams;
11
+ private mcpClientConfigs;
12
+ /**
13
+ * 验证用户凭据并返回用户信息
14
+ */
15
+ validateAndGetUser(email: string, apiKey: string): Promise<User | null>;
16
+ /**
17
+ * 获取用户的 MCP 配置
18
+ */
19
+ getUserConfig(userId: string): Promise<MCPConfig | null>;
20
+ /**
21
+ * 获取或创建用户的 MCP 聚合器
22
+ * 使用 Promise 缓存防止并发初始化
23
+ * 如果配置已更新,会重新创建聚合器
24
+ */
25
+ getAggregator(userId: string): Promise<MCPAggregator>;
26
+ /**
27
+ * 获取用户的 MCP 客户端配置(headers 和 config)
28
+ */
29
+ getMCPClientConfig(userId: string): {
30
+ headers: Record<string, string>;
31
+ config: Record<string, any>;
32
+ } | null;
33
+ /**
34
+ * 处理 SSE 连接(服务端推送)
35
+ */
36
+ handleSSEConnection(userId: string, stream: any, endpointUrl: string, mcpHeaders?: Record<string, string>, mcpConfig?: Record<string, any>): Promise<void>;
37
+ private removeStream;
38
+ /**
39
+ * 处理 HTTP 请求(MCP 协议请求)
40
+ * 添加超时机制,默认 60 秒
41
+ */
42
+ handleRequest(userId: string, request: any, timeout?: number): Promise<void>;
43
+ /**
44
+ * 清理用户的聚合器(当配置更新时)
45
+ */
46
+ clearAggregator(userId: string): Promise<void>;
47
+ }
48
+ export declare const mcpService: MCPService;
49
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/mcp/service.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAI9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,qBAAa,UAAU;IACrB,OAAO,CAAC,WAAW,CAAyC;IAC5D,OAAO,CAAC,kBAAkB,CAAkD;IAC5E,OAAO,CAAC,UAAU,CAAoC;IAEtD,OAAO,CAAC,gBAAgB,CAA4F;IAEpH;;OAEG;IACG,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAS7E;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAyB9D;;;;OAIG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAwD3D;;OAEG;IACH,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KAAE,GAAG,IAAI;IAI3G;;OAEG;IACG,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA+HhK,OAAO,CAAC,YAAY;IAiBpB;;;OAGG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,GAAE,MAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAoFzF;;OAEG;IACG,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAkBrD;AAED,eAAO,MAAM,UAAU,YAAmB,CAAC"}