diff --git a/src/api/server/send_join.rs b/src/api/server/send_join.rs
index 609f93df..62d37e7e 100644
--- a/src/api/server/send_join.rs
+++ b/src/api/server/send_join.rs
@@ -208,6 +208,7 @@ async fn create_join_event(
.handle_incoming_pdu(&origin, room_id, &event_id, value.clone(), true)
.boxed()
.await?
+ .map(at!(0))
.ok_or_else(|| err!(Request(InvalidParam("Could not accept as timeline event."))))?;
drop(mutex_lock);
diff --git a/src/api/server/send_knock.rs b/src/api/server/send_knock.rs
index 1938e8e3..bc9b7158 100644
--- a/src/api/server/send_knock.rs
+++ b/src/api/server/send_knock.rs
@@ -11,7 +11,7 @@ use ruma::{
serde::JsonObject,
};
use tuwunel_core::{
- Err, Result, err,
+ Err, Result, at, err,
matrix::{event::gen_event_id_canonical_json, pdu::PduEvent},
warn,
};
@@ -170,6 +170,7 @@ pub(crate) async fn create_knock_event_v1_route(
.handle_incoming_pdu(&origin, &body.room_id, &event_id, value.clone(), true)
.boxed()
.await?
+ .map(at!(0))
.ok_or_else(|| err!(Request(InvalidParam("Could not accept as timeline event."))))?;
drop(mutex_lock);
diff --git a/src/api/server/send_leave.rs b/src/api/server/send_leave.rs
index e0a0de1b..ca0dbc67 100644
--- a/src/api/server/send_leave.rs
+++ b/src/api/server/send_leave.rs
@@ -11,7 +11,7 @@ use ruma::{
},
};
use serde_json::value::RawValue as RawJsonValue;
-use tuwunel_core::{Err, Result, err, matrix::event::gen_event_id_canonical_json};
+use tuwunel_core::{Err, Result, at, err, matrix::event::gen_event_id_canonical_json};
use tuwunel_service::Services;
use crate::Ruma;
@@ -151,6 +151,7 @@ async fn create_leave_event(
.handle_incoming_pdu(origin, room_id, &event_id, value, true)
.boxed()
.await?
+ .map(at!(0))
.ok_or_else(|| err!(Request(InvalidParam("Could not accept as timeline event."))))?;
drop(mutex_lock);
diff --git a/src/service/membership/invite.rs b/src/service/membership/invite.rs
index cade9b16..a33c2d23 100644
--- a/src/service/membership/invite.rs
+++ b/src/service/membership/invite.rs
@@ -5,7 +5,7 @@ use ruma::{
events::room::member::{MembershipState, RoomMemberEventContent},
};
use tuwunel_core::{
- Err, Result, err, implement, matrix::event::gen_event_id_canonical_json, pdu::PduBuilder,
+ Err, Result, at, err, implement, matrix::event::gen_event_id_canonical_json, pdu::PduBuilder,
};
use super::Service;
@@ -135,6 +135,7 @@ async fn remote_invite(
.event_handler
.handle_incoming_pdu(&origin, room_id, &event_id, value, true)
.await?
+ .map(at!(0))
.ok_or_else(|| {
err!(Request(InvalidParam("Could not accept incoming PDU as timeline event.")))
})?;
diff --git a/src/service/rooms/event_handler/handle_incoming_pdu.rs b/src/service/rooms/event_handler/handle_incoming_pdu.rs
index ab47f5b7..e249918a 100644
--- a/src/service/rooms/event_handler/handle_incoming_pdu.rs
+++ b/src/service/rooms/event_handler/handle_incoming_pdu.rs
@@ -57,11 +57,11 @@ pub async fn handle_incoming_pdu<'a>(
event_id: &'a EventId,
pdu: CanonicalJsonObject,
is_timeline_event: bool,
-) -> Result