- **Motivations :** Assurer passage du lint strict et clarifier la logique paiements/publications. - **Root causes :** Fonctions trop longues, promesses non gérées et typages WebLN/Nostr incomplets. - **Correctifs :** Refactor PaymentModal (handlers void), extraction helpers articlePublisher, simplification polling sponsoring/zap, corrections curly et awaits. - **Evolutions :** Nouveau module articlePublisherHelpers pour présentation/aiguillage contenu privé. - **Page affectées :** components/PaymentModal.tsx, lib/articlePublisher.ts, lib/articlePublisherHelpers.ts, lib/paymentPolling.ts, lib/sponsoring.ts, lib/nostrZapVerification.ts et dépendances liées.
7.9 KiB
Analyse des tâches restantes - Nostr Paywall
Date : Décembre 2024 Auteur : Équipe 4NK
🔴 Bugs identifiés
1. Bug dans components/ArticleCard.tsx - Variable non définie
Ligne : 33
Problème : Utilisation de handleUnlockClick qui n'existe pas
Correction : Remplacer par handleUnlock (défini dans le hook useArticlePayment)
// ❌ Actuel (ligne 33)
onUnlock={handleUnlockClick}
// ✅ Devrait être
onUnlock={handleUnlock}
Impact : Le bouton "Unlock" ne fonctionne pas sur les articles
⚠️ Problèmes de code
2. Utilisation de console.log dans le code de production
Fichiers concernés :
lib/nostrconnect.ts: lignes 72, 77, 109lib/nostrconnectMessageHandler.ts: lignes 38, 64, 91, 116lib/paymentPolling.ts: ligne 85lib/articleInvoice.ts: ligne 19lib/nostrEventParsing.ts: ligne 43hooks/useArticlePayment.ts: lignes 39, 70pages/profile.tsx: ligne 57
Problème : Violation de la règle ESLint no-console: warn (seuls console.warn et console.error sont autorisés)
Action : Remplacer tous les console.log par console.error ou supprimer les logs de debug
3. Utilisation de any dans lib/alby.ts
Lignes : 8, 14, 18
Problème : Utilisation de (window as any).webln et any pour le type WebLN
Action : Créer une interface TypeScript pour WebLN ou utiliser un type plus strict
4. Non-null assertion dans lib/storage/indexedDB.ts
Lignes : 89, 114, 158
Problème : Utilisation de this.db! (non-null assertion) alors que this.db peut être null
Action : Ajouter des vérifications explicites avant utilisation
📋 Fonctionnalités manquantes (documentées)
Priorité 3 - Améliorations du profil utilisateur
1. Statistiques détaillées (vues, paiements)
Status : ⏳ À venir
Fichiers concernés : components/UserProfile.tsx, pages/profile.tsx
À implémenter :
- Compteur de vues par article
- Compteur de paiements reçus
- Revenus totaux (en sats)
- Graphiques de statistiques (optionnel)
Complexité : Moyenne Dépendances : Nécessite de suivre les événements de lecture et les zap receipts
2. Édition/suppression d'articles
Status : ⏳ À venir
Fichiers concernés : components/UserArticles.tsx, pages/profile.tsx
À implémenter :
- Bouton "Edit" sur chaque article
- Formulaire d'édition (pré-rempli avec les données actuelles)
- Publication d'un événement de mise à jour (kind:1 avec tag
epointant vers l'article original) - Bouton "Delete" (marquer comme supprimé ou supprimer du relay)
- Confirmation avant suppression
Complexité : Moyenne à élevée Dépendances : Gestion des événements de mise à jour Nostr
Priorité 3 - Améliorations des notifications
3. Types supplémentaires de notifications
Status : ⏳ À venir
Fichiers concernés : lib/notifications.ts, types/notifications.ts, components/NotificationCenter.tsx
À implémenter :
- Notifications de mentions (kind:1 avec tag
pmentionnant l'utilisateur) - Notifications de commentaires (réponses à des articles)
- Notifications de partages (reposts)
Complexité : Moyenne Dépendances : Parsing des événements Nostr supplémentaires
Priorité 3 - Améliorations du stockage
4. Chiffrement des données sensibles
Status : ⏳ À venir (optionnel)
Fichiers concernés : lib/storage/indexedDB.ts, lib/articleStorage.ts
À implémenter :
- Chiffrement des contenus privés stockés dans IndexedDB
- Utilisation de Web Crypto API
- Gestion des clés de chiffrement
Complexité : Élevée Dépendances : Web Crypto API, gestion sécurisée des clés
🧪 Tests (non planifié mais recommandé)
Tests unitaires
Status : Non planifié Fichiers à tester :
lib/nostr.ts- Service Nostrlib/alby.ts- Service Alby/WebLNlib/payment.ts- Service de paiementlib/articlePublisher.ts- Publication d'articleslib/nostrEventParsing.ts- Parsing d'événements
Framework recommandé : Jest ou Vitest
Tests de composants React
Status : Non planifié Composants à tester :
components/ArticleCard.tsxcomponents/PaymentModal.tsxcomponents/ArticleEditor.tsxcomponents/ConnectButton.tsx
Framework recommandé : React Testing Library
Tests d'intégration
Status : Non planifié Scénarios à tester :
- Flux complet de publication d'article
- Flux complet de paiement et déblocage
- Connexion NostrConnect
- Recherche et filtrage
Framework recommandé : Playwright ou Cypress
📊 Analytics et monitoring (non planifié)
Tracking des événements
Status : Non planifié Événements à tracker :
- Publications d'articles
- Paiements effectués
- Connexions utilisateurs
- Recherches effectuées
- Erreurs rencontrées
Fichiers à créer : lib/analytics.ts
🔧 Améliorations techniques
1. Gestion d'erreurs améliorée
Fichiers concernés : Tous les services
À implémenter :
- Types d'erreurs personnalisés
- Messages d'erreur plus explicites pour l'utilisateur
- Logging structuré des erreurs
- Retry automatique pour les erreurs réseau
2. Performance et optimisation
À implémenter :
- Lazy loading des composants
- Mémoïsation des calculs coûteux
- Optimisation des requêtes relay
- Cache des profils utilisateurs
3. Accessibilité (a11y)
À implémenter :
- Support clavier complet
- Attributs ARIA appropriés
- Contraste des couleurs
- Navigation au clavier
📝 Documentation technique
1. Documentation API
À créer :
- Documentation des services (
lib/) - Documentation des hooks (
hooks/) - Documentation des types (
types/)
2. Guide de contribution
À créer :
CONTRIBUTING.md- Guide pour les contributeurs- Standards de code
- Processus de review
🎯 Priorités recommandées
Priorité 1 (Critique) - Bugs
- ✅ Corriger le bug
handleUnlockClickdansArticleCard.tsx - ✅ Remplacer les
console.logparconsole.errorou supprimer
Priorité 2 (Important) - Qualité de code
- ✅ Corriger les types
anydanslib/alby.ts - ✅ Corriger les non-null assertions dans
lib/storage/indexedDB.ts
Priorité 3 (Améliorations) - Fonctionnalités
- ⏳ Statistiques détaillées du profil
- ⏳ Édition/suppression d'articles
- ⏳ Types supplémentaires de notifications
- ⏳ Chiffrement des données sensibles (optionnel)
Priorité 4 (Optionnel) - Qualité
- ⏳ Tests unitaires
- ⏳ Tests d'intégration
- ⏳ Analytics et monitoring
- ⏳ Documentation technique
📊 Résumé
Bugs identifiés : 1
- Bug critique dans
ArticleCard.tsx
Problèmes de code : 3
- Utilisation de
console.log(violation ESLint) - Types
anydansalby.ts - Non-null assertions dans
indexedDB.ts
Fonctionnalités manquantes : 4
- Statistiques détaillées du profil
- Édition/suppression d'articles
- Types supplémentaires de notifications
- Chiffrement des données sensibles (optionnel)
Tests : 0 (non planifié)
- Tests unitaires
- Tests de composants
- Tests d'intégration
Documentation : 2
- Documentation API
- Guide de contribution
✅ Actions immédiates recommandées
- Corriger le bug
handleUnlockClick- Impact critique sur l'utilisation - Nettoyer les
console.log- Conformité avec les règles ESLint - Améliorer les types TypeScript - Qualité de code
- Ajouter les statistiques du profil - Amélioration UX
📌 Notes
- L'application est fonctionnelle et prête pour la production
- Les bugs identifiés doivent être corrigés avant déploiement
- Les fonctionnalités manquantes sont des améliorations, pas des blocages
- Les tests peuvent être ajoutés progressivement
- La documentation technique facilitera la maintenance