Instalação
Início Rápido
Modo self-hosted (traga seu próprio provedor)
l402.Options
| Campo | Tipo | Padrão | Descrição |
|---|---|---|---|
PriceSats | int | obrigatório | Preço por chamada em satoshis |
Lightning | LightningProvider | obrigatório | Seu backend Lightning (use NewBlinkProvider) |
OnPayment | func(L402Token, int) | — | Callback disparado após cada pagamento verificado |
l402.Middleware(opts Options, next http.Handler) http.Handler
Retorna um http.Handler compatível com net/http, Chi, Gorilla Mux e qualquer framework HTTP padrão do Go.
Comportamento
| Requisição | Resposta |
|---|---|
Sem cabeçalho Authorization | 402 + WWW-Authenticate: L402 macaroon="...", invoice="lnbc..." |
L402 <macaroon>:<preimage> válido | next.ServeHTTP(w, r) |
| Token inválido ou expirado | 401 Unauthorized |
| preimage repetido | 401 Token already used |
Corpo da resposta 402
Interface LightningProvider
Callback OnPayment
Verificação
SHA256(preimage) == paymentHash é verificado localmente em memória — sub-milissegundo, sem chamada de rede no caminho crítico. A expiração do token (campo exp no macaroon) é verificada na mesma operação.
O guard de replay usa um mapa em memória por padrão (seguro para um único processo). Para implantações multi-instância, utilize um armazenamento compartilhado (Redis ou similar) — o que adiciona uma latência de ida e volta de 5–50 ms por requisição verificada.
Exemplo com roteador Chi
l402.Middleware retorna um http.Handler padrão, portanto funciona diretamente com o r.Handle do Chi:
Códigos de erro
| Status | Significado |
|---|---|
402 | Nenhum token de pagamento — pague a invoice |
401 | Token inválido ou macaroon expirado |
401 | Token repetido (preimage já utilizado) |