From 13575376b1d02e085087d4aba174aa28f0226271 Mon Sep 17 00:00:00 2001 From: Michael Zetterberg Date: Wed, 22 May 2024 11:49:46 +0200 Subject: [PATCH] chore(debug): envs in edge functions --- .env | 3 +- app/api/web/envtest-dynamic-edge/route.ts | 38 +++++++++++++++++ .../web/envtest-dynamic-load-edge/route.ts | 40 ++++++++++++++++++ .../envtest-dynamic-load-file-edge/route.ts | 41 +++++++++++++++++++ .../web/envtest-dynamic-load-file/route.ts | 6 +-- app/api/web/envtest-dynamic-load/route.ts | 6 +-- .../envtest-dynamic-override-edge/route.ts | 41 +++++++++++++++++++ app/api/web/envtest-dynamic-override/route.ts | 6 +-- app/api/web/envtest-dynamic/route.ts | 6 +-- app/api/web/envtest-static-load-file/route.ts | 6 +-- app/api/web/envtest-static-load/route.ts | 6 +-- app/api/web/envtest-static-override/route.ts | 6 +-- app/api/web/envtest-static/route.ts | 6 +-- env/server.ts | 4 +- update-dotenv.mjs | 21 ++++++---- 15 files changed, 202 insertions(+), 34 deletions(-) create mode 100644 app/api/web/envtest-dynamic-edge/route.ts create mode 100644 app/api/web/envtest-dynamic-load-edge/route.ts create mode 100644 app/api/web/envtest-dynamic-load-file-edge/route.ts create mode 100644 app/api/web/envtest-dynamic-override-edge/route.ts diff --git a/.env b/.env index 881737c28..d116a87a8 100644 --- a/.env +++ b/.env @@ -1,3 +1,4 @@ # See update-dotenv.mjs -PUBLIC_URL="REPLACED-ON-NETLIFY-BUILD" +AUTH_URL="REPLACE-ON-NETLIFY-BUILD" NEXTAUTH_URL="REPLACE-ON-NETLIFY-BUILD" +PUBLIC_URL="REPLACED-ON-NETLIFY-BUILD" diff --git a/app/api/web/envtest-dynamic-edge/route.ts b/app/api/web/envtest-dynamic-edge/route.ts new file mode 100644 index 000000000..d2a12f7bf --- /dev/null +++ b/app/api/web/envtest-dynamic-edge/route.ts @@ -0,0 +1,38 @@ +import { NextResponse } from "next/server" + +import { env } from "@/env/server" + +import type { NextRequest } from "next/server" + +export async function GET(request: NextRequest) { + const e = process.env + console.log({ process_env: process.env }) + + const urlVar = "PUBLIC_URL" + const nextAuthUrlVar = "NEXTAUTH_URL" + const nextAuthUrlVar2 = "AUTH_URL" + const envTestVar = "ENVTEST" + + const values = { + env_url: env.PUBLIC_URL, + static_url: process.env.PUBLIC_URL, + dynamic_url: e[urlVar], + env_envtest: env.ENVTEST, + static_envtest: process.env.ENVTEST, + dynamic_envtest: e[envTestVar], + env_nextauth: env.NEXTAUTH_URL, + static_nextauth: process.env.NEXTAUTH_URL, + dynamic_nextauth: e[nextAuthUrlVar], + env_nextauth2: env.AUTH_URL, + static_nextauth2: process.env.AUTH_URL, + dynamic_nextauth2: e[nextAuthUrlVar2], + } + + console.log(values) + + return NextResponse.json(values) +} + +export const dynamic = "force-dynamic" + +export const runtime = "edge" diff --git a/app/api/web/envtest-dynamic-load-edge/route.ts b/app/api/web/envtest-dynamic-load-edge/route.ts new file mode 100644 index 000000000..8085a6a53 --- /dev/null +++ b/app/api/web/envtest-dynamic-load-edge/route.ts @@ -0,0 +1,40 @@ +import "dotenv/config" + +import { NextResponse } from "next/server" + +import { env } from "@/env/server" + +import type { NextRequest } from "next/server" + +export async function GET(request: NextRequest) { + const e = process.env + console.log({ process_env: process.env }) + + const urlVar = "PUBLC_URL" + const nextAuthUrlVar = "NEXTAUTH_URL" + const nextAuthUrlVar2 = "AUTH_URL" + const envTestVar = "ENVTEST" + + const values = { + env_url: env.PUBLIC_URL, + static_url: process.env.PUBLIC_URL, + dynamic_url: e[urlVar], + env_envtest: env.ENVTEST, + static_envtest: process.env.ENVTEST, + dynamic_envtest: e[envTestVar], + env_nextauth: env.NEXTAUTH_URL, + static_nextauth: process.env.NEXTAUTH_URL, + dynamic_nextauth: e[nextAuthUrlVar], + env_nextauth2: env.AUTH_URL, + static_nextauth2: process.env.AUTH_URL, + dynamic_nextauth2: e[nextAuthUrlVar2], + } + + console.log(values) + + return NextResponse.json(values) +} + +export const dynamic = "force-dynamic" + +export const runtime = "edge" diff --git a/app/api/web/envtest-dynamic-load-file-edge/route.ts b/app/api/web/envtest-dynamic-load-file-edge/route.ts new file mode 100644 index 000000000..bb8802815 --- /dev/null +++ b/app/api/web/envtest-dynamic-load-file-edge/route.ts @@ -0,0 +1,41 @@ +import { config } from "dotenv" +import { NextResponse } from "next/server" + +import { env } from "@/env/server" + +import type { NextRequest } from "next/server" + +config({ path: "./.env" }) + +export async function GET(request: NextRequest) { + const e = process.env + console.log({ process_env: process.env }) + + const urlVar = "PUBLIC_URL" + const nextAuthUrlVar = "NEXTAUTH_URL" + const nextAuthUrlVar2 = "AUTH_URL" + const envTestVar = "ENVTEST" + + const values = { + env_url: env.PUBLIC_URL, + static_url: process.env.PUBLIC_URL, + dynamic_url: e[urlVar], + env_envtest: env.ENVTEST, + static_envtest: process.env.ENVTEST, + dynamic_envtest: e[envTestVar], + env_nextauth: env.NEXTAUTH_URL, + static_nextauth: process.env.NEXTAUTH_URL, + dynamic_nextauth: e[nextAuthUrlVar], + env_nextauth2: env.AUTH_URL, + static_nextauth2: process.env.AUTH_URL, + dynamic_nextauth2: e[nextAuthUrlVar2], + } + + console.log(values) + + return NextResponse.json(values) +} + +export const dynamic = "force-dynamic" + +export const runtime = "edge" diff --git a/app/api/web/envtest-dynamic-load-file/route.ts b/app/api/web/envtest-dynamic-load-file/route.ts index 1efd16b34..115f12f77 100644 --- a/app/api/web/envtest-dynamic-load-file/route.ts +++ b/app/api/web/envtest-dynamic-load-file/route.ts @@ -13,7 +13,7 @@ export async function GET(request: NextRequest) { const urlVar = "PUBLIC_URL" const nextAuthUrlVar = "NEXTAUTH_URL" - const nextAuthUrlVar2 = "NEXTAUTH_URL2" + const nextAuthUrlVar2 = "AUTH_URL" const envTestVar = "ENVTEST" const values = { @@ -26,8 +26,8 @@ export async function GET(request: NextRequest) { env_nextauth: env.NEXTAUTH_URL, static_nextauth: process.env.NEXTAUTH_URL, dynamic_nextauth: e[nextAuthUrlVar], - env_nextauth2: env.NEXTAUTH_URL2, - static_nextauth2: process.env.NEXTAUTH_URL2, + env_nextauth2: env.AUTH_URL, + static_nextauth2: process.env.AUTH_URL, dynamic_nextauth2: e[nextAuthUrlVar2], } diff --git a/app/api/web/envtest-dynamic-load/route.ts b/app/api/web/envtest-dynamic-load/route.ts index 927afa515..18c964526 100644 --- a/app/api/web/envtest-dynamic-load/route.ts +++ b/app/api/web/envtest-dynamic-load/route.ts @@ -12,7 +12,7 @@ export async function GET(request: NextRequest) { const urlVar = "PUBLC_URL" const nextAuthUrlVar = "NEXTAUTH_URL" - const nextAuthUrlVar2 = "NEXTAUTH_URL2" + const nextAuthUrlVar2 = "AUTH_URL" const envTestVar = "ENVTEST" const values = { @@ -25,8 +25,8 @@ export async function GET(request: NextRequest) { env_nextauth: env.NEXTAUTH_URL, static_nextauth: process.env.NEXTAUTH_URL, dynamic_nextauth: e[nextAuthUrlVar], - env_nextauth2: env.NEXTAUTH_URL2, - static_nextauth2: process.env.NEXTAUTH_URL2, + env_nextauth2: env.AUTH_URL, + static_nextauth2: process.env.AUTH_URL, dynamic_nextauth2: e[nextAuthUrlVar2], } diff --git a/app/api/web/envtest-dynamic-override-edge/route.ts b/app/api/web/envtest-dynamic-override-edge/route.ts new file mode 100644 index 000000000..d1919d986 --- /dev/null +++ b/app/api/web/envtest-dynamic-override-edge/route.ts @@ -0,0 +1,41 @@ +import { config } from "dotenv" +import { NextResponse } from "next/server" + +import { env } from "@/env/server" + +import type { NextRequest } from "next/server" + +config({ debug: true, override: true }) + +export async function GET(request: NextRequest) { + const e = process.env + console.log({ process_env: process.env }) + + const urlVar = "PUBLC_URL" + const nextAuthUrlVar = "NEXTAUTH_URL" + const nextAuthUrlVar2 = "AUTH_URL" + const envTestVar = "ENVTEST" + + const values = { + env_url: env.PUBLIC_URL, + static_url: process.env.PUBLIC_URL, + dynamic_url: e[urlVar], + env_envtest: env.ENVTEST, + static_envtest: process.env.ENVTEST, + dynamic_envtest: e[envTestVar], + env_nextauth: env.NEXTAUTH_URL, + static_nextauth: process.env.NEXTAUTH_URL, + dynamic_nextauth: e[nextAuthUrlVar], + env_nextauth2: env.AUTH_URL, + static_nextauth2: process.env.AUTH_URL, + dynamic_nextauth2: e[nextAuthUrlVar2], + } + + console.log(values) + + return NextResponse.json(values) +} + +export const dynamic = "force-dynamic" + +export const runtime = "edge" diff --git a/app/api/web/envtest-dynamic-override/route.ts b/app/api/web/envtest-dynamic-override/route.ts index 7dbf84509..4d45b8e5f 100644 --- a/app/api/web/envtest-dynamic-override/route.ts +++ b/app/api/web/envtest-dynamic-override/route.ts @@ -13,7 +13,7 @@ export async function GET(request: NextRequest) { const urlVar = "PUBLC_URL" const nextAuthUrlVar = "NEXTAUTH_URL" - const nextAuthUrlVar2 = "NEXTAUTH_URL2" + const nextAuthUrlVar2 = "AUTH_URL" const envTestVar = "ENVTEST" const values = { @@ -26,8 +26,8 @@ export async function GET(request: NextRequest) { env_nextauth: env.NEXTAUTH_URL, static_nextauth: process.env.NEXTAUTH_URL, dynamic_nextauth: e[nextAuthUrlVar], - env_nextauth2: env.NEXTAUTH_URL2, - static_nextauth2: process.env.NEXTAUTH_URL2, + env_nextauth2: env.AUTH_URL, + static_nextauth2: process.env.AUTH_URL, dynamic_nextauth2: e[nextAuthUrlVar2], } diff --git a/app/api/web/envtest-dynamic/route.ts b/app/api/web/envtest-dynamic/route.ts index 325c60882..386817938 100644 --- a/app/api/web/envtest-dynamic/route.ts +++ b/app/api/web/envtest-dynamic/route.ts @@ -10,7 +10,7 @@ export async function GET(request: NextRequest) { const urlVar = "PUBLIC_URL" const nextAuthUrlVar = "NEXTAUTH_URL" - const nextAuthUrlVar2 = "NEXTAUTH_URL2" + const nextAuthUrlVar2 = "AUTH_URL" const envTestVar = "ENVTEST" const values = { @@ -23,8 +23,8 @@ export async function GET(request: NextRequest) { env_nextauth: env.NEXTAUTH_URL, static_nextauth: process.env.NEXTAUTH_URL, dynamic_nextauth: e[nextAuthUrlVar], - env_nextauth2: env.NEXTAUTH_URL2, - static_nextauth2: process.env.NEXTAUTH_URL2, + env_nextauth2: env.AUTH_URL, + static_nextauth2: process.env.AUTH_URL, dynamic_nextauth2: e[nextAuthUrlVar2], } diff --git a/app/api/web/envtest-static-load-file/route.ts b/app/api/web/envtest-static-load-file/route.ts index b731951d1..f1a83978a 100644 --- a/app/api/web/envtest-static-load-file/route.ts +++ b/app/api/web/envtest-static-load-file/route.ts @@ -13,7 +13,7 @@ export async function GET(request: NextRequest) { const urlVar = "PUBLIC_URL" const nextAuthUrlVar = "NEXTAUTH_URL" - const nextAuthUrlVar2 = "NEXTAUTH_URL2" + const nextAuthUrlVar2 = "AUTH_URL" const envTestVar = "ENVTEST" const values = { @@ -26,8 +26,8 @@ export async function GET(request: NextRequest) { env_nextauth: env.NEXTAUTH_URL, static_nextauth: process.env.NEXTAUTH_URL, dynamic_nextauth: e[nextAuthUrlVar], - env_nextauth2: env.NEXTAUTH_URL2, - static_nextauth2: process.env.NEXTAUTH_URL2, + env_nextauth2: env.AUTH_URL, + static_nextauth2: process.env.AUTH_URL, dynamic_nextauth2: e[nextAuthUrlVar2], } diff --git a/app/api/web/envtest-static-load/route.ts b/app/api/web/envtest-static-load/route.ts index 6b18776b2..4e360a891 100644 --- a/app/api/web/envtest-static-load/route.ts +++ b/app/api/web/envtest-static-load/route.ts @@ -12,7 +12,7 @@ export async function GET(request: NextRequest) { const urlVar = "PUBLIC_URL" const nextAuthUrlVar = "NEXTAUTH_URL" - const nextAuthUrlVar2 = "NEXTAUTH_URL2" + const nextAuthUrlVar2 = "AUTH_URL" const envTestVar = "ENVTEST" const values = { @@ -25,8 +25,8 @@ export async function GET(request: NextRequest) { env_nextauth: env.NEXTAUTH_URL, static_nextauth: process.env.NEXTAUTH_URL, dynamic_nextauth: e[nextAuthUrlVar], - env_nextauth2: env.NEXTAUTH_URL2, - static_nextauth2: process.env.NEXTAUTH_URL2, + env_nextauth2: env.AUTH_URL, + static_nextauth2: process.env.AUTH_URL, dynamic_nextauth2: e[nextAuthUrlVar2], } diff --git a/app/api/web/envtest-static-override/route.ts b/app/api/web/envtest-static-override/route.ts index 178c2e28c..d844016c5 100644 --- a/app/api/web/envtest-static-override/route.ts +++ b/app/api/web/envtest-static-override/route.ts @@ -13,7 +13,7 @@ export async function GET(request: NextRequest) { const urlVar = "PUBLIC_URL" const nextAuthUrlVar = "NEXTAUTH_URL" - const nextAuthUrlVar2 = "NEXTAUTH_URL2" + const nextAuthUrlVar2 = "AUTH_URL" const envTestVar = "ENVTEST" const values = { @@ -26,8 +26,8 @@ export async function GET(request: NextRequest) { env_nextauth: env.NEXTAUTH_URL, static_nextauth: process.env.NEXTAUTH_URL, dynamic_nextauth: e[nextAuthUrlVar], - env_nextauth2: env.NEXTAUTH_URL2, - static_nextauth2: process.env.NEXTAUTH_URL2, + env_nextauth2: env.AUTH_URL, + static_nextauth2: process.env.AUTH_URL, dynamic_nextauth2: e[nextAuthUrlVar2], } diff --git a/app/api/web/envtest-static/route.ts b/app/api/web/envtest-static/route.ts index 8e9eeda91..1c71b77ca 100644 --- a/app/api/web/envtest-static/route.ts +++ b/app/api/web/envtest-static/route.ts @@ -10,7 +10,7 @@ export async function GET(request: NextRequest) { const urlVar = "PUBLIC_URL" const nextAuthUrlVar = "NEXTAUTH_URL" - const nextAuthUrlVar2 = "NEXTAUTH_URL2" + const nextAuthUrlVar2 = "AUTH_URL" const envTestVar = "ENVTEST" const values = { @@ -23,8 +23,8 @@ export async function GET(request: NextRequest) { env_nextauth: env.NEXTAUTH_URL, static_nextauth: process.env.NEXTAUTH_URL, dynamic_nextauth: e[nextAuthUrlVar], - env_nextauth2: env.NEXTAUTH_URL2, - static_nextauth2: process.env.NEXTAUTH_URL2, + env_nextauth2: env.AUTH_URL, + static_nextauth2: process.env.AUTH_URL, dynamic_nextauth2: e[nextAuthUrlVar2], } diff --git a/env/server.ts b/env/server.ts index 18fb22cb8..e3a7e1ea8 100644 --- a/env/server.ts +++ b/env/server.ts @@ -33,7 +33,7 @@ export const env = createEnv({ NEXTAUTH_REDIRECT_PROXY_URL: z.string().optional(), NEXTAUTH_SECRET: z.string(), NEXTAUTH_URL: z.string().optional(), - NEXTAUTH_URL2: z.string().optional(), + AUTH_URL: z.string().optional(), NODE_ENV: z.enum(["development", "test", "production"]), PRINT_QUERY: z .string() @@ -71,7 +71,7 @@ export const env = createEnv({ NEXTAUTH_REDIRECT_PROXY_URL: process.env.NEXTAUTH_REDIRECT_PROXY_URL, NEXTAUTH_SECRET: process.env.NEXTAUTH_SECRET, NEXTAUTH_URL: process.env.NEXTAUTH_URL, - NEXTAUTH_URL2: process.env.NEXTAUTH_URL2, + AUTH_URL: process.env.AUTH_URL, NODE_ENV: process.env.NODE_ENV, PRINT_QUERY: process.env.PRINT_QUERY, PUBLIC_URL: process.env.PUBLIC_URL, diff --git a/update-dotenv.mjs b/update-dotenv.mjs index 9af0975f2..6f4521b78 100644 --- a/update-dotenv.mjs +++ b/update-dotenv.mjs @@ -29,7 +29,9 @@ * any other environment (branch deploys and deploy previews) we use the * predefined Netlify environment variable DEPLOY_PRIME_URL. * - * NEXTAUTH_URL is set to point to the PUBLIC_URL. + * Both AUTH_URL and NEXTAUTH_URL is set to point to the PUBLIC_URL. + * We set both as a precaution as next-auth v5 is transitioning to AUTH_* but we + * have seen several occurences in the auth.js codebase that are not using both. */ import fs from "node:fs" @@ -50,15 +52,20 @@ if (process.env.NETLIFY) { PUBLIC_URL = process.env.DEPLOY_PRIME_URL } - const NEXTAUTH_URL = `${PUBLIC_URL}/api/web/auth` + const AUTH_URL = `${PUBLIC_URL}/api/web/auth` + const NEXTAUTH_URL = AUTH_URL + + const replaceMap = { + AUTH_URL, + NEXTAUTH_URL, + PUBLIC_URL, + } let contents = fs.readFileSync("./.env", { encoding: "utf-8" }) - contents = contents.replace(/PUBLIC_URL=.*/, `PUBLIC_URL="${PUBLIC_URL}"`) - contents = contents.replace( - /NEXTAUTH_URL=.*/, - `NEXTAUTH_URL="${NEXTAUTH_URL}"` - ) + for (const [key, value] of Object.entries(replaceMap)) { + contents = contents.replace(new RegExp(`${key}=.*`), `${key}="${value}"`) + } fs.writeFileSync("./.env", contents, { encoding: "utf-8" }) }