feat(wallet,content,seed): Fedimint dual-ecash, paid content streaming, seed ceremony
- Fedimint ecash alongside Cashu: fedimint-clientd (fmcd) HTTP bridge, fedimint_client, fedimint RPC, wallet wiring - Paid peer content: content invoices + streaming content server + content RPCs - Seed-phrase ceremony/reveal RPCs and CLI ceremony tool - LND wallet, mesh status/messaging, app-stack (netbird HTTPS), and decoupled-update wiring; Fedimint Client core app in catalog Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
c10f2ac22e
commit
bd567cd165
@@ -266,6 +266,39 @@ impl Server {
|
||||
warn!("Mesh service start failed (non-fatal): {}", e);
|
||||
} else {
|
||||
info!("📡 Mesh networking started");
|
||||
|
||||
// Push mesh peer changes to open WebSockets instantly
|
||||
// instead of the UI polling every 5s (#48): subscribe to
|
||||
// mesh events and nudge the data-model revision (debounced)
|
||||
// so /ws/db clients refetch peers on discovery/update.
|
||||
let mut rx = mesh_service.state().event_tx.subscribe();
|
||||
let sm = state_manager.clone();
|
||||
tokio::spawn(async move {
|
||||
use tokio::time::{Duration, Instant};
|
||||
let mut last: Option<Instant> = None;
|
||||
loop {
|
||||
match rx.recv().await {
|
||||
Ok(crate::mesh::MeshEvent::PeerDiscovered(_))
|
||||
| Ok(crate::mesh::MeshEvent::PeerUpdated(_)) => {
|
||||
// Debounce advert storms to ~2 Hz.
|
||||
if last
|
||||
.map(|t| t.elapsed() < Duration::from_millis(500))
|
||||
.unwrap_or(false)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
last = Some(Instant::now());
|
||||
let (data, _) = sm.get_snapshot().await;
|
||||
sm.update_data(data).await;
|
||||
}
|
||||
Ok(_) => {}
|
||||
Err(tokio::sync::broadcast::error::RecvError::Lagged(_)) => {
|
||||
continue
|
||||
}
|
||||
Err(_) => break, // sender dropped → mesh stopped
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
api_handler
|
||||
@@ -1285,6 +1318,7 @@ fn ensure_main_lan_address(pkg: &mut crate::data_model::PackageDataEntry, port:
|
||||
fn fallback_package_port(app_id: &str) -> Option<u16> {
|
||||
match app_id {
|
||||
"fedimint" | "fedimintd" => Some(8175),
|
||||
"fedimint-clientd" => Some(8178),
|
||||
"filebrowser" => Some(8083),
|
||||
"indeedhub" => Some(7778),
|
||||
"nginx-proxy-manager" => Some(8081),
|
||||
|
||||
Reference in New Issue
Block a user