Skip to main content
Varios repositorios de VANTS usan la misma base de datos Neon y se avisan de lo que pasa a través de VANTS-BUS, un bus de eventos. Esta página muestra qué conecta con qué, qué eventos circulan por el bus y quién los publica y los consume. Las piezas internas de cada repositorio están en Arquitectura general y en la página de cada repositorio.

Mapa de conexiones

Los recuadros agrupan las piezas que viven en un mismo repositorio.

Qué conecta cada repositorio

VANTS-BUS

VANTS-BUS es un Worker de Cloudflare (vants-bus) disponible en https://vants-bus.vants.workers.dev. Recibe los eventos que publican los proyectos, los guarda en Neon y los entrega a quien los pida. Los eventos no se modifican y se conservan 30 días; sus tablas están en Bus de eventos. Estos repositorios contienen los clientes del bus, no el código del Worker vants-bus. Cada evento tiene un id (evt_ más un ULID, ordenable), un type, el source (el proyecto que lo publicó), la fecha ts y los datos en data.

Dónde corre cada pieza

El diagrama agrupa las piezas según dónde se ejecutan y muestra en qué tablas escribe cada una. Todas las tablas están en una sola base de datos de Neon; VantsBasededatos crea una rama por cada PR para probar las migraciones. En main, la web todavía no lee vants_feed.

Proyectos conectados

Cada proyecto se identifica con su nombre en la cabecera X-VANTS-Project y firma con su propio secreto. Todos se configuran con VANTS_BUS_URL y VANTS_BUS_SECRET. Si faltan, la conexión con el bus queda apagada y el resto del proyecto funciona igual.

Quién publica y quién consume cada evento

El contrato tiene 12 tipos de evento, definidos en la constante EVENTS de cada cliente. El diagrama y la tabla indican qué código los publica y los consume hoy. Además de los consumidores de la tabla, vants-consumer-playvants copia todos los tipos a vants_feed. En el diagrama, el color de cada tipo indica quién lo consume: azul, flask-agents y VANTS HUB; verde, solo flask-agents; amarillo, solo VANTS HUB, y gris, nadie todavía. El Worker vants publica desde vants-server/worker.js con el cliente de vants-bus/, y la API de torneos de VANTSNET publica desde src/lib/bus/. Los dos envían sin bloquear la respuesta y quedan apagados si falta su secreto. El ejemplo snippet-worker.js sigue en vants-bus/ como referencia.

Datos de los eventos publicados

En los eventos de partidos, game va en minúsculas y csgo se convierte en cs2. La correspondencia con los webhooks de FACEIT está en vants-faceit-webhook.

Recorrido de un resultado

  • Pasos 1 a 5. vants-faceit-webhook guarda el webhook en Neon, responde 200 a FACEIT y publica match.finished en segundo plano. Si FACEIT repite el webhook, no se publica dos veces. Si el bus falla, lo intenta hasta 3 veces; si aun así no lo consigue, libera el event_id para que un nuevo envío de FACEIT pueda publicarlo.
  • Pasos 6 a 12. VANTS HUB muestra una notificación por cada evento. flask-agents redacta el resumen (Resultado verificado: <equipo A> <marcador> - <marcador> <equipo B>) y lo publica como post.generated.
  • Pasos 13 a 15. Cada 15 minutos, vants-consumer-playvants copia los eventos nuevos a vants_feed. Su cursor es el id más alto de esa tabla, así que si una vuelta falla, la siguiente vuelve a leer los mismos eventos sin duplicarlos. La web todavía no lee vants_feed.
flask-agents y VANTS HUB mantienen abierta cada lectura hasta 20 segundos (long-polling), así que reciben los eventos casi en tiempo real.

Leer y publicar eventos

Firma de las peticiones

Cada petición al bus lleva tres cabeceras:

Rutas

Clientes

El secreto solo se usa del lado del servidor: en un Worker, en el proceso principal de Electron o en un backend. No lo incluyas en el código que se envía al navegador.
Cloudflare rechaza con 403 (error 1010) los User-Agent genéricos, como el de Python-urllib. Envía uno propio, como hacen los clientes.