Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/brown-apes-kick.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@opennextjs/aws": patch
---

fix: Validate statusCode is number and not NaN in OpenNextNodeResponse constructor
6 changes: 6 additions & 0 deletions examples/app-router/middleware.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,12 @@ export function middleware(request: NextRequest) {
const u = new URL("https://opennext.js.org/share.png");
return NextResponse.rewrite(u);
}
if (path === "/rewrite-status-code") {
const u = new URL("/rewrite-destination", `${protocol}://${host}`);
return NextResponse.rewrite(u, {
status: 403,
});
}
if (path === "/cookies") {
const res = NextResponse.next();
res.cookies.set("foo", "bar");
Expand Down
3 changes: 2 additions & 1 deletion packages/open-next/src/http/openNextResponse.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,8 @@ export class OpenNextNodeResponse extends Transform implements ServerResponse {
statusCode?: number,
) {
super();
if (statusCode !== undefined) {
// We only set the status code if it is not a NaN and it is a number
if (Number.isInteger(statusCode)) {
this.statusCode = statusCode;
}
}
Expand Down
9 changes: 9 additions & 0 deletions packages/tests-e2e/tests/appRouter/middleware.rewrite.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,12 @@ test("Middleware Rewrite External Image", async ({ page }) => {
expect(validateMd5(bodyBuffer, OPENNEXT_PNG_MD5)).toBe(true);
});
});

test("Middleware Rewrite Status Code", async ({ page }) => {
await page.goto("/rewrite-status-code");
const el = page.getByText("Rewritten Destination", { exact: true });
await expect(el).toBeVisible();
page.on("response", async (response) => {
expect(response.status()).toBe(403);
});
});
Loading