Files
dyolink/backend/src/configs/configurations.ts

53 lines
1.3 KiB
TypeScript
Raw Normal View History

// backend/src/config/configuration.ts
export interface Config {
port: number;
database: {
url: string;
};
jwt: {
secret: string;
expiresIn: string;
};
throttle: {
ttl: number;
limit: number;
};
}
export default (): Config => {
// Helper function to get required env var with type safety
const getEnvVar = (key: string): string => {
const value = process.env[key];
if (!value) {
throw new Error(`❌ Environment variable ${key} is required but not set`);
}
return value;
};
// Helper for optional env vars with defaults
const getEnvVarWithDefault = (key: string, defaultValue: string): string => {
return process.env[key] || defaultValue;
};
const getEnvVarAsNumber = (key: string, defaultValue: number): number => {
const value = process.env[key];
if (!value) return defaultValue;
const parsed = parseInt(value, 10);
return isNaN(parsed) ? defaultValue : parsed;
};
return {
port: getEnvVarAsNumber('PORT', 3000),
database: {
url: getEnvVar('DATABASE_URL'),
},
jwt: {
secret: getEnvVar('JWT_SECRET'),
expiresIn: getEnvVarWithDefault('JWT_EXPIRES_IN', '7d'),
},
throttle: {
ttl: getEnvVarAsNumber('THROTTLE_TTL', 60),
limit: getEnvVarAsNumber('THROTTLE_LIMIT', 100),
},
};
};