const DEFAULT_API_BASE_URL = 'http://localhost:3001' function normalizeBaseUrl(baseUrl) { return (baseUrl || DEFAULT_API_BASE_URL).replace(/\/+$/, '') } function normalizePath(path) { return path.startsWith('/') ? path : `/${path}` } export function buildApiUrl(path) { const baseUrl = normalizeBaseUrl(import.meta.env.VITE_API_BASE_URL) const normalizedPath = normalizePath(path) if (baseUrl.endsWith('/api') && normalizedPath.startsWith('/api/')) { return `${baseUrl}${normalizedPath.slice(4)}` } return `${baseUrl}${normalizedPath}` } export function toUserFacingApiError(error, fallbackMessage) { const rawMessage = `${error?.message ?? ''}`.trim() if (!rawMessage) { return fallbackMessage } if ( rawMessage.includes('Failed to fetch') || rawMessage.includes('NetworkError') || rawMessage.includes('Load failed') ) { return '서버에 연결하지 못했습니다. 잠시 후 다시 시도해 주세요.' } if ( rawMessage.includes('Route ') || rawMessage.includes('not found') || rawMessage.includes('/api/') ) { return '로그인 요청을 처리하지 못했습니다. 잠시 후 다시 시도해 주세요.' } return rawMessage }