fixup merge

This commit is contained in:
Timo K
2026-01-05 21:08:33 +01:00
parent df2bd22005
commit 5d5d75ebdf
4 changed files with 53 additions and 27 deletions

View File

@@ -49,6 +49,8 @@ describe("LocalTransport", () => {
useOldestMember$: constant(false),
memberships$: constant(new Epoch<CallMembership[]>([])),
client: {
// eslint-disable-next-line @typescript-eslint/naming-convention
_unstable_getRTCTransports: async () => Promise.resolve([]),
getDomain: () => "",
baseUrl: "example.org",
// These won't be called in this error path but satisfy the type
@@ -130,6 +132,8 @@ describe("LocalTransport", () => {
useOldestMember$: constant(false),
memberships$: constant(new Epoch<CallMembership[]>([])),
client: {
// eslint-disable-next-line @typescript-eslint/naming-convention
_unstable_getRTCTransports: async () => Promise.resolve([]),
getDomain: () => "",
getOpenIdToken: vi.fn(),
getDeviceId: vi.fn(),
@@ -140,7 +144,12 @@ describe("LocalTransport", () => {
delayId$: constant("delay_id_mock"),
});
openIdResolver.resolve?.({ url: "https://lk.example.org", jwt: "jwt" });
openIdResolver.resolve?.({
url: "https://lk.example.org",
jwt: "jwt",
livekitAlias: "!room:example.org",
livekitIdentity: ownMemberMock.userId + ":" + ownMemberMock.deviceId,
});
expect(localTransport$.value).toBe(null);
await flushPromises();
// final
@@ -203,11 +212,15 @@ describe("LocalTransport", () => {
mockConfig({});
customLivekitUrl.setValue(customLivekitUrl.defaultValue);
localTransportOpts = {
ownMembershipIdentity: ownMemberMock,
scope,
roomId: "!example_room_id",
useOldestMember$: constant(false),
useOldJwtEndpoint$: constant(false),
delayId$: constant(null),
memberships$: constant(new Epoch<CallMembership[]>([])),
client: {
baseUrl: "https://example.org",
getDomain: vi.fn().mockReturnValue(""),
// eslint-disable-next-line @typescript-eslint/naming-convention
_unstable_getRTCTransports: vi.fn().mockResolvedValue([]),
@@ -317,11 +330,15 @@ describe("LocalTransport", () => {
it("throws if no options are available", async () => {
const localTransport$ = createLocalTransport$({
scope,
ownMembershipIdentity: ownMemberMock,
roomId: "!example_room_id",
useOldestMember$: constant(false),
useOldJwtEndpoint$: constant(false),
delayId$: constant(null),
memberships$: constant(new Epoch<CallMembership[]>([])),
client: {
getDomain: () => "",
baseUrl: "https://example.org",
// eslint-disable-next-line @typescript-eslint/naming-convention
_unstable_getRTCTransports: async () => Promise.resolve([]),
// These won't be called in this error path but satisfy the type

View File

@@ -178,7 +178,6 @@ async function makeTransport(
forceOldJwtEndpoint: boolean,
delayId?: string,
): Promise<LivekitTransport & { forceOldJwtEndpoint: boolean }> {
let transport: LivekitTransport | undefined;
logger.trace("Searching for a preferred transport");
// We will call `getSFUConfigWithOpenID` once per transport here as it's our
@@ -194,32 +193,47 @@ async function makeTransport(
logger.info("Using LiveKit transport from dev tools: ", urlFromDevSettings);
// Validate that the SFU is up. Otherwise, we want to fail on this
// as we don't permit other SFUs.
const config = await getSFUConfigWithOpenID(
// This will call the jwt/sfu/get endpoint to pre create the livekit room.
const { livekitAlias } = await getSFUConfigWithOpenID(
client,
membership,
urlFromDevSettings,
forceOldJwtEndpoint,
roomId,
client.baseUrl,
delayId,
logger,
);
return {
type: "livekit",
livekit_service_url: urlFromDevSettings,
livekit_alias: config.livekitAlias,
livekit_alias: livekitAlias,
forceOldJwtEndpoint,
};
}
async function getFirstUsableTransport(
transports: Transport[],
): Promise<LivekitTransport | null> {
): Promise<(LivekitTransport & { forceOldJwtEndpoint: boolean }) | null> {
for (const potentialTransport of transports) {
if (isLivekitTransportConfig(potentialTransport)) {
try {
// This will call the jwt/sfu/get endpoint to pre create the livekit room.
const { livekitAlias } = await getSFUConfigWithOpenID(
client,
membership,
potentialTransport.livekit_service_url,
forceOldJwtEndpoint,
roomId,
client.baseUrl,
delayId,
logger,
);
return {
...potentialTransport,
livekit_alias: livekitAlias,
forceOldJwtEndpoint,
};
} catch (ex) {
if (ex instanceof FailToGetOpenIdToken) {
@@ -283,10 +297,16 @@ async function makeTransport(
const urlFromConf = Config.get().livekit?.livekit_service_url;
if (urlFromConf) {
try {
// This will call the jwt/sfu/get endpoint to pre create the livekit room.
const { livekitAlias } = await getSFUConfigWithOpenID(
client,
membership,
urlFromConf,
forceOldJwtEndpoint,
roomId,
client.baseUrl,
delayId,
logger,
);
const selectedTransport: LivekitTransport = {
type: "livekit",
@@ -294,7 +314,7 @@ async function makeTransport(
livekit_alias: livekitAlias,
};
logger.info("Using config SFU", selectedTransport);
return selectedTransport;
return { ...selectedTransport, forceOldJwtEndpoint };
} catch (ex) {
if (ex instanceof FailToGetOpenIdToken) {
throw ex;
@@ -303,19 +323,6 @@ async function makeTransport(
}
}
if (!transport) throw new MatrixRTCTransportMissingError(domain ?? "");
// this will call the jwt/sfu/get endpoint to pre create the livekit room.
await getSFUConfigWithOpenID(
client,
membership,
transport.livekit_service_url,
forceOldJwtEndpoint,
transport.livekit_alias,
client.baseUrl,
delayId,
logger,
);
return { ...transport, forceOldJwtEndpoint };
// If we do not have returned a transport by now we throw an error
throw new MatrixRTCTransportMissingError(domain ?? "");
}