Lista de verificación previa al lanzamiento
Revisa esto antes de salir en vivo. Cada elemento enlaza a la sección relevante a continuación.1
Protección contra replay configurada para múltiples instancias
El adaptador predeterminado es solo en memoria. Si ejecutas más de un proceso (workers de Gunicorn, cluster de PM2, Kubernetes), establece
SUPABASE_URL + SUPABASE_ANON_KEY o usa RedisReplayAdapter. Detalles →2
Variables de entorno en el gestor de secretos
Nunca codifiques claves API directamente. Usa
.env localmente y un gestor de secretos en producción. Detalles →3
Existe un endpoint de verificación de estado
Los pings de monitoreo no deben activar la creación de facturas. Agrega una ruta
/health antes de tus rutas de pago. Detalles →4
Las respuestas de error no filtran información interna
Captura los errores del proveedor y devuelve un 503 limpio, no un stack trace. Detalles →
5
El precio es intencional
priceSats debe reflejar valor real. Con 1 sat ≈ 0.06 para un endpoint premium es razonable. No lo establezcas en 0 por accidente.6
Monitoreo de disponibilidad en el endpoint de factura
Monitorea la respuesta 402 (es una respuesta normal, no un error). Herramientas como UptimeRobot admiten expectativas de código de estado personalizadas.
7
Limitación de tasa en la creación de facturas
Cada solicitud no autenticada crea una factura Lightning. Sin limitación de tasa, un atacante puede agotar la cuota de facturas de tu proveedor de forma gratuita. Agrega
express-rate-limit antes de desplegar públicamente. Detalles →Crítico: protección contra replay en producción
Variables de entorno
Nunca codifiques claves directamente. Usa siempre variables de entorno:Registro de pagos (Supabase)
Registra cada pago en Supabase para el panel de la extensión de VS Code y analíticas:Despliegue en Cloudflare Workers
l402-kit se ejecuta en Cloudflare Workers (aislados V8, sin arranque en frío). El almacén de replay en memoria se reinicia por aislado — para APIs de alto tráfico, usa Cloudflare KV o Durable Objects para la protección contra replay.Docker
Eliminación de datos de usuario
Expón un endpoint de eliminación para que los usuarios puedan eliminar permanentemente sus datos. El backend de l402-kit incluye/api/delete-data de forma predeterminada:
Manejo de errores
Captura los errores del proveedor antes de que aparezcan como errores 500 sin formato:- Nunca devuelvas stack traces a los clientes — regístralos del lado del servidor.
- Los tiempos de espera del proveedor (503) son transitorios — es seguro reintentar con retroceso exponencial.
- Los errores de token (401) nunca son transitorios — no reintentes automáticamente, solicita una nueva factura.
- Los errores de límite de tasa (429) — expón el campo
retryAfteral llamador.
Limitación de tasa
Cada solicitud no autenticada activacreateInvoice() en tu proveedor Lightning. Sin limitación de tasa, cualquiera puede saturar tu endpoint y agotar la cuota de API de tu proveedor de forma gratuita — incluso sin pagar un solo sat.
Agrega express-rate-limit antes de tus rutas L402:
Los clientes que ya están pagando son omitidos por la función
skip — el límite solo aplica a las llamadas no autenticadas que activan una nueva factura. Los pagadores legítimos nunca son limitados.Endpoint de verificación de estado
Agrega siempre una verificación de estado gratuita para que las herramientas de monitoreo no activen la creación de facturas:Monitoreo
Métricas clave a seguir:- Tasa de respuestas 402 — la línea base saludable es alta (la mayoría de los llamadores necesitan pagar)
- Tasa de verificación de pagos — proporción de llamadas pagadas vs no pagadas
- Latencia del proveedor —
blink.createInvoice()debe ser < 500ms - Intentos de replay — un pico indica ataques de reutilización de tokens
Rendimiento
- La verificación de tokens es O(1) — criptografía pura, sin base de datos, sin red
- La creación de facturas (ruta 402) llama a la API de tu proveedor Lightning — agrega una caché si esperas que el mismo endpoint sea consultado repetidamente antes del pago
- El almacén de replay es un
Seten memoria — para despliegues de múltiples instancias, reemplázalo por Redis