11import { FederationMatrix , Authorization , MeteorError } from '@rocket.chat/core-services' ;
2- import { isEditedMessage , isUserNativeFederated , type IMessage , type IRoom , type IUser } from '@rocket.chat/core-typings' ;
2+ import {
3+ isEditedMessage ,
4+ isRoomNativeFederated ,
5+ isUserNativeFederated ,
6+ type IMessage ,
7+ type IRoom ,
8+ type IUser ,
9+ } from '@rocket.chat/core-typings' ;
310import { Rooms } from '@rocket.chat/models' ;
411
512import { callbacks } from '../../../../lib/callbacks' ;
@@ -15,21 +22,36 @@ import { FederationActions } from '../../../../server/services/room/hooks/Before
1522
1623// Called BEFORE subscriptions are created - creates Matrix room so invites can be sent.
1724// The invites are sent by beforeAddUserToRoom callback.
18- callbacks . add ( 'federation.afterCreateFederatedRoom' , async ( room , { owner } ) => {
19- if ( FederationActions . shouldPerformFederationAction ( room ) ) {
20- const federatedRoomId = room ?. federation ?. mrid ;
21- if ( ! federatedRoomId ) {
22- await FederationMatrix . createRoom ( room , owner ) ;
23- } else {
24- // matrix room was already created and passed
25- const fromServer = federatedRoomId . split ( ':' ) [ 1 ] ;
25+ callbacks . add ( 'federation.afterCreateFederatedRoom' , async ( room , { owner, originalMemberList : members } ) => {
26+ if ( ! FederationActions . shouldPerformFederationAction ( room ) ) {
27+ return ;
28+ }
2629
27- await Rooms . setAsFederated ( room . _id , {
28- mrid : federatedRoomId ,
29- origin : fromServer ,
30- } ) ;
31- }
30+ const federatedRoomId = room ?. federation ?. mrid ;
31+ if ( ! federatedRoomId ) {
32+ await FederationMatrix . createRoom ( room , owner ) ;
33+ } else {
34+ // TODO unify how to get server
35+ // matrix room was already created and passed
36+ const fromServer = federatedRoomId . split ( ':' ) [ 1 ] ;
37+
38+ await Rooms . setAsFederated ( room . _id , {
39+ mrid : federatedRoomId ,
40+ origin : fromServer ,
41+ } ) ;
42+ }
43+
44+ const federationRoom = await Rooms . findOneById ( room . _id ) ;
45+ if ( ! federationRoom || ! isRoomNativeFederated ( federationRoom ) ) {
46+ throw new MeteorError ( 'error-invalid-room' , 'Invalid room' ) ;
3247 }
48+
49+ // TODO this won't be neeeded once we receive all state events at ee/packages/federation-matrix/src/events/member.ts
50+ await FederationMatrix . inviteUsersToRoom (
51+ federationRoom ,
52+ members . filter ( ( member ) => member !== owner . username ) ,
53+ owner ,
54+ ) ;
3355} ) ;
3456
3557callbacks . add (
0 commit comments