import { readFileSync } from "node:fs"; import { describe, expect, it } from "@effect/vitest"; import { buildDocsUpstream, buildPosthogUpstream, isDocsPath, isPosthogPath, passthroughResponse, POSTHOG_PROXY_PATH, } from "./passthrough"; describe("passthrough matching", () => { it("claims /docs and everything under it, but not /api/docs", () => { expect(isDocsPath("/docs")).toBe(true); expect(isDocsPath("/docs/concepts/policies")).toBe(true); // The app-owned Swagger route must keep reaching the Effect app. expect(isDocsPath("/api/docs")).toBe(false); expect(isDocsPath("/docsearch")).toBe(false); }); it("claims the PostHog proxy path and its subtree only", () => { expect(isPosthogPath(POSTHOG_PROXY_PATH)).toBe(true); expect(isPosthogPath(`${POSTHOG_PROXY_PATH}/i/v0/e/`)).toBe(true); expect(isPosthogPath(`${POSTHOG_PROXY_PATH}extra`)).toBe(false); expect(isPosthogPath("/api/connections")).toBe(false); }); it("returns null for app paths so they fall through to normal dispatch", () => { expect(passthroughResponse(new Request("https://executor.sh/"), "/")).toBeNull(); expect( passthroughResponse(new Request("https://executor.sh/api/connections"), "/api/connections"), ).toBeNull(); expect(passthroughResponse(new Request("https://executor.sh/mcp"), "/mcp")).toBeNull(); }); }); describe("upstream construction", () => { it("forwards the docs path unchanged and strips the session cookie", () => { const upstream = buildDocsUpstream( new Request("https://executor.sh/docs/concepts/policies?x=1", { headers: { cookie: "wos-session=secret" }, }), ); const url = new URL(upstream.url); expect(url.hostname).toBe("executor.mintlify.dev"); expect(url.pathname).toBe("/docs/concepts/policies"); expect(url.search).toBe("?x=1"); expect(upstream.headers.get("X-Forwarded-Host")).toBe("executor.sh"); expect(upstream.headers.get("cookie")).toBeNull(); }); it("strips the proxy prefix for PostHog and splits ingest from assets", () => { const ingest = buildPosthogUpstream( new Request(`https://executor.sh${POSTHOG_PROXY_PATH}/i/v0/e/`), `${POSTHOG_PROXY_PATH}/i/v0/e/`, ); expect(new URL(ingest.url).hostname).toBe("us.i.posthog.com"); expect(new URL(ingest.url).pathname).toBe("/i/v0/e/"); const assets = buildPosthogUpstream( new Request(`https://executor.sh${POSTHOG_PROXY_PATH}/static/array.js`), `${POSTHOG_PROXY_PATH}/static/array.js`, ); expect(new URL(assets.url).hostname).toBe("us-assets.i.posthog.com"); expect(new URL(assets.url).pathname).toBe("/static/array.js"); }); }); describe("Start-graph independence", () => { // The entire point of this module is that server.ts can answer a proxy // request WITHOUT importing TanStack Start. An import of the app or of // `@tanstack/react-start` here silently reintroduces the ~3.1s cold-isolate // `loadEntries` cost this module exists to avoid, and nothing else would // catch it — the behavior stays correct, only slow. it("imports neither TanStack Start nor an app module", () => { const source = readFileSync(new URL("./passthrough.ts", import.meta.url), "utf8"); const imports = [...source.matchAll(/^\s*import[^"']*["']([^"']+)["']/gm)].map((m) => m[1]); expect(imports.length).toBeGreaterThan(0); for (const specifier of imports) { expect(specifier).not.toMatch(/@tanstack/); expect(specifier).not.toMatch(/^\.\.\//); } }); });