Instalación
Inicio rápido
Modo autoalojado (trae tu propio proveedor)
l402.Options
| Campo | Tipo | Predeterminado | Descripción |
|---|---|---|---|
PriceSats | int | requerido | Precio por llamada en satoshis |
Lightning | LightningProvider | requerido | Tu backend de Lightning (usa NewBlinkProvider) |
OnPayment | func(L402Token, int) | — | Callback ejecutado después de cada pago verificado |
l402.Middleware(opts Options, next http.Handler) http.Handler
Devuelve un http.Handler compatible con net/http, Chi, Gorilla Mux y cualquier framework HTTP estándar de Go.
Comportamiento
| Solicitud | Respuesta |
|---|---|
Sin encabezado Authorization | 402 + WWW-Authenticate: L402 macaroon="...", invoice="lnbc..." |
L402 <macaroon>:<preimage> válido | next.ServeHTTP(w, r) |
| Token inválido o expirado | 401 Unauthorized |
| preimage reproducido | 401 Token already used |
Cuerpo de respuesta 402
Interfaz LightningProvider
Callback OnPayment
Verificación
SHA256(preimage) == paymentHash se verifica localmente en memoria — sub-milisegundo, sin llamada de red en la ruta crítica. La expiración del token (campo exp en el macaroon) se comprueba en la misma operación.
El guardián de reproducción usa un mapa en memoria por defecto (seguro para un único proceso). Para despliegues con múltiples instancias, utiliza un almacén compartido (Redis o similar) — lo que añade un tiempo de ida y vuelta de 5–50 ms por solicitud verificada.
Ejemplo con router Chi
l402.Middleware devuelve un http.Handler estándar, por lo que funciona directamente con r.Handle de Chi:
Códigos de error
| Estado | Significado |
|---|---|
402 | Sin token de pago — paga la factura |
401 | Token inválido o macaroon expirado |
401 | Token reproducido (preimage ya utilizado) |