52 lines · 2.2 KB · TypeScript
RawDownload
import { expect, test } from "@effect/vitest"; import { invalidOriginHelp, originOf, rewriteInvalidOrigin } from "./invalid-origin-help"; const req = (headers: Record<string, string>) =>  new Request("https://svc.internal/api/auth/sign-up/email", { method: "POST", headers }); test("originOf prefers Origin, then x-forwarded-host, then host", () => {  expect(originOf(req({ origin: "https://app.example.com" }))).toBe("https://app.example.com");  expect(    originOf(req({ "x-forwarded-host": "app.example.com", "x-forwarded-proto": "https" })),  ).toBe("https://app.example.com");  expect(originOf(req({ host: "app.example.com" }))).toBe("https://app.example.com");}); test("the help message names the URL to set", () => {  const msg = invalidOriginHelp("https://app.example.com", "http://localhost:4788");  expect(msg).toContain("EXECUTOR_WEB_BASE_URL");  expect(msg).toContain("EXECUTOR_TRUSTED_ORIGINS");  expect(msg).toContain("https://app.example.com");  expect(msg).toContain("http://localhost:4788");}); test("rewriteInvalidOrigin replaces a 403 'Invalid origin' with the setup message, keeping the code", async () => {  const original = new Response(    JSON.stringify({ code: "INVALID_ORIGIN", message: "Invalid origin" }),    {      status: 403,      headers: { "content-type": "application/json" },    },  );  const rewritten = await rewriteInvalidOrigin(    req({ origin: "https://app.example.com" }),    original,    "http://localhost:4788",  );  expect(rewritten).not.toBeNull();  expect(rewritten!.status).toBe(403);  const body = (await rewritten!.json()) as { code: string; message: string };  expect(body.code).toBe("INVALID_ORIGIN");  expect(body.message).toContain("EXECUTOR_WEB_BASE_URL");  expect(body.message).toContain("EXECUTOR_TRUSTED_ORIGINS");  expect(body.message).toContain("https://app.example.com");}); test("rewriteInvalidOrigin passes other responses through untouched", async () => {  expect(await rewriteInvalidOrigin(req({}), new Response("ok", { status: 200 }), "x")).toBeNull();  const otherErr = new Response(JSON.stringify({ message: "An invite code is required" }), {    status: 403,  });  expect(await rewriteInvalidOrigin(req({}), otherErr, "x")).toBeNull();});