53 lines
1.3 KiB
TypeScript
53 lines
1.3 KiB
TypeScript
|
|
// 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),
|
||
|
|
},
|
||
|
|
};
|
||
|
|
};
|