Skip to main content

Convención de nombres

Cada internal de evento sigue <recurso>.<acción> (un solo punto). Los segmentos anidados de la URL se unen con guiones; domain es el primer segmento después de /api/v3 y se guarda en la fila event: Reglas a tener en cuenta:
  • Solo los métodos transaccionales (POST, PATCH, PUT, DELETE) producen eventos. GET nunca lo hace.
  • Los recursos que viven directamente bajo el dominio (p. ej. /api/v3/account) se reducen a <dominio>.<acción> — account.created.
  • Las rutas de plataforma e infraestructura (admin, auth, cron, integration, oauth, queue, realtime y el propio módulo webhook) quedan excluidas. El I/O de terceros nunca es un evento público.
  • webhook.test es la única entrada escrita a mano. Es el evento sintético que envía la acción Probar; create y PUT …/events lo mantienen siempre suscrito.
  • Los internals tienen un máximo de 120 caracteres, deben cumplir ^[a-z0-9-]+\.[a-z0-9-]+$ y ser únicos; el generador falla en caso contrario. Las colisiones añaden -{method} a la acción.

Alcance por cuenta

Cada evento tiene un account_scope que decide qué suscripciones pueden recibirlo:
Los eventos *.purged son siempre none: cuando se enrutan la fila ya no existe, así que su propietario no puede leerse.

Generado vs sincronizado

El catálogo existe dos veces, a propósito:
  1. Código — lib/webhook/catalogue/webhook-event-catalogue.data.ts, regenerado con pnpm --filter @bbrandslab/horizon-api webhook:catalogue:generate. CI ejecuta --check, por lo que una nueva ruta mutante no puede fusionarse sin su evento.
  2. Base de datos — la tabla event, actualizada por entorno con webhook:catalogue:sync justo después de las migraciones. Las suscripciones (webhook_event) referencian event.document_id.
GET /api/v3/webhook/catalogue/status compara ambos e informa de missing_internals (en código, aún sin sincronizar), stale_internals (en la base de datos, ya no se producen) y malformed_internals (filas manuales cuyo internal no tiene .). Horizon Enterprise muestra un aviso en la pantalla de Eventos mientras difieran. La API HTTP del catálogo es solo lectura (listado, detalle, export).

Todos los eventos

La tabla siguiente se genera desde el mismo archivo, agrupada por dominio. Actualmente lista eventos.