Новый сервис pcp-tgu-ui-service: ТГУ-фронт на headless-auth nstart + платформенный CI/деплой
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
// Конфигурация окружения сервиса.
|
||||
//
|
||||
// Два источника, 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()
|
||||
Reference in New Issue
Block a user