@stream-io/video-react-sdk 0.0.18 → 0.0.20

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.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,25 @@
2
2
 
3
3
  This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
4
4
 
5
+ ### [0.0.20](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-sdk-0.0.19...@stream-io/video-react-sdk-0.0.20) (2023-06-12)
6
+
7
+
8
+ ### Documentation
9
+
10
+ * **react-sdk:** adjust asset folder names & update asset links ([#620](https://github.com/GetStream/stream-video-js/issues/620)) ([3218309](https://github.com/GetStream/stream-video-js/commit/321830934182797c2893839451365f6866f13c64))
11
+
12
+ ### [0.0.19](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-sdk-0.0.18...@stream-io/video-react-sdk-0.0.19) (2023-06-09)
13
+
14
+
15
+ ### Bug Fixes
16
+
17
+ * **react-sdk:** do not try to watch devices, if browser permission is not granted ([#617](https://github.com/GetStream/stream-video-js/issues/617)) ([abff44d](https://github.com/GetStream/stream-video-js/commit/abff44d2e66d6c4c515c7d4590fb3767b2560e64))
18
+
19
+
20
+ ### Documentation
21
+
22
+ * **react-sdk:** rename 13-custom-call-layout.mdx to 04-video-layout.mdx ([#586](https://github.com/GetStream/stream-video-js/issues/586)) ([e832092](https://github.com/GetStream/stream-video-js/commit/e832092aac5b2de2327294d1a45bcc02d33db4a4))
23
+
5
24
  ### [0.0.18](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-sdk-0.0.17...@stream-io/video-react-sdk-0.0.18) (2023-06-09)
6
25
 
7
26
  ### Dependency Updates
@@ -12,7 +12,7 @@ import { createContext, useCallback, useContext, useEffect, useState, } from 're
12
12
  import { map } from 'rxjs';
13
13
  import { CallingState, checkIfAudioOutputChangeSupported, disposeOfMediaStream, getAudioStream, getVideoStream, SfuModels, watchForDisconnectedAudioOutputDevice, } from '@stream-io/video-client';
14
14
  import { useCall, useCallCallingState, useCallMetadata, useCallState, } from '@stream-io/video-react-bindings';
15
- import { useAudioInputDeviceFallback, useAudioOutputDeviceFallback, useAudioPublisher, useVideoDeviceFallback, useVideoPublisher, } from '../hooks';
15
+ import { useAudioInputDeviceFallback, useAudioOutputDeviceFallback, useAudioPublisher, useHasBrowserPermissions, useVideoDeviceFallback, useVideoPublisher, } from '../hooks';
16
16
  const DEVICE_STATE_TOGGLE = {
17
17
  starting: 'stopped',
18
18
  playing: 'stopped',
@@ -57,6 +57,8 @@ export const MediaDevicesProvider = ({ children, initialAudioEnabled, initialVid
57
57
  const callState = useCallState();
58
58
  const metadata = useCallMetadata();
59
59
  const { localParticipant$ } = callState;
60
+ const canObserveVideo = useHasBrowserPermissions('camera');
61
+ const canObserveAudio = useHasBrowserPermissions('microphone');
60
62
  const [selectedAudioInputDeviceId, selectAudioInputDeviceId] = useState(initialAudioInputDeviceId);
61
63
  const [selectedAudioOutputDeviceId, selectAudioOutputDeviceId] = useState(initialAudioOutputDeviceId);
62
64
  const [selectedVideoDeviceId, selectVideoDeviceId] = useState(initialVideoInputDeviceId);
@@ -121,16 +123,19 @@ export const MediaDevicesProvider = ({ children, initialAudioEnabled, initialVid
121
123
  selectAudioOutputDeviceId(deviceId);
122
124
  }
123
125
  }, []);
124
- useAudioInputDeviceFallback(() => switchDevice('audioinput', DEFAULT_DEVICE_ID), selectedAudioInputDeviceId);
125
- useAudioOutputDeviceFallback(() => switchDevice('audiooutput', DEFAULT_DEVICE_ID), selectedAudioOutputDeviceId);
126
- useVideoDeviceFallback(() => switchDevice('videoinput', DEFAULT_DEVICE_ID), selectedVideoDeviceId);
126
+ useAudioInputDeviceFallback(() => switchDevice('audioinput', DEFAULT_DEVICE_ID), canObserveAudio, selectedAudioInputDeviceId);
127
+ useAudioOutputDeviceFallback(() => switchDevice('audiooutput', DEFAULT_DEVICE_ID),
128
+ // audiooutput devices can be enumerated only with microphone permissions
129
+ canObserveAudio, selectedAudioOutputDeviceId);
130
+ useVideoDeviceFallback(() => switchDevice('videoinput', DEFAULT_DEVICE_ID), canObserveVideo, selectedVideoDeviceId);
127
131
  useEffect(() => {
128
132
  if (!call || callingState !== CallingState.JOINED)
129
133
  return;
130
134
  call.setAudioOutputDevice(selectedAudioOutputDeviceId);
131
135
  }, [call, callingState, selectedAudioOutputDeviceId]);
132
136
  useEffect(() => {
133
- if (!localParticipant$)
137
+ // audiooutput devices can be enumerated only with microphone permissions
138
+ if (!localParticipant$ || !canObserveAudio)
134
139
  return;
135
140
  const subscription = watchForDisconnectedAudioOutputDevice(localParticipant$.pipe(map((p) => p === null || p === void 0 ? void 0 : p.audioOutputDeviceId))).subscribe(() => __awaiter(void 0, void 0, void 0, function* () {
136
141
  selectAudioOutputDeviceId(DEFAULT_DEVICE_ID);
@@ -138,7 +143,7 @@ export const MediaDevicesProvider = ({ children, initialAudioEnabled, initialVid
138
143
  return () => {
139
144
  subscription.unsubscribe();
140
145
  };
141
- }, [localParticipant$]);
146
+ }, [canObserveAudio, localParticipant$]);
142
147
  const contextValue = {
143
148
  disposeOfMediaStream,
144
149
  getAudioStream,
@@ -1 +1 @@
1
- {"version":3,"file":"MediaDevicesContext.js","sourceRoot":"","sources":["../../../../src/core/contexts/MediaDevicesContext.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MediaDevicesContext.js","sourceRoot":"","sources":["../../../../src/core/contexts/MediaDevicesContext.tsx"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@
2
2
  * @internal
3
3
  */
4
4
  export type AudioPublisherInit = {
5
+ canObserveAudio?: boolean;
5
6
  initialAudioMuted?: boolean;
6
7
  audioDeviceId?: string;
7
8
  };
@@ -9,4 +10,4 @@ export type AudioPublisherInit = {
9
10
  * @internal
10
11
  * @category Device Management
11
12
  */
12
- export declare const useAudioPublisher: ({ initialAudioMuted, audioDeviceId, }: AudioPublisherInit) => () => Promise<void>;
13
+ export declare const useAudioPublisher: ({ canObserveAudio, initialAudioMuted, audioDeviceId, }: AudioPublisherInit) => () => Promise<void>;
@@ -15,7 +15,7 @@ import { useCall, useCallCallingState, useCallState, useLocalParticipant, } from
15
15
  * @internal
16
16
  * @category Device Management
17
17
  */
18
- export const useAudioPublisher = ({ initialAudioMuted, audioDeviceId, }) => {
18
+ export const useAudioPublisher = ({ canObserveAudio, initialAudioMuted, audioDeviceId, }) => {
19
19
  const call = useCall();
20
20
  const callState = useCallState();
21
21
  const callingState = useCallCallingState();
@@ -46,7 +46,7 @@ export const useAudioPublisher = ({ initialAudioMuted, audioDeviceId, }) => {
46
46
  }
47
47
  }, [callingState, initialAudioMuted, publishAudioStream]);
48
48
  useEffect(() => {
49
- if (!localParticipant$)
49
+ if (!localParticipant$ || !canObserveAudio)
50
50
  return;
51
51
  const subscription = watchForDisconnectedAudioDevice(localParticipant$.pipe(map((p) => p === null || p === void 0 ? void 0 : p.audioDeviceId))).subscribe(() => __awaiter(void 0, void 0, void 0, function* () {
52
52
  if (!call)
@@ -57,7 +57,7 @@ export const useAudioPublisher = ({ initialAudioMuted, audioDeviceId, }) => {
57
57
  return () => {
58
58
  subscription.unsubscribe();
59
59
  };
60
- }, [localParticipant$, call]);
60
+ }, [canObserveAudio, localParticipant$, call]);
61
61
  useEffect(() => {
62
62
  if (!(participant === null || participant === void 0 ? void 0 : participant.audioStream) || !call || !isPublishingAudio)
63
63
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"useAudioPublisher.js","sourceRoot":"","sources":["../../../../src/core/hooks/useAudioPublisher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useAudioPublisher.js","sourceRoot":"","sources":["../../../../src/core/hooks/useAudioPublisher.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { Observable } from 'rxjs';
2
+ export declare const useHasBrowserPermissions: (permissionName: PermissionName) => boolean;
2
3
  /**
3
4
  * Observes changes in connected devices and maintains an up-to-date array of connected MediaDeviceInfo objects.
4
5
  * @param observeDevices
@@ -23,57 +24,76 @@ export declare const useAudioOutputDevices: () => MediaDeviceInfo[];
23
24
  /**
24
25
  * Verifies that newly selected device id exists among the registered devices.
25
26
  * If the selected device id is not found among existing devices, switches to the default device.
27
+ * The media devices are observed only if a given permission ('camera' resp. 'microphone') is granted in browser.
28
+ * Regardless of current permissions settings, an intent to observe devices will take place in Firefox.
29
+ * This is due to the fact that Firefox does not allow to query for 'camera' and 'microphone' permissions.
30
+ * @param canObserve
26
31
  * @param devices$
27
32
  * @param switchToDefaultDevice
28
33
  * @param selectedDeviceId
29
34
  * @category Device Management
30
35
  */
31
- export declare const useDeviceFallback: (devices$: Observable<MediaDeviceInfo[]>, switchToDefaultDevice: () => void, selectedDeviceId?: string) => void;
36
+ export declare const useDeviceFallback: (canObserve: boolean, devices$: Observable<MediaDeviceInfo[]>, switchToDefaultDevice: () => void, selectedDeviceId?: string) => void;
32
37
  /**
33
38
  * Verifies that newly selected video device id exists among the registered devices.
34
39
  * If the selected device id is not found among existing devices, switches to the default video device.
40
+ * The media devices are observed only if 'camera' permission is granted in browser.
41
+ * It is integrators responsibility to instruct users how to enable required permissions.
42
+ * Regardless of current permissions settings, an intent to observe devices will take place in Firefox.
43
+ * This is due to the fact that Firefox does not allow to query for 'camera' and 'microphone' permissions.
35
44
  * @param switchToDefaultDevice
45
+ * @param canObserve
36
46
  * @param selectedDeviceId
37
47
  * @category Device Management
38
48
  */
39
- export declare const useVideoDeviceFallback: (switchToDefaultDevice: () => void, selectedDeviceId?: string) => void;
49
+ export declare const useVideoDeviceFallback: (switchToDefaultDevice: () => void, canObserve: boolean, selectedDeviceId?: string) => void;
40
50
  /**
41
51
  * Verifies that newly selected audio input device id exists among the registered devices.
42
52
  * If the selected device id is not found among existing devices, switches to the default audio input device.
53
+ * The media devices are observed only if 'microphone' permission is granted in browser.
54
+ * It is integrators responsibility to instruct users how to enable required permissions.
55
+ * Regardless of current permissions settings, an intent to observe devices will take place in Firefox.
56
+ * This is due to the fact that Firefox does not allow to query for 'camera' and 'microphone' permissions.
43
57
  * @param switchToDefaultDevice
58
+ * @param canObserve
44
59
  * @param selectedDeviceId
45
60
  * @category Device Management
46
61
  */
47
- export declare const useAudioInputDeviceFallback: (switchToDefaultDevice: () => void, selectedDeviceId?: string) => void;
62
+ export declare const useAudioInputDeviceFallback: (switchToDefaultDevice: () => void, canObserve: boolean, selectedDeviceId?: string) => void;
48
63
  /**
49
64
  * Verifies that newly selected audio output device id exists among the registered devices.
50
65
  * If the selected device id is not found among existing devices, switches to the default audio output device.
66
+ * The media devices are observed only if 'microphone' permission is granted in browser.
67
+ * It is integrators responsibility to instruct users how to enable required permissions.
68
+ * Regardless of current permissions settings, an intent to observe devices will take place in Firefox.
69
+ * This is due to the fact that Firefox does not allow to query for 'camera' and 'microphone' permissions.
51
70
  * @param switchToDefaultDevice
71
+ * @param canObserve
52
72
  * @param selectedDeviceId
53
73
  * @category Device Management
54
74
  */
55
- export declare const useAudioOutputDeviceFallback: (switchToDefaultDevice: () => void, selectedDeviceId?: string) => void;
75
+ export declare const useAudioOutputDeviceFallback: (switchToDefaultDevice: () => void, canObserve: boolean, selectedDeviceId?: string) => void;
56
76
  /**
57
- * Observes devices of certain kind are made unavailable and executes onDisconnect callback
77
+ * Observes devices of certain kind are made unavailable and executes onDisconnect callback.
58
78
  * @param observeDevices
59
79
  * @param onDisconnect
60
80
  * @category Device Management
61
81
  */
62
82
  export declare const useOnUnavailableDevices: (observeDevices: Observable<MediaDeviceInfo[]>, onDisconnect: () => void) => void;
63
83
  /**
64
- * Observes disconnect of all video devices and executes onDisconnect callback
84
+ * Observes disconnect of all video devices and executes onDisconnect callback.
65
85
  * @param onDisconnect
66
86
  * @category Device Management
67
87
  */
68
88
  export declare const useOnUnavailableVideoDevices: (onDisconnect: () => void) => void;
69
89
  /**
70
- * Observes disconnect of all audio input devices and executes onDisconnect callback
90
+ * Observes disconnect of all audio input devices and executes onDisconnect callback.
71
91
  * @param onDisconnect
72
92
  * @category Device Management
73
93
  */
74
94
  export declare const useOnUnavailableAudioInputDevices: (onDisconnect: () => void) => void;
75
95
  /**
76
- * Observes disconnect of all audio output devices and executes onDisconnect callback
96
+ * Observes disconnect of all audio output devices and executes onDisconnect callback.
77
97
  * @param onDisconnect
78
98
  * @category Device Management
79
99
  */
@@ -1,6 +1,44 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
1
10
  import { useEffect, useState } from 'react';
2
11
  import { pairwise } from 'rxjs';
3
12
  import { getAudioDevices, getAudioOutputDevices, getVideoDevices, } from '@stream-io/video-client';
13
+ export const useHasBrowserPermissions = (permissionName) => {
14
+ const [canSubscribe, enableSubscription] = useState(false);
15
+ useEffect(() => {
16
+ let permissionState;
17
+ const handlePermissionChange = (e) => {
18
+ const { state } = e.target;
19
+ enableSubscription(state === 'granted');
20
+ };
21
+ const checkPermissions = () => __awaiter(void 0, void 0, void 0, function* () {
22
+ try {
23
+ permissionState = yield navigator.permissions.query({
24
+ name: permissionName,
25
+ });
26
+ permissionState.addEventListener('change', handlePermissionChange);
27
+ enableSubscription(permissionState.state === 'granted');
28
+ }
29
+ catch (e) {
30
+ // permission does not exist - cannot be queried
31
+ // an example would be Firefox - camera, neither microphone perms can be queried
32
+ enableSubscription(true);
33
+ }
34
+ });
35
+ checkPermissions();
36
+ return () => {
37
+ permissionState === null || permissionState === void 0 ? void 0 : permissionState.removeEventListener('change', handlePermissionChange);
38
+ };
39
+ }, [permissionName]);
40
+ return canSubscribe;
41
+ };
4
42
  /**
5
43
  * Observes changes in connected devices and maintains an up-to-date array of connected MediaDeviceInfo objects.
6
44
  * @param observeDevices
@@ -34,13 +72,19 @@ export const useAudioOutputDevices = () => useDevices(getAudioOutputDevices);
34
72
  /**
35
73
  * Verifies that newly selected device id exists among the registered devices.
36
74
  * If the selected device id is not found among existing devices, switches to the default device.
75
+ * The media devices are observed only if a given permission ('camera' resp. 'microphone') is granted in browser.
76
+ * Regardless of current permissions settings, an intent to observe devices will take place in Firefox.
77
+ * This is due to the fact that Firefox does not allow to query for 'camera' and 'microphone' permissions.
78
+ * @param canObserve
37
79
  * @param devices$
38
80
  * @param switchToDefaultDevice
39
81
  * @param selectedDeviceId
40
82
  * @category Device Management
41
83
  */
42
- export const useDeviceFallback = (devices$, switchToDefaultDevice, selectedDeviceId) => {
84
+ export const useDeviceFallback = (canObserve, devices$, switchToDefaultDevice, selectedDeviceId) => {
43
85
  useEffect(() => {
86
+ if (!canObserve)
87
+ return;
44
88
  const validateDeviceId = devices$.pipe().subscribe((devices) => {
45
89
  const deviceFound = devices.find((device) => device.deviceId === selectedDeviceId);
46
90
  if (!deviceFound)
@@ -49,34 +93,49 @@ export const useDeviceFallback = (devices$, switchToDefaultDevice, selectedDevic
49
93
  return () => {
50
94
  validateDeviceId.unsubscribe();
51
95
  };
52
- }, [devices$, selectedDeviceId, switchToDefaultDevice]);
96
+ }, [canObserve, devices$, selectedDeviceId, switchToDefaultDevice]);
53
97
  };
54
98
  /**
55
99
  * Verifies that newly selected video device id exists among the registered devices.
56
100
  * If the selected device id is not found among existing devices, switches to the default video device.
101
+ * The media devices are observed only if 'camera' permission is granted in browser.
102
+ * It is integrators responsibility to instruct users how to enable required permissions.
103
+ * Regardless of current permissions settings, an intent to observe devices will take place in Firefox.
104
+ * This is due to the fact that Firefox does not allow to query for 'camera' and 'microphone' permissions.
57
105
  * @param switchToDefaultDevice
106
+ * @param canObserve
58
107
  * @param selectedDeviceId
59
108
  * @category Device Management
60
109
  */
61
- export const useVideoDeviceFallback = (switchToDefaultDevice, selectedDeviceId) => useDeviceFallback(getVideoDevices(), switchToDefaultDevice, selectedDeviceId);
110
+ export const useVideoDeviceFallback = (switchToDefaultDevice, canObserve, selectedDeviceId) => useDeviceFallback(canObserve, getVideoDevices(), switchToDefaultDevice, selectedDeviceId);
62
111
  /**
63
112
  * Verifies that newly selected audio input device id exists among the registered devices.
64
113
  * If the selected device id is not found among existing devices, switches to the default audio input device.
114
+ * The media devices are observed only if 'microphone' permission is granted in browser.
115
+ * It is integrators responsibility to instruct users how to enable required permissions.
116
+ * Regardless of current permissions settings, an intent to observe devices will take place in Firefox.
117
+ * This is due to the fact that Firefox does not allow to query for 'camera' and 'microphone' permissions.
65
118
  * @param switchToDefaultDevice
119
+ * @param canObserve
66
120
  * @param selectedDeviceId
67
121
  * @category Device Management
68
122
  */
69
- export const useAudioInputDeviceFallback = (switchToDefaultDevice, selectedDeviceId) => useDeviceFallback(getAudioDevices(), switchToDefaultDevice, selectedDeviceId);
123
+ export const useAudioInputDeviceFallback = (switchToDefaultDevice, canObserve, selectedDeviceId) => useDeviceFallback(canObserve, getAudioDevices(), switchToDefaultDevice, selectedDeviceId);
70
124
  /**
71
125
  * Verifies that newly selected audio output device id exists among the registered devices.
72
126
  * If the selected device id is not found among existing devices, switches to the default audio output device.
127
+ * The media devices are observed only if 'microphone' permission is granted in browser.
128
+ * It is integrators responsibility to instruct users how to enable required permissions.
129
+ * Regardless of current permissions settings, an intent to observe devices will take place in Firefox.
130
+ * This is due to the fact that Firefox does not allow to query for 'camera' and 'microphone' permissions.
73
131
  * @param switchToDefaultDevice
132
+ * @param canObserve
74
133
  * @param selectedDeviceId
75
134
  * @category Device Management
76
135
  */
77
- export const useAudioOutputDeviceFallback = (switchToDefaultDevice, selectedDeviceId) => useDeviceFallback(getAudioOutputDevices(), switchToDefaultDevice, selectedDeviceId);
136
+ export const useAudioOutputDeviceFallback = (switchToDefaultDevice, canObserve, selectedDeviceId) => useDeviceFallback(canObserve, getAudioOutputDevices(), switchToDefaultDevice, selectedDeviceId);
78
137
  /**
79
- * Observes devices of certain kind are made unavailable and executes onDisconnect callback
138
+ * Observes devices of certain kind are made unavailable and executes onDisconnect callback.
80
139
  * @param observeDevices
81
140
  * @param onDisconnect
82
141
  * @category Device Management
@@ -93,19 +152,19 @@ export const useOnUnavailableDevices = (observeDevices, onDisconnect) => {
93
152
  }, [observeDevices, onDisconnect]);
94
153
  };
95
154
  /**
96
- * Observes disconnect of all video devices and executes onDisconnect callback
155
+ * Observes disconnect of all video devices and executes onDisconnect callback.
97
156
  * @param onDisconnect
98
157
  * @category Device Management
99
158
  */
100
159
  export const useOnUnavailableVideoDevices = (onDisconnect) => useOnUnavailableDevices(getVideoDevices(), onDisconnect);
101
160
  /**
102
- * Observes disconnect of all audio input devices and executes onDisconnect callback
161
+ * Observes disconnect of all audio input devices and executes onDisconnect callback.
103
162
  * @param onDisconnect
104
163
  * @category Device Management
105
164
  */
106
165
  export const useOnUnavailableAudioInputDevices = (onDisconnect) => useOnUnavailableDevices(getAudioDevices(), onDisconnect);
107
166
  /**
108
- * Observes disconnect of all audio output devices and executes onDisconnect callback
167
+ * Observes disconnect of all audio output devices and executes onDisconnect callback.
109
168
  * @param onDisconnect
110
169
  * @category Device Management
111
170
  */
@@ -1 +1 @@
1
- {"version":3,"file":"useDevices.js","sourceRoot":"","sources":["../../../../src/core/hooks/useDevices.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useDevices.js","sourceRoot":"","sources":["../../../../src/core/hooks/useDevices.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@
2
2
  * @internal
3
3
  */
4
4
  export type VideoPublisherInit = {
5
+ canObserveVideo?: boolean;
5
6
  initialVideoMuted?: boolean;
6
7
  videoDeviceId?: string;
7
8
  };
@@ -9,4 +10,4 @@ export type VideoPublisherInit = {
9
10
  * @internal
10
11
  * @category Device Management
11
12
  */
12
- export declare const useVideoPublisher: ({ initialVideoMuted, videoDeviceId, }: VideoPublisherInit) => () => Promise<void>;
13
+ export declare const useVideoPublisher: ({ canObserveVideo, initialVideoMuted, videoDeviceId, }: VideoPublisherInit) => () => Promise<void>;
@@ -16,7 +16,7 @@ import { useDebugPreferredVideoCodec } from '../../components/Debug/useIsDebugMo
16
16
  * @internal
17
17
  * @category Device Management
18
18
  */
19
- export const useVideoPublisher = ({ initialVideoMuted, videoDeviceId, }) => {
19
+ export const useVideoPublisher = ({ canObserveVideo, initialVideoMuted, videoDeviceId, }) => {
20
20
  const call = useCall();
21
21
  const callState = useCallState();
22
22
  const callingState = useCallCallingState();
@@ -61,7 +61,7 @@ export const useVideoPublisher = ({ initialVideoMuted, videoDeviceId, }) => {
61
61
  }
62
62
  }, [callingState, initialVideoMuted, publishVideoStream]);
63
63
  useEffect(() => {
64
- if (!localParticipant$)
64
+ if (!localParticipant$ || !canObserveVideo)
65
65
  return;
66
66
  const subscription = watchForDisconnectedVideoDevice(localParticipant$.pipe(map((p) => p === null || p === void 0 ? void 0 : p.videoDeviceId))).subscribe(() => __awaiter(void 0, void 0, void 0, function* () {
67
67
  if (!call)
@@ -72,7 +72,7 @@ export const useVideoPublisher = ({ initialVideoMuted, videoDeviceId, }) => {
72
72
  return () => {
73
73
  subscription.unsubscribe();
74
74
  };
75
- }, [localParticipant$, call]);
75
+ }, [canObserveVideo, localParticipant$, call]);
76
76
  useEffect(() => {
77
77
  if (!(participant === null || participant === void 0 ? void 0 : participant.videoStream) || !call || !isPublishingVideo)
78
78
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"useVideoPublisher.js","sourceRoot":"","sources":["../../../../src/core/hooks/useVideoPublisher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useVideoPublisher.js","sourceRoot":"","sources":["../../../../src/core/hooks/useVideoPublisher.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -47,5 +47,5 @@
47
47
  "typedoc": "^0.24.7",
48
48
  "typescript": "^4.9.5"
49
49
  },
50
- "version": "0.0.18"
50
+ "version": "0.0.20"
51
51
  }
@@ -27,6 +27,7 @@ import {
27
27
  useAudioInputDeviceFallback,
28
28
  useAudioOutputDeviceFallback,
29
29
  useAudioPublisher,
30
+ useHasBrowserPermissions,
30
31
  useVideoDeviceFallback,
31
32
  useVideoPublisher,
32
33
  } from '../hooks';
@@ -243,7 +244,10 @@ export const MediaDevicesProvider = ({
243
244
  const callState = useCallState();
244
245
  const metadata = useCallMetadata();
245
246
  const { localParticipant$ } = callState;
246
-
247
+ const canObserveVideo = useHasBrowserPermissions('camera' as PermissionName);
248
+ const canObserveAudio = useHasBrowserPermissions(
249
+ 'microphone' as PermissionName,
250
+ );
247
251
  const [selectedAudioInputDeviceId, selectAudioInputDeviceId] = useState<
248
252
  MediaDevicesContextAPI['selectedAudioInputDeviceId']
249
253
  >(initialAudioInputDeviceId);
@@ -345,14 +349,18 @@ export const MediaDevicesProvider = ({
345
349
 
346
350
  useAudioInputDeviceFallback(
347
351
  () => switchDevice('audioinput', DEFAULT_DEVICE_ID),
352
+ canObserveAudio,
348
353
  selectedAudioInputDeviceId,
349
354
  );
350
355
  useAudioOutputDeviceFallback(
351
356
  () => switchDevice('audiooutput', DEFAULT_DEVICE_ID),
357
+ // audiooutput devices can be enumerated only with microphone permissions
358
+ canObserveAudio,
352
359
  selectedAudioOutputDeviceId,
353
360
  );
354
361
  useVideoDeviceFallback(
355
362
  () => switchDevice('videoinput', DEFAULT_DEVICE_ID),
363
+ canObserveVideo,
356
364
  selectedVideoDeviceId,
357
365
  );
358
366
 
@@ -362,7 +370,9 @@ export const MediaDevicesProvider = ({
362
370
  }, [call, callingState, selectedAudioOutputDeviceId]);
363
371
 
364
372
  useEffect(() => {
365
- if (!localParticipant$) return;
373
+ // audiooutput devices can be enumerated only with microphone permissions
374
+ if (!localParticipant$ || !canObserveAudio) return;
375
+
366
376
  const subscription = watchForDisconnectedAudioOutputDevice(
367
377
  localParticipant$.pipe(map((p) => p?.audioOutputDeviceId)),
368
378
  ).subscribe(async () => {
@@ -371,7 +381,7 @@ export const MediaDevicesProvider = ({
371
381
  return () => {
372
382
  subscription.unsubscribe();
373
383
  };
374
- }, [localParticipant$]);
384
+ }, [canObserveAudio, localParticipant$]);
375
385
 
376
386
  const contextValue: MediaDevicesContextAPI = {
377
387
  disposeOfMediaStream,
@@ -19,6 +19,7 @@ import {
19
19
  * @internal
20
20
  */
21
21
  export type AudioPublisherInit = {
22
+ canObserveAudio?: boolean;
22
23
  initialAudioMuted?: boolean;
23
24
  audioDeviceId?: string;
24
25
  };
@@ -28,6 +29,7 @@ export type AudioPublisherInit = {
28
29
  * @category Device Management
29
30
  */
30
31
  export const useAudioPublisher = ({
32
+ canObserveAudio,
31
33
  initialAudioMuted,
32
34
  audioDeviceId,
33
35
  }: AudioPublisherInit) => {
@@ -65,7 +67,7 @@ export const useAudioPublisher = ({
65
67
  }, [callingState, initialAudioMuted, publishAudioStream]);
66
68
 
67
69
  useEffect(() => {
68
- if (!localParticipant$) return;
70
+ if (!localParticipant$ || !canObserveAudio) return;
69
71
  const subscription = watchForDisconnectedAudioDevice(
70
72
  localParticipant$.pipe(map((p) => p?.audioDeviceId)),
71
73
  ).subscribe(async () => {
@@ -76,7 +78,7 @@ export const useAudioPublisher = ({
76
78
  return () => {
77
79
  subscription.unsubscribe();
78
80
  };
79
- }, [localParticipant$, call]);
81
+ }, [canObserveAudio, localParticipant$, call]);
80
82
 
81
83
  useEffect(() => {
82
84
  if (!participant?.audioStream || !call || !isPublishingAudio) return;
@@ -1,4 +1,4 @@
1
- import { useEffect, useState } from 'react';
1
+ import { ChangeEvent, useEffect, useState } from 'react';
2
2
  import { Observable, pairwise } from 'rxjs';
3
3
  import {
4
4
  getAudioDevices,
@@ -6,6 +6,38 @@ import {
6
6
  getVideoDevices,
7
7
  } from '@stream-io/video-client';
8
8
 
9
+ export const useHasBrowserPermissions = (permissionName: PermissionName) => {
10
+ const [canSubscribe, enableSubscription] = useState(false);
11
+
12
+ useEffect(() => {
13
+ let permissionState: PermissionStatus;
14
+ const handlePermissionChange = (e: Event) => {
15
+ const { state } = (e as unknown as ChangeEvent<PermissionStatus>).target;
16
+ enableSubscription(state === 'granted');
17
+ };
18
+ const checkPermissions = async () => {
19
+ try {
20
+ permissionState = await navigator.permissions.query({
21
+ name: permissionName,
22
+ });
23
+ permissionState.addEventListener('change', handlePermissionChange);
24
+ enableSubscription(permissionState.state === 'granted');
25
+ } catch (e) {
26
+ // permission does not exist - cannot be queried
27
+ // an example would be Firefox - camera, neither microphone perms can be queried
28
+ enableSubscription(true);
29
+ }
30
+ };
31
+ checkPermissions();
32
+
33
+ return () => {
34
+ permissionState?.removeEventListener('change', handlePermissionChange);
35
+ };
36
+ }, [permissionName]);
37
+
38
+ return canSubscribe;
39
+ };
40
+
9
41
  /**
10
42
  * Observes changes in connected devices and maintains an up-to-date array of connected MediaDeviceInfo objects.
11
43
  * @param observeDevices
@@ -48,17 +80,23 @@ export const useAudioOutputDevices = () => useDevices(getAudioOutputDevices);
48
80
  /**
49
81
  * Verifies that newly selected device id exists among the registered devices.
50
82
  * If the selected device id is not found among existing devices, switches to the default device.
83
+ * The media devices are observed only if a given permission ('camera' resp. 'microphone') is granted in browser.
84
+ * Regardless of current permissions settings, an intent to observe devices will take place in Firefox.
85
+ * This is due to the fact that Firefox does not allow to query for 'camera' and 'microphone' permissions.
86
+ * @param canObserve
51
87
  * @param devices$
52
88
  * @param switchToDefaultDevice
53
89
  * @param selectedDeviceId
54
90
  * @category Device Management
55
91
  */
56
92
  export const useDeviceFallback = (
93
+ canObserve: boolean,
57
94
  devices$: Observable<MediaDeviceInfo[]>,
58
95
  switchToDefaultDevice: () => void,
59
96
  selectedDeviceId?: string,
60
97
  ) => {
61
98
  useEffect(() => {
99
+ if (!canObserve) return;
62
100
  const validateDeviceId = devices$.pipe().subscribe((devices) => {
63
101
  const deviceFound = devices.find(
64
102
  (device) => device.deviceId === selectedDeviceId,
@@ -69,54 +107,83 @@ export const useDeviceFallback = (
69
107
  return () => {
70
108
  validateDeviceId.unsubscribe();
71
109
  };
72
- }, [devices$, selectedDeviceId, switchToDefaultDevice]);
110
+ }, [canObserve, devices$, selectedDeviceId, switchToDefaultDevice]);
73
111
  };
74
112
 
75
113
  /**
76
114
  * Verifies that newly selected video device id exists among the registered devices.
77
115
  * If the selected device id is not found among existing devices, switches to the default video device.
116
+ * The media devices are observed only if 'camera' permission is granted in browser.
117
+ * It is integrators responsibility to instruct users how to enable required permissions.
118
+ * Regardless of current permissions settings, an intent to observe devices will take place in Firefox.
119
+ * This is due to the fact that Firefox does not allow to query for 'camera' and 'microphone' permissions.
78
120
  * @param switchToDefaultDevice
121
+ * @param canObserve
79
122
  * @param selectedDeviceId
80
123
  * @category Device Management
81
124
  */
82
125
  export const useVideoDeviceFallback = (
83
126
  switchToDefaultDevice: () => void,
127
+ canObserve: boolean,
84
128
  selectedDeviceId?: string,
85
129
  ) =>
86
- useDeviceFallback(getVideoDevices(), switchToDefaultDevice, selectedDeviceId);
130
+ useDeviceFallback(
131
+ canObserve,
132
+ getVideoDevices(),
133
+ switchToDefaultDevice,
134
+ selectedDeviceId,
135
+ );
87
136
 
88
137
  /**
89
138
  * Verifies that newly selected audio input device id exists among the registered devices.
90
139
  * If the selected device id is not found among existing devices, switches to the default audio input device.
140
+ * The media devices are observed only if 'microphone' permission is granted in browser.
141
+ * It is integrators responsibility to instruct users how to enable required permissions.
142
+ * Regardless of current permissions settings, an intent to observe devices will take place in Firefox.
143
+ * This is due to the fact that Firefox does not allow to query for 'camera' and 'microphone' permissions.
91
144
  * @param switchToDefaultDevice
145
+ * @param canObserve
92
146
  * @param selectedDeviceId
93
147
  * @category Device Management
94
148
  */
95
149
  export const useAudioInputDeviceFallback = (
96
150
  switchToDefaultDevice: () => void,
151
+ canObserve: boolean,
97
152
  selectedDeviceId?: string,
98
153
  ) =>
99
- useDeviceFallback(getAudioDevices(), switchToDefaultDevice, selectedDeviceId);
154
+ useDeviceFallback(
155
+ canObserve,
156
+ getAudioDevices(),
157
+ switchToDefaultDevice,
158
+ selectedDeviceId,
159
+ );
100
160
 
101
161
  /**
102
162
  * Verifies that newly selected audio output device id exists among the registered devices.
103
163
  * If the selected device id is not found among existing devices, switches to the default audio output device.
164
+ * The media devices are observed only if 'microphone' permission is granted in browser.
165
+ * It is integrators responsibility to instruct users how to enable required permissions.
166
+ * Regardless of current permissions settings, an intent to observe devices will take place in Firefox.
167
+ * This is due to the fact that Firefox does not allow to query for 'camera' and 'microphone' permissions.
104
168
  * @param switchToDefaultDevice
169
+ * @param canObserve
105
170
  * @param selectedDeviceId
106
171
  * @category Device Management
107
172
  */
108
173
  export const useAudioOutputDeviceFallback = (
109
174
  switchToDefaultDevice: () => void,
175
+ canObserve: boolean,
110
176
  selectedDeviceId?: string,
111
177
  ) =>
112
178
  useDeviceFallback(
179
+ canObserve,
113
180
  getAudioOutputDevices(),
114
181
  switchToDefaultDevice,
115
182
  selectedDeviceId,
116
183
  );
117
184
 
118
185
  /**
119
- * Observes devices of certain kind are made unavailable and executes onDisconnect callback
186
+ * Observes devices of certain kind are made unavailable and executes onDisconnect callback.
120
187
  * @param observeDevices
121
188
  * @param onDisconnect
122
189
  * @category Device Management
@@ -137,7 +204,7 @@ export const useOnUnavailableDevices = (
137
204
  };
138
205
 
139
206
  /**
140
- * Observes disconnect of all video devices and executes onDisconnect callback
207
+ * Observes disconnect of all video devices and executes onDisconnect callback.
141
208
  * @param onDisconnect
142
209
  * @category Device Management
143
210
  */
@@ -145,7 +212,7 @@ export const useOnUnavailableVideoDevices = (onDisconnect: () => void) =>
145
212
  useOnUnavailableDevices(getVideoDevices(), onDisconnect);
146
213
 
147
214
  /**
148
- * Observes disconnect of all audio input devices and executes onDisconnect callback
215
+ * Observes disconnect of all audio input devices and executes onDisconnect callback.
149
216
  * @param onDisconnect
150
217
  * @category Device Management
151
218
  */
@@ -153,7 +220,7 @@ export const useOnUnavailableAudioInputDevices = (onDisconnect: () => void) =>
153
220
  useOnUnavailableDevices(getAudioDevices(), onDisconnect);
154
221
 
155
222
  /**
156
- * Observes disconnect of all audio output devices and executes onDisconnect callback
223
+ * Observes disconnect of all audio output devices and executes onDisconnect callback.
157
224
  * @param onDisconnect
158
225
  * @category Device Management
159
226
  */
@@ -22,6 +22,7 @@ import { useDebugPreferredVideoCodec } from '../../components/Debug/useIsDebugMo
22
22
  * @internal
23
23
  */
24
24
  export type VideoPublisherInit = {
25
+ canObserveVideo?: boolean;
25
26
  initialVideoMuted?: boolean;
26
27
  videoDeviceId?: string;
27
28
  };
@@ -31,6 +32,7 @@ export type VideoPublisherInit = {
31
32
  * @category Device Management
32
33
  */
33
34
  export const useVideoPublisher = ({
35
+ canObserveVideo,
34
36
  initialVideoMuted,
35
37
  videoDeviceId,
36
38
  }: VideoPublisherInit) => {
@@ -82,7 +84,7 @@ export const useVideoPublisher = ({
82
84
  }, [callingState, initialVideoMuted, publishVideoStream]);
83
85
 
84
86
  useEffect(() => {
85
- if (!localParticipant$) return;
87
+ if (!localParticipant$ || !canObserveVideo) return;
86
88
  const subscription = watchForDisconnectedVideoDevice(
87
89
  localParticipant$.pipe(map((p) => p?.videoDeviceId)),
88
90
  ).subscribe(async () => {
@@ -93,7 +95,7 @@ export const useVideoPublisher = ({
93
95
  return () => {
94
96
  subscription.unsubscribe();
95
97
  };
96
- }, [localParticipant$, call]);
98
+ }, [canObserveVideo, localParticipant$, call]);
97
99
 
98
100
  useEffect(() => {
99
101
  if (!participant?.videoStream || !call || !isPublishingVideo) return;