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

NomTypeRequisDéfautDescription
serverUrlstringouiURL HTTP du serveur LiveKit, ex. "http://localhost:7880"
apiKeystringouiClé API LiveKit
apiSecretstringouiSecret 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 — closeRoom semblerait alors ne rien faire. Voir docs/recipes/livekit-local.md.
  • createRoom vé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).
  • raw est sa propre instance RoomServiceClient, distincte de celle exposée par ParticipantService.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.) — voir docs/recipes/raw-escape-hatch.md.

Voir aussi