Files
dc-observatio/services/pcp-tgu-ui-service/src/config/env.ts
T

75 lines
2.8 KiB
TypeScript

// Конфигурация окружения сервиса.
//
// Два источника, 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()