Fix server dying when an error occurs

Resolves #34.
This commit is contained in:
Justin Spahr-Summers
2024-11-12 14:01:39 +00:00
parent ab9c130610
commit bf2ddc9b7b

View File

@@ -51,44 +51,59 @@ const createTransport = async (query: express.Request["query"]) => {
}; };
app.get("/sse", async (req, res) => { app.get("/sse", async (req, res) => {
console.log("New SSE connection"); try {
console.log("New SSE connection");
const backingServerTransport = await createTransport(req.query); const backingServerTransport = await createTransport(req.query);
console.log("Connected MCP client to backing server transport"); console.log("Connected MCP client to backing server transport");
const webAppTransport = new SSEServerTransport("/message", res); const webAppTransport = new SSEServerTransport("/message", res);
console.log("Created web app transport"); console.log("Created web app transport");
webAppTransports.push(webAppTransport); webAppTransports.push(webAppTransport);
console.log("Created web app transport"); console.log("Created web app transport");
await webAppTransport.start(); await webAppTransport.start();
mcpProxy({ mcpProxy({
transportToClient: webAppTransport, transportToClient: webAppTransport,
transportToServer: backingServerTransport, transportToServer: backingServerTransport,
onerror: (error) => { onerror: (error) => {
console.error(error); console.error(error);
}, },
}); });
console.log("Set up MCP proxy"); console.log("Set up MCP proxy");
} catch (error) {
console.error("Error in /sse route:", error);
res.status(500).json(error);
}
}); });
app.post("/message", async (req, res) => { app.post("/message", async (req, res) => {
const sessionId = req.query.sessionId; try {
console.log(`Received message for sessionId ${sessionId}`); const sessionId = req.query.sessionId;
console.log(`Received message for sessionId ${sessionId}`);
const transport = webAppTransports.find((t) => t.sessionId === sessionId); const transport = webAppTransports.find((t) => t.sessionId === sessionId);
if (!transport) { if (!transport) {
res.status(404).send("Session not found"); res.status(404).end("Session not found");
return; return;
}
await transport.handlePostMessage(req, res);
} catch (error) {
console.error("Error in /message route:", error);
res.status(500).json(error);
} }
await transport.handlePostMessage(req, res);
}); });
app.get("/default-environment", (req, res) => { app.get("/default-environment", (req, res) => {
res.json(getDefaultEnvironment()); try {
res.json(getDefaultEnvironment());
} catch (error) {
console.error("Error in /default-environment route:", error);
res.status(500).json(error);
}
}); });
const PORT = process.env.PORT || 3000; const PORT = process.env.PORT || 3000;