RX: inbound TEXT_MESSAGE_APP packets captured with from, text, channel, timestamp (existing log line kept)
TX delivery tracking: sends start pending; a ROUTING_APP packet whose Data.requestId matches our packet id resolves it — errorReason NONE (0) → delivered, any other value → failed + human-readable ackError (all Routing_Error values from the installed @meshtastic/protobufs mapped to names)
Broadcasts stay pending: firmware strips want_ack pre-TX, so no routing response ever arrives — documented in Swagger
History is bounded at 100 (oldest dropped), in-memory only, reset on reconnect — noted in endpoint docs
codec.ts: decodeRouting() + describeRoutingError(); verified oneof Routing.variant case "errorReason", values NONE=0/NO_ROUTE=1/GOT_NAK=2/TIMEOUT=3 against the installed package
Verification
npm run build ✓
npm test — 22/22 passed (was 18, +4: rx capture, ACK→delivered, NACK TIMEOUT→failed, cap at 100)
v0.3.0, CHANGELOG entry added
## What
New `GET /api/messages` — in-memory history of the last 100 messages: inbound text (rx) and our sends (tx), newest first, with per-send delivery status.
Record shape:
```json
{ "id": 123456789, "dir": "tx", "to": 67731772, "text": "hello",
"channel": 2, "at": 1790254822000, "status": "delivered" }
```
## Details
- RX: inbound TEXT_MESSAGE_APP packets captured with `from`, text, channel, timestamp (existing log line kept)
- TX delivery tracking: sends start `pending`; a ROUTING_APP packet whose `Data.requestId` matches our packet id resolves it — `errorReason NONE (0)` → `delivered`, any other value → `failed` + human-readable `ackError` (all Routing_Error values from the installed @meshtastic/protobufs mapped to names)
- Broadcasts stay `pending`: firmware strips want_ack pre-TX, so no routing response ever arrives — documented in Swagger
- History is bounded at 100 (oldest dropped), in-memory only, reset on reconnect — noted in endpoint docs
- `codec.ts`: `decodeRouting()` + `describeRoutingError()`; verified oneof `Routing.variant` case `"errorReason"`, values NONE=0/NO_ROUTE=1/GOT_NAK=2/TIMEOUT=3 against the installed package
## Verification
- `npm run build` ✓
- `npm test` — 22/22 passed (was 18, +4: rx capture, ACK→delivered, NACK TIMEOUT→failed, cap at 100)
- v0.3.0, CHANGELOG entry added
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
What
New
GET /api/messages— in-memory history of the last 100 messages: inbound text (rx) and our sends (tx), newest first, with per-send delivery status.Record shape:
Details
from, text, channel, timestamp (existing log line kept)pending; a ROUTING_APP packet whoseData.requestIdmatches our packet id resolves it —errorReason NONE (0)→delivered, any other value →failed+ human-readableackError(all Routing_Error values from the installed @meshtastic/protobufs mapped to names)pending: firmware strips want_ack pre-TX, so no routing response ever arrives — documented in Swaggercodec.ts:decodeRouting()+describeRoutingError(); verified oneofRouting.variantcase"errorReason", values NONE=0/NO_ROUTE=1/GOT_NAK=2/TIMEOUT=3 against the installed packageVerification
npm run build✓npm test— 22/22 passed (was 18, +4: rx capture, ACK→delivered, NACK TIMEOUT→failed, cap at 100)