import { defineConfig } from 'vite' import react from '@vitejs/plugin-react' import path from 'path' import http from 'http' // Plugin to check setup status and serve setup page from backend if needed const setupCheckPlugin = () => ({ name: 'setup-check', configureServer(server) { server.middlewares.use(async (req, res, next) => { // Only check root paths if (req.url !== '/' && req.url !== '/index.html') { return next() } try { // Check setup status from backend const setupStatus = await new Promise<{ setup_required: boolean }>((resolve, reject) => { const request = http.get('http://localhost:8080/api/v1/auth/setup-status', (response) => { let data = '' response.on('data', chunk => data += chunk) response.on('end', () => { try { resolve(JSON.parse(data)) } catch (e) { reject(e) } }) }) request.on('error', reject) request.setTimeout(3000, () => reject(new Error('Timeout'))) }) // If setup required, proxy the setup page from backend if (setupStatus.setup_required) { // Fetch setup page from backend const setupPage = await new Promise((resolve, reject) => { const request = http.get('http://localhost:8080/', (response) => { let data = '' response.on('data', chunk => data += chunk) response.on('end', () => resolve(data)) }) request.on('error', reject) request.setTimeout(5000, () => reject(new Error('Timeout'))) }) // Serve the setup page res.setHeader('Content-Type', 'text/html') res.end(setupPage) return } } catch (err) { // If backend is not running or error occurs, continue to app console.warn('[setup-check] Could not check setup status, assuming setup complete') } next() }) }, }) // https://vitejs.dev/config/ export default defineConfig({ plugins: [react(), setupCheckPlugin()], resolve: { alias: { '@': path.resolve(__dirname, './src'), }, }, build: { outDir: 'dist', emptyOutDir: true, }, server: { port: 3000, proxy: { '/api': { target: 'http://localhost:8080', changeOrigin: true, }, }, }, })