4.5 KiB
4.5 KiB
Documentation technique – zapwall4science (Dec 2025)
1) Cartographie services/hooks/types (responsabilités, dépendances)
- Services Nostr
lib/nostr.ts: pool SimplePool, publish générique, clés locales; queries article.lib/nostrEventParsing.ts: parsing events → Article/Series/Review (tags kind_type, series, media, banner).lib/nostrTags.ts: construction des tags article/série/avis (site, type science-fiction/research, kind_type, media/bannière).lib/seriesQueries.ts,lib/articleQueries.ts,lib/reviews.ts: fetch séries, articles par série, critiques.lib/articlePublisher.ts,lib/articleMutations.ts: publication article/preview/presentation, update/delete, kind_type, séries, médias, bannière.lib/seriesAggregation.ts,lib/reviewAggregation.ts,lib/zapAggregation.ts: agrégats sponsoring/achats/remerciements.lib/zapVerification.ts: vérification zap receipts (verifyEvent).lib/nostrconnect.ts: Nostr Connect (handler, sécurité).lib/nostrRemoteSigner.ts: signature distante (pas de fallback silencieux).lib/nip95.ts: upload médias NIP-95 (images ≤5Mo, vidéos ≤45Mo, types restreints).
- Paiement / Lightning
lib/alby.ts: WebLN (enable, makeInvoice, sendPayment).lib/payment.ts,lib/paymentPolling.ts: statut paiements, polling.lib/articleInvoice.ts: facture article (zapAmount, expiry), tags preview.
- Stockage
lib/storage/cryptoHelpers.ts: AES-GCM, dérivation/import clé, conversions b64.lib/storage/indexedDB.ts: set/get/delete/clearExpired chiffré, TTL.lib/articleStorage.ts: clé maître locale (base64), secret par article, persistance contenu privé + facture.
- Hooks
hooks/useArticles.ts,hooks/useUserArticles.ts: subscriptions articles, filtres catégorie, unsubscribe direct (pas de .then).hooks/useArticleEditing.ts: édition/suppression article.- Autres :
useNotificationCenter,useNostrConnect, etc.
- Types
types/nostr.ts: Article, Series, Review, MediaRef, KindType, catégories; exactOptionalPropertyTypes respecté.types/nostr-tools-extended.ts: extensions SimplePool/Sub.types/alby.ts: WebLNProvider, invoice types.
2) Guide Nostr (publication, update/delete, zap, remote signer)
- Publication générique :
nostrService.publishEvent(eventTemplate)(signEvent, created_at contrôlé). - Article :
articlePublisher.publishArticle(preview + tags kind_type/site/category/series/banner/media), contenu privé chiffré stocké. - Update article :
publishArticleUpdate(lib/articleMutations.ts) tagse(original) +replace, publie preview + contenu privé chiffré. - Delete article :
deleteArticleEvent(kind 5, tag e) — erreurs remontées, pas de fallback. - Série :
publishSeries(kind 1, tags kind_type=series, cover, description). - Avis :
publishReview(kind 1, kind_type=review, article/series/author tags). - Zap verification :
lib/zapVerification.ts(verifyEvent). - Agrégats :
aggregateZapSats/getSeriesAggregates/getReviewTipsForArticle. - Remote signer :
lib/nostrRemoteSigner.ts(clé fournie), sans valeurs de repli implicites.
3) Guide Stockage
- Chiffrement :
cryptoHelpers(AES-GCM), entrée BufferSource conforme Web Crypto. - IndexedDB :
storage/indexedDB.tsstocke{ iv, ciphertext, expiresAt }, purgeclearExpired. - Secret :
articleStoragegénère clé maître (localStorage, base64, 32 bytes) puis secret<master>:<articleId>. - Données : contenu privé + facture, TTL 30 jours, suppression via
removeStoredPrivateContent.
4) Guide Paiements
- WebLN/Alby :
lib/alby.ts(enable, makeInvoice, sendPayment). - Facture article :
createArticleInvoice(zapAmount, expiry). - Publication article :
articlePublishergère preview event + stockage contenu privé. - Polling / vérif :
paymentPolling.ts,payment.ts; agrégats via zap receipts (zapAggregation.ts). - Envoi contenu privé : via publisher/mutations après paiement confirmé.
5) Médias / NIP-95
- Upload via
uploadMedia(file)(URLNEXT_PUBLIC_NIP95_UPLOAD_URL), validation type/taille. - Utilisation dans
MarkdownEditor(insertion markdown), bannière dans ArticleDraft.
6) Contrib (référence rapide)
- Lint/typage obligatoires (
npm run lint,npm run type-check). - Pas de tests/analytics ajoutés.
- Pas de fallback implicite, pas de
ts-ignore/anynon justifié. - Accessibilité : ARIA/clavier/contraste.
- Documentation : corrections dans
fixKnowledge/, features dansfeatures/.