Installation
Démarrage rapide
Mode auto-hébergé (utilisez votre propre fournisseur)
l402.Options
| Champ | Type | Défaut | Description |
|---|---|---|---|
PriceSats | int | requis | Prix par appel en satoshis |
Lightning | LightningProvider | requis | Votre backend Lightning (utilisez NewBlinkProvider) |
OnPayment | func(L402Token, int) | — | Callback déclenché après chaque paiement vérifié |
l402.Middleware(opts Options, next http.Handler) http.Handler
Retourne un http.Handler compatible avec net/http, Chi, Gorilla Mux, et tout framework HTTP Go standard.
Comportement
| Requête | Réponse |
|---|---|
Pas d’en-tête Authorization | 402 + WWW-Authenticate: L402 macaroon="...", invoice="lnbc..." |
L402 <macaroon>:<preimage> valide | next.ServeHTTP(w, r) |
| Jeton invalide ou expiré | 401 Unauthorized |
| preimage déjà utilisée | 401 Token already used |
Corps de la réponse 402
Interface LightningProvider
Callback OnPayment
Vérification
SHA256(preimage) == paymentHash est vérifié localement en mémoire — sous la milliseconde, sans appel réseau sur le chemin critique. L’expiration du jeton (champ exp dans le macaroon) est vérifiée lors de la même opération.
La protection contre la réutilisation utilise une map en mémoire par défaut (sûre pour un processus unique). Pour les déploiements multi-instances, utilisez un store partagé (Redis ou similaire) — ce qui ajoute un aller-retour de 5 à 50 ms par requête vérifiée.
Exemple avec le routeur Chi
l402.Middleware retourne un http.Handler standard, il fonctionne donc directement avec le r.Handle de Chi :
Codes d’erreur
| Statut | Signification |
|---|---|
402 | Aucun jeton de paiement — payez la facture |
401 | Jeton invalide ou macaroon expiré |
401 | Jeton rejoué (preimage déjà utilisée) |