diff --git a/apps/web/src/services/api/client.ts b/apps/web/src/services/api/client.ts index 77119063e..50795d399 100644 --- a/apps/web/src/services/api/client.ts +++ b/apps/web/src/services/api/client.ts @@ -1421,15 +1421,17 @@ apiClient.interceptors.response.use( return apiClient(originalRequest); }) .catch((err) => { - const errStatus = (err as { response?: { status?: number } })?.response?.status; + const errAny = err as { response?: { status?: number }; code?: number }; + const errStatus = errAny?.response?.status ?? errAny?.code; const errUrl = originalRequest?.url ?? ''; - const isWebhooks5xx = errStatus && errStatus >= 500 && errUrl.includes('/webhooks'); - const logFn = isWebhooks5xx ? logger.debug : logger.error; - logFn('[API] Queued request failed after refresh', { - request_id: requestId, - url: originalRequest?.url, - error: err, - }); + const isWebhooks5xx = errStatus != null && errStatus >= 500 && errUrl.includes('/webhooks'); + if (!isWebhooks5xx) { + logger.error('[API] Queued request failed after refresh', { + request_id: requestId, + url: originalRequest?.url, + error: err, + }); + } return Promise.reject(err); }); } @@ -1951,21 +1953,22 @@ apiClient.interceptors.response.use( } // FIX #18, #22: Utiliser logger structuré avec request_id pour corrélation - // 5xx sur /webhooks = erreur backend, éviter le bruit console (DEBUG) + // 5xx sur /webhooks = erreur backend, ne pas logger (éviter bruit console) const httpStatus = error.response?.status; const url = originalRequest?.url ?? ''; const isWebhooks5xx = httpStatus && httpStatus >= 500 && url.includes('/webhooks'); - const logFn = isWebhooks5xx ? logger.debug : logger.error; - logFn(`[API Error] ${apiError.message}`, { - request_id: apiError.request_id || requestId, - code: apiError.code, - message: apiError.message, - timestamp: apiError.timestamp, - details: apiError.details, - context: apiError.context, - url: originalRequest?.url, - method: originalRequest?.method, - }); + if (!isWebhooks5xx) { + logger.error(`[API Error] ${apiError.message}`, { + request_id: apiError.request_id || requestId, + code: apiError.code, + message: apiError.message, + timestamp: apiError.timestamp, + details: apiError.details, + context: apiError.context, + url: originalRequest?.url, + method: originalRequest?.method, + }); + } return Promise.reject(apiError); }, diff --git a/apps/web/src/services/csrf.ts b/apps/web/src/services/csrf.ts index 9185f19d7..51362c370 100644 --- a/apps/web/src/services/csrf.ts +++ b/apps/web/src/services/csrf.ts @@ -31,9 +31,7 @@ class CSRFService { const msg = error instanceof Error ? error.message : String(error); const isWrongServer = msg.includes('HTML page instead of JSON'); if (isWrongServer) { - logger.debug('CSRF token unavailable (backend may not be running)', { - hint: 'Ensure the Veza backend is running (see VITE_BACKEND_PORT in .env.local)', - }); + // No log: backend not running or wrong server is expected in dev } else { logger.error('Failed to fetch CSRF token', { message: msg }); } diff --git a/apps/web/src/services/webhookService.ts b/apps/web/src/services/webhookService.ts index 2322139da..f8d8bc3e9 100644 --- a/apps/web/src/services/webhookService.ts +++ b/apps/web/src/services/webhookService.ts @@ -27,11 +27,10 @@ export const webhookService = { const err = error as { response?: { status?: number }; code?: number }; const status = err?.response?.status ?? err?.code; const is5xx = typeof status === 'number' && status >= 500; - if (is5xx) { - logger.debug('[Webhooks] Backend error listing webhooks (5xx)', { status }); - } else { + if (!is5xx) { logger.error('[Webhooks] Failed to list webhooks', { error }); } + // 5xx: no log (backend error, avoid console noise) return []; } },