mod api; mod bsky; mod meow; mod srv; use bsky_sdk::BskyAgent; use bsky_sdk::agent::config::FileStore; use rocket::{Config, routes}; use std::net::Ipv4Addr; use std::path::Path; struct ManagedBskyAgent { agent: BskyAgent, } #[rocket::main] async fn main() -> anyhow::Result<()> { let agent_builder = BskyAgent::builder(); let agent; if !Path::new(".session.json").is_file() { println!("logging in with creds from env"); agent = agent_builder.build().await?; agent .login( dotenvy::var("BS_USERNAME").unwrap(), dotenvy::var("BS_PASSWORD").unwrap(), ) .await?; agent .to_config() .await .save(&FileStore::new(".session.json")) .await?; } else { agent = agent_builder .config(bsky_sdk::agent::config::Config::load(&FileStore::new(".session.json")).await?) .build() .await?; } let sess = agent.api.com.atproto.server.get_session().await; println!("session: {:?}", sess); let figment = Config::figment() .merge(("port", 42069)) .merge(("address", Ipv4Addr::from([0, 0, 0, 0]))); let _rocket = rocket::build() .mount( "/", routes![srv::index, srv::version, bsky::profile_post, api::oembed], ) .manage(ManagedBskyAgent { agent }) .configure(figment) .launch() .await?; Ok(()) }