Skip to content

Commit bb6ab6b

Browse files
committed
fix: tRPC on alpha
1 parent 2f94ef8 commit bb6ab6b

File tree

4 files changed

+51
-39
lines changed

4 files changed

+51
-39
lines changed
Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,21 @@
1-
import { createAPIFileRoute } from "@tanstack/react-start/api";
2-
import { getEvent } from "vinxi/http";
1+
import { transports } from '@/utils/demo.sse'
32

4-
import { transports } from "@/utils/demo.sse";
5-
6-
export const APIRoute = createAPIFileRoute("/api/messages")({
3+
export const ServerRoute = createServerFileRoute('/api/messages').methods({
74
// @ts-ignore
8-
POST: async ({ request, params }) => {
9-
const body = await request.json();
10-
const url = new URL(request.url);
11-
const sessionId = url.searchParams.get("sessionId") as string;
12-
const transport = transports[sessionId];
5+
POST: async ({ request }) => {
6+
const body = await request.json()
7+
const url = new URL(request.url)
8+
const sessionId = url.searchParams.get('sessionId') as string
9+
const transport = transports[sessionId]
1310
if (transport) {
1411
try {
15-
getEvent().node.res.statusCode = 200;
16-
await transport.handleMessage(body);
12+
await transport.handleMessage(body)
13+
return new Response(null, { status: 200 })
1714
} catch (error) {
18-
getEvent().node.res.send("Error handling message");
15+
return new Response(null, { status: 500 })
1916
}
2017
} else {
21-
getEvent().node.res.send("No transport found for sessionId");
18+
return new Response(null, { status: 404 })
2219
}
2320
},
24-
});
21+
})
Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,40 @@
1-
import { createAPIFileRoute } from '@tanstack/react-start/api'
2-
import { getEvent } from 'vinxi/http'
31
import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js'
42

53
import { transports, server } from '@/utils/demo.sse'
64

7-
export const APIRoute = createAPIFileRoute('/api/sse')({
5+
export const ServerRoute = createServerFileRoute('/api/sse').methods({
86
// @ts-ignore
97
GET: async ({}) => {
10-
const transport = new SSEServerTransport(
11-
'/api/messages',
12-
getEvent().node.res,
13-
)
8+
let body = ''
9+
let headers: Record<string, string> = {}
10+
let statusCode = 200
11+
const resp = {
12+
on: (event: string, callback: () => void) => {
13+
if (event === 'close') {
14+
callback()
15+
}
16+
},
17+
writeHead: (statusCode: number, headers: Record<string, string>) => {
18+
headers = headers
19+
statusCode = statusCode
20+
},
21+
write: (data: string) => {
22+
body += data + '\n'
23+
},
24+
}
25+
const transport = new SSEServerTransport('/api/messages', resp as any)
1426
transports[transport.sessionId] = transport
1527
transport.onerror = (error) => {
1628
console.error(error)
1729
}
18-
getEvent().node.res.on('close', () => {
30+
resp.on('close', () => {
1931
delete transports[transport.sessionId]
2032
})
2133
await server.connect(transport)
34+
const response = new Response(body, {
35+
status: statusCode,
36+
headers: headers,
37+
})
38+
return response
2239
},
2340
})
Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,29 @@
1-
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2-
import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js";
3-
import { getWebRequest } from "vinxi/http";
1+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'
2+
import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js'
43

5-
import guitars from "@/data/example-guitars";
4+
import guitars from '@/data/example-guitars'
65

76
export const server = new McpServer({
8-
name: "guitar-server",
9-
version: "1.0.0",
10-
});
11-
export const transports: { [sessionId: string]: SSEServerTransport } = {};
7+
name: 'guitar-server',
8+
version: '1.0.0',
9+
})
10+
export const transports: { [sessionId: string]: SSEServerTransport } = {}
1211

13-
server.tool("getGuitars", {}, async ({}) => {
14-
const port = new URL(getWebRequest().url).port;
12+
server.tool('getGuitars', {}, async ({}) => {
1513
return {
1614
content: [
1715
{
18-
type: "text",
16+
type: 'text',
1917
text: JSON.stringify(
2018
guitars.map((guitar) => ({
2119
id: guitar.id,
2220
name: guitar.name,
2321
description: guitar.description,
2422
price: guitar.price,
25-
image: `http://localhost:${port}${guitar.image}`,
26-
}))
23+
image: `http://localhost:3000${guitar.image}`,
24+
})),
2725
),
2826
},
2927
],
30-
};
31-
});
28+
}
29+
})

packages/cta-engine/src/create-app.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ Use the following commands to start your app:
233233
getPackageManagerScriptCommand(options.packageManager, ['dev']),
234234
)}
235235
236-
Please read the README.md for information on testing, styling, adding routes, etc.${errorStatement}`,
236+
Please check the README.md for information on testing, styling, adding routes, etc.${errorStatement}`,
237237
)
238238
}
239239

0 commit comments

Comments
 (0)