import type { NextConfig } from "next"; import path from "path"; import { fileURLToPath } from "url"; // This app lives in vibn-frontend; a lockfile under $HOME can make Turbopack pick the wrong root // and hydrate with a mismatched client bundle (e.g. different JustineNav markup). const turbopackRoot = path.dirname(fileURLToPath(import.meta.url)); // Google OAuth on localhost: NextAuth must build the same callback URL Google expects. // If NEXTAUTH_URL is unset in dev, default it (set explicitly if you use 127.0.0.1 or another port). if (process.env.NODE_ENV === "development" && !process.env.NEXTAUTH_URL?.trim()) { process.env.NEXTAUTH_URL = "http://localhost:3000"; } const nextConfig: NextConfig = { turbopack: { root: turbopackRoot, }, output: "standalone", // ssh2 ships native .node binaries; turbopack can't bundle them // ("non-ecmascript placeable asset"). Externalize so they're loaded // at runtime via Node's require, the same way @prisma/client works. serverExternalPackages: ["@prisma/client", "prisma", "ssh2", "cpu-features"], typescript: { ignoreBuildErrors: true, }, }; export default nextConfig;