// Конфигурация окружения сервиса. // // Два источника, runtime имеет приоритет над build: // - DEV (npm run dev): Vite экспонирует в import.meta.env ТОЛЬКО переменные с // префиксом VITE_ — их читаем на этапе сборки (см. .env / .env.example). // - PROD (Docker): docker-entrypoint.d/20-nstart-runtime-config.sh генерит // /config.js из APP_*-переменных контейнера → window.__NSTART_APP_ENV__. // Это прод-контракт; .env в проде не используется. // // У ТГУ собственная тёмная тема на :root (styles/theme.css), переключателя тем // нет — поэтому параметра темы здесь намеренно нет (в отличие от nstart-шаблона, // где тема нужна была только чтобы бороться со светлым дефолтом @nstart/ui). export type AuthMode = 'new-start-id' | 'anonymous' export interface AppEnv { apiUrl: string authMode: AuthMode newStartIdUrl: string newStartIdRealm: string newStartIdClientId: string } interface RuntimeEnv { apiUrl?: string authMode?: string newStartIdUrl?: string newStartIdRealm?: string newStartIdClientId?: string } declare global { interface Window { __NSTART_APP_ENV__?: RuntimeEnv } } /** Берёт первое непустое значение из runtime → build → default. */ function pick(runtime: string | undefined, build: string | undefined, fallback: string): string { const r = runtime?.trim() if (r) return r const b = build?.trim() if (b) return b return fallback } function resolveAuthMode(value: string): AuthMode { return value === 'new-start-id' ? 'new-start-id' : 'anonymous' } function resolveEnv(): AppEnv { const runtime = window.__NSTART_APP_ENV__ ?? {} const build = import.meta.env return { apiUrl: pick(runtime.apiUrl, build.VITE_API_URL, '/api'), // Дефолт anonymous: сервис открывается сразу, без редиректа на Keycloak. // Закрытый контур включается явно (APP_AUTH_MODE / VITE_AUTH_MODE=new-start-id). authMode: resolveAuthMode(pick(runtime.authMode, build.VITE_AUTH_MODE, 'anonymous')), newStartIdUrl: pick( runtime.newStartIdUrl, build.VITE_NEW_START_ID_URL, 'http://localhost:8080/auth', ), newStartIdRealm: pick(runtime.newStartIdRealm, build.VITE_NEW_START_ID_REALM, 'new-start'), newStartIdClientId: pick( runtime.newStartIdClientId, build.VITE_NEW_START_ID_CLIENT_ID, 'pcp-tgu-ui-service', ), } } export const env: AppEnv = resolveEnv()