75 lines
2.8 KiB
TypeScript
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()
|