1.7 KiB
HAN Chat frontend test site
Expo / React Native Web SPA для проверки публичных пользовательских потоков HAN Chat.
Запуск
cp .env.example .env.local
npm install
npm run web
Проверки: npm test, npm run typecheck, npm run build, npm run test:e2e.
Production
npm run build создаёт dist/. Каталог монтируется в корневой nginx системы; отдельный frontend nginx не используется. Для SPA nginx должен применять try_files $uri /index.html, не кэшировать index.html и бессрочно кэшировать hashed assets.
Dockerfile собирает статический OCI-артефакт /dist без runtime-сервера:
docker build --target static \
--build-arg EXPO_PUBLIC_API_BASE_URL=https://tohin.ru \
--build-arg EXPO_PUBLIC_AUTH_BASE_URL=https://tohin.ru/auth \
--build-arg EXPO_PUBLIC_KEYCLOAK_REALM=han-chat \
--build-arg EXPO_PUBLIC_KEYCLOAK_CLIENT_ID=han-chat-frontend .
Во frontend разрешены только публичные URL, realm, client id и имя среды. Service tokens, S3 credentials и mock OTP code добавлять запрещено. На web refresh token хранится в browser storage с известным XSS-риском; production требует строгой CSP и отсутствия сторонних scripts.
WebSocket использует subprotocols han-chat-v1 и bearer.<JWT>. Они должны совпадать с реализацией api-backend. Query-token намеренно не используется.