story-research-zapwall/fixKnowledge/nip95-upload-500-error.md
Nicolas Cantu 065ab30828 Fix: favicon 404 error and NIP-95 upload 500 error
**Motivations:**
- Corriger l'erreur 404 pour favicon.ico demandé par les navigateurs
- Corriger l'erreur 500 de l'API NIP-95 upload empêchant les uploads de fichiers

**Root causes:**
- Fichier favicon.ico manquant dans public/ causant des erreurs 404 répétées
- Incompatibilité entre form-data (npm) et fetch() natif de Node.js dans l'API NIP-95

**Correctifs:**
- Ajout de favicon.svg et mise à jour des références dans les pages
- Remplacement de fetch() par https/http natifs de Node.js dans nip95-upload.ts
- Amélioration de la gestion des erreurs et nettoyage des fichiers temporaires

**Evolutions:**
- Documentation des problèmes et solutions dans fixKnowledge/

**Pages affectées:**
- components/HomeView.tsx
- pages/docs.tsx
- pages/presentation.tsx
- pages/api/nip95-upload.ts
- features/account-creation-buttons-separation.md
- fixKnowledge/favicon-404-error.md (nouveau)
- fixKnowledge/nip95-upload-500-error.md (nouveau)
- public/favicon.svg (nouveau)
2026-01-05 01:34:55 +01:00

64 lines
3.1 KiB
Markdown

# Problème : API NIP-95 upload retourne 500
## Date
2025-01-27
## Problème
L'endpoint API `/api/nip95-upload` retournait une erreur 500 lors des tentatives d'upload de fichiers via NIP-95.
## Symptômes
- Erreur 500 lors des appels à `/api/nip95-upload?endpoint=https://void.cat/upload`
- Console navigateur : `Failed to load resource: the server responded with a status of 500 ()`
- Console navigateur : `NIP-95 upload endpoint error: Object`
- Les uploads NIP-95 échouaient systématiquement
## Root cause
Le package npm `form-data` n'est pas compatible avec `fetch()` natif de Node.js (Node 18+). L'API utilisait `form-data` de npm avec `fetch()` natif, ce qui causait une incompatibilité car :
- `form-data` (npm) utilise des streams Node.js natifs et l'API `getHeaders()` pour obtenir les headers avec le boundary
- `fetch()` natif de Node.js attend le FormData du web standard (disponible dans le navigateur), pas le package npm `form-data`
- Cette incompatibilité provoquait une erreur lors de l'exécution de la requête HTTP
## Impact
- Impossible d'uploader des fichiers via NIP-95
- Les utilisateurs ne pouvaient pas publier d'articles avec des médias
- Fonctionnalité d'upload complètement non fonctionnelle
## Correctifs
1. Remplacement de `fetch()` natif par les modules natifs `https` et `http` de Node.js
2. Utilisation de `form-data.pipe()` pour envoyer les données via les modules natifs
3. Gestion correcte des erreurs et nettoyage des fichiers temporaires dans tous les cas
## Modifications
- **Fichier modifié** : `pages/api/nip95-upload.ts`
- **Imports ajoutés** :
```typescript
import https from 'https'
import http from 'http'
import { URL } from 'url'
```
- **Imports supprimés** :
```typescript
import { Readable } from 'stream' // Non utilisé
```
- **Remplacement de fetch()** : Utilisation de `https.request()` ou `http.request()` selon le protocole de l'URL cible
- **Gestion des erreurs améliorée** : Nettoyage des fichiers temporaires même en cas d'erreur de requête
- **Gestion des streams** : Utilisation de `formData.pipe(proxyRequest)` pour envoyer les données
## Modalités de déploiement
1. Les modifications sont dans le code source
2. Rebuild de l'application : `npm run build`
3. Redémarrage du service Next.js
4. Aucune dépendance supplémentaire nécessaire (utilisation des modules natifs Node.js)
## Modalités d'analyse
Pour vérifier si le problème existe :
1. Vérifier les logs du serveur pour les erreurs liées à `form-data` ou `fetch`
2. Tester l'upload via l'interface utilisateur
3. Vérifier les logs de la console navigateur pour les erreurs 500
4. Vérifier que `form-data` (npm) est utilisé avec `https`/`http` natif, pas avec `fetch()`
## Notes
- Le package `form-data` (npm) doit être utilisé avec les modules `https`/`http` natifs de Node.js, pas avec `fetch()`
- `fetch()` natif de Node.js est compatible avec FormData du web standard (disponible dans le navigateur), pas avec le package npm `form-data`
- Les fichiers temporaires créés par formidable doivent être nettoyés même en cas d'erreur pour éviter l'accumulation de fichiers