- 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.
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
-
Contenu non trouvé : Le contenu privé n'est pas stocké
- Log :
Stored private content not found for article - Action : Vérifier le stockage local
- Log :
-
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
- Log :
-
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
- Log :
-
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
- Log :
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'articleauthor: Clé publique de l'auteurrecipient: Clé publique du destinatairemessage: ID du message privé envoyéamount: Montant du paiement en satsverified: Statut de vérification (true/false)timestamp: Timestamp Unixzap_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