Skip to Content
WorkerIntroducción

Cloudflare Worker

apps/worker es el servidor de la aplicación. Corre en Cloudflare Workers (edge runtime) y expone todos los endpoints que requieren lógica de servidor: autenticación, reservaciones, pagos y emails.


Por qué un Worker separado

apps/web usa output: "export" — genera HTML/CSS/JS estático sin servidor Node. Esto significa que no puede tener API Routes ni middleware. Todo lo que requiere acceso a base de datos, secretos o servicios externos vive en el Worker.


Stack

HerramientaRol
HonoRouter HTTP para Workers
@supabase/supabase-jsBase de datos (admin client con service role key)
resendEnvío de emails transaccionales
Web Crypto APIJWT (HMAC-SHA256) y hashing de contraseñas (PBKDF2), nativo en Workers

Estructura

apps/worker/ ├── src/ │ ├── index.ts # Punto de entrada, router principal, CORS │ ├── auth.ts # JWT sign/verify + PBKDF2 hash/verify (Web Crypto API) │ ├── supabase.ts # Inicializa cliente admin de Supabase │ ├── email.ts # Envío de emails con Resend │ ├── types.ts # Tipos compartidos + interface Env │ └── routes/ │ ├── auth.ts # POST /auth/signup, POST /auth/signin │ ├── reservations.ts # CRUD de reservaciones │ └── paypal.ts # Crear y capturar órdenes PayPal ├── wrangler.toml # Configuración de Cloudflare Workers ├── package.json └── tsconfig.json

Endpoints

MétodoRutaAuthDescripción
GET/healthNoHealth check
POST/auth/signupNoRegistro de usuario
POST/auth/signinNoInicio de sesión
GET/api/reservationsLista reservaciones del usuario
POST/api/reservationsCrea reservación
GET/api/reservations/check?slug=Verifica reservación activa
PATCH/api/reservations/:idActualiza estado
POST/api/paypal/create-orderCrea orden PayPal
POST/api/paypal/capture-orderCaptura pago + envía email

Los endpoints marcados con requieren Authorization: Bearer <token> en el header.


Desarrollo local

pnpm --filter @asamamx/worker dev # Worker disponible en http://localhost:8787

Wrangler sirve el worker localmente con hot reload. Las variables de entorno en desarrollo se leen de apps/worker/.dev.vars (no versionado).

.dev.vars de ejemplo

JWT_SECRET= SUPABASE_URL= SUPABASE_SECRET_KEY= PAYPAL_CLIENT_ID= PAYPAL_CLIENT_SECRET= RESEND_API_KEY=

Deploy a producción

# Configurar secrets (una sola vez) pnpm --filter @asamamx/worker exec wrangler secret put JWT_SECRET pnpm --filter @asamamx/worker exec wrangler secret put SUPABASE_URL pnpm --filter @asamamx/worker exec wrangler secret put SUPABASE_SECRET_KEY pnpm --filter @asamamx/worker exec wrangler secret put PAYPAL_CLIENT_ID pnpm --filter @asamamx/worker exec wrangler secret put PAYPAL_CLIENT_SECRET pnpm --filter @asamamx/worker exec wrangler secret put RESEND_API_KEY # Deploy pnpm --filter @asamamx/worker deploy

CORS

El Worker acepta requests solo desde el origen configurado en wrangler.toml:

[vars] CORS_ORIGIN = "http://localhost:3000" # dev [env.production.vars] CORS_ORIGIN = "https://asamamx.com" # prod

Todos los endpoints responden a OPTIONS (preflight) automáticamente via el middleware de Hono cors.

Last updated on