state.rs (2947B)
1 use anyhow::Result; 2 use radroots_identity::RadrootsIdentity; 3 use radroots_nostr::prelude::{ 4 RadrootsNostrClient, RadrootsNostrKeys, RadrootsNostrMetadata, RadrootsNostrPublicKey, 5 }; 6 7 use crate::app::config::{Nip46Config, PublishProxyConfig}; 8 use crate::core::publish_proxy::PublishProxy; 9 10 #[derive(Clone)] 11 pub struct Radrootsd { 12 pub client: RadrootsNostrClient, 13 pub keys: RadrootsNostrKeys, 14 pub pubkey: RadrootsNostrPublicKey, 15 pub metadata: RadrootsNostrMetadata, 16 pub info: serde_json::Value, 17 pub publish_proxy: PublishProxy, 18 pub(crate) nip46_sessions: crate::core::nip46::session::Nip46SessionStore, 19 pub nip46_config: Nip46Config, 20 } 21 22 impl Radrootsd { 23 pub fn new( 24 identity: RadrootsIdentity, 25 metadata: RadrootsNostrMetadata, 26 publish_proxy_config: PublishProxyConfig, 27 nip46_config: Nip46Config, 28 ) -> Result<Self> { 29 let keys: RadrootsNostrKeys = identity.keys().clone(); 30 let pubkey = keys.public_key(); 31 let client = RadrootsNostrClient::new(keys.clone()); 32 let info = serde_json::json!({ 33 "version": env!("CARGO_PKG_VERSION"), 34 "build": option_env!("GIT_HASH").unwrap_or("unknown"), 35 }); 36 #[cfg(test)] 37 let publish_proxy = PublishProxy::memory(publish_proxy_config)?; 38 #[cfg(not(test))] 39 let publish_proxy = PublishProxy::open(publish_proxy_config)?; 40 let nip46_sessions = crate::core::nip46::session::Nip46SessionStore::new(); 41 42 Ok(Self { 43 client, 44 keys, 45 pubkey, 46 metadata, 47 info, 48 publish_proxy, 49 nip46_sessions, 50 nip46_config, 51 }) 52 } 53 } 54 55 #[cfg(test)] 56 mod tests { 57 use super::Radrootsd; 58 use crate::app::config::{Nip46Config, PublishProxyConfig}; 59 use radroots_identity::RadrootsIdentity; 60 use radroots_nostr::prelude::RadrootsNostrMetadata; 61 62 #[test] 63 fn new_sets_core_fields() { 64 let identity = RadrootsIdentity::generate(); 65 let metadata: RadrootsNostrMetadata = 66 serde_json::from_str(r#"{"name":"radrootsd-test"}"#).expect("metadata"); 67 let publish_proxy_cfg = PublishProxyConfig::default(); 68 let cfg = Nip46Config::default(); 69 let state = Radrootsd::new( 70 identity.clone(), 71 metadata.clone(), 72 publish_proxy_cfg.clone(), 73 cfg.clone(), 74 ) 75 .expect("state"); 76 77 assert_eq!(state.pubkey, identity.public_key()); 78 assert_eq!(state.metadata, metadata); 79 assert_eq!( 80 state.publish_proxy.config.enabled, 81 publish_proxy_cfg.enabled 82 ); 83 assert_eq!(state.nip46_config.session_ttl_secs, cfg.session_ttl_secs); 84 assert_eq!(state.nip46_config.perms, cfg.perms); 85 assert_eq!(state.info["version"], env!("CARGO_PKG_VERSION")); 86 assert_eq!(state.info["build"], "unknown"); 87 } 88 }