rnostr/
relay.rs

1use crate::Result;
2use clap::Parser;
3use nostr_relay::App;
4use std::path::PathBuf;
5use tracing::info;
6
7/// Start relay options
8#[derive(Debug, Clone, Parser)]
9pub struct RelayOpts {
10    /// Nostr relay config path
11    #[arg(
12        short = 'c',
13        value_name = "PATH",
14        default_value = "./config/rnostr.toml"
15    )]
16    pub config: PathBuf,
17
18    /// Auto reload when config changed
19    #[arg(long, value_name = "BOOL")]
20    pub watch: bool,
21}
22
23#[actix_rt::main]
24pub async fn relay(config: &PathBuf, watch: bool) -> Result<()> {
25    tracing_subscriber::fmt::init();
26    info!("Start relay server");
27
28    // actix_rt::System::new().block_on(async {
29    // });
30
31    let app_data = App::create(Some(config), watch, Some("RNOSTR".to_owned()), None)?;
32    let db = app_data.db.clone();
33    app_data
34        .add_extension(nostr_extensions::Metrics::new())
35        .add_extension(nostr_extensions::Auth::new())
36        .add_extension(nostr_extensions::Ratelimiter::new())
37        .add_extension(nostr_extensions::Count::new(db))
38        .add_extension(nostr_extensions::Search::new())
39        .web_server()?
40        .await?;
41    info!("Relay server shutdown");
42
43    Ok(())
44}