Ir al contenido

Deploy y entornos

Ventana de terminal
cd emaemi
npm install
npm run deploy # = wrangler deploy

Cloudflare Workers (single worker). Sin assets estáticos: emaemi expone sólo API.

Set vía wrangler secret put <NOMBRE>:

SecretPara qué
ANTHROPIC_API_KEYLlamadas a Claude (requerido)
EMAHEALTH_API_KEYIdentifica al cliente emahealth (emi_5bba56a1…)
EMACLINIC_API_KEYIdentifica al cliente emaclinic (emi_81dccf8d…)
EMAVAULT_API_KEYIdentifica al cliente emavault (emi_66d6c5…)
FHIR_SERVER_URLURL de Aidbox
FHIR_CLIENT_IDOAuth client de Aidbox
FHIR_CLIENT_SECRETOAuth secret de Aidbox
FHIR_TOKEN_URLEndpoint de token de Aidbox
VAULT_SUPABASE_URLSupabase emahub
VAULT_SUPABASE_KEYService role para Vault tools

Pendiente de mapear. Hoy el worker responde en emaemi.cristian-ruiz-mti.workers.dev. Los productos cliente apuntan a esa URL en su variable EMI_API_URL.

  • Wrangler secrets son por worker. Si corrés wrangler secret put estando en otro directorio, lo aplica al worker equivocado. Siempre cd emaemi/ antes.
  • @anthropic-ai/sdk no funciona en CF Workers. El SDK falla por el bundling de runtime. Usar fetch nativo (lib/claude.ts).
  • No hardcodear URLs en build time. Romper esto complica deploys de OpenNext en otros productos.
  • Frontend siempre debe usar apiFetch, no fetch directo. Así el token Supabase del usuario viaja al worker proxy y de ahí a emaemi.
  • Cloudflare observability habilitado en wrangler.toml.
  • Token counting de Claude en cada response (input/output) loggeado para control de costos.

Vitest con coverage. Estructura:

tests/
├── unit/
├── integration/
└── fixtures/

Sin GitHub Actions: tests se corren localmente antes de deploy (npm test).