> ## Documentation Index
> Fetch the complete documentation index at: https://vantsgg.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Documentación interna de VANTS, la plataforma de esports, escrita en español. Cubre siete repositorios de la organización de GitHub VANTSNET y dos de la cuenta feispla: el prototipo VANTSNET, que se llama igual que la organización, y vantsoport.
> Empieza por /mapa-del-codigo para saber qué repositorio y qué carpeta tocar, y consulta /glosario para los términos propios como pt_, mm_, RR, VANTS-BUS o VANTCALL.
> Cuando un componente existe en varios repositorios, estas páginas describen la versión de Vantsgames salvo que digan otra cosa. El esquema de la base de datos se versiona en VantsBasededatos.
> La web y la API pública están en https://vants.vants.workers.dev. Rutas y respuestas: /referencia/api-publica. Tablas y estados: /referencia/esquema-base-de-datos.
> No inventes rutas, tablas, comandos ni variables de entorno: si algo no aparece aquí, revisa el código del repositorio correspondiente.

# vants-faceit-webhook

> Worker que recibe los webhooks de FACEIT, los guarda en Neon y los publica en VANTS-BUS: endpoints, mapeo de eventos, garantías, secretos y despliegue.

Backend de VANTS para recibir webhooks de FACEIT (App Studio) e integrarlos con Neon PostgreSQL. Corre como Cloudflare Worker y usa `@neondatabase/serverless`. Cada evento verificado se guarda en la tabla `faceit_webhook_events` y, si tiene equivalente en el bus de eventos, se publica allí para que el resto de la plataforma reaccione.

## Endpoints

| Método | Ruta | Descripción |
| - | - | - |
| `POST` | `/api/webhooks/faceit` | Valida el secreto, guarda el evento en `faceit_webhook_events` y responde `200`. |
| `GET` | `/api/webhooks/faceit` | Sondeo de disponibilidad (`200`). |
| `GET` | `/healthz` | Estado del servicio e indica si el bus está configurado. |

## Validación del secreto

El `POST` solo se acepta si incluye el secreto compartido con FACEIT. Los nombres exactos de header o parámetro que acepta el Worker están en el código del repositorio.

## Secrets del Worker

El Worker usa secretos para validar a FACEIT, conectarse a Neon y firmar las peticiones al bus de eventos.

> [!NOTE]
>
> Ninguno vive en el repo. Para cambiarlos: `npx wrangler secret put <NOMBRE>`.

## Puente al bus de eventos (VANTS-BUS)

Cada webhook verificado se guarda en Neon. Si el bus está configurado, además se publica en el bus central para que la web, el launcher y los agentes reaccionen en vivo.

| Evento FACEIT | Evento del bus | Reacción esperada |
| - | - | - |
| `match_status_finished` | `match.finished` | Ranking en vivo, resumen por agentes, aviso en el launcher. |
| `match_object_created` | `match.scheduled` | La agenda de la arena se actualiza. |
| Cancelaciones | `match.canceled` | Se retira de la agenda. |

Los eventos sin mapeo se ignoran.

### Garantías

* La respuesta a FACEIT no cambia: primero se guarda en Neon y se responde `200`. La publicación al bus va en background (`ctx.waitUntil`).
* Deduplicación por `event_id` con la tabla `vants_bus_dedup` (se crea sola en Neon).
* 3 reintentos con backoff hacia el bus.

### Consumir eventos desde otros proyectos

Otros proyectos leen los eventos del bus con peticiones firmadas con HMAC por proyecto. La implementación está en `vants-bus/` (ver [Vantsgames](https://vantsgg.mintlify.site/repos/vantsgames.md)).

## Despliegue

```bash theme={null}
npm install
npm run deploy
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.