Phase 1 of the MeshMonitor HTTP-gateway migration: a stateless REST client
that a later phase wires into MeshService to replace the raw
Meshtastic protobuf-over-TCP bridge.
- mesh-monitor-client.ts: MeshMonitorClient interface, HttpMeshMonitorClient
(native fetch, Bearer auth, injectable base/source/poll params), mappers for
the gateway's actual JSON shapes (source-scoped paths, flat node position,
second-based node lastHeard vs ms message/telemetry timestamps, long-format
telemetry, packet id = 3rd segment of the id string), MeshMonitorError,
nodeNumToId/nodeIdToNum, shared assertSendTarget XOR, and
createMeshMonitorClientFromEnv() (null when MESHMONITOR_API_TOKEN unset).
- fake-mesh-monitor-client.ts: in-memory double mirroring the client contract
(set*/pushInbound config, sends[] recorder, outbound mirrored into
getMessages, newest-first, limit/channel/toNodeId/fromNodeId filters).
- meshmonitor.module.ts: thin Nest provider exposing the env-built client
(or null) under MESH_MONITOR_CLIENT for Phase 2's MeshModule.
- specs: HttpMeshMonitorClient against an in-process node:http gateway
(raw->typed mapping per endpoint, Authorization: Bearer header, send body
shape with channel/toNodeId XOR + replyId passthrough, 401/413/429/503
-> MeshMonitorError); FakeMeshMonitorClient behavior.
No MeshService changes, no version bump, no changelog, no PR.