84 lines
2.8 KiB
TypeScript
84 lines
2.8 KiB
TypeScript
import dotenv from "dotenv";
|
|
|
|
export interface AppConfig {
|
|
NODE_ENV: "development" | "production" | "test" | "staging";
|
|
PORT: number;
|
|
SUPABASE_URL: string;
|
|
SUPABASE_SERVICE_ROLE_KEY: string;
|
|
STREAM_CHAT_API_KEY: string;
|
|
STREAM_CHAT_API_SECRET: string;
|
|
EMAIL_USER: string;
|
|
EMAIL_KEY: string;
|
|
XTABLO_URL: string;
|
|
CORS_ORIGIN: string[];
|
|
LOG_LEVEL: "debug" | "info" | "warn" | "error";
|
|
}
|
|
|
|
function validateEnvVar(name: string, value: string | undefined): string {
|
|
if (!value) {
|
|
throw new Error(`Missing required environment variable: ${name}`);
|
|
}
|
|
return value;
|
|
}
|
|
|
|
function createConfig(): AppConfig {
|
|
dotenv.config({ path: `.env.${process.env.NODE_ENV}` });
|
|
|
|
const NODE_ENV = (process.env.NODE_ENV || "development") as
|
|
| "development"
|
|
| "production"
|
|
| "staging"
|
|
| "test";
|
|
|
|
// Base configuration
|
|
const baseConfig: AppConfig = {
|
|
NODE_ENV,
|
|
PORT: parseInt(process.env.PORT || "8080", 10),
|
|
SUPABASE_URL: validateEnvVar("SUPABASE_URL", process.env.SUPABASE_URL),
|
|
SUPABASE_SERVICE_ROLE_KEY: validateEnvVar(
|
|
"SUPABASE_SERVICE_ROLE_KEY",
|
|
process.env.SUPABASE_SERVICE_ROLE_KEY
|
|
),
|
|
STREAM_CHAT_API_KEY: validateEnvVar(
|
|
"STREAM_CHAT_API_KEY",
|
|
process.env.STREAM_CHAT_API_KEY
|
|
),
|
|
STREAM_CHAT_API_SECRET: validateEnvVar(
|
|
"STREAM_CHAT_API_SECRET",
|
|
process.env.STREAM_CHAT_API_SECRET
|
|
),
|
|
EMAIL_USER: validateEnvVar("EMAIL_USER", process.env.EMAIL_USER),
|
|
EMAIL_KEY: validateEnvVar("EMAIL_KEY", process.env.EMAIL_KEY),
|
|
CORS_ORIGIN: [process.env.CORS_ORIGIN || "https://app.xtablo.com"],
|
|
XTABLO_URL: process.env.XTABLO_URL || "https://app.xtablo.com",
|
|
LOG_LEVEL: "info",
|
|
};
|
|
|
|
// Environment-specific configurations
|
|
if (NODE_ENV === "development") {
|
|
baseConfig.LOG_LEVEL = "debug";
|
|
} else if (NODE_ENV === "production") {
|
|
baseConfig.LOG_LEVEL = "info";
|
|
} else if (NODE_ENV === "test") {
|
|
baseConfig.LOG_LEVEL = "warn";
|
|
}
|
|
|
|
// Log configuration info
|
|
// console.info(`Configuration loaded for ${NODE_ENV} environment:`);
|
|
// console.info(`- Port: ${baseConfig.PORT}`);
|
|
// console.info(`- CORS Origins: ${baseConfig.CORS_ORIGIN.join(", ")}`);
|
|
// console.info(`- Log Level: ${baseConfig.LOG_LEVEL}`);
|
|
// console.info(`- XTablo URL: ${baseConfig.XTABLO_URL}`);
|
|
// console.info(`- Supabase URL: ${baseConfig.SUPABASE_URL}`);
|
|
// console.info(`- Stream Chat API Key: ${baseConfig.STREAM_CHAT_API_KEY}`);
|
|
// console.info(`- Email User: ${baseConfig.EMAIL_USER}`);
|
|
// console.info(`- Email Key: ${baseConfig.EMAIL_KEY}`);
|
|
|
|
return baseConfig;
|
|
}
|
|
|
|
export const config = createConfig();
|
|
|
|
// Helper functions for common environment checks
|
|
export const isDevelopment = () => config.NODE_ENV === "development";
|
|
export const isProduction = () => config.NODE_ENV === "production";
|