feat: v2 rewrite — hexagonal arch, ActivityPub federation, NATS, deployment-ready #1

Merged
GKaszewski merged 334 commits from v2 into master 2026-05-16 09:42:43 +00:00
2 changed files with 8 additions and 38 deletions
Showing only changes of commit bd1dd89f78 - Show all commits

View File

@@ -261,7 +261,13 @@ impl ActivityPubService {
Ok(serde_json::to_string(&WithContext::new_default(person))?)
}
pub fn router(&self) -> Router {
/// Returns the ActivityPub router compatible with any outer state `S`.
/// Handlers only use `Data<FederationData>` injected by the middleware layer,
/// so the router is independent of the application state type.
pub fn router<S>(&self) -> Router<S>
where
S: Clone + Send + Sync + 'static,
{
Router::new()
.route("/.well-known/nodeinfo", get(nodeinfo_well_known_handler))
.route("/nodeinfo/2.0", get(nodeinfo_handler))

View File

@@ -32,44 +32,8 @@ async fn main() {
.allow_headers(tower_http::cors::Any)
};
use activitypub_base::{
followers_handler::{followers_handler, following_handler},
inbox::inbox_handler,
nodeinfo::{nodeinfo_handler, nodeinfo_well_known_handler},
outbox::outbox_handler,
webfinger::webfinger_handler,
};
let ap_router = axum::Router::new()
.route(
"/.well-known/webfinger",
axum::routing::get(webfinger_handler),
)
.route(
"/.well-known/nodeinfo",
axum::routing::get(nodeinfo_well_known_handler),
)
.route("/nodeinfo/2.0", axum::routing::get(nodeinfo_handler))
.route("/inbox", axum::routing::post(inbox_handler))
.route(
"/users/{username}/inbox",
axum::routing::post(inbox_handler),
)
.route(
"/users/{username}/outbox",
axum::routing::get(outbox_handler),
)
.route(
"/users/{username}/followers",
axum::routing::get(followers_handler),
)
.route(
"/users/{username}/following",
axum::routing::get(following_handler),
)
.layer(infra.ap_service.federation_config().middleware());
let base = presentation::routes::router()
.merge(ap_router)
.merge(infra.ap_service.router::<presentation::state::AppState>())
.with_state(infra.state)
.layer(cors);