# pcp-tgu-ui-service Фронтенд «ТГУ — Операции». Сервис собран **с нуля** на чистой базе исходного `pcp-tgu-ops-ui` (React + Vite, своя тёмная тема), в которую добавлены только две вещи с платформы NStart: 1. **Авторизация** — headless-ядро `@nstart/auth` (New Start ID / Keycloak): токен, login, logout, refresh. **Без `@nstart/ui`** — UI-компоненты библиотеки (ProfilePage/UserPanel) намеренно не подключены, экраны ТГУ остаются на своём UI. 2. **Сборка и деплой** — платформенный контракт: hardened `Dockerfile` (non-root, healthcheck), runtime-config (`config.js` из `APP_*`), `docker-bake.hcl`, `.gitlab-ci.yml` (build → trivy/semgrep → push в registry), `nginx.conf`. В отличие от `pcp-tgu-ops-ui-template`, здесь нет демо-страниц шаблона, `@nstart/ui`, Tailwind, i18n и борьбы тем — только рабочий ТГУ + auth + контур сборки/деплоя. ## Авторизация (headless) - Режим выбирается переменной `authMode` (`anonymous` | `new-start-id`). - `anonymous` (дефолт): приложение открывается сразу, токена нет, заголовок `Authorization` не добавляется — поведение как у исходного сервиса. - `new-start-id`: вход редиректом на New Start ID; токен подставляется в каждый запрос `src/api/*` через мост [`apiFetch`](src/api/apiFetch.ts) + [`AuthTokenBridge`](src/auth/appAuth.tsx). В шапке появляется кнопка «Выйти». - Конфиг входа берётся из [`src/config/env.ts`](src/config/env.ts) (runtime `APP_*` имеют приоритет над build `VITE_*`). ## Конфигурация окружения | Назначение | DEV (`npm run dev`) | PROD (Docker) | |---|---|---| | источник | `.env` (`VITE_*`) | `APP_*` контейнера → `config.js` | | api | `VITE_API_URL` | `APP_API_URL` | | режим auth | `VITE_AUTH_MODE` | `APP_AUTH_MODE` | | New Start ID | `VITE_NEW_START_ID_*` | `APP_NEW_START_ID_*` | Доступ к приватному реестру `@nstart/*`: scope `@nstart:registry=...` должен быть в `~/.npmrc` (или в конфиге CI-раннера). Проектный `.npmrc` задаёт только `min-release-age=7`. ## Запуск ```bash cp .env.example .env # режим anonymous, открывается сразу npm install # нужен доступ к repo.nstart.cloud (scope @nstart) npm run dev # http://localhost:5174 npm run build # tsc -b + vite build npm run test # vitest ``` ## Прод-прокси (осталось настроить) В [`nginx.conf`](nginx.conf) активный `/api/` — заглушка (`127.0.0.1:8000`), а блоки `pcp-*` закомментированы (зеркало `server.proxy` из `vite.config.ts`). Подставьте реальные `UPSTREAM_*` кластера и раскомментируйте, либо вынесите маршрутизацию на gateway/ingress.