chore(deps): upgrade all dependencies, toolchains and images (#2825)

This commit is contained in:
Hampus authored and GitHub committed 2026-09-17 21:08:56 +02:00
1 parent 56e04e7b53
commit 3b552e00ef
510 files changed
+23614 -37473

No files matched your search

@@ -181,7 +181,7 @@ import type {
ScreenShareCaptureOptions,
TrackPublishOptions,
} from 'livekit-client';
import {makeObservable, observable} from 'mobx';
import {makeObservable, observableRef} from 'mobx';
const logger = new Logger('MediaEngineFacade');
@@ -403,7 +403,7 @@ class MediaEngineFacade extends Store {
setNativeAudioCaptureBridgeLifecycleBridge(this.voiceEngineV2SourceLifecycleBridge);
this.syncVoiceEngineV2AudioControlsFromAppState();
makeObservable<this, 'facadeSnapshot'>(this, {
facadeSnapshot: observable.ref,
facadeSnapshot: observableRef,
});
this.initializeEngineStoreSync();
this.initializeVoiceEngineV2ConnectionLifecycleSync();
@@ -199,7 +199,7 @@ export function parseScreenShareMigrationMessage(payload: Uint8Array): ScreenSha
}
}
export function encodeScreenShareMigrationMessage(message: ScreenShareMigrationMessage): Uint8Array {
export function encodeScreenShareMigrationMessage(message: ScreenShareMigrationMessage): Uint8Array<ArrayBuffer> {
return TEXT_ENCODER.encode(JSON.stringify(message));
}
@@ -1,6 +1,6 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import {makeObservable, observable, runInAction} from 'mobx';
import {makeObservable, observableRef, runInAction} from 'mobx';
import {useSyncExternalStore} from 'react';
export type StoreListener = () => void;
@@ -20,7 +20,7 @@ export class Store implements StoreLike {
constructor() {
makeObservable<this, 'storeVersion'>(this, {
storeVersion: observable.ref,
storeVersion: observableRef,
});
}
@@ -824,7 +824,7 @@ function subscribeToVoiceMediaGraphPublication<TFailure extends VoiceMediaGraphF
});
const commands = observerReplacementCommands(event, existing?.observedElement ?? null, event.observedElement);
if (event.hasPublication) {
if (!existing || !existing.publicationAvailable) {
if (!existing?.publicationAvailable) {
commands.push(subscribePublicationCommand(event, nextEntry));
} else {
const commandTarget = voiceMediaGraphSubscriptionCommandTarget(event);
@@ -993,7 +993,7 @@ function markVoiceMediaGraphSubscriptionPublicationMissing<TFailure extends Voic
target: VoiceMediaGraphSubscriptionTarget,
): VoiceMediaGraphSnapshot<TFailure> {
const entry = selectVoiceMediaGraphSubscriptionEntry(snapshot, target.participantIdentity, target.source);
if (!entry || !entry.publicationAvailable) return snapshot;
if (!entry?.publicationAvailable) return snapshot;
return setVoiceMediaGraphSubscriptionEntry(snapshot, updateSubscriptionAvailability(entry, false));
}
@@ -18,7 +18,7 @@ import {
type VoiceMediaGraphClockPort,
} from '@app/features/voice/engine/VoiceMediaGraphClock';
import {checkVoiceMediaGraphInvariants} from '@app/features/voice/engine/VoiceMediaGraphInvariants';
import {makeObservable, observable} from 'mobx';
import {makeObservable, observableRef} from 'mobx';
const logger = new Logger('VoiceMediaGraphStore');
const LOGGED_VIOLATION_LIMIT = 256;
@@ -33,7 +33,7 @@ export class VoiceMediaGraphStore extends Store {
super();
this.clock = clock;
makeObservable(this, {
graph: observable.ref,
graph: observableRef,
});
}
@@ -57,7 +57,7 @@ import type {
TrackPublishOptions,
} from 'livekit-client';
import {Room as LiveKitRoom, RoomEvent, Track} from 'livekit-client';
import {makeObservable, observable} from 'mobx';
import {makeObservable, observableRef} from 'mobx';
import type {Subscription} from 'rxjs';
import {timer} from 'rxjs';
@@ -214,8 +214,8 @@ export class VoiceEngineV2AppConnectionHostAdapter extends Store {
constructor() {
super();
makeObservable(this, {
connectionState: observable.ref,
hotSwapState: observable.ref,
connectionState: observableRef,
hotSwapState: observableRef,
});
this.throttle.subscribe(() => this.emitChange());
this.reconnect.subscribe(() => this.emitChange());
@@ -88,12 +88,11 @@ function buildOperatingError(method: string, reason: string): Error {
return error;
}
function toUint8Array(payload: ArrayBuffer | ArrayBufferView): Uint8Array {
if (payload instanceof Uint8Array) return payload;
if (ArrayBuffer.isView(payload)) {
return new Uint8Array(payload.buffer, payload.byteOffset, payload.byteLength);
}
return new Uint8Array(payload);
function toUint8Array(payload: ArrayBuffer | ArrayBufferView): Uint8Array<ArrayBuffer> {
if (!ArrayBuffer.isView(payload)) return new Uint8Array(payload);
const {buffer, byteOffset, byteLength} = payload;
if (buffer instanceof ArrayBuffer) return new Uint8Array(buffer, byteOffset, byteLength);
return new Uint8Array(buffer, byteOffset, byteLength).slice();
}
function isDataPayload(value: unknown): value is ArrayBuffer | ArrayBufferView {
@@ -357,7 +357,7 @@ class VoiceEngineV2AppScreenShareExecutionAdapter extends Store {
async unmuteScreenShareAudioPublicationInternal(participant: LocalParticipant, reason: string): Promise<void> {
const publication = participant.getTrackPublication(Track.Source.ScreenShareAudio);
if (!publication || !publication.isMuted) {
if (!publication?.isMuted) {
return;
}
try {
@@ -771,7 +771,7 @@ class VoiceEngineV2AppScreenShareExecutionAdapter extends Store {
options: {includeSelfWindowAudio?: boolean; replaceExisting?: boolean} = {},
): Promise<boolean> {
const participant = room?.localParticipant;
if (!participant || !participant.isScreenShareEnabled) return false;
if (!participant?.isScreenShareEnabled) return false;
if (!linuxRule) return false;
if (options.replaceExisting !== true) {
const reconfigured = await reconfigureLinuxNativeAudioRouting(linuxRule, options);
@@ -807,7 +807,7 @@ class VoiceEngineV2AppScreenShareExecutionAdapter extends Store {
async ensureWindowScreenShareAudioPublication(room: Room | null, sourceId: string): Promise<boolean> {
const participant = room?.localParticipant;
if (!participant || !participant.isScreenShareEnabled) return false;
if (!participant?.isScreenShareEnabled) return false;
const targetPid = await getElectronAPI()
?.nativeAudio?.resolveAudioRootPidForSource(sourceId)
.catch((error) => {
@@ -842,7 +842,7 @@ class VoiceEngineV2AppScreenShareExecutionAdapter extends Store {
async ensureDeviceScreenShareMicPublication(room: Room | null, audioDeviceId: string): Promise<boolean> {
const participant = room?.localParticipant;
if (!participant || !participant.isScreenShareEnabled) return false;
if (!participant?.isScreenShareEnabled) return false;
await ensureNativeMicrophonePermissionForDeviceShare('replace');
const micTrack = await createLocalAudioTrack({
deviceId: audioDeviceId && audioDeviceId !== 'default' ? audioDeviceId : undefined,
@@ -1038,7 +1038,7 @@ class VoiceEngineV2AppScreenShareExecutionAdapter extends Store {
return false;
}
const participant = room?.localParticipant;
if (!participant || !participant.isScreenShareEnabled) return false;
if (!participant?.isScreenShareEnabled) return false;
const screenSharePublication = participant.getTrackPublication(Track.Source.ScreenShare);
const screenShareTrack = screenSharePublication?.videoTrack;
if (!screenShareTrack) {
@@ -689,7 +689,7 @@ export class VoiceEngineV2AppScreenShareLiveKitFlows {
return false;
}
const participant = room?.localParticipant;
if (!participant || !participant.isScreenShareEnabled) {
if (!room || !participant?.isScreenShareEnabled) {
logger.warn('No active screen share to replace');
return false;
}
@@ -733,7 +733,7 @@ export class VoiceEngineV2AppScreenShareLiveKitFlows {
return false;
}
const participant = room?.localParticipant;
if (!participant || !participant.isScreenShareEnabled) {
if (!room || !participant?.isScreenShareEnabled) {
logger.warn('No active screen share to replace');
return false;
}
@@ -772,7 +772,7 @@ export class VoiceEngineV2AppScreenShareLiveKitFlows {
return false;
}
const participant = room?.localParticipant;
if (!room || !participant || !participant.isScreenShareEnabled) {
if (!room || !participant?.isScreenShareEnabled) {
logger.warn('No active screen share to republish');
return false;
}
@@ -892,7 +892,7 @@ export class VoiceEngineV2AppScreenShareLiveKitFlows {
const sourceVideoTrack =
screenShareTrack.mediaStream?.getVideoTracks()[0] ??
(videoHadProcessor ? undefined : screenShareTrack.mediaStreamTrack);
if (!sourceVideoTrack || sourceVideoTrack.readyState !== 'live') {
if (sourceVideoTrack?.readyState !== 'live') {
throw new Error('Active screen share has no live source video track to preserve');
}
const audioPublications = getLocalScreenShareAudioPublications(participant);
@@ -169,7 +169,7 @@ type RoomWithEngine = Room & {
};
interface StatsSource {
getStats(): Promise<StatsReportMap>;
getStats(): Promise<StatsReportMap | undefined>;
getTransceivers?(): ReadonlyArray<StatsTransceiver>;
}
@@ -539,6 +539,7 @@ async function collectFromStatsSource(
transport: TransportInfo | null;
}> {
const reports = await source.getStats();
if (!reports) return {tracks: [], rtt: 0, transport: null};
const midToSenderTrackId = new Map<string, string>();
for (const transceiver of source.getTransceivers?.() ?? []) {
const senderTrackId = transceiver.sender?.track?.id;
@@ -16,7 +16,7 @@ import {
type VoiceGatewayVoiceStates,
} from '@app/features/voice/engine/VoiceGatewayStateMachine';
import {ME} from '@fluxer/constants/src/AppConstants';
import {makeObservable, observable} from 'mobx';
import {makeObservable, observable, observableRef} from 'mobx';
const logger = new Logger('VoiceEngineV2AppVoiceStateAdapter');
@@ -53,10 +53,10 @@ export class VoiceEngineV2AppVoiceStateAdapter extends Store {
constructor() {
super();
makeObservable<this, 'snapshot' | 'voiceStates' | 'userVoiceStates' | 'connectionVoiceStates'>(this, {
snapshot: observable.ref,
voiceStates: observable.ref,
userVoiceStates: observable.ref,
connectionVoiceStates: observable.ref,
snapshot: observableRef,
voiceStates: observableRef,
userVoiceStates: observableRef,
connectionVoiceStates: observableRef,
});
this.applyVoiceGatewayStateContext(this.snapshot.context);
}