@whereby.com/core 1.9.0 → 1.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1156,7 +1156,7 @@ const createReactor = (selectors, callback) => {
1156
1156
  });
1157
1157
  };
1158
1158
 
1159
- const coreVersion = "1.9.0";
1159
+ const coreVersion = "1.9.2";
1160
1160
 
1161
1161
  const initialState$1 = {
1162
1162
  displayName: null,
@@ -1726,7 +1726,7 @@ const doToggleCamera = createAppAsyncThunk("localMedia/doToggleCamera", (_1, _a)
1726
1726
  else {
1727
1727
  const constraintsOptions = selectLocalMediaConstraintsOptions(state);
1728
1728
  const cameraDeviceId = selectCurrentCameraDeviceId(state);
1729
- yield getStream(Object.assign(Object.assign({}, constraintsOptions), { audioId: false, videoId: cameraDeviceId, type: "exact" }), { replaceStream: stream });
1729
+ yield getStream(Object.assign(Object.assign({}, constraintsOptions), { audioId: false, videoId: cameraDeviceId || true, type: "exact" }), { replaceStream: stream });
1730
1730
  track = stream.getVideoTracks()[0];
1731
1731
  }
1732
1732
  }
@@ -1791,7 +1791,6 @@ const doSetDevice = createAppAsyncThunk("localMedia/reactSetDevice", (_a, _b) =>
1791
1791
  }
1792
1792
  }));
1793
1793
  const doUpdateDeviceList = createAppAsyncThunk("localMedia/doUpdateDeviceList", (_1, _a) => __awaiter(void 0, [_1, _a], void 0, function* (_, { getState, dispatch, rejectWithValue }) {
1794
- var _b, _c, _d, _e;
1795
1794
  const state = getState();
1796
1795
  let newDevices = [];
1797
1796
  let oldDevices = [];
@@ -1807,19 +1806,29 @@ const doUpdateDeviceList = createAppAsyncThunk("localMedia/doUpdateDeviceList",
1807
1806
  if (!shouldHandleDeviceUpdate) {
1808
1807
  return { devices: newDevices };
1809
1808
  }
1810
- const { changedDevices, addedDevices } = getUpdatedDevices({
1809
+ const { currentCameraDeviceId, currentMicrophoneDeviceId, currentSpeakerDeviceId } = state.localMedia;
1810
+ const { changedDevices, removedDevices } = getUpdatedDevices({
1811
1811
  oldDevices,
1812
1812
  newDevices,
1813
+ currentVideoId: currentCameraDeviceId,
1814
+ currentAudioId: currentMicrophoneDeviceId,
1815
+ currentSpeakerId: currentSpeakerDeviceId,
1813
1816
  });
1814
- let autoSwitchAudioId = (_b = changedDevices.audioinput) === null || _b === void 0 ? void 0 : _b.deviceId;
1815
- let autoSwitchVideoId = (_c = changedDevices.videoinput) === null || _c === void 0 ? void 0 : _c.deviceId;
1816
- if (autoSwitchAudioId === undefined) {
1817
- autoSwitchAudioId = (_d = addedDevices.audioinput) === null || _d === void 0 ? void 0 : _d.deviceId;
1817
+ let autoSwitchAudioId;
1818
+ let autoSwitchVideoId;
1819
+ if (removedDevices.audioinput) {
1820
+ autoSwitchAudioId = true;
1818
1821
  }
1819
- if (autoSwitchVideoId === undefined) {
1820
- autoSwitchVideoId = (_e = addedDevices.videoinput) === null || _e === void 0 ? void 0 : _e.deviceId;
1822
+ if (removedDevices.videoinput) {
1823
+ autoSwitchVideoId = true;
1821
1824
  }
1822
- if (autoSwitchAudioId !== undefined || autoSwitchVideoId !== undefined) {
1825
+ if (!autoSwitchAudioId && changedDevices.audioinput) {
1826
+ autoSwitchAudioId = changedDevices.audioinput.deviceId;
1827
+ }
1828
+ if (!autoSwitchVideoId && changedDevices.videoinput) {
1829
+ autoSwitchVideoId = changedDevices.videoinput.deviceId;
1830
+ }
1831
+ if (autoSwitchAudioId || autoSwitchVideoId) {
1823
1832
  dispatch(doSwitchLocalStream({ audioId: autoSwitchAudioId, videoId: autoSwitchVideoId }));
1824
1833
  }
1825
1834
  return { devices: newDevices };
@@ -1837,28 +1846,29 @@ const doSwitchLocalStream = createAppAsyncThunk("localMedia/doSwitchLocalStream"
1837
1846
  return;
1838
1847
  }
1839
1848
  const beforeEffectTracks = selectLocalMediaBeforeEffectTracks(state);
1840
- if (audioId !== undefined && (beforeEffectTracks === null || beforeEffectTracks === void 0 ? void 0 : beforeEffectTracks.audio)) {
1849
+ if (audioId && (beforeEffectTracks === null || beforeEffectTracks === void 0 ? void 0 : beforeEffectTracks.audio)) {
1841
1850
  beforeEffectTracks.audio.stop();
1842
1851
  beforeEffectTracks.audio = undefined;
1843
1852
  }
1844
- if (videoId !== undefined && (beforeEffectTracks === null || beforeEffectTracks === void 0 ? void 0 : beforeEffectTracks.video)) {
1853
+ if (videoId && (beforeEffectTracks === null || beforeEffectTracks === void 0 ? void 0 : beforeEffectTracks.video)) {
1845
1854
  beforeEffectTracks.video.stop();
1846
1855
  beforeEffectTracks.video = undefined;
1847
1856
  }
1848
1857
  try {
1849
- const { replacedTracks } = yield getStream(Object.assign(Object.assign({}, constraintsOptions), { audioId: audioId === undefined ? false : audioId, videoId: videoId === undefined ? false : videoId, type: "exact" }), { replaceStream });
1850
- const deviceId = audioId || videoId;
1851
- if (onlySwitchingOne && deviceId) {
1852
- dispatch(deviceBusy({
1853
- deviceId,
1854
- }));
1858
+ const { replacedTracks, error } = yield getStream(Object.assign(Object.assign({}, constraintsOptions), { audioId: audioId || false, videoId: videoId || false, type: "exact" }), { replaceStream });
1859
+ if (error) {
1860
+ const deviceId = audioId || videoId;
1861
+ if (onlySwitchingOne && typeof deviceId === "string") {
1862
+ dispatch(deviceBusy({
1863
+ deviceId,
1864
+ }));
1865
+ }
1855
1866
  }
1856
1867
  return { replacedTracks, beforeEffectTracks };
1857
1868
  }
1858
1869
  catch (error) {
1859
- console.error(error);
1860
1870
  const deviceId = audioId || videoId;
1861
- if (onlySwitchingOne && deviceId) {
1871
+ if (onlySwitchingOne && typeof deviceId === "string") {
1862
1872
  dispatch(deviceBusy({
1863
1873
  deviceId,
1864
1874
  }));
@@ -1998,13 +2008,17 @@ createReactor([selectLocalMediaShouldStartWithOptions], ({ dispatch }, options)
1998
2008
  dispatch(doStartLocalMedia(options));
1999
2009
  }
2000
2010
  });
2001
- const selectLocalMediaShouldStop = createSelector(selectAppIsActive, selectLocalMediaStatus, selectLocalMediaOptions, (appIsActive, localMediaStatus, localMediaOptions) => {
2002
- return !appIsActive && localMediaStatus !== "inactive" && !!localMediaOptions;
2003
- });
2004
- createReactor([selectLocalMediaShouldStop], ({ dispatch }, localMediaShouldStop) => {
2005
- if (localMediaShouldStop) {
2011
+ startAppListening({
2012
+ predicate: (_action, currentState, previousState) => {
2013
+ const oldValue = selectAppIsActive(previousState);
2014
+ const newValue = selectAppIsActive(currentState);
2015
+ const localMediaOptions = selectLocalMediaOptions(currentState);
2016
+ const localMediaStatus = selectLocalMediaStatus(currentState);
2017
+ return (oldValue === true && newValue === false) && localMediaStatus !== "inactive" && !!localMediaOptions;
2018
+ },
2019
+ effect: (_, { dispatch }) => {
2006
2020
  dispatch(doStopLocalMedia());
2007
- }
2021
+ },
2008
2022
  });
2009
2023
  startAppListening({
2010
2024
  predicate: (_action, currentState, previousState) => {
@@ -2045,10 +2059,25 @@ startAppListening({
2045
2059
  });
2046
2060
  startAppListening({
2047
2061
  predicate: (_action, currentState, previousState) => {
2048
- const oldValue = selectCurrentCameraDeviceId(previousState);
2049
- const newValue = selectCurrentCameraDeviceId(currentState);
2062
+ var _a, _b;
2063
+ const oldDeviceId = selectCurrentCameraDeviceId(previousState);
2064
+ const newDeviceId = selectCurrentCameraDeviceId(currentState);
2050
2065
  const isReady = selectLocalMediaStatus(previousState) === "started";
2051
- return isReady && oldValue !== newValue;
2066
+ const isSwitchingStream = selectLocalMediaIsSwitchingStream(currentState);
2067
+ if (isSwitchingStream) {
2068
+ return false;
2069
+ }
2070
+ if (!newDeviceId) {
2071
+ return false;
2072
+ }
2073
+ const currentTrack = (_b = (_a = selectLocalMediaStream(currentState)) === null || _a === void 0 ? void 0 : _a.getVideoTracks()) === null || _b === void 0 ? void 0 : _b[0];
2074
+ if (currentTrack && currentTrack.readyState === "live") {
2075
+ const currentDeviceId = currentTrack.getSettings().deviceId;
2076
+ if (currentDeviceId === newDeviceId) {
2077
+ return false;
2078
+ }
2079
+ }
2080
+ return isReady && oldDeviceId !== newDeviceId;
2052
2081
  },
2053
2082
  effect: (_action, { dispatch }) => {
2054
2083
  dispatch(doSetDevice({ audio: false, video: true }));
@@ -2056,10 +2085,25 @@ startAppListening({
2056
2085
  });
2057
2086
  startAppListening({
2058
2087
  predicate: (_action, currentState, previousState) => {
2059
- const oldValue = selectCurrentMicrophoneDeviceId(previousState);
2060
- const newValue = selectCurrentMicrophoneDeviceId(currentState);
2088
+ var _a, _b;
2089
+ const oldDeviceId = selectCurrentMicrophoneDeviceId(previousState);
2090
+ const newDeviceId = selectCurrentMicrophoneDeviceId(currentState);
2061
2091
  const isReady = selectLocalMediaStatus(previousState) === "started";
2062
- return isReady && oldValue !== newValue;
2092
+ const isSwitchingStream = selectLocalMediaIsSwitchingStream(currentState);
2093
+ if (isSwitchingStream) {
2094
+ return false;
2095
+ }
2096
+ if (!newDeviceId) {
2097
+ return false;
2098
+ }
2099
+ const currentTrack = (_b = (_a = selectLocalMediaStream(currentState)) === null || _a === void 0 ? void 0 : _a.getVideoTracks()) === null || _b === void 0 ? void 0 : _b[0];
2100
+ if (currentTrack && currentTrack.readyState === "live") {
2101
+ const currentDeviceId = currentTrack.getSettings().deviceId;
2102
+ if (currentDeviceId === newDeviceId) {
2103
+ return false;
2104
+ }
2105
+ }
2106
+ return isReady && oldDeviceId !== newDeviceId;
2063
2107
  },
2064
2108
  effect: (_action, { dispatch }) => {
2065
2109
  dispatch(doSetDevice({ audio: true, video: false }));
@@ -2878,15 +2922,6 @@ startAppListening({
2878
2922
  },
2879
2923
  });
2880
2924
 
2881
- function isDeferrable({ client, breakoutCurrentId }) {
2882
- if (!client)
2883
- return false;
2884
- if (!breakoutCurrentId && client.breakoutGroup)
2885
- return true;
2886
- if (!client.isAudioEnabled && !client.isVideoEnabled)
2887
- return true;
2888
- return false;
2889
- }
2890
2925
  const createWebRtcEmitter = (dispatch) => {
2891
2926
  return {
2892
2927
  emit: (eventName, data) => {
@@ -2974,22 +3009,12 @@ const doConnectRtc = createAppThunk(() => (dispatch, getState) => {
2974
3009
  const state = getState();
2975
3010
  const socket = selectSignalConnectionRaw(state).socket;
2976
3011
  const dispatcher = selectRtcConnectionRaw(state).rtcManagerDispatcher;
2977
- const isCameraEnabled = selectIsCameraEnabled(state);
2978
- const isMicrophoneEnabled = selectIsMicrophoneEnabled(state);
2979
3012
  const isNodeSdk = selectAppIsNodeSdk(state);
2980
3013
  if (dispatcher || !socket) {
2981
3014
  return;
2982
3015
  }
2983
3016
  const webrtcProvider = {
2984
- getMediaConstraints: () => ({
2985
- audio: isMicrophoneEnabled,
2986
- video: isCameraEnabled,
2987
- }),
2988
- deferrable(clientId) {
2989
- const client = selectRemoteParticipants(getState()).find((p) => p.id === clientId);
2990
- const breakoutCurrentId = selectBreakoutCurrentId(getState()) || "";
2991
- return isDeferrable({ client, breakoutCurrentId });
2992
- },
3017
+ getMediaConstraints: () => selectLocalMediaConstraintsOptions(state),
2993
3018
  };
2994
3019
  const rtcManagerDispatcher = new RtcManagerDispatcher({
2995
3020
  emitter: createWebRtcEmitter(dispatch),
@@ -4619,6 +4644,10 @@ class LocalMediaClient extends BaseClient {
4619
4644
  }
4620
4645
  startMedia() {
4621
4646
  return __awaiter(this, arguments, void 0, function* (options = { audio: true, video: true }) {
4647
+ const localMediaStatus = this.store.getState().localMedia.status;
4648
+ if (["started", "starting"].includes(localMediaStatus)) {
4649
+ return;
4650
+ }
4622
4651
  return yield this.store.dispatch(doStartLocalMedia(options));
4623
4652
  });
4624
4653
  }
@@ -75,7 +75,7 @@ const createReactor = (selectors, callback) => {
75
75
  });
76
76
  };
77
77
 
78
- const coreVersion = "1.9.0";
78
+ const coreVersion = "1.9.2";
79
79
 
80
80
  const initialState$1 = {
81
81
  displayName: null,
@@ -619,7 +619,7 @@ const doToggleCamera = createAppAsyncThunk("localMedia/doToggleCamera", (_1, _a)
619
619
  else {
620
620
  const constraintsOptions = selectLocalMediaConstraintsOptions(state);
621
621
  const cameraDeviceId = selectCurrentCameraDeviceId(state);
622
- yield media.getStream(Object.assign(Object.assign({}, constraintsOptions), { audioId: false, videoId: cameraDeviceId, type: "exact" }), { replaceStream: stream });
622
+ yield media.getStream(Object.assign(Object.assign({}, constraintsOptions), { audioId: false, videoId: cameraDeviceId || true, type: "exact" }), { replaceStream: stream });
623
623
  track = stream.getVideoTracks()[0];
624
624
  }
625
625
  }
@@ -684,7 +684,6 @@ const doSetDevice = createAppAsyncThunk("localMedia/reactSetDevice", (_a, _b) =>
684
684
  }
685
685
  }));
686
686
  const doUpdateDeviceList = createAppAsyncThunk("localMedia/doUpdateDeviceList", (_1, _a) => __awaiter(void 0, [_1, _a], void 0, function* (_, { getState, dispatch, rejectWithValue }) {
687
- var _b, _c, _d, _e;
688
687
  const state = getState();
689
688
  let newDevices = [];
690
689
  let oldDevices = [];
@@ -700,19 +699,29 @@ const doUpdateDeviceList = createAppAsyncThunk("localMedia/doUpdateDeviceList",
700
699
  if (!shouldHandleDeviceUpdate) {
701
700
  return { devices: newDevices };
702
701
  }
703
- const { changedDevices, addedDevices } = media.getUpdatedDevices({
702
+ const { currentCameraDeviceId, currentMicrophoneDeviceId, currentSpeakerDeviceId } = state.localMedia;
703
+ const { changedDevices, removedDevices } = media.getUpdatedDevices({
704
704
  oldDevices,
705
705
  newDevices,
706
+ currentVideoId: currentCameraDeviceId,
707
+ currentAudioId: currentMicrophoneDeviceId,
708
+ currentSpeakerId: currentSpeakerDeviceId,
706
709
  });
707
- let autoSwitchAudioId = (_b = changedDevices.audioinput) === null || _b === void 0 ? void 0 : _b.deviceId;
708
- let autoSwitchVideoId = (_c = changedDevices.videoinput) === null || _c === void 0 ? void 0 : _c.deviceId;
709
- if (autoSwitchAudioId === undefined) {
710
- autoSwitchAudioId = (_d = addedDevices.audioinput) === null || _d === void 0 ? void 0 : _d.deviceId;
710
+ let autoSwitchAudioId;
711
+ let autoSwitchVideoId;
712
+ if (removedDevices.audioinput) {
713
+ autoSwitchAudioId = true;
711
714
  }
712
- if (autoSwitchVideoId === undefined) {
713
- autoSwitchVideoId = (_e = addedDevices.videoinput) === null || _e === void 0 ? void 0 : _e.deviceId;
715
+ if (removedDevices.videoinput) {
716
+ autoSwitchVideoId = true;
714
717
  }
715
- if (autoSwitchAudioId !== undefined || autoSwitchVideoId !== undefined) {
718
+ if (!autoSwitchAudioId && changedDevices.audioinput) {
719
+ autoSwitchAudioId = changedDevices.audioinput.deviceId;
720
+ }
721
+ if (!autoSwitchVideoId && changedDevices.videoinput) {
722
+ autoSwitchVideoId = changedDevices.videoinput.deviceId;
723
+ }
724
+ if (autoSwitchAudioId || autoSwitchVideoId) {
716
725
  dispatch(doSwitchLocalStream({ audioId: autoSwitchAudioId, videoId: autoSwitchVideoId }));
717
726
  }
718
727
  return { devices: newDevices };
@@ -730,28 +739,29 @@ const doSwitchLocalStream = createAppAsyncThunk("localMedia/doSwitchLocalStream"
730
739
  return;
731
740
  }
732
741
  const beforeEffectTracks = selectLocalMediaBeforeEffectTracks(state);
733
- if (audioId !== undefined && (beforeEffectTracks === null || beforeEffectTracks === void 0 ? void 0 : beforeEffectTracks.audio)) {
742
+ if (audioId && (beforeEffectTracks === null || beforeEffectTracks === void 0 ? void 0 : beforeEffectTracks.audio)) {
734
743
  beforeEffectTracks.audio.stop();
735
744
  beforeEffectTracks.audio = undefined;
736
745
  }
737
- if (videoId !== undefined && (beforeEffectTracks === null || beforeEffectTracks === void 0 ? void 0 : beforeEffectTracks.video)) {
746
+ if (videoId && (beforeEffectTracks === null || beforeEffectTracks === void 0 ? void 0 : beforeEffectTracks.video)) {
738
747
  beforeEffectTracks.video.stop();
739
748
  beforeEffectTracks.video = undefined;
740
749
  }
741
750
  try {
742
- const { replacedTracks } = yield media.getStream(Object.assign(Object.assign({}, constraintsOptions), { audioId: audioId === undefined ? false : audioId, videoId: videoId === undefined ? false : videoId, type: "exact" }), { replaceStream });
743
- const deviceId = audioId || videoId;
744
- if (onlySwitchingOne && deviceId) {
745
- dispatch(deviceBusy({
746
- deviceId,
747
- }));
751
+ const { replacedTracks, error } = yield media.getStream(Object.assign(Object.assign({}, constraintsOptions), { audioId: audioId || false, videoId: videoId || false, type: "exact" }), { replaceStream });
752
+ if (error) {
753
+ const deviceId = audioId || videoId;
754
+ if (onlySwitchingOne && typeof deviceId === "string") {
755
+ dispatch(deviceBusy({
756
+ deviceId,
757
+ }));
758
+ }
748
759
  }
749
760
  return { replacedTracks, beforeEffectTracks };
750
761
  }
751
762
  catch (error) {
752
- console.error(error);
753
763
  const deviceId = audioId || videoId;
754
- if (onlySwitchingOne && deviceId) {
764
+ if (onlySwitchingOne && typeof deviceId === "string") {
755
765
  dispatch(deviceBusy({
756
766
  deviceId,
757
767
  }));
@@ -891,13 +901,17 @@ createReactor([selectLocalMediaShouldStartWithOptions], ({ dispatch }, options)
891
901
  dispatch(doStartLocalMedia(options));
892
902
  }
893
903
  });
894
- const selectLocalMediaShouldStop = toolkit.createSelector(selectAppIsActive, selectLocalMediaStatus, selectLocalMediaOptions, (appIsActive, localMediaStatus, localMediaOptions) => {
895
- return !appIsActive && localMediaStatus !== "inactive" && !!localMediaOptions;
896
- });
897
- createReactor([selectLocalMediaShouldStop], ({ dispatch }, localMediaShouldStop) => {
898
- if (localMediaShouldStop) {
904
+ startAppListening({
905
+ predicate: (_action, currentState, previousState) => {
906
+ const oldValue = selectAppIsActive(previousState);
907
+ const newValue = selectAppIsActive(currentState);
908
+ const localMediaOptions = selectLocalMediaOptions(currentState);
909
+ const localMediaStatus = selectLocalMediaStatus(currentState);
910
+ return (oldValue === true && newValue === false) && localMediaStatus !== "inactive" && !!localMediaOptions;
911
+ },
912
+ effect: (_, { dispatch }) => {
899
913
  dispatch(doStopLocalMedia());
900
- }
914
+ },
901
915
  });
902
916
  startAppListening({
903
917
  predicate: (_action, currentState, previousState) => {
@@ -938,10 +952,25 @@ startAppListening({
938
952
  });
939
953
  startAppListening({
940
954
  predicate: (_action, currentState, previousState) => {
941
- const oldValue = selectCurrentCameraDeviceId(previousState);
942
- const newValue = selectCurrentCameraDeviceId(currentState);
955
+ var _a, _b;
956
+ const oldDeviceId = selectCurrentCameraDeviceId(previousState);
957
+ const newDeviceId = selectCurrentCameraDeviceId(currentState);
943
958
  const isReady = selectLocalMediaStatus(previousState) === "started";
944
- return isReady && oldValue !== newValue;
959
+ const isSwitchingStream = selectLocalMediaIsSwitchingStream(currentState);
960
+ if (isSwitchingStream) {
961
+ return false;
962
+ }
963
+ if (!newDeviceId) {
964
+ return false;
965
+ }
966
+ const currentTrack = (_b = (_a = selectLocalMediaStream(currentState)) === null || _a === void 0 ? void 0 : _a.getVideoTracks()) === null || _b === void 0 ? void 0 : _b[0];
967
+ if (currentTrack && currentTrack.readyState === "live") {
968
+ const currentDeviceId = currentTrack.getSettings().deviceId;
969
+ if (currentDeviceId === newDeviceId) {
970
+ return false;
971
+ }
972
+ }
973
+ return isReady && oldDeviceId !== newDeviceId;
945
974
  },
946
975
  effect: (_action, { dispatch }) => {
947
976
  dispatch(doSetDevice({ audio: false, video: true }));
@@ -949,10 +978,25 @@ startAppListening({
949
978
  });
950
979
  startAppListening({
951
980
  predicate: (_action, currentState, previousState) => {
952
- const oldValue = selectCurrentMicrophoneDeviceId(previousState);
953
- const newValue = selectCurrentMicrophoneDeviceId(currentState);
981
+ var _a, _b;
982
+ const oldDeviceId = selectCurrentMicrophoneDeviceId(previousState);
983
+ const newDeviceId = selectCurrentMicrophoneDeviceId(currentState);
954
984
  const isReady = selectLocalMediaStatus(previousState) === "started";
955
- return isReady && oldValue !== newValue;
985
+ const isSwitchingStream = selectLocalMediaIsSwitchingStream(currentState);
986
+ if (isSwitchingStream) {
987
+ return false;
988
+ }
989
+ if (!newDeviceId) {
990
+ return false;
991
+ }
992
+ const currentTrack = (_b = (_a = selectLocalMediaStream(currentState)) === null || _a === void 0 ? void 0 : _a.getVideoTracks()) === null || _b === void 0 ? void 0 : _b[0];
993
+ if (currentTrack && currentTrack.readyState === "live") {
994
+ const currentDeviceId = currentTrack.getSettings().deviceId;
995
+ if (currentDeviceId === newDeviceId) {
996
+ return false;
997
+ }
998
+ }
999
+ return isReady && oldDeviceId !== newDeviceId;
956
1000
  },
957
1001
  effect: (_action, { dispatch }) => {
958
1002
  dispatch(doSetDevice({ audio: true, video: false }));
@@ -1784,15 +1828,6 @@ startAppListening({
1784
1828
  },
1785
1829
  });
1786
1830
 
1787
- function isDeferrable({ client, breakoutCurrentId }) {
1788
- if (!client)
1789
- return false;
1790
- if (!breakoutCurrentId && client.breakoutGroup)
1791
- return true;
1792
- if (!client.isAudioEnabled && !client.isVideoEnabled)
1793
- return true;
1794
- return false;
1795
- }
1796
1831
  const createWebRtcEmitter = (dispatch) => {
1797
1832
  return {
1798
1833
  emit: (eventName, data) => {
@@ -1880,22 +1915,12 @@ const doConnectRtc = createAppThunk(() => (dispatch, getState) => {
1880
1915
  const state = getState();
1881
1916
  const socket = selectSignalConnectionRaw(state).socket;
1882
1917
  const dispatcher = selectRtcConnectionRaw(state).rtcManagerDispatcher;
1883
- const isCameraEnabled = selectIsCameraEnabled(state);
1884
- const isMicrophoneEnabled = selectIsMicrophoneEnabled(state);
1885
1918
  const isNodeSdk = selectAppIsNodeSdk(state);
1886
1919
  if (dispatcher || !socket) {
1887
1920
  return;
1888
1921
  }
1889
1922
  const webrtcProvider = {
1890
- getMediaConstraints: () => ({
1891
- audio: isMicrophoneEnabled,
1892
- video: isCameraEnabled,
1893
- }),
1894
- deferrable(clientId) {
1895
- const client = selectRemoteParticipants(getState()).find((p) => p.id === clientId);
1896
- const breakoutCurrentId = selectBreakoutCurrentId(getState()) || "";
1897
- return isDeferrable({ client, breakoutCurrentId });
1898
- },
1923
+ getMediaConstraints: () => selectLocalMediaConstraintsOptions(state),
1899
1924
  };
1900
1925
  const rtcManagerDispatcher = new media.RtcManagerDispatcher({
1901
1926
  emitter: createWebRtcEmitter(dispatch),
@@ -4219,7 +4244,6 @@ exports.selectLocalMediaOptions = selectLocalMediaOptions;
4219
4244
  exports.selectLocalMediaOwnsStream = selectLocalMediaOwnsStream;
4220
4245
  exports.selectLocalMediaRaw = selectLocalMediaRaw;
4221
4246
  exports.selectLocalMediaShouldStartWithOptions = selectLocalMediaShouldStartWithOptions;
4222
- exports.selectLocalMediaShouldStop = selectLocalMediaShouldStop;
4223
4247
  exports.selectLocalMediaStartError = selectLocalMediaStartError;
4224
4248
  exports.selectLocalMediaStatus = selectLocalMediaStatus;
4225
4249
  exports.selectLocalMediaStream = selectLocalMediaStream;
@@ -1789,8 +1789,8 @@ declare const localMediaSlice: _reduxjs_toolkit.Slice<LocalMediaState, {
1789
1789
  }> | undefined;
1790
1790
  };
1791
1791
  localStreamMetadataUpdated(state: immer.WritableDraft<LocalMediaState>, action: PayloadAction<ReturnType<typeof getDeviceData>>): {
1792
- currentCameraDeviceId: string;
1793
- currentMicrophoneDeviceId: string;
1792
+ currentCameraDeviceId: string | undefined;
1793
+ currentMicrophoneDeviceId: string | undefined;
1794
1794
  busyDeviceIds: string[];
1795
1795
  cameraDeviceError?: unknown;
1796
1796
  cameraEnabled: boolean;
@@ -1863,8 +1863,8 @@ declare const doSwitchLocalStream: _reduxjs_toolkit.AsyncThunk<{
1863
1863
  video?: MediaStreamTrack;
1864
1864
  } | undefined;
1865
1865
  } | undefined, {
1866
- audioId?: string | null;
1867
- videoId?: string | null;
1866
+ audioId?: string | boolean;
1867
+ videoId?: string | boolean;
1868
1868
  }, ThunkConfig>;
1869
1869
  declare const doStartLocalMedia: _reduxjs_toolkit.AsyncThunk<{
1870
1870
  stream: MediaStream;
@@ -2276,51 +2276,6 @@ declare const selectLocalMediaShouldStartWithOptions: ((state: {
2276
2276
  argsMemoize: typeof reselect.weakMapMemoize;
2277
2277
  memoize: typeof reselect.weakMapMemoize;
2278
2278
  };
2279
- declare const selectLocalMediaShouldStop: ((state: {
2280
- app: AppState;
2281
- authorization: AuthorizationState;
2282
- breakout: BreakoutState;
2283
- cameraEffects: CameraEffectsState;
2284
- chat: ChatState;
2285
- cloudRecording: CloudRecordingState;
2286
- connectionMonitor: ConnectionMonitorState;
2287
- deviceCredentials: DeviceCredentialsState;
2288
- liveTranscription: LiveTranscriptionState;
2289
- localMedia: LocalMediaState;
2290
- localParticipant: LocalParticipantState;
2291
- localScreenshare: LocalScreenshareState;
2292
- notifications: NotificationsState;
2293
- organization: OrganizationState;
2294
- remoteParticipants: RemoteParticipantSliceState;
2295
- room: RoomState;
2296
- roomConnection: RoomConnectionState;
2297
- rtcAnalytics: rtcAnalyticsState;
2298
- rtcConnection: RtcConnectionState;
2299
- signalConnection: SignalConnectionState;
2300
- spotlights: SpotlightsState;
2301
- streaming: StreamingState;
2302
- waitingParticipants: WaitingParticipantsState;
2303
- }) => boolean) & {
2304
- clearCache: () => void;
2305
- resultsCount: () => number;
2306
- resetResultsCount: () => void;
2307
- } & {
2308
- resultFunc: (resultFuncArgs_0: boolean, resultFuncArgs_1: "error" | "inactive" | "stopped" | "starting" | "started", resultFuncArgs_2: LocalMediaOptions | undefined) => boolean;
2309
- memoizedResultFunc: ((resultFuncArgs_0: boolean, resultFuncArgs_1: "error" | "inactive" | "stopped" | "starting" | "started", resultFuncArgs_2: LocalMediaOptions | undefined) => boolean) & {
2310
- clearCache: () => void;
2311
- resultsCount: () => number;
2312
- resetResultsCount: () => void;
2313
- };
2314
- lastResult: () => boolean;
2315
- dependencies: [(state: RootState) => boolean, (state: RootState) => "error" | "inactive" | "stopped" | "starting" | "started", (state: RootState) => LocalMediaOptions | undefined];
2316
- recomputations: () => number;
2317
- resetRecomputations: () => void;
2318
- dependencyRecomputations: () => number;
2319
- resetDependencyRecomputations: () => void;
2320
- } & {
2321
- argsMemoize: typeof reselect.weakMapMemoize;
2322
- memoize: typeof reselect.weakMapMemoize;
2323
- };
2324
2279
 
2325
2280
  interface OrganizationState {
2326
2281
  data: Organization | null | undefined;
@@ -4966,5 +4921,5 @@ declare const selectRoomConnectionSessionId: (state: RootState) => string | unde
4966
4921
  declare const selectRoomConnectionStatus: (state: RootState) => ConnectionStatus;
4967
4922
  declare const selectRoomConnectionError: (state: RootState) => string | null;
4968
4923
 
4969
- export { addAppListener, addSpotlight, appSlice, authorizationSlice, authorizationSliceInitialState, breakoutSlice, breakoutSliceInitialState, chatSlice, chatSliceInitialState, cloudRecordingSlice, connectionMonitorSlice, connectionMonitorSliceInitialState, connectionMonitorStarted, connectionMonitorStopped, createAppAsyncThunk, createAppAuthorizedThunk, createAppThunk, createAsyncRoomConnectedThunk, createAuthorizedRoomConnectedThunk, createReactor, createRemoteParticipant, createRoomConnectedThunk, createServices, createStore, createWebRtcEmitter, deviceBusy, deviceCredentialsSlice, deviceCredentialsSliceInitialState, deviceIdentified, deviceIdentifying, doAcceptWaitingParticipant, doAppStart, doAppStop, doBreakoutJoin, doCancelKnock, doClearNotifications, doConnectRoom, doConnectRtc, doDisconnectRtc, doEnableAudio, doEnableVideo, doEndMeeting, doGetDeviceCredentials, doHandleAcceptStreams, doHandleStreamingStarted, doHandleStreamingStopped, doKickParticipant, doKnockRoom, doLocalStreamEffect, doLockRoom, doOrganizationFetch, doRejectWaitingParticipant, doRemoveSpotlight, doRequestAudioEnable, doRequestVideoEnable, doRtcAnalyticsCustomEventsInitialize, doRtcManagerCreated, doRtcManagerInitialize, doRtcReportStreamResolution, doSendChatMessage, doSendClientMetadata, doSetDevice, doSetDisplayName, doSetLocalStickyReaction, doSetNotification, doSignalConnect, doSignalDisconnect, doSignalIdentifyDevice, doSpotlightParticipant, doStartCloudRecording, doStartConnectionMonitor, doStartLiveTranscription, doStartLocalMedia, doStartScreenshare, doStopCloudRecording, doStopConnectionMonitor, doStopLiveTranscription, doStopLocalMedia, doStopScreenshare, doSwitchLocalStream, doToggleCamera, doToggleLowDataMode, doUpdateDeviceList, initialCloudRecordingState, initialLiveTranscriptionState, initialLocalMediaState, initialNotificationsState, initialState, isAcceptingStreams, isClientSpotlighted, listenerMiddleware, liveTranscriptionSlice, localMediaSlice, localMediaStopped, localParticipantSlice, localParticipantSliceInitialState, localScreenshareSlice, localScreenshareSliceInitialState, localStreamMetadataUpdated, notificationsSlice, observeStore, organizationSlice, organizationSliceInitialState, participantStreamAdded, participantStreamIdAdded, recordingRequestStarted, remoteParticipantsSlice, remoteParticipantsSliceInitialState, removeSpotlight, resolutionReported, roomConnectionSlice, roomConnectionSliceInitialState, roomSlice, roomSliceInitialState, rootReducer, rtcAnalyticsCustomEvents, rtcAnalyticsSlice, rtcAnalyticsSliceInitialState, rtcClientConnectionStatusChanged, rtcConnectionSlice, rtcConnectionSliceInitialState, rtcDisconnected, rtcDispatcherCreated, rtcEvents, rtcManagerCreated, rtcManagerDestroyed, rtcManagerInitialized, selectAllClientViews, selectAllClientViewsInCurrentGroup, selectAppDisplayName, selectAppExternalId, selectAppIgnoreBreakoutGroups, selectAppInitialConfig, selectAppIsActive, selectAppIsAssistant, selectAppIsAudioRecorder, selectAppIsDialIn, selectAppIsNodeSdk, selectAppRaw, selectAppRoomName, selectAppRoomUrl, selectAppUserAgent, selectAssistantKey, selectAuthorizationRoleName, selectBreakoutActive, selectBreakoutAssignments, selectBreakoutCurrentGroup, selectBreakoutCurrentId, selectBreakoutGroupedParticipants, selectBreakoutGroups, selectBreakoutInitiatedBy, selectBreakoutRaw, selectBusyDeviceIds, selectCameraDeviceError, selectCameraDevices, selectChatMessages, selectChatRaw, selectCloudRecordingError, selectCloudRecordingIsInitiator, selectCloudRecordingRaw, selectCloudRecordingStartedAt, selectCloudRecordingStatus, selectConnectionMonitorIsRunning, selectCurrentCameraDeviceId, selectCurrentMicrophoneDeviceId, selectCurrentSpeakerDeviceId, selectDeviceCredentialsRaw, selectDeviceId, selectHasFetchedDeviceCredentials, selectIsAcceptingStreams, selectIsAuthorizedToAskToSpeak, selectIsAuthorizedToEndMeeting, selectIsAuthorizedToKickClient, selectIsAuthorizedToLockRoom, selectIsAuthorizedToRequestAudioEnable, selectIsAuthorizedToRequestVideoEnable, selectIsAuthorizedToSpotlight, selectIsCameraEnabled, selectIsCloudRecording, selectIsLiveTranscription, selectIsLocalMediaStarting, selectIsLocalParticipantSpotlighted, selectIsLowDataModeEnabled, selectIsMicrophoneEnabled, selectIsSettingCameraDevice, selectIsSettingMicrophoneDevice, selectIsToggleCamera, selectLiveTranscriptionError, selectLiveTranscriptionIsInitiator, selectLiveTranscriptionRaw, selectLiveTranscriptionStartedAt, selectLiveTranscriptionStatus, selectLocalMediaBeforeEffectTracks, selectLocalMediaConstraintsOptions, selectLocalMediaDevices, selectLocalMediaIsSwitchingStream, selectLocalMediaOptions, selectLocalMediaOwnsStream, selectLocalMediaRaw, selectLocalMediaShouldStartWithOptions, selectLocalMediaShouldStop, selectLocalMediaStartError, selectLocalMediaStatus, selectLocalMediaStream, selectLocalParticipantBreakoutAssigned, selectLocalParticipantBreakoutGroup, selectLocalParticipantClientClaim, selectLocalParticipantDisplayName, selectLocalParticipantIsScreenSharing, selectLocalParticipantRaw, selectLocalParticipantStickyReaction, selectLocalParticipantView, selectLocalScreenshareRaw, selectLocalScreenshareStatus, selectLocalScreenshareStream, selectMicrophoneDeviceError, selectMicrophoneDevices, selectNotificationsEmitter, selectNotificationsEvents, selectNotificationsRaw, selectNumClients, selectNumParticipants, selectOrganizationId, selectOrganizationPreferences, selectOrganizationRaw, selectRemoteClientViews, selectRemoteClients, selectRemoteParticipants, selectRemoteParticipantsRaw, selectRoomConnectionError, selectRoomConnectionRaw, selectRoomConnectionSession, selectRoomConnectionSessionId, selectRoomConnectionStatus, selectRoomIsLocked, selectRoomKey, selectRtcConnectionRaw, selectRtcDispatcherCreated, selectRtcIsCreatingDispatcher, selectRtcManager, selectRtcManagerInitialized, selectRtcStatus, selectScreenshares, selectSelfId, selectShouldConnectRoom, selectShouldConnectRtc, selectShouldConnectSignal, selectShouldDisconnectRtc, selectShouldFetchDeviceCredentials, selectShouldFetchOrganization, selectShouldIdentifyDevice, selectShouldInitializeRtc, selectShouldStartConnectionMonitor, selectShouldStopConnectionMonitor, selectSignalConnectionDeviceIdentified, selectSignalConnectionRaw, selectSignalConnectionSocket, selectSignalIsIdentifyingDevice, selectSignalStatus, selectSpeakerDevices, selectSpotlightedClientViews, selectSpotlights, selectSpotlightsRaw, selectStopCallbackFunction, selectStreamingRaw, selectStreamsToAccept, selectWaitingParticipants, selectWaitingParticipantsRaw, setBreakoutGroupAssigned, setCurrentCameraDeviceId, setCurrentMicrophoneDeviceId, setCurrentSpeakerDeviceId, setDisplayName, setLocalMediaOptions, setLocalMediaStream, setRoomKey, signalConnectionSlice, signalConnectionSliceInitialState, signalEvents, socketConnected, socketConnecting, socketDisconnected, socketReconnecting, spotlightsSlice, spotlightsSliceInitialState, startAppListening, stopScreenshare, streamIdForClient, streamStatusUpdated, streamingSlice, streamingSliceInitialState, toggleCameraEnabled, toggleLowDataModeEnabled, toggleMicrophoneEnabled, transcribingRequestStarted, updateReportedValues, waitingParticipantsSlice, waitingParticipantsSliceInitialState };
4924
+ export { addAppListener, addSpotlight, appSlice, authorizationSlice, authorizationSliceInitialState, breakoutSlice, breakoutSliceInitialState, chatSlice, chatSliceInitialState, cloudRecordingSlice, connectionMonitorSlice, connectionMonitorSliceInitialState, connectionMonitorStarted, connectionMonitorStopped, createAppAsyncThunk, createAppAuthorizedThunk, createAppThunk, createAsyncRoomConnectedThunk, createAuthorizedRoomConnectedThunk, createReactor, createRemoteParticipant, createRoomConnectedThunk, createServices, createStore, createWebRtcEmitter, deviceBusy, deviceCredentialsSlice, deviceCredentialsSliceInitialState, deviceIdentified, deviceIdentifying, doAcceptWaitingParticipant, doAppStart, doAppStop, doBreakoutJoin, doCancelKnock, doClearNotifications, doConnectRoom, doConnectRtc, doDisconnectRtc, doEnableAudio, doEnableVideo, doEndMeeting, doGetDeviceCredentials, doHandleAcceptStreams, doHandleStreamingStarted, doHandleStreamingStopped, doKickParticipant, doKnockRoom, doLocalStreamEffect, doLockRoom, doOrganizationFetch, doRejectWaitingParticipant, doRemoveSpotlight, doRequestAudioEnable, doRequestVideoEnable, doRtcAnalyticsCustomEventsInitialize, doRtcManagerCreated, doRtcManagerInitialize, doRtcReportStreamResolution, doSendChatMessage, doSendClientMetadata, doSetDevice, doSetDisplayName, doSetLocalStickyReaction, doSetNotification, doSignalConnect, doSignalDisconnect, doSignalIdentifyDevice, doSpotlightParticipant, doStartCloudRecording, doStartConnectionMonitor, doStartLiveTranscription, doStartLocalMedia, doStartScreenshare, doStopCloudRecording, doStopConnectionMonitor, doStopLiveTranscription, doStopLocalMedia, doStopScreenshare, doSwitchLocalStream, doToggleCamera, doToggleLowDataMode, doUpdateDeviceList, initialCloudRecordingState, initialLiveTranscriptionState, initialLocalMediaState, initialNotificationsState, initialState, isAcceptingStreams, isClientSpotlighted, listenerMiddleware, liveTranscriptionSlice, localMediaSlice, localMediaStopped, localParticipantSlice, localParticipantSliceInitialState, localScreenshareSlice, localScreenshareSliceInitialState, localStreamMetadataUpdated, notificationsSlice, observeStore, organizationSlice, organizationSliceInitialState, participantStreamAdded, participantStreamIdAdded, recordingRequestStarted, remoteParticipantsSlice, remoteParticipantsSliceInitialState, removeSpotlight, resolutionReported, roomConnectionSlice, roomConnectionSliceInitialState, roomSlice, roomSliceInitialState, rootReducer, rtcAnalyticsCustomEvents, rtcAnalyticsSlice, rtcAnalyticsSliceInitialState, rtcClientConnectionStatusChanged, rtcConnectionSlice, rtcConnectionSliceInitialState, rtcDisconnected, rtcDispatcherCreated, rtcEvents, rtcManagerCreated, rtcManagerDestroyed, rtcManagerInitialized, selectAllClientViews, selectAllClientViewsInCurrentGroup, selectAppDisplayName, selectAppExternalId, selectAppIgnoreBreakoutGroups, selectAppInitialConfig, selectAppIsActive, selectAppIsAssistant, selectAppIsAudioRecorder, selectAppIsDialIn, selectAppIsNodeSdk, selectAppRaw, selectAppRoomName, selectAppRoomUrl, selectAppUserAgent, selectAssistantKey, selectAuthorizationRoleName, selectBreakoutActive, selectBreakoutAssignments, selectBreakoutCurrentGroup, selectBreakoutCurrentId, selectBreakoutGroupedParticipants, selectBreakoutGroups, selectBreakoutInitiatedBy, selectBreakoutRaw, selectBusyDeviceIds, selectCameraDeviceError, selectCameraDevices, selectChatMessages, selectChatRaw, selectCloudRecordingError, selectCloudRecordingIsInitiator, selectCloudRecordingRaw, selectCloudRecordingStartedAt, selectCloudRecordingStatus, selectConnectionMonitorIsRunning, selectCurrentCameraDeviceId, selectCurrentMicrophoneDeviceId, selectCurrentSpeakerDeviceId, selectDeviceCredentialsRaw, selectDeviceId, selectHasFetchedDeviceCredentials, selectIsAcceptingStreams, selectIsAuthorizedToAskToSpeak, selectIsAuthorizedToEndMeeting, selectIsAuthorizedToKickClient, selectIsAuthorizedToLockRoom, selectIsAuthorizedToRequestAudioEnable, selectIsAuthorizedToRequestVideoEnable, selectIsAuthorizedToSpotlight, selectIsCameraEnabled, selectIsCloudRecording, selectIsLiveTranscription, selectIsLocalMediaStarting, selectIsLocalParticipantSpotlighted, selectIsLowDataModeEnabled, selectIsMicrophoneEnabled, selectIsSettingCameraDevice, selectIsSettingMicrophoneDevice, selectIsToggleCamera, selectLiveTranscriptionError, selectLiveTranscriptionIsInitiator, selectLiveTranscriptionRaw, selectLiveTranscriptionStartedAt, selectLiveTranscriptionStatus, selectLocalMediaBeforeEffectTracks, selectLocalMediaConstraintsOptions, selectLocalMediaDevices, selectLocalMediaIsSwitchingStream, selectLocalMediaOptions, selectLocalMediaOwnsStream, selectLocalMediaRaw, selectLocalMediaShouldStartWithOptions, selectLocalMediaStartError, selectLocalMediaStatus, selectLocalMediaStream, selectLocalParticipantBreakoutAssigned, selectLocalParticipantBreakoutGroup, selectLocalParticipantClientClaim, selectLocalParticipantDisplayName, selectLocalParticipantIsScreenSharing, selectLocalParticipantRaw, selectLocalParticipantStickyReaction, selectLocalParticipantView, selectLocalScreenshareRaw, selectLocalScreenshareStatus, selectLocalScreenshareStream, selectMicrophoneDeviceError, selectMicrophoneDevices, selectNotificationsEmitter, selectNotificationsEvents, selectNotificationsRaw, selectNumClients, selectNumParticipants, selectOrganizationId, selectOrganizationPreferences, selectOrganizationRaw, selectRemoteClientViews, selectRemoteClients, selectRemoteParticipants, selectRemoteParticipantsRaw, selectRoomConnectionError, selectRoomConnectionRaw, selectRoomConnectionSession, selectRoomConnectionSessionId, selectRoomConnectionStatus, selectRoomIsLocked, selectRoomKey, selectRtcConnectionRaw, selectRtcDispatcherCreated, selectRtcIsCreatingDispatcher, selectRtcManager, selectRtcManagerInitialized, selectRtcStatus, selectScreenshares, selectSelfId, selectShouldConnectRoom, selectShouldConnectRtc, selectShouldConnectSignal, selectShouldDisconnectRtc, selectShouldFetchDeviceCredentials, selectShouldFetchOrganization, selectShouldIdentifyDevice, selectShouldInitializeRtc, selectShouldStartConnectionMonitor, selectShouldStopConnectionMonitor, selectSignalConnectionDeviceIdentified, selectSignalConnectionRaw, selectSignalConnectionSocket, selectSignalIsIdentifyingDevice, selectSignalStatus, selectSpeakerDevices, selectSpotlightedClientViews, selectSpotlights, selectSpotlightsRaw, selectStopCallbackFunction, selectStreamingRaw, selectStreamsToAccept, selectWaitingParticipants, selectWaitingParticipantsRaw, setBreakoutGroupAssigned, setCurrentCameraDeviceId, setCurrentMicrophoneDeviceId, setCurrentSpeakerDeviceId, setDisplayName, setLocalMediaOptions, setLocalMediaStream, setRoomKey, signalConnectionSlice, signalConnectionSliceInitialState, signalEvents, socketConnected, socketConnecting, socketDisconnected, socketReconnecting, spotlightsSlice, spotlightsSliceInitialState, startAppListening, stopScreenshare, streamIdForClient, streamStatusUpdated, streamingSlice, streamingSliceInitialState, toggleCameraEnabled, toggleLowDataModeEnabled, toggleMicrophoneEnabled, transcribingRequestStarted, updateReportedValues, waitingParticipantsSlice, waitingParticipantsSliceInitialState };
4970
4925
  export type { AppConfig, AppDispatch, AppReducer, AppStartListening, AppState, AppThunk, AuthorizationState, BreakoutState, ChatMessage, ChatMessageEvent, ChatMessageEventProps, ChatState, ClientView, CloudRecordingState, ConnectionMonitorStart, ConnectionMonitorState, ConnectionStatus, DeviceCredentialsState, LiveTranscriptionState, LocalMediaOptions, LocalMediaState, LocalParticipantState, LocalScreenshareState, Notification, NotificationEvent, NotificationEventMap, NotificationEvents, NotificationsEventEmitter, NotificationsState, OrganizationState, RemoteParticipantSliceState, RequestAudioEvent, RequestAudioEventProps, RequestVideoEvent, RequestVideoEventProps, RoomConnectionState, RoomState, RootState, RtcConnectionState, SignalClientEvent, SignalClientEventProps, SignalConnectionState, SignalStatusEvent, SignalStatusEventProps, SpotlightsState, StickyReactionEvent, StickyReactionEventProps, Store, StreamingState, ThunkConfig, WaitingParticipantsState, rtcAnalyticsState };