FCE-3592: mobile runs on ReactNativeDeviceManager, polyfill diet - #600
Open
MiloszFilimowski wants to merge 5 commits into
Open
FCE-3592: mobile runs on ReactNativeDeviceManager, polyfill diet#600MiloszFilimowski wants to merge 5 commits into
MiloszFilimowski wants to merge 5 commits into
Conversation
Fixes the real classification bug: react-native-webrtc rejects with a MediaStreamError that is not an Error and names permission denial SecurityError, which used to surface as UNHANDLED_ERROR. Permission warnings move from the navigator.mediaDevices monkey-patch onto the actual acquisition path. getDisplayMedia gains native screen-capture options; onDeviceChange becomes an honest no-op (the fork never emits devicechange), deleting the FCE-3689 cast workaround here.
FishjamProvider moves to its own module and declares what mobile is (clientType 'mobile', ReactNativeDeviceManager) instead of constructing a signalling client per render. Device acquisition no longer flows through the fake navigator.mediaDevices.
… else dies registerGlobals() is gone; globals.ts installs RTCPeerConnection (the getConfiguration-caching subclass), RTCIceCandidate, and MediaStream from direct fork imports — the exact set the legacy connection core resolves from globals. The navigator.mediaDevices fake, the in-memory localStorage, the EventTarget global, and the getUserMedia permission monkey-patch are deleted. Breaking for apps that used the removed globals directly (README note).
…ript tsunami sat at 0.0.0 while every other package tracks 0.29.0, and the release script's package list omitted it entirely — so each release would have left it further behind. It stays private:true; that flag is the remaining switch to flip when it actually goes out.
…nfig Import sorting, quote style, and no-shadow on the hoisted fake classes — no behavior change.
6 tasks
MiloszFilimowski
marked this pull request as ready for review
August 11, 2026 09:35
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 #599.
Description
ReactNativeDeviceManagerhardened before going live: the fork rejects permission denials with aMediaStreamError(not anError) namedSecurityError, which classified asUNHANDLED_ERROR— now duck-typed toNotAllowedError. Permission warnings move off the navigator monkey-patch onto the acquisition path;displayMediaOptionsconstructor option;onDeviceChangeis an honest no-op (deletes the FCE-3689 cast).clientType: 'mobile'+ a module-level native manager, no per-render ts-client allocation. NodeviceManagerprop exposed to apps.webrtc-polyfill.ts→globals.ts: noregisterGlobals()— onlyRTCPeerConnection,RTCIceCandidate, andMediaStreamare set, from direct fork imports. Deleted: localStorage polyfill,overrides/getUserMedia,EventTargetglobal. Breaking for apps that used the removed globals (README note included).Motivation and Context
FCE-3592 follow-through: mobile runs on a native
IDeviceManagerinstead of pretending to be a browser. Validated on the iOS simulator: boot, permission denial path, camera preview via RTCView, sandbox room join; Hermes eval confirmed the 11 removed globals areundefinedand the 3 kept ones constructible. Mobile tests: 16 (classification, permission warnings, displayMediaOptions, createMediaStream, provider shape, globals).Documentation impact
Types of changes
not work as expected)