Files
CRM-LeadRadar/apps/api/src/lib/config.ts
T
yuriandClaude Opus 5.5 9749da5ae7 Lead Radar: исходный код
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-25 23:11:04 +04:00

42 lines
1.8 KiB
TypeScript

export interface Config {
databaseUrl: string;
port: number;
appUrl: string;
production: boolean;
telegramBotToken?: string;
telegramBotUsername?: string;
/** listam | feed | off */
listingSource: string;
jinaApiKey?: string;
/** Клиентский бот: анкета соискателя. Без токена анкета выключена. */
clientBotToken?: string;
clientBotUsername?: string;
/** Сколько процентов высоты срезать сверху у фото на странице клиента. */
cropTopPercent: number;
/** Куда складывать обработанные фото. */
mediaDir: string;
/** Переписывание текста объекта моделью через OpenRouter. Без ключа текст собирается по шаблону. */
openRouterKey?: string;
openRouterModel: string;
}
export function loadConfig(env = process.env): Config {
if (!env.DATABASE_URL) throw new Error('DATABASE_URL не задан');
return {
databaseUrl: env.DATABASE_URL,
port: Number(env.API_PORT ?? 3100),
appUrl: (env.APP_URL ?? 'http://localhost:5174').replace(/\/$/, ''),
production: env.NODE_ENV === 'production',
telegramBotToken: env.TELEGRAM_BOT_TOKEN || undefined,
telegramBotUsername: env.TELEGRAM_BOT_USERNAME || undefined,
listingSource: env.LISTING_SOURCE || 'listam',
jinaApiKey: env.JINA_API_KEY || undefined,
clientBotToken: env.CLIENT_BOT_TOKEN || undefined,
clientBotUsername: env.CLIENT_BOT_USERNAME || undefined,
cropTopPercent: Math.max(0, Math.min(40, Number(env.CROP_TOP_PERCENT ?? 8) || 0)),
mediaDir: env.MEDIA_DIR || './data/media',
openRouterKey: env.OPENROUTER_API_KEY || undefined,
openRouterModel: env.OPENROUTER_MODEL || 'anthropic/claude-haiku-4.5',
};
}