Skip to content

Commit f48b5d6

Browse files
authored
Fix status code for some errors (#11)
Signed-off-by: Alexis Rico <sferadev@gmail.com>
1 parent 9de5497 commit f48b5d6

File tree

2 files changed

+27
-6
lines changed

2 files changed

+27
-6
lines changed

.changeset/famous-foxes-kneel.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@vercel/mcp-adapter": patch
3+
---
4+
5+
Fix HTTP status code for some errors

src/next/server-response-adapter.ts

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,15 @@ export function createServerResponseAdapter(
2828
let controller: ReadableStreamController<Uint8Array> | undefined;
2929
let shouldClose = false;
3030
let wroteHead = false;
31+
let statusCode = 200;
32+
let headers: Record<string, string> | undefined;
3133

32-
const writeHead = (
33-
statusCode: number,
34-
headers?: Record<string, string>
35-
) => {
36-
if (typeof headers === 'string') {
34+
const writeHead = (code: number, headersArg?: Record<string, string>) => {
35+
if (typeof headersArg === 'string') {
3736
throw new Error('Status message of writeHead not supported');
3837
}
38+
statusCode = code;
39+
headers = headersArg;
3940
wroteHead = true;
4041
writeHeadResolver({
4142
statusCode,
@@ -57,7 +58,7 @@ export function createServerResponseAdapter(
5758
throw new Error('Buffer not supported');
5859
}
5960
if (!wroteHead) {
60-
writeHead(200);
61+
writeHead(statusCode, headers);
6162
}
6263
if (!controller) {
6364
bufferedData.push(new TextEncoder().encode(chunk as string));
@@ -92,6 +93,21 @@ export function createServerResponseAdapter(
9293
eventEmitter.on(event, listener);
9394
return fakeServerResponse;
9495
},
96+
get statusCode() {
97+
return statusCode;
98+
},
99+
set statusCode(code: number) {
100+
statusCode = code;
101+
102+
// If the status code is set after writeHead, we need to call
103+
// writeHead again to update the status code.
104+
if (wroteHead) {
105+
writeHeadResolver({
106+
statusCode,
107+
headers,
108+
});
109+
}
110+
},
95111
};
96112

97113
signal.addEventListener('abort', () => {

0 commit comments

Comments
 (0)