story-research-zapwall/docs/content-delivery-verification.md
Nicolas Cantu f7bd7faa73 fix: Correction erreurs TypeScript, nettoyage et réorganisation documentation
- Correction toutes erreurs TypeScript :
  - Variables non utilisées supprimées
  - Types optionnels corrigés (exactOptionalPropertyTypes)
  - Imports corrigés (PLATFORM_BITCOIN_ADDRESS depuis platformConfig)
  - Gestion correcte des propriétés optionnelles

- Suppression fichiers obsolètes :
  - code-cleanup-summary.md (redondant)
  - todo-implementation*.md (todos obsolètes)
  - corrections-completed.md, fallbacks-found.md (corrections faites)
  - implementation-summary.md (redondant)
  - documentation-plan.md (plan, pas documentation)

- Suppression scripts temporaires :
  - add-ssh-key.sh
  - add-ssh-key-plink.sh

- Réorganisation documentation dans docs/ :
  - architecture.md (nouveau)
  - commissions.md (nouveau)
  - implementation-summary.md
  - remaining-tasks.md
  - split-and-transfer.md
  - commission-system.md
  - commission-implementation.md
  - content-delivery-verification.md

Toutes erreurs TypeScript corrigées, documentation centralisée.
2025-12-27 21:25:19 +01:00

4.9 KiB

Vérification de l'envoi du contenu privé

Auteur : Équipe 4NK

Objectif

Garantir que le contenu privé est bien envoyé au destinataire après confirmation du paiement.

Système de vérification multi-niveaux

1. Publication sur le relay Nostr

Lors de l'envoi du contenu privé :

  • Le message est chiffré avec NIP-04 (chiffrement entre l'auteur et le destinataire)
  • L'événement est publié sur le relay Nostr (kind: 4)
  • L'ID de l'événement est retourné pour traçabilité

Vérification : publishEvent() retourne l'événement publié avec son ID unique.

2. Vérification sur le relay

Après publication, le système vérifie que le message est bien présent sur le relay :

  • Requête au relay avec l'ID du message
  • Filtrage par auteur, destinataire et article
  • Timeout de 5 secondes pour la vérification

Vérification : verifyPrivateMessagePublished() confirme la présence du message sur le relay.

3. Logs structurés

Tous les événements sont journalisés avec :

  • ID du message
  • ID de l'article
  • Clé publique du destinataire
  • Clé publique de l'auteur
  • Timestamp ISO
  • Statut de vérification

Traçabilité : Les logs permettent de suivre chaque envoi et de diagnostiquer les problèmes.

Garanties d'envoi

Niveau 1 : Publication réussie

  • L'événement est signé et publié
  • L'ID du message est retourné
  • Le message est visible sur le relay

Niveau 2 : Vérification sur relay

  • Le message est retrouvé sur le relay avec les bons filtres
  • Les tags correspondent (auteur, destinataire, article)
  • Le message est accessible

Niveau 3 : Récupération par le destinataire

  • Le destinataire peut récupérer le message avec sa clé privée
  • Le message est déchiffrable
  • Le contenu correspond à l'article

Points de contrôle

1. Avant l'envoi

  • Vérification que le contenu privé est stocké
  • Vérification que la clé privée de l'auteur est disponible
  • Vérification que le paiement est confirmé (zap receipt)

2. Pendant l'envoi

  • Chiffrement du contenu avec NIP-04
  • Création de l'événement avec les bons tags
  • Publication sur le relay

3. Après l'envoi

  • Vérification que l'événement est publié
  • Vérification que le message est sur le relay
  • Logs de confirmation

Gestion des erreurs

Erreurs possibles

  1. Contenu non trouvé : Le contenu privé n'est pas stocké

    • Log : Stored private content not found for article
    • Action : Vérifier le stockage local
  2. Clé privée indisponible : La clé de l'auteur n'est pas disponible

    • Log : Author private key not available
    • Action : Vérifier la connexion Nostr
  3. Publication échouée : L'événement n'a pas pu être publié

    • Log : Failed to publish private message event
    • Action : Vérifier la connexion au relay
  4. Vérification échouée : Le message n'est pas sur le relay

    • Log : Private message not found on relay
    • Action : Réessayer ou vérifier la connexion

Traçabilité

Logs locaux (console navigateur)

Chaque envoi génère des logs avec :

  • messageEventId : ID unique du message sur Nostr
  • articleId : ID de l'article concerné
  • recipientPubkey : Clé publique du destinataire
  • authorPubkey : Clé publique de l'auteur
  • timestamp : Date et heure ISO de l'événement
  • verified : Statut de vérification sur le relay

Événements de tracking sur Nostr

Pour que la plateforme puisse suivre tous les envois, chaque envoi de contenu génère un événement de tracking publié sur Nostr :

  • Kind : 30078 (événement de tracking personnalisé)
  • Auteur : L'auteur de l'article (qui envoie le contenu)
  • Tag p : La clé publique de la plateforme (pour requêter tous les événements)
  • Tags :
    • article : ID de l'article
    • author : Clé publique de l'auteur
    • recipient : Clé publique du destinataire
    • message : ID du message privé envoyé
    • amount : Montant du paiement en sats
    • verified : Statut de vérification (true/false)
    • timestamp : Timestamp Unix
    • zap_receipt : ID du zap receipt (si disponible)
  • Content : JSON avec toutes les informations de tracking

La plateforme peut interroger tous ces événements en filtrant par #p avec sa clé publique pour obtenir une vue complète de tous les envois de contenu.

Utilisation

Pour l'auteur

L'auteur peut vérifier que son contenu a bien été envoyé en consultant les logs de la console du navigateur.

Pour la plateforme

La plateforme peut suivre tous les envois via les logs structurés et identifier les problèmes de livraison.

Pour le destinataire

Le destinataire peut récupérer le contenu via getPrivateContent() qui interroge le relay Nostr.

Améliorations futures

  • Système de notification pour l'auteur en cas d'échec
  • Retry automatique en cas d'échec de publication
  • Dashboard de suivi des envois pour les auteurs
  • Confirmation de réception par le destinataire