Files
cardy/server-fe/vite.config.ts
T
2026-09-29 13:50:01 +03:00

44 lines
1.7 KiB
TypeScript

import react from '@vitejs/plugin-react';
import { defineConfig, loadEnv, type ProxyOptions } from 'vite';
// Behind the real reverse proxy /api never reaches this server. The /api proxy below only emulates
// that reverse proxy for local development without it (strips /api, sets X-Forwarded-Prefix).
//
// Env (server-fe/.env or process env):
// ALLOWED_HOSTS comma-separated public host names (default dev.aggtaa.com)
// BACKEND_URL local dev: server-be address (default http://127.0.0.1:10002)
// ADMIN_PROXY_SECRET local dev: sent as X-Cardy-Proxy-Secret, must match server-be
// DEV_REMOTE_EMAIL local dev: fakes the Remote-Email header normally set by Authelia
export default defineConfig(({ mode }) => {
const env = loadEnv(mode, process.cwd(), '');
const headers: Record<string, string> = { 'X-Forwarded-Prefix': '/api' };
if (env.ADMIN_PROXY_SECRET) headers['X-Cardy-Proxy-Secret'] = env.ADMIN_PROXY_SECRET;
if (env.DEV_REMOTE_EMAIL) {
headers['Remote-Email'] = env.DEV_REMOTE_EMAIL;
console.warn(`\n⚠ DEV_REMOTE_EMAIL is set: every request acts as ${env.DEV_REMOTE_EMAIL}. Never use it behind the real proxy.\n`);
}
const proxy: Record<string, ProxyOptions> = {
'/api': {
target: env.BACKEND_URL || 'http://127.0.0.1:10002',
rewrite: (path) => path.replace(/^\/api/, '') || '/',
headers,
},
};
const server = {
host: true,
port: 10001,
strictPort: true,
allowedHosts: (env.ALLOWED_HOSTS || 'dev.aggtaa.com').split(',').map((h) => h.trim()),
proxy,
};
return {
plugins: [react()],
// bwip-js alone is ~1 MB; it is lazy-loaded.
build: { chunkSizeWarningLimit: 1100 },
server,
preview: server,
};
});