FCE-3582: DeviceOrchestrator and the client device API - #591
Open
MiloszFilimowski wants to merge 1 commit into
Open
FCE-3582: DeviceOrchestrator and the client device API#591MiloszFilimowski wants to merge 1 commit into
MiloszFilimowski wants to merge 1 commit into
Conversation
6 tasks
MiloszFilimowski
marked this pull request as ready for review
August 5, 2026 14:26
The orchestrator owns camera+microphone controllers, device initialization, and hardware enumeration, and mirrors all of it into the store with one update per effective change. initializeDevices keeps the pinned semantics: in-flight promise reuse, rejection resets, already_initialized short-circuit, one shared initial stream adopted by both controllers, last-device persistence, and the Safari label correction. FishjamClient grows the device config (deviceManager injection point, constraints, bandwidth limits, stream configs) and the camera/microphone/initializeDevices methods; without an injected deviceManager the client stays signalling-only and device state keeps its zero values (DeviceManagerMissingError otherwise).
MiloszFilimowski
force-pushed
the
tsunami/06-device-orchestrator
branch
from
August 5, 2026 15:05
77768ea to
646e9cd
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stacked on #590.
Description
DeviceOrchestrator: owns the camera + microphone controllers,initializeDevices, and hardware enumeration, and mirrors everything into theStateStorewith one update per effective change. Keeps the pinned init semantics: in-flight promise reuse, rejection resets,already_initializedshort-circuit, one shared initial stream adopted by both controllers (each touches only tracks of its own kind), last-device persistence, and persisted-device recovery by label (device ids are not session-stable per the platform contract).ClientStategrows the device slices:camera,microphone,availableCameras,availableMicrophones,cameraError,microphoneError,devicesInitialized.FishjamClientgrows the device config (deviceManagerinjection point, constraints, bandwidth limits, stream configs) and the camera/microphone/initializeDevicesmethods. Without an injecteddeviceManagerthe client stays signalling-only: no orchestrator, device state at zero values, device methods throwDeviceManagerMissingError.Motivation and Context
The orchestrator skeleton from RFC 0015 §5 with the signalling-only optionality FCE-3582 calls for; also delivers the
initializeDevicesport (FCE-3586). The react-client swap onto this API is the next PR in the stack.Documentation impact
Types of changes
not work as expected)