use easy_nostr::EasyNostr; use nostr_sdk::prelude::{Keys, ToBech32}; use serde::Serialize; // Import für die Schlüssel-Generierung // Diese Struktur ist für den Transport zum Frontend (JSON) #[derive(Serialize)] pub struct LocalPost { pub content: String, pub author: String, pub created_at: u64, } #[tauri::command] pub async fn fetch_nostr_posts() -> Result, String> { // 1. Temporären Einweg-Schlüssel generieren // Das erzeugt ein Schlüsselpaar im RAM, das nach dem Funktionsaufruf verschwindet. let random_keys = Keys::generate(); let temp_nsec = random_keys .secret_key() .to_bech32() .map_err(|e| format!("Fehler beim Generieren des Keys: {}", e))?; // 2. Verbindung mit dem temporären Key aufbauen let easy = EasyNostr::new(&temp_nsec) .await .map_err(|e| e.to_string())?; // 3. Relays hinzufügen easy.add_relays(vec![ "wss://relay.damus.io", "wss://nos.lol", "wss://relay.snort.social", ]) .await .map_err(|e| e.to_string())?; // 4. Posts von der Library holen let raw_posts = easy.get_random_posts().await.map_err(|e| e.to_string())?; // 5. Mappen: Library-Typ -> Unser serialisierbarer Typ let mapped_posts = raw_posts .into_iter() .map(|p| LocalPost { content: p.content, author: p.author.to_string(), created_at: p.created_at.as_secs(), }) .collect(); Ok(mapped_posts) }