Files
glchat/web/vite.config.ts
grendervill 3ae03ec515 feat(voice): голосовой интерфейс на LiveKit (Фаза 3, клиент)
- `livekit-client` подключён как ленивый чанк: SDK грузится только при входе в
  комнату, стартовый бандл не вырос;
- `src/lib/livekit.ts` — единственное место знания о SDK: подключение, дорожки
  микрофона/камеры/экрана, снимки участников (речь, флаги, качество связи),
  выбор устройств на лету, разбор exp токена;
- `src/stores/voiceConnection.ts` — сессия голоса: статусы
  idle/connecting/connected/reconnecting/error, продление токена за минуту до
  истечения с переподключением и повторным применением флагов, серверный мьют и
  глушение, громкость участников, перемещение, подсказка «говорите с выключенным
  микрофоном» не чаще раза в 5 с;
- UI: состав голосовой комнаты в сайдбаре (речь, флаги, качество), панель
  комнаты с плитками и модерацией, меню участника (личная громкость, мьют,
  перемещение), drag&drop между голосовыми комнатами, кнопки панели пользователя
  управляют реальной сессией, при выключенном голосе — понятная подсказка;
- 368 тестов Vitest (было 330), check/lint/test/build зелёные.
2026-09-20 18:51:31 +03:00

42 lines
1.3 KiB
TypeScript

import { fileURLToPath } from 'node:url';
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import tailwindcss from '@tailwindcss/vite';
export default defineConfig({
plugins: [react(), tailwindcss()],
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url)),
},
},
build: {
outDir: 'dist',
emptyOutDir: true,
sourcemap: false,
target: 'es2022',
// SDK LiveKit (~520 КБ) подгружается отдельным чанком только при входе в
// голосовую комнату, поэтому порог предупреждения поднят осознанно.
chunkSizeWarningLimit: 600,
},
server: {
port: 5173,
proxy: {
'/api': 'http://127.0.0.1:8080',
'/healthz': 'http://127.0.0.1:8080',
'/readyz': 'http://127.0.0.1:8080',
// Файлы аватаров/иконок отдаёт тот же инстанс.
'/files': 'http://127.0.0.1:8080',
// Шлюз Фазы 1: WebSocket на том же origin.
'/gateway': { target: 'ws://127.0.0.1:8080', ws: true },
},
},
test: {
environment: 'jsdom',
globals: true,
setupFiles: ['./tests/setup.ts'],
include: ['tests/**/*.test.{ts,tsx}'],
css: false,
},
});