sentrystr_collector/
lib.rs

1//! # SentryStr Collector
2//!
3//! Event collection and monitoring from Nostr relays with optional direct message alerting.
4//!
5//! ## Quick Start
6//!
7//! ```rust
8//! use sentrystr_collector::{EventCollector, EventFilter};
9//!
10//! # #[tokio::main]
11//! # async fn main() -> Result<(), Box<dyn std::error::Error>> {
12//!     let relays = vec!["wss://relay.damus.io".to_string()];
13//!     // let collector = EventCollector::new(relays).await?;
14//!     // let filter = EventFilter::new().with_limit(10);
15//!     // let events = collector.collect_events(filter).await?;
16//!     println!("Would collect events from {} relays", relays.len());
17//!     Ok(())
18//! # }
19//! ```
20//!
21//! ## With Private Messaging
22//!
23//! ```rust
24//! use sentrystr_collector::{EventCollector, PrivateMessageConfig, EventFilter};
25//! use sentrystr::Level;
26//! use nostr::Keys;
27//!
28//! # #[tokio::main]
29//! # async fn main() -> Result<(), Box<dyn std::error::Error>> {
30//!     let relays = vec!["wss://relay.damus.io".to_string()];
31//!     // let mut collector = EventCollector::new(relays).await?;
32//!     let recipient = Keys::generate().public_key();
33//!     println!("Would setup DM alerts to {}", recipient.to_hex());
34//!     Ok(())
35//! # }
36//! ```
37//!
38//! ## Event Filtering
39//!
40//! ```rust
41//! use sentrystr_collector::{EventCollector, EventFilter};
42//! use sentrystr::Level;
43//! use nostr::Keys;
44//! use chrono::{Utc, Duration};
45//!
46//! # #[tokio::main]
47//! # async fn main() -> Result<(), Box<dyn std::error::Error>> {
48//!     let relays = vec!["wss://relay.damus.io".to_string()];
49//!     // let collector = EventCollector::new(relays).await?;
50//!     let author = Keys::generate().public_key();
51//!     let since = Utc::now() - Duration::hours(24);
52//!     println!("Would filter events from {} since {}", author.to_hex(), since);
53//!     Ok(())
54//! # }
55//! ```
56
57pub mod collector;
58pub mod error;
59pub mod filter;
60
61pub use collector::{EventCollector, PrivateMessageConfig};
62pub use error::CollectorError;
63pub use filter::EventFilter;
64
65pub type Result<T> = std::result::Result<T, CollectorError>;