use std::sync::OnceLock; use nostr_sdk::prelude::*; use crate::state::AppState; pub mod constants; pub mod paths; pub mod state; static APP_STATE: OnceLock = OnceLock::new(); static NIP65_RELAYS: OnceLock)>> = OnceLock::new(); static NIP17_RELAYS: OnceLock> = OnceLock::new(); /// Initialize the application state. pub fn app_state() -> &'static AppState { APP_STATE.get_or_init(AppState::new) } /// Default NIP-65 Relays. Used for new account pub fn default_nip65_relays() -> &'static Vec<(RelayUrl, Option)> { NIP65_RELAYS.get_or_init(|| { vec![ ( RelayUrl::parse("wss://nostr.mom").unwrap(), Some(RelayMetadata::Read), ), ( RelayUrl::parse("wss://nostr.bitcoiner.social").unwrap(), Some(RelayMetadata::Read), ), ( RelayUrl::parse("wss://nostr.oxtr.dev").unwrap(), Some(RelayMetadata::Write), ), ( RelayUrl::parse("wss://nostr.fmt.wiz.biz").unwrap(), Some(RelayMetadata::Write), ), (RelayUrl::parse("wss://relay.primal.net").unwrap(), None), (RelayUrl::parse("wss://relay.damus.io").unwrap(), None), ] }) } /// Default NIP-17 Relays. Used for new account pub fn default_nip17_relays() -> &'static Vec { NIP17_RELAYS.get_or_init(|| { vec![ RelayUrl::parse("wss://nip17.com").unwrap(), RelayUrl::parse("wss://auth.nostr1.com").unwrap(), ] }) }