2026-03-12 20:56:04 +01:00
2026-03-09 22:07:05 +01:00
2026-03-11 15:50:47 +01:00
2026-03-12 20:56:04 +01:00
2026-03-12 20:56:04 +01:00
2026-03-12 20:56:04 +01:00
2026-03-12 20:56:04 +01:00
2026-03-09 22:16:01 +01:00
2026-03-09 22:04:27 +01:00
2026-03-12 20:56:04 +01:00
2026-03-10 18:13:01 +01:00

meshcore

TypeScript library for MeshCore protocol utilities.

Packet parsing

Using the library to decode MeshCore packets:

import { Packet } from '@hamradio/meshcore';

const raw = new Uint8Array(Buffer.from("050AA50E2CB0336DB67BBF78928A3BB9BF7A8B677C83B6EC0716F9DD10002A06", "hex"));
const packet = Packet.fromBytes(raw);
console.log(packet);

/*
_Packet {
  header: 5,
  transport: undefined,
  pathLength: 10,
  path: Uint8Array(10) [
    165,  14,  44, 176,
     51, 109, 182, 123,
    191, 120
  ],
  payload: Uint8Array(20) [
    146, 138,  59, 185, 191, 122,
    139, 103, 124, 131, 182, 236,
      7,  22, 249, 221,  16,   0,
     42,   6
  ],
  routeType: 1,
  payloadVersion: 0,
  payloadType: 1,
  pathHashCount: 10,
  pathHashSize: 1,
  pathHashBytes: 10,
  pathHashes: [
    'a5', '0e', '2c',
    'b0', '33', '6d',
    'b6', '7b', 'bf',
    '78'
  ]
}
*/

Packet structure parsing

The parser can also be instructed to generate a packet structure, useful for debugging or printing packet details:

import { Packet } from '@hamradio/meshcore';

const raw = new Uint8Array(Buffer.from("050AA50E2CB0336DB67BBF78928A3BB9BF7A8B677C83B6EC0716F9DD10002A06", "hex"));
const packet = Packet.fromBytes(raw);
const { structure } = packet.decode(true);
console.log(structure);

/*
[
  {
    name: 'header',
    data: Uint8Array(12) [
        5,  10, 165,  14,  44,
      176,  51, 109, 182, 123,
      191, 120
    ],
    fields: [
      { name: 'flags', type: 0, size: 1, bits: [Array] },
      { name: 'path length', type: 1, size: 1, bits: [Array] },
      { name: 'path hashes', type: 6, size: 10 }
    ]
  },
  {
    name: 'response payload',
    data: Uint8Array(20) [
      146, 138,  59, 185, 191, 122,
      139, 103, 124, 131, 182, 236,
        7,  22, 249, 221,  16,   0,
       42,   6
    ],
    fields: [
      { name: 'destination hash', type: 1, size: 1, value: 146 },
      { name: 'source hash', type: 1, size: 1, value: 138 },
      { name: 'cipher MAC', type: 6, size: 2, value: [Uint8Array] },
      { name: 'cipher text', type: 6, size: 16, value: [Uint8Array] }
    ]
  }
]
*/

Identities

The package supports:

  • Identity for public key management.
  • LocalIdentity for private key management.
  • Contact for managing named identities.
  • Group for managing groups.
  • KeyManager for managing all of the above and handling decryption.
Description
JavaScript (TypeScript) parser for MeshCore packets
Readme MIT 246 KiB
Languages
TypeScript 95.6%
JavaScript 4.4%