diff --git a/README.md b/README.md index 546e491a1..ecbabcf2c 100644 --- a/README.md +++ b/README.md @@ -115,30 +115,33 @@ For more details on the packages, see the For operating and deploying Element Call on your own server, refer to the [**Self-Hosting Guide**](./docs/self_hosting.md). -## đź§­ MatrixRTC Backend Discovery and Selection +## MatrixRTC Transports -For proper Element Call operation each site deployment needs a MatrixRTC backend -setup as outlined in the [Self-Hosting Guide](./docs/self_hosting.md). A typical -federated site deployment for three different sites A, B and C is depicted below. +For proper operation of Element Call, each deployment needs to set up a +MatrixRTC transport in the form of a LiveKit server as outlined in the +[Self-Hosting Guide](./docs/self_hosting.md). A typical federated site +deployment for three different sites A, B and C is depicted below.

Element Call federated setup

-### Backend Discovery +### Transport Discovery -The MatrixRTC backend (according to -[MSC4143](https://github.com/matrix-org/matrix-spec-proposals/pull/4143)) is -announced by the Matrix site's `.well-known/matrix/client` file and discovered -via the `org.matrix.msc4143.rtc_foci` key, e.g.: +Element Call discovers the available MatrixRTC transports (as defined by +[MSC4519](https://github.com/matrix-org/matrix-spec-proposals/pull/4519)) by +hitting the `GET /_matrix/client/unstable/org.matrix.msc4143/rtc/transports` +endpoint of the Client-Server API. An example response: ```json -"org.matrix.msc4143.rtc_foci": [ +{ + "rtc_transports": [ { - "type": "livekit", - "livekit_service_url": "https://matrix-rtc.example.com/livekit/jwt" - }, -] + "type": "livekit", + "livekit_service_url": "https://matrix-rtc.example.com/livekit/jwt" + } + ] +} ``` where the format for MatrixRTC using LiveKit backend is defined in @@ -149,7 +152,7 @@ via `livekit_service_url`. ### Backend Selection -- Each call participant proposes their discovered MatrixRTC backend from +- Each call participant proposes their discovered MatrixRTC transport from `org.matrix.msc4143.rtc_foci` in their `org.matrix.msc3401.call.member` state event. - For the **LiveKit** MatrixRTC backend ([MSC4195](https://github.com/hughns/matrix-spec-proposals/blob/hughns/matrixrtc-livekit/proposals/4195-matrixrtc-livekit.md)), @@ -244,10 +247,9 @@ pnpm backend > [!NOTE] > To ensure your local development frontend functions properly, you’ll need to -> add certificate exceptions in your browser for `https://localhost:3000`, -> `https://matrix-rtc.m.localhost/livekit/jwt/healthz` and -> `https://synapse.m.localhost/.well-known/matrix/client`. This can be either -> done by adding the minimum localhost CA +> add certificate exceptions in your browser for `https://localhost:3000` and +> `https://matrix-rtc.m.localhost/livekit/jwt/healthz`. This can be done either +> by adding the minimum localhost CA > ([./backend/dev_tls_local-ca.crt](./backend/dev_tls_local-ca.crt)) to your web > browser's trusted certificates or by simply copying and pasting each URL into > your browser’s address bar and follow the prompts to add the exception. diff --git a/backend/dev_homeserver-othersite.yaml b/backend/dev_homeserver-othersite.yaml index 7eb8f294a..8b7bc2272 100644 --- a/backend/dev_homeserver-othersite.yaml +++ b/backend/dev_homeserver-othersite.yaml @@ -54,7 +54,6 @@ enable_registration_without_verification: true registration_shared_secret: "test_shared_secret_for_local_dev_only" report_stats: false -serve_server_wellknown: true # Ratelimiting settings for client actions (registration, login, messaging). # diff --git a/backend/dev_homeserver.yaml b/backend/dev_homeserver.yaml index 0aea2ece2..2204c3cdb 100644 --- a/backend/dev_homeserver.yaml +++ b/backend/dev_homeserver.yaml @@ -54,7 +54,6 @@ enable_registration_without_verification: true registration_shared_secret: "test_shared_secret_for_local_dev_only" report_stats: false -serve_server_wellknown: true # Ratelimiting settings for client actions (registration, login, messaging). # diff --git a/backend/dev_nginx.conf b/backend/dev_nginx.conf index 6ec0d7010..c227370df 100644 --- a/backend/dev_nginx.conf +++ b/backend/dev_nginx.conf @@ -1,4 +1,4 @@ -# Synapse reverse proxy including .well-known/matrix/client +# Synapse reverse proxy # domain synapse.m.localhost server { listen 80; @@ -11,18 +11,6 @@ server { ssl_certificate /root/ssl/cert.pem; ssl_certificate_key /root/ssl/key.pem; - # well-known config adding rtc_foci backend - # Note well-known is currently not effective due to: - # https://spec.matrix.org/v1.12/client-server-api/#well-known-uri the spec - # says it must be at https://$server_name/... (implied port 443) Hence, we - # currently rely for local development environment on deprecated config.json - # setting for livekit_service_url - location /.well-known/matrix/client { - add_header Access-Control-Allow-Origin *; - return 200 '{"m.homeserver": {"base_url": "https://synapse.m.localhost"}, "org.matrix.msc4143.rtc_foci": [{"type": "livekit", "livekit_service_url": "https://matrix-rtc.m.localhost/livekit/jwt"}]}'; - default_type application/json; - } - # Reverse proxy for Matrix Synapse Homeserver # This is also required for development environment. # Reason: the lk-jwt-service uses the federation API for the openid token @@ -44,7 +32,7 @@ server { } -# Synapse reverse proxy including .well-known/matrix/client +# Synapse reverse proxy # domain synapse.othersite.m.localhost server { listen 80; @@ -57,18 +45,6 @@ server { ssl_certificate /root/ssl/cert.pem; ssl_certificate_key /root/ssl/key.pem; - # well-known config adding rtc_foci backend - # Note well-known is currently not effective due to: - # https://spec.matrix.org/v1.12/client-server-api/#well-known-uri the spec - # says it must be at https://$server_name/... (implied port 443) Hence, we - # currently rely for local development environment on deprecated config.json - # setting for livekit_service_url - location /.well-known/matrix/client { - add_header Access-Control-Allow-Origin *; - return 200 '{"m.homeserver": {"base_url": "https://synapse.othersite.m.localhost"}, "org.matrix.msc4143.rtc_foci": [{"type": "livekit", "livekit_service_url": "https://matrix-rtc.othersite.m.localhost/livekit/jwt"}]}'; - default_type application/json; - } - # Reverse proxy for Matrix Synapse Homeserver # This is also required for development environment. # Reason: the lk-jwt-service uses the federation API for the openid token diff --git a/backend/playwright_homeserver-othersite.yaml b/backend/playwright_homeserver-othersite.yaml index 86c77b35f..83fdbc2e5 100644 --- a/backend/playwright_homeserver-othersite.yaml +++ b/backend/playwright_homeserver-othersite.yaml @@ -54,7 +54,6 @@ enable_registration_without_verification: true registration_shared_secret: "test_shared_secret_for_local_dev_only" report_stats: false -serve_server_wellknown: true # Ratelimiting settings for client actions (registration, login, messaging). # diff --git a/backend/playwright_homeserver.yaml b/backend/playwright_homeserver.yaml index 8f4375241..c5db1f02d 100644 --- a/backend/playwright_homeserver.yaml +++ b/backend/playwright_homeserver.yaml @@ -54,7 +54,6 @@ enable_registration_without_verification: true registration_shared_secret: "test_shared_secret_for_local_dev_only" report_stats: false -serve_server_wellknown: true # Ratelimiting settings for client actions (registration, login, messaging). # diff --git a/docs/self_hosting.md b/docs/self_hosting.md index 01113fcec..0bdfe6284 100644 --- a/docs/self_hosting.md +++ b/docs/self_hosting.md @@ -68,10 +68,10 @@ As a prerequisite for the make sure that your Synapse server has either a `federation` or `openid` [listener configured](https://element-hq.github.io/synapse/latest/usage/configuration/config_documentation.html#listeners). -### MatrixRTC Backend +### LiveKit backend -In order to **guarantee smooth operation** of Element Call, a MatrixRTC backend is -required for each site deployment. +In order to **guarantee smooth operation** of Element Call, a dedicated LiveKit +backend is required for each site deployment. ![MSC4195 compatible setup](MSC4195_setup.drawio.png) @@ -165,7 +165,7 @@ Using Haproxy, you can achieve this by: use_backend mxrtc_auth_backend if is_mxrtc_auth matrixrtc_domain # Backend -## MatrixRTC backend +## LiveKit backend backend sfu_backend server livekit 127.0.0.1:7880 http-request set-path %[path,regsub(^/livekit/sfu/,/)] @@ -187,57 +187,22 @@ backend mxrtc_auth_backend ``` -#### MatrixRTC backend announcement +#### MatrixRTC transport announcement -> [!IMPORTANT] -> As defined in -> [MSC4143](https://github.com/matrix-org/matrix-spec-proposals/pull/4143), -> the MatrixRTC backend(s) must be announced to the client via `/_matrix/client/unstable/org.matrix.msc4143/rtc/transports`. - -Enable the unstable feature flag `msc4143_enabled`, and update the synapse config file: +Enable the unstable feature flag `msc4143_enabled`, and update the +[`matrix_rtc` section](https://element-hq.github.io/synapse/latest/usage/configuration/config_documentation.html#matrix_rtc) +of your Synapse config file: ```yaml - matrix_rtc: - - transports: - - type: livekit - livekit_service_url: https://matrix-rtc.example.com/livekit/jwt + transports: + - type: livekit + livekit_service_url: https://matrix-rtc.example.com/livekit/jwt ``` - - -**⚠️ Well-known discovery will soon be deprecated, but needed if MSC4143 is not supported on your Homeserver** - -your **Matrix site's .well-known/matrix/client`** file (e.g. `example.com/.well-known/matrix/client` matching the site deployment example -from above). The configuration is a list of Foci configs: - -```json -"org.matrix.msc4143.rtc_foci": [ - { - "type": "livekit", - "livekit_service_url": "https://matrix-rtc.example.com/livekit/jwt" - }, - { - "type": "livekit", - "livekit_service_url": "https://matrix-rtc-2.example.com/livekit/jwt" - } -] -``` - -Make sure this file is served with the correct MIME type (`application/json`). -Additionally, ensure the appropriate CORS headers are set to allow web clients -to access it across origins. For more details, refer to the -[Matrix Client-Server API: 2. Web Browser Clients](https://spec.matrix.org/latest/client-server-api/#web-browser-clients). - -``` -Access-Control-Allow-Origin: * -Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS -Access-Control-Allow-Headers: X-Requested-With, Content-Type, Authorization -``` - -> [!NOTE] -> Most `org.matrix.msc4143.rtc_foci` configurations will only have one entry in -> the array. +The transport you specify will be made available to clients over the +`/_matrix/client/unstable/org.matrix.msc4143/rtc/transports` endpoint as defined +in [MSC4143](https://github.com/matrix-org/matrix-spec-proposals/pull/4143). ## Building Element Call @@ -292,7 +257,7 @@ runtime. Documentation and default values for `public/config.json` can be found in [ConfigOptions.ts](../src/config/ConfigOptions.ts). > [!CAUTION] -> Please note configuring MatrixRTC backend via `config.json` of +> Please note configuring LiveKit backend via `config.json` of > Element Call is only available for developing and debug purposes. Relying on > it might break Element Call going forward! diff --git a/locales/en/app.json b/locales/en/app.json index 3ff956a6a..87fdebe1a 100644 --- a/locales/en/app.json +++ b/locales/en/app.json @@ -61,7 +61,7 @@ "crypto_version": "Crypto version: {{version}}", "custom_livekit_url": { "current_url": "Currently set to: ", - "from_config": "Currently, no overwrite is set. Url from well-known or config is used.", + "from_config": "Currently, no overwrite is set. Url from config is used.", "label": "Custom Livekit-url", "reset": "Reset overwrite", "save": "Save", diff --git a/src/config/ConfigOptions.ts b/src/config/ConfigOptions.ts index ff0aadc37..e283e28fb 100644 --- a/src/config/ConfigOptions.ts +++ b/src/config/ConfigOptions.ts @@ -74,10 +74,7 @@ export interface ConfigOptions { livekit?: { // The link to the service that returns a livekit url and token to use it. // This is a fallback link in case the homeserver in use does not advertise - // a livekit service url in the client well-known. - // The well known needs to be formatted like so: - // {"type":"livekit", "livekit_service_url":"https://livekit.example.com"} - // and stored under the key: "org.matrix.msc4143.rtc_foci" + // a livekit service url over the transports endpoint. livekit_service_url: string; }; diff --git a/src/settings/__snapshots__/DeveloperSettingsTab.test.tsx.snap b/src/settings/__snapshots__/DeveloperSettingsTab.test.tsx.snap index 73ae04ca5..1e9811bac 100644 --- a/src/settings/__snapshots__/DeveloperSettingsTab.test.tsx.snap +++ b/src/settings/__snapshots__/DeveloperSettingsTab.test.tsx.snap @@ -251,7 +251,7 @@ exports[`DeveloperSettingsTab > renders and matches snapshot 1`] = ` class="_message_1o4d9_86 _help-message_1o4d9_92" id="radix-_r_8_" > - Currently, no overwrite is set. Url from well-known or config is used. + Currently, no overwrite is set. Url from config is used. diff --git a/src/state/CallViewModel/localMember/LocalMember.test.ts b/src/state/CallViewModel/localMember/LocalMember.test.ts index 8bca91824..16ffe1493 100644 --- a/src/state/CallViewModel/localMember/LocalMember.test.ts +++ b/src/state/CallViewModel/localMember/LocalMember.test.ts @@ -20,7 +20,6 @@ import { afterAll, beforeEach, } from "vitest"; -import { AutoDiscovery } from "matrix-js-sdk/lib/autodiscovery"; import { BehaviorSubject, map, of } from "rxjs"; import { logger } from "matrix-js-sdk/lib/logger"; import { type LocalParticipant, type LocalTrack } from "livekit-client"; @@ -78,34 +77,10 @@ describe("LocalMembership", () => { livekit_alias: "my-oldest-member-service-alias", }; - const focusConfigFromWellKnown = { - type: "livekit", - livekit_service_url: "http://my-well-known-service-url.com", - }; - const focusConfigFromWellKnown2 = { - type: "livekit", - livekit_service_url: "http://my-well-known-service-url2.com", - }; - const clientWellKnown = { - "org.matrix.msc4143.rtc_foci": [ - focusConfigFromWellKnown, - focusConfigFromWellKnown2, - ], - }; - mockConfig({ livekit: { livekit_service_url: "http://my-default-service-url.com" }, }); - vi.spyOn(AutoDiscovery, "getRawClientConfig").mockImplementation( - async (domain) => { - if (domain === "example.org") { - return Promise.resolve(clientWellKnown); - } - return Promise.resolve({}); - }, - ); - const mockedSession = vi.mocked({ room: { roomId: "roomId", @@ -132,7 +107,7 @@ describe("LocalMembership", () => { ownMemberMock, { livekit_alias: "roomId", - livekit_service_url: "http://my-well-known-service-url.com", + livekit_service_url: "http://my-livekit-service-url.com", type: "livekit", }, { @@ -150,7 +125,7 @@ describe("LocalMembership", () => { [ { livekit_alias: "roomId", - livekit_service_url: "http://my-well-known-service-url.com", + livekit_service_url: "http://my-livekit-service-url.com", type: "livekit", }, ], @@ -161,50 +136,6 @@ describe("LocalMembership", () => { }), ); }); - - it("It should not fail with configuration error if homeserver config has livekit url but not fallback", () => { - mockConfig({}); - vi.spyOn(AutoDiscovery, "getRawClientConfig").mockResolvedValue({ - "org.matrix.msc4143.rtc_foci": [ - { - type: "livekit", - livekit_service_url: "http://my-well-known-service-url.com", - }, - ], - }); - - const mockedSession = vi.mocked({ - room: { - roomId: "roomId", - client: { - getDomain: vi.fn().mockReturnValue("example.org"), - getOpenIdToken: vi.fn().mockResolvedValue({ - access_token: "ACCCESS_TOKEN", - token_type: "Bearer", - matrix_server_name: "localhost", - expires_in: 10000, - }), - }, - }, - memberships: [], - getFocusInUse: vi.fn(), - joinRTCSession: vi.fn(), - }) as unknown as MatrixRTCSession; - - enterRTCSession( - mockedSession, - ownMemberMock, - { - livekit_alias: "roomId", - livekit_service_url: "http://my-well-known-service-url.com", - type: "livekit", - }, - { - encryptMedia: true, - matrixRTCMode: MATRIX_RTC_MODE, - }, - ); - }); }); const defaultCreateLocalMemberValues = { diff --git a/src/state/CallViewModel/localMember/LocalMember.ts b/src/state/CallViewModel/localMember/LocalMember.ts index e41901b1f..1088301f3 100644 --- a/src/state/CallViewModel/localMember/LocalMember.ts +++ b/src/state/CallViewModel/localMember/LocalMember.ts @@ -108,7 +108,6 @@ export type LocalMemberState = }; /* - * - get well known * - get oldest membership * - get transport to use * - get openId + jwt token diff --git a/src/state/CallViewModel/localMember/LocalTransport.test.ts b/src/state/CallViewModel/localMember/LocalTransport.test.ts index 31b0389ab..89cb831da 100644 --- a/src/state/CallViewModel/localMember/LocalTransport.test.ts +++ b/src/state/CallViewModel/localMember/LocalTransport.test.ts @@ -63,8 +63,7 @@ describe("LocalTransport", () => { client: { // eslint-disable-next-line @typescript-eslint/naming-convention _unstable_getRTCTransports: async () => Promise.resolve([]), - getAccessToken: vi.fn().mockReturnValue("access_token"), - getDomain: () => "", + getDomain: () => "example.org", baseUrl: "example.org", // These won't be called in this error path but satisfy the type getOpenIdToken: vi.fn(), @@ -77,9 +76,11 @@ describe("LocalTransport", () => { await flushPromises(); expect(() => advertised$.value).toThrow( - new MatrixRTCTransportMissingError(""), + new MatrixRTCTransportMissingError("example.org"), + ); + expect(() => active$.value).toThrow( + new MatrixRTCTransportMissingError("example.org"), ); - expect(() => active$.value).toThrow(new MatrixRTCTransportMissingError("")); }); it("throws FailToGetOpenIdToken when OpenID fetch fails", async () => { @@ -103,10 +104,8 @@ describe("LocalTransport", () => { useOldestMember: false, memberships$: constant(new Epoch([])), client: { - baseUrl: "https://lk.example.org", - // Use empty domain to skip .well-known and use config directly - getDomain: () => "", - getAccessToken: vi.fn().mockReturnValue("access_token"), + baseUrl: "https://example.org", + getDomain: () => "example.org", // eslint-disable-next-line @typescript-eslint/naming-convention _unstable_getRTCTransports: async () => Promise.resolve([]), getOpenIdToken: vi.fn(), @@ -150,11 +149,10 @@ describe("LocalTransport", () => { client: { // eslint-disable-next-line @typescript-eslint/naming-convention _unstable_getRTCTransports: async () => Promise.resolve([]), - getDomain: () => "", + getDomain: () => "example.org", getOpenIdToken: vi.fn(), getDeviceId: vi.fn(), - baseUrl: "https://lk.example.org", - getAccessToken: vi.fn().mockReturnValue("access_token"), + baseUrl: "https://example.org", }, ownMembershipIdentity: ownMemberMock, forceJwtEndpoint: JwtEndpointVersion.Legacy, @@ -221,13 +219,12 @@ describe("LocalTransport", () => { useOldestMember: true, memberships$: scope.behavior(memberships$.pipe(trackEpoch())), client: { - getDomain: () => "", + getDomain: () => "example.org", // eslint-disable-next-line @typescript-eslint/naming-convention _unstable_getRTCTransports: async () => Promise.resolve([]), - getAccessToken: vi.fn().mockReturnValue("access_token"), getOpenIdToken: vi.fn(), getDeviceId: vi.fn(), - baseUrl: "https://lk.example.org", + baseUrl: "https://example.org", }, ownMembershipIdentity: ownMemberMock, forceJwtEndpoint: JwtEndpointVersion.Legacy, @@ -278,14 +275,13 @@ describe("LocalTransport", () => { useOldestMember: true, memberships$: scope.behavior(memberships$.pipe(trackEpoch())), client: { - getDomain: () => "", + getDomain: () => "example.org", // eslint-disable-next-line @typescript-eslint/naming-convention _unstable_getRTCTransports: async () => Promise.resolve([aliceTransport]), - getAccessToken: vi.fn().mockReturnValue("access_token"), getOpenIdToken: vi.fn(), getDeviceId: vi.fn(), - baseUrl: "https://lk.example.org", + baseUrl: "https://example.org", }, ownMembershipIdentity: ownMemberMock, forceJwtEndpoint: JwtEndpointVersion.Legacy, @@ -330,10 +326,9 @@ describe("LocalTransport", () => { memberships$: constant(new Epoch([])), client: { baseUrl: "https://example.org", - getDomain: vi.fn().mockReturnValue(""), + getDomain: vi.fn().mockReturnValue("example.org"), // eslint-disable-next-line @typescript-eslint/naming-convention _unstable_getRTCTransports: vi.fn().mockResolvedValue([]), - getAccessToken: vi.fn().mockReturnValue("access_token"), getOpenIdToken: vi.fn(), getDeviceId: vi.fn(), }, @@ -443,11 +438,10 @@ describe("LocalTransport", () => { delayId$: constant(null), memberships$: constant(new Epoch([])), client: { - getDomain: () => "", + getDomain: () => "example.org", baseUrl: "https://example.org", // eslint-disable-next-line @typescript-eslint/naming-convention _unstable_getRTCTransports: async () => Promise.resolve([]), - getAccessToken: vi.fn().mockReturnValue("access_token"), // These won't be called in this error path but satisfy the type getOpenIdToken: vi.fn(), getDeviceId: vi.fn(), @@ -456,10 +450,10 @@ describe("LocalTransport", () => { await flushPromises(); expect(() => advertised$.value).toThrow( - new MatrixRTCTransportMissingError(""), + new MatrixRTCTransportMissingError("example.org"), ); expect(() => active$.value).toThrow( - new MatrixRTCTransportMissingError(""), + new MatrixRTCTransportMissingError("example.org"), ); }); }); @@ -484,11 +478,10 @@ describe("LocalTransport", () => { delayId$: delayId$, memberships$: constant(new Epoch([])), client: { - getDomain: () => "", + getDomain: () => "example.org", baseUrl: "https://example.org", // eslint-disable-next-line @typescript-eslint/naming-convention _unstable_getRTCTransports: async () => Promise.resolve([]), - getAccessToken: vi.fn().mockReturnValue("access_token"), // These won't be called in this error path but satisfy the type getOpenIdToken: vi.fn(), getDeviceId: vi.fn(), diff --git a/src/state/CallViewModel/localMember/LocalTransport.ts b/src/state/CallViewModel/localMember/LocalTransport.ts index 62db5a8e1..1a6dddc1f 100644 --- a/src/state/CallViewModel/localMember/LocalTransport.ts +++ b/src/state/CallViewModel/localMember/LocalTransport.ts @@ -56,7 +56,7 @@ interface Props { memberships$: Behavior>; client: Pick< MatrixClient, - "getDomain" | "baseUrl" | "_unstable_getRTCTransports" | "getAccessToken" + "getDomain" | "baseUrl" | "_unstable_getRTCTransports" > & OpenIDClientParts; // Used by the jwt service to create the livekit room and compute the livekit alias. @@ -307,7 +307,7 @@ async function doOpenIdAndJWTFromUrl( roomId: string, client: Pick< MatrixClient, - "getDomain" | "baseUrl" | "_unstable_getRTCTransports" | "getAccessToken" + "getDomain" | "baseUrl" | "_unstable_getRTCTransports" > & OpenIDClientParts, delayId?: string, @@ -337,7 +337,7 @@ function observeLocalTransportForOldestMembership( preferredTransport$: Observable, client: Pick< MatrixClient, - "getDomain" | "baseUrl" | "_unstable_getRTCTransports" | "getAccessToken" + "getDomain" | "baseUrl" | "_unstable_getRTCTransports" > & OpenIDClientParts, ownMembershipIdentity: CallMembershipIdentityParts, diff --git a/src/state/CallViewModel/localMember/RtcTransportAutoDiscovery.test.ts b/src/state/CallViewModel/localMember/RtcTransportAutoDiscovery.test.ts index c16219abf..748a16f37 100644 --- a/src/state/CallViewModel/localMember/RtcTransportAutoDiscovery.test.ts +++ b/src/state/CallViewModel/localMember/RtcTransportAutoDiscovery.test.ts @@ -71,7 +71,6 @@ describe("RtcTransportAutoDiscovery", () => { it.each(VALID_TEST_CASES)( "prefers backend transport other app config $transports", async ({ transports }) => { - // it("prefers backend transport over well-known and app config", async () => { const client = makeClient(); client._unstable_getRTCTransports.mockResolvedValue(transports); diff --git a/src/state/CallViewModel/localMember/RtcTransportAutoDiscovery.ts b/src/state/CallViewModel/localMember/RtcTransportAutoDiscovery.ts index d42e4daa4..1f295649f 100644 --- a/src/state/CallViewModel/localMember/RtcTransportAutoDiscovery.ts +++ b/src/state/CallViewModel/localMember/RtcTransportAutoDiscovery.ts @@ -16,7 +16,7 @@ import { doNetworkOperationWithRetry } from "../../../utils/matrix.ts"; type TransportDiscoveryClient = Pick< MatrixClient, - "getDomain" | "_unstable_getRTCTransports" | "getAccessToken" + "getDomain" | "_unstable_getRTCTransports" >; export interface RtcTransportAutoDiscoveryProps { diff --git a/src/utils/errors.ts b/src/utils/errors.ts index 7112702d1..0ac569278 100644 --- a/src/utils/errors.ts +++ b/src/utils/errors.ts @@ -12,7 +12,7 @@ import { i18nKey } from "./i18n"; export enum ErrorCode { /** - * Configuration problem due to no MatrixRTC backend/SFU is exposed via .well-known and no fallback configured. + * Configuration problem due to no MatrixRTC transport provided by homeserver and no fallback configured. */ MISSING_MATRIX_RTC_TRANSPORT = "MISSING_MATRIX_RTC_TRANSPORT", CONNECTION_LOST_ERROR = "CONNECTION_LOST_ERROR", @@ -67,7 +67,7 @@ export class ElementCallError extends Error { } /** - * Configuration problem due to no MatrixRTC backend/SFU is exposed via .well-known and no fallback configured. + * Configuration problem due to no MatrixRTC transport provided by homeserver and no fallback configured. */ export class MatrixRTCTransportMissingError extends ElementCallError { public domain: string; diff --git a/src/widget.ts b/src/widget.ts index 462fc6e05..d4127a835 100644 --- a/src/widget.ts +++ b/src/widget.ts @@ -195,7 +195,7 @@ export const initializeWidget = ( // Wait for the config file to be ready (we load very early on so it might not // be otherwise) await Config.init(); - await client.startClient({ clientWellKnownPollPeriod: 60 * 10 }); + await client.startClient(); return client; };