tuwunel_api_federation/
state_ids.rs1use axum::extract::State;
2use futures::StreamExt;
3use ruma::api::federation::event::get_room_state_ids;
4use tuwunel_core::Result;
5
6use super::utils::{state_at_event, walk_state_auth_chain};
7use crate::Ruma;
8
9pub(crate) async fn get_room_state_ids_route(
14 State(services): State<crate::State>,
15 body: Ruma<get_room_state_ids::v1::Request>,
16) -> Result<get_room_state_ids::v1::Response> {
17 let (room_version, pdu_ids) =
18 state_at_event(&services, body.origin(), &body.room_id, &body.event_id).await?;
19
20 let auth_chain_ids =
21 walk_state_auth_chain(&services, &body.room_id, &room_version, &pdu_ids, &body.event_id)
22 .collect()
23 .await;
24
25 Ok(get_room_state_ids::v1::Response { auth_chain_ids, pdu_ids })
26}