use anyhow::Result;
use nostr_sdk::Client;
use crate::config::Config;
pub(crate) async fn connect_client(config: &Config) -> Result<Client> {
let client = Client::default();
let relays = config.resolved_relays();
for relay in &relays {
client.add_relay(relay).await?;
}
client.connect().await;
Ok(client)
}
pub(crate) async fn send_event_or_ignore(client: &Client, event: nostr::Event) -> Result<()> {
match client.send_event(event).await {
Ok(_) => Ok(()),
Err(_) if should_ignore_publish_errors() => Ok(()),
Err(err) => Err(err.into()),
}
}
pub(crate) fn should_ignore_publish_errors() -> bool {
for key in ["NDR_IGNORE_PUBLISH_ERRORS", "NOSTR_IGNORE_PUBLISH_ERRORS"] {
if let Ok(val) = std::env::var(key) {
let val = val.trim().to_lowercase();
return matches!(val.as_str(), "1" | "true" | "yes" | "on");
}
}
false
}