# Implémentation Priorité 1 **Auteur** : Équipe 4NK ## Objectif Implémenter les fonctionnalités critiques de priorité 1 : 1. Signature distante pour publication d'articles (NIP-46) 2. Génération d'invoice côté auteur lors de la publication ## Modifications ### 1. Génération d'invoice côté auteur **Fichiers modifiés** : - `lib/articlePublisher.ts` : Ajout de la création d'invoice lors de la publication - `lib/payment.ts` : Vérification de l'invoice de l'auteur avant d'en créer une nouvelle **Fonctionnement** : - Lors de la publication, l'auteur crée une facture Lightning via Alby/WebLN - L'invoice est stockée dans les tags de l'événement Nostr (`invoice`, `payment_hash`) - L'invoice est également stockée dans localStorage (pour récupération rapide) - Lors du paiement, le système vérifie d'abord si une invoice existe et n'est pas expirée - Si aucune invoice valide, le lecteur peut en créer une nouvelle **Avantages** : - Meilleure traçabilité (invoice créée par l'auteur) - L'invoice peut être réutilisée par plusieurs lecteurs - L'invoice est visible dans l'événement Nostr (tags) ### 2. Signature distante améliorée **Fichiers modifiés** : - `lib/nostrRemoteSigner.ts` : Amélioration du support de signature - `lib/articlePublisher.ts` : Support optionnel de la clé privée - `components/ArticleEditor.tsx` : Utilisation améliorée **Fonctionnement** : - Si la clé privée est disponible (via NostrConnect), utilisation de la signature directe - Si pas de clé privée, message d'erreur explicite - Préparation pour future implémentation NIP-46 complète **Note** : L'implémentation complète de NIP-46 nécessiterait une connexion WebSocket permanente avec un relay, ce qui est complexe. Pour l'instant, le système fonctionne avec les clés privées fournies par NostrConnect via postMessage. ## Détails techniques ### Invoice dans les tags Nostr Les invoices créées par l'auteur sont stockées dans les tags de l'événement : ``` tags: [ ['invoice', 'lnbc...'], // Invoice BOLT11 ['payment_hash', 'abc123...'], // Payment hash ] ``` ### Stockage local Les invoices sont également stockées dans localStorage avec le contenu privé : ```json { "content": "...", "authorPubkey": "...", "articleId": "...", "invoice": { "invoice": "lnbc...", "paymentHash": "...", "amount": 800, "expiresAt": 1234567890 }, "createdAt": 1234567890 } ``` ## Limitations actuelles 1. **Signature distante** : NIP-46 complet non implémenté (nécessite WebSocket relay) 2. **Stockage invoice** : localStorage côté client (pas accessible entre lecteurs) 3. **Récupération invoice** : Actuellement via localStorage, idéalement depuis les tags de l'événement ## Améliorations futures 1. Parser l'invoice directement depuis les tags de l'événement Nostr 2. Implémenter NIP-46 complet pour la signature distante 3. Utiliser une base de données pour le stockage au lieu de localStorage