story-research-zapwall/features/priority1-implementation.md
2025-12-22 09:48:57 +01:00

2.9 KiB

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é :

{
  "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