* feat: add allowedDevOrigins to Next.js config for non-localhost dev access Wire CORS_ALLOWED_ORIGINS env var into Next.js allowedDevOrigins config so that cross-origin HMR/webpack requests from Tailscale or other non-localhost IPs are not blocked during development. Fixes #317 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: keep port in allowedDevOrigins --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
50 lines
1.3 KiB
TypeScript
50 lines
1.3 KiB
TypeScript
import type { NextConfig } from "next";
|
|
import { config } from "dotenv";
|
|
import { resolve } from "path";
|
|
|
|
// Load root .env so REMOTE_API_URL is available to next.config.ts
|
|
config({ path: resolve(__dirname, "../../.env") });
|
|
|
|
const remoteApiUrl = process.env.REMOTE_API_URL || "http://localhost:8080";
|
|
|
|
// Parse hostnames from CORS_ALLOWED_ORIGINS so that Next.js dev server
|
|
// allows cross-origin HMR / webpack requests (e.g. from Tailscale IPs).
|
|
const allowedDevOrigins = process.env.CORS_ALLOWED_ORIGINS
|
|
? process.env.CORS_ALLOWED_ORIGINS.split(",")
|
|
.map((origin) => {
|
|
try {
|
|
return new URL(origin.trim()).host;
|
|
} catch {
|
|
return origin.trim();
|
|
}
|
|
})
|
|
.filter(Boolean)
|
|
: undefined;
|
|
|
|
const nextConfig: NextConfig = {
|
|
...(allowedDevOrigins && allowedDevOrigins.length > 0
|
|
? { allowedDevOrigins }
|
|
: {}),
|
|
images: {
|
|
formats: ["image/avif", "image/webp"],
|
|
qualities: [75, 80, 85],
|
|
},
|
|
async rewrites() {
|
|
return [
|
|
{
|
|
source: "/api/:path*",
|
|
destination: `${remoteApiUrl}/api/:path*`,
|
|
},
|
|
{
|
|
source: "/ws",
|
|
destination: `${remoteApiUrl}/ws`,
|
|
},
|
|
{
|
|
source: "/auth/:path*",
|
|
destination: `${remoteApiUrl}/auth/:path*`,
|
|
},
|
|
];
|
|
},
|
|
};
|
|
|
|
export default nextConfig;
|