Installazione
Avvio rapido
Modalità self-hosted (porta il tuo provider)
l402.Options
| Campo | Tipo | Predefinito | Descrizione |
|---|---|---|---|
PriceSats | int | obbligatorio | Prezzo per chiamata in satoshi |
Lightning | LightningProvider | obbligatorio | Il tuo backend Lightning (usa NewBlinkProvider) |
OnPayment | func(L402Token, int) | — | Callback eseguito dopo ogni pagamento verificato |
l402.Middleware(opts Options, next http.Handler) http.Handler
Restituisce un http.Handler compatibile con net/http, Chi, Gorilla Mux e qualsiasi framework HTTP Go standard.
Comportamento
| Richiesta | Risposta |
|---|---|
Nessun header Authorization | 402 + WWW-Authenticate: L402 macaroon="...", invoice="lnbc..." |
L402 <macaroon>:<preimage> valido | next.ServeHTTP(w, r) |
| Token non valido o scaduto | 401 Unauthorized |
| preimage già utilizzato | 401 Token already used |
Corpo della risposta 402
Interfaccia LightningProvider
Callback OnPayment
Verifica
SHA256(preimage) == paymentHash viene verificato localmente in memoria — sub-millisecondo, nessuna chiamata di rete sul percorso critico. La scadenza del token (campo exp nel macaroon) viene controllata nella stessa operazione.
Il controllo anti-replay utilizza una mappa in memoria per impostazione predefinita (sicuro per un singolo processo). Per distribuzioni multi-istanza, utilizza uno store condiviso (Redis o simile) — che aggiunge un round-trip di 5–50 ms per ogni richiesta verificata.
Esempio con router Chi
l402.Middleware restituisce un http.Handler standard, quindi funziona direttamente con r.Handle di Chi:
Codici di errore
| Stato | Significato |
|---|---|
402 | Nessun token di pagamento — paga la fattura |
401 | Token non valido o macaroon scaduto |
401 | Token già utilizzato (preimage già usato) |