backend: streamline environment variable extraction with defaults and enhance export structure

This commit is contained in:
Carlos Santos 2025-10-17 13:10:04 +02:00
parent 1a06ef38c0
commit 2b64445714

View File

@ -15,75 +15,122 @@ if (process.env.MEET_CONFIG_DIR) {
dotenv.config(envPath ? { path: envPath } : {});
export const {
SERVER_PORT = 6080,
SERVER_CORS_ORIGIN = '*',
MEET_LOG_LEVEL = 'info',
MEET_NAME_ID = 'openviduMeet',
MEET_BASE_URL = '',
MEET_EDITION = 'CE',
// Extract environment variables with defaults
const envVars = {
SERVER_PORT: process.env.SERVER_PORT || '6080',
SERVER_CORS_ORIGIN: process.env.SERVER_CORS_ORIGIN || '*',
MEET_LOG_LEVEL: process.env.MEET_LOG_LEVEL || 'info',
MEET_NAME_ID: process.env.MEET_NAME_ID || 'openviduMeet',
MEET_BASE_URL: process.env.MEET_BASE_URL || '',
MEET_EDITION: process.env.MEET_EDITION || 'CE',
/**
* Authentication configuration
*
* IMPORTANT:
* - These variables are only used the first time the server starts, storing their values in the database.
* - To change them after the initial start, use the OpenVidu Meet API instead of modifying these environment variables.
*/
MEET_INITIAL_ADMIN_USER = 'admin',
MEET_INITIAL_ADMIN_PASSWORD = 'admin',
MEET_INITIAL_API_KEY = '',
// Authentication configuration
MEET_INITIAL_ADMIN_USER: process.env.MEET_INITIAL_ADMIN_USER || 'admin',
MEET_INITIAL_ADMIN_PASSWORD: process.env.MEET_INITIAL_ADMIN_PASSWORD || 'admin',
MEET_INITIAL_API_KEY: process.env.MEET_INITIAL_API_KEY || '',
/**
* Webhook configuration
*
* IMPORTANT:
* - These variables are only used the first time the server starts, storing their values in the database.
* - To change them after the initial start, use the OpenVidu Meet API instead of modifying these environment variables.
*/
MEET_INITIAL_WEBHOOK_ENABLED = 'false',
MEET_INITIAL_WEBHOOK_URL = '',
// Webhook configuration
MEET_INITIAL_WEBHOOK_ENABLED: process.env.MEET_INITIAL_WEBHOOK_ENABLED || 'false',
MEET_INITIAL_WEBHOOK_URL: process.env.MEET_INITIAL_WEBHOOK_URL || '',
// LiveKit configuration
LIVEKIT_URL = 'ws://localhost:7880',
LIVEKIT_URL_PRIVATE = LIVEKIT_URL, // Uses LIVEKIT_URL if not explicitly set
LIVEKIT_API_KEY = 'devkey',
LIVEKIT_API_SECRET = 'secret',
LIVEKIT_URL: process.env.LIVEKIT_URL || 'ws://localhost:7880',
LIVEKIT_URL_PRIVATE: process.env.LIVEKIT_URL_PRIVATE || process.env.LIVEKIT_URL || 'ws://localhost:7880',
LIVEKIT_API_KEY: process.env.LIVEKIT_API_KEY || 'devkey',
LIVEKIT_API_SECRET: process.env.LIVEKIT_API_SECRET || 'secret',
MEET_BLOB_STORAGE_MODE = 's3', // Options: 's3', 'abs', 'gcs'
MEET_BLOB_STORAGE_MODE: process.env.MEET_BLOB_STORAGE_MODE || 's3', // Options: 's3', 'abs', 'gcs'
// S3 or GCS configuration
MEET_S3_BUCKET = 'openvidu-appdata',
MEET_S3_SUBBUCKET = 'openvidu-meet',
MEET_S3_SERVICE_ENDPOINT = 'http://localhost:9000',
MEET_S3_ACCESS_KEY = 'minioadmin',
MEET_S3_SECRET_KEY = 'minioadmin',
MEET_AWS_REGION = 'us-east-1',
MEET_S3_WITH_PATH_STYLE_ACCESS = 'true',
MEET_S3_BUCKET: process.env.MEET_S3_BUCKET || 'openvidu-appdata',
MEET_S3_SUBBUCKET: process.env.MEET_S3_SUBBUCKET || 'openvidu-meet',
MEET_S3_SERVICE_ENDPOINT: process.env.MEET_S3_SERVICE_ENDPOINT || 'http://localhost:9000',
MEET_S3_ACCESS_KEY: process.env.MEET_S3_ACCESS_KEY || 'minioadmin',
MEET_S3_SECRET_KEY: process.env.MEET_S3_SECRET_KEY || 'minioadmin',
MEET_AWS_REGION: process.env.MEET_AWS_REGION || 'us-east-1',
MEET_S3_WITH_PATH_STYLE_ACCESS: process.env.MEET_S3_WITH_PATH_STYLE_ACCESS || 'true',
//Azure Blob storage configuration
MEET_AZURE_CONTAINER_NAME = 'openvidu-appdata',
MEET_AZURE_SUBCONTAINER_NAME = 'openvidu-meet',
MEET_AZURE_ACCOUNT_NAME = '',
MEET_AZURE_ACCOUNT_KEY = '',
// Azure Blob storage configuration
MEET_AZURE_CONTAINER_NAME: process.env.MEET_AZURE_CONTAINER_NAME || 'openvidu-appdata',
MEET_AZURE_SUBCONTAINER_NAME: process.env.MEET_AZURE_SUBCONTAINER_NAME || 'openvidu-meet',
MEET_AZURE_ACCOUNT_NAME: process.env.MEET_AZURE_ACCOUNT_NAME || '',
MEET_AZURE_ACCOUNT_KEY: process.env.MEET_AZURE_ACCOUNT_KEY || '',
// Redis configuration
MEET_REDIS_HOST: REDIS_HOST = 'localhost',
MEET_REDIS_PORT: REDIS_PORT = 6379,
MEET_REDIS_USERNAME: REDIS_USERNAME = '',
MEET_REDIS_PASSWORD: REDIS_PASSWORD = 'redispassword',
MEET_REDIS_DB: REDIS_DB = '0',
REDIS_HOST: process.env.MEET_REDIS_HOST || 'localhost',
REDIS_PORT: process.env.MEET_REDIS_PORT || '6379',
REDIS_USERNAME: process.env.MEET_REDIS_USERNAME || '',
REDIS_PASSWORD: process.env.MEET_REDIS_PASSWORD || 'redispassword',
REDIS_DB: process.env.MEET_REDIS_DB || '0',
// Redis Sentinel configuration
MEET_REDIS_SENTINEL_HOST_LIST: REDIS_SENTINEL_HOST_LIST = '',
MEET_REDIS_SENTINEL_PASSWORD: REDIS_SENTINEL_PASSWORD = '',
MEET_REDIS_SENTINEL_MASTER_NAME: REDIS_SENTINEL_MASTER_NAME = 'openvidu',
REDIS_SENTINEL_HOST_LIST: process.env.MEET_REDIS_SENTINEL_HOST_LIST || '',
REDIS_SENTINEL_PASSWORD: process.env.MEET_REDIS_SENTINEL_PASSWORD || '',
REDIS_SENTINEL_MASTER_NAME: process.env.MEET_REDIS_SENTINEL_MASTER_NAME || 'openvidu',
// Deployment configuration
MODULES_FILE = undefined,
MODULE_NAME = 'openviduMeet',
ENABLED_MODULES = ''
} = process.env;
MODULES_FILE: process.env.MODULES_FILE || undefined,
MODULE_NAME: process.env.MODULE_NAME || 'openviduMeet',
ENABLED_MODULES: process.env.ENABLED_MODULES || ''
};
// Export environment as an object for extensibility
export const environment = envVars;
/**
* Helper function to create individual exports from an environment object.
* This is used to maintain backward compatibility with code that imports individual variables.
*/
export const createEnvironmentExports = <T extends Record<string, any>>(env: T): T => {
return env;
};
// Export individual variables for backward compatibility
export const {
SERVER_PORT,
SERVER_CORS_ORIGIN,
MEET_LOG_LEVEL,
MEET_NAME_ID,
MEET_BASE_URL,
MEET_EDITION,
MEET_INITIAL_ADMIN_USER,
MEET_INITIAL_ADMIN_PASSWORD,
MEET_INITIAL_API_KEY,
MEET_INITIAL_WEBHOOK_ENABLED,
MEET_INITIAL_WEBHOOK_URL,
LIVEKIT_URL,
LIVEKIT_URL_PRIVATE,
LIVEKIT_API_KEY,
LIVEKIT_API_SECRET,
MEET_BLOB_STORAGE_MODE,
MEET_S3_BUCKET,
MEET_S3_SUBBUCKET,
MEET_S3_SERVICE_ENDPOINT,
MEET_S3_ACCESS_KEY,
MEET_S3_SECRET_KEY,
MEET_AWS_REGION,
MEET_S3_WITH_PATH_STYLE_ACCESS,
MEET_AZURE_CONTAINER_NAME,
MEET_AZURE_SUBCONTAINER_NAME,
MEET_AZURE_ACCOUNT_NAME,
MEET_AZURE_ACCOUNT_KEY,
REDIS_HOST,
REDIS_PORT,
REDIS_USERNAME,
REDIS_PASSWORD,
REDIS_DB,
REDIS_SENTINEL_HOST_LIST,
REDIS_SENTINEL_PASSWORD,
REDIS_SENTINEL_MASTER_NAME,
MODULES_FILE,
MODULE_NAME,
ENABLED_MODULES
} = envVars;
export const getExportedEnvironment = () => {
return { ...envVars };
};
export function checkModuleEnabled() {
if (MODULES_FILE) {