From 729c40c66ea2cd62c3e8c5aaba1e1ba7dcf4e2e6 Mon Sep 17 00:00:00 2001 From: princepal9120 <107296821+princepal9120@users.noreply.github.com> Date: Fri, 1 May 2026 20:37:00 +0000 Subject: [PATCH] fix(web): serve install script endpoint --- apps/web/app/install.sh/route.test.ts | 14 ++++++++++++++ apps/web/app/install.sh/route.ts | 18 ++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 apps/web/app/install.sh/route.test.ts create mode 100644 apps/web/app/install.sh/route.ts diff --git a/apps/web/app/install.sh/route.test.ts b/apps/web/app/install.sh/route.test.ts new file mode 100644 index 0000000000..ec70c6a3d0 --- /dev/null +++ b/apps/web/app/install.sh/route.test.ts @@ -0,0 +1,14 @@ +import { describe, expect, it } from "vitest"; +import { GET } from "./route"; + +describe("GET /install.sh", () => { + it("serves the Linux installer script directly", async () => { + const response = await GET(); + const body = await response.text(); + + expect(response.status).toBe(200); + expect(response.headers.get("content-type")).toContain("text/x-shellscript"); + expect(body).toContain("#!/usr/bin/env bash"); + expect(body).toContain("Usage: install.sh"); + }); +}); diff --git a/apps/web/app/install.sh/route.ts b/apps/web/app/install.sh/route.ts new file mode 100644 index 0000000000..57c85e5f0e --- /dev/null +++ b/apps/web/app/install.sh/route.ts @@ -0,0 +1,18 @@ +import { readFile } from "node:fs/promises"; + +export const runtime = "nodejs"; + +export async function GET() { + const script = await readFile( + new URL("../../../../scripts/install.sh", import.meta.url), + "utf8", + ); + + return new Response(script, { + headers: { + "Cache-Control": "public, max-age=300", + "Content-Disposition": 'inline; filename="install.sh"', + "Content-Type": "text/x-shellscript; charset=utf-8", + }, + }); +}