Biblioteca

Criar e entrar em salas

createRoom, joinRoom e todas as opções de configuração.

Criar uma sala: createRoom()

Retorna um BonkRoom já conectado e ativo. Ele só resolve depois de receber o link da sala do servidor.

ts
import { createRoom } from 'bonktools';

const room = await createRoom({
  auth: { type: 'registered', username: '...', password: '...' },
  desiredState: {
    roomName: 'Minha Sala',
    password: '',      // string vazia = sem senha
    maxPlayers: 6,
    mode: 'b',
    rounds: 3,
  },
  hidden: false,       // aparece na lista pública
  timeoutMs: 10_000,   // rejeita com RoomCreationTimeoutError se demorar mais
});

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

Opções de createRoom()

CampoTipoPadrãoDescrição
authAuthOptionsEstratégia de autenticação (obrigatório)
desiredStateDesiredRoomStateConfiguração da sala (obrigatório)
hiddenbooleanfalseSala oculta na lista pública
minLevelnumber0Nível mínimo para entrar
maxLevelnumber999Nível máximo para entrar
timeoutMsnumber10000Tempo máximo para receber o link da sala
protocolVersionnumber49Versão do protocolo do bonk.io
reconnectPolicyReconnectPolicyOptionspadrõesPolítica de reconexão (veja Sessões 24/7)

DesiredRoomState

ts
interface DesiredRoomState {
  roomName: string;
  password: string;       // '' = sem senha
  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 do mapa
}

O link tem o formato https://bonk.io/<id com 6 dígitos><bypass>. A biblioteca preenche o id com zeros à esquerda (ids menores que 100000 geram links como 006813vnxpi).

Entrar em uma sala: joinRoom()

ts
import { joinRoom } from 'bonktools';

const room = await joinRoom('https://bonk.io/123456abcde', {
  auth: { type: 'registered', username: '...', password: '...' },
  role: 'host',     // 'host' (equipa 1) ou 'spectator' (equipa 0)
  password: '',     // senha da sala, se houver
});

A biblioteca interpreta a URL, resolve o servidor via autojoin.php e conecta. Resolve depois de receber o estado da sala, ou rejeita com RoomJoinTimeoutError.

Também aceita um endereço já resolvido, sem chamada HTTP:

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

Erros

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

try {
  const room = await createRoom({ auth, desiredState });
} catch (err) {
  if (err instanceof RoomCreationTimeoutError) {
    // o link da sala não chegou dentro de timeoutMs
  }
}

Veja também Erros e solução de problemas.