export interface EnvConfig { PORT?: string; PROXY_HOST?: string; SERVER_API_URL?: string; SITE_ID?: string; CLAIM_NAME?: string; ACCESS_TOKEN?: string; REFRESH_TOKEN?: string; AUTH_USER_ID?: string; } const defaultConfig: EnvConfig = { PORT: "3000", PROXY_HOST: "", SERVER_API_URL: "", SITE_ID: "", CLAIM_NAME: "Authorization", ACCESS_TOKEN: "access-token", REFRESH_TOKEN: "refresh-token", AUTH_USER_ID: "token-id", }; export function generateEnvConfig(values: Partial): EnvConfig { const filteredValues = Object.entries(values).reduce((acc, [key, value]) => { if (value !== undefined && value !== null) { acc[key as keyof EnvConfig] = value; } return acc; }, {} as Partial); if (!filteredValues.PROXY_HOST) { filteredValues.PROXY_HOST = `http://localhost:${filteredValues.PORT || defaultConfig.PORT}`; } return { ...defaultConfig, ...filteredValues }; } export function getNextConfig(): EnvConfig { const env: Partial = { PORT: process.env.NEXT_PUBLIC_PORT, PROXY_HOST: process.env.NEXT_PUBLIC_PROXY_HOST, SERVER_API_URL: process.env.NEXT_PUBLIC_SERVER_API_URL, SITE_ID: process.env.NEXT_PUBLIC_SITE_ID, CLAIM_NAME: process.env.NEXT_PUBLIC_CLAIM_NAME, ACCESS_TOKEN: process.env.NEXT_PUBLIC_ACCESS_TOKEN, REFRESH_TOKEN: process.env.NEXT_PUBLIC_REFRESH_TOKEN, AUTH_USER_ID: process.env.NEXT_PUBLIC_AUTH_USER_ID, }; return generateEnvConfig(env); } export function getViteConfig(): EnvConfig { const env: Partial = { PORT: import.meta.env.VITE_PORT, PROXY_HOST: import.meta.env.VITE_PROXY_HOST, SERVER_API_URL: import.meta.env.VITE_SERVER_API_URL, SITE_ID: import.meta.env.VITE_SITE_ID, CLAIM_NAME: import.meta.env.VITE_CLAIM_NAME, ACCESS_TOKEN: import.meta.env.VITE_ACCESS_TOKEN, REFRESH_TOKEN: import.meta.env.VITE_REFRESH_TOKEN, AUTH_USER_ID: import.meta.env.VITE_AUTH_USER_ID, }; return generateEnvConfig(env); } export function getConfig(): EnvConfig { return getNextConfig(); }