2026-06-16 21:37:57 -05:00
|
|
|
import 'dotenv/config'
|
|
|
|
|
|
2026-06-16 21:53:53 -05:00
|
|
|
const requiredEnvVars = ['FIREBASE_PROJECT_ID'] as const
|
|
|
|
|
const recommendedEnvVars = ['REVENUECAT_WEBHOOK_SECRET', 'REVENUECAT_SIGNING_KEY', 'REVENUECAT_PREMIUM_PRODUCT_IDS'] as const
|
2026-06-16 21:37:57 -05:00
|
|
|
|
|
|
|
|
type RequiredEnvVar = (typeof requiredEnvVars)[number]
|
2026-06-16 21:53:53 -05:00
|
|
|
type RecommendedEnvVar = (typeof recommendedEnvVars)[number]
|
2026-06-16 21:37:57 -05:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Validates that all required environment variables are set.
|
|
|
|
|
* Throws an error with details if any are missing.
|
2026-06-16 21:53:53 -05:00
|
|
|
* Logs warnings for missing recommended vars.
|
2026-06-16 21:37:57 -05:00
|
|
|
*/
|
|
|
|
|
export function validateEnv(): void {
|
|
|
|
|
const missing: RequiredEnvVar[] = []
|
2026-06-16 21:53:53 -05:00
|
|
|
const missingRecommended: RecommendedEnvVar[] = []
|
2026-06-16 21:37:57 -05:00
|
|
|
|
|
|
|
|
for (const varName of requiredEnvVars) {
|
|
|
|
|
const value = process.env[varName]
|
|
|
|
|
if (!value || value.trim() === '') {
|
|
|
|
|
missing.push(varName)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2026-06-16 21:53:53 -05:00
|
|
|
for (const varName of recommendedEnvVars) {
|
|
|
|
|
const value = process.env[varName]
|
|
|
|
|
if (!value || value.trim() === '') {
|
|
|
|
|
missingRecommended.push(varName)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2026-06-16 21:37:57 -05:00
|
|
|
if (missing.length > 0) {
|
|
|
|
|
const message = missing.map(v => ` - ${v}`).join('\n')
|
|
|
|
|
throw new Error(`Missing required environment variables:\n${message}`)
|
|
|
|
|
}
|
2026-06-16 21:53:53 -05:00
|
|
|
|
|
|
|
|
// 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}`)
|
|
|
|
|
}
|
|
|
|
|
}
|
2026-06-16 21:37:57 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 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
|
|
|
|
|
}
|
2026-06-16 21:53:53 -05:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 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 ?? ''
|
|
|
|
|
}
|