import { readFileSync } from 'node:fs' import { fileURLToPath } from 'node:url' import { defineConfig, loadEnv } from 'vite' import react from '@vitejs/plugin-react' // Clerk publishable keys are public. Default to the engine's own key so Express // and learning-lab share one Clerk instance (same users, organizations, credits). function engineClerkKey(): string { try { const env = readFileSync(fileURLToPath(new URL('../learning-lab/backend/.env', import.meta.url)), 'utf8') return env.match(/^VITE_CLERK_PUBLISHABLE_KEY=["']?([^"'\s]+)/m)?.[1] ?? '' } catch { return '' } } export default defineConfig(({ mode }) => { const env = loadEnv(mode, process.cwd(), '') const engineUrl = env.ENGINE_URL || 'http://localhost:8000' const clerkKey = env.VITE_CLERK_PUBLISHABLE_KEY || engineClerkKey() // Learning Studio (learning-lab/frontend), where a result opens in Compose for full editing. const studioUrl = env.VITE_STUDIO_URL || 'http://localhost:5173' return { plugins: [react()], define: { 'import.meta.env.VITE_CLERK_PUBLISHABLE_KEY': JSON.stringify(clerkKey), 'import.meta.env.VITE_STUDIO_URL': JSON.stringify(studioUrl), }, // Same-origin /api keeps the engine free of CORS setup, as in production behind one domain. server: { port: 5174, proxy: { '/api': { target: engineUrl, changeOrigin: true } } }, preview: { port: 5174, proxy: { '/api': { target: engineUrl, changeOrigin: true } } }, } })