Use AutoDiscovery.getRawClientConfig() instead of MatrixClient.getClientWellKnown() (#2906)

I'm open to suggestions on what is sensible to test around this...
This commit is contained in:
Hugh Nimmo-Smith
2024-12-17 16:44:50 +00:00
committed by GitHub
parent 2b6acb9cce
commit 53fff37d5d
2 changed files with 35 additions and 14 deletions

View File

@@ -7,6 +7,7 @@ Please see LICENSE in the repository root for full details.
import { type MatrixRTCSession } from "matrix-js-sdk/src/matrixrtc/MatrixRTCSession"; import { type MatrixRTCSession } from "matrix-js-sdk/src/matrixrtc/MatrixRTCSession";
import { expect, test, vi } from "vitest"; import { expect, test, vi } from "vitest";
import { AutoDiscovery } from "matrix-js-sdk/src/autodiscovery";
import { enterRTCSession } from "../src/rtcSessionHelpers"; import { enterRTCSession } from "../src/rtcSessionHelpers";
import { mockConfig } from "./utils/test"; import { mockConfig } from "./utils/test";
@@ -36,11 +37,21 @@ test("It joins the correct Session", async () => {
mockConfig({ mockConfig({
livekit: { livekit_service_url: "http://my-default-service-url.com" }, 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({ const mockedSession = vi.mocked({
room: { room: {
roomId: "roomId", roomId: "roomId",
client: { client: {
getClientWellKnown: vi.fn().mockReturnValue(clientWellKnown), getDomain: vi.fn().mockReturnValue("example.org"),
}, },
}, },
memberships: [], memberships: [],

View File

@@ -13,6 +13,7 @@ import {
isLivekitFocus, isLivekitFocus,
isLivekitFocusConfig, isLivekitFocusConfig,
} from "matrix-js-sdk/src/matrixrtc/LivekitFocus"; } from "matrix-js-sdk/src/matrixrtc/LivekitFocus";
import { AutoDiscovery } from "matrix-js-sdk/src/autodiscovery";
import { PosthogAnalytics } from "./analytics/PosthogAnalytics"; import { PosthogAnalytics } from "./analytics/PosthogAnalytics";
import { Config } from "./config/Config"; import { Config } from "./config/Config";
@@ -43,19 +44,28 @@ async function makePreferredLivekitFoci(
preferredFoci.push(focusInUse); preferredFoci.push(focusInUse);
} }
// Prioritize the client well known over the configured sfu. // Prioritize the .well-known/matrix/client, if available, over the configured SFU
const wellKnownFoci = const domain = rtcSession.room.client.getDomain();
rtcSession.room.client.getClientWellKnown()?.[FOCI_WK_KEY]; if (domain) {
if (Array.isArray(wellKnownFoci)) { // we use AutoDiscovery instead of relying on the MatrixClient having already
preferredFoci.push( // been fully configured and started
...wellKnownFoci const wellKnownFoci = (await AutoDiscovery.getRawClientConfig(domain))?.[
.filter((f) => !!f) FOCI_WK_KEY
.filter(isLivekitFocusConfig) ];
.map((wellKnownFocus) => { if (Array.isArray(wellKnownFoci)) {
logger.log("Adding livekit focus from well known: ", wellKnownFocus); preferredFoci.push(
return { ...wellKnownFocus, livekit_alias: livekitAlias }; ...wellKnownFoci
}), .filter((f) => !!f)
); .filter(isLivekitFocusConfig)
.map((wellKnownFocus) => {
logger.log(
"Adding livekit focus from well known: ",
wellKnownFocus,
);
return { ...wellKnownFocus, livekit_alias: livekitAlias };
}),
);
}
} }
const urlFromConf = Config.get().livekit?.livekit_service_url; const urlFromConf = Config.get().livekit?.livekit_service_url;