2026-05-18 07:27:06 +07:00
|
|
|
import logger from './utils/logger';
|
|
|
|
|
|
|
|
|
|
interface AppConfig {
|
|
|
|
|
botToken: string;
|
2026-05-18 21:18:16 +07:00
|
|
|
additionalBotTokens: string[];
|
2026-05-18 07:27:06 +07:00
|
|
|
storageChatId: number;
|
|
|
|
|
baseUrl: string;
|
|
|
|
|
databaseUrl: string;
|
|
|
|
|
port: number;
|
|
|
|
|
nodeEnv: string;
|
|
|
|
|
logLevel: string;
|
|
|
|
|
rateLimitWindowMs: number;
|
|
|
|
|
rateLimitMaxRequests: number;
|
|
|
|
|
}
|
2026-05-18 06:58:55 +07:00
|
|
|
|
|
|
|
|
const requiredEnv = {
|
|
|
|
|
BOT_TOKEN: process.env.BOT_TOKEN,
|
|
|
|
|
STORAGE_CHANNEL_ID: process.env.STORAGE_CHANNEL_ID,
|
|
|
|
|
BASE_URL: process.env.BASE_URL,
|
|
|
|
|
DATABASE_URL: process.env.DATABASE_URL,
|
2026-05-18 07:29:01 +07:00
|
|
|
PORT: process.env.PORT,
|
2026-05-18 06:58:55 +07:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const missing = Object.entries(requiredEnv)
|
|
|
|
|
.filter(([_, value]) => value === undefined || value === '')
|
|
|
|
|
.map(([key]) => key);
|
|
|
|
|
|
|
|
|
|
if (missing.length > 0) {
|
|
|
|
|
logger.error('Missing required environment variables:', missing);
|
|
|
|
|
throw new Error(`Missing environment variables: ${missing.join(', ')}`);
|
|
|
|
|
}
|
|
|
|
|
|
2026-05-18 07:27:06 +07:00
|
|
|
export const config: AppConfig = {
|
|
|
|
|
botToken: process.env.BOT_TOKEN!,
|
2026-05-18 21:19:38 +07:00
|
|
|
additionalBotTokens:
|
|
|
|
|
process.env.NODE_ENV === 'test'
|
|
|
|
|
? []
|
|
|
|
|
: (process.env.ADDITIONAL_BOT_TOKENS || '')
|
|
|
|
|
.split(',')
|
|
|
|
|
.map((t) => t.trim())
|
|
|
|
|
.filter((t) => t !== ''),
|
2026-05-18 07:27:06 +07:00
|
|
|
storageChatId: parseInt(process.env.STORAGE_CHANNEL_ID!, 10),
|
|
|
|
|
baseUrl: process.env.BASE_URL!,
|
|
|
|
|
databaseUrl: process.env.DATABASE_URL!,
|
|
|
|
|
port: parseInt(process.env.PORT!, 10) || 3000,
|
2026-05-18 06:58:55 +07:00
|
|
|
nodeEnv: process.env.NODE_ENV || 'development',
|
|
|
|
|
logLevel: process.env.LOG_LEVEL || 'info',
|
2026-05-18 07:27:06 +07:00
|
|
|
rateLimitWindowMs: parseInt(process.env.RATE_LIMIT_WINDOW_MS!, 10) || 60000,
|
2026-05-18 07:29:01 +07:00
|
|
|
rateLimitMaxRequests: parseInt(process.env.RATE_LIMIT_MAX_REQUESTS!, 10) || 30,
|
2026-05-18 06:58:55 +07:00
|
|
|
};
|
|
|
|
|
|
2026-05-18 07:29:01 +07:00
|
|
|
logger.info('Environment variables loaded', {
|
|
|
|
|
config: { ...config, botToken: `${config.botToken?.substring(0, 10)}...` },
|
|
|
|
|
});
|