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

4.2 KiB

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