Skip to main content

tuwunel_api_federation/
state_ids.rs

1use 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
9/// # `GET /_matrix/federation/v1/state_ids/{roomId}`
10///
11/// Retrieves a snapshot of a room's state at a given event, in the form of
12/// event IDs.
13pub(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}