TUI:
- Split 1,756-line app.rs monolith into 7 modules (types, draw, commands, input, file_transfer, network, mod)
- Message timestamps [HH:MM], scrolling (PageUp/Down/arrows), connection status dot, unread badge
- /help command, terminal bell on incoming DM, /devices + /kick commands
- 44 unit tests (types, input, draw with TestBackend)
Server — WZP Call Infrastructure (FC-2/3/5/6/7/10):
- Call state management (CallState, CallStatus, active_calls, calls + missed_calls sled trees)
- WS call signal awareness (Offer/Answer/Hangup update state, missed call on offline)
- Group call endpoint (POST /groups/:name/call with SHA-256 room ID, fan-out)
- Presence API (GET /presence/:fp, POST /presence/batch)
- Missed call flush on WS reconnect
- WZP relay config + CORS
Server — Security (FC-P1):
- Auth enforcement middleware (AuthFingerprint extractor on 13 write handlers)
- Session auto-recovery (delete corrupted ratchet, show [session reset])
- WS connection cap (5/fingerprint) + global concurrency limit (200)
- Device management (GET /devices, POST /devices/:id/kick, POST /devices/revoke-all)
Server — Federation:
- Two-server federation via JSON config (--federation flag)
- Periodic presence sync (every 5s, full-state, self-healing)
- Message forwarding via HTTP POST with SHA-256(secret||body) auth
- Graceful degradation (peer down = queue locally)
- deliver_or_queue() replaces push-or-queue in ws.rs + messages.rs
Client — Group Messaging:
- SenderKeyDistribution storage + GroupSenderKey decryption in TUI
- sender_keys sled tree in LocalDb
WASM:
- All 8 WireMessage variants handled (no more "unsupported")
- decrypt_group_message() + create_sender_key_from_distribution() exports
- CallSignal parsing with signal_type mapping
Docs:
- ARCHITECTURE.md rewritten with Mermaid diagrams
- README.md created
- TASK_PLAN.md with FC-P{phase}-T{task} naming
- PROGRESS.md updated to v0.0.21
WZP submodule updated to 6f4e8eb (IAX2 trunking, adaptive quality, metrics, all S-tasks done)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
39 lines
771 B
Rust
39 lines
771 B
Rust
mod aliases;
|
|
pub mod auth;
|
|
mod calls;
|
|
mod devices;
|
|
mod federation;
|
|
mod groups;
|
|
mod health;
|
|
mod keys;
|
|
pub mod messages;
|
|
mod presence;
|
|
mod web;
|
|
mod ws;
|
|
mod wzp;
|
|
|
|
use axum::Router;
|
|
|
|
use crate::state::AppState;
|
|
|
|
pub fn router() -> Router<AppState> {
|
|
Router::new()
|
|
.merge(health::routes())
|
|
.merge(keys::routes())
|
|
.merge(messages::routes())
|
|
.merge(groups::routes())
|
|
.merge(aliases::routes())
|
|
.merge(auth::routes())
|
|
.merge(ws::routes())
|
|
.merge(calls::routes())
|
|
.merge(devices::routes())
|
|
.merge(presence::routes())
|
|
.merge(wzp::routes())
|
|
.merge(federation::routes())
|
|
}
|
|
|
|
/// Web UI router (served at root, outside /v1)
|
|
pub fn web_router() -> Router<AppState> {
|
|
web::routes()
|
|
}
|