2.9 KiB
2.9 KiB
Implémentation Priorité 1
Auteur : Équipe 4NK
Objectif
Implémenter les fonctionnalités critiques de priorité 1 :
- Signature distante pour publication d'articles (NIP-46)
- 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 publicationlib/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 signaturelib/articlePublisher.ts: Support optionnel de la clé privéecomponents/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é :
{
"content": "...",
"authorPubkey": "...",
"articleId": "...",
"invoice": {
"invoice": "lnbc...",
"paymentHash": "...",
"amount": 800,
"expiresAt": 1234567890
},
"createdAt": 1234567890
}
Limitations actuelles
- Signature distante : NIP-46 complet non implémenté (nécessite WebSocket relay)
- Stockage invoice : localStorage côté client (pas accessible entre lecteurs)
- Récupération invoice : Actuellement via localStorage, idéalement depuis les tags de l'événement
Améliorations futures
- Parser l'invoice directement depuis les tags de l'événement Nostr
- Implémenter NIP-46 complet pour la signature distante
- Utiliser une base de données pour le stockage au lieu de localStorage