Bibliothèque

Créer et rejoindre des salons

createRoom, joinRoom et toutes les options de configuration.

Créer un salon : createRoom()

Renvoie un BonkRoom déjà connecté et actif. Il ne se résout qu'après réception du lien du salon par le serveur.

ts
import { createRoom } from 'bonktools';

const room = await createRoom({
  auth: { type: 'registered', username: '...', password: '...' },
  desiredState: {
    roomName: 'Mon Salon',
    password: '',      // chaîne vide = pas de mot de passe
    maxPlayers: 6,
    mode: 'b',
    rounds: 3,
  },
  hidden: false,       // apparaît dans la liste publique
  timeoutMs: 10_000,   // rejette avec RoomCreationTimeoutError si cela prend plus longtemps
});

console.log(room.shareLink); // https://bonk.io/123456abcde

Options de createRoom()

ChampTypePar défautDescription
authAuthOptionsStratégie d'authentification (obligatoire)
desiredStateDesiredRoomStateConfiguration du salon (obligatoire)
hiddenbooleanfalseMasque le salon de la liste publique
minLevelnumber0Niveau minimum pour entrer
maxLevelnumber999Niveau maximum pour entrer
timeoutMsnumber10000Temps maximum pour recevoir le lien du salon
protocolVersionnumber49Version du protocole bonk.io
reconnectPolicyReconnectPolicyOptionsvaleurs par défautPolitique de reconnexion (voir Sessions 24h/24)

DesiredRoomState

ts
interface DesiredRoomState {
  roomName: string;
  password: string;       // '' = pas de mot de passe
  maxPlayers: number;     // 1–8
  mode: string | number;  // 'b', 'ar', 'ard', 'sp', 'v', 'f'...
  engine?: string;        // 'b', 'f'...
  rounds: number;
  map?: string | null;    // blob LZ-String de la carte
}

Lien du salon

Le lien a la forme https://bonk.io/<id à 6 chiffres><bypass>. La bibliothèque complète l'id avec des zéros à gauche (les ids inférieurs à 100000 donnent des liens comme 006813vnxpi).

Rejoindre un salon : joinRoom()

ts
import { joinRoom } from 'bonktools';

const room = await joinRoom('https://bonk.io/123456abcde', {
  auth: { type: 'registered', username: '...', password: '...' },
  role: 'host',     // 'host' (équipe 1) ou 'spectator' (équipe 0)
  password: '',     // mot de passe du salon, s'il y en a un
});

La bibliothèque analyse l'URL, résout le serveur via autojoin.php et se connecte. Elle se résout après réception de l'état du salon, ou rejette avec RoomJoinTimeoutError.

Elle accepte aussi une adresse déjà résolue, sans appel HTTP :

ts
const room = await joinRoom(
  { server: 'b2seattle1', joinId: '...', bypass: 'abcde' },
  { auth, role: 'spectator' },
);

Erreurs

ts
import { RoomCreationTimeoutError, RoomJoinTimeoutError } from 'bonktools';

try {
  const room = await createRoom({ auth, desiredState });
} catch (err) {
  if (err instanceof RoomCreationTimeoutError) {
    // le lien du salon n'est pas arrivé dans le délai timeoutMs
  }
}

Voir aussi Erreurs et dépannage.