@muggleai/mcp-qa-gateway 1.0.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 +185 -0
- package/dist/scripts/phase0-smoke.d.ts +7 -0
- package/dist/scripts/phase0-smoke.d.ts.map +1 -0
- package/dist/scripts/phase0-smoke.js +1712 -0
- package/dist/scripts/phase0-smoke.js.map +1 -0
- package/dist/scripts/types/phase0-smoke-types.d.ts +89 -0
- package/dist/scripts/types/phase0-smoke-types.d.ts.map +1 -0
- package/dist/scripts/types/phase0-smoke-types.js +3 -0
- package/dist/scripts/types/phase0-smoke-types.js.map +1 -0
- package/dist/src/__tests__/helpers/mock-setup.d.ts +28 -0
- package/dist/src/__tests__/helpers/mock-setup.d.ts.map +1 -0
- package/dist/src/__tests__/helpers/mock-setup.js +44 -0
- package/dist/src/__tests__/helpers/mock-setup.js.map +1 -0
- package/dist/src/__tests__/helpers/test-fixtures.d.ts +38 -0
- package/dist/src/__tests__/helpers/test-fixtures.d.ts.map +1 -0
- package/dist/src/__tests__/helpers/test-fixtures.js +62 -0
- package/dist/src/__tests__/helpers/test-fixtures.js.map +1 -0
- package/dist/src/__tests__/tools/artifact-tools.test.d.ts +9 -0
- package/dist/src/__tests__/tools/artifact-tools.test.d.ts.map +1 -0
- package/dist/src/__tests__/tools/artifact-tools.test.js +307 -0
- package/dist/src/__tests__/tools/artifact-tools.test.js.map +1 -0
- package/dist/src/__tests__/tools/prd-file-tools.test.d.ts +7 -0
- package/dist/src/__tests__/tools/prd-file-tools.test.d.ts.map +1 -0
- package/dist/src/__tests__/tools/prd-file-tools.test.js +278 -0
- package/dist/src/__tests__/tools/prd-file-tools.test.js.map +1 -0
- package/dist/src/__tests__/tools/project-tools.test.d.ts +7 -0
- package/dist/src/__tests__/tools/project-tools.test.d.ts.map +1 -0
- package/dist/src/__tests__/tools/project-tools.test.js +281 -0
- package/dist/src/__tests__/tools/project-tools.test.js.map +1 -0
- package/dist/src/__tests__/tools/recommendation-tools.test.d.ts +6 -0
- package/dist/src/__tests__/tools/recommendation-tools.test.d.ts.map +1 -0
- package/dist/src/__tests__/tools/recommendation-tools.test.js +193 -0
- package/dist/src/__tests__/tools/recommendation-tools.test.js.map +1 -0
- package/dist/src/__tests__/tools/report-tools.test.d.ts +7 -0
- package/dist/src/__tests__/tools/report-tools.test.d.ts.map +1 -0
- package/dist/src/__tests__/tools/report-tools.test.js +226 -0
- package/dist/src/__tests__/tools/report-tools.test.js.map +1 -0
- package/dist/src/__tests__/tools/secret-tools.test.d.ts +6 -0
- package/dist/src/__tests__/tools/secret-tools.test.d.ts.map +1 -0
- package/dist/src/__tests__/tools/secret-tools.test.js +243 -0
- package/dist/src/__tests__/tools/secret-tools.test.js.map +1 -0
- package/dist/src/__tests__/tools/test-case-prompt-tools.test.d.ts +6 -0
- package/dist/src/__tests__/tools/test-case-prompt-tools.test.d.ts.map +1 -0
- package/dist/src/__tests__/tools/test-case-prompt-tools.test.js +291 -0
- package/dist/src/__tests__/tools/test-case-prompt-tools.test.js.map +1 -0
- package/dist/src/__tests__/tools/tool-registry.test.d.ts +7 -0
- package/dist/src/__tests__/tools/tool-registry.test.d.ts.map +1 -0
- package/dist/src/__tests__/tools/tool-registry.test.js +205 -0
- package/dist/src/__tests__/tools/tool-registry.test.js.map +1 -0
- package/dist/src/__tests__/tools/use-case-tools.test.d.ts +7 -0
- package/dist/src/__tests__/tools/use-case-tools.test.d.ts.map +1 -0
- package/dist/src/__tests__/tools/use-case-tools.test.js +177 -0
- package/dist/src/__tests__/tools/use-case-tools.test.js.map +1 -0
- package/dist/src/__tests__/tools/workflow-tools.test.d.ts +15 -0
- package/dist/src/__tests__/tools/workflow-tools.test.d.ts.map +1 -0
- package/dist/src/__tests__/tools/workflow-tools.test.js +627 -0
- package/dist/src/__tests__/tools/workflow-tools.test.js.map +1 -0
- package/dist/src/config/index.d.ts +18 -0
- package/dist/src/config/index.d.ts.map +1 -0
- package/dist/src/config/index.js +76 -0
- package/dist/src/config/index.js.map +1 -0
- package/dist/src/index.d.ts +21 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +88 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/interfaces/caller-credentials.d.ts +10 -0
- package/dist/src/interfaces/caller-credentials.d.ts.map +1 -0
- package/dist/src/interfaces/caller-credentials.js +3 -0
- package/dist/src/interfaces/caller-credentials.js.map +1 -0
- package/dist/src/interfaces/gateway-config.d.ts +28 -0
- package/dist/src/interfaces/gateway-config.d.ts.map +1 -0
- package/dist/src/interfaces/gateway-config.js +3 -0
- package/dist/src/interfaces/gateway-config.js.map +1 -0
- package/dist/src/interfaces/index.d.ts +13 -0
- package/dist/src/interfaces/index.d.ts.map +1 -0
- package/dist/src/interfaces/index.js +7 -0
- package/dist/src/interfaces/index.js.map +1 -0
- package/dist/src/interfaces/mcp-tool-call-protocol.d.ts +61 -0
- package/dist/src/interfaces/mcp-tool-call-protocol.d.ts.map +1 -0
- package/dist/src/interfaces/mcp-tool-call-protocol.js +7 -0
- package/dist/src/interfaces/mcp-tool-call-protocol.js.map +1 -0
- package/dist/src/interfaces/pagination.d.ts +24 -0
- package/dist/src/interfaces/pagination.d.ts.map +1 -0
- package/dist/src/interfaces/pagination.js +6 -0
- package/dist/src/interfaces/pagination.js.map +1 -0
- package/dist/src/interfaces/tool-definition.d.ts +22 -0
- package/dist/src/interfaces/tool-definition.d.ts.map +1 -0
- package/dist/src/interfaces/tool-definition.js +6 -0
- package/dist/src/interfaces/tool-definition.js.map +1 -0
- package/dist/src/interfaces/tool-mapping.d.ts +20 -0
- package/dist/src/interfaces/tool-mapping.d.ts.map +1 -0
- package/dist/src/interfaces/tool-mapping.js +6 -0
- package/dist/src/interfaces/tool-mapping.js.map +1 -0
- package/dist/src/interfaces/upstream-call.d.ts +27 -0
- package/dist/src/interfaces/upstream-call.d.ts.map +1 -0
- package/dist/src/interfaces/upstream-call.js +3 -0
- package/dist/src/interfaces/upstream-call.js.map +1 -0
- package/dist/src/interfaces/upstream-response.d.ts +12 -0
- package/dist/src/interfaces/upstream-response.d.ts.map +1 -0
- package/dist/src/interfaces/upstream-response.js +3 -0
- package/dist/src/interfaces/upstream-response.js.map +1 -0
- package/dist/src/server/http-server.d.ts +13 -0
- package/dist/src/server/http-server.d.ts.map +1 -0
- package/dist/src/server/http-server.js +219 -0
- package/dist/src/server/http-server.js.map +1 -0
- package/dist/src/server/mcp-server.d.ts +11 -0
- package/dist/src/server/mcp-server.d.ts.map +1 -0
- package/dist/src/server/mcp-server.js +363 -0
- package/dist/src/server/mcp-server.js.map +1 -0
- package/dist/src/server/session-credentials.d.ts +8 -0
- package/dist/src/server/session-credentials.d.ts.map +1 -0
- package/dist/src/server/session-credentials.js +24 -0
- package/dist/src/server/session-credentials.js.map +1 -0
- package/dist/src/tools/constants.d.ts +6 -0
- package/dist/src/tools/constants.d.ts.map +1 -0
- package/dist/src/tools/constants.js +9 -0
- package/dist/src/tools/constants.js.map +1 -0
- package/dist/src/tools/index.d.ts +7 -0
- package/dist/src/tools/index.d.ts.map +1 -0
- package/dist/src/tools/index.js +23 -0
- package/dist/src/tools/index.js.map +1 -0
- package/dist/src/tools/schemas.d.ts +906 -0
- package/dist/src/tools/schemas.d.ts.map +1 -0
- package/dist/src/tools/schemas.js +386 -0
- package/dist/src/tools/schemas.js.map +1 -0
- package/dist/src/tools/tool-registry.d.ts +26 -0
- package/dist/src/tools/tool-registry.d.ts.map +1 -0
- package/dist/src/tools/tool-registry.js +1142 -0
- package/dist/src/tools/tool-registry.js.map +1 -0
- package/dist/src/types/index.d.ts +35 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/types/index.js +55 -0
- package/dist/src/types/index.js.map +1 -0
- package/dist/src/upstream/prompt-service-client.d.ts +62 -0
- package/dist/src/upstream/prompt-service-client.d.ts.map +1 -0
- package/dist/src/upstream/prompt-service-client.js +329 -0
- package/dist/src/upstream/prompt-service-client.js.map +1 -0
- package/dist/src/utils/logger.d.ts +17 -0
- package/dist/src/utils/logger.d.ts.map +1 -0
- package/dist/src/utils/logger.js +64 -0
- package/dist/src/utils/logger.js.map +1 -0
- package/dist/vitest.config.d.ts +3 -0
- package/dist/vitest.config.d.ts.map +1 -0
- package/dist/vitest.config.js +21 -0
- package/dist/vitest.config.js.map +1 -0
- package/package.json +66 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upstream-response.js","sourceRoot":"","sources":["../../../src/interfaces/upstream-response.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP server setup for MCP QA Gateway.
|
|
3
|
+
* Uses Express with the MCP Streamable HTTP transport.
|
|
4
|
+
*/
|
|
5
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
6
|
+
import { Express } from "express";
|
|
7
|
+
/**
|
|
8
|
+
* Create and configure the Express HTTP server.
|
|
9
|
+
* @param mcpServer - Configured MCP server instance.
|
|
10
|
+
* @returns Express app.
|
|
11
|
+
*/
|
|
12
|
+
export declare function createHttpServer(mcpServer: Server): Express;
|
|
13
|
+
//# sourceMappingURL=http-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../../../src/server/http-server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAGnE,OAAgB,EAAE,OAAO,EAAmC,MAAM,SAAS,CAAC;AAwB5E;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAoM3D"}
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* HTTP server setup for MCP QA Gateway.
|
|
4
|
+
* Uses Express with the MCP Streamable HTTP transport.
|
|
5
|
+
*/
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.createHttpServer = createHttpServer;
|
|
11
|
+
const streamableHttp_js_1 = require("@modelcontextprotocol/sdk/server/streamableHttp.js");
|
|
12
|
+
const cors_1 = __importDefault(require("cors"));
|
|
13
|
+
const express_1 = __importDefault(require("express"));
|
|
14
|
+
const express_rate_limit_1 = __importDefault(require("express-rate-limit"));
|
|
15
|
+
const helmet_1 = __importDefault(require("helmet"));
|
|
16
|
+
const uuid_1 = require("uuid");
|
|
17
|
+
const index_js_1 = require("../config/index.js");
|
|
18
|
+
const index_js_2 = require("../types/index.js");
|
|
19
|
+
const logger_js_1 = require("../utils/logger.js");
|
|
20
|
+
const session_credentials_js_1 = require("./session-credentials.js");
|
|
21
|
+
const transportSessions = new Map();
|
|
22
|
+
function getOrCreateTransport(sessionId, mcpServer) {
|
|
23
|
+
let transport = transportSessions.get(sessionId);
|
|
24
|
+
if (!transport) {
|
|
25
|
+
transport = new streamableHttp_js_1.StreamableHTTPServerTransport({
|
|
26
|
+
sessionIdGenerator: () => sessionId,
|
|
27
|
+
});
|
|
28
|
+
void mcpServer.connect(transport);
|
|
29
|
+
transportSessions.set(sessionId, transport);
|
|
30
|
+
}
|
|
31
|
+
return transport;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Create and configure the Express HTTP server.
|
|
35
|
+
* @param mcpServer - Configured MCP server instance.
|
|
36
|
+
* @returns Express app.
|
|
37
|
+
*/
|
|
38
|
+
function createHttpServer(mcpServer) {
|
|
39
|
+
const config = (0, index_js_1.getConfig)();
|
|
40
|
+
const logger = (0, logger_js_1.getLogger)();
|
|
41
|
+
const app = (0, express_1.default)();
|
|
42
|
+
// Security middleware
|
|
43
|
+
app.use((0, helmet_1.default)({
|
|
44
|
+
contentSecurityPolicy: false, // MCP uses SSE which requires flexible CSP
|
|
45
|
+
}));
|
|
46
|
+
// CORS - allow all origins for MCP clients
|
|
47
|
+
app.use((0, cors_1.default)({
|
|
48
|
+
origin: true,
|
|
49
|
+
credentials: true,
|
|
50
|
+
methods: ["GET", "POST", "DELETE", "OPTIONS"],
|
|
51
|
+
allowedHeaders: [
|
|
52
|
+
"Content-Type",
|
|
53
|
+
"Authorization",
|
|
54
|
+
"x-api-key",
|
|
55
|
+
"Mcp-Session-Id",
|
|
56
|
+
"Last-Event-ID",
|
|
57
|
+
],
|
|
58
|
+
exposedHeaders: ["Mcp-Session-Id"],
|
|
59
|
+
}));
|
|
60
|
+
// Rate limiting
|
|
61
|
+
if (config.rateLimitEnabled) {
|
|
62
|
+
const limiter = (0, express_rate_limit_1.default)({
|
|
63
|
+
windowMs: config.rateLimitWindowSeconds * 1000,
|
|
64
|
+
max: config.rateLimitMaxRequests,
|
|
65
|
+
keyGenerator: (req) => {
|
|
66
|
+
const apiKey = req.headers["x-api-key"];
|
|
67
|
+
const authHeader = req.headers["authorization"];
|
|
68
|
+
if (apiKey && typeof apiKey === "string") {
|
|
69
|
+
const parts = apiKey.split("_");
|
|
70
|
+
if (parts.length >= 3) {
|
|
71
|
+
return `apikey:${parts[2]}`;
|
|
72
|
+
}
|
|
73
|
+
return `apikey:${apiKey.substring(0, 20)}`;
|
|
74
|
+
}
|
|
75
|
+
if (authHeader && typeof authHeader === "string") {
|
|
76
|
+
return `jwt:${simpleHash(authHeader)}`;
|
|
77
|
+
}
|
|
78
|
+
return `ip:${req.ip}`;
|
|
79
|
+
},
|
|
80
|
+
message: {
|
|
81
|
+
error: "RATE_LIMITED",
|
|
82
|
+
message: "Too many requests, please try again later",
|
|
83
|
+
},
|
|
84
|
+
standardHeaders: true,
|
|
85
|
+
legacyHeaders: false,
|
|
86
|
+
});
|
|
87
|
+
app.use(limiter);
|
|
88
|
+
}
|
|
89
|
+
// Request logging middleware
|
|
90
|
+
app.use((req, res, next) => {
|
|
91
|
+
const correlationId = req.headers["x-correlation-id"] || (0, uuid_1.v4)();
|
|
92
|
+
req.headers["x-correlation-id"] = correlationId;
|
|
93
|
+
const startTime = Date.now();
|
|
94
|
+
const childLogger = (0, logger_js_1.createChildLogger)(correlationId);
|
|
95
|
+
childLogger.info("HTTP request received", {
|
|
96
|
+
method: req.method,
|
|
97
|
+
path: req.path,
|
|
98
|
+
hasAuth: !!req.headers["authorization"] || !!req.headers["x-api-key"],
|
|
99
|
+
});
|
|
100
|
+
res.on("finish", () => {
|
|
101
|
+
const latency = Date.now() - startTime;
|
|
102
|
+
childLogger.info("HTTP response sent", {
|
|
103
|
+
method: req.method,
|
|
104
|
+
path: req.path,
|
|
105
|
+
statusCode: res.statusCode,
|
|
106
|
+
latencyMs: latency,
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
next();
|
|
110
|
+
});
|
|
111
|
+
// Health check endpoint
|
|
112
|
+
app.get("/health", (_req, res) => {
|
|
113
|
+
res.status(200).json({
|
|
114
|
+
status: "healthy",
|
|
115
|
+
service: "mcp-qa-gateway",
|
|
116
|
+
version: "1.0.0",
|
|
117
|
+
timestamp: new Date().toISOString(),
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
// JSON body parsing for MCP endpoint
|
|
121
|
+
app.use("/mcp", express_1.default.json({ limit: "10mb" }));
|
|
122
|
+
// MCP endpoint - handles all MCP protocol traffic
|
|
123
|
+
app.all("/mcp", (req, res) => {
|
|
124
|
+
const correlationId = req.headers["x-correlation-id"] || (0, uuid_1.v4)();
|
|
125
|
+
const childLogger = (0, logger_js_1.createChildLogger)(correlationId);
|
|
126
|
+
void (async () => {
|
|
127
|
+
try {
|
|
128
|
+
// Validate that at least one credential is present
|
|
129
|
+
const bearerToken = req.headers["authorization"];
|
|
130
|
+
const apiKey = req.headers["x-api-key"];
|
|
131
|
+
if (!bearerToken && !apiKey) {
|
|
132
|
+
childLogger.warn("MCP request without credentials");
|
|
133
|
+
res.status(401).json({
|
|
134
|
+
error: index_js_2.McpErrorCode.UNAUTHORIZED,
|
|
135
|
+
message: "Missing authentication. Provide either Authorization header or x-api-key.",
|
|
136
|
+
});
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
const sessionIdHeader = req.headers["mcp-session-id"] ||
|
|
140
|
+
req.headers["Mcp-Session-Id"] ||
|
|
141
|
+
(0, uuid_1.v4)();
|
|
142
|
+
req.headers["mcp-session-id"] = sessionIdHeader;
|
|
143
|
+
res.setHeader("Mcp-Session-Id", sessionIdHeader);
|
|
144
|
+
(0, session_credentials_js_1.setSessionCredentials)(sessionIdHeader, {
|
|
145
|
+
bearerToken: bearerToken,
|
|
146
|
+
apiKey: apiKey,
|
|
147
|
+
});
|
|
148
|
+
const transport = getOrCreateTransport(sessionIdHeader, mcpServer);
|
|
149
|
+
// Create transport for this request
|
|
150
|
+
// Handle the request based on method
|
|
151
|
+
if (req.method === "GET") {
|
|
152
|
+
await transport.handleRequest(req, res, req.body);
|
|
153
|
+
}
|
|
154
|
+
else if (req.method === "POST") {
|
|
155
|
+
await transport.handleRequest(req, res, req.body);
|
|
156
|
+
}
|
|
157
|
+
else if (req.method === "DELETE") {
|
|
158
|
+
await transport.handleRequest(req, res, req.body);
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
res.status(405).json({
|
|
162
|
+
error: "METHOD_NOT_ALLOWED",
|
|
163
|
+
message: `Method ${req.method} not allowed`,
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
catch (error) {
|
|
168
|
+
childLogger.error("MCP request failed", {
|
|
169
|
+
error: String(error),
|
|
170
|
+
});
|
|
171
|
+
if (!res.headersSent) {
|
|
172
|
+
res.status(500).json({
|
|
173
|
+
error: index_js_2.McpErrorCode.INTERNAL_ERROR,
|
|
174
|
+
message: "Internal server error",
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
})();
|
|
179
|
+
});
|
|
180
|
+
// Fallback 404 handler
|
|
181
|
+
app.use((_req, res) => {
|
|
182
|
+
res.status(404).json({
|
|
183
|
+
error: "NOT_FOUND",
|
|
184
|
+
message: `Endpoint ${_req.method} ${_req.path} not found`,
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
// Error handler
|
|
188
|
+
app.use((err, req, res, _next) => {
|
|
189
|
+
const correlationId = req.headers["x-correlation-id"] || "unknown";
|
|
190
|
+
const childLogger = (0, logger_js_1.createChildLogger)(correlationId);
|
|
191
|
+
childLogger.error("Unhandled error", {
|
|
192
|
+
error: err.message,
|
|
193
|
+
stack: err.stack,
|
|
194
|
+
});
|
|
195
|
+
if (!res.headersSent) {
|
|
196
|
+
res.status(500).json({
|
|
197
|
+
error: index_js_2.McpErrorCode.INTERNAL_ERROR,
|
|
198
|
+
message: "Internal server error",
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
logger.info("HTTP server configured", {
|
|
203
|
+
rateLimitEnabled: config.rateLimitEnabled,
|
|
204
|
+
});
|
|
205
|
+
return app;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Simple hash function for rate limiting key generation.
|
|
209
|
+
*/
|
|
210
|
+
function simpleHash(str) {
|
|
211
|
+
let hash = 0;
|
|
212
|
+
for (let i = 0; i < str.length; i++) {
|
|
213
|
+
const char = str.charCodeAt(i);
|
|
214
|
+
hash = (hash << 5) - hash + char;
|
|
215
|
+
hash = hash & hash;
|
|
216
|
+
}
|
|
217
|
+
return Math.abs(hash).toString(36);
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=http-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-server.js","sourceRoot":"","sources":["../../../src/server/http-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Server implementation for QA Gateway.
|
|
3
|
+
* Uses the MCP SDK with Streamable HTTP transport.
|
|
4
|
+
*/
|
|
5
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
6
|
+
/**
|
|
7
|
+
* Create and configure the MCP server.
|
|
8
|
+
* @returns Configured MCP Server instance.
|
|
9
|
+
*/
|
|
10
|
+
export declare function createMcpServer(): Server;
|
|
11
|
+
//# sourceMappingURL=mcp-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../../../src/server/mcp-server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAenE;;;GAGG;AACH,wBAAgB,eAAe,IAAI,MAAM,CA8IxC"}
|
|
@@ -0,0 +1,363 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* MCP Server implementation for QA Gateway.
|
|
4
|
+
* Uses the MCP SDK with Streamable HTTP transport.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.createMcpServer = createMcpServer;
|
|
8
|
+
const index_js_1 = require("@modelcontextprotocol/sdk/server/index.js");
|
|
9
|
+
const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
|
|
10
|
+
const uuid_1 = require("uuid");
|
|
11
|
+
const zod_1 = require("zod");
|
|
12
|
+
const tool_registry_js_1 = require("../tools/tool-registry.js");
|
|
13
|
+
const index_js_2 = require("../types/index.js");
|
|
14
|
+
const logger_js_1 = require("../utils/logger.js");
|
|
15
|
+
const session_credentials_js_1 = require("./session-credentials.js");
|
|
16
|
+
/**
|
|
17
|
+
* Create and configure the MCP server.
|
|
18
|
+
* @returns Configured MCP Server instance.
|
|
19
|
+
*/
|
|
20
|
+
function createMcpServer() {
|
|
21
|
+
const logger = (0, logger_js_1.getLogger)();
|
|
22
|
+
const server = new index_js_1.Server({
|
|
23
|
+
name: "muggle-ai-mcp-qa-gateway",
|
|
24
|
+
version: "1.0.0",
|
|
25
|
+
}, {
|
|
26
|
+
capabilities: {
|
|
27
|
+
tools: {},
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
// Handle list tools request
|
|
31
|
+
server.setRequestHandler(types_js_1.ListToolsRequestSchema, () => {
|
|
32
|
+
logger.debug("Listing tools", { count: tool_registry_js_1.allTools.length });
|
|
33
|
+
const tools = tool_registry_js_1.allTools.map((tool) => {
|
|
34
|
+
// Convert Zod schema to JSON Schema for MCP
|
|
35
|
+
const jsonSchema = zodToJsonSchema(tool.inputSchema);
|
|
36
|
+
return {
|
|
37
|
+
name: tool.name,
|
|
38
|
+
description: tool.description,
|
|
39
|
+
inputSchema: jsonSchema,
|
|
40
|
+
};
|
|
41
|
+
});
|
|
42
|
+
return { tools: tools };
|
|
43
|
+
});
|
|
44
|
+
// Handle call tool request
|
|
45
|
+
server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request, extra) => {
|
|
46
|
+
const correlationId = (0, uuid_1.v4)();
|
|
47
|
+
const childLogger = (0, logger_js_1.createChildLogger)(correlationId);
|
|
48
|
+
const toolName = request.params.name;
|
|
49
|
+
const toolInput = request.params.arguments || {};
|
|
50
|
+
childLogger.info("Tool call received", {
|
|
51
|
+
tool: toolName,
|
|
52
|
+
hasArguments: Object.keys(toolInput).length > 0,
|
|
53
|
+
});
|
|
54
|
+
// Extract credentials from transport metadata
|
|
55
|
+
const credentials = extractCredentialsFromExtra(extra);
|
|
56
|
+
try {
|
|
57
|
+
const startTime = Date.now();
|
|
58
|
+
const result = await (0, tool_registry_js_1.executeTool)(toolName, toolInput, credentials, correlationId);
|
|
59
|
+
const latency = Date.now() - startTime;
|
|
60
|
+
childLogger.info("Tool call completed", {
|
|
61
|
+
tool: toolName,
|
|
62
|
+
latencyMs: latency,
|
|
63
|
+
success: true,
|
|
64
|
+
});
|
|
65
|
+
return {
|
|
66
|
+
content: [
|
|
67
|
+
{
|
|
68
|
+
type: "text",
|
|
69
|
+
text: JSON.stringify(result, null, 2),
|
|
70
|
+
},
|
|
71
|
+
],
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
if (error instanceof index_js_2.GatewayError) {
|
|
76
|
+
childLogger.warn("Tool call failed with gateway error", {
|
|
77
|
+
tool: toolName,
|
|
78
|
+
code: error.code,
|
|
79
|
+
message: error.message,
|
|
80
|
+
});
|
|
81
|
+
// Return user-friendly error message
|
|
82
|
+
const friendlyMessage = formatGatewayErrorMessage(error);
|
|
83
|
+
return {
|
|
84
|
+
content: [
|
|
85
|
+
{
|
|
86
|
+
type: "text",
|
|
87
|
+
text: JSON.stringify({
|
|
88
|
+
error: error.code,
|
|
89
|
+
message: friendlyMessage,
|
|
90
|
+
}),
|
|
91
|
+
},
|
|
92
|
+
],
|
|
93
|
+
isError: true,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
if (error instanceof zod_1.ZodError) {
|
|
97
|
+
childLogger.warn("Tool call failed with validation error", {
|
|
98
|
+
tool: toolName,
|
|
99
|
+
errors: error.errors,
|
|
100
|
+
});
|
|
101
|
+
// Format validation errors in a user-friendly way
|
|
102
|
+
const validationMessage = formatValidationErrors(error);
|
|
103
|
+
return {
|
|
104
|
+
content: [
|
|
105
|
+
{
|
|
106
|
+
type: "text",
|
|
107
|
+
text: JSON.stringify({
|
|
108
|
+
error: index_js_2.McpErrorCode.INVALID_ARGUMENT,
|
|
109
|
+
message: validationMessage,
|
|
110
|
+
}),
|
|
111
|
+
},
|
|
112
|
+
],
|
|
113
|
+
isError: true,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
// Unknown error
|
|
117
|
+
childLogger.error("Tool call failed with unknown error", {
|
|
118
|
+
tool: toolName,
|
|
119
|
+
error: String(error),
|
|
120
|
+
});
|
|
121
|
+
return {
|
|
122
|
+
content: [
|
|
123
|
+
{
|
|
124
|
+
type: "text",
|
|
125
|
+
text: JSON.stringify({
|
|
126
|
+
error: index_js_2.McpErrorCode.INTERNAL_ERROR,
|
|
127
|
+
message: "An unexpected error occurred. Please try again.",
|
|
128
|
+
}),
|
|
129
|
+
},
|
|
130
|
+
],
|
|
131
|
+
isError: true,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
logger.info("MCP server configured", {
|
|
136
|
+
tools: tool_registry_js_1.allTools.length,
|
|
137
|
+
});
|
|
138
|
+
return server;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Extract caller credentials from MCP transport extra data.
|
|
142
|
+
* In the HTTP transport, these come from request headers.
|
|
143
|
+
*/
|
|
144
|
+
function extractCredentialsFromExtra(extra) {
|
|
145
|
+
const credentials = {};
|
|
146
|
+
if (extra && typeof extra === "object") {
|
|
147
|
+
const extraObj = extra;
|
|
148
|
+
// Check for authorization header
|
|
149
|
+
if (extraObj.authorization && typeof extraObj.authorization === "string") {
|
|
150
|
+
credentials.bearerToken = extraObj.authorization;
|
|
151
|
+
}
|
|
152
|
+
// Check for x-api-key header
|
|
153
|
+
if (extraObj["x-api-key"] && typeof extraObj["x-api-key"] === "string") {
|
|
154
|
+
credentials.apiKey = extraObj["x-api-key"];
|
|
155
|
+
}
|
|
156
|
+
// Also check headers object if present
|
|
157
|
+
if (extraObj.headers && typeof extraObj.headers === "object") {
|
|
158
|
+
const headers = extraObj.headers;
|
|
159
|
+
if (headers.authorization && typeof headers.authorization === "string") {
|
|
160
|
+
credentials.bearerToken = headers.authorization;
|
|
161
|
+
}
|
|
162
|
+
if (headers["x-api-key"] && typeof headers["x-api-key"] === "string") {
|
|
163
|
+
credentials.apiKey = headers["x-api-key"];
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
if (!credentials.bearerToken && !credentials.apiKey) {
|
|
168
|
+
const sessionId = extra["sessionId"] ||
|
|
169
|
+
extra.headers?.["mcp-session-id"];
|
|
170
|
+
const sessionCreds = (0, session_credentials_js_1.getSessionCredentials)(sessionId) || (0, session_credentials_js_1.getCurrentSessionCredentials)();
|
|
171
|
+
if (sessionCreds) {
|
|
172
|
+
credentials.bearerToken = sessionCreds.bearerToken;
|
|
173
|
+
credentials.apiKey = sessionCreds.apiKey;
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
console.warn("No credentials extracted from transport extra", {
|
|
177
|
+
extra: JSON.stringify(extra),
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
return credentials;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Format a GatewayError into a user-friendly message.
|
|
185
|
+
*/
|
|
186
|
+
function formatGatewayErrorMessage(error) {
|
|
187
|
+
// Map error codes to user-friendly messages
|
|
188
|
+
switch (error.code) {
|
|
189
|
+
case index_js_2.McpErrorCode.UNAUTHORIZED:
|
|
190
|
+
return "Authentication required. Please check your API key or login credentials.";
|
|
191
|
+
case index_js_2.McpErrorCode.FORBIDDEN:
|
|
192
|
+
return error.message.includes("not allowed")
|
|
193
|
+
? error.message
|
|
194
|
+
: "You don't have permission to perform this action.";
|
|
195
|
+
case index_js_2.McpErrorCode.NOT_FOUND:
|
|
196
|
+
return error.message || "The requested resource was not found.";
|
|
197
|
+
case index_js_2.McpErrorCode.INVALID_ARGUMENT:
|
|
198
|
+
return error.message || "Invalid request parameters.";
|
|
199
|
+
case index_js_2.McpErrorCode.UPSTREAM_ERROR:
|
|
200
|
+
// Extract meaningful message from upstream errors
|
|
201
|
+
if (error.message.includes("timeout")) {
|
|
202
|
+
return "The request timed out. Please try again.";
|
|
203
|
+
}
|
|
204
|
+
if (error.message.includes("connection")) {
|
|
205
|
+
return "Unable to connect to the service. Please try again later.";
|
|
206
|
+
}
|
|
207
|
+
// Return the original message if it's already user-friendly
|
|
208
|
+
return error.message;
|
|
209
|
+
case index_js_2.McpErrorCode.INTERNAL_ERROR:
|
|
210
|
+
return "An internal error occurred. Please try again later.";
|
|
211
|
+
default:
|
|
212
|
+
return error.message || "An error occurred.";
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Format Zod validation errors into a user-friendly message.
|
|
217
|
+
*/
|
|
218
|
+
function formatValidationErrors(error) {
|
|
219
|
+
const issues = error.errors;
|
|
220
|
+
if (issues.length === 0) {
|
|
221
|
+
return "Invalid input parameters.";
|
|
222
|
+
}
|
|
223
|
+
if (issues.length === 1) {
|
|
224
|
+
const issue = issues[0];
|
|
225
|
+
const path = issue.path.join(".");
|
|
226
|
+
return path ? `Invalid value for '${path}': ${issue.message}` : issue.message;
|
|
227
|
+
}
|
|
228
|
+
// Multiple issues - list them concisely
|
|
229
|
+
const issueMessages = issues.slice(0, 3).map((issue) => {
|
|
230
|
+
const path = issue.path.join(".");
|
|
231
|
+
return path ? `'${path}': ${issue.message}` : issue.message;
|
|
232
|
+
});
|
|
233
|
+
const remaining = issues.length - 3;
|
|
234
|
+
const message = `Invalid input: ${issueMessages.join("; ")}`;
|
|
235
|
+
return remaining > 0
|
|
236
|
+
? `${message} (and ${remaining} more issue${remaining > 1 ? "s" : ""})`
|
|
237
|
+
: message;
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Convert a Zod schema to JSON Schema format for MCP.
|
|
241
|
+
*/
|
|
242
|
+
function zodToJsonSchema(schema) {
|
|
243
|
+
try {
|
|
244
|
+
const zodSchema = schema;
|
|
245
|
+
if (zodSchema._def) {
|
|
246
|
+
return convertZodDef(zodSchema);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
catch {
|
|
250
|
+
// Fallback to generic schema
|
|
251
|
+
}
|
|
252
|
+
return {
|
|
253
|
+
type: "object",
|
|
254
|
+
properties: {},
|
|
255
|
+
additionalProperties: true,
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Convert Zod definition to JSON Schema.
|
|
260
|
+
*/
|
|
261
|
+
function convertZodDef(schema) {
|
|
262
|
+
const zodSchema = schema;
|
|
263
|
+
if (!zodSchema._def) {
|
|
264
|
+
return { type: "object" };
|
|
265
|
+
}
|
|
266
|
+
const def = zodSchema._def;
|
|
267
|
+
const typeName = def.typeName;
|
|
268
|
+
switch (typeName) {
|
|
269
|
+
case "ZodObject": {
|
|
270
|
+
const shape = def.shape ? def.shape() : zodSchema.shape || {};
|
|
271
|
+
const properties = {};
|
|
272
|
+
const required = [];
|
|
273
|
+
for (const [key, value] of Object.entries(shape)) {
|
|
274
|
+
properties[key] = convertZodDef(value);
|
|
275
|
+
const valueDef = value._def;
|
|
276
|
+
if (valueDef?.typeName !== "ZodOptional") {
|
|
277
|
+
required.push(key);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
const result = {
|
|
281
|
+
type: "object",
|
|
282
|
+
properties: properties,
|
|
283
|
+
};
|
|
284
|
+
if (required.length > 0) {
|
|
285
|
+
result.required = required;
|
|
286
|
+
}
|
|
287
|
+
return result;
|
|
288
|
+
}
|
|
289
|
+
case "ZodString": {
|
|
290
|
+
const result = { type: "string" };
|
|
291
|
+
if (def.description)
|
|
292
|
+
result.description = def.description;
|
|
293
|
+
if (def.checks) {
|
|
294
|
+
for (const check of def.checks) {
|
|
295
|
+
if (check.kind === "min")
|
|
296
|
+
result.minLength = check.value;
|
|
297
|
+
if (check.kind === "max")
|
|
298
|
+
result.maxLength = check.value;
|
|
299
|
+
if (check.kind === "url")
|
|
300
|
+
result.format = "uri";
|
|
301
|
+
if (check.kind === "email")
|
|
302
|
+
result.format = "email";
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
return result;
|
|
306
|
+
}
|
|
307
|
+
case "ZodNumber": {
|
|
308
|
+
const result = { type: "number" };
|
|
309
|
+
if (def.description)
|
|
310
|
+
result.description = def.description;
|
|
311
|
+
if (def.checks) {
|
|
312
|
+
for (const check of def.checks) {
|
|
313
|
+
if (check.kind === "int")
|
|
314
|
+
result.type = "integer";
|
|
315
|
+
if (check.kind === "min")
|
|
316
|
+
result.minimum = check.value;
|
|
317
|
+
if (check.kind === "max")
|
|
318
|
+
result.maximum = check.value;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
return result;
|
|
322
|
+
}
|
|
323
|
+
case "ZodBoolean": {
|
|
324
|
+
const result = { type: "boolean" };
|
|
325
|
+
if (def.description)
|
|
326
|
+
result.description = def.description;
|
|
327
|
+
return result;
|
|
328
|
+
}
|
|
329
|
+
case "ZodArray": {
|
|
330
|
+
const result = {
|
|
331
|
+
type: "array",
|
|
332
|
+
items: def.innerType ? convertZodDef(def.innerType) : {},
|
|
333
|
+
};
|
|
334
|
+
if (def.description)
|
|
335
|
+
result.description = def.description;
|
|
336
|
+
return result;
|
|
337
|
+
}
|
|
338
|
+
case "ZodEnum": {
|
|
339
|
+
const result = {
|
|
340
|
+
type: "string",
|
|
341
|
+
enum: def.values || [],
|
|
342
|
+
};
|
|
343
|
+
if (def.description)
|
|
344
|
+
result.description = def.description;
|
|
345
|
+
return result;
|
|
346
|
+
}
|
|
347
|
+
case "ZodOptional": {
|
|
348
|
+
const inner = def.innerType ? convertZodDef(def.innerType) : {};
|
|
349
|
+
if (def.description)
|
|
350
|
+
inner.description = def.description;
|
|
351
|
+
return inner;
|
|
352
|
+
}
|
|
353
|
+
case "ZodUnion": {
|
|
354
|
+
const options = def.options || [];
|
|
355
|
+
return {
|
|
356
|
+
oneOf: options.map((opt) => convertZodDef(opt)),
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
default:
|
|
360
|
+
return { type: "object" };
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
//# sourceMappingURL=mcp-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../../src/server/mcp-server.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAqBH,0CA8IC;AAjKD,wEAAmE;AACnE,iEAAmG;AACnG,+BAAoC;AACpC,6BAA+B;AAG/B,gEAAkE;AAClE,gDAA+D;AAC/D,kDAAkE;AAClE,qEAIkC;AAElC;;;GAGG;AACH,SAAgB,eAAe;IAC3B,MAAM,MAAM,GAAG,IAAA,qBAAS,GAAE,CAAC;IAE3B,MAAM,MAAM,GAAG,IAAI,iBAAM,CACrB;QACI,IAAI,EAAE,0BAA0B;QAChC,OAAO,EAAE,OAAO;KACnB,EACD;QACI,YAAY,EAAE;YACV,KAAK,EAAE,EAAE;SACZ;KACJ,CACJ,CAAC;IAEF,4BAA4B;IAC5B,MAAM,CAAC,iBAAiB,CAAC,iCAAsB,EAAE,GAAG,EAAE;QAClD,MAAM,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,2BAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAE1D,MAAM,KAAK,GAAG,2BAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAChC,4CAA4C;YAC5C,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAErD,OAAO;gBACH,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,WAAW,EAAE,UAAU;aAC1B,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,2BAA2B;IAC3B,MAAM,CAAC,iBAAiB,CAAC,gCAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QACrE,MAAM,aAAa,GAAG,IAAA,SAAM,GAAE,CAAC;QAC/B,MAAM,WAAW,GAAG,IAAA,6BAAiB,EAAC,aAAa,CAAC,CAAC;QAErD,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;QACrC,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;QAEjD,WAAW,CAAC,IAAI,CAAC,oBAAoB,EAAE;YACnC,IAAI,EAAE,QAAQ;YACd,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC;SAClD,CAAC,CAAC;QAEH,8CAA8C;QAC9C,MAAM,WAAW,GAAuB,2BAA2B,CAAC,KAAK,CAAC,CAAC;QAE3E,IAAI,CAAC;YACD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,MAAM,IAAA,8BAAW,EAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;YAClF,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YAEvC,WAAW,CAAC,IAAI,CAAC,qBAAqB,EAAE;gBACpC,IAAI,EAAE,QAAQ;gBACd,SAAS,EAAE,OAAO;gBAClB,OAAO,EAAE,IAAI;aAChB,CAAC,CAAC;YAEH,OAAO;gBACH,OAAO,EAAE;oBACL;wBACI,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;qBACxC;iBACJ;aACJ,CAAC;QACN,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,KAAK,YAAY,uBAAY,EAAE,CAAC;gBAChC,WAAW,CAAC,IAAI,CAAC,qCAAqC,EAAE;oBACpD,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,OAAO,EAAE,KAAK,CAAC,OAAO;iBACzB,CAAC,CAAC;gBAEH,qCAAqC;gBACrC,MAAM,eAAe,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;gBAEzD,OAAO;oBACH,OAAO,EAAE;wBACL;4BACI,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gCACjB,KAAK,EAAE,KAAK,CAAC,IAAI;gCACjB,OAAO,EAAE,eAAe;6BAC3B,CAAC;yBACL;qBACJ;oBACD,OAAO,EAAE,IAAI;iBAChB,CAAC;YACN,CAAC;YAED,IAAI,KAAK,YAAY,cAAQ,EAAE,CAAC;gBAC5B,WAAW,CAAC,IAAI,CAAC,wCAAwC,EAAE;oBACvD,IAAI,EAAE,QAAQ;oBACd,MAAM,EAAE,KAAK,CAAC,MAAM;iBACvB,CAAC,CAAC;gBAEH,kDAAkD;gBAClD,MAAM,iBAAiB,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;gBAExD,OAAO;oBACH,OAAO,EAAE;wBACL;4BACI,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gCACjB,KAAK,EAAE,uBAAY,CAAC,gBAAgB;gCACpC,OAAO,EAAE,iBAAiB;6BAC7B,CAAC;yBACL;qBACJ;oBACD,OAAO,EAAE,IAAI;iBAChB,CAAC;YACN,CAAC;YAED,gBAAgB;YAChB,WAAW,CAAC,KAAK,CAAC,qCAAqC,EAAE;gBACrD,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;aACvB,CAAC,CAAC;YAEH,OAAO;gBACH,OAAO,EAAE;oBACL;wBACI,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACjB,KAAK,EAAE,uBAAY,CAAC,cAAc;4BAClC,OAAO,EAAE,iDAAiD;yBAC7D,CAAC;qBACL;iBACJ;gBACD,OAAO,EAAE,IAAI;aAChB,CAAC;QACN,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE;QACjC,KAAK,EAAE,2BAAQ,CAAC,MAAM;KACzB,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,SAAS,2BAA2B,CAAC,KAAc;IAC/C,MAAM,WAAW,GAAuB,EAAE,CAAC;IAE3C,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,KAAgC,CAAC;QAElD,iCAAiC;QACjC,IAAI,QAAQ,CAAC,aAAa,IAAI,OAAO,QAAQ,CAAC,aAAa,KAAK,QAAQ,EAAE,CAAC;YACvE,WAAW,CAAC,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC;QACrD,CAAC;QAED,6BAA6B;QAC7B,IAAI,QAAQ,CAAC,WAAW,CAAC,IAAI,OAAO,QAAQ,CAAC,WAAW,CAAC,KAAK,QAAQ,EAAE,CAAC;YACrE,WAAW,CAAC,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;QAC/C,CAAC;QAED,uCAAuC;QACvC,IAAI,QAAQ,CAAC,OAAO,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC3D,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAkC,CAAC;YAC5D,IAAI,OAAO,CAAC,aAAa,IAAI,OAAO,OAAO,CAAC,aAAa,KAAK,QAAQ,EAAE,CAAC;gBACrE,WAAW,CAAC,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC;YACpD,CAAC;YACD,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,OAAO,OAAO,CAAC,WAAW,CAAC,KAAK,QAAQ,EAAE,CAAC;gBACnE,WAAW,CAAC,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;YAC9C,CAAC;QACL,CAAC;IACL,CAAC;IAED,IAAI,CAAC,WAAW,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;QAClD,MAAM,SAAS,GACT,KAAiC,CAAC,WAAW,CAAwB;YACpE,KAAiC,CAAC,OAA+C,EAAE,CAClF,gBAAgB,CACI,CAAC;QAE7B,MAAM,YAAY,GACd,IAAA,8CAAqB,EAAC,SAAS,CAAC,IAAI,IAAA,qDAA4B,GAAE,CAAC;QAEvE,IAAI,YAAY,EAAE,CAAC;YACf,WAAW,CAAC,WAAW,GAAG,YAAY,CAAC,WAAW,CAAC;YACnD,WAAW,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;QAC7C,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,IAAI,CAAC,+CAA+C,EAAE;gBAC1D,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;aAC/B,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED,OAAO,WAAW,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,SAAS,yBAAyB,CAAC,KAAmB;IAClD,4CAA4C;IAC5C,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,uBAAY,CAAC,YAAY;YAC1B,OAAO,0EAA0E,CAAC;QAEtF,KAAK,uBAAY,CAAC,SAAS;YACvB,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;gBACxC,CAAC,CAAC,KAAK,CAAC,OAAO;gBACf,CAAC,CAAC,mDAAmD,CAAC;QAE9D,KAAK,uBAAY,CAAC,SAAS;YACvB,OAAO,KAAK,CAAC,OAAO,IAAI,uCAAuC,CAAC;QAEpE,KAAK,uBAAY,CAAC,gBAAgB;YAC9B,OAAO,KAAK,CAAC,OAAO,IAAI,6BAA6B,CAAC;QAE1D,KAAK,uBAAY,CAAC,cAAc;YAC5B,kDAAkD;YAClD,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBACpC,OAAO,0CAA0C,CAAC;YACtD,CAAC;YACD,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBACvC,OAAO,2DAA2D,CAAC;YACvE,CAAC;YACD,4DAA4D;YAC5D,OAAO,KAAK,CAAC,OAAO,CAAC;QAEzB,KAAK,uBAAY,CAAC,cAAc;YAC5B,OAAO,qDAAqD,CAAC;QAEjE;YACI,OAAO,KAAK,CAAC,OAAO,IAAI,oBAAoB,CAAC;IACrD,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAAC,KAAe;IAC3C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAE5B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,2BAA2B,CAAC;IACvC,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC,CAAC,CAAC,sBAAsB,IAAI,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;IAClF,CAAC;IAED,wCAAwC;IACxC,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACnD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,kBAAkB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAE7D,OAAO,SAAS,GAAG,CAAC;QAChB,CAAC,CAAC,GAAG,OAAO,SAAS,SAAS,cAAc,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG;QACvE,CAAC,CAAC,OAAO,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,MAAe;IACpC,IAAI,CAAC;QACD,MAAM,SAAS,GAAG,MAA0C,CAAC;QAC7D,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,aAAa,CAAC,SAAS,CAAC,CAAC;QACpC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACL,6BAA6B;IACjC,CAAC;IAED,OAAO;QACH,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,EAAE;QACd,oBAAoB,EAAE,IAAI;KAC7B,CAAC;AACN,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,MAAe;IAClC,MAAM,SAAS,GAAG,MAYjB,CAAC;IAEF,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAClB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC9B,CAAC;IAED,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC;IAC3B,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;IAE9B,QAAQ,QAAQ,EAAE,CAAC;QACf,KAAK,WAAW,CAAC,CAAC,CAAC;YACf,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC;YAC9D,MAAM,UAAU,GAA2B,EAAE,CAAC;YAC9C,MAAM,QAAQ,GAAa,EAAE,CAAC;YAE9B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC/C,UAAU,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;gBACvC,MAAM,QAAQ,GAAI,KAA0C,CAAC,IAAI,CAAC;gBAClE,IAAI,QAAQ,EAAE,QAAQ,KAAK,aAAa,EAAE,CAAC;oBACvC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACvB,CAAC;YACL,CAAC;YAED,MAAM,MAAM,GAA4B;gBACpC,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,UAAU;aACzB,CAAC;YACF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAC/B,CAAC;YACD,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,KAAK,WAAW,CAAC,CAAC,CAAC;YACf,MAAM,MAAM,GAA4B,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;YAC3D,IAAI,GAAG,CAAC,WAAW;gBAAE,MAAM,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC;YAC1D,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACb,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;oBAC7B,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK;wBAAE,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;oBACzD,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK;wBAAE,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;oBACzD,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK;wBAAE,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;oBAChD,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;wBAAE,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC;gBACxD,CAAC;YACL,CAAC;YACD,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,KAAK,WAAW,CAAC,CAAC,CAAC;YACf,MAAM,MAAM,GAA4B,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;YAC3D,IAAI,GAAG,CAAC,WAAW;gBAAE,MAAM,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC;YAC1D,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACb,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;oBAC7B,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK;wBAAE,MAAM,CAAC,IAAI,GAAG,SAAS,CAAC;oBAClD,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK;wBAAE,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC;oBACvD,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK;wBAAE,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC;gBAC3D,CAAC;YACL,CAAC;YACD,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,KAAK,YAAY,CAAC,CAAC,CAAC;YAChB,MAAM,MAAM,GAA4B,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;YAC5D,IAAI,GAAG,CAAC,WAAW;gBAAE,MAAM,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC;YAC1D,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,KAAK,UAAU,CAAC,CAAC,CAAC;YACd,MAAM,MAAM,GAA4B;gBACpC,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;aAC3D,CAAC;YACF,IAAI,GAAG,CAAC,WAAW;gBAAE,MAAM,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC;YAC1D,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,KAAK,SAAS,CAAC,CAAC,CAAC;YACb,MAAM,MAAM,GAA4B;gBACpC,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE;aACzB,CAAC;YACF,IAAI,GAAG,CAAC,WAAW;gBAAE,MAAM,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC;YAC1D,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,KAAK,aAAa,CAAC,CAAC,CAAC;YACjB,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,IAAI,GAAG,CAAC,WAAW;gBAAG,KAAiC,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC;YACtF,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,KAAK,UAAU,CAAC,CAAC,CAAC;YACd,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;YAClC,OAAO;gBACH,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;aAClD,CAAC;QACN,CAAC;QAED;YACI,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAClC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface SessionCredentials {
|
|
2
|
+
bearerToken?: string;
|
|
3
|
+
apiKey?: string;
|
|
4
|
+
}
|
|
5
|
+
export declare function setSessionCredentials(sessionId: string, credentials: SessionCredentials): void;
|
|
6
|
+
export declare function getSessionCredentials(sessionId: string | undefined): SessionCredentials | undefined;
|
|
7
|
+
export declare function getCurrentSessionCredentials(): SessionCredentials | undefined;
|
|
8
|
+
//# sourceMappingURL=session-credentials.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-credentials.d.ts","sourceRoot":"","sources":["../../../src/server/session-credentials.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAKD,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,kBAAkB,GAAG,IAAI,CAG9F;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,kBAAkB,GAAG,SAAS,CAKnG;AAED,wBAAgB,4BAA4B,IAAI,kBAAkB,GAAG,SAAS,CAK7E"}
|