Skip to main content

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.0006,100sats0.0006, 100 sats ≈ 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

El adaptador de replay predeterminado es solo en memoria — se reinicia en cada reinicio del proceso y no funciona entre múltiples instancias del servidor. En producción con más de un proceso (workers de Gunicorn, pods de Kubernetes, cluster de PM2), el mismo preimage puede ser aceptado dos veces.Solución: Establece SUPABASE_URL + SUPABASE_ANON_KEY en tu entorno. El middleware usará automáticamente Supabase como almacén de replay, que es compartido entre todas las instancias.Para Redis: pasa un RedisReplayAdapter explícitamente (consulta el SDK de TypeScript o el SDK de Python).

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:
La extensión de VS Code presenta esto como un panel de Zona de Peligro en la parte inferior del panel — los usuarios deben escribir su dirección Lightning para confirmar, y luego todo el historial de pagos y el acceso Pro se eliminan. La operación usa la clave de servicio de Supabase del lado del servidor; la clave anon no tiene permiso de DELETE.

Manejo de errores

Captura los errores del proveedor antes de que aparezcan como errores 500 sin formato:
Reglas generales:
  • 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 retryAfter al llamador.
Consulta la Referencia de Errores para la lista completa de códigos de error estructurados.

Limitación de tasa

Cada solicitud no autenticada activa createInvoice() 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.
Para FastAPI:

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 proveedorblink.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 Set en memoria — para despliegues de múltiples instancias, reemplázalo por Redis