Skip to content

Commit 3c1fcd8

Browse files
authored
feat: add support to update room membership to sdk (#381)
1 parent 73b8e4d commit 3c1fcd8

File tree

2 files changed

+46
-0
lines changed

2 files changed

+46
-0
lines changed

packages/federation-sdk/src/sdk.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,4 +274,8 @@ export class FederationSDK {
274274
notifyRemoteServerUp(...args: Parameters<typeof this.federationService.notifyRemoteServerUp>) {
275275
return this.federationService.notifyRemoteServerUp(...args);
276276
}
277+
278+
updateRoomMembership(...args: Parameters<typeof this.roomService.updateRoomMembership>) {
279+
return this.roomService.updateRoomMembership(...args);
280+
}
277281
}

packages/federation-sdk/src/services/room.service.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1533,4 +1533,46 @@ export class RoomService {
15331533
return null;
15341534
}
15351535
}
1536+
1537+
async updateRoomMembership({
1538+
roomId,
1539+
userId,
1540+
membership,
1541+
content,
1542+
}: {
1543+
roomId: RoomID;
1544+
userId: UserID;
1545+
membership: 'join' | 'leave' | 'ban';
1546+
content?: PduForType<'m.room.member'>['content'];
1547+
}) {
1548+
const roomVersion = await this.stateService.getRoomVersion(roomId);
1549+
1550+
const membershipEvent = await this.stateService.buildEvent<'m.room.member'>(
1551+
{
1552+
type: 'm.room.member',
1553+
content: {
1554+
membership,
1555+
...content,
1556+
},
1557+
room_id: roomId,
1558+
state_key: userId,
1559+
auth_events: [],
1560+
depth: 0,
1561+
prev_events: [],
1562+
origin_server_ts: Date.now(),
1563+
sender: userId,
1564+
},
1565+
roomVersion,
1566+
);
1567+
1568+
await this.stateService.handlePdu(membershipEvent);
1569+
1570+
if (membershipEvent.rejected) {
1571+
throw new Error(`Failed to update room membership: ${membershipEvent.rejectReason}`);
1572+
}
1573+
1574+
void this.federationService.sendEventToAllServersInRoom(membershipEvent);
1575+
1576+
return membershipEvent.eventId;
1577+
}
15361578
}

0 commit comments

Comments
 (0)