@fishjam-cloud/react-client 0.5.2 → 0.6.0

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.
Files changed (58) hide show
  1. package/dist/Client.d.ts +68 -69
  2. package/dist/Client.d.ts.map +1 -1
  3. package/dist/Client.js +9 -9
  4. package/dist/DeviceManager.d.ts +2 -1
  5. package/dist/DeviceManager.d.ts.map +1 -1
  6. package/dist/DeviceManager.js +3 -0
  7. package/dist/fishjamProvider.d.ts +12 -0
  8. package/dist/fishjamProvider.d.ts.map +1 -0
  9. package/dist/fishjamProvider.js +30 -0
  10. package/dist/hooks/clientState.d.ts +4 -0
  11. package/dist/hooks/clientState.d.ts.map +1 -0
  12. package/dist/hooks/clientState.js +81 -0
  13. package/dist/hooks/connection.d.ts +6 -0
  14. package/dist/hooks/connection.d.ts.map +1 -0
  15. package/dist/hooks/connection.js +28 -0
  16. package/dist/hooks/devices.d.ts +4 -0
  17. package/dist/hooks/devices.d.ts.map +1 -0
  18. package/dist/hooks/devices.js +9 -0
  19. package/dist/hooks/fishjamContext.d.ts +4 -0
  20. package/dist/hooks/fishjamContext.d.ts.map +1 -0
  21. package/dist/hooks/fishjamContext.js +8 -0
  22. package/dist/hooks/participants.d.ts +6 -0
  23. package/dist/hooks/participants.d.ts.map +1 -0
  24. package/dist/hooks/participants.js +13 -0
  25. package/dist/hooks/public.d.ts +7 -0
  26. package/dist/hooks/public.d.ts.map +1 -0
  27. package/dist/hooks/public.js +6 -0
  28. package/dist/hooks/screenShare.d.ts +3 -0
  29. package/dist/hooks/screenShare.d.ts.map +1 -0
  30. package/dist/{screenShareTrackManager.js → hooks/screenShare.js} +8 -6
  31. package/dist/hooks/setupMedia.d.ts +3 -0
  32. package/dist/hooks/setupMedia.d.ts.map +1 -0
  33. package/dist/hooks/setupMedia.js +200 -0
  34. package/dist/hooks/state.d.ts +6 -0
  35. package/dist/hooks/state.d.ts.map +1 -0
  36. package/dist/hooks/state.js +15 -0
  37. package/dist/index.d.ts +5 -3
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +2 -1
  40. package/dist/state.types.d.ts +18 -18
  41. package/dist/state.types.d.ts.map +1 -1
  42. package/dist/trackManager.d.ts +3 -3
  43. package/dist/trackManager.d.ts.map +1 -1
  44. package/dist/trackManager.js +30 -13
  45. package/dist/types.d.ts +48 -45
  46. package/dist/types.d.ts.map +1 -1
  47. package/dist/utils/track.d.ts +2 -1
  48. package/dist/utils/track.d.ts.map +1 -1
  49. package/package.json +4 -5
  50. package/readme.md +1 -15
  51. package/dist/create.d.ts +0 -10
  52. package/dist/create.d.ts.map +0 -1
  53. package/dist/create.js +0 -201
  54. package/dist/screenShareTrackManager.d.ts +0 -4
  55. package/dist/screenShareTrackManager.d.ts.map +0 -1
  56. package/dist/useSetupMedia.d.ts +0 -3
  57. package/dist/useSetupMedia.d.ts.map +0 -1
  58. package/dist/useSetupMedia.js +0 -206
@@ -1,206 +0,0 @@
1
- import { useEffect, useMemo, useRef } from "react";
2
- export const createUseSetupMediaHook = (useFishjamContext) => {
3
- const isBroadcastedTrackChanged = (client, pending) => client.status === "joined" && !pending && !client.isReconnecting();
4
- const isBroadcastedTrackStopped = (status, stream) => status === "joined" && stream;
5
- return (config) => {
6
- const { state, videoTrackManager, audioTrackManager } = useFishjamContext();
7
- const configRef = useRef(config);
8
- useEffect(() => {
9
- configRef.current = config;
10
- state.client.setDeviceManagerConfig({
11
- storage: config.storage,
12
- });
13
- }, [config, state.client]);
14
- useEffect(() => {
15
- if (!configRef.current.startOnMount)
16
- return;
17
- if (state.client.audioDeviceManager.getStatus() === "uninitialized" ||
18
- state.client.videoDeviceManager.getStatus() === "uninitialized") {
19
- state.client.initializeDevices({
20
- audioTrackConstraints: configRef?.current.microphone.trackConstraints,
21
- videoTrackConstraints: configRef?.current.camera.trackConstraints,
22
- });
23
- }
24
- // eslint-disable-next-line
25
- }, []);
26
- useEffect(() => {
27
- let pending = false;
28
- const broadcastOnCameraStart = async (client) => {
29
- const config = configRef.current.camera;
30
- const onDeviceChange = config.onDeviceChange ?? "replace";
31
- const stream = videoTrackManager.getCurrentTrack()?.stream;
32
- if (isBroadcastedTrackChanged(client, pending)) {
33
- if (!stream && config.broadcastOnDeviceStart) {
34
- pending = true;
35
- await videoTrackManager
36
- .startStreaming(config.defaultTrackMetadata, config.defaultSimulcastConfig, config.defaultMaxBandwidth)
37
- .finally(() => {
38
- pending = false;
39
- });
40
- }
41
- else if (stream && onDeviceChange === "replace") {
42
- pending = true;
43
- await videoTrackManager.refreshStreamedTrack().finally(() => {
44
- pending = false;
45
- });
46
- }
47
- else if (stream && onDeviceChange === "remove") {
48
- pending = true;
49
- await videoTrackManager.stopStreaming().finally(() => {
50
- pending = false;
51
- });
52
- }
53
- }
54
- };
55
- const managerInitialized = async (event, client) => {
56
- if (event.video?.media?.stream) {
57
- await broadcastOnCameraStart(client);
58
- }
59
- };
60
- const devicesReady = async (event, client) => {
61
- if (event.trackType === "video" && event.restarted && event?.media?.stream) {
62
- await broadcastOnCameraStart(client);
63
- }
64
- };
65
- const deviceReady = async (event, client) => {
66
- if (event.trackType === "video") {
67
- await broadcastOnCameraStart(client);
68
- }
69
- };
70
- state.client.on("managerInitialized", managerInitialized);
71
- state.client.on("devicesReady", devicesReady);
72
- state.client.on("deviceReady", deviceReady);
73
- return () => {
74
- state.client.removeListener("managerInitialized", managerInitialized);
75
- state.client.removeListener("devicesReady", devicesReady);
76
- state.client.removeListener("deviceReady", deviceReady);
77
- };
78
- }, [state.client, videoTrackManager]);
79
- useEffect(() => {
80
- const removeOnCameraStopped = async (event, client) => {
81
- const stream = videoTrackManager.getCurrentTrack()?.stream;
82
- const onDeviceStop = configRef.current.camera.onDeviceStop ?? "mute";
83
- if (event.mediaDeviceType === "userMedia" &&
84
- event.trackType === "video" &&
85
- isBroadcastedTrackStopped(client.status, stream)) {
86
- if (onDeviceStop === "mute") {
87
- await videoTrackManager.pauseStreaming();
88
- }
89
- else {
90
- await videoTrackManager.stopStreaming();
91
- }
92
- }
93
- };
94
- state.client.on("deviceStopped", removeOnCameraStopped);
95
- return () => {
96
- state.client.removeListener("deviceStopped", removeOnCameraStopped);
97
- };
98
- }, [state.client, videoTrackManager]);
99
- useEffect(() => {
100
- const broadcastCameraOnConnect = async (_, client) => {
101
- const camera = client.devices.camera;
102
- const stream = camera.stream;
103
- const config = configRef.current.camera;
104
- if (stream && config.broadcastOnConnect) {
105
- await videoTrackManager.startStreaming(config.defaultTrackMetadata, config.defaultSimulcastConfig, config.defaultMaxBandwidth);
106
- }
107
- };
108
- state.client.on("joined", broadcastCameraOnConnect);
109
- return () => {
110
- state.client.removeListener("joined", broadcastCameraOnConnect);
111
- };
112
- }, [state.client, videoTrackManager]);
113
- useEffect(() => {
114
- let pending = false;
115
- const broadcastOnMicrophoneStart = async (client) => {
116
- const stream = audioTrackManager.getCurrentTrack()?.stream;
117
- const config = configRef.current.microphone;
118
- const onDeviceChange = config.onDeviceChange ?? "replace";
119
- if (isBroadcastedTrackChanged(client, pending)) {
120
- if (!stream && config.broadcastOnDeviceStart) {
121
- pending = true;
122
- await audioTrackManager
123
- .startStreaming(config.defaultTrackMetadata, undefined, config.defaultMaxBandwidth)
124
- .finally(() => {
125
- pending = false;
126
- });
127
- }
128
- else if (stream && onDeviceChange === "replace") {
129
- pending = true;
130
- await audioTrackManager.refreshStreamedTrack().finally(() => {
131
- pending = false;
132
- });
133
- }
134
- else if (stream && onDeviceChange === "remove") {
135
- pending = true;
136
- await audioTrackManager.stopStreaming().finally(() => {
137
- pending = false;
138
- });
139
- }
140
- }
141
- };
142
- const managerInitialized = async (event, client) => {
143
- if (event.audio?.media?.stream) {
144
- await broadcastOnMicrophoneStart(client);
145
- }
146
- };
147
- const devicesReady = async (event, client) => {
148
- if (event.trackType === "audio" && event.restarted && event?.media?.stream) {
149
- await broadcastOnMicrophoneStart(client);
150
- }
151
- };
152
- const deviceReady = async (event, client) => {
153
- if (event.trackType === "audio") {
154
- await broadcastOnMicrophoneStart(client);
155
- }
156
- };
157
- state.client.on("managerInitialized", managerInitialized);
158
- state.client.on("deviceReady", deviceReady);
159
- state.client.on("devicesReady", devicesReady);
160
- return () => {
161
- state.client.removeListener("managerInitialized", managerInitialized);
162
- state.client.removeListener("deviceReady", deviceReady);
163
- state.client.removeListener("devicesReady", devicesReady);
164
- };
165
- }, [state.client, audioTrackManager]);
166
- useEffect(() => {
167
- const onMicrophoneStopped = async (event, client) => {
168
- const stream = audioTrackManager.getCurrentTrack()?.stream;
169
- const onDeviceStop = configRef.current.microphone.onDeviceStop ?? "mute";
170
- const isRightDeviceType = event.mediaDeviceType === "userMedia";
171
- const isRightTrackType = event.trackType === "audio";
172
- if (isRightDeviceType && isRightTrackType && isBroadcastedTrackStopped(client.status, stream)) {
173
- if (onDeviceStop === "mute") {
174
- await audioTrackManager.pauseStreaming();
175
- }
176
- else {
177
- await audioTrackManager.stopStreaming();
178
- }
179
- }
180
- };
181
- state.client.on("deviceStopped", onMicrophoneStopped);
182
- return () => {
183
- state.client.removeListener("deviceStopped", onMicrophoneStopped);
184
- };
185
- }, [state.client, audioTrackManager]);
186
- useEffect(() => {
187
- const broadcastMicrophoneOnConnect = async (_, client) => {
188
- const config = configRef.current.microphone;
189
- const microphone = client.devices.microphone;
190
- if (microphone.stream && config.broadcastOnConnect) {
191
- await audioTrackManager.startStreaming(config.defaultTrackMetadata, undefined, config.defaultMaxBandwidth);
192
- }
193
- };
194
- state.client.on("joined", broadcastMicrophoneOnConnect);
195
- return () => {
196
- state.client.removeListener("joined", broadcastMicrophoneOnConnect);
197
- };
198
- }, [state.client, audioTrackManager]);
199
- return useMemo(() => ({
200
- init: () => state.client.initializeDevices({
201
- audioTrackConstraints: configRef.current?.microphone?.trackConstraints,
202
- videoTrackConstraints: configRef.current?.camera?.trackConstraints,
203
- }),
204
- }), [state.client]);
205
- };
206
- };