50 lines
1.4 KiB
TypeScript
50 lines
1.4 KiB
TypeScript
// app/api/beta-signup/route.ts
|
|
import { NextResponse } from "next/server";
|
|
|
|
const API_BASE_URL =
|
|
process.env.NEXT_PUBLIC_API_BASE_URL ?? "";
|
|
|
|
const TOS_VERSION = "2025-12-27";
|
|
|
|
type BetaSignupBody = {
|
|
email?: string;
|
|
useCase?: string;
|
|
acceptedTos?: boolean;
|
|
tosVersion?: string;
|
|
};
|
|
|
|
export async function POST(req: Request) {
|
|
try {
|
|
const body = (await req.json()) as BetaSignupBody;
|
|
|
|
const email = (body.email ?? "").trim().toLowerCase();
|
|
const useCase = (body.useCase ?? "").trim();
|
|
const acceptedTos = Boolean(body.acceptedTos);
|
|
const tosVersion = (body.tosVersion ?? TOS_VERSION).trim() || TOS_VERSION;
|
|
|
|
// Keep "no enumeration": always return ok:true, but silently refuse bad input
|
|
if (!email || !acceptedTos) {
|
|
return NextResponse.json({ ok: true });
|
|
}
|
|
|
|
// Forward only known fields
|
|
const payload = { email, useCase, acceptedTos, tosVersion };
|
|
|
|
const res = await fetch(`${API_BASE_URL}/api/auth/beta/signup`, {
|
|
method: "POST",
|
|
headers: { "Content-Type": "application/json" },
|
|
body: JSON.stringify(payload),
|
|
cache: "no-store",
|
|
});
|
|
|
|
if (!res.ok) {
|
|
const text = await res.text().catch(() => "");
|
|
console.error("beta-signup proxy failed:", res.status, text);
|
|
}
|
|
|
|
return NextResponse.json({ ok: true });
|
|
} catch (e) {
|
|
console.error("beta-signup proxy error:", e);
|
|
return NextResponse.json({ ok: true });
|
|
}
|
|
} |