story-research-zapwall/features/nip95-endpoints-configuration.md

93 lines
4.2 KiB
Markdown

# Configuration des endpoints NIP-95
## Date
2025-01-27
## Objectif
Permettre aux utilisateurs de configurer les endpoints NIP-95 pour l'upload de médias via une interface utilisateur, avec la possibilité d'ajouter, modifier, activer/désactiver et supprimer des endpoints.
## Motivations
- Résoudre les problèmes de DNS/connectivité en permettant d'utiliser plusieurs endpoints
- Donner aux utilisateurs le contrôle sur les endpoints utilisés
- Faciliter l'ajout de nouveaux endpoints sans modifier le code
- Permettre l'activation/désactivation d'endpoints selon les besoins
## Impacts
- **Utilisateurs** : Peuvent configurer leurs propres endpoints NIP-95 via l'interface
- **Développeurs** : Plus besoin de modifier le code pour ajouter des endpoints
- **Fiabilité** : Possibilité d'avoir plusieurs endpoints de secours activés
## Modifications
### Fichiers créés
- **`pages/settings.tsx`** : Page de configuration des paramètres de l'application
- **`components/Nip95ConfigManager.tsx`** : Composant de gestion des endpoints NIP-95 avec interface complète
### Fichiers modifiés
- **`lib/configStorageTypes.ts`** : Ajout d'un endpoint supplémentaire (`nostrimg.com`) dans `DEFAULT_NIP95_APIS`
- **`components/PageHeader.tsx`** : Ajout d'un lien vers la page Settings dans la navigation
### Fonctionnalités implémentées
#### Interface de gestion des endpoints
- **Affichage de la liste** : Tous les endpoints configurés sont affichés avec leur statut (activé/désactivé), priorité et URL
- **Ajout d'endpoints** : Formulaire pour ajouter de nouveaux endpoints avec validation d'URL
- **Modification d'URL** : Clic sur l'URL pour la modifier directement
- **Activation/Désactivation** : Checkbox pour activer ou désactiver chaque endpoint
- **Gestion de la priorité** : Champ numérique pour définir l'ordre de tentative (plus bas = priorité plus haute)
- **Suppression** : Bouton pour supprimer un endpoint avec confirmation
#### Endpoints par défaut
Les endpoints suivants sont maintenant disponibles par défaut :
1. `https://void.cat/upload` (activé, priorité 1)
2. `https://nostr.build/api/v2/upload` (désactivé, priorité 2)
3. `https://picstr.build/api/v1/upload` (désactivé, priorité 3)
4. `https://nostrcheck.me/api/v1/media` (désactivé, priorité 4)
5. `https://nostrimg.com/api/upload` (désactivé, priorité 5) - **Nouveau**
## 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 migration de données nécessaire (les endpoints par défaut sont créés automatiquement)
## Modalités d'analyse
Pour vérifier que la fonctionnalité fonctionne :
1. **Accéder à la page Settings** :
- Naviguer vers `/settings` depuis le menu de navigation
- Vérifier que la liste des endpoints s'affiche
2. **Tester l'ajout d'un endpoint** :
- Cliquer sur "+ Add Endpoint"
- Entrer une URL valide (ex: `https://example.com/upload`)
- Vérifier que l'endpoint apparaît dans la liste
3. **Tester l'activation/désactivation** :
- Cocher/décocher la checkbox d'un endpoint
- Vérifier que le statut change
- Tester un upload pour vérifier que seuls les endpoints activés sont utilisés
4. **Tester la modification de priorité** :
- Modifier la priorité d'un endpoint
- Vérifier que l'ordre dans la liste change
- Tester un upload pour vérifier l'ordre de tentative
5. **Tester la modification d'URL** :
- Cliquer sur une URL pour la modifier
- Entrer une nouvelle URL et appuyer sur Enter
- Vérifier que l'URL est mise à jour
6. **Tester la suppression** :
- Cliquer sur "Remove" d'un endpoint
- Confirmer la suppression
- Vérifier que l'endpoint disparaît de la liste
## Notes
- Les endpoints sont stockés dans IndexedDB (côté client)
- Les modifications sont persistantes et survivent aux rechargements de page
- Les endpoints sont essayés dans l'ordre de priorité (plus bas = priorité plus haute)
- Seuls les endpoints activés sont utilisés pour les uploads
- Si tous les endpoints activés échouent, une erreur est retournée à l'utilisateur
- La validation d'URL vérifie le format mais pas la disponibilité du service