This commit is contained in:
Timo Knuth 2026-01-22 16:33:29 +01:00
parent dd93ca560a
commit 1251584b13
1 changed files with 34 additions and 34 deletions

View File

@ -1,35 +1,35 @@
import { z } from 'zod'; import { z } from 'zod';
const envSchema = z.object({ const envSchema = z.object({
NODE_ENV: z.enum(['development', 'production', 'test']).default('development'), NODE_ENV: z.enum(['development', 'production', 'test']).default('development'),
PORT: z.string().default('3000'), PORT: z.string().default('3000'),
DATABASE_URL: z.string().default('postgresql://postgres:postgres@localhost:5432/qrmaster?schema=public'), DATABASE_URL: z.string().default('postgresql://postgres:postgres@localhost:5432/qrmaster?schema=public'),
NEXTAUTH_URL: z.string().default('http://localhost:3050'), NEXTAUTH_URL: z.string().default('http://localhost:3050'),
NEXTAUTH_SECRET: z.string().default('development-secret-change-in-production'), NEXTAUTH_SECRET: z.string().default('development-secret-change-in-production'),
GOOGLE_CLIENT_ID: z.string().optional(), GOOGLE_CLIENT_ID: z.string().optional(),
GOOGLE_CLIENT_SECRET: z.string().optional(), GOOGLE_CLIENT_SECRET: z.string().optional(),
REDIS_URL: z.string().optional(), REDIS_URL: z.string().optional(),
IP_SALT: z.string().default('development-salt-change-in-production'), IP_SALT: z.string().default('development-salt-change-in-production'),
ENABLE_DEMO: z.string().default('false'), ENABLE_DEMO: z.string().default('false'),
// Cloudflare R2 (S3 Compatible) // Cloudflare R2 (S3 Compatible)
R2_ACCOUNT_ID: z.string().optional(), R2_ACCOUNT_ID: z.string().optional(),
R2_ACCESS_KEY_ID: z.string().optional(), R2_ACCESS_KEY_ID: z.string().optional(),
R2_SECRET_ACCESS_KEY: z.string().optional(), R2_SECRET_ACCESS_KEY: z.string().optional(),
R2_BUCKET_NAME: z.string().default('qrmaster-menus'), R2_BUCKET_NAME: z.string().default('qrmaster-menus'),
R2_PUBLIC_URL: z.string().optional(), R2_PUBLIC_URL: z.string().optional(),
MAX_UPLOAD_SIZE: z.string().default('10485760'), // 10MB default MAX_UPLOAD_SIZE: z.string().default('10485760'), // 10MB default
}); });
// During build, we might not have all env vars, so we'll use defaults // During build, we might not have all env vars, so we'll use defaults
const isBuildTime = process.env.NEXT_PHASE === 'phase-production-build' || !process.env.DATABASE_URL; const isBuildTime = process.env.NEXT_PHASE === 'phase-production-build' || !process.env.DATABASE_URL;
export const env = isBuildTime export const env = isBuildTime
? envSchema.parse({ ? envSchema.parse({
...process.env, ...process.env,
DATABASE_URL: process.env.DATABASE_URL || 'postgresql://postgres:postgres@db:5432/qrmaster?schema=public', DATABASE_URL: process.env.DATABASE_URL || 'postgresql://postgres:postgres@db:5432/qrmaster?schema=public',
NEXTAUTH_URL: process.env.NEXTAUTH_URL || 'http://localhost:3050', NEXTAUTH_URL: process.env.NEXTAUTH_URL || 'http://localhost:3050',
NEXTAUTH_SECRET: process.env.NEXTAUTH_SECRET || 'development-secret-change-in-production', NEXTAUTH_SECRET: process.env.NEXTAUTH_SECRET || 'development-secret-change-in-production',
IP_SALT: process.env.IP_SALT || 'development-salt-change-in-production', IP_SALT: process.env.IP_SALT || 'development-salt-change-in-production',
}) })
: envSchema.parse(process.env); : envSchema.parse(process.env);