//! Well-known endpoints for site.standard compatibility. use crate::host_mode::CustomDomainContext; use axum::{Json, http::StatusCode}; use jacquard::smol_str::{SmolStr, format_smolstr}; use serde::Serialize; /// Well-known publication response per site.standard spec. #[derive(Debug, Clone, Serialize)] #[serde(rename_all = "camelCase")] pub struct WellKnownPublication { pub publication_uri: SmolStr, pub name: SmolStr, pub url: SmolStr, } /// Handle /.well-known/site.standard.publication /// /// Returns publication info for the current custom domain. /// This handler expects CustomDomainContext to be set by middleware. pub async fn well_known_publication( ctx: Option>, ) -> Result, StatusCode> { let ctx = ctx.ok_or(StatusCode::NOT_FOUND)?; let publication_uri = format_smolstr!( "at://{}/site.standard.publication/{}", ctx.owner, ctx.publication_rkey ); Ok(Json(WellKnownPublication { publication_uri, name: ctx.publication_name.clone(), url: format_smolstr!("https://{}", ctx.domain), })) }