86 lines
2.9 KiB
Markdown
86 lines
2.9 KiB
Markdown
# 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
|