62 lines
2.1 KiB
TypeScript
62 lines
2.1 KiB
TypeScript
import type { NextConfig } from "next";
|
|
|
|
// Read at runtime, not baked in. The rewrites below run in the Next server
|
|
// process, never in the browser, so this never needed the NEXT_PUBLIC_ prefix
|
|
// that pins a value into the image at build time. NEXT_PUBLIC_API_URL is still
|
|
// honoured so an existing deployment passing it keeps working.
|
|
const apiUrl = process.env.API_URL ?? process.env.NEXT_PUBLIC_API_URL ?? "http://localhost:8080";
|
|
|
|
const nextConfig: NextConfig = {
|
|
output: "standalone",
|
|
async redirects() {
|
|
return [
|
|
{
|
|
// The API keys page briefly lived at /api-keys, which every
|
|
// raw-prefix proxy in front of this app captures with its /api
|
|
// rule — nginx's `location /api` matches /api-keys, so the
|
|
// request reached the Go server and 404'd. The page is at
|
|
// /tokens now precisely because that cannot happen to it.
|
|
source: "/api-keys",
|
|
destination: "/tokens",
|
|
permanent: true,
|
|
},
|
|
];
|
|
},
|
|
async rewrites() {
|
|
return [
|
|
{
|
|
source: "/api/:path*",
|
|
destination: `${apiUrl}/api/:path*`,
|
|
},
|
|
{
|
|
source: "/auth/:path*",
|
|
destination: `${apiUrl}/auth/:path*`,
|
|
},
|
|
{
|
|
source: "/install",
|
|
destination: `${apiUrl}/install`,
|
|
},
|
|
{
|
|
source: "/install.ps1",
|
|
destination: `${apiUrl}/install.ps1`,
|
|
},
|
|
{
|
|
source: "/update",
|
|
destination: `${apiUrl}/update`,
|
|
},
|
|
{
|
|
source: "/update.ps1",
|
|
destination: `${apiUrl}/update.ps1`,
|
|
},
|
|
{
|
|
// The public status page refreshes itself in the browser, so
|
|
// the public prefix has to be proxied the same way /api is.
|
|
source: "/public/:path*",
|
|
destination: `${apiUrl}/public/:path*`,
|
|
},
|
|
];
|
|
},
|
|
};
|
|
|
|
export default nextConfig;
|