Skip to content

FCE-3582: DeviceOrchestrator and the client device API - #591

Open
MiloszFilimowski wants to merge 1 commit into
tsunami/05-track-controllersfrom
tsunami/06-device-orchestrator
Open

FCE-3582: DeviceOrchestrator and the client device API#591
MiloszFilimowski wants to merge 1 commit into
tsunami/05-track-controllersfrom
tsunami/06-device-orchestrator

Conversation

@MiloszFilimowski

@MiloszFilimowski MiloszFilimowski commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator

Stacked on #590.

Description

  • DeviceOrchestrator: owns the camera + microphone controllers, initializeDevices, and hardware enumeration, and mirrors everything into the StateStore with one update per effective change. Keeps the pinned init semantics: in-flight promise reuse, rejection resets, already_initialized short-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).
  • ClientState grows the device slices: camera, microphone, availableCameras, availableMicrophones, cameraError, microphoneError, devicesInitialized.
  • 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: no orchestrator, device state at zero values, device methods throw DeviceManagerMissingError.

Motivation and Context

The orchestrator skeleton from RFC 0015 §5 with the signalling-only optionality FCE-3582 calls for; also delivers the initializeDevices port (FCE-3586). The react-client swap onto this API is the next PR in the stack.

Documentation impact

  • Documentation update required
  • Documentation updated in another PR
  • No documentation update required

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to
    not work as expected)

@MiloszFilimowski MiloszFilimowski changed the title tsunami: DeviceOrchestrator and the client device API FCE-3582: DeviceOrchestrator and the client device API Aug 5, 2026
@linear

linear Bot commented Aug 5, 2026

Copy link
Copy Markdown

FCE-3582

@MiloszFilimowski
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
MiloszFilimowski force-pushed the tsunami/06-device-orchestrator branch from 77768ea to 646e9cd Compare August 5, 2026 15:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant