@tunnelhub/mcp 1.0.3 → 1.0.4
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.
- package/README.md +31 -1
- package/dist/auth/cognito-client.d.ts +0 -4
- package/dist/auth/cognito-client.d.ts.map +1 -1
- package/dist/auth/cognito-client.js +0 -30
- package/dist/auth/cognito-client.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +8 -1
- package/dist/server.js.map +1 -1
- package/dist/tools/data-stores/index.d.ts +3 -0
- package/dist/tools/data-stores/index.d.ts.map +1 -0
- package/dist/tools/data-stores/index.js +171 -0
- package/dist/tools/data-stores/index.js.map +1 -0
- package/dist/tools/packages/index.d.ts +1 -1
- package/dist/tools/packages/index.d.ts.map +1 -1
- package/dist/tools/packages/index.js +91 -5
- package/dist/tools/packages/index.js.map +1 -1
- package/dist/tools/systems/index.d.ts +3 -0
- package/dist/tools/systems/index.d.ts.map +1 -0
- package/dist/tools/systems/index.js +96 -0
- package/dist/tools/systems/index.js.map +1 -0
- package/dist/types/api.d.ts +59 -0
- package/dist/types/api.d.ts.map +1 -1
- package/dist/types/mcp.d.ts +116 -1
- package/dist/types/mcp.d.ts.map +1 -1
- package/dist/types/mcp.js +35 -1
- package/dist/types/mcp.js.map +1 -1
- package/dist/utils/api-client.d.ts +13 -1
- package/dist/utils/api-client.d.ts.map +1 -1
- package/dist/utils/api-client.js +100 -0
- package/dist/utils/api-client.js.map +1 -1
- package/package.json +2 -5
- package/dist/types/dynamodb.d.ts +0 -54
- package/dist/types/dynamodb.d.ts.map +0 -1
- package/dist/types/dynamodb.js +0 -55
- package/dist/types/dynamodb.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# TunnelHub MCP
|
|
2
2
|
|
|
3
|
-
Conecte clientes MCP ao TunnelHub para investigar automações, execuções, logs e
|
|
3
|
+
Conecte clientes MCP ao TunnelHub para investigar automações, execuções, logs, traces, sistemas e pacotes usando o mesmo fluxo de autenticação do frontend.
|
|
4
4
|
|
|
5
5
|
Este MCP é especialmente útil para:
|
|
6
6
|
|
|
@@ -15,6 +15,9 @@ Este MCP é especialmente útil para:
|
|
|
15
15
|
- Autenticar no TunnelHub pelo navegador
|
|
16
16
|
- Listar ambientes disponíveis
|
|
17
17
|
- Listar e inspecionar automações
|
|
18
|
+
- Consultar sistemas do ambiente atual
|
|
19
|
+
- Consultar pacotes do ambiente atual
|
|
20
|
+
- Consultar tabelas de de/para do ambiente atual
|
|
18
21
|
- Localizar execuções por intervalo de tempo
|
|
19
22
|
- Resumir uma execução completa
|
|
20
23
|
- Consultar logs e traces de uma execução
|
|
@@ -224,6 +227,14 @@ Você pode pedir coisas como:
|
|
|
224
227
|
- `Qual sessão está ativa?`
|
|
225
228
|
- `Liste os ambientes disponíveis`
|
|
226
229
|
- `Liste as automações ativas`
|
|
230
|
+
- `Liste os sistemas HTTP do ambiente atual`
|
|
231
|
+
- `Mostre o system 1234`
|
|
232
|
+
- `Liste os pacotes do ambiente atual`
|
|
233
|
+
- `Mostre o package abc`
|
|
234
|
+
- `Liste as tabelas de de/para do ambiente atual`
|
|
235
|
+
- `Busque a tabela de de/para CFOP`
|
|
236
|
+
- `Liste os itens da tabela de de/para 1234`
|
|
237
|
+
- `Me mostre o item abc da tabela de de/para 1234`
|
|
227
238
|
- `Ache a execução 9b696080439f no dia 2026-03-13`
|
|
228
239
|
- `Resuma a execução 019ce7f3-2707-740c-8692-9b696080439f`
|
|
229
240
|
- `Me mostre os traces com ERROR dessa execução`
|
|
@@ -248,6 +259,23 @@ Você pode pedir coisas como:
|
|
|
248
259
|
- `list_tenants_tunnelhub`
|
|
249
260
|
- `get_tenant_tunnelhub`
|
|
250
261
|
|
|
262
|
+
### Tabelas de de/para
|
|
263
|
+
|
|
264
|
+
- `list_data_stores_tunnelhub`
|
|
265
|
+
- `get_data_store_tunnelhub`
|
|
266
|
+
- `list_data_store_items_tunnelhub`
|
|
267
|
+
- `get_data_store_item_tunnelhub`
|
|
268
|
+
|
|
269
|
+
### Sistemas
|
|
270
|
+
|
|
271
|
+
- `list_systems_tunnelhub`
|
|
272
|
+
- `get_system_tunnelhub`
|
|
273
|
+
|
|
274
|
+
### Pacotes
|
|
275
|
+
|
|
276
|
+
- `list_packages_tunnelhub`
|
|
277
|
+
- `get_package_tunnelhub`
|
|
278
|
+
|
|
251
279
|
### Automações
|
|
252
280
|
|
|
253
281
|
- `list_automations_tunnelhub`
|
|
@@ -289,6 +317,8 @@ Observações:
|
|
|
289
317
|
## ⚠️ Limitações atuais
|
|
290
318
|
|
|
291
319
|
- O foco atual está em automações e monitoramento
|
|
320
|
+
- Sistemas e pacotes estão disponíveis em modo somente leitura
|
|
321
|
+
- Tabelas de de/para estão disponíveis em modo somente leitura
|
|
292
322
|
- Algumas APIs do backend têm comportamentos específicos de filtro e paginação
|
|
293
323
|
- A listagem de execuções depende de intervalo de tempo obrigatório
|
|
294
324
|
|
|
@@ -6,9 +6,5 @@ export declare class CognitoClient {
|
|
|
6
6
|
* Refresh tokens using refresh token
|
|
7
7
|
*/
|
|
8
8
|
refreshTokens(clientId: string, refreshToken: string): Promise<BrowserAuthTokens>;
|
|
9
|
-
/**
|
|
10
|
-
* Initiate password auth (for future use if needed)
|
|
11
|
-
*/
|
|
12
|
-
authenticateWithPassword(clientId: string, username: string, password: string): Promise<BrowserAuthTokens>;
|
|
13
9
|
}
|
|
14
10
|
//# sourceMappingURL=cognito-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cognito-client.d.ts","sourceRoot":"","sources":["../../src/auth/cognito-client.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAgC;;IAQ9C;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"cognito-client.d.ts","sourceRoot":"","sources":["../../src/auth/cognito-client.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAgC;;IAQ9C;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;CA4BxF"}
|
|
@@ -35,35 +35,5 @@ export class CognitoClient {
|
|
|
35
35
|
throw error;
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
|
-
/**
|
|
39
|
-
* Initiate password auth (for future use if needed)
|
|
40
|
-
*/
|
|
41
|
-
async authenticateWithPassword(clientId, username, password) {
|
|
42
|
-
const input = {
|
|
43
|
-
AuthFlow: 'USER_PASSWORD_AUTH',
|
|
44
|
-
ClientId: clientId,
|
|
45
|
-
AuthParameters: {
|
|
46
|
-
USERNAME: username,
|
|
47
|
-
PASSWORD: password,
|
|
48
|
-
},
|
|
49
|
-
};
|
|
50
|
-
try {
|
|
51
|
-
const command = new InitiateAuthCommand(input);
|
|
52
|
-
const response = await this.client.send(command);
|
|
53
|
-
if (!response.AuthenticationResult) {
|
|
54
|
-
throw new Error('No authentication result received');
|
|
55
|
-
}
|
|
56
|
-
return {
|
|
57
|
-
idToken: response.AuthenticationResult.IdToken,
|
|
58
|
-
accessToken: response.AuthenticationResult.AccessToken,
|
|
59
|
-
refreshToken: response.AuthenticationResult.RefreshToken,
|
|
60
|
-
expiresIn: response.AuthenticationResult.ExpiresIn,
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
catch (error) {
|
|
64
|
-
console.error('Failed to authenticate:', error);
|
|
65
|
-
throw error;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
38
|
}
|
|
69
39
|
//# sourceMappingURL=cognito-client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cognito-client.js","sourceRoot":"","sources":["../../src/auth/cognito-client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,6BAA6B,EAC7B,mBAAmB,GAEpB,MAAM,2CAA2C,CAAC;AAGnD,MAAM,OAAO,aAAa;IAChB,MAAM,CAAgC;IAE9C;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,6BAA6B,CAAC;YAC9C,MAAM,EAAE,WAAW;SACpB,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,QAAgB,EAAE,YAAoB;QACxD,MAAM,KAAK,GAA6B;YACtC,QAAQ,EAAE,oBAAoB;YAC9B,QAAQ,EAAE,QAAQ;YAClB,cAAc,EAAE;gBACd,aAAa,EAAE,YAAY;aAC5B;SACF,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAC/C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAEjD,IAAI,CAAC,QAAQ,CAAC,oBAAoB,EAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;YACvD,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,QAAQ,CAAC,oBAAoB,CAAC,OAAQ;gBAC/C,WAAW,EAAE,QAAQ,CAAC,oBAAoB,CAAC,WAAY;gBACvD,YAAY,EAAE,YAAY,EAAE,+BAA+B;gBAC3D,SAAS,EAAE,QAAQ,CAAC,oBAAoB,CAAC,SAAU;aACpD,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;YAClD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;
|
|
1
|
+
{"version":3,"file":"cognito-client.js","sourceRoot":"","sources":["../../src/auth/cognito-client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,6BAA6B,EAC7B,mBAAmB,GAEpB,MAAM,2CAA2C,CAAC;AAGnD,MAAM,OAAO,aAAa;IAChB,MAAM,CAAgC;IAE9C;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,6BAA6B,CAAC;YAC9C,MAAM,EAAE,WAAW;SACpB,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,QAAgB,EAAE,YAAoB;QACxD,MAAM,KAAK,GAA6B;YACtC,QAAQ,EAAE,oBAAoB;YAC9B,QAAQ,EAAE,QAAQ;YAClB,cAAc,EAAE;gBACd,aAAa,EAAE,YAAY;aAC5B;SACF,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAC/C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAEjD,IAAI,CAAC,QAAQ,CAAC,oBAAoB,EAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;YACvD,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,QAAQ,CAAC,oBAAoB,CAAC,OAAQ;gBAC/C,WAAW,EAAE,QAAQ,CAAC,oBAAoB,CAAC,WAAY;gBACvD,YAAY,EAAE,YAAY,EAAE,+BAA+B;gBAC3D,SAAS,EAAE,QAAQ,CAAC,oBAAoB,CAAC,SAAU;aACpD,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;YAClD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF"}
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAcpE,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IAEnC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAEhD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;;IAYtC,OAAO,CAAC,WAAW;IAwBnB,SAAS,IAAI,SAAS;CAGvB;;AAID,wBAA2C"}
|
package/dist/server.js
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import packageJson from '../package.json' with { type: 'json' };
|
|
2
3
|
import { SessionManager } from './auth/session-manager.js';
|
|
4
|
+
import { registerDataStoreTools } from './tools/data-stores/index.js';
|
|
3
5
|
import { registerAutomationTools } from './tools/automations/index.js';
|
|
4
6
|
import { registerMonitoringTools } from './tools/monitoring/index.js';
|
|
7
|
+
import { registerPackageTools } from './tools/packages/index.js';
|
|
5
8
|
import { registerSessionTools } from './tools/session/index.js';
|
|
9
|
+
import { registerSystemTools } from './tools/systems/index.js';
|
|
6
10
|
import { registerTenantTools } from './tools/tenants/index.js';
|
|
7
11
|
import { ApiClient } from './utils/api-client.js';
|
|
8
12
|
import { MCPError } from './utils/error-handler.js';
|
|
@@ -13,7 +17,7 @@ export class TunnelHubMCPServer {
|
|
|
13
17
|
constructor() {
|
|
14
18
|
this.server = new McpServer({
|
|
15
19
|
name: 'tunnelhub-mcp-server',
|
|
16
|
-
version:
|
|
20
|
+
version: packageJson.version,
|
|
17
21
|
});
|
|
18
22
|
this.sessionManager = new SessionManager();
|
|
19
23
|
this.apiClient = new ApiClient();
|
|
@@ -34,6 +38,9 @@ export class TunnelHubMCPServer {
|
|
|
34
38
|
};
|
|
35
39
|
registerSessionTools(this.server, context);
|
|
36
40
|
registerTenantTools(this.server, context);
|
|
41
|
+
registerPackageTools(this.server, context);
|
|
42
|
+
registerSystemTools(this.server, context);
|
|
43
|
+
registerDataStoreTools(this.server, context);
|
|
37
44
|
registerAutomationTools(this.server, context);
|
|
38
45
|
registerMonitoringTools(this.server, context);
|
|
39
46
|
}
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,MAAM,OAAO,kBAAkB;IACZ,MAAM,CAAY;IAElB,cAAc,CAAiB;IAE/B,SAAS,CAAY;IAEtC;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC;YAC1B,IAAI,EAAE,sBAAsB;YAC5B,OAAO,EAAE,OAAO;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,WAAW,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,MAAM,OAAO,kBAAkB;IACZ,MAAM,CAAY;IAElB,cAAc,CAAiB;IAE/B,SAAS,CAAY;IAEtC;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC;YAC1B,IAAI,EAAE,sBAAsB;YAC5B,OAAO,EAAE,WAAW,CAAC,OAAO;SAC7B,CAAC,CAAC;QACH,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;QAC3C,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAEO,WAAW;QACjB,MAAM,OAAO,GAAgB;YAC3B,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,UAAU,EAAE,KAAK,IAAI,EAAE;gBACrB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE,CAAC;gBAClE,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC;oBAC1B,MAAM,IAAI,QAAQ,CAAC,+CAA+C,EAAE,eAAe,CAAC,CAAC;gBACvF,CAAC;gBAED,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;gBAC/C,OAAO,WAAW,CAAC,OAAO,CAAC;YAC7B,CAAC;SACF,CAAC;QAEF,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC3C,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC1C,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC3C,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC1C,sBAAsB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC7C,uBAAuB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9C,uBAAuB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF;AAED,MAAM,eAAe,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAEjD,eAAe,eAAe,CAAC,SAAS,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/data-stores/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAgMzE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAMhF"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { DataStoreIdParamsSchema, DataStoreItemIdParamsSchema, DataStoreItemListParamsSchema, DataStoreListParamsSchema, } from '../../types/mcp.js';
|
|
2
|
+
import { errorResult, requireSession, textResult } from '../../utils/error-handler.js';
|
|
3
|
+
function extractListItems(response) {
|
|
4
|
+
if (Array.isArray(response)) {
|
|
5
|
+
return response;
|
|
6
|
+
}
|
|
7
|
+
if (response && typeof response === 'object' && Array.isArray(response.data)) {
|
|
8
|
+
return (response.data || []);
|
|
9
|
+
}
|
|
10
|
+
return [];
|
|
11
|
+
}
|
|
12
|
+
function summarizeDataStore(item) {
|
|
13
|
+
return [
|
|
14
|
+
`Data Store ID: ${item.uuid}`,
|
|
15
|
+
`External Code: ${item.externalCode || 'n/a'}`,
|
|
16
|
+
`Description: ${item.description || 'n/a'}`,
|
|
17
|
+
`Package ID: ${item.packageId || 'n/a'}`,
|
|
18
|
+
`Created At: ${item.createdAt || 'n/a'}`,
|
|
19
|
+
`Updated At: ${item.updatedAt || 'n/a'}`,
|
|
20
|
+
].join('\n');
|
|
21
|
+
}
|
|
22
|
+
function summarizeDataStoreList(items) {
|
|
23
|
+
if (items.length === 0) {
|
|
24
|
+
return 'No conversion tables found.';
|
|
25
|
+
}
|
|
26
|
+
return items
|
|
27
|
+
.slice(0, 15)
|
|
28
|
+
.map((item) => `${item.externalCode || item.uuid} | ${item.description || 'n/a'} | ${item.uuid}`)
|
|
29
|
+
.join('\n');
|
|
30
|
+
}
|
|
31
|
+
function summarizeDataStoreItem(item) {
|
|
32
|
+
return [
|
|
33
|
+
`Item ID: ${item.uuid}`,
|
|
34
|
+
`Table ID: ${item.dataStoreId}`,
|
|
35
|
+
`From: ${item.fromValue}`,
|
|
36
|
+
`To: ${item.toValue}`,
|
|
37
|
+
`Created At: ${item.createdAt || 'n/a'}`,
|
|
38
|
+
`Updated At: ${item.updatedAt || 'n/a'}`,
|
|
39
|
+
].join('\n');
|
|
40
|
+
}
|
|
41
|
+
function summarizeDataStoreItems(items) {
|
|
42
|
+
if (items.length === 0) {
|
|
43
|
+
return 'No conversion table items found.';
|
|
44
|
+
}
|
|
45
|
+
return items
|
|
46
|
+
.slice(0, 20)
|
|
47
|
+
.map((item) => `${item.fromValue} -> ${item.toValue} | ${item.uuid}`)
|
|
48
|
+
.join('\n');
|
|
49
|
+
}
|
|
50
|
+
const listDataStoresTool = {
|
|
51
|
+
name: 'list_data_stores_tunnelhub',
|
|
52
|
+
schema: {
|
|
53
|
+
title: 'List TunnelHub Conversion Tables',
|
|
54
|
+
description: 'List conversion tables (data stores) from platform-service using the current environment.',
|
|
55
|
+
inputSchema: DataStoreListParamsSchema,
|
|
56
|
+
annotations: {
|
|
57
|
+
readOnlyHint: true,
|
|
58
|
+
destructiveHint: false,
|
|
59
|
+
idempotentHint: true,
|
|
60
|
+
openWorldHint: false,
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
handler: async (params, context) => {
|
|
64
|
+
try {
|
|
65
|
+
const session = await requireSession(context);
|
|
66
|
+
context.apiClient.setSession(session);
|
|
67
|
+
const apiClient = context.apiClient;
|
|
68
|
+
const response = await apiClient.listDataStores(params);
|
|
69
|
+
const items = extractListItems(response);
|
|
70
|
+
const summary = summarizeDataStoreList(items);
|
|
71
|
+
return textResult(`Conversion tables:\n\n${summary}\n\nReturned: ${items.length}`, {
|
|
72
|
+
dataStores: items,
|
|
73
|
+
rawResponse: response,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
return errorResult(error);
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
const getDataStoreTool = {
|
|
82
|
+
name: 'get_data_store_tunnelhub',
|
|
83
|
+
schema: {
|
|
84
|
+
title: 'Get TunnelHub Conversion Table',
|
|
85
|
+
description: 'Get read-only details for one conversion table by id.',
|
|
86
|
+
inputSchema: DataStoreIdParamsSchema,
|
|
87
|
+
annotations: {
|
|
88
|
+
readOnlyHint: true,
|
|
89
|
+
destructiveHint: false,
|
|
90
|
+
idempotentHint: true,
|
|
91
|
+
openWorldHint: false,
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
handler: async (params, context) => {
|
|
95
|
+
try {
|
|
96
|
+
const session = await requireSession(context);
|
|
97
|
+
context.apiClient.setSession(session);
|
|
98
|
+
const apiClient = context.apiClient;
|
|
99
|
+
const dataStore = await apiClient.getDataStore(params.dataStoreId);
|
|
100
|
+
return textResult(`Conversion table details:\n\n${summarizeDataStore(dataStore)}`, dataStore);
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
return errorResult(error);
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
};
|
|
107
|
+
const listDataStoreItemsTool = {
|
|
108
|
+
name: 'list_data_store_items_tunnelhub',
|
|
109
|
+
schema: {
|
|
110
|
+
title: 'List Conversion Table Items',
|
|
111
|
+
description: 'List de/para rows for one conversion table.',
|
|
112
|
+
inputSchema: DataStoreItemListParamsSchema,
|
|
113
|
+
annotations: {
|
|
114
|
+
readOnlyHint: true,
|
|
115
|
+
destructiveHint: false,
|
|
116
|
+
idempotentHint: true,
|
|
117
|
+
openWorldHint: false,
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
handler: async (params, context) => {
|
|
121
|
+
try {
|
|
122
|
+
const session = await requireSession(context);
|
|
123
|
+
context.apiClient.setSession(session);
|
|
124
|
+
const apiClient = context.apiClient;
|
|
125
|
+
const response = await apiClient.listDataStoreItems(params.dataStoreId, params);
|
|
126
|
+
const items = extractListItems(response);
|
|
127
|
+
const summary = summarizeDataStoreItems(items);
|
|
128
|
+
return textResult(`Conversion table items for ${params.dataStoreId}:\n\n${summary}\n\nReturned: ${items.length}`, {
|
|
129
|
+
items,
|
|
130
|
+
rawResponse: response,
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
return errorResult(error);
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
};
|
|
138
|
+
const getDataStoreItemTool = {
|
|
139
|
+
name: 'get_data_store_item_tunnelhub',
|
|
140
|
+
schema: {
|
|
141
|
+
title: 'Get Conversion Table Item',
|
|
142
|
+
description: 'Get read-only details for one de/para row by id.',
|
|
143
|
+
inputSchema: DataStoreItemIdParamsSchema,
|
|
144
|
+
annotations: {
|
|
145
|
+
readOnlyHint: true,
|
|
146
|
+
destructiveHint: false,
|
|
147
|
+
idempotentHint: true,
|
|
148
|
+
openWorldHint: false,
|
|
149
|
+
},
|
|
150
|
+
},
|
|
151
|
+
handler: async (params, context) => {
|
|
152
|
+
try {
|
|
153
|
+
const session = await requireSession(context);
|
|
154
|
+
context.apiClient.setSession(session);
|
|
155
|
+
const apiClient = context.apiClient;
|
|
156
|
+
const item = await apiClient.getDataStoreItem(params.dataStoreId, params.itemId);
|
|
157
|
+
return textResult(`Conversion table item details:\n\n${summarizeDataStoreItem(item)}`, item);
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
return errorResult(error);
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
};
|
|
164
|
+
export function registerDataStoreTools(server, context) {
|
|
165
|
+
const toolContext = context;
|
|
166
|
+
server.registerTool(listDataStoresTool.name, listDataStoresTool.schema, (params) => listDataStoresTool.handler(params, toolContext));
|
|
167
|
+
server.registerTool(getDataStoreTool.name, getDataStoreTool.schema, (params) => getDataStoreTool.handler(params, toolContext));
|
|
168
|
+
server.registerTool(listDataStoreItemsTool.name, listDataStoreItemsTool.schema, (params) => listDataStoreItemsTool.handler(params, toolContext));
|
|
169
|
+
server.registerTool(getDataStoreItemTool.name, getDataStoreItemTool.schema, (params) => getDataStoreItemTool.handler(params, toolContext));
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/data-stores/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
-
export declare function registerPackageTools(
|
|
2
|
+
export declare function registerPackageTools(server: McpServer, context: unknown): void;
|
|
3
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/packages/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/packages/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAuGzE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAI9E"}
|
|
@@ -1,7 +1,93 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { PackageIdParamsSchema, PackageListParamsSchema } from '../../types/mcp.js';
|
|
2
|
+
import { errorResult, requireSession, textResult } from '../../utils/error-handler.js';
|
|
3
|
+
function extractPackages(response) {
|
|
4
|
+
if (Array.isArray(response)) {
|
|
5
|
+
return response;
|
|
6
|
+
}
|
|
7
|
+
if (response && typeof response === 'object' && Array.isArray(response.data)) {
|
|
8
|
+
return (response.data || []);
|
|
9
|
+
}
|
|
10
|
+
return [];
|
|
11
|
+
}
|
|
12
|
+
function summarizePackage(item) {
|
|
13
|
+
return [
|
|
14
|
+
`Package ID: ${item.uuid}`,
|
|
15
|
+
`Name: ${item.name || 'n/a'}`,
|
|
16
|
+
`Description: ${item.description || 'n/a'}`,
|
|
17
|
+
`Parameters: ${item.parameters?.length ?? 0}`,
|
|
18
|
+
`Created At: ${item.createdAt || 'n/a'}`,
|
|
19
|
+
`Updated At: ${item.updatedAt || 'n/a'}`,
|
|
20
|
+
].join('\n');
|
|
21
|
+
}
|
|
22
|
+
function summarizePackageList(items) {
|
|
23
|
+
if (items.length === 0) {
|
|
24
|
+
return 'No packages found.';
|
|
25
|
+
}
|
|
26
|
+
return items
|
|
27
|
+
.slice(0, 15)
|
|
28
|
+
.map((item) => `${item.name || item.uuid} | ${item.description || 'n/a'} | ${item.uuid}`)
|
|
29
|
+
.join('\n');
|
|
30
|
+
}
|
|
31
|
+
const listPackagesTool = {
|
|
32
|
+
name: 'list_packages_tunnelhub',
|
|
33
|
+
schema: {
|
|
34
|
+
title: 'List TunnelHub Packages',
|
|
35
|
+
description: 'List integration packages from integrations-service using the current environment.',
|
|
36
|
+
inputSchema: PackageListParamsSchema,
|
|
37
|
+
annotations: {
|
|
38
|
+
readOnlyHint: true,
|
|
39
|
+
destructiveHint: false,
|
|
40
|
+
idempotentHint: true,
|
|
41
|
+
openWorldHint: false,
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
handler: async (params, context) => {
|
|
45
|
+
try {
|
|
46
|
+
const session = await requireSession(context);
|
|
47
|
+
context.apiClient.setSession(session);
|
|
48
|
+
const apiClient = context.apiClient;
|
|
49
|
+
const response = await apiClient.listPackages(params);
|
|
50
|
+
const items = extractPackages(response);
|
|
51
|
+
const summary = summarizePackageList(items);
|
|
52
|
+
return textResult(`Packages:\n\n${summary}\n\nReturned: ${items.length}`, {
|
|
53
|
+
packages: items,
|
|
54
|
+
rawResponse: response,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
return errorResult(error);
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
const getPackageTool = {
|
|
63
|
+
name: 'get_package_tunnelhub',
|
|
64
|
+
schema: {
|
|
65
|
+
title: 'Get TunnelHub Package',
|
|
66
|
+
description: 'Get read-only details for one package by id.',
|
|
67
|
+
inputSchema: PackageIdParamsSchema,
|
|
68
|
+
annotations: {
|
|
69
|
+
readOnlyHint: true,
|
|
70
|
+
destructiveHint: false,
|
|
71
|
+
idempotentHint: true,
|
|
72
|
+
openWorldHint: false,
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
handler: async (params, context) => {
|
|
76
|
+
try {
|
|
77
|
+
const session = await requireSession(context);
|
|
78
|
+
context.apiClient.setSession(session);
|
|
79
|
+
const apiClient = context.apiClient;
|
|
80
|
+
const item = await apiClient.getPackage(params.packageId);
|
|
81
|
+
return textResult(`Package details:\n\n${summarizePackage(item)}`, item);
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
return errorResult(error);
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
};
|
|
88
|
+
export function registerPackageTools(server, context) {
|
|
89
|
+
const toolContext = context;
|
|
90
|
+
server.registerTool(listPackagesTool.name, listPackagesTool.schema, (params) => listPackagesTool.handler(params, toolContext));
|
|
91
|
+
server.registerTool(getPackageTool.name, getPackageTool.schema, (params) => getPackageTool.handler(params, toolContext));
|
|
6
92
|
}
|
|
7
93
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/packages/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/packages/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/systems/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA0GzE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAI7E"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { SystemIdParamsSchema, SystemListParamsSchema } from '../../types/mcp.js';
|
|
2
|
+
import { errorResult, requireSession, textResult } from '../../utils/error-handler.js';
|
|
3
|
+
function extractSystems(response) {
|
|
4
|
+
if (Array.isArray(response)) {
|
|
5
|
+
return response;
|
|
6
|
+
}
|
|
7
|
+
if (response && typeof response === 'object' && Array.isArray(response.data)) {
|
|
8
|
+
return (response.data || []);
|
|
9
|
+
}
|
|
10
|
+
return [];
|
|
11
|
+
}
|
|
12
|
+
function summarizeSystem(item) {
|
|
13
|
+
return [
|
|
14
|
+
`System ID: ${item.uuid}`,
|
|
15
|
+
`Name: ${item.name || 'n/a'}`,
|
|
16
|
+
`Internal Name: ${item.internalName || 'n/a'}`,
|
|
17
|
+
`Type: ${item.type || 'n/a'}`,
|
|
18
|
+
`Status: ${item.status || 'n/a'}`,
|
|
19
|
+
`Environment: ${item.environment || 'n/a'}`,
|
|
20
|
+
`Description: ${item.description || 'n/a'}`,
|
|
21
|
+
`Created At: ${item.createdAt || 'n/a'}`,
|
|
22
|
+
`Updated At: ${item.updatedAt || 'n/a'}`,
|
|
23
|
+
].join('\n');
|
|
24
|
+
}
|
|
25
|
+
function summarizeSystemList(items) {
|
|
26
|
+
if (items.length === 0) {
|
|
27
|
+
return 'No systems found.';
|
|
28
|
+
}
|
|
29
|
+
return items
|
|
30
|
+
.slice(0, 15)
|
|
31
|
+
.map((item) => `${item.name || item.uuid} | ${item.type || 'n/a'} | ${item.status || 'n/a'} | ${item.uuid}`)
|
|
32
|
+
.join('\n');
|
|
33
|
+
}
|
|
34
|
+
const listSystemsTool = {
|
|
35
|
+
name: 'list_systems_tunnelhub',
|
|
36
|
+
schema: {
|
|
37
|
+
title: 'List TunnelHub Systems',
|
|
38
|
+
description: 'List systems from integrations-service using the current environment.',
|
|
39
|
+
inputSchema: SystemListParamsSchema,
|
|
40
|
+
annotations: {
|
|
41
|
+
readOnlyHint: true,
|
|
42
|
+
destructiveHint: false,
|
|
43
|
+
idempotentHint: true,
|
|
44
|
+
openWorldHint: false,
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
handler: async (params, context) => {
|
|
48
|
+
try {
|
|
49
|
+
const session = await requireSession(context);
|
|
50
|
+
context.apiClient.setSession(session);
|
|
51
|
+
const apiClient = context.apiClient;
|
|
52
|
+
const response = await apiClient.listSystems(params);
|
|
53
|
+
const items = extractSystems(response);
|
|
54
|
+
const summary = summarizeSystemList(items);
|
|
55
|
+
return textResult(`Systems:\n\n${summary}\n\nReturned: ${items.length}`, {
|
|
56
|
+
systems: items,
|
|
57
|
+
rawResponse: response,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
return errorResult(error);
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
const getSystemTool = {
|
|
66
|
+
name: 'get_system_tunnelhub',
|
|
67
|
+
schema: {
|
|
68
|
+
title: 'Get TunnelHub System',
|
|
69
|
+
description: 'Get read-only details for one system by id.',
|
|
70
|
+
inputSchema: SystemIdParamsSchema,
|
|
71
|
+
annotations: {
|
|
72
|
+
readOnlyHint: true,
|
|
73
|
+
destructiveHint: false,
|
|
74
|
+
idempotentHint: true,
|
|
75
|
+
openWorldHint: false,
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
handler: async (params, context) => {
|
|
79
|
+
try {
|
|
80
|
+
const session = await requireSession(context);
|
|
81
|
+
context.apiClient.setSession(session);
|
|
82
|
+
const apiClient = context.apiClient;
|
|
83
|
+
const item = await apiClient.getSystem(params.systemId);
|
|
84
|
+
return textResult(`System details:\n\n${summarizeSystem(item)}`, item);
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
return errorResult(error);
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
export function registerSystemTools(server, context) {
|
|
92
|
+
const toolContext = context;
|
|
93
|
+
server.registerTool(listSystemsTool.name, listSystemsTool.schema, (params) => listSystemsTool.handler(params, toolContext));
|
|
94
|
+
server.registerTool(getSystemTool.name, getSystemTool.schema, (params) => getSystemTool.handler(params, toolContext));
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/systems/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAEvF,SAAS,cAAc,CAAC,QAAiB;IACvC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,OAAO,QAAoB,CAAC;IAC9B,CAAC;IAED,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAE,QAAiC,CAAC,IAAI,CAAC,EAAE,CAAC;QACvG,OAAQ,CAAE,QAAiC,CAAC,IAAI,IAAI,EAAE,CAAc,CAAC;IACvE,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,OAAO;QACL,cAAc,IAAI,CAAC,IAAI,EAAE;QACzB,SAAS,IAAI,CAAC,IAAI,IAAI,KAAK,EAAE;QAC7B,kBAAkB,IAAI,CAAC,YAAY,IAAI,KAAK,EAAE;QAC9C,SAAS,IAAI,CAAC,IAAI,IAAI,KAAK,EAAE;QAC7B,WAAW,IAAI,CAAC,MAAM,IAAI,KAAK,EAAE;QACjC,gBAAgB,IAAI,CAAC,WAAW,IAAI,KAAK,EAAE;QAC3C,gBAAgB,IAAI,CAAC,WAAW,IAAI,KAAK,EAAE;QAC3C,eAAe,IAAI,CAAC,SAAS,IAAI,KAAK,EAAE;QACxC,eAAe,IAAI,CAAC,SAAS,IAAI,KAAK,EAAE;KACzC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAe;IAC1C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IAED,OAAO,KAAK;SACT,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;SACZ,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,IAAI,KAAK,MAAM,IAAI,CAAC,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;SAC3G,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,MAAM,eAAe,GAAG;IACtB,IAAI,EAAE,wBAAwB;IAC9B,MAAM,EAAE;QACN,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EAAE,uEAAuE;QACpF,WAAW,EAAE,sBAAsB;QACnC,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF;IACD,OAAO,EAAE,KAAK,EAAE,MAA8C,EAAE,OAAoB,EAAE,EAAE;QACtF,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;YAC9C,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACtC,MAAM,SAAS,GAAG,OAAO,CAAC,SAEzB,CAAC;YACF,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,WAAW,CAAC,MAAiC,CAAC,CAAC;YAChF,MAAM,KAAK,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;YACvC,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAE3C,OAAO,UAAU,CAAC,eAAe,OAAO,iBAAiB,KAAK,CAAC,MAAM,EAAE,EAAE;gBACvE,OAAO,EAAE,KAAK;gBACd,WAAW,EAAE,QAAQ;aACtB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;CACF,CAAC;AAEF,MAAM,aAAa,GAAG;IACpB,IAAI,EAAE,sBAAsB;IAC5B,MAAM,EAAE;QACN,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EAAE,6CAA6C;QAC1D,WAAW,EAAE,oBAAoB;QACjC,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF;IACD,OAAO,EAAE,KAAK,EAAE,MAA4C,EAAE,OAAoB,EAAE,EAAE;QACpF,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;YAC9C,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACtC,MAAM,SAAS,GAAG,OAAO,CAAC,SAEzB,CAAC;YACF,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACxD,OAAO,UAAU,CAAC,sBAAsB,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QACzE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;CACF,CAAC;AAEF,MAAM,UAAU,mBAAmB,CAAC,MAAiB,EAAE,OAAgB;IACrE,MAAM,WAAW,GAAG,OAAsB,CAAC;IAC3C,MAAM,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,EAAE,eAAe,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;IAC5H,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;AACxH,CAAC"}
|