import "server-only";
import { headers } from "next/headers";
// Host and X-Forwarded-* headers are client-controlled, so the canonical
// address comes from configuration. Without PUBLIC_URL (local development),
// URLs fall back to the request's Host header over plain HTTP.
const PUBLIC_URL = process.env.PUBLIC_URL ? new URL(process.env.PUBLIC_URL) : null;
/** Session cookies are marked Secure when the instance is served over HTTPS (or SECURE_COOKIES=1). */
export const SECURE_COOKIES = process.env.SECURE_COOKIES === "1" || PUBLIC_URL?.protocol === "https:";
/** PUBLIC_URL's origin, or null. Links in emails use it, never the Host header (lib/mail.ts). */
export const PUBLIC_ORIGIN = PUBLIC_URL?.origin ?? null;
/** The address users reach this server at, e.g. https://vectrum.cc. */
export async function serverOrigin() {
if (PUBLIC_URL) return PUBLIC_URL.origin;
return `http://${(await headers()).get("host") ?? "localhost:3000"}`;
}
/** Host (and port) part of serverOrigin(), e.g. vectrum.cc. */
export async function serverHost() {
return new URL(await serverOrigin()).host;
}