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.
- package/README.md +69 -2
- package/data/nodes.db +0 -0
- package/dist/database/node-repository.d.ts +12 -1
- package/dist/database/node-repository.d.ts.map +1 -1
- package/dist/database/node-repository.js +122 -2
- package/dist/database/node-repository.js.map +1 -1
- package/dist/http-server-single-session.d.ts +21 -1
- package/dist/http-server-single-session.d.ts.map +1 -1
- package/dist/http-server-single-session.js +515 -44
- package/dist/http-server-single-session.js.map +1 -1
- package/dist/http-server.d.ts.map +1 -1
- package/dist/http-server.js +6 -3
- package/dist/http-server.js.map +1 -1
- package/dist/mcp/server.d.ts +5 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +413 -26
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools-n8n-friendly.d.ts +6 -0
- package/dist/mcp/tools-n8n-friendly.d.ts.map +1 -0
- package/dist/mcp/tools-n8n-friendly.js +131 -0
- package/dist/mcp/tools-n8n-friendly.js.map +1 -0
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +187 -11
- package/dist/mcp/tools.js.map +1 -1
- package/dist/mcp/workflow-examples.d.ts +76 -0
- package/dist/mcp/workflow-examples.d.ts.map +1 -0
- package/dist/mcp/workflow-examples.js +111 -0
- package/dist/mcp/workflow-examples.js.map +1 -0
- package/dist/mcp-engine.d.ts +1 -1
- package/dist/mcp-engine.d.ts.map +1 -1
- package/dist/mcp-tools-engine.d.ts +48 -0
- package/dist/mcp-tools-engine.d.ts.map +1 -0
- package/dist/mcp-tools-engine.js +92 -0
- package/dist/mcp-tools-engine.js.map +1 -0
- package/dist/parsers/node-parser.d.ts.map +1 -1
- package/dist/parsers/node-parser.js +16 -10
- package/dist/parsers/node-parser.js.map +1 -1
- package/dist/parsers/simple-parser.d.ts.map +1 -1
- package/dist/parsers/simple-parser.js +11 -0
- package/dist/parsers/simple-parser.js.map +1 -1
- package/dist/scripts/test-protocol-negotiation.d.ts +3 -0
- package/dist/scripts/test-protocol-negotiation.d.ts.map +1 -0
- package/dist/scripts/test-protocol-negotiation.js +154 -0
- package/dist/scripts/test-protocol-negotiation.js.map +1 -0
- package/dist/services/config-validator.d.ts +6 -1
- package/dist/services/config-validator.d.ts.map +1 -1
- package/dist/services/config-validator.js +99 -25
- package/dist/services/config-validator.js.map +1 -1
- package/dist/services/enhanced-config-validator.d.ts +4 -0
- package/dist/services/enhanced-config-validator.d.ts.map +1 -1
- package/dist/services/enhanced-config-validator.js +90 -2
- package/dist/services/enhanced-config-validator.js.map +1 -1
- package/dist/services/expression-validator.d.ts.map +1 -1
- package/dist/services/expression-validator.js +36 -15
- package/dist/services/expression-validator.js.map +1 -1
- package/dist/services/n8n-validation.d.ts +5 -5
- package/dist/services/n8n-validation.d.ts.map +1 -1
- package/dist/services/n8n-validation.js +16 -12
- package/dist/services/n8n-validation.js.map +1 -1
- package/dist/services/property-filter.d.ts.map +1 -1
- package/dist/services/property-filter.js +35 -11
- package/dist/services/property-filter.js.map +1 -1
- package/dist/services/sqlite-storage-service.d.ts +11 -0
- package/dist/services/sqlite-storage-service.d.ts.map +1 -0
- package/dist/services/sqlite-storage-service.js +74 -0
- package/dist/services/sqlite-storage-service.js.map +1 -0
- package/dist/services/workflow-validator.d.ts +3 -1
- package/dist/services/workflow-validator.d.ts.map +1 -1
- package/dist/services/workflow-validator.js +296 -202
- package/dist/services/workflow-validator.js.map +1 -1
- package/dist/templates/template-repository.js +1 -1
- package/dist/templates/template-repository.js.map +1 -1
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/fixed-collection-validator.d.ts +35 -0
- package/dist/utils/fixed-collection-validator.d.ts.map +1 -0
- package/dist/utils/fixed-collection-validator.js +358 -0
- package/dist/utils/fixed-collection-validator.js.map +1 -0
- package/dist/utils/logger.d.ts +1 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +8 -4
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/protocol-version.d.ts +19 -0
- package/dist/utils/protocol-version.d.ts.map +1 -0
- package/dist/utils/protocol-version.js +95 -0
- package/dist/utils/protocol-version.js.map +1 -0
- package/dist/utils/template-sanitizer.d.ts.map +1 -1
- package/dist/utils/template-sanitizer.js +10 -1
- package/dist/utils/template-sanitizer.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,9 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://opensource.org/licenses/MIT)
|
|
4
4
|
[](https://github.com/czlonkowski/n8n-mcp)
|
|
5
|
-
[](https://github.com/czlonkowski/n8n-mcp)
|
|
6
6
|
[](https://www.npmjs.com/package/n8n-mcp)
|
|
7
|
-
[](https://codecov.io/gh/czlonkowski/n8n-mcp)
|
|
8
|
+
[](https://github.com/czlonkowski/n8n-mcp/actions)
|
|
9
|
+
[](https://github.com/n8n-io/n8n)
|
|
8
10
|
[](https://github.com/czlonkowski/n8n-mcp/pkgs/container/n8n-mcp)
|
|
9
11
|
[](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(
|
|
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;
|
|
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(
|
|
6
|
-
|
|
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":";;;
|
|
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
|
|
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;
|
|
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"}
|