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
| Nom | Type | Requis | Défaut | Description |
|---|---|---|---|---|
roomService | RoomService | oui | — | Instance de createRoomService |
assignments | BreakoutRoomAssignment[] | oui | — | Rendu par planBreakoutRooms, ou construit à la main (mode manuel) |
tokenOptions.apiKey / .apiSecret | string | oui | — | Identifiants LiveKit, transmis à createAccessToken |
tokenOptions.role | ParticipantRole | oui | — | Rôle attribué à chaque jeton émis |
tokenOptions.ttlSeconds | number | non | DEFAULT_TOKEN_TTL_SECONDS | Durée de vie des jetons émis |
Retour
Un CreateBreakoutRoomsResult : { assignments, tokensByIdentity } — tokensByIdentity[identity] est le jeton prêt à transmettre à ce participant.
Erreurs
| Code | Quand | Comment corriger |
|---|---|---|
LEGBA_INVALID_ROOM_REQUEST | Une assignation a un roomName vide/blanc | Vérifier la liste d’assignations avant l’appel |
LEGBA_INVALID_ROOM_REQUEST | Une assignation n’a aucun participant | Retirer les groupes vides avant l’appel |
LEGBA_INVALID_ROOM_REQUEST | Une identité assignée à plusieurs salles | Une 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/forwardParticipantdu 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).createBreakoutRoomsprovisionne des jetons ; c’est le client qui faitdisconnect()/connect()pour changer de salle — voir la recette. - Une salle de destination déjà existante n’est pas une erreur
(idempotent) : appeler
createBreakoutRoomsplusieurs 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.