Instalación
Cargo.toml:
Inicio rápido
La forma más rápida utilizaManagedProvider — no se necesita nodo Lightning, comisión del 0.3%:
LightningProvider — consulta Proveedor personalizado más abajo.
Proveedor personalizado
Options
| Campo | Tipo | Descripción |
|---|---|---|
price_sats | u64 | Precio por llamada en satoshis (requerido) |
lightning | Arc<dyn LightningProvider> | Tu backend de Lightning (requerido) |
on_payment | Option<Box<dyn Fn(L402Token, u64)>> | Callback ejecutado tras cada pago verificado |
Obsoleto: with_address()
Options::with_address(address) fue eliminado en v1.4.0. Usa Options::new(sats, ManagedProvider::new(address)) en su lugar:
l402_middleware(opts: Options)
Devuelve un axum::middleware::Layer compatible con axum 0.8+.
Comportamiento
| Solicitud | Respuesta |
|---|---|
Sin encabezado Authorization | 402 + WWW-Authenticate: L402 macaroon="...", invoice="lnbc..." |
L402 <macaroon>:<preimage> válido | El handler se ejecuta |
| Token inválido o expirado | 401 Unauthorized |
| preimage reutilizado | 401 Token already used |
Cuerpo de la respuesta 402
Callback on_payment
Feature flags
axum-middleware para usar únicamente las funciones de verificación del núcleo sin axum ni reqwest:
Verificación
SHA256(preimage) == paymentHash se verifica localmente usando el crate sha2 — sin llamada de red en la ruta crítica. La expiración del token se comprueba en la misma operación.
Códigos de error
| Estado | Significado |
|---|---|
402 | Sin token de pago — paga la factura |
401 | Token inválido o macaroon expirado |
401 | preimage reutilizado (ya usado) |