43 lines
1.3 KiB
TypeScript
43 lines
1.3 KiB
TypeScript
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 ?? "",
|
|
};
|