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.GETnunca 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,realtimey el propio módulo webhook) quedan excluidas. El I/O de terceros nunca es un evento público. webhook.testes la única entrada escrita a mano. Es el evento sintético que envía la acción Probar; create yPUT …/eventslo 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 unaccount_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:- Código —
lib/webhook/catalogue/webhook-event-catalogue.data.ts, regenerado conpnpm --filter @bbrandslab/horizon-api webhook:catalogue:generate. CI ejecuta--check, por lo que una nueva ruta mutante no puede fusionarse sin su evento. - Base de datos — la tabla
event, actualizada por entorno conwebhook:catalogue:syncjusto después de las migraciones. Las suscripciones (webhook_event) referencianevent.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).