Entrée

Sortie

Qu'est-ce que le Validateur MessagePack ?

Tu intègres un service qui émet du MessagePack et le format binaire n'arrête pas de te surprendre — mauvais nombre d'octets, octets en trop bizarres, le parser meurt de façon cryptique sans dire quel champ a cassé. Cet outil prend un dump hex ou base64 d'un payload MsgPack, le passe dans un vrai décodeur, et te dit ce qui est vraiment ressorti de l'autre côté.

On envoie ton entrée dans le décodeur de @msgpack/msgpack. Si ça parse, on te donne le nombre d'octets, le type racine (map, array, string, int…), et la longueur des clés ou du tableau pour que tu puisses recouper avec le schéma que tu as en tête. Si ça échoue, on te ressort le message d'erreur du parser tel quel — il pointe en général pile sur l'offset qui a cassé.

Hex et base64 sont détectés automatiquement. Les espaces, virgules, préfixes 0x et échappements \xNN sont tolérés, donc tu peux coller directement depuis une capture Wireshark, un log serveur, ou un dump repr() Python. Rien ne sort de ton navigateur — le décodeur tourne en local.

Comment utiliser le Validateur MessagePack

Colle-le. Le validateur se déclenche à chaque frappe (debounce de 300 ms) donc pas besoin de cliquer sur un bouton.

1

Colle du MsgPack hex ou base64

Dépose ton payload encodé dans le panneau gauche. Clique sur MsgPack d'exemple pour charger un petit objet commande encodé en hex — pratique quand tu veux juste voir à quoi ressemble un résultat valide. Le décodeur suit la spec MessagePack, donc tout ce qu'un encodeur conforme produit fait l'aller-retour proprement. Exemple hex (un seul int 1) :

01

C'est l'octet wire pour le fixint positif 1. Les payloads plus gros — maps, arrays, strings — commencent par des octets de format comme 0x800x9f (fixmap/fixarray) ou 0xa00xbf (fixstr).

2

Lis le rapport de validation

Le panneau de droite se remplit automatiquement. En cas de succès tu obtiens un petit rapport — format d'entrée détecté (hex ou base64 selon RFC 4648), nombre d'octets encodés, type racine, nombre de clés/éléments du tableau, plus un aperçu JSON de la valeur décodée (tronqué à 2 Ko pour que le panneau reste lisible).

3

Enquête sur les échecs

Sur un échec de parsing le panneau droit affiche ✗ Invalid MessagePack suivi de la chaîne d'erreur du décodeur. Les classiques : "Insufficient bytes" (ton hex a été tronqué), "Unrecognized type byte" (tu as collé du JSON ou du texte par erreur, ou l'entrée est corrompue), et "Extra bytes were found" (un préfixe de longueur ou un octet de framing s'est glissé dedans). Pense le flux d'octets sous-jacent comme un Uint8Array dans ta tête — la plupart des échecs sont des problèmes de framing ou de longueur, pas des bugs d'encodage.

Quand tu l'utiliserais vraiment

Debug d'un cache miss

Ta clé Redis contient une commande encodée en MessagePack (orderId: 'ORD-7421', items, client) et le consommateur jette une exception au désérialisage. Colle le hex depuis redis-cli --no-raw GET, regarde si le format binaire est ne serait-ce que valide, et confirme que le type racine correspond à ce que ton décodeur attend.

Valider une capture réseau

Tu as capturé une trame du réseau avec Wireshark ou tcpdump, exporté les octets, et tu veux savoir si le MsgPack à l'intérieur est bien formé avant de tracer le framing à la main. Colle, jette un œil au type et au nombre d'octets, passe à autre chose.

Vérifier un producteur

Tu as écrit un encodeur custom en Go ou Rust ? Encode un fixture connu ({sku: 'SKU-101', qty: 2}), dump-le en hex, et colle-le ici. Si on le relit comme la même map que tu as écrite, ton encodeur est conforme au format MessagePack.

Pre-flight avant un rapport de bug

Tu ouvres une issue contre une lib upstream ? Confirme d'abord que le payload est vraiment du MsgPack valide — la moitié des rapports "bug de la lib" sont des entrées malformées. 30 secondes de collage ici t'évitent un aller-retour.

Questions courantes

Le payload sort-il de mon navigateur ?

Non. Le décodage tourne en JavaScript sur cette page via le décodeur @msgpack/msgpack. Rien n'est uploadé, loggé ni envoyé vers un backend — ferme l'onglet et les données disparaissent. Même modèle qu'un viewer hex desktop, juste dans ton navigateur.

Accepte-t-il l'upload de fichiers binaires, ou juste hex/base64 ?

Hex et base64 uniquement. Les navigateurs ne donnent pas accès aux octets d'un fichier sans sélecteur, et la plupart des workflows copier-coller produisent déjà du hex (depuis xxd, hexdump -C, infobulles de debugger) ou du base64 (depuis des réponses d'API REST, des lignes de log). Si tu as un fichier .msgpack brut, lance xxd -p file.msgpack ou base64 file.msgpack d'abord.

Comment distingue-t-il hex et base64 ?

Hex est détecté en premier : si l'entrée (après suppression des espaces, virgules, préfixes 0x et séquences d'échappement \xNN) est entièrement en caractères hex et de longueur paire, on la traite comme hex. Sinon on la passe à atob comme base64. La ligne "Detected input format" du rapport te dit quel chemin a été pris — utile quand une chaîne ambiguë comme deadbeef est valide dans les deux encodages.

Pourquoi ça dit parfois "Extra bytes were found" ?

Un stream MessagePack doit contenir exactement une valeur racine. Si tu as collé une trame préfixée par sa longueur (p. ex. une longueur big-endian sur 4 octets ajoutée par un protocole de transport à framing) ou deux payloads concaténés, le décodeur lit la première valeur et râle sur le reste. Coupe le framing ou découpe en messages individuels.

Peut-il décoder les extensions MessagePack (timestamp, types custom) ?

Le décodeur @msgpack/msgpack par défaut gère le type d'extension timestamp intégré (-1) en standard et l'affiche comme un Date JS dans l'aperçu. Les types d'extension personnalisés (0 à 127) se décodent en une forme générique {type, data} — le validateur signalera quand même le payload comme valide, mais il te faudra ton propre ExtensionCodec pour interpréter le contenu.

Quelle différence avec le MessagePack Viewer ?

Le Viewer est pour explorer — il montre un découpage arborescent de chaque clé et valeur. Ce Validateur répond à la question "est-ce ne serait-ce que valide ?" — oui/non rapide plus nombre d'octets et type racine. Si le validateur dit que ça parse et que le type est bon, passe au Viewer pour vraiment lire le contenu.

Autres outils MessagePack

Une fois que tu as confirmé que le payload est valide, ces outils prennent le relais :