# meshcore TypeScript library for MeshCore protocol utilities. ## Packet parsing Using the library to decode MeshCore packets: ```ts 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: ```ts 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.