# Conectar YouTube a Kiko a través de Restream

La emisión de vídeo y la lectura del chat son conexiones distintas. Kiko puede
responder al simulador y a Twitch; `restream.js` añade la lectura de YouTube
desde la cuenta de Restream que ya emite el directo.

## Configuración inicial

1. En https://developers.restream.io/apps/ crea una aplicación de Restream para
   tu cuenta. Habilita únicamente el permiso de lectura del chat (`chat.read`).
2. Registra exactamente esta URL de retorno:
   `https://yotube-2l7.pages.dev/api/restream/callback`.
3. En Cloudflare Pages → **yotube** → Configuración → Variables y secretos,
   añade `RESTREAM_CLIENT_ID` y `RESTREAM_CLIENT_SECRET` de esa aplicación.
   Guarda el secreto como secreto de producción. No lo pongas en GitHub ni lo
   envíes por el chat.
4. Publica de nuevo la versión de producción para aplicar las variables.
5. Abre `https://yotube-2l7.pages.dev/` o `/chat-prueba`, pulsa **Conectar chat
   de YouTube** y autoriza tu cuenta de Restream en su propia página.
6. Comprueba que YouTube está conectado en Restream y que el directo tiene el
   chat activado. Pulsa **Iniciar directo** en Kiko y deja el panel abierto.

En Restream sigue mostrando `https://yotube-2l7.pages.dev/live` como antes.
La integración solo lee comentarios: las respuestas se oyen en el directo;
no se publican respuestas escritas ni se reenvían mensajes a otros chats.
Solo procesa YouTube para conservar la conexión de Twitch que ya existe.

## Comprobación

- El panel debe mostrar **Chat de YouTube conectado**.
- Envía un comentario nuevo en el chat del directo de YouTube.
- Al confirmarse su entrada en la cola aparecerá **YouTube · nombre: mensaje**
  en la conversación del panel y aumentará el contador de comentarios enviados.
- Kiko lo atenderá al terminar la frase actual. En pausa, queda pendiente hasta
  pulsar Continuar. Si está detenido, los mensajes no se añaden a su cola.

Los comentarios anteriores a la conexión no se importan como mensajes nuevos.
El panel renueva automáticamente la autorización y reconecta la lectura si se
interrumpe la red. En navegadores con Web Locks se utiliza un único lector de
YouTube aunque haya varios paneles abiertos; en otros, abre un único panel.

## Credenciales y pruebas

Los tokens permanecen cifrados en una cookie HttpOnly, Secure y SameSite=Lax.
El servidor valida el estado OAuth y el origen de las solicitudes. El proxy
WebSocket solo entrega al navegador eventos de texto de YouTube filtrados.
El secreto y los tokens de Restream no se devuelven a JavaScript ni se registran.

Desconectar detiene la lectura y elimina la autorización local de este sitio.
Para revocar también el permiso de la aplicación, hazlo desde tu cuenta de
Restream. Al cambiar de dominio hay que registrar su nueva URL de retorno y
volver a autorizar.

Pruebas automáticas sin credenciales reales:
`node --test tests/*.test.cjs tests/*.test.mjs`.

Referencias oficiales:
- https://developers.restream.io/chat/getting-started
- https://developers.restream.io/chat/actions
- https://developers.restream.io/chat/events
- https://developers.restream.io/authentication/authorize-dialog
- https://developers.restream.io/authentication/code-exchange
- https://developers.restream.io/authentication/refreshing-tokens
