diff --git a/src/main.rs b/src/main.rs index e6e1a7b..e515e59 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,20 +1,18 @@ mod jetstream; mod server; mod store; +mod xrpc; -use jacquard::{oauth::resolver::OAuthResolver, types::ident::AtIdentifier, xrpc::XrpcExt}; use serde::Deserialize; use sqlx::migrate::MigrateDatabase; use jacquard::api::app_bsky::graph::follow::Follow; use jacquard::common::CowStr; use jacquard::deps::fluent_uri::Uri; -use jacquard::identity; -use jacquard_api::{ - app_bsky::graph::get_follows::GetFollows, com_atproto::repo::list_records::ListRecords, -}; - -mod xrpc; +use jacquard::{oauth::resolver::OAuthResolver, types::ident::AtIdentifier, xrpc::XrpcExt}; +use jacquard_api::com_atproto::repo::list_records::ListRecords; +use jacquard_identity::JacquardResolver; +use jacquard_identity::resolver::ResolverOptions; #[tokio::main] async fn main() -> anyhow::Result<()> { @@ -34,25 +32,21 @@ async fn main() -> anyhow::Result<()> { let users_did = std::env::var("USERS_DID").unwrap(); let jetstream_host = std::env::var("JETSTREAM_HOST").unwrap(); - let endpoint = get_pds_endpoint(&users_did).await; + let resolver = JacquardResolver::new(reqwest::Client::new(), ResolverOptions::default()); - match endpoint { - Some(e) => seed_follows(&pool, &users_did, e).await?, + match get_pds_endpoint(&resolver, &users_did).await { + Some(endpoint) => seed_follows(&pool, &users_did, endpoint).await?, None => Err("no endpoint found for user").unwrap(), } tokio::join!( - server::run_server(), + server::run_server(resolver), jetstream::run_following_jetstream(&users_did, jetstream_host, &pool), ); Ok(()) } -async fn get_pds_endpoint(users_did: &String) -> Option { - let http = reqwest::Client::new(); - let opts = identity::resolver::ResolverOptions::default(); - let resolver = identity::PublicResolver::new(http, opts); - +async fn get_pds_endpoint(resolver: &JacquardResolver, users_did: &String) -> Option { let (_, identity) = resolver.resolve_from_identity(users_did).await.unwrap(); match identity.pds_endpoint().iter().next() { diff --git a/src/server.rs b/src/server.rs index e4b4b40..269b998 100644 --- a/src/server.rs +++ b/src/server.rs @@ -5,20 +5,19 @@ use axum::{ response::{IntoResponse, Response}, routing::get, }; -use jacquard_axum::{IntoRouter, service_auth::ServiceAuth, service_auth::ServiceAuthConfig}; -use jacquard_common::types::string::Did; -use jacquard_identity::JacquardResolver; -use jacquard_identity::resolver::ResolverOptions; use serde_json::json; use std::net::SocketAddr; use jacquard_api::{ app_bsky::{ - actor::get_profile::{GetProfile, GetProfileRequest}, + actor::get_profile::GetProfileRequest, feed::{get_feed::GetFeedRequest, get_timeline::GetTimelineRequest}, }, com_atproto::repo::get_record::GetRecordRequest, }; +use jacquard_axum::{IntoRouter, service_auth::ServiceAuth, service_auth::ServiceAuthConfig}; +use jacquard_common::types::string::Did; +use jacquard_identity::JacquardResolver; use crate::xrpc::routes::{ app_bsky_actor_get_profile, app_bsky_feed_get_feed, app_bsky_feed_get_timeline, @@ -32,7 +31,7 @@ pub struct ServerConfig { pub user_did: String, } -pub async fn run_server() { +pub async fn run_server(resolver: JacquardResolver) { let host = std::env::var("APPVIEW_HOST").unwrap_or("0.0.0.0".to_string()); let port: u16 = std::env::var("APPVIEW_PORT") .ok() @@ -52,7 +51,6 @@ pub async fn run_server() { let service_did = Did::new_owned(appview_did).expect("APPVIEW_DID produced an invalid did:web"); - let resolver = JacquardResolver::new(reqwest::Client::new(), ResolverOptions::default()); let auth_config = ServiceAuthConfig::new(service_did, resolver.clone()); let app_state = AppState::new(server_config, auth_config, resolver.clone());