nakama/backend/config/index.js

78 lines
3.0 KiB
JavaScript
Raw Normal View History

2025-11-03 20:35:01 +00:00
// Централизованная конфигурация приложения
2025-11-04 21:51:05 +00:00
// Важно: dotenv.config() должен быть вызван ДО этого файла
2025-11-03 20:35:01 +00:00
module.exports = {
// Сервер
port: process.env.PORT || 3000,
nodeEnv: process.env.NODE_ENV || 'development',
// MongoDB
mongoUri: process.env.MONGODB_URI || 'mongodb://localhost:27017/nakama',
// Redis (опционально)
redisUrl: process.env.REDIS_URL || null,
// JWT
jwtSecret: process.env.JWT_SECRET || 'nakama_secret_key_change_in_production',
2025-11-10 21:56:36 +00:00
jwt: {
accessSecret: process.env.JWT_ACCESS_SECRET || process.env.JWT_SECRET || 'nakama_access_secret_change_me',
refreshSecret: process.env.JWT_REFRESH_SECRET || process.env.JWT_SECRET || 'nakama_refresh_secret_change_me',
accessExpiresIn: parseInt(process.env.JWT_ACCESS_EXPIRES_IN || '300', 10), // 5 минут
refreshExpiresIn: parseInt(process.env.JWT_REFRESH_EXPIRES_IN || '604800', 10), // 7 дней
accessCookieName: process.env.JWT_ACCESS_COOKIE_NAME || 'nakama_access_token',
refreshCookieName: process.env.JWT_REFRESH_COOKIE_NAME || 'nakama_refresh_token'
},
2025-11-03 20:35:01 +00:00
// Telegram
telegramBotToken: process.env.TELEGRAM_BOT_TOKEN,
2025-11-10 20:13:22 +00:00
moderationBotToken: process.env.MODERATION_BOT_TOKEN || process.env.SERVER_MONITOR_BOT_TOKEN || '7604181694:AAGmnpWtR2rknbZreWNoU3PtVWMFJdlwVmc',
moderationOwnerUsernames: (process.env.MODERATION_OWNER_USERNAMES || 'glpshchn00')
.split(',')
.map((name) => name.trim().toLowerCase())
.filter(Boolean),
moderationChannelUsername: process.env.MODERATION_CHANNEL_USERNAME || '@reichenbfurry',
2025-11-03 20:35:01 +00:00
2025-11-03 22:51:17 +00:00
// Gelbooru API
gelbooruApiKey: process.env.GELBOORU_API_KEY || '638e2433d451fc02e848811acdafdce08317073c01ed78e38139115c19fe04afa367f736726514ef1337565d4c05b3cbe2c81125c424301e90d29d1f7f4cceff',
gelbooruUserId: process.env.GELBOORU_USER_ID || '1844464',
2025-11-03 20:35:01 +00:00
// Frontend URL
frontendUrl: process.env.FRONTEND_URL || 'http://localhost:5173',
// CORS
corsOrigin: process.env.CORS_ORIGIN || '*',
// Загрузка файлов
maxFileSize: parseInt(process.env.MAX_FILE_SIZE || '10485760'), // 10MB
uploadsDir: process.env.UPLOADS_DIR || 'uploads',
// Rate limiting
rateLimits: {
general: {
windowMs: 15 * 60 * 1000,
max: parseInt(process.env.RATE_LIMIT_GENERAL || '100')
},
posts: {
windowMs: 60 * 60 * 1000,
max: parseInt(process.env.RATE_LIMIT_POSTS || '10')
},
interactions: {
windowMs: 60 * 1000,
max: parseInt(process.env.RATE_LIMIT_INTERACTIONS || '20')
}
},
// Cache TTL (seconds)
cacheTTL: {
posts: parseInt(process.env.CACHE_TTL_POSTS || '300'), // 5 мин
users: parseInt(process.env.CACHE_TTL_USERS || '600'), // 10 мин
search: parseInt(process.env.CACHE_TTL_SEARCH || '180') // 3 мин
},
// Проверки
isDevelopment: () => process.env.NODE_ENV === 'development',
isProduction: () => process.env.NODE_ENV === 'production',
isTest: () => process.env.NODE_ENV === 'test'
};