Closer/server/src/config/env.ts

66 lines
2.0 KiB
TypeScript

import 'dotenv/config'
const requiredEnvVars = ['FIREBASE_PROJECT_ID'] as const
const recommendedEnvVars = ['REVENUECAT_WEBHOOK_SECRET', 'REVENUECAT_SIGNING_KEY', 'REVENUECAT_PREMIUM_PRODUCT_IDS'] as const
type RequiredEnvVar = (typeof requiredEnvVars)[number]
type RecommendedEnvVar = (typeof recommendedEnvVars)[number]
/**
* Validates that all required environment variables are set.
* Throws an error with details if any are missing.
* Logs warnings for missing recommended vars.
*/
export function validateEnv(): void {
const missing: RequiredEnvVar[] = []
const missingRecommended: RecommendedEnvVar[] = []
for (const varName of requiredEnvVars) {
const value = process.env[varName]
if (!value || value.trim() === '') {
missing.push(varName)
}
}
for (const varName of recommendedEnvVars) {
const value = process.env[varName]
if (!value || value.trim() === '') {
missingRecommended.push(varName)
}
}
if (missing.length > 0) {
const message = missing.map(v => ` - ${v}`).join('\n')
throw new Error(`Missing required environment variables:\n${message}`)
}
// Log warnings for missing recommended vars (not fatal)
if (missingRecommended.length > 0) {
console.warn('[env] Missing recommended environment variables (some features disabled):')
for (const varName of missingRecommended) {
console.warn(` - ${varName}`)
}
}
}
/**
* Safely retrieves a required environment variable.
* Throws if not set (after validateEnv has been called).
*/
export function getEnv(varName: RequiredEnvVar): string {
const value = process.env[varName]
if (!value) {
throw new Error(`Environment variable ${varName} is not set`)
}
return value
}
/**
* Safely retrieves an environment variable (required or recommended).
* Returns empty string for missing recommended vars (allowing defaults).
*/
export function getEnvValue(varName: string): string {
const value = process.env[varName]
return value ?? ''
}