From 9394657613014891ff91db6cd0a01b21bb257053 Mon Sep 17 00:00:00 2001 From: DanConwayDev Date: Tue, 4 Nov 2025 10:42:18 +0000 Subject: feat: implement NIP-01 compliant Nostr relay - WebSocket-based relay using tokio-tungstenite - Full NIP-01 protocol support (EVENT, REQ, CLOSE) - Event validation (signature and ID) - In-memory event storage - Filter support (IDs, authors, kinds, since/until) - Configuration via environment variables - Nix flake for reproducible builds - Test automation script All 6 NIP-01 smoke tests passing (100%) --- src/main.rs | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/main.rs (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..7da4c73 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,36 @@ +use anyhow::Result; +use tracing::{info, Level}; +use tracing_subscriber::FmtSubscriber; + +mod config; +mod nostr; +mod storage; + +use config::Config; + +#[tokio::main] +async fn main() -> Result<()> { + // Initialize tracing + let subscriber = FmtSubscriber::builder() + .with_max_level(Level::DEBUG) + .finish(); + tracing::subscriber::set_global_default(subscriber)?; + + info!("Starting ngit-grasp..."); + + // Load configuration + let config = Config::from_env()?; + info!("Configuration loaded: {}", config.bind_address); + + // Initialize storage + let storage = storage::Storage::new(&config)?; + info!("Storage initialized at: {}", config.relay_data_path); + + // Start Nostr relay + let relay = nostr::relay::RelayServer::new(config.clone(), storage)?; + + info!("Starting Nostr relay on {}", config.bind_address); + relay.run().await?; + + Ok(()) +} -- cgit v1.2.3