- Aucune balance trouvée: vérifier
.env(CT_API_KEY/CT_API_SECRET) et les exports CSV. - CORS depuis pages externes: définir
CORS_ORIGINSdans.env. - OpenAPI non accessible: utiliser
/schema(fallback) dansapi/main.py.
GET /healthzGET /debug/paths- Logs
uvicornen--reload.
Problème : Erreur 500 sur /balances/current due à une incompatibilité signature FastAPI.
Solution : Corrigé l'appel dans api/unified_data.py:22 :
# Avant (cassé)
res = await resolve_current_balances.__wrapped__(source=source, user_id=user_id)
# Après (corrigé)
res = await resolve_current_balances(source, user_id)Problème : /api/market/prices retournait 404.
Solution : Décommenté le router dans api/main.py:96 et ajouté stubs pour imports manquants.
Problème : Utilisateurs bloqués même avec des IDs valides.
Solution : Ajouté bypass mode développement dans api/deps.py :
# Mode développement : bypass de l'autorisation si DEV_OPEN_API=1
dev_mode = os.getenv("DEV_OPEN_API", "0") == "1"
if dev_mode:
logger.info(f"DEV MODE: Bypassing authorization for user: {normalized_user}")
return normalized_userUsage : Démarrer avec DEV_OPEN_API=1 uvicorn api.main:app --port 8080
Problème : FileNotFoundError pour data/users/{user}/secrets.json causant 500 errors.
Solution : Créé système fallback robuste :
config/secrets_example.json: Template avec clés exempleservices/user_secrets.py: Gestionnaire avec fallbacks gracieux- Essaie
data/users/{user}/secrets.json - Fallback sur
config/secrets_example.json - Fallback ultime sur secrets vides avec dev_mode
- Essaie
Problème : Erreurs de type coercion dans modèles Pydantic.
Solution : Ajouté fonction safe_float_conversion() dans api/models.py avec field validators robustes pour tous les champs float.
Problème : Uniformisation endpoints /analytics/* ET /api/analytics/*.
Solution : Double montage dans api/main.py:1781 :
app.include_router(analytics_router)
# Double montage pour uniformiser /api/analytics ET /analytics
app.include_router(analytics_router, prefix="/api")Problème : TypeError "Cannot set properties of null" et rate limiting sur debug token auto-detection.
Symptômes :
- TypeError: Cannot set properties of null (setting 'textContent') ligne 2274
- Rate limiting (429 errors) sur
/debug/api-keys?debug_token=* - 500 errors répétés sur
/api/saxo/positions
Solutions appliquées :
- Null checks DOM dans
updateSaxoStatus():
// Avant (cassé)
countSpan.textContent = 'Aucun portfolio importé';
// Après (corrigé)
if (countSpan) {
countSpan.textContent = 'Aucun portfolio importé';
}- Rate limiting debug token dans
autoDetectDebugToken():
// Ajout rate limiting 1 minute
const lastAttempt = localStorage.getItem('debug_token_detection_last');
const now = Date.now();
if (lastAttempt && (now - parseInt(lastAttempt)) < 60000) {
return; // Skip auto-detection
}
// Délais entre tentatives (1s) et gestion 429 (2s)- Gestion erreurs Saxo API dans
loadSaxoIntegrationStatus():
// Gestion spécifique status codes
if (response.status === 500) {
console.debug('Saxo API endpoint non disponible (500), utilisation fallback');
}
// Fallback graceful avec messages utilisateur appropriésL'ancien TROUBLESHOOTING.md est déprécié au profit de cette page.