- Full Tauri v2 mobile scaffold (Rust backend + React frontend + Android) - Multi-profile architecture: Business / Personal / Family / Kids - Per-profile encrypted SQLite isolation via rusqlite - Kids profile: persistent PIN storage (SHA-256 + salt), setup flow, PIN lock - Desktop dev mode working (GTK/WebKit) on ARM64 Linux - Android APK build working (arm64, 17MB unsigned) - Phase 2 stubs: Jitsi SDK, cpal/hound audio, Beam voice commands - QEMU x86_64 emulation for Google Android SDK tools on ARM64 host - Workspace integration with synq-protocol, synq-security, synq-core
48 lines
1.7 KiB
Rust
48 lines
1.7 KiB
Rust
pub mod api;
|
|
pub mod models;
|
|
pub mod repo;
|
|
|
|
use axum::{
|
|
routing::{get, post},
|
|
Router,
|
|
};
|
|
use tower_http::{
|
|
cors::CorsLayer,
|
|
compression::CompressionLayer,
|
|
};
|
|
|
|
use api::AppState;
|
|
|
|
pub fn create_router() -> Router {
|
|
let state = AppState::default();
|
|
|
|
Router::new()
|
|
.route("/api/health", get(health_check))
|
|
// Core intel routes
|
|
.route("/api/entities", get(api::list_entities))
|
|
.route("/api/entities/:id", get(api::get_entity))
|
|
.route("/api/connections", get(api::list_connections))
|
|
.route("/api/connections/:id", get(api::get_connection))
|
|
.route("/api/connections/:id/state", post(api::update_connection_state))
|
|
.route("/api/layers", get(api::list_layers))
|
|
.route("/api/layers/:id/toggle", post(api::toggle_layer))
|
|
.route("/api/stories", get(api::list_stories))
|
|
.route("/api/stories/:id", get(api::get_story))
|
|
.route("/api/map/viewport", post(api::update_viewport))
|
|
.route("/api/beam/brief", get(api::get_beam_brief))
|
|
.route("/api/beam/prompt", post(api::send_beam_prompt))
|
|
// Epstein dataset routes
|
|
.route("/api/dataset/stats", get(api::dataset_stats))
|
|
.route("/api/documents", get(api::list_documents))
|
|
.route("/api/documents/search", get(api::search_documents))
|
|
.route("/api/documents/:efta/pages", get(api::get_document_pages))
|
|
.route("/api/emails", get(api::list_emails))
|
|
.route("/api/emails/search", get(api::search_emails))
|
|
.layer(CorsLayer::permissive())
|
|
.layer(CompressionLayer::new().gzip(true).br(true))
|
|
.with_state(state)
|
|
}
|
|
|
|
async fn health_check() -> &'static str {
|
|
"ok"
|
|
}
|