Rename FederationSenderQueryAPI to FederationSenderInternalAPI

This commit is contained in:
Neil Alexander 2020-04-29 10:12:32 +01:00
parent 29ce2b78e7
commit 4dcfe66542
18 changed files with 56 additions and 62 deletions

View file

@ -44,7 +44,7 @@ func SetupClientAPIComponent(
eduInputAPI eduServerAPI.EDUServerInputAPI, eduInputAPI eduServerAPI.EDUServerInputAPI,
asAPI appserviceAPI.AppServiceQueryAPI, asAPI appserviceAPI.AppServiceQueryAPI,
transactionsCache *transactions.Cache, transactionsCache *transactions.Cache,
fedSenderAPI federationSenderAPI.FederationSenderQueryAPI, fsAPI federationSenderAPI.FederationSenderInternalAPI,
) { ) {
roomserverProducer := producers.NewRoomserverProducer(inputAPI, queryAPI) roomserverProducer := producers.NewRoomserverProducer(inputAPI, queryAPI)
eduProducer := producers.NewEDUServerProducer(eduInputAPI) eduProducer := producers.NewEDUServerProducer(eduInputAPI)
@ -69,6 +69,6 @@ func SetupClientAPIComponent(
routing.Setup( routing.Setup(
base.APIMux, base.Cfg, roomserverProducer, queryAPI, aliasAPI, asAPI, base.APIMux, base.Cfg, roomserverProducer, queryAPI, aliasAPI, asAPI,
accountsDB, deviceDB, federation, *keyRing, userUpdateProducer, accountsDB, deviceDB, federation, *keyRing, userUpdateProducer,
syncProducer, eduProducer, transactionsCache, fedSenderAPI, syncProducer, eduProducer, transactionsCache, fsAPI,
) )
} }

View file

@ -47,7 +47,7 @@ func DirectoryRoom(
federation *gomatrixserverlib.FederationClient, federation *gomatrixserverlib.FederationClient,
cfg *config.Dendrite, cfg *config.Dendrite,
rsAPI roomserverAPI.RoomserverAliasAPI, rsAPI roomserverAPI.RoomserverAliasAPI,
fedSenderAPI federationSenderAPI.FederationSenderQueryAPI, fedSenderAPI federationSenderAPI.FederationSenderInternalAPI,
) util.JSONResponse { ) util.JSONResponse {
_, domain, err := gomatrixserverlib.SplitID('#', roomAlias) _, domain, err := gomatrixserverlib.SplitID('#', roomAlias)
if err != nil { if err != nil {

View file

@ -60,7 +60,7 @@ func Setup(
syncProducer *producers.SyncAPIProducer, syncProducer *producers.SyncAPIProducer,
eduProducer *producers.EDUServerProducer, eduProducer *producers.EDUServerProducer,
transactionsCache *transactions.Cache, transactionsCache *transactions.Cache,
federationSender federationSenderAPI.FederationSenderQueryAPI, federationSender federationSenderAPI.FederationSenderInternalAPI,
) { ) {
apiMux.Handle("/_matrix/client/versions", apiMux.Handle("/_matrix/client/versions",

View file

@ -37,12 +37,12 @@ func main() {
asQuery := base.CreateHTTPAppServiceAPIs() asQuery := base.CreateHTTPAppServiceAPIs()
alias, input, query := base.CreateHTTPRoomserverAPIs() alias, input, query := base.CreateHTTPRoomserverAPIs()
fedSenderQueryAPI, _ := base.CreateHTTPFederationSenderAPIs() fsAPI := base.CreateHTTPFederationSenderAPIs()
eduInputAPI := eduserver.SetupEDUServerComponent(base, cache.New()) eduInputAPI := eduserver.SetupEDUServerComponent(base, cache.New())
clientapi.SetupClientAPIComponent( clientapi.SetupClientAPIComponent(
base, deviceDB, accountDB, federation, &keyRing, base, deviceDB, accountDB, federation, &keyRing,
alias, input, query, eduInputAPI, asQuery, transactions.New(), fedSenderQueryAPI, alias, input, query, eduInputAPI, asQuery, transactions.New(), fsAPI,
) )
base.SetupAndServeHTTP(string(base.Cfg.Bind.ClientAPI), string(base.Cfg.Listen.ClientAPI)) base.SetupAndServeHTTP(string(base.Cfg.Bind.ClientAPI), string(base.Cfg.Listen.ClientAPI))

View file

@ -153,15 +153,15 @@ func main() {
asQuery := appservice.SetupAppServiceAPIComponent( asQuery := appservice.SetupAppServiceAPIComponent(
&base.Base, accountDB, deviceDB, federation, alias, query, transactions.New(), &base.Base, accountDB, deviceDB, federation, alias, query, transactions.New(),
) )
fedSenderQueryAPI, _ := federationsender.SetupFederationSenderComponent(&base.Base, federation, query, input) fsAPI := federationsender.SetupFederationSenderComponent(&base.Base, federation, query, input)
clientapi.SetupClientAPIComponent( clientapi.SetupClientAPIComponent(
&base.Base, deviceDB, accountDB, &base.Base, deviceDB, accountDB,
federation, &keyRing, alias, input, query, federation, &keyRing, alias, input, query,
eduInputAPI, asQuery, transactions.New(), fedSenderQueryAPI, eduInputAPI, asQuery, transactions.New(), fsAPI,
) )
eduProducer := producers.NewEDUServerProducer(eduInputAPI) eduProducer := producers.NewEDUServerProducer(eduInputAPI)
federationapi.SetupFederationAPIComponent(&base.Base, accountDB, deviceDB, federation, &keyRing, alias, input, query, asQuery, fedSenderQueryAPI, eduProducer) federationapi.SetupFederationAPIComponent(&base.Base, accountDB, deviceDB, federation, &keyRing, alias, input, query, asQuery, fsAPI, eduProducer)
mediaapi.SetupMediaAPIComponent(&base.Base, deviceDB) mediaapi.SetupMediaAPIComponent(&base.Base, deviceDB)
publicRoomsDB, err := storage.NewPublicRoomsServerDatabaseWithPubSub(string(base.Base.Cfg.Database.PublicRoomsAPI), base.LibP2PPubsub) publicRoomsDB, err := storage.NewPublicRoomsServerDatabaseWithPubSub(string(base.Base.Cfg.Database.PublicRoomsAPI), base.LibP2PPubsub)
if err != nil { if err != nil {

View file

@ -32,7 +32,7 @@ func main() {
deviceDB := base.CreateDeviceDB() deviceDB := base.CreateDeviceDB()
keyDB := base.CreateKeyDB() keyDB := base.CreateKeyDB()
federation := base.CreateFederationClient() federation := base.CreateFederationClient()
fedSenderQueryAPI, _ := base.CreateHTTPFederationSenderAPIs() fsAPI := base.CreateHTTPFederationSenderAPIs()
keyRing := keydb.CreateKeyRing(federation.Client, keyDB, cfg.Matrix.KeyPerspectives) keyRing := keydb.CreateKeyRing(federation.Client, keyDB, cfg.Matrix.KeyPerspectives)
alias, input, query := base.CreateHTTPRoomserverAPIs() alias, input, query := base.CreateHTTPRoomserverAPIs()
@ -42,7 +42,7 @@ func main() {
federationapi.SetupFederationAPIComponent( federationapi.SetupFederationAPIComponent(
base, accountDB, deviceDB, federation, &keyRing, base, accountDB, deviceDB, federation, &keyRing,
alias, input, query, asQuery, fedSenderQueryAPI, eduProducer, alias, input, query, asQuery, fsAPI, eduProducer,
) )
base.SetupAndServeHTTP(string(base.Cfg.Bind.FederationAPI), string(base.Cfg.Listen.FederationAPI)) base.SetupAndServeHTTP(string(base.Cfg.Bind.FederationAPI), string(base.Cfg.Listen.FederationAPI))

View file

@ -62,16 +62,16 @@ func main() {
asQuery := appservice.SetupAppServiceAPIComponent( asQuery := appservice.SetupAppServiceAPIComponent(
base, accountDB, deviceDB, federation, alias, query, transactions.New(), base, accountDB, deviceDB, federation, alias, query, transactions.New(),
) )
fedSenderQueryAPI, fedSenderInputAPI := federationsender.SetupFederationSenderComponent(base, federation, query, input) fsAPI := federationsender.SetupFederationSenderComponent(base, federation, query, input)
input.SetFederationSenderInputAPI(fedSenderInputAPI) input.SetFederationSenderAPI(fsAPI)
clientapi.SetupClientAPIComponent( clientapi.SetupClientAPIComponent(
base, deviceDB, accountDB, base, deviceDB, accountDB,
federation, &keyRing, alias, input, query, federation, &keyRing, alias, input, query,
eduInputAPI, asQuery, transactions.New(), fedSenderQueryAPI, eduInputAPI, asQuery, transactions.New(), fsAPI,
) )
eduProducer := producers.NewEDUServerProducer(eduInputAPI) eduProducer := producers.NewEDUServerProducer(eduInputAPI)
federationapi.SetupFederationAPIComponent(base, accountDB, deviceDB, federation, &keyRing, alias, input, query, asQuery, fedSenderQueryAPI, eduProducer) federationapi.SetupFederationAPIComponent(base, accountDB, deviceDB, federation, &keyRing, alias, input, query, asQuery, fsAPI, eduProducer)
mediaapi.SetupMediaAPIComponent(base, deviceDB) mediaapi.SetupMediaAPIComponent(base, deviceDB)
publicRoomsDB, err := storage.NewPublicRoomsServerDatabase(string(base.Cfg.Database.PublicRoomsAPI)) publicRoomsDB, err := storage.NewPublicRoomsServerDatabase(string(base.Cfg.Database.PublicRoomsAPI))
if err != nil { if err != nil {

View file

@ -30,9 +30,9 @@ func main() {
federation := base.CreateFederationClient() federation := base.CreateFederationClient()
keyRing := keydb.CreateKeyRing(federation.Client, keyDB, cfg.Matrix.KeyPerspectives) keyRing := keydb.CreateKeyRing(federation.Client, keyDB, cfg.Matrix.KeyPerspectives)
_, fsInputAPI := base.CreateHTTPFederationSenderAPIs() fsAPI := base.CreateHTTPFederationSenderAPIs()
_, input, _ := roomserver.SetupRoomServerComponent(base, keyRing, federation) _, input, _ := roomserver.SetupRoomServerComponent(base, keyRing, federation)
input.SetFederationSenderInputAPI(fsInputAPI) input.SetFederationSenderAPI(fsAPI)
base.SetupAndServeHTTP(string(base.Cfg.Bind.RoomServer), string(base.Cfg.Listen.RoomServer)) base.SetupAndServeHTTP(string(base.Cfg.Bind.RoomServer), string(base.Cfg.Listen.RoomServer))

View file

@ -149,20 +149,14 @@ func (b *BaseDendrite) CreateHTTPEDUServerAPIs() eduServerAPI.EDUServerInputAPI
return e return e
} }
// CreateHTTPFederationSenderAPIs returns FederationSenderQueryAPI for hitting // CreateHTTPFederationSenderAPIs returns FederationSenderInternalAPI for hitting
// the federation sender over HTTP // the federation sender over HTTP
func (b *BaseDendrite) CreateHTTPFederationSenderAPIs() ( func (b *BaseDendrite) CreateHTTPFederationSenderAPIs() federationSenderAPI.FederationSenderInternalAPI {
federationSenderAPI.FederationSenderQueryAPI, federationSenderAPI.FederationSenderInputAPI, f, err := federationSenderAPI.NewFederationSenderInternalAPIHTTP(b.Cfg.FederationSenderURL(), b.httpClient)
) {
f, err := federationSenderAPI.NewFederationSenderQueryAPIHTTP(b.Cfg.FederationSenderURL(), b.httpClient)
if err != nil { if err != nil {
logrus.WithError(err).Panic("NewFederationSenderQueryAPIHTTP failed", b.httpClient) logrus.WithError(err).Panic("NewFederationSenderInternalAPIHTTP failed", b.httpClient)
} }
fi, err := federationSenderAPI.NewFederationSenderInputAPIHTTP(b.Cfg.FederationSenderURL(), b.httpClient) return f
if err != nil {
logrus.WithError(err).Panic("NewFederationSenderInputAPIHTTP failed", b.httpClient)
}
return f, fi
} }
// CreateDeviceDB creates a new instance of the device database. Should only be // CreateDeviceDB creates a new instance of the device database. Should only be

View file

@ -6,8 +6,8 @@ import (
"net/http" "net/http"
) )
// FederationSenderQueryAPI is used to query information from the federation sender. // FederationSenderInternalAPI is used to query information from the federation sender.
type FederationSenderQueryAPI interface { type FederationSenderInternalAPI interface {
// Query the joined hosts and the membership events accounting for their participation in a room. // Query the joined hosts and the membership events accounting for their participation in a room.
// Note that if a server has multiple users in the room, it will have multiple entries in the returned slice. // Note that if a server has multiple users in the room, it will have multiple entries in the returned slice.
// See `QueryJoinedHostServerNamesInRoom` for a de-duplicated version. // See `QueryJoinedHostServerNamesInRoom` for a de-duplicated version.
@ -38,16 +38,16 @@ type FederationSenderQueryAPI interface {
) error ) error
} }
// NewFederationSenderQueryAPIHTTP creates a FederationSenderQueryAPI implemented by talking to a HTTP POST API. // NewFederationSenderInternalAPIHTTP creates a FederationSenderInternalAPI implemented by talking to a HTTP POST API.
// If httpClient is nil an error is returned // If httpClient is nil an error is returned
func NewFederationSenderQueryAPIHTTP(federationSenderURL string, httpClient *http.Client) (FederationSenderQueryAPI, error) { func NewFederationSenderInternalAPIHTTP(federationSenderURL string, httpClient *http.Client) (FederationSenderInternalAPI, error) {
if httpClient == nil { if httpClient == nil {
return nil, errors.New("NewFederationSenderQueryAPIHTTP: httpClient is <nil>") return nil, errors.New("NewFederationSenderInternalAPIHTTP: httpClient is <nil>")
} }
return &httpFederationSenderQueryAPI{federationSenderURL, httpClient}, nil return &httpFederationSenderInternalAPI{federationSenderURL, httpClient}, nil
} }
type httpFederationSenderQueryAPI struct { type httpFederationSenderInternalAPI struct {
federationSenderURL string federationSenderURL string
httpClient *http.Client httpClient *http.Client
} }

View file

@ -20,7 +20,7 @@ type InputJoinResponse struct {
} }
// Handle an instruction to make_join & send_join with a remote server. // Handle an instruction to make_join & send_join with a remote server.
func (h *httpFederationSenderQueryAPI) InputJoinRequest( func (h *httpFederationSenderInternalAPI) InputJoinRequest(
ctx context.Context, ctx context.Context,
request *InputJoinRequest, request *InputJoinRequest,
response *InputJoinResponse, response *InputJoinResponse,
@ -40,7 +40,7 @@ type InputLeaveResponse struct {
} }
// Handle an instruction to make_leave & send_leave with a remote server. // Handle an instruction to make_leave & send_leave with a remote server.
func (h *httpFederationSenderQueryAPI) InputLeaveRequest( func (h *httpFederationSenderInternalAPI) InputLeaveRequest(
ctx context.Context, ctx context.Context,
request *InputLeaveRequest, request *InputLeaveRequest,
response *InputLeaveResponse, response *InputLeaveResponse,

View file

@ -26,8 +26,8 @@ type QueryJoinedHostsInRoomResponse struct {
JoinedHosts []types.JoinedHost `json:"joined_hosts"` JoinedHosts []types.JoinedHost `json:"joined_hosts"`
} }
// QueryJoinedHostsInRoom implements FederationSenderQueryAPI // QueryJoinedHostsInRoom implements FederationSenderInternalAPI
func (h *httpFederationSenderQueryAPI) QueryJoinedHostsInRoom( func (h *httpFederationSenderInternalAPI) QueryJoinedHostsInRoom(
ctx context.Context, ctx context.Context,
request *QueryJoinedHostsInRoomRequest, request *QueryJoinedHostsInRoomRequest,
response *QueryJoinedHostsInRoomResponse, response *QueryJoinedHostsInRoomResponse,
@ -49,8 +49,8 @@ type QueryJoinedHostServerNamesInRoomResponse struct {
ServerNames []gomatrixserverlib.ServerName `json:"server_names"` ServerNames []gomatrixserverlib.ServerName `json:"server_names"`
} }
// QueryJoinedHostServerNamesInRoom implements FederationSenderQueryAPI // QueryJoinedHostServerNamesInRoom implements FederationSenderInternalAPI
func (h *httpFederationSenderQueryAPI) QueryJoinedHostServerNamesInRoom( func (h *httpFederationSenderInternalAPI) QueryJoinedHostServerNamesInRoom(
ctx context.Context, ctx context.Context,
request *QueryJoinedHostServerNamesInRoomRequest, request *QueryJoinedHostServerNamesInRoomRequest,
response *QueryJoinedHostServerNamesInRoomResponse, response *QueryJoinedHostServerNamesInRoomResponse,

View file

@ -36,7 +36,7 @@ func SetupFederationSenderComponent(
federation *gomatrixserverlib.FederationClient, federation *gomatrixserverlib.FederationClient,
rsQueryAPI roomserverAPI.RoomserverQueryAPI, rsQueryAPI roomserverAPI.RoomserverQueryAPI,
rsInputAPI roomserverAPI.RoomserverInputAPI, rsInputAPI roomserverAPI.RoomserverInputAPI,
) api.FederationSenderQueryAPI { ) api.FederationSenderInternalAPI {
federationSenderDB, err := storage.NewDatabase(string(base.Cfg.Database.FederationSender)) federationSenderDB, err := storage.NewDatabase(string(base.Cfg.Database.FederationSender))
if err != nil { if err != nil {
logrus.WithError(err).Panic("failed to connect to federation sender db") logrus.WithError(err).Panic("failed to connect to federation sender db")
@ -61,7 +61,7 @@ func SetupFederationSenderComponent(
logrus.WithError(err).Panic("failed to start typing server consumer") logrus.WithError(err).Panic("failed to start typing server consumer")
} }
queryAPI := query.FederationSenderQueryAPI{ queryAPI := query.FederationSenderInternalAPI{
DB: federationSenderDB, DB: federationSenderDB,
} }
queryAPI.SetupHTTP(http.DefaultServeMux) queryAPI.SetupHTTP(http.DefaultServeMux)

View file

@ -19,15 +19,15 @@ type FederationSenderQueryDatabase interface {
) ([]types.JoinedHost, error) ) ([]types.JoinedHost, error)
} }
// FederationSenderQueryAPI is an implementation of api.FederationSenderQueryAPI // FederationSenderInternalAPI is an implementation of api.FederationSenderInternalAPI
type FederationSenderQueryAPI struct { type FederationSenderInternalAPI struct {
api.FederationSenderQueryAPI api.FederationSenderInternalAPI
DB FederationSenderQueryDatabase DB FederationSenderQueryDatabase
RoomserverInputAPI rsAPI.RoomserverInputAPI RoomserverInputAPI rsAPI.RoomserverInputAPI
} }
// SetupHTTP adds the FederationSenderQueryAPI handlers to the http.ServeMux. // SetupHTTP adds the FederationSenderInternalAPI handlers to the http.ServeMux.
func (f *FederationSenderQueryAPI) SetupHTTP(servMux *http.ServeMux) { func (f *FederationSenderInternalAPI) SetupHTTP(servMux *http.ServeMux) {
servMux.Handle( servMux.Handle(
api.FederationSenderQueryJoinedHostsInRoomPath, api.FederationSenderQueryJoinedHostsInRoomPath,
common.MakeInternalAPI("QueryJoinedHostsInRoom", func(req *http.Request) util.JSONResponse { common.MakeInternalAPI("QueryJoinedHostsInRoom", func(req *http.Request) util.JSONResponse {

View file

@ -6,8 +6,8 @@ import (
"github.com/matrix-org/dendrite/federationsender/api" "github.com/matrix-org/dendrite/federationsender/api"
) )
// InputJoinRequest implements api.FederationSenderQueryAPI // InputJoinRequest implements api.FederationSenderInternalAPI
func (r *FederationSenderQueryAPI) InputJoinRequest( func (r *FederationSenderInternalAPI) InputJoinRequest(
ctx context.Context, ctx context.Context,
request *api.InputJoinRequest, request *api.InputJoinRequest,
response *api.InputJoinResponse, response *api.InputJoinResponse,
@ -15,8 +15,8 @@ func (r *FederationSenderQueryAPI) InputJoinRequest(
return nil return nil
} }
// InputLeaveRequest implements api.FederationSenderQueryAPI // InputLeaveRequest implements api.FederationSenderInternalAPI
func (r *FederationSenderQueryAPI) InputLeaveRequest( func (r *FederationSenderInternalAPI) InputLeaveRequest(
ctx context.Context, ctx context.Context,
request *api.InputLeaveRequest, request *api.InputLeaveRequest,
response *api.InputLeaveResponse, response *api.InputLeaveResponse,

View file

@ -7,8 +7,8 @@ import (
"github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/gomatrixserverlib"
) )
// QueryJoinedHostsInRoom implements api.FederationSenderQueryAPI // QueryJoinedHostsInRoom implements api.FederationSenderInternalAPI
func (f *FederationSenderQueryAPI) QueryJoinedHostsInRoom( func (f *FederationSenderInternalAPI) QueryJoinedHostsInRoom(
ctx context.Context, ctx context.Context,
request *api.QueryJoinedHostsInRoomRequest, request *api.QueryJoinedHostsInRoomRequest,
response *api.QueryJoinedHostsInRoomResponse, response *api.QueryJoinedHostsInRoomResponse,
@ -17,8 +17,8 @@ func (f *FederationSenderQueryAPI) QueryJoinedHostsInRoom(
return return
} }
// QueryJoinedHostServerNamesInRoom implements api.FederationSenderQueryAPI // QueryJoinedHostServerNamesInRoom implements api.FederationSenderInternalAPI
func (f *FederationSenderQueryAPI) QueryJoinedHostServerNamesInRoom( func (f *FederationSenderInternalAPI) QueryJoinedHostServerNamesInRoom(
ctx context.Context, ctx context.Context,
request *api.QueryJoinedHostServerNamesInRoomRequest, request *api.QueryJoinedHostServerNamesInRoomRequest,
response *api.QueryJoinedHostServerNamesInRoomResponse, response *api.QueryJoinedHostServerNamesInRoomResponse,

View file

@ -109,7 +109,7 @@ type InputRoomEventsResponse struct {
type RoomserverInputAPI interface { type RoomserverInputAPI interface {
// needed to avoid chicken and egg scenario when setting up the // needed to avoid chicken and egg scenario when setting up the
// interdependencies between the roomserver and the FS input API // interdependencies between the roomserver and the FS input API
SetFederationSenderInputAPI(fsInputAPI fsAPI.FederationSenderInputAPI) SetFederationSenderAPI(fsInputAPI fsAPI.FederationSenderInternalAPI)
InputRoomEvents( InputRoomEvents(
ctx context.Context, ctx context.Context,
request *InputRoomEventsRequest, request *InputRoomEventsRequest,
@ -134,13 +134,13 @@ type httpRoomserverInputAPI struct {
httpClient *http.Client httpClient *http.Client
// The federation sender API allows us to send federation // The federation sender API allows us to send federation
// requests from the new perform input requests, still TODO. // requests from the new perform input requests, still TODO.
fsInputAPI fsAPI.FederationSenderInputAPI fsInputAPI fsAPI.FederationSenderInternalAPI
} }
// SetFederationSenderInputAPI passes in a federation sender input API reference // SetFederationSenderInputAPI passes in a federation sender input API reference
// so that we can avoid the chicken-and-egg problem of both the roomserver input API // so that we can avoid the chicken-and-egg problem of both the roomserver input API
// and the federation sender input API being interdependent. // and the federation sender input API being interdependent.
func (h *httpRoomserverInputAPI) SetFederationSenderInputAPI(fsInputAPI fsAPI.FederationSenderInputAPI) { func (h *httpRoomserverInputAPI) SetFederationSenderAPI(fsInputAPI fsAPI.FederationSenderInternalAPI) {
h.fsInputAPI = fsInputAPI h.fsInputAPI = fsInputAPI
} }

View file

@ -41,14 +41,14 @@ type RoomserverInputAPI struct {
mutex sync.Mutex mutex sync.Mutex
// The federation sender API allows us to send federation // The federation sender API allows us to send federation
// requests from the new perform input requests, still TODO. // requests from the new perform input requests, still TODO.
fsInputAPI fsAPI.FederationSenderInputAPI fsAPI fsAPI.FederationSenderInternalAPI
} }
// SetFederationSenderInputAPI passes in a federation sender input API reference // SetFederationSenderInputAPI passes in a federation sender input API reference
// so that we can avoid the chicken-and-egg problem of both the roomserver input API // so that we can avoid the chicken-and-egg problem of both the roomserver input API
// and the federation sender input API being interdependent. // and the federation sender input API being interdependent.
func (r *RoomserverInputAPI) SetFederationSenderInputAPI(fsInputAPI fsAPI.FederationSenderInputAPI) { func (r *RoomserverInputAPI) SetFederationSenderAPI(fsAPI fsAPI.FederationSenderInternalAPI) {
r.fsInputAPI = fsInputAPI r.fsAPI = fsAPI
} }
// WriteOutputEvents implements OutputRoomEventWriter // WriteOutputEvents implements OutputRoomEventWriter