createBreakoutRooms

expérimentaldepuis 0.1.0@legba-core/realtime

createBreakoutRooms

Ce que ça fait

Provisionne réellement des salles de sous-groupe : crée chaque salle de destination (idempotent) et émet un jeton d’accès par participant. Voir docs/recipes/breakout-rooms.md pour le flux complet, y compris le changement de salle côté client.

Signature

function createBreakoutRooms(
  roomService: RoomService,
  assignments: BreakoutRoomAssignment[],
  tokenOptions: CreateBreakoutRoomsTokenOptions,
): Promise<CreateBreakoutRoomsResult>

Paramètres

NomTypeRequisDéfautDescription
roomServiceRoomServiceouiInstance de createRoomService
assignmentsBreakoutRoomAssignment[]ouiRendu par planBreakoutRooms, ou construit à la main (mode manuel)
tokenOptions.apiKey / .apiSecretstringouiIdentifiants LiveKit, transmis à createAccessToken
tokenOptions.roleParticipantRoleouiRôle attribué à chaque jeton émis
tokenOptions.ttlSecondsnumbernonDEFAULT_TOKEN_TTL_SECONDSDurée de vie des jetons émis

Retour

Un CreateBreakoutRoomsResult : { assignments, tokensByIdentity }tokensByIdentity[identity] est le jeton prêt à transmettre à ce participant.

Erreurs

CodeQuandComment corriger
LEGBA_INVALID_ROOM_REQUESTUne assignation a un roomName vide/blancVérifier la liste d’assignations avant l’appel
LEGBA_INVALID_ROOM_REQUESTUne assignation n’a aucun participantRetirer les groupes vides avant l’appel
LEGBA_INVALID_ROOM_REQUESTUne identité assignée à plusieurs sallesUne identité ne peut appartenir qu’à un seul groupe

Une erreur LegbaRoomError autre que ROOM_ALREADY_EXISTS levée par la création d’une salle remonte telle quelle (ex. nom de salle invalide).

Exemple minimal

import { createRoomService, planBreakoutRooms, createBreakoutRooms } from "@legba-core/realtime";

const rooms = createRoomService({ serverUrl, apiKey, apiSecret });
const plan = planBreakoutRooms(["alice", "bob", "carol"], { groupSize: 2 });

const { tokensByIdentity } = await createBreakoutRooms(rooms, plan, {
  apiKey,
  apiSecret,
  role: "participant",
});

Exemple complet

Voir docs/recipes/breakout-rooms.md.

Pièges

  • Aucun appel n’est équivalent à moveParticipant/forwardParticipant du SDK LiveKit — ces deux RPC ne fonctionnent jamais en self-hosted (vérifié contre un vrai serveur, confirmé par l’équipe LiveKit : fonctionnalité LiveKit Cloud uniquement). createBreakoutRooms provisionne des jetons ; c’est le client qui fait disconnect()/connect() pour changer de salle — voir la recette.
  • Une salle de destination déjà existante n’est pas une erreur (idempotent) : appeler createBreakoutRooms plusieurs fois avec le même plan ne recrée jamais une salle, mais réémet un nouveau jeton à chaque appel.
  • La livraison de chaque jeton au bon participant (canal de données, HTTP, …) reste hors du périmètre de cette fonction.

Voir aussi