From b3118d485961013606f374057187e4dc72fa8cc2 Mon Sep 17 00:00:00 2001 From: David Langley Date: Wed, 4 Mar 2026 22:22:11 +0000 Subject: [PATCH] fix: add .well-known fallback for MatrixRTC discovery MatrixRTC transport discovery for MSC4143 is unstable-only and some deployments still advertise foci via /.well-known/matrix/client (org.matrix.msc4143.rtc_foci). Try /unstable/org.matrix.msc4143/rtc/transports first, then fall back to well-known so LiveKit can be used where configured. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../rooms/wysiwyg_composer/useDocumentRTC.ts | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/apps/web/src/components/views/rooms/wysiwyg_composer/useDocumentRTC.ts b/apps/web/src/components/views/rooms/wysiwyg_composer/useDocumentRTC.ts index d3ee741f16..ff9730b71d 100644 --- a/apps/web/src/components/views/rooms/wysiwyg_composer/useDocumentRTC.ts +++ b/apps/web/src/components/views/rooms/wysiwyg_composer/useDocumentRTC.ts @@ -84,17 +84,29 @@ export function useDocumentRTC( const connect = async (): Promise => { // 1. Get available transports from the homeserver. - let transports; + // MSC4143 is still unstable, and some deployments only advertise foci via .well-known. + const transports: unknown[] = []; try { - transports = await client._unstable_getRTCTransports(); + transports.push(...(await client._unstable_getRTCTransports())); } catch (e) { - logger.info("[DocumentRTC] Homeserver does not support /rtc/transports, falling back to Matrix events", e); - return; + logger.info("[DocumentRTC] Homeserver does not support /rtc/transports (MSC4143), trying .well-known fallback", e); + } + + try { + await client.waitForClientWellKnown(); + const foci = client.getClientWellKnown()?.["org.matrix.msc4143.rtc_foci"]; + if (Array.isArray(foci)) { + transports.push(...foci); + } else if (foci) { + transports.push(foci); + } + } catch (e) { + logger.info("[DocumentRTC] Failed to read .well-known MatrixRTC foci", e); } const livekitTransport = transports.find(isLivekitTransportConfig); if (!livekitTransport) { - logger.info("[DocumentRTC] No LiveKit transport in /rtc/transports, falling back to Matrix events"); + logger.info("[DocumentRTC] No LiveKit transport configured, falling back to Matrix events"); return; }