Changelog
Notable changes to meshcore-ts, newest first. Versions follow
semantic versioning; pre-1.0 minor bumps may still
carry behaviour changes.
Guest logins, and repeater logins now route over the mesh.
- Guest login.
session.repeaterLogin(contactKey, '')now performs a guest login with an empty password. This is the bootstrap a public repeater expects before it will answer login-gated requests: the flooded login reply installs the contact’sout_pathand adds you to the repeater’s ACL.
Changed
Section titled “Changed”- Repeater logins always dispatch via
CMD_SEND_LOGIN(0x1a). The radio routes the frame for us — direct when the contact’sout_pathis known, flood when it isn’t — so the one command covers Direct / Flood / N-hop. Previously onlypreferDirectcontacts usedCMD_SEND_LOGIN; mesh logins went out as an anonymous request (CMD_SEND_ANON_REQ,0x39) that rejected empty passwords, so a guest login was impossible. repeaterLogin’s signature and return shape are unchanged (repeaterLogin(contactKey, password) → LoginSuccess & { mode, effective });mode/effectiveremain UI labels derived from the contact’s path state.
Removed
Section titled “Removed”Protocol.buildAnonLogin. It only existed to wrap a password as anon-request data for the old mesh-login path, and it could not build a valid guest frame (an empty anon request is rejected by the firmware). Login framing now goes throughProtocol.buildSendLogin, which accepts an empty password.
Developed after 0.3.1 as the 0.3.2-dev series and shipped as part of 0.4.0.
- Public owner-info and telemetry now work without a login. These requests
previously targeted the wrong companion command families, so a repeater serving
them publicly never answered (while
meshcore_pydid).session.repeaterRequestOwnerInfo(contactKey)now uses the public anon OWNER request and parses[now][name\nowner]; it returnsOwnerInfo | null(firmwareVersionis empty — the anon response carries no version).session.sendTelemetryReq(contactKey)now uses the binary TELEMETRY request and decodes the tagged CayenneLPP payload, re-emitting the samerepeaterTelemetrysnapshot. The legacyPUSH_TELEMETRY_RESPONSEhandler is retained for self/legacy devices.
- Multi-byte path-hash sizes are handled correctly. The
out_pathlength byte is now packed/parsed as MeshCore’s((hashSize - 1) << 6) | hopCount, and routes are reversed by hop, so hash sizes larger than one byte are no longer mangled (previously the code assumed 1-byte hashes).
- Low-level public anon request access:
session.sendAnonReq(contactKey, anonType)(anonTypefromProtocol.ANON_REQ_TYPE). - Typed public anon wrappers:
session.repeaterRequestRegions(contactKey)(region-name listing) andsession.repeaterRequestClock(contactKey)(the repeater’s RTC clock, unix seconds).