import 'package:famedlysdk/famedlysdk.dart'; class RoomKeyRequest extends ToDeviceEvent { Client client; RoomKeyRequest.fromToDeviceEvent(ToDeviceEvent toDeviceEvent, Client client) { this.client = client; sender = toDeviceEvent.sender; content = toDeviceEvent.content; type = toDeviceEvent.type; } Room get room => client.getRoomById(content['body']['room_id']); DeviceKeys get requestingDevice => client.userDeviceKeys[sender].deviceKeys[content['requesting_device_id']]; Future forwardKey() async { var room = this.room; await room.loadInboundGroupSessionKey(content['body']['session_id']); final session = room.inboundGroupSessions[content['body']['session_id']]; var forwardedKeys = [client.identityKey]; for (final key in session.forwardingCurve25519KeyChain) { forwardedKeys.add(key); } await requestingDevice?.setVerified(true, client); var message = session.content; message['forwarding_curve25519_key_chain'] = forwardedKeys; message['session_key'] = session.inboundGroupSession .export_session(session.inboundGroupSession.first_known_index()); await client.sendToDevice( [requestingDevice], 'm.forwarded_room_key', message, ); } }