const requiredEnvs = [ "NEXT_PUBLIC_SUPABASE_URL", "NEXT_PUBLIC_SUPABASE_ANON_KEY", ] as const; const configuredAppUrl = process.env.NEXT_PUBLIC_APP_URL?.trim(); function getAppOrigin() { if (!configuredAppUrl) return "http://localhost:3000"; try { return new URL(configuredAppUrl).origin; } catch { return "http://localhost:3000"; } } for (const key of requiredEnvs) { if (!process.env[key]) { // Keep as runtime warning for smoother local setup. // eslint-disable-next-line no-console console.warn(`[env] Missing ${key}`); } } export const env = { appUrl: configuredAppUrl ?? "http://localhost:3000", appOrigin: getAppOrigin(), jobSecret: process.env.JOB_SECRET ?? "", cronSecret: process.env.CRON_SECRET ?? "", cronSharedSecret: process.env.CRON_SHARED_SECRET ?? process.env.CRON_SECRET ?? "", encryptionKey: process.env.ENCRYPTION_KEY ?? "", pleskCredEncKey: process.env.PLESK_CRED_ENC_KEY ?? "", stripeSecretKey: process.env.STRIPE_SECRET_KEY ?? "", stripeWebhookSecret: process.env.STRIPE_WEBHOOK_SECRET ?? "", stripePriceId: process.env.STRIPE_PRICE_ID ?? "", supabaseUrl: process.env.SUPABASE_URL ?? process.env.NEXT_PUBLIC_SUPABASE_URL ?? "", supabaseAnonKey: process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY ?? "", supabaseServiceRoleKey: process.env.SUPABASE_SERVICE_ROLE_KEY ?? "", };