createRoomService
expérimentaldepuis 0.1.0@legba-core/realtime
createRoomService
Ce que ça fait
Crée un client pour gérer le cycle de vie des salles d’un serveur LiveKit : créer, fermer, lire/modifier les métadonnées, lister.
Signature
function createRoomService(config: LiveKitServiceConfig): RoomService
Paramètres
| Nom | Type | Requis | Défaut | Description |
|---|---|---|---|---|
serverUrl | string | oui | — | URL HTTP du serveur LiveKit, ex. "http://localhost:7880" |
apiKey | string | oui | — | Clé API LiveKit |
apiSecret | string | oui | — | Secret API LiveKit |
Retour
Un RoomService avec createRoom, closeRoom, getRoomMetadata, updateRoomMetadata, listRooms, et la propriété raw (instance réelle RoomServiceClient du SDK — voir docs/recipes/raw-escape-hatch.md).
Erreurs
Toutes les méthodes du service peuvent lever LegbaRoomError — voir sa propre documentation pour les codes.
Exemple minimal
import { createRoomService } from "@legba-core/realtime";
const rooms = createRoomService({
serverUrl: process.env.LIVEKIT_URL!,
apiKey: process.env.LIVEKIT_API_KEY!,
apiSecret: process.env.LIVEKIT_API_SECRET!,
});
const room = await rooms.createRoom({ roomName: "salle-demo", maxParticipants: 8 });
Exemple complet
import { createRoomService, LegbaRoomError, ROOM_ERROR_CODES } from "@legba-core/realtime";
const rooms = createRoomService({ serverUrl, apiKey, apiSecret });
try {
await rooms.createRoom({ roomName: "salle-demo", metadata: { hôte: "alice" } });
} catch (error) {
if (error instanceof LegbaRoomError && error.code === ROOM_ERROR_CODES.ROOM_ALREADY_EXISTS) {
// la salle existe déjà, rien à faire
} else {
throw error;
}
}
await rooms.closeRoom("salle-demo");
Pièges
- Le serveur LiveKit doit être configuré avec
room.auto_create: false. Par défaut, LiveKit recrée silencieusement toute salle fermée dès qu’un jeton valide tente de la rejoindre —closeRoomsemblerait alors ne rien faire. Voirdocs/recipes/livekit-local.md. createRoomvérifie l’existence de la salle avant de la créer (pas d’écrasement silencieux des métadonnées d’une salle existante) : il y a une fenêtre de concurrence théorique entre la vérification et la création, acceptable pour un usage normal (pas conçu pour de la haute contention).rawest sa propre instanceRoomServiceClient, distincte de celle exposée parParticipantService.raw(aucun singleton partagé entre services, même avec la même config). C’est une échappatoire expérimentale : l’utiliser contourne toute validation propre à Legba (vérification d’existence, format du nom de salle, etc.) — voirdocs/recipes/raw-escape-hatch.md.