@give-tech/lingxi-mcp-server 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 (42) hide show
  1. package/README.md +193 -0
  2. package/dist/client.d.ts +11 -0
  3. package/dist/client.d.ts.map +1 -0
  4. package/dist/client.js +46 -0
  5. package/dist/client.js.map +1 -0
  6. package/dist/index.d.ts +8 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +88 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/lingxi-client.d.ts +59 -0
  11. package/dist/lingxi-client.d.ts.map +1 -0
  12. package/dist/lingxi-client.js +380 -0
  13. package/dist/lingxi-client.js.map +1 -0
  14. package/dist/tools/api.d.ts +176 -0
  15. package/dist/tools/api.d.ts.map +1 -0
  16. package/dist/tools/api.js +188 -0
  17. package/dist/tools/api.js.map +1 -0
  18. package/dist/tools/document.d.ts +103 -0
  19. package/dist/tools/document.d.ts.map +1 -0
  20. package/dist/tools/document.js +125 -0
  21. package/dist/tools/document.js.map +1 -0
  22. package/dist/tools/model.d.ts +176 -0
  23. package/dist/tools/model.d.ts.map +1 -0
  24. package/dist/tools/model.js +178 -0
  25. package/dist/tools/model.js.map +1 -0
  26. package/dist/tools/module.d.ts +111 -0
  27. package/dist/tools/module.d.ts.map +1 -0
  28. package/dist/tools/module.js +126 -0
  29. package/dist/tools/module.js.map +1 -0
  30. package/dist/tools/project.d.ts +17 -0
  31. package/dist/tools/project.d.ts.map +1 -0
  32. package/dist/tools/project.js +25 -0
  33. package/dist/tools/project.js.map +1 -0
  34. package/dist/tools/team.d.ts +92 -0
  35. package/dist/tools/team.d.ts.map +1 -0
  36. package/dist/tools/team.js +109 -0
  37. package/dist/tools/team.js.map +1 -0
  38. package/dist/types.d.ts +238 -0
  39. package/dist/types.d.ts.map +1 -0
  40. package/dist/types.js +3 -0
  41. package/dist/types.js.map +1 -0
  42. package/package.json +38 -0
@@ -0,0 +1,380 @@
1
+ // Lingxi API 客户端
2
+ export class LingxiClient {
3
+ config;
4
+ constructor(config) {
5
+ this.config = config;
6
+ }
7
+ get log() {
8
+ return this.config.log || {
9
+ info: () => { },
10
+ error: () => { },
11
+ debug: () => { },
12
+ };
13
+ }
14
+ getHeaders() {
15
+ const headers = {
16
+ 'Content-Type': 'application/json',
17
+ };
18
+ if (this.config.token) {
19
+ headers['Authorization'] = `Bearer ${this.config.token}`;
20
+ }
21
+ return headers;
22
+ }
23
+ async request(path, options = {}) {
24
+ const url = `${this.config.baseUrl}${path}`;
25
+ this.log.debug(`Request: ${options.method || 'GET'} ${url}`);
26
+ const response = await fetch(url, {
27
+ ...options,
28
+ headers: {
29
+ ...this.getHeaders(),
30
+ ...options.headers,
31
+ },
32
+ });
33
+ if (!response.ok) {
34
+ const errorText = await response.text();
35
+ this.log.error(`API Error: ${response.status} ${response.statusText}`, errorText);
36
+ throw new Error(`Lingxi API error: ${response.status} ${response.statusText}\n${errorText}`);
37
+ }
38
+ const data = await response.json();
39
+ return data.data || data;
40
+ }
41
+ // ==================== 基础 API ====================
42
+ // 获取团队列表
43
+ async getTeams() {
44
+ return this.request('/api/v1/teams');
45
+ }
46
+ // 获取项目列表
47
+ async getProjects(teamId) {
48
+ let path = '/api/v1/projects';
49
+ if (teamId) {
50
+ path += `?team_id=${teamId}`;
51
+ }
52
+ return this.request(path);
53
+ }
54
+ // 获取项目详情
55
+ async getProject(projectId) {
56
+ return this.request(`/api/v1/projects/${projectId}`);
57
+ }
58
+ // 获取项目模块列表
59
+ async getModules(projectId) {
60
+ return this.request(`/api/v1/projects/${projectId}/modules`);
61
+ }
62
+ // 获取模块 API 列表
63
+ async getAPIs(moduleId) {
64
+ return this.request(`/api/v1/modules/${moduleId}/apis`);
65
+ }
66
+ // 获取 API 详情
67
+ async getAPI(apiId) {
68
+ return this.request(`/api/v1/apis/${apiId}`);
69
+ }
70
+ // ==================== 扩展 API ====================
71
+ // 获取 API 的 JSON Schema
72
+ async getAPISchema(apiId) {
73
+ const api = await this.getAPI(apiId);
74
+ const schema = {
75
+ request: {},
76
+ response: {},
77
+ };
78
+ // Path 参数 Schema
79
+ if (api.path_params && api.path_params.length > 0) {
80
+ schema.request.pathParams = this.buildParamSchema(api.path_params);
81
+ }
82
+ // Query 参数 Schema
83
+ if (api.query_params && api.query_params.length > 0) {
84
+ schema.request.queryParams = this.buildParamSchema(api.query_params);
85
+ }
86
+ // Header 参数 Schema
87
+ if (api.header_params && api.header_params.length > 0) {
88
+ schema.request.headers = this.buildParamSchema(api.header_params);
89
+ }
90
+ // Request Body Schema
91
+ if (api.request_body) {
92
+ schema.request.body = this.buildBodySchema(api.request_body);
93
+ }
94
+ // Response Body Schema
95
+ if (api.response_body) {
96
+ schema.response.body = this.buildBodySchema(api.response_body);
97
+ }
98
+ return schema;
99
+ }
100
+ // 调用 API(通过 Lingxi 后端代理)
101
+ async callAPI(apiId, params) {
102
+ const startTime = performance.now();
103
+ try {
104
+ // 首先获取 API 信息
105
+ const api = await this.getAPI(apiId);
106
+ // 构建 URL
107
+ let url = api.path;
108
+ if (params?.pathParams) {
109
+ Object.entries(params.pathParams).forEach(([key, value]) => {
110
+ url = url.replace(`{${key}}`, encodeURIComponent(value));
111
+ });
112
+ }
113
+ // 添加查询参数
114
+ if (params?.queryParams && Object.keys(params.queryParams).length > 0) {
115
+ const searchParams = new URLSearchParams();
116
+ Object.entries(params.queryParams).forEach(([key, value]) => {
117
+ searchParams.append(key, value);
118
+ });
119
+ url += `?${searchParams.toString()}`;
120
+ }
121
+ // 构建请求头
122
+ const headers = {
123
+ ...this.getHeaders(),
124
+ ...params?.headers,
125
+ };
126
+ // 构建请求体
127
+ let body = undefined;
128
+ if (params?.body && ['POST', 'PUT', 'PATCH'].includes(api.method)) {
129
+ body = JSON.stringify(params.body);
130
+ }
131
+ // 发送请求(直接调用目标 API,不经过代理)
132
+ // 注意:这需要目标 API 支持 CORS
133
+ const targetUrl = `${this.config.baseUrl.replace(/:\d+$/, '')}:${api.path.startsWith('/') ? '' : '/'}${api.path}`;
134
+ const fullUrl = this.buildFullUrl(url, params?.queryParams);
135
+ this.log.debug(`Calling API: ${api.method} ${fullUrl}`);
136
+ const response = await fetch(fullUrl, {
137
+ method: api.method,
138
+ headers,
139
+ body: ['GET', 'HEAD'].includes(api.method) ? undefined : body,
140
+ });
141
+ const endTime = performance.now();
142
+ // 获取响应头
143
+ const responseHeaders = {};
144
+ response.headers.forEach((value, key) => {
145
+ responseHeaders[key] = value;
146
+ });
147
+ // 获取响应体
148
+ const responseBody = await response.text();
149
+ const responseSize = new Blob([responseBody]).size;
150
+ return {
151
+ status: response.status,
152
+ statusText: response.statusText,
153
+ headers: responseHeaders,
154
+ body: responseBody,
155
+ size: this.formatSize(responseSize),
156
+ time: Math.round(endTime - startTime),
157
+ };
158
+ }
159
+ catch (error) {
160
+ const endTime = performance.now();
161
+ this.log.error('Call API error:', error);
162
+ throw error;
163
+ }
164
+ }
165
+ // 导出 OpenAPI 文档
166
+ async exportOpenAPI(projectId, moduleId) {
167
+ // 获取项目信息
168
+ const project = await this.getProject(projectId);
169
+ // 获取模块和 API
170
+ let modules;
171
+ if (moduleId) {
172
+ const module = await this.request(`/api/v1/modules/${moduleId}`);
173
+ modules = [module];
174
+ }
175
+ else {
176
+ modules = await this.getModules(projectId);
177
+ }
178
+ // 构建 OpenAPI 文档
179
+ const openapi = {
180
+ openapi: '3.0.0',
181
+ info: {
182
+ title: `${project.name} API`,
183
+ description: project.description || '',
184
+ version: '1.0.0',
185
+ },
186
+ servers: [
187
+ {
188
+ url: this.config.baseUrl,
189
+ description: 'Lingxi API Server',
190
+ },
191
+ ],
192
+ paths: {},
193
+ };
194
+ // 收集所有 API
195
+ for (const module of modules) {
196
+ const apis = await this.getAPIs(module.id);
197
+ for (const api of apis) {
198
+ const path = api.path;
199
+ if (!openapi.paths[path]) {
200
+ openapi.paths[path] = {};
201
+ }
202
+ const method = api.method.toLowerCase();
203
+ openapi.paths[path][method] = {
204
+ summary: api.name,
205
+ description: api.description,
206
+ parameters: this.buildOpenAPIParameters(api),
207
+ requestBody: this.buildOpenAPIRequestBody(api),
208
+ responses: {
209
+ '200': {
210
+ description: '成功',
211
+ content: this.buildOpenAPIResponseContent(api.response_body),
212
+ },
213
+ },
214
+ };
215
+ }
216
+ }
217
+ return openapi;
218
+ }
219
+ // ==================== 辅助方法 ====================
220
+ buildParamSchema(params) {
221
+ const properties = {};
222
+ const required = [];
223
+ for (const param of params) {
224
+ properties[param.name] = {
225
+ type: this.mapTypeToJSONSchemaType(param.type),
226
+ description: param.description,
227
+ };
228
+ if (param.required) {
229
+ required.push(param.name);
230
+ }
231
+ }
232
+ return {
233
+ type: 'object',
234
+ properties,
235
+ required,
236
+ };
237
+ }
238
+ buildBodySchema(body) {
239
+ if (body.type === 'primitive' && body.primitive_type) {
240
+ return {
241
+ type: this.mapTypeToJSONSchemaType(body.primitive_type),
242
+ };
243
+ }
244
+ if (body.type === 'array' && body.items) {
245
+ return {
246
+ type: 'array',
247
+ items: this.buildItemsSchema(body.items),
248
+ };
249
+ }
250
+ if (body.type === 'anonymous' && body.fields) {
251
+ return {
252
+ type: 'object',
253
+ properties: this.buildFieldsSchema(body.fields),
254
+ required: body.fields.filter(f => f.required).map(f => f.name),
255
+ };
256
+ }
257
+ if ((body.type === 'model' || body.type === 'generic_model') && body.model_id) {
258
+ return {
259
+ type: 'object',
260
+ description: `Model reference: ${body.model_id}`,
261
+ };
262
+ }
263
+ return { type: 'object' };
264
+ }
265
+ buildItemsSchema(items) {
266
+ if (items.primitive_type) {
267
+ return { type: this.mapTypeToJSONSchemaType(items.primitive_type) };
268
+ }
269
+ if (items.fields && items.fields.length > 0) {
270
+ return {
271
+ type: 'object',
272
+ properties: this.buildFieldsSchema(items.fields),
273
+ required: items.fields.filter(f => f.required).map(f => f.name),
274
+ };
275
+ }
276
+ return { type: 'object' };
277
+ }
278
+ buildFieldsSchema(fields) {
279
+ const properties = {};
280
+ for (const field of fields) {
281
+ properties[field.name] = {
282
+ type: this.mapTypeToJSONSchemaType(field.type),
283
+ description: field.description,
284
+ };
285
+ }
286
+ return properties;
287
+ }
288
+ mapTypeToJSONSchemaType(type) {
289
+ const typeMap = {
290
+ string: 'string',
291
+ integer: 'integer',
292
+ decimal: 'number',
293
+ boolean: 'boolean',
294
+ time: 'string',
295
+ array: 'array',
296
+ };
297
+ return typeMap[type] || 'string';
298
+ }
299
+ buildFullUrl(path, queryParams) {
300
+ let url = this.config.baseUrl + path;
301
+ if (queryParams && Object.keys(queryParams).length > 0) {
302
+ const searchParams = new URLSearchParams();
303
+ Object.entries(queryParams).forEach(([key, value]) => {
304
+ searchParams.append(key, value);
305
+ });
306
+ url += `?${searchParams.toString()}`;
307
+ }
308
+ return url;
309
+ }
310
+ formatSize(bytes) {
311
+ if (bytes === 0)
312
+ return '0 B';
313
+ const k = 1024;
314
+ const sizes = ['B', 'KB', 'MB', 'GB'];
315
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
316
+ return Math.round((bytes / Math.pow(k, i)) * 100) / 100 + ' ' + sizes[i];
317
+ }
318
+ buildOpenAPIParameters(api) {
319
+ const parameters = [];
320
+ // Path 参数
321
+ if (api.path_params) {
322
+ for (const param of api.path_params) {
323
+ parameters.push({
324
+ name: param.name,
325
+ in: 'path',
326
+ required: true,
327
+ schema: { type: this.mapTypeToJSONSchemaType(param.type) },
328
+ description: param.description,
329
+ });
330
+ }
331
+ }
332
+ // Query 参数
333
+ if (api.query_params) {
334
+ for (const param of api.query_params) {
335
+ parameters.push({
336
+ name: param.name,
337
+ in: 'query',
338
+ required: param.required,
339
+ schema: { type: this.mapTypeToJSONSchemaType(param.type) },
340
+ description: param.description,
341
+ });
342
+ }
343
+ }
344
+ // Header 参数
345
+ if (api.header_params) {
346
+ for (const param of api.header_params) {
347
+ parameters.push({
348
+ name: param.name,
349
+ in: 'header',
350
+ required: param.required,
351
+ schema: { type: 'string' },
352
+ description: param.description,
353
+ });
354
+ }
355
+ }
356
+ return parameters;
357
+ }
358
+ buildOpenAPIRequestBody(api) {
359
+ if (!api.request_body)
360
+ return undefined;
361
+ return {
362
+ required: true,
363
+ content: {
364
+ 'application/json': {
365
+ schema: this.buildBodySchema(api.request_body),
366
+ },
367
+ },
368
+ };
369
+ }
370
+ buildOpenAPIResponseContent(responseBody) {
371
+ if (!responseBody)
372
+ return undefined;
373
+ return {
374
+ 'application/json': {
375
+ schema: this.buildBodySchema(responseBody),
376
+ },
377
+ };
378
+ }
379
+ }
380
+ //# sourceMappingURL=lingxi-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lingxi-client.js","sourceRoot":"","sources":["../src/lingxi-client.ts"],"names":[],"mappings":"AAAA,iBAAiB;AAyBjB,MAAM,OAAO,YAAY;IACf,MAAM,CAAqB;IAEnC,YAAY,MAA0B;QACpC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,IAAY,GAAG;QACb,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI;YACxB,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;YACd,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;YACf,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;SAChB,CAAC;IACJ,CAAC;IAEO,UAAU;QAChB,MAAM,OAAO,GAA2B;YACtC,cAAc,EAAE,kBAAkB;SACnC,CAAC;QAEF,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC3D,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,KAAK,CAAC,OAAO,CACnB,IAAY,EACZ,UAAuB,EAAE;QAEzB,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC;QAC5C,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,OAAO,CAAC,MAAM,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC;QAE7D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,GAAG,OAAO;YACV,OAAO,EAAE;gBACP,GAAG,IAAI,CAAC,UAAU,EAAE;gBACpB,GAAG,OAAO,CAAC,OAAO;aACnB;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,EAAE,SAAS,CAAC,CAAC;YAClF,MAAM,IAAI,KAAK,CACb,qBAAqB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS,EAAE,CAC5E,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC;IAC3B,CAAC;IAED,mDAAmD;IAEnD,SAAS;IACT,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,OAAO,CAAS,eAAe,CAAC,CAAC;IAC/C,CAAC;IAED,SAAS;IACT,KAAK,CAAC,WAAW,CAAC,MAAe;QAC/B,IAAI,IAAI,GAAG,kBAAkB,CAAC;QAC9B,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,IAAI,YAAY,MAAM,EAAE,CAAC;QAC/B,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAY,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,SAAS;IACT,KAAK,CAAC,UAAU,CAAC,SAAiB;QAChC,OAAO,IAAI,CAAC,OAAO,CAAU,oBAAoB,SAAS,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,WAAW;IACX,KAAK,CAAC,UAAU,CAAC,SAAiB;QAChC,OAAO,IAAI,CAAC,OAAO,CAAW,oBAAoB,SAAS,UAAU,CAAC,CAAC;IACzE,CAAC;IAED,cAAc;IACd,KAAK,CAAC,OAAO,CAAC,QAAgB;QAC5B,OAAO,IAAI,CAAC,OAAO,CAAQ,mBAAmB,QAAQ,OAAO,CAAC,CAAC;IACjE,CAAC;IAED,YAAY;IACZ,KAAK,CAAC,MAAM,CAAC,KAAa;QACxB,OAAO,IAAI,CAAC,OAAO,CAAM,gBAAgB,KAAK,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,mDAAmD;IAEnD,uBAAuB;IACvB,KAAK,CAAC,YAAY,CAAC,KAAa;QAW9B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAErC,MAAM,MAAM,GAAG;YACb,OAAO,EAAE,EAA6B;YACtC,QAAQ,EAAE,EAA6B;SACxC,CAAC;QAEF,iBAAiB;QACjB,IAAI,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClD,MAAM,CAAC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACrE,CAAC;QAED,kBAAkB;QAClB,IAAI,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpD,MAAM,CAAC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACvE,CAAC;QAED,mBAAmB;QACnB,IAAI,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtD,MAAM,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACpE,CAAC;QAED,sBAAsB;QACtB,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;YACrB,MAAM,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC/D,CAAC;QAED,uBAAuB;QACvB,IAAI,GAAG,CAAC,aAAa,EAAE,CAAC;YACtB,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACjE,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,yBAAyB;IACzB,KAAK,CAAC,OAAO,CACX,KAAa,EACb,MAKC;QASD,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAEpC,IAAI,CAAC;YACH,cAAc;YACd,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAErC,SAAS;YACT,IAAI,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC;YACnB,IAAI,MAAM,EAAE,UAAU,EAAE,CAAC;gBACvB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;oBACzD,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,GAAG,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC3D,CAAC,CAAC,CAAC;YACL,CAAC;YAED,SAAS;YACT,IAAI,MAAM,EAAE,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtE,MAAM,YAAY,GAAG,IAAI,eAAe,EAAE,CAAC;gBAC3C,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;oBAC1D,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBAClC,CAAC,CAAC,CAAC;gBACH,GAAG,IAAI,IAAI,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC;YACvC,CAAC;YAED,QAAQ;YACR,MAAM,OAAO,GAA2B;gBACtC,GAAG,IAAI,CAAC,UAAU,EAAE;gBACpB,GAAG,MAAM,EAAE,OAAO;aACnB,CAAC;YAEF,QAAQ;YACR,IAAI,IAAI,GAAuB,SAAS,CAAC;YACzC,IAAI,MAAM,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBAClE,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACrC,CAAC;YAED,yBAAyB;YACzB,uBAAuB;YACvB,MAAM,SAAS,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;YAClH,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;YAE5D,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,gBAAgB,GAAG,CAAC,MAAM,IAAI,OAAO,EAAE,CAAC,CAAC;YAExD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE;gBACpC,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,OAAO;gBACP,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI;aAC9D,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;YAElC,QAAQ;YACR,MAAM,eAAe,GAA2B,EAAE,CAAC;YACnD,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;gBACtC,eAAe,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YAC/B,CAAC,CAAC,CAAC;YAEH,QAAQ;YACR,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC3C,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;YAEnD,OAAO;gBACL,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;gBAC/B,OAAO,EAAE,eAAe;gBACxB,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;gBACnC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC;aACtC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;YAClC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;YACzC,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,gBAAgB;IAChB,KAAK,CAAC,aAAa,CAAC,SAAiB,EAAE,QAAiB;QACtD,SAAS;QACT,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAEjD,YAAY;QACZ,IAAI,OAAiB,CAAC;QACtB,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAS,mBAAmB,QAAQ,EAAE,CAAC,CAAC;YACzE,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC7C,CAAC;QAED,gBAAgB;QAChB,MAAM,OAAO,GAAG;YACd,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE;gBACJ,KAAK,EAAE,GAAG,OAAO,CAAC,IAAI,MAAM;gBAC5B,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,EAAE;gBACtC,OAAO,EAAE,OAAO;aACjB;YACD,OAAO,EAAE;gBACP;oBACE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;oBACxB,WAAW,EAAE,mBAAmB;iBACjC;aACF;YACD,KAAK,EAAE,EAA6C;SACrD,CAAC;QAEF,WAAW;QACX,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAE3C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAc,CAAC;gBAChC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBACzB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC3B,CAAC;gBAED,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;gBACxC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG;oBAC5B,OAAO,EAAE,GAAG,CAAC,IAAI;oBACjB,WAAW,EAAE,GAAG,CAAC,WAAW;oBAC5B,UAAU,EAAE,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC;oBAC5C,WAAW,EAAE,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC;oBAC9C,SAAS,EAAE;wBACT,KAAK,EAAE;4BACL,WAAW,EAAE,IAAI;4BACjB,OAAO,EAAE,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,aAAa,CAAC;yBAC7D;qBACF;iBACF,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,iDAAiD;IAEzC,gBAAgB,CAAC,MAAkD;QACzE,MAAM,UAAU,GAA4B,EAAE,CAAC;QAC/C,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG;gBACvB,IAAI,EAAE,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC9C,WAAW,EAAE,KAAK,CAAC,WAAW;aAC/B,CAAC;YAEF,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACnB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,UAAU;YACV,QAAQ;SACT,CAAC;IACJ,CAAC;IAEO,eAAe,CAAC,IAA0C;QAChE,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACrD,OAAO;gBACL,IAAI,EAAE,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,cAAc,CAAC;aACxD,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACxC,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;aACzC,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC7C,OAAO;gBACL,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC/C,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;aAC/D,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC9E,OAAO;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,oBAAoB,IAAI,CAAC,QAAQ,EAAE;aACjD,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC5B,CAAC;IAEO,gBAAgB,CAAC,KAIxB;QACC,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;YACzB,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;QACtE,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,OAAO;gBACL,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC;gBAChD,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;aAChE,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC5B,CAAC;IAEO,iBAAiB,CACvB,MAAsF;QAEtF,MAAM,UAAU,GAA4B,EAAE,CAAC;QAE/C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG;gBACvB,IAAI,EAAE,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC9C,WAAW,EAAE,KAAK,CAAC,WAAW;aAC/B,CAAC;QACJ,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAEO,uBAAuB,CAAC,IAAY;QAC1C,MAAM,OAAO,GAA2B;YACtC,MAAM,EAAE,QAAQ;YAChB,OAAO,EAAE,SAAS;YAClB,OAAO,EAAE,QAAQ;YACjB,OAAO,EAAE,SAAS;YAClB,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,OAAO;SACf,CAAC;QAEF,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC;IACnC,CAAC;IAEO,YAAY,CAAC,IAAY,EAAE,WAAoC;QACrE,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;QAErC,IAAI,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvD,MAAM,YAAY,GAAG,IAAI,eAAe,EAAE,CAAC;YAC3C,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;gBACnD,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAClC,CAAC,CAAC,CAAC;YACH,GAAG,IAAI,IAAI,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC;QACvC,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,UAAU,CAAC,KAAa;QAC9B,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAC9B,MAAM,CAAC,GAAG,IAAI,CAAC;QACf,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACtC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3E,CAAC;IAEO,sBAAsB,CAAC,GAAQ;QACrC,MAAM,UAAU,GAAc,EAAE,CAAC;QAEjC,UAAU;QACV,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;YACpB,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;gBACpC,UAAU,CAAC,IAAI,CAAC;oBACd,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,EAAE,EAAE,MAAM;oBACV,QAAQ,EAAE,IAAI;oBACd,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;oBAC1D,WAAW,EAAE,KAAK,CAAC,WAAW;iBAC/B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,WAAW;QACX,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;YACrB,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;gBACrC,UAAU,CAAC,IAAI,CAAC;oBACd,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,EAAE,EAAE,OAAO;oBACX,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;oBAC1D,WAAW,EAAE,KAAK,CAAC,WAAW;iBAC/B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,YAAY;QACZ,IAAI,GAAG,CAAC,aAAa,EAAE,CAAC;YACtB,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,aAAa,EAAE,CAAC;gBACtC,UAAU,CAAC,IAAI,CAAC;oBACd,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,EAAE,EAAE,QAAQ;oBACZ,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC1B,WAAW,EAAE,KAAK,CAAC,WAAW;iBAC/B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAEO,uBAAuB,CAAC,GAAQ;QACtC,IAAI,CAAC,GAAG,CAAC,YAAY;YAAE,OAAO,SAAS,CAAC;QAExC,OAAO;YACL,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE;gBACP,kBAAkB,EAAE;oBAClB,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC;iBAC/C;aACF;SACF,CAAC;IACJ,CAAC;IAEO,2BAA2B,CAAC,YAAgC;QAClE,IAAI,CAAC,YAAY;YAAE,OAAO,SAAS,CAAC;QAEpC,OAAO;YACL,kBAAkB,EAAE;gBAClB,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC;aAC3C;SACF,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,176 @@
1
+ import type { ApiClient } from '../client.js';
2
+ import type { Api } from '../types.js';
3
+ export declare function registerApiTools(client: ApiClient): ({
4
+ name: string;
5
+ description: string;
6
+ inputSchema: {
7
+ type: "object";
8
+ properties: {
9
+ moduleId: {
10
+ type: "string";
11
+ description: string;
12
+ };
13
+ id?: undefined;
14
+ name?: undefined;
15
+ method?: undefined;
16
+ path?: undefined;
17
+ description?: undefined;
18
+ tags?: undefined;
19
+ status?: undefined;
20
+ };
21
+ required: string[];
22
+ };
23
+ handler: (input: unknown) => Promise<Api[]>;
24
+ } | {
25
+ name: string;
26
+ description: string;
27
+ inputSchema: {
28
+ type: "object";
29
+ properties: {
30
+ id: {
31
+ type: "string";
32
+ description: string;
33
+ };
34
+ moduleId?: undefined;
35
+ name?: undefined;
36
+ method?: undefined;
37
+ path?: undefined;
38
+ description?: undefined;
39
+ tags?: undefined;
40
+ status?: undefined;
41
+ };
42
+ required: string[];
43
+ };
44
+ handler: (input: unknown) => Promise<Api>;
45
+ } | {
46
+ name: string;
47
+ description: string;
48
+ inputSchema: {
49
+ type: "object";
50
+ properties: {
51
+ moduleId: {
52
+ type: "string";
53
+ description: string;
54
+ };
55
+ name: {
56
+ type: "string";
57
+ description: string;
58
+ };
59
+ method: {
60
+ type: "string";
61
+ description: string;
62
+ enum: string[];
63
+ };
64
+ path: {
65
+ type: "string";
66
+ description: string;
67
+ };
68
+ description: {
69
+ type: "string";
70
+ description: string;
71
+ };
72
+ tags: {
73
+ type: "array";
74
+ items: {
75
+ type: "string";
76
+ };
77
+ description: string;
78
+ };
79
+ id?: undefined;
80
+ status?: undefined;
81
+ };
82
+ required: string[];
83
+ };
84
+ handler: (input: unknown) => Promise<Api>;
85
+ } | {
86
+ name: string;
87
+ description: string;
88
+ inputSchema: {
89
+ type: "object";
90
+ properties: {
91
+ id: {
92
+ type: "string";
93
+ description: string;
94
+ };
95
+ name: {
96
+ type: "string";
97
+ description: string;
98
+ };
99
+ method: {
100
+ type: "string";
101
+ description: string;
102
+ enum: string[];
103
+ };
104
+ path: {
105
+ type: "string";
106
+ description: string;
107
+ };
108
+ description: {
109
+ type: "string";
110
+ description: string;
111
+ };
112
+ tags: {
113
+ type: "array";
114
+ items: {
115
+ type: "string";
116
+ };
117
+ description: string;
118
+ };
119
+ moduleId?: undefined;
120
+ status?: undefined;
121
+ };
122
+ required: string[];
123
+ };
124
+ handler: (input: unknown) => Promise<Api>;
125
+ } | {
126
+ name: string;
127
+ description: string;
128
+ inputSchema: {
129
+ type: "object";
130
+ properties: {
131
+ id: {
132
+ type: "string";
133
+ description: string;
134
+ };
135
+ moduleId?: undefined;
136
+ name?: undefined;
137
+ method?: undefined;
138
+ path?: undefined;
139
+ description?: undefined;
140
+ tags?: undefined;
141
+ status?: undefined;
142
+ };
143
+ required: string[];
144
+ };
145
+ handler: (input: unknown) => Promise<{
146
+ message: string;
147
+ }>;
148
+ } | {
149
+ name: string;
150
+ description: string;
151
+ inputSchema: {
152
+ type: "object";
153
+ properties: {
154
+ id: {
155
+ type: "string";
156
+ description: string;
157
+ };
158
+ status: {
159
+ type: "number";
160
+ description: string;
161
+ enum: number[];
162
+ };
163
+ moduleId?: undefined;
164
+ name?: undefined;
165
+ method?: undefined;
166
+ path?: undefined;
167
+ description?: undefined;
168
+ tags?: undefined;
169
+ };
170
+ required: string[];
171
+ };
172
+ handler: (input: unknown) => Promise<{
173
+ message: string;
174
+ }>;
175
+ })[];
176
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/tools/api.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,GAAG,EAAsC,MAAM,aAAa,CAAC;AAE3E,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS;;;;;;;;;;;;;;;;;;;;qBAerB,OAAO;;;;;;;;;;;;;;;;;;;;;qBAkBP,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAwCP,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAsDP,OAAO;;;;;;;;;;;;;;;;;;;;;qBAyBP,OAAO;iBAEU,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;qBAqBvB,OAAO;iBAKO,MAAM;;KAOhD"}