Biblioteca

Crear y entrar en salas

createRoom, joinRoom y todas las opciones de configuración.

Crear una sala: createRoom()

Devuelve un BonkRoom ya conectado y activo. Solo se resuelve tras recibir el enlace de la sala del servidor.

ts
import { createRoom } from 'bonktools';

const room = await createRoom({
  auth: { type: 'registered', username: '...', password: '...' },
  desiredState: {
    roomName: 'Mi Sala',
    password: '',      // cadena vacía = sin contraseña
    maxPlayers: 6,
    mode: 'b',
    rounds: 3,
  },
  hidden: false,       // aparece en la lista pública
  timeoutMs: 10_000,   // rechaza con RoomCreationTimeoutError si tarda más
});

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

Opciones de createRoom()

CampoTipoPor defectoDescripción
authAuthOptionsEstrategia de autenticación (obligatorio)
desiredStateDesiredRoomStateConfiguración de la sala (obligatorio)
hiddenbooleanfalseOculta la sala de la lista pública
minLevelnumber0Nivel mínimo para entrar
maxLevelnumber999Nivel máximo para entrar
timeoutMsnumber10000Tiempo máximo para recibir el enlace de la sala
protocolVersionnumber49Versión del protocolo de bonk.io
reconnectPolicyReconnectPolicyOptionsvalores por defectoPolítica de reconexión (consulta Sesiones 24/7)

DesiredRoomState

ts
interface DesiredRoomState {
  roomName: string;
  password: string;       // '' = sin contraseña
  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 del mapa
}

Enlace de la sala

El enlace tiene la forma https://bonk.io/<id de 6 dígitos><bypass>. La biblioteca rellena el id con ceros a la izquierda (ids menores que 100000 producen enlaces como 006813vnxpi).

Entrar en una sala: joinRoom()

ts
import { joinRoom } from 'bonktools';

const room = await joinRoom('https://bonk.io/123456abcde', {
  auth: { type: 'registered', username: '...', password: '...' },
  role: 'host',     // 'host' (equipo 1) o 'spectator' (equipo 0)
  password: '',     // contraseña de la sala, si la hay
});

La biblioteca analiza la URL, resuelve el servidor mediante autojoin.php y se conecta. Se resuelve tras recibir el estado de la sala, o rechaza con RoomJoinTimeoutError.

También acepta una dirección ya resuelta, sin llamada HTTP:

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

Errores

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

try {
  const room = await createRoom({ auth, desiredState });
} catch (err) {
  if (err instanceof RoomCreationTimeoutError) {
    // el enlace de la sala no llegó dentro de timeoutMs
  }
}

Consulta también Errores y solución de problemas.