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:
@@ -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: [],
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user