feat(mesh): show federated Archipelago nodes on the Mesh Map

Peers that opt in via a new "Share Location" toggle in Settings
(server.set-location RPC) get plotted on other trusted peers' Mesh Map
with a distinct Archy-logo marker, separate from raw LoRa radio peers.
Location is persisted locally, carried in NodeStateSnapshot, and
propagated through federation sync/delta like other node state.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
archipelago
2026-07-01 12:04:31 -04:00
co-authored by Claude Sonnet 5
parent e3baaa5de3
commit 177b8a4338
15 changed files with 337 additions and 4 deletions
+15
View File
@@ -61,6 +61,18 @@ pub struct ServerInfo {
/// True if this node's keys are derived from a BIP-39 seed.
#[serde(rename = "seed-backed", default)]
pub seed_backed: bool,
/// This node's own physical location, for the Mesh Map — opt-in only
/// (see `share_location`), set via `server.set-location`. `None` until
/// the user sets one, regardless of `share_location`.
#[serde(default)]
pub lat: Option<f64>,
#[serde(default)]
pub lon: Option<f64>,
/// Whether `lat`/`lon` should be included in the state snapshot we send
/// to trusted federation peers (so they can plot us on their Mesh Map).
/// Defaults to false — never shared unless explicitly turned on.
#[serde(rename = "share-location", default)]
pub share_location: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
@@ -347,6 +359,9 @@ impl DataModel {
wifi_ssids: vec![],
zram_enabled: false,
seed_backed: false,
lat: None,
lon: None,
share_location: false,
},
package_data: HashMap::new(),
peer_health: HashMap::new(),