Entrada

Salida

¿Qué es el Validador de MessagePack?

Estás integrando con un servicio que emite MessagePack y el formato binario te sigue dando sorpresas — número de bytes incorrecto, bytes finales raros, el parser muere de forma críptica sin pista alguna sobre qué campo se rompió. Esta herramienta toma un volcado en hex o base64 de un payload MsgPack, lo pasa por un decodificador real, y te dice qué salió realmente por el otro lado.

Pasamos tu entrada por el decodificador de @msgpack/msgpack. Si parsea, te decimos el número de bytes, el tipo de nivel superior (map, array, string, int…), y la longitud de claves o array para que puedas contrastarlo con el esquema que tienes en mente. Si falla, mostramos el mensaje de error del parser tal cual — normalmente apunta justo al offset que se rompió.

Hex y base64 se detectan automáticamente. Se toleran espacios en blanco, comas, prefijos 0x y secuencias de escape \xNN, así que puedes pegar directamente desde una captura de Wireshark, un log de servidor, o un volcado repr() de Python. Nada sale de tu navegador — el decodificador corre localmente.

Cómo usar el Validador de MessagePack

Pégalo. El validador se ejecuta con cada tecla (con un debounce de 300 ms), así que no tienes que pulsar ningún botón.

1

Pega MsgPack en hex o base64

Suelta tu payload codificado en el panel izquierdo. Pulsa MsgPack de ejemplo para cargar un objeto de pedido pequeño codificado en hex — útil cuando solo quieres ver cómo se ve un resultado válido. El decodificador sigue la especificación de MessagePack, así que cualquier cosa que un codificador conforme produjera hará el round-trip limpiamente. Hex de ejemplo (un único int 1):

01

Ese es el byte de wire para fixint positivo 1. Payloads más grandes — maps, arrays, strings — empiezan con bytes de formato como 0x800x9f (fixmap/fixarray) o 0xa00xbf (fixstr).

2

Lee el informe de validación

El panel derecho se rellena automáticamente. Si tiene éxito obtienes un pequeño informe — formato de entrada detectado (hex o base64 según RFC 4648), número de bytes codificados, tipo de nivel superior, conteo de claves/array, además de una vista previa JSON del valor decodificado (truncada a 2 KB para que el panel siga siendo legible).

3

Investiga los fallos

En un fallo de parseo el panel derecho muestra ✗ Invalid MessagePack seguido del string de error del decodificador. Los habituales: "Insufficient bytes" (tu hex se truncó), "Unrecognized type byte" (pegaste JSON o texto por error, o la entrada está corrupta), y "Extra bytes were found" (se coló un prefijo de longitud o byte de framing). Trata el flujo de bytes subyacente como un Uint8Array mentalmente — la mayoría de fallos son problemas de framing o longitud, no bugs de codificación.

Cuándo lo usarías de verdad

Depurar un fallo de caché

Tu clave de Redis contiene un pedido codificado en MessagePack (orderId: 'ORD-7421', items, cliente) y el consumidor está fallando al deserializar. Pega el hex de redis-cli --no-raw GET, mira si el formato binario es siquiera válido, y confirma que el tipo de nivel superior coincide con lo que espera tu decodificador.

Validar una captura de wire

Capturaste una trama de la red con Wireshark o tcpdump, exportaste los bytes, y quieres saber si el MsgPack que hay dentro está bien formado antes de trazar el framing a mano. Pega, echa un vistazo al tipo y al número de bytes, sigue adelante.

Comprobar la cordura de un productor

¿Escribiste un codificador a medida en Go o Rust? Codifica un fixture conocido ({sku: 'SKU-101', qty: 2}), vuélcalo en hex, y pégalo aquí. Si lo leemos como el mismo map que escribiste, tu codificador es conforme con el formato MessagePack.

Pre-flight antes de un bug report

¿Vas a abrir un issue contra una librería upstream? Confirma primero que el payload es realmente MsgPack válido — la mitad de los reports de "bug en la librería" son entradas mal formadas. Un pegado de 30 segundos aquí ahorra un ida y vuelta.

Preguntas frecuentes

¿Sale el payload de mi navegador?

No. La decodificación corre en JavaScript en esta página usando el decodificador @msgpack/msgpack. Nada se sube, se loggea ni se envía a un backend — cierra la pestaña y los datos desaparecen. Mismo modelo que un visor hex de escritorio, solo que en tu navegador.

¿Acepta subida de archivos binarios, o solo hex/base64?

Solo hex y base64. Los navegadores no exponen los bytes de un archivo a la página sin un selector de archivos, y la mayoría de los flujos de copy-paste ya producen hex (de xxd, hexdump -C, tooltips del depurador) o base64 (de respuestas de APIs REST, líneas de log). Si tienes un archivo .msgpack en crudo, ejecuta xxd -p file.msgpack o base64 file.msgpack primero.

¿Cómo distingue hex de base64?

Hex se detecta primero: si la entrada (después de quitar espacios en blanco, comas, prefijos 0x y secuencias de escape \xNN) es toda caracteres hex y de longitud par, la tratamos como hex. Si no, se la pasamos a atob como base64. La línea "Detected input format" en el informe te dice qué ruta se tomó — útil cuando un string ambiguo como deadbeef resulta ser válido en ambas codificaciones.

¿Por qué a veces dice "Extra bytes were found"?

Los streams de MessagePack deben ser exactamente un valor de nivel superior. Si pegaste una trama con prefijo de longitud (p. ej. una longitud big-endian de 4 bytes añadida por un protocolo de transporte framing) o dos payloads concatenados, el decodificador lee el primer valor y se queja de los sobrantes. Recorta el framing o divide en mensajes individuales.

¿Puede decodificar extensiones de MessagePack (timestamp, tipos custom)?

El decodificador @msgpack/msgpack por defecto maneja el tipo de extensión timestamp incorporado (-1) de serie y lo muestra como un Date de JS en la vista previa. Los tipos de extensión personalizados (0 al 127) se decodifican a una forma genérica {type, data} — el validador seguirá reportando el payload como válido, pero necesitarás tu propio ExtensionCodec para interpretar los contenidos.

¿Cuál es la diferencia entre esto y el MessagePack Viewer?

El Viewer es para navegar — muestra un desglose en árbol de cada clave y valor. Este Validador es para la pregunta "¿siquiera es válido?" — un sí/no rápido más el número de bytes y el tipo de nivel superior. Si el validador dice que parsea y el tipo es correcto, cambia al Viewer para leer realmente los contenidos.

Otras herramientas de MessagePack

Una vez confirmado que el payload es válido, estas herramientas te llevan el resto del camino: