Crear una app y generar un token de API
Tus primeras dos llamadas a la API: registrar una app y emitir un token acotado. Un recorrido por el sobre de la API REST y el header de auth que necesita cada petición.
Todo es una llamada a la API
El panel de StreamHub es solo un cliente de la misma API REST que podés usar directamente. Cada endpoint vive bajo /api/v1, toma un header Authorization: Bearer <token> y devuelve un sobre consistente:
{ "data": <payload>, "error": null }
Los errores devuelven el estado HTTP correcto más un cuerpo de error de NestJS. La documentación interactiva completa está en /api/v1/docs (Swagger) y /api/v1/openapi.json.
Paso 1 — preparar tu shell
El instalador sembró un token sk_ global. Tomalo y apuntá a tu servidor:
export BASE="https://media.example.com/api/v1"
export TOKEN="sk_...." # el token global sembrado
Paso 2 — crear una app
curl -s -X POST $BASE/apps -H "Authorization: Bearer $TOKEN" \
-H 'Content-Type: application/json' \
-d '{"name":"live","displayName":"Canal en Vivo"}'
Eso registra la app, crea su base de datos por app y configura su prefijo de sala. La app es ahora el ámbito de streams, grabaciones, plugins y sus propios tokens.
Paso 3 — generar un token acotado
Un token global puede hacer cualquier cosa; para la integración del día a día querés un token acotado a una app, así una filtración queda contenida:
curl -s -X POST $BASE/tokens -H "Authorization: Bearer $TOKEN" \
-H 'Content-Type: application/json' \
-d '{"name":"live-ci","app":"live"}'
La respuesta contiene el nuevo valor sk_ una sola vez — guardalo en tu gestor de secretos de inmediato. Podés listar y revocar tokens más tarde con GET /tokens y DELETE /tokens/{id}.
Paso 4 — confirmar que funciona
curl -s $BASE/apps/live -H "Authorization: Bearer $LIVE_TOKEN"
Deberías recibir la config de la app de vuelta en el sobre data.
Entender los permisos
Detrás de escena, cada ruta declara un permiso Casbin como app:create o ingress:create. Un token global o superadmin saltea el acotamiento por tenant; un token acotado a una app queda confinado a esa app. Si una llamada devuelve 403, el token está autenticado pero le falta el permiso — chequeá el recurso:accion requerido del endpoint en la referencia de la API.
Con una app y un token en mano, estás listo para ingestar tu primer stream.