n8n-mcp 2.7.21 → 2.9.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 (90) hide show
  1. package/README.md +69 -2
  2. package/data/nodes.db +0 -0
  3. package/dist/database/node-repository.d.ts +12 -1
  4. package/dist/database/node-repository.d.ts.map +1 -1
  5. package/dist/database/node-repository.js +122 -2
  6. package/dist/database/node-repository.js.map +1 -1
  7. package/dist/http-server-single-session.d.ts +21 -1
  8. package/dist/http-server-single-session.d.ts.map +1 -1
  9. package/dist/http-server-single-session.js +515 -44
  10. package/dist/http-server-single-session.js.map +1 -1
  11. package/dist/http-server.d.ts.map +1 -1
  12. package/dist/http-server.js +6 -3
  13. package/dist/http-server.js.map +1 -1
  14. package/dist/mcp/server.d.ts +5 -0
  15. package/dist/mcp/server.d.ts.map +1 -1
  16. package/dist/mcp/server.js +413 -26
  17. package/dist/mcp/server.js.map +1 -1
  18. package/dist/mcp/tools-n8n-friendly.d.ts +6 -0
  19. package/dist/mcp/tools-n8n-friendly.d.ts.map +1 -0
  20. package/dist/mcp/tools-n8n-friendly.js +131 -0
  21. package/dist/mcp/tools-n8n-friendly.js.map +1 -0
  22. package/dist/mcp/tools.d.ts.map +1 -1
  23. package/dist/mcp/tools.js +187 -11
  24. package/dist/mcp/tools.js.map +1 -1
  25. package/dist/mcp/workflow-examples.d.ts +76 -0
  26. package/dist/mcp/workflow-examples.d.ts.map +1 -0
  27. package/dist/mcp/workflow-examples.js +111 -0
  28. package/dist/mcp/workflow-examples.js.map +1 -0
  29. package/dist/mcp-engine.d.ts +1 -1
  30. package/dist/mcp-engine.d.ts.map +1 -1
  31. package/dist/mcp-tools-engine.d.ts +48 -0
  32. package/dist/mcp-tools-engine.d.ts.map +1 -0
  33. package/dist/mcp-tools-engine.js +92 -0
  34. package/dist/mcp-tools-engine.js.map +1 -0
  35. package/dist/parsers/node-parser.d.ts.map +1 -1
  36. package/dist/parsers/node-parser.js +16 -10
  37. package/dist/parsers/node-parser.js.map +1 -1
  38. package/dist/parsers/simple-parser.d.ts.map +1 -1
  39. package/dist/parsers/simple-parser.js +11 -0
  40. package/dist/parsers/simple-parser.js.map +1 -1
  41. package/dist/scripts/test-protocol-negotiation.d.ts +3 -0
  42. package/dist/scripts/test-protocol-negotiation.d.ts.map +1 -0
  43. package/dist/scripts/test-protocol-negotiation.js +154 -0
  44. package/dist/scripts/test-protocol-negotiation.js.map +1 -0
  45. package/dist/services/config-validator.d.ts +6 -1
  46. package/dist/services/config-validator.d.ts.map +1 -1
  47. package/dist/services/config-validator.js +99 -25
  48. package/dist/services/config-validator.js.map +1 -1
  49. package/dist/services/enhanced-config-validator.d.ts +4 -0
  50. package/dist/services/enhanced-config-validator.d.ts.map +1 -1
  51. package/dist/services/enhanced-config-validator.js +90 -2
  52. package/dist/services/enhanced-config-validator.js.map +1 -1
  53. package/dist/services/expression-validator.d.ts.map +1 -1
  54. package/dist/services/expression-validator.js +36 -15
  55. package/dist/services/expression-validator.js.map +1 -1
  56. package/dist/services/n8n-validation.d.ts +5 -5
  57. package/dist/services/n8n-validation.d.ts.map +1 -1
  58. package/dist/services/n8n-validation.js +16 -12
  59. package/dist/services/n8n-validation.js.map +1 -1
  60. package/dist/services/property-filter.d.ts.map +1 -1
  61. package/dist/services/property-filter.js +35 -11
  62. package/dist/services/property-filter.js.map +1 -1
  63. package/dist/services/sqlite-storage-service.d.ts +11 -0
  64. package/dist/services/sqlite-storage-service.d.ts.map +1 -0
  65. package/dist/services/sqlite-storage-service.js +74 -0
  66. package/dist/services/sqlite-storage-service.js.map +1 -0
  67. package/dist/services/workflow-validator.d.ts +3 -1
  68. package/dist/services/workflow-validator.d.ts.map +1 -1
  69. package/dist/services/workflow-validator.js +296 -202
  70. package/dist/services/workflow-validator.js.map +1 -1
  71. package/dist/templates/template-repository.js +1 -1
  72. package/dist/templates/template-repository.js.map +1 -1
  73. package/dist/types/index.d.ts +6 -0
  74. package/dist/types/index.d.ts.map +1 -1
  75. package/dist/utils/fixed-collection-validator.d.ts +35 -0
  76. package/dist/utils/fixed-collection-validator.d.ts.map +1 -0
  77. package/dist/utils/fixed-collection-validator.js +358 -0
  78. package/dist/utils/fixed-collection-validator.js.map +1 -0
  79. package/dist/utils/logger.d.ts +1 -0
  80. package/dist/utils/logger.d.ts.map +1 -1
  81. package/dist/utils/logger.js +8 -4
  82. package/dist/utils/logger.js.map +1 -1
  83. package/dist/utils/protocol-version.d.ts +19 -0
  84. package/dist/utils/protocol-version.d.ts.map +1 -0
  85. package/dist/utils/protocol-version.js +95 -0
  86. package/dist/utils/protocol-version.js.map +1 -0
  87. package/dist/utils/template-sanitizer.d.ts.map +1 -1
  88. package/dist/utils/template-sanitizer.js +10 -1
  89. package/dist/utils/template-sanitizer.js.map +1 -1
  90. package/package.json +1 -1
package/README.md CHANGED
@@ -2,9 +2,11 @@
2
2
 
3
3
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
4
4
  [![GitHub stars](https://img.shields.io/github/stars/czlonkowski/n8n-mcp?style=social)](https://github.com/czlonkowski/n8n-mcp)
5
- [![Version](https://img.shields.io/badge/version-2.7.21-blue.svg)](https://github.com/czlonkowski/n8n-mcp)
5
+ [![Version](https://img.shields.io/badge/version-2.9.1-blue.svg)](https://github.com/czlonkowski/n8n-mcp)
6
6
  [![npm version](https://img.shields.io/npm/v/n8n-mcp.svg)](https://www.npmjs.com/package/n8n-mcp)
7
- [![n8n version](https://img.shields.io/badge/n8n-v1.103.2-orange.svg)](https://github.com/n8n-io/n8n)
7
+ [![codecov](https://codecov.io/gh/czlonkowski/n8n-mcp/graph/badge.svg?token=YOUR_TOKEN)](https://codecov.io/gh/czlonkowski/n8n-mcp)
8
+ [![Tests](https://img.shields.io/badge/tests-1356%20passing-brightgreen.svg)](https://github.com/czlonkowski/n8n-mcp/actions)
9
+ [![n8n version](https://img.shields.io/badge/n8n-^1.104.1-orange.svg)](https://github.com/n8n-io/n8n)
8
10
  [![Docker](https://img.shields.io/badge/docker-ghcr.io%2Fczlonkowski%2Fn8n--mcp-green.svg)](https://github.com/czlonkowski/n8n-mcp/pkgs/container/n8n-mcp)
9
11
  [![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/deploy/VY6UOG?referralCode=n8n-mcp)
10
12
 
@@ -320,6 +322,14 @@ Deploy n8n-MCP to Railway's cloud platform with zero configuration:
320
322
 
321
323
  **Restart Claude Desktop after updating configuration** - That's it! 🎉
322
324
 
325
+ ## 🔧 n8n Integration
326
+
327
+ Want to use n8n-MCP with your n8n instance? Check out our comprehensive [n8n Deployment Guide](./docs/N8N_DEPLOYMENT.md) for:
328
+ - Local testing with the MCP Client Tool node
329
+ - Production deployment with Docker Compose
330
+ - Cloud deployment on Hetzner, AWS, and other providers
331
+ - Troubleshooting and security best practices
332
+
323
333
  ## 💻 Connect your IDE
324
334
 
325
335
  n8n-MCP works with multiple AI-powered IDEs and tools. Choose your preferred development environment:
@@ -696,6 +706,63 @@ docker run --rm ghcr.io/czlonkowski/n8n-mcp:latest --version
696
706
  ```
697
707
 
698
708
 
709
+ ## 🧪 Testing
710
+
711
+ The project includes a comprehensive test suite with **1,356 tests** ensuring code quality and reliability:
712
+
713
+ ```bash
714
+ # Run all tests
715
+ npm test
716
+
717
+ # Run tests with coverage report
718
+ npm run test:coverage
719
+
720
+ # Run tests in watch mode
721
+ npm run test:watch
722
+
723
+ # Run specific test suites
724
+ npm run test:unit # 933 unit tests
725
+ npm run test:integration # 249 integration tests
726
+ npm run test:bench # Performance benchmarks
727
+ ```
728
+
729
+ ### Test Suite Overview
730
+
731
+ - **Total Tests**: 1,356 (100% passing)
732
+ - **Unit Tests**: 1,107 tests across 44 files
733
+ - **Integration Tests**: 249 tests across 14 files
734
+ - **Execution Time**: ~2.5 minutes in CI
735
+ - **Test Framework**: Vitest (for speed and TypeScript support)
736
+ - **Mocking**: MSW for API mocking, custom mocks for databases
737
+
738
+ ### Coverage & Quality
739
+
740
+ - **Coverage Reports**: Generated in `./coverage` directory
741
+ - **CI/CD**: Automated testing on all PRs with GitHub Actions
742
+ - **Performance**: Environment-aware thresholds for CI vs local
743
+ - **Parallel Execution**: Configurable thread pool for faster runs
744
+
745
+ ### Testing Architecture
746
+
747
+ - **Unit Tests**: Isolated component testing with mocks
748
+ - Services layer: ~450 tests
749
+ - Parsers: ~200 tests
750
+ - Database repositories: ~100 tests
751
+ - MCP tools: ~180 tests
752
+
753
+ - **Integration Tests**: Full system behavior validation
754
+ - MCP Protocol compliance: 72 tests
755
+ - Database operations: 89 tests
756
+ - Error handling: 44 tests
757
+ - Performance: 44 tests
758
+
759
+ - **Benchmarks**: Performance testing for critical paths
760
+ - Database queries
761
+ - Node loading
762
+ - Search operations
763
+
764
+ For detailed testing documentation, see [Testing Architecture](./docs/testing-architecture.md).
765
+
699
766
  ## 📦 License
700
767
 
701
768
  MIT License - see [LICENSE](LICENSE) for details.
package/data/nodes.db CHANGED
Binary file
@@ -1,11 +1,22 @@
1
1
  import { DatabaseAdapter } from './database-adapter';
2
2
  import { ParsedNode } from '../parsers/node-parser';
3
+ import { SQLiteStorageService } from '../services/sqlite-storage-service';
3
4
  export declare class NodeRepository {
4
5
  private db;
5
- constructor(db: DatabaseAdapter);
6
+ constructor(dbOrService: DatabaseAdapter | SQLiteStorageService);
6
7
  saveNode(node: ParsedNode): void;
7
8
  getNode(nodeType: string): any;
8
9
  getAITools(): any[];
9
10
  private safeJsonParse;
11
+ upsertNode(node: ParsedNode): void;
12
+ getNodeByType(nodeType: string): any;
13
+ getNodesByCategory(category: string): any[];
14
+ searchNodes(query: string, mode?: 'OR' | 'AND' | 'FUZZY', limit?: number): any[];
15
+ getAllNodes(limit?: number): any[];
16
+ getNodeCount(): number;
17
+ getAIToolNodes(): any[];
18
+ getNodesByPackage(packageName: string): any[];
19
+ searchNodeProperties(nodeType: string, query: string, maxResults?: number): any[];
20
+ private parseNodeRow;
10
21
  }
11
22
  //# sourceMappingURL=node-repository.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"node-repository.d.ts","sourceRoot":"","sources":["../../src/database/node-repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,qBAAa,cAAc;IACb,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,eAAe;IAKvC,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAgChC,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG;IA6B9B,UAAU,IAAI,GAAG,EAAE;IAgBnB,OAAO,CAAC,aAAa;CAOtB"}
1
+ {"version":3,"file":"node-repository.d.ts","sourceRoot":"","sources":["../../src/database/node-repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAE1E,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAkB;gBAEhB,WAAW,EAAE,eAAe,GAAG,oBAAoB;IAW/D,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAgChC,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG;IA6B9B,UAAU,IAAI,GAAG,EAAE;IAgBnB,OAAO,CAAC,aAAa;IASrB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAIlC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG;IAIpC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,EAAE;IAS3C,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,IAAI,GAAG,KAAK,GAAG,OAAc,EAAE,KAAK,GAAE,MAAW,GAAG,GAAG,EAAE;IAwC1F,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,GAAG,EAAE;IAUlC,YAAY,IAAI,MAAM;IAKtB,cAAc,IAAI,GAAG,EAAE;IAIvB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,GAAG,EAAE;IAS7C,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,GAAE,MAAW,GAAG,GAAG,EAAE;IAmCrF,OAAO,CAAC,YAAY;CAmBrB"}
@@ -2,8 +2,13 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.NodeRepository = void 0;
4
4
  class NodeRepository {
5
- constructor(db) {
6
- this.db = db;
5
+ constructor(dbOrService) {
6
+ if ('db' in dbOrService) {
7
+ this.db = dbOrService.db;
8
+ }
9
+ else {
10
+ this.db = dbOrService;
11
+ }
7
12
  }
8
13
  saveNode(node) {
9
14
  const stmt = this.db.prepare(`
@@ -62,6 +67,121 @@ class NodeRepository {
62
67
  return defaultValue;
63
68
  }
64
69
  }
70
+ upsertNode(node) {
71
+ this.saveNode(node);
72
+ }
73
+ getNodeByType(nodeType) {
74
+ return this.getNode(nodeType);
75
+ }
76
+ getNodesByCategory(category) {
77
+ const rows = this.db.prepare(`
78
+ SELECT * FROM nodes WHERE category = ?
79
+ ORDER BY display_name
80
+ `).all(category);
81
+ return rows.map(row => this.parseNodeRow(row));
82
+ }
83
+ searchNodes(query, mode = 'OR', limit = 20) {
84
+ let sql = '';
85
+ const params = [];
86
+ if (mode === 'FUZZY') {
87
+ sql = `
88
+ SELECT * FROM nodes
89
+ WHERE node_type LIKE ? OR display_name LIKE ? OR description LIKE ?
90
+ ORDER BY display_name
91
+ LIMIT ?
92
+ `;
93
+ const fuzzyQuery = `%${query}%`;
94
+ params.push(fuzzyQuery, fuzzyQuery, fuzzyQuery, limit);
95
+ }
96
+ else {
97
+ const words = query.split(/\s+/).filter(w => w.length > 0);
98
+ const conditions = words.map(() => '(node_type LIKE ? OR display_name LIKE ? OR description LIKE ?)');
99
+ const operator = mode === 'AND' ? ' AND ' : ' OR ';
100
+ sql = `
101
+ SELECT * FROM nodes
102
+ WHERE ${conditions.join(operator)}
103
+ ORDER BY display_name
104
+ LIMIT ?
105
+ `;
106
+ for (const word of words) {
107
+ const searchTerm = `%${word}%`;
108
+ params.push(searchTerm, searchTerm, searchTerm);
109
+ }
110
+ params.push(limit);
111
+ }
112
+ const rows = this.db.prepare(sql).all(...params);
113
+ return rows.map(row => this.parseNodeRow(row));
114
+ }
115
+ getAllNodes(limit) {
116
+ let sql = 'SELECT * FROM nodes ORDER BY display_name';
117
+ if (limit) {
118
+ sql += ` LIMIT ${limit}`;
119
+ }
120
+ const rows = this.db.prepare(sql).all();
121
+ return rows.map(row => this.parseNodeRow(row));
122
+ }
123
+ getNodeCount() {
124
+ const result = this.db.prepare('SELECT COUNT(*) as count FROM nodes').get();
125
+ return result.count;
126
+ }
127
+ getAIToolNodes() {
128
+ return this.getAITools();
129
+ }
130
+ getNodesByPackage(packageName) {
131
+ const rows = this.db.prepare(`
132
+ SELECT * FROM nodes WHERE package_name = ?
133
+ ORDER BY display_name
134
+ `).all(packageName);
135
+ return rows.map(row => this.parseNodeRow(row));
136
+ }
137
+ searchNodeProperties(nodeType, query, maxResults = 20) {
138
+ const node = this.getNode(nodeType);
139
+ if (!node || !node.properties)
140
+ return [];
141
+ const results = [];
142
+ const searchLower = query.toLowerCase();
143
+ function searchProperties(properties, path = []) {
144
+ for (const prop of properties) {
145
+ if (results.length >= maxResults)
146
+ break;
147
+ const currentPath = [...path, prop.name || prop.displayName];
148
+ const pathString = currentPath.join('.');
149
+ if (prop.name?.toLowerCase().includes(searchLower) ||
150
+ prop.displayName?.toLowerCase().includes(searchLower) ||
151
+ prop.description?.toLowerCase().includes(searchLower)) {
152
+ results.push({
153
+ path: pathString,
154
+ property: prop,
155
+ description: prop.description
156
+ });
157
+ }
158
+ if (prop.options) {
159
+ searchProperties(prop.options, currentPath);
160
+ }
161
+ }
162
+ }
163
+ searchProperties(node.properties);
164
+ return results;
165
+ }
166
+ parseNodeRow(row) {
167
+ return {
168
+ nodeType: row.node_type,
169
+ displayName: row.display_name,
170
+ description: row.description,
171
+ category: row.category,
172
+ developmentStyle: row.development_style,
173
+ package: row.package_name,
174
+ isAITool: Number(row.is_ai_tool) === 1,
175
+ isTrigger: Number(row.is_trigger) === 1,
176
+ isWebhook: Number(row.is_webhook) === 1,
177
+ isVersioned: Number(row.is_versioned) === 1,
178
+ version: row.version,
179
+ properties: this.safeJsonParse(row.properties_schema, []),
180
+ operations: this.safeJsonParse(row.operations, []),
181
+ credentials: this.safeJsonParse(row.credentials_required, []),
182
+ hasDocumentation: !!row.documentation
183
+ };
184
+ }
65
185
  }
66
186
  exports.NodeRepository = NodeRepository;
67
187
  //# sourceMappingURL=node-repository.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"node-repository.js","sourceRoot":"","sources":["../../src/database/node-repository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"node-repository.js","sourceRoot":"","sources":["../../src/database/node-repository.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,29 @@
1
1
  #!/usr/bin/env node
2
2
  import express from 'express';
3
3
  export declare class SingleSessionHTTPServer {
4
+ private transports;
5
+ private servers;
6
+ private sessionMetadata;
4
7
  private session;
5
8
  private consoleManager;
6
9
  private expressServer;
7
10
  private sessionTimeout;
8
11
  private authToken;
12
+ private cleanupTimer;
9
13
  constructor();
14
+ private startSessionCleanup;
15
+ private cleanupExpiredSessions;
16
+ private removeSession;
17
+ private getActiveSessionCount;
18
+ private canCreateSession;
19
+ private isValidSessionId;
20
+ private sanitizeErrorForClient;
21
+ private updateSessionAccess;
22
+ private getSessionMetrics;
10
23
  private loadAuthToken;
11
24
  private validateEnvironment;
12
25
  handleRequest(req: express.Request, res: express.Response): Promise<void>;
13
- private resetSession;
26
+ private resetSessionSSE;
14
27
  private isExpired;
15
28
  start(): Promise<void>;
16
29
  shutdown(): Promise<void>;
@@ -18,6 +31,13 @@ export declare class SingleSessionHTTPServer {
18
31
  active: boolean;
19
32
  sessionId?: string;
20
33
  age?: number;
34
+ sessions?: {
35
+ total: number;
36
+ active: number;
37
+ expired: number;
38
+ max: number;
39
+ sessionIds: string[];
40
+ };
21
41
  };
22
42
  }
23
43
  //# sourceMappingURL=http-server-single-session.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"http-server-single-session.d.ts","sourceRoot":"","sources":["../src/http-server-single-session.ts"],"names":[],"mappings":";AAMA,OAAO,OAAO,MAAM,SAAS,CAAC;AAmB9B,qBAAa,uBAAuB;IAClC,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,cAAc,CAAwB;IAC9C,OAAO,CAAC,aAAa,CAAM;IAC3B,OAAO,CAAC,cAAc,CAAkB;IACxC,OAAO,CAAC,SAAS,CAAuB;;IAUxC,OAAO,CAAC,aAAa;IA2BrB,OAAO,CAAC,mBAAmB;IAmCrB,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;YAiDjE,YAAY;IA0C1B,OAAO,CAAC,SAAS;IAQX,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA6QtB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IA4B/B,cAAc,IAAI;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE;CAWxE"}
1
+ {"version":3,"file":"http-server-single-session.d.ts","sourceRoot":"","sources":["../src/http-server-single-session.ts"],"names":[],"mappings":";AAMA,OAAO,OAAO,MAAM,SAAS,CAAC;AA2C9B,qBAAa,uBAAuB;IAElC,OAAO,CAAC,UAAU,CAA8D;IAChF,OAAO,CAAC,OAAO,CAA0D;IACzE,OAAO,CAAC,eAAe,CAAsE;IAC7F,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,cAAc,CAAwB;IAC9C,OAAO,CAAC,aAAa,CAAM;IAC3B,OAAO,CAAC,cAAc,CAAkB;IACxC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,YAAY,CAA+B;;IAcnD,OAAO,CAAC,mBAAmB;IAmB3B,OAAO,CAAC,sBAAsB;YA4BhB,aAAa;IAqB3B,OAAO,CAAC,qBAAqB;IAO7B,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,sBAAsB;IAkC9B,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,iBAAiB;IAsBzB,OAAO,CAAC,aAAa;IA2BrB,OAAO,CAAC,mBAAmB;IAgDrB,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;YAmLjE,eAAe;IA8C7B,OAAO,CAAC,SAAS;IAQX,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA+gBtB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAkD/B,cAAc,IAAI;QAChB,MAAM,EAAE,OAAO,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE;YACT,KAAK,EAAE,MAAM,CAAC;YACd,MAAM,EAAE,MAAM,CAAC;YACf,OAAO,EAAE,MAAM,CAAC;YAChB,GAAG,EAAE,MAAM,CAAC;YACZ,UAAU,EAAE,MAAM,EAAE,CAAC;SACtB,CAAC;KACH;CA8BF"}