@fishjam-cloud/react-client 0.10.2 → 0.12.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 (74) hide show
  1. package/LICENSE.txt +201 -0
  2. package/dist/FishjamProvider.d.ts +42 -0
  3. package/dist/FishjamProvider.d.ts.map +1 -0
  4. package/dist/{fishjamProvider.js → FishjamProvider.js} +16 -15
  5. package/dist/devices/DeviceManager.d.ts +2 -2
  6. package/dist/devices/DeviceManager.d.ts.map +1 -1
  7. package/dist/devices/DeviceManager.js +5 -5
  8. package/dist/devices/mediaInitializer.d.ts +1 -1
  9. package/dist/devices/mediaInitializer.d.ts.map +1 -1
  10. package/dist/devices/mediaInitializer.js +1 -1
  11. package/dist/hooks/devices/useCamera.d.ts +39 -3
  12. package/dist/hooks/devices/useCamera.d.ts.map +1 -1
  13. package/dist/hooks/devices/useCamera.js +41 -3
  14. package/dist/hooks/devices/useInitializeDevices.d.ts +9 -2
  15. package/dist/hooks/devices/useInitializeDevices.d.ts.map +1 -1
  16. package/dist/hooks/devices/useInitializeDevices.js +12 -7
  17. package/dist/hooks/devices/useMicrophone.d.ts +40 -3
  18. package/dist/hooks/devices/useMicrophone.d.ts.map +1 -1
  19. package/dist/hooks/devices/useMicrophone.js +42 -3
  20. package/dist/hooks/internal/device/useDeviceApi.d.ts +2 -4
  21. package/dist/hooks/internal/device/useDeviceApi.d.ts.map +1 -1
  22. package/dist/hooks/internal/device/useDeviceApi.js +16 -22
  23. package/dist/hooks/internal/device/useDeviceManager.d.ts +1 -1
  24. package/dist/hooks/internal/device/useDeviceManager.d.ts.map +1 -1
  25. package/dist/hooks/internal/device/useDeviceManager.js +2 -2
  26. package/dist/hooks/internal/useFishjamClientState.d.ts +5 -4
  27. package/dist/hooks/internal/useFishjamClientState.d.ts.map +1 -1
  28. package/dist/hooks/internal/useFishjamClientState.js +2 -2
  29. package/dist/hooks/internal/useFishjamClient_DO_NOT_USE.d.ts.map +1 -1
  30. package/dist/hooks/internal/useFishjamClient_DO_NOT_USE.js +1 -1
  31. package/dist/hooks/internal/useFishjamContext.d.ts +4 -3
  32. package/dist/hooks/internal/useFishjamContext.d.ts.map +1 -1
  33. package/dist/hooks/internal/usePeerStatus.d.ts.map +1 -1
  34. package/dist/hooks/internal/usePeerStatus.js +2 -0
  35. package/dist/hooks/internal/useReconnection.d.ts.map +1 -1
  36. package/dist/hooks/internal/useScreenshareManager.d.ts +46 -0
  37. package/dist/hooks/internal/useScreenshareManager.d.ts.map +1 -0
  38. package/dist/hooks/internal/useScreenshareManager.js +114 -0
  39. package/dist/hooks/internal/useTrackManager.d.ts +3 -3
  40. package/dist/hooks/internal/useTrackManager.d.ts.map +1 -1
  41. package/dist/hooks/internal/useTrackManager.js +13 -36
  42. package/dist/hooks/useConnection.d.ts +20 -7
  43. package/dist/hooks/useConnection.d.ts.map +1 -1
  44. package/dist/hooks/useConnection.js +20 -2
  45. package/dist/hooks/usePeers.d.ts +26 -17
  46. package/dist/hooks/usePeers.d.ts.map +1 -1
  47. package/dist/hooks/usePeers.js +22 -6
  48. package/dist/hooks/useScreenShare.d.ts +40 -11
  49. package/dist/hooks/useScreenShare.d.ts.map +1 -1
  50. package/dist/hooks/useScreenShare.js +37 -122
  51. package/dist/hooks/useUpdatePeerMetadata.d.ts +9 -0
  52. package/dist/hooks/useUpdatePeerMetadata.d.ts.map +1 -1
  53. package/dist/hooks/useUpdatePeerMetadata.js +12 -1
  54. package/dist/hooks/useVAD.d.ts +21 -2
  55. package/dist/hooks/useVAD.d.ts.map +1 -1
  56. package/dist/hooks/useVAD.js +22 -5
  57. package/dist/index.d.ts +6 -8
  58. package/dist/index.d.ts.map +1 -1
  59. package/dist/index.js +4 -4
  60. package/dist/types/internal.d.ts +6 -33
  61. package/dist/types/internal.d.ts.map +1 -1
  62. package/dist/types/public.d.ts +33 -31
  63. package/dist/types/public.d.ts.map +1 -1
  64. package/dist/utils/bandwidth.d.ts.map +1 -1
  65. package/dist/utils/errors.d.ts +1 -1
  66. package/dist/utils/errors.d.ts.map +1 -1
  67. package/dist/utils/localStorage.d.ts +1 -1
  68. package/dist/utils/localStorage.d.ts.map +1 -1
  69. package/dist/utils/track.d.ts.map +1 -1
  70. package/dist/utils/track.js +0 -1
  71. package/package.json +11 -11
  72. package/readme.md +8 -8
  73. package/dist/fishjamProvider.d.ts +0 -17
  74. package/dist/fishjamProvider.d.ts.map +0 -1
@@ -1,10 +1,49 @@
1
- import { useFishjamContext } from "../internal/useFishjamContext";
2
1
  import { useDeviceApi } from "../internal/device/useDeviceApi";
2
+ import { useFishjamContext } from "../internal/useFishjamContext";
3
3
  /**
4
- *
4
+ * Manage microphone
5
5
  * @category Devices
6
6
  */
7
7
  export function useMicrophone() {
8
8
  const { audioTrackManager, audioDeviceManagerRef } = useFishjamContext();
9
- return useDeviceApi({ trackManager: audioTrackManager, deviceManager: audioDeviceManagerRef.current });
9
+ const deviceApi = useDeviceApi({ deviceManager: audioDeviceManagerRef.current });
10
+ return {
11
+ /** Toggles current microphone on/off */
12
+ toggleMicrophone: audioTrackManager.toggleDevice,
13
+ /** Mutes/unmutes the microphone */
14
+ toggleMicrophoneMute: audioTrackManager.toggleMute,
15
+ /** Selects the microphone device */
16
+ selectMicrophone: audioTrackManager.selectDevice,
17
+ /**
18
+ * Indicates which microphone is now turned on and streaming audio
19
+ */
20
+ activeMicrophone: deviceApi.activeDevice,
21
+ /**
22
+ * Indicates whether the microphone is streaming audio
23
+ */
24
+ isMicrophoneOn: !!deviceApi.mediaStream,
25
+ /**
26
+ * Indicates whether the microphone is muted
27
+ */ isMicrophoneMuted: audioTrackManager.paused,
28
+ /**
29
+ * The MediaStream object containing the current audio stream
30
+ */
31
+ microphoneStream: deviceApi.mediaStream,
32
+ /**
33
+ * The currently set microphone middleware function
34
+ */
35
+ currentMicrophoneMiddleware: deviceApi.currentMiddleware,
36
+ /**
37
+ * Sets the microphone middleware
38
+ */
39
+ setMicrophoneTrackMiddleware: audioTrackManager.setTrackMiddleware,
40
+ /**
41
+ * List of available microphone devices
42
+ */
43
+ microphoneDevices: deviceApi.devices,
44
+ /**
45
+ * Possible error thrown while setting up the microphone
46
+ */
47
+ microphoneDeviceError: deviceApi.deviceError,
48
+ };
10
49
  }
@@ -1,10 +1,8 @@
1
- import type { TrackManager } from "../../../types/internal";
2
- import type { Device } from "../../../types/public";
3
1
  import type { DeviceManager } from "../../../devices/DeviceManager";
2
+ import type { Device } from "../../../types/public";
4
3
  type DeviceApiDependencies = {
5
- trackManager: TrackManager;
6
4
  deviceManager: DeviceManager;
7
5
  };
8
- export declare const useDeviceApi: ({ trackManager, deviceManager }: DeviceApiDependencies) => Device;
6
+ export declare const useDeviceApi: ({ deviceManager }: DeviceApiDependencies) => Device;
9
7
  export {};
10
8
  //# sourceMappingURL=useDeviceApi.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useDeviceApi.d.ts","sourceRoot":"","sources":["../../../../src/hooks/internal/device/useDeviceApi.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAGpE,KAAK,qBAAqB,GAAG;IAC3B,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa,EAAE,aAAa,CAAC;CAC9B,CAAC;AAEF,eAAO,MAAM,YAAY,oCAAqC,qBAAqB,KAAG,MAkCrF,CAAC"}
1
+ {"version":3,"file":"useDeviceApi.d.ts","sourceRoot":"","sources":["../../../../src/hooks/internal/device/useDeviceApi.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,KAAK,EAAE,MAAM,EAAc,MAAM,uBAAuB,CAAC;AAGhE,KAAK,qBAAqB,GAAG;IAC3B,aAAa,EAAE,aAAa,CAAC;CAC9B,CAAC;AAEF,eAAO,MAAM,YAAY,sBAAuB,qBAAqB,KAAG,MA+BvE,CAAC"}
@@ -1,34 +1,28 @@
1
1
  import { useMemo } from "react";
2
2
  import { useDeviceManager } from "./useDeviceManager";
3
- export const useDeviceApi = ({ trackManager, deviceManager }) => {
4
- const { deviceState, status, type } = useDeviceManager(deviceManager);
5
- const { currentTrack } = trackManager;
6
- const stream = useMemo(() => deviceState.media?.stream ?? null, [deviceState.media?.stream]);
3
+ export const useDeviceApi = ({ deviceManager }) => {
4
+ const { deviceState, deviceType, deviceStatus } = useDeviceManager(deviceManager);
5
+ const mediaStream = useMemo(() => deviceState.media?.stream ?? null, [deviceState.media?.stream]);
7
6
  const currentMiddleware = deviceState.currentMiddleware ?? null;
8
- const isStreaming = Boolean(currentTrack?.stream && !trackManager.paused);
9
- const track = useMemo(() => {
10
- if (type === "video")
11
- return stream?.getVideoTracks()[0] ?? null;
12
- return stream?.getAudioTracks()[0] ?? null;
13
- }, [stream, type]);
14
- const trackId = currentTrack?.trackId ?? null;
15
- const devices = useMemo(() => deviceState.devices ?? [], [deviceState.devices]);
16
- const activeDevice = deviceState.media?.deviceInfo ?? null;
7
+ const mediaStreamTrack = useMemo(() => {
8
+ if (deviceType === "video")
9
+ return mediaStream?.getVideoTracks()[0] ?? null;
10
+ return mediaStream?.getAudioTracks()[0] ?? null;
11
+ }, [mediaStream, deviceType]);
12
+ const devices = useMemo(() => deviceState.devices?.map(({ deviceId, label }) => ({ deviceId, label })) ?? [], [deviceState.devices]);
13
+ const activeDevice = deviceState.media?.deviceInfo
14
+ ? { deviceId: deviceState.media.deviceInfo.deviceId, label: deviceState.media.deviceInfo.label }
15
+ : null;
17
16
  const isMuted = !deviceState.media?.enabled;
18
17
  const deviceError = deviceState.error ?? null;
19
- const isDeviceEnabled = Boolean(deviceState.media);
20
18
  return {
21
- ...trackManager,
19
+ mediaStream,
22
20
  currentMiddleware,
23
- status,
24
- stream,
21
+ deviceStatus,
25
22
  devices,
23
+ deviceError,
26
24
  activeDevice,
27
- isStreaming,
28
- track,
29
- trackId,
30
25
  isMuted,
31
- deviceError,
32
- isDeviceEnabled,
26
+ mediaStreamTrack,
33
27
  };
34
28
  };
@@ -1,4 +1,4 @@
1
- import type { DeviceManagerState } from "../../../types/internal";
2
1
  import type { DeviceManager } from "../../../devices/DeviceManager";
2
+ import type { DeviceManagerState } from "../../../types/internal";
3
3
  export declare const useDeviceManager: (deviceManager: DeviceManager) => DeviceManagerState;
4
4
  //# sourceMappingURL=useDeviceManager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useDeviceManager.d.ts","sourceRoot":"","sources":["../../../../src/hooks/internal/device/useDeviceManager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAuB,MAAM,gCAAgC,CAAC;AAezF,eAAO,MAAM,gBAAgB,kBAAmB,aAAa,uBAoC5D,CAAC"}
1
+ {"version":3,"file":"useDeviceManager.d.ts","sourceRoot":"","sources":["../../../../src/hooks/internal/device/useDeviceManager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAuB,MAAM,gCAAgC,CAAC;AACzF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAelE,eAAO,MAAM,gBAAgB,kBAAmB,aAAa,uBAoC5D,CAAC"}
@@ -28,8 +28,8 @@ export const useDeviceManager = (deviceManager) => {
28
28
  if (mutationRef.current || lastSnapshotRef.current === null) {
29
29
  lastSnapshotRef.current = {
30
30
  deviceState: deviceManager.getState(),
31
- status: deviceManager.getStatus(),
32
- type: deviceManager.getDeviceType(),
31
+ deviceStatus: deviceManager.getStatus(),
32
+ deviceType: deviceManager.getDeviceType(),
33
33
  };
34
34
  mutationRef.current = false;
35
35
  }
@@ -1,9 +1,10 @@
1
- import type { Component, Peer, FishjamClient, GenericMetadata } from "@fishjam-cloud/ts-client";
2
- import type { PeerId } from "../../types/internal";
1
+ import type { Component, FishjamClient, GenericMetadata } from "@fishjam-cloud/ts-client";
2
+ import type { BrandedPeer } from "../../types/internal";
3
+ import type { PeerId } from "../../types/public";
3
4
  export interface FishjamClientState<P = GenericMetadata, S = GenericMetadata> {
4
- peers: Record<PeerId, Peer<P, S>>;
5
+ peers: Record<PeerId, BrandedPeer<P, S>>;
5
6
  components: Record<string, Component>;
6
- localPeer: Peer<P, S> | null;
7
+ localPeer: BrandedPeer<P, S> | null;
7
8
  isReconnecting: boolean;
8
9
  }
9
10
  export declare function useFishjamClientState<P, S>(fishjamClient: FishjamClient<P, S>): FishjamClientState<P, S>;
@@ -1 +1 @@
1
- {"version":3,"file":"useFishjamClientState.d.ts","sourceRoot":"","sources":["../../../src/hooks/internal/useFishjamClientState.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAiB,IAAI,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC/G,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AA0CnD,MAAM,WAAW,kBAAkB,CAAC,CAAC,GAAG,eAAe,EAAE,CAAC,GAAG,eAAe;IAC1E,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACtC,SAAS,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;IAC7B,cAAc,EAAE,OAAO,CAAC;CACzB;AAMD,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,CAwCxG"}
1
+ {"version":3,"file":"useFishjamClientState.d.ts","sourceRoot":"","sources":["../../../src/hooks/internal/useFishjamClientState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,EAAiB,MAAM,0BAA0B,CAAC;AAGzG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AA0CjD,MAAM,WAAW,kBAAkB,CAAC,CAAC,GAAG,eAAe,EAAE,CAAC,GAAG,eAAe;IAC1E,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACzC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACtC,SAAS,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;IACpC,cAAc,EAAE,OAAO,CAAC;CACzB;AAMD,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,CAwCxG"}
@@ -63,9 +63,9 @@ export function useFishjamClientState(fishjamClient) {
63
63
  const localPeer = client.getLocalPeer();
64
64
  const isReconnecting = client.isReconnecting();
65
65
  lastSnapshotRef.current = {
66
- peers,
66
+ peers: peers,
67
67
  components,
68
- localPeer,
68
+ localPeer: localPeer,
69
69
  isReconnecting,
70
70
  };
71
71
  mutationRef.current = false;
@@ -1 +1 @@
1
- {"version":3,"file":"useFishjamClient_DO_NOT_USE.d.ts","sourceRoot":"","sources":["../../../src/hooks/internal/useFishjamClient_DO_NOT_USE.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,wBAAgB,2BAA2B,6JAI1C"}
1
+ {"version":3,"file":"useFishjamClient_DO_NOT_USE.d.ts","sourceRoot":"","sources":["../../../src/hooks/internal/useFishjamClient_DO_NOT_USE.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,wBAAgB,2BAA2B,6JAI1C"}
@@ -1,5 +1,5 @@
1
- import { useFishjamContext } from "./useFishjamContext";
2
1
  import { useMemo } from "react";
2
+ import { useFishjamContext } from "./useFishjamContext";
3
3
  /**
4
4
  *
5
5
  * @category Connection
@@ -1,15 +1,16 @@
1
1
  import type { FishjamClient } from "@fishjam-cloud/ts-client";
2
2
  import { type MutableRefObject } from "react";
3
- import type { TrackManager } from "../../types/internal";
4
3
  import type { DeviceManager } from "../../devices/DeviceManager";
4
+ import type { TrackManager } from "../../types/internal";
5
+ import type { BandwidthLimits, PeerStatus } from "../../types/public";
5
6
  import type { FishjamClientState } from "./useFishjamClientState";
6
- import type { BandwidthLimits, PeerStatus, ScreenshareApi } from "../../types/public";
7
+ import type { UseScreenshareResult } from "./useScreenshareManager";
7
8
  export type FishjamContextType = {
8
9
  fishjamClientRef: MutableRefObject<FishjamClient>;
9
10
  videoDeviceManagerRef: MutableRefObject<DeviceManager>;
10
11
  audioDeviceManagerRef: MutableRefObject<DeviceManager>;
11
12
  hasDevicesBeenInitializedRef: MutableRefObject<boolean>;
12
- screenShareManager: ScreenshareApi;
13
+ screenShareManager: UseScreenshareResult;
13
14
  peerStatus: PeerStatus;
14
15
  videoTrackManager: TrackManager;
15
16
  audioTrackManager: TrackManager;
@@ -1 +1 @@
1
- {"version":3,"file":"useFishjamContext.d.ts","sourceRoot":"","sources":["../../../src/hooks/internal/useFishjamContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAiB,KAAK,gBAAgB,EAAc,MAAM,OAAO,CAAC;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEtF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,gBAAgB,EAAE,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAClD,qBAAqB,EAAE,gBAAgB,CAAC,aAAa,CAAC,CAAC;IACvD,qBAAqB,EAAE,gBAAgB,CAAC,aAAa,CAAC,CAAC;IACvD,4BAA4B,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACxD,kBAAkB,EAAE,cAAc,CAAC;IACnC,UAAU,EAAE,UAAU,CAAC;IACvB,iBAAiB,EAAE,YAAY,CAAC;IAChC,iBAAiB,EAAE,YAAY,CAAC;IAChC,WAAW,EAAE,kBAAkB,CAAC;IAChC,eAAe,EAAE,eAAe,CAAC;CAClC,CAAC;AAEF,eAAO,MAAM,cAAc,oDAAiD,CAAC;AAE7E,wBAAgB,iBAAiB,IAGb,kBAAkB,CACrC"}
1
+ {"version":3,"file":"useFishjamContext.d.ts","sourceRoot":"","sources":["../../../src/hooks/internal/useFishjamContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAiB,KAAK,gBAAgB,EAAc,MAAM,OAAO,CAAC;AAEzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAEpE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,gBAAgB,EAAE,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAClD,qBAAqB,EAAE,gBAAgB,CAAC,aAAa,CAAC,CAAC;IACvD,qBAAqB,EAAE,gBAAgB,CAAC,aAAa,CAAC,CAAC;IACvD,4BAA4B,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACxD,kBAAkB,EAAE,oBAAoB,CAAC;IACzC,UAAU,EAAE,UAAU,CAAC;IACvB,iBAAiB,EAAE,YAAY,CAAC;IAChC,iBAAiB,EAAE,YAAY,CAAC;IAChC,WAAW,EAAE,kBAAkB,CAAC;IAChC,eAAe,EAAE,eAAe,CAAC;CAClC,CAAC;AAEF,eAAO,MAAM,cAAc,oDAAiD,CAAC;AAE7E,wBAAgB,iBAAiB,IAGb,kBAAkB,CACrC"}
@@ -1 +1 @@
1
- {"version":3,"file":"usePeerStatus.d.ts","sourceRoot":"","sources":["../../../src/hooks/internal/usePeerStatus.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,eAAO,MAAM,aAAa,WAAY,aAAa;;;CA8ClD,CAAC"}
1
+ {"version":3,"file":"usePeerStatus.d.ts","sourceRoot":"","sources":["../../../src/hooks/internal/usePeerStatus.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAG9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,eAAO,MAAM,aAAa,WAAY,aAAa;;;CAgDlD,CAAC"}
@@ -21,6 +21,7 @@ export const usePeerStatus = (client) => {
21
21
  setPeerStatus("idle");
22
22
  };
23
23
  client.on("connectionStarted", setConnecting);
24
+ client.on("reconnected", setJoined);
24
25
  client.on("joined", setJoined);
25
26
  client.on("authError", setError);
26
27
  client.on("joinError", setError);
@@ -28,6 +29,7 @@ export const usePeerStatus = (client) => {
28
29
  client.on("disconnected", setDisconnected);
29
30
  return () => {
30
31
  client.off("connectionStarted", setConnecting);
32
+ client.off("reconnected", setJoined);
31
33
  client.off("joined", setJoined);
32
34
  client.off("authError", setError);
33
35
  client.off("joinError", setError);
@@ -1 +1 @@
1
- {"version":3,"file":"useReconnection.d.ts","sourceRoot":"","sources":["../../../src/hooks/internal/useReconnection.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEnE;;;GAGG;AACH,eAAO,MAAM,eAAe,QAAO,kBA6BlC,CAAC"}
1
+ {"version":3,"file":"useReconnection.d.ts","sourceRoot":"","sources":["../../../src/hooks/internal/useReconnection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAKnE;;;GAGG;AACH,eAAO,MAAM,eAAe,QAAO,kBA6BlC,CAAC"}
@@ -0,0 +1,46 @@
1
+ import type { FishjamClient } from "@fishjam-cloud/ts-client";
2
+ import type { PeerStatus, TracksMiddleware } from "../../types/public";
3
+ export type UseScreenshareResult = {
4
+ /**
5
+ * Invokes the screen sharing prompt in the user's browser and starts streaming upon approval.
6
+ */
7
+ startStreaming: (props?: {
8
+ audioConstraints?: boolean | MediaTrackConstraints;
9
+ videoConstraints?: boolean | MediaTrackConstraints;
10
+ }) => Promise<void>;
11
+ /**
12
+ * Stops the stream and cancels browser screen sharing.
13
+ */
14
+ stopStreaming: () => Promise<void>;
15
+ /**
16
+ * The MediaStream object containing both tracks.
17
+ */
18
+ stream: MediaStream | null;
19
+ /**
20
+ * The separate video MediaStreamTrack.
21
+ */
22
+ videoTrack: MediaStreamTrack | null;
23
+ /**
24
+ * The separate audio MediaStreamTrack.
25
+ */
26
+ audioTrack: MediaStreamTrack | null;
27
+ /**
28
+ * The middleware currently assigned to process the tracks.
29
+ * A screenshare may include both audio and video tracks, and this middleware is capable of processing
30
+ * each track type.
31
+ */
32
+ currentTracksMiddleware: TracksMiddleware | null;
33
+ /**
34
+ * Sets the middleware responsible for processing the tracks.
35
+ * @param middleware The middleware to set, which can be a TracksMiddleware instance or null to remove the middleware.
36
+ * @returns A Promise that resolves once the middleware is successfully set.
37
+ */
38
+ setTracksMiddleware: (middleware: TracksMiddleware | null) => Promise<void>;
39
+ };
40
+ interface ScreenShareManagerProps {
41
+ fishjamClient: FishjamClient;
42
+ getCurrentPeerStatus: () => PeerStatus;
43
+ }
44
+ export declare const useScreenShareManager: ({ fishjamClient, getCurrentPeerStatus, }: ScreenShareManagerProps) => UseScreenshareResult;
45
+ export {};
46
+ //# sourceMappingURL=useScreenshareManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useScreenshareManager.d.ts","sourceRoot":"","sources":["../../../src/hooks/internal/useScreenshareManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAI9D,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEvE,MAAM,MAAM,oBAAoB,GAAG;IACjC;;OAEG;IACH,cAAc,EAAE,CAAC,KAAK,CAAC,EAAE;QACvB,gBAAgB,CAAC,EAAE,OAAO,GAAG,qBAAqB,CAAC;QACnD,gBAAgB,CAAC,EAAE,OAAO,GAAG,qBAAqB,CAAC;KACpD,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpB;;OAEG;IACH,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC;;OAEG;IACH,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3B;;OAEG;IACH,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACpC;;OAEG;IACH,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACpC;;;;OAIG;IACH,uBAAuB,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACjD;;;;OAIG;IACH,mBAAmB,EAAE,CAAC,UAAU,EAAE,gBAAgB,GAAG,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7E,CAAC;AAEF,UAAU,uBAAuB;IAC/B,aAAa,EAAE,aAAa,CAAC;IAC7B,oBAAoB,EAAE,MAAM,UAAU,CAAC;CACxC;AAED,eAAO,MAAM,qBAAqB,6CAG/B,uBAAuB,KAAG,oBAmI5B,CAAC"}
@@ -0,0 +1,114 @@
1
+ import { useCallback, useEffect, useRef, useState } from "react";
2
+ export const useScreenShareManager = ({ fishjamClient, getCurrentPeerStatus, }) => {
3
+ const [state, setState] = useState({ stream: null, trackIds: null });
4
+ const cleanMiddlewareFnRef = useRef(null);
5
+ const stream = state.stream ?? null;
6
+ const [mediaVideoTrack, mediaAudioTrack] = stream ? getTracksFromStream(stream) : [null, null];
7
+ const getDisplayName = () => {
8
+ const name = fishjamClient.getLocalPeer()?.metadata?.peer?.displayName;
9
+ if (typeof name === "string")
10
+ return name;
11
+ };
12
+ const startStreaming = async (props) => {
13
+ const displayStream = await navigator.mediaDevices.getDisplayMedia({
14
+ video: props?.videoConstraints ?? true,
15
+ audio: props?.audioConstraints ?? true,
16
+ });
17
+ const displayName = getDisplayName();
18
+ let [video, audio] = getTracksFromStream(displayStream);
19
+ if (state.tracksMiddleware) {
20
+ const { videoTrack, audioTrack, onClear } = state.tracksMiddleware(video, audio);
21
+ video = videoTrack;
22
+ audio = audioTrack;
23
+ cleanMiddlewareFnRef.current = onClear;
24
+ }
25
+ const addTrackPromises = [fishjamClient.addTrack(video, { displayName, type: "screenShareVideo", paused: false })];
26
+ if (audio)
27
+ addTrackPromises.push(fishjamClient.addTrack(audio, { displayName, type: "screenShareAudio", paused: false }));
28
+ const [videoId, audioId] = await Promise.all(addTrackPromises);
29
+ setState({ stream: displayStream, trackIds: { videoId, audioId } });
30
+ };
31
+ const replaceTracks = async (newVideoTrack, newAudioTrack) => {
32
+ if (!state?.stream)
33
+ return;
34
+ const addTrackPromises = [fishjamClient.replaceTrack(state.trackIds.videoId, newVideoTrack)];
35
+ if (newAudioTrack && state.trackIds.audioId) {
36
+ addTrackPromises.push(fishjamClient.replaceTrack(state.trackIds.audioId, newAudioTrack));
37
+ }
38
+ await Promise.all(addTrackPromises);
39
+ };
40
+ const cleanMiddleware = useCallback(() => {
41
+ cleanMiddlewareFnRef.current?.();
42
+ cleanMiddlewareFnRef.current = null;
43
+ }, []);
44
+ const setTracksMiddleware = async (middleware) => {
45
+ if (!state?.stream)
46
+ return;
47
+ const [video, audio] = getTracksFromStream(state.stream);
48
+ cleanMiddleware();
49
+ const { videoTrack, audioTrack, onClear } = middleware?.(video, audio) ?? {
50
+ videoTrack: video,
51
+ audioTrack: audio,
52
+ onClear: null,
53
+ };
54
+ cleanMiddlewareFnRef.current = onClear;
55
+ await replaceTracks(videoTrack, audioTrack);
56
+ };
57
+ const stopStreaming = useCallback(async () => {
58
+ if (!state.stream) {
59
+ console.warn("No stream to stop");
60
+ return;
61
+ }
62
+ const [video, audio] = getTracksFromStream(state.stream);
63
+ video.stop();
64
+ if (audio)
65
+ audio.stop();
66
+ if (getCurrentPeerStatus() === "connected") {
67
+ const removeTrackPromises = [fishjamClient.removeTrack(state.trackIds.videoId)];
68
+ if (state.trackIds.audioId)
69
+ removeTrackPromises.push(fishjamClient.removeTrack(state.trackIds.audioId));
70
+ await Promise.all(removeTrackPromises);
71
+ }
72
+ cleanMiddleware();
73
+ setState(({ tracksMiddleware }) => ({ stream: null, trackIds: null, tracksMiddleware }));
74
+ }, [state, fishjamClient, setState, cleanMiddleware, getCurrentPeerStatus]);
75
+ useEffect(() => {
76
+ if (!state.stream)
77
+ return;
78
+ const [video, audio] = getTracksFromStream(state.stream);
79
+ const trackEndedHandler = () => {
80
+ stopStreaming();
81
+ };
82
+ video.addEventListener("ended", trackEndedHandler);
83
+ audio?.addEventListener("ended", trackEndedHandler);
84
+ return () => {
85
+ video.removeEventListener("ended", trackEndedHandler);
86
+ audio?.removeEventListener("ended", trackEndedHandler);
87
+ };
88
+ }, [state, stopStreaming]);
89
+ useEffect(() => {
90
+ const onDisconnected = () => {
91
+ if (stream) {
92
+ stopStreaming();
93
+ }
94
+ };
95
+ fishjamClient.on("disconnected", onDisconnected);
96
+ return () => {
97
+ fishjamClient.removeListener("disconnected", onDisconnected);
98
+ };
99
+ }, [stopStreaming, fishjamClient, stream]);
100
+ return {
101
+ startStreaming,
102
+ stopStreaming,
103
+ stream,
104
+ videoTrack: mediaVideoTrack,
105
+ audioTrack: mediaAudioTrack,
106
+ setTracksMiddleware,
107
+ currentTracksMiddleware: state?.tracksMiddleware ?? null,
108
+ };
109
+ };
110
+ const getTracksFromStream = (stream) => {
111
+ const video = stream.getVideoTracks()[0];
112
+ const audio = stream.getAudioTracks()[0] ?? null;
113
+ return [video, audio];
114
+ };
@@ -1,13 +1,13 @@
1
1
  import { type FishjamClient } from "@fishjam-cloud/ts-client";
2
2
  import type { MediaManager, TrackManager } from "../../types/internal";
3
- import type { BandwidthLimits, PeerStatus, StartStreamingProps } from "../../types/public";
3
+ import type { BandwidthLimits, PeerStatus, StreamConfig } from "../../types/public";
4
4
  interface TrackManagerConfig {
5
5
  mediaManager: MediaManager;
6
6
  tsClient: FishjamClient;
7
7
  getCurrentPeerStatus: () => PeerStatus;
8
8
  bandwidthLimits: BandwidthLimits;
9
- autoStreamProps?: StartStreamingProps | false;
9
+ streamConfig?: StreamConfig;
10
10
  }
11
- export declare const useTrackManager: ({ mediaManager, tsClient, getCurrentPeerStatus, bandwidthLimits, autoStreamProps, }: TrackManagerConfig) => TrackManager;
11
+ export declare const useTrackManager: ({ mediaManager, tsClient, getCurrentPeerStatus, bandwidthLimits, streamConfig, }: TrackManagerConfig) => TrackManager;
12
12
  export {};
13
13
  //# sourceMappingURL=useTrackManager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useTrackManager.d.ts","sourceRoot":"","sources":["../../../src/hooks/internal/useTrackManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,aAAa,EAAsB,MAAM,0BAA0B,CAAC;AAC3F,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGvE,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,mBAAmB,EAAmB,MAAM,oBAAoB,CAAC;AAE5G,UAAU,kBAAkB;IAC1B,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,EAAE,aAAa,CAAC;IACxB,oBAAoB,EAAE,MAAM,UAAU,CAAC;IACvC,eAAe,EAAE,eAAe,CAAC;IACjC,eAAe,CAAC,EAAE,mBAAmB,GAAG,KAAK,CAAC;CAC/C;AAWD,eAAO,MAAM,eAAe,wFAMzB,kBAAkB,KAAG,YAgMvB,CAAC"}
1
+ {"version":3,"file":"useTrackManager.d.ts","sourceRoot":"","sources":["../../../src/hooks/internal/useTrackManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAA+B,MAAM,0BAA0B,CAAC;AAG3F,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,YAAY,EAAmB,MAAM,oBAAoB,CAAC;AAGrG,UAAU,kBAAkB;IAC1B,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,EAAE,aAAa,CAAC;IACxB,oBAAoB,EAAE,MAAM,UAAU,CAAC;IACvC,eAAe,EAAE,eAAe,CAAC;IACjC,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAWD,eAAO,MAAM,eAAe,qFAMzB,kBAAkB,KAAG,YAsKvB,CAAC"}
@@ -1,12 +1,12 @@
1
1
  import { Variant } from "@fishjam-cloud/ts-client";
2
- import { getConfigAndBandwidthFromProps, getRemoteOrLocalTrack } from "../../utils/track";
3
2
  import { useCallback, useEffect, useMemo, useState } from "react";
3
+ import { getConfigAndBandwidthFromProps, getRemoteOrLocalTrack } from "../../utils/track";
4
4
  const TRACK_TYPE_TO_DEVICE = {
5
5
  video: "camera",
6
6
  audio: "microphone",
7
7
  };
8
8
  const getDeviceType = (mediaManager) => TRACK_TYPE_TO_DEVICE[mediaManager.getDeviceType()];
9
- export const useTrackManager = ({ mediaManager, tsClient, getCurrentPeerStatus, bandwidthLimits, autoStreamProps, }) => {
9
+ export const useTrackManager = ({ mediaManager, tsClient, getCurrentPeerStatus, bandwidthLimits, streamConfig, }) => {
10
10
  const [currentTrackId, setCurrentTrackId] = useState(null);
11
11
  const [paused, setPaused] = useState(false);
12
12
  const currentTrack = useMemo(() => getRemoteOrLocalTrack(tsClient, currentTrackId), [tsClient, currentTrackId]);
@@ -14,14 +14,13 @@ export const useTrackManager = ({ mediaManager, tsClient, getCurrentPeerStatus,
14
14
  mediaManager.setTrackMiddleware(middleware);
15
15
  await refreshStreamedTrack();
16
16
  }
17
- async function initialize(deviceId) {
17
+ async function selectDevice(deviceId) {
18
18
  await mediaManager?.start(deviceId);
19
19
  if (!currentTrackId)
20
20
  return;
21
21
  const newTrack = mediaManager.getMedia()?.track ?? null;
22
22
  await tsClient.replaceTrack(currentTrackId, newTrack);
23
23
  }
24
- const stop = useCallback(() => mediaManager.stop(), [mediaManager]);
25
24
  const startStreaming = useCallback(async (props = { simulcast: [Variant.VARIANT_LOW, Variant.VARIANT_MEDIUM, Variant.VARIANT_HIGH] }) => {
26
25
  if (currentTrackId)
27
26
  throw Error("Track already added");
@@ -53,13 +52,6 @@ export const useTrackManager = ({ mediaManager, tsClient, getCurrentPeerStatus,
53
52
  throw Error("New track is empty");
54
53
  return tsClient.replaceTrack(currentTrack.trackId, newTrack);
55
54
  }, [currentTrack, mediaManager, tsClient]);
56
- const stopStreaming = useCallback(async () => {
57
- if (!currentTrack)
58
- return;
59
- setCurrentTrackId(null);
60
- setPaused(true);
61
- return tsClient.removeTrack(currentTrack.trackId);
62
- }, [currentTrack, tsClient]);
63
55
  const pauseStreaming = useCallback(async () => {
64
56
  if (!currentTrack)
65
57
  return;
@@ -81,12 +73,6 @@ export const useTrackManager = ({ mediaManager, tsClient, getCurrentPeerStatus,
81
73
  const trackMetadata = { type: deviceType, paused: false };
82
74
  return tsClient.updateTrackMetadata(currentTrack.trackId, trackMetadata);
83
75
  }, [currentTrack, mediaManager, tsClient]);
84
- const disableTrack = useCallback(() => {
85
- mediaManager.disable();
86
- }, [mediaManager]);
87
- const enableTrack = useCallback(() => {
88
- mediaManager.enable();
89
- }, [mediaManager]);
90
76
  const stream = useCallback(async () => {
91
77
  if (getCurrentPeerStatus() !== "connected")
92
78
  return;
@@ -128,36 +114,27 @@ export const useTrackManager = ({ mediaManager, tsClient, getCurrentPeerStatus,
128
114
  */
129
115
  const toggleDevice = useCallback(() => toggle("hard"), [toggle]);
130
116
  useEffect(() => {
131
- if (autoStreamProps === false)
132
- return;
133
- const joinedHandler = () => {
117
+ const onJoinedRoom = () => {
134
118
  if (mediaManager.getMedia()?.track) {
135
- startStreaming(autoStreamProps);
119
+ startStreaming(streamConfig);
136
120
  }
137
121
  };
138
- const disconnectedHandler = () => {
122
+ const onLeftRoom = () => {
123
+ setPaused(true);
139
124
  setCurrentTrackId(null);
140
125
  };
141
- tsClient.on("joined", joinedHandler);
142
- tsClient.on("disconnected", disconnectedHandler);
126
+ tsClient.on("joined", onJoinedRoom);
127
+ tsClient.on("disconnected", onLeftRoom);
143
128
  return () => {
144
- tsClient.off("joined", joinedHandler);
145
- tsClient.off("disconnected", disconnectedHandler);
129
+ tsClient.off("joined", onJoinedRoom);
130
+ tsClient.off("disconnected", onLeftRoom);
146
131
  };
147
- }, [mediaManager, startStreaming, tsClient, autoStreamProps]);
132
+ }, [mediaManager, startStreaming, tsClient, streamConfig, currentTrackId]);
148
133
  return {
149
134
  currentTrack,
150
135
  setTrackMiddleware,
151
- initialize,
152
- stop,
153
- startStreaming,
154
- stopStreaming,
155
- pauseStreaming,
156
- resumeStreaming,
157
- disableTrack,
158
- enableTrack,
159
- refreshStreamedTrack,
160
136
  paused,
137
+ selectDevice,
161
138
  toggleMute,
162
139
  toggleDevice,
163
140
  };
@@ -1,26 +1,39 @@
1
- import type { GenericMetadata } from "@fishjam-cloud/ts-client";
1
+ import type { GenericMetadata, ReconnectionStatus } from "@fishjam-cloud/ts-client";
2
+ import type { PeerStatus } from "../types/public";
2
3
  export interface JoinRoomConfig<PeerMetadata extends GenericMetadata = GenericMetadata> {
3
4
  /**
4
- * fishjam URL
5
+ * Fishjam URL
5
6
  */
6
7
  url: string;
7
8
  /**
8
- * token received from server (or Room Manager)
9
+ * Token received from server (or Room Manager)
9
10
  */
10
11
  peerToken: string;
11
12
  /**
12
- * string indexed record with metadata, that will be available to all other peers
13
+ * String indexed record with metadata, that will be available to all other peers
13
14
  */
14
15
  peerMetadata?: PeerMetadata;
15
16
  }
16
17
  /**
18
+ * Hook allows to join or leave a room and check the current connection status.
17
19
  * @category Connection
18
- * @returns
20
+ * @group Hooks
19
21
  */
20
22
  export declare function useConnection(): {
23
+ /**
24
+ * Join room and start streaming camera and microphone
25
+ */
21
26
  joinRoom: <PeerMetadata extends GenericMetadata = GenericMetadata>({ url, peerToken, peerMetadata, }: JoinRoomConfig<PeerMetadata>) => Promise<void>;
27
+ /**
28
+ * Leave room and stop streaming
29
+ */
22
30
  leaveRoom: () => void;
23
- peerStatus: import("..").PeerStatus;
24
- reconnectionStatus: import("@fishjam-cloud/ts-client").ReconnectionStatus;
31
+ /**
32
+ * Current peer connection status
33
+ */
34
+ peerStatus: PeerStatus;
35
+ /**
36
+ * Current reconnection status
37
+ */ reconnectionStatus: ReconnectionStatus;
25
38
  };
26
39
  //# sourceMappingURL=useConnection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useConnection.d.ts","sourceRoot":"","sources":["../../src/hooks/useConnection.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAIhE,MAAM,WAAW,cAAc,CAAC,YAAY,SAAS,eAAe,GAAG,eAAe;IACpF;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED;;;GAGG;AACH,wBAAgB,aAAa;eAOxB,YAAY,SAAS,eAAe,uDAIlC,cAAc,CAAC,YAAY,CAAC;;;;EASlC"}
1
+ {"version":3,"file":"useConnection.d.ts","sourceRoot":"","sources":["../../src/hooks/useConnection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAGpF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAIlD,MAAM,WAAW,cAAc,CAAC,YAAY,SAAS,eAAe,GAAG,eAAe;IACpF;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAgB,aAAa;IAsBzB;;OAEG;eAjBF,YAAY,SAAS,eAAe,uDAIlC,cAAc,CAAC,YAAY,CAAC;IAe/B;;OAEG;;IAEH;;OAEG;;IAEH;;OAEG;EAEN"}
@@ -2,8 +2,9 @@ import { useCallback } from "react";
2
2
  import { useFishjamContext } from "./internal/useFishjamContext";
3
3
  import { useReconnection } from "./internal/useReconnection";
4
4
  /**
5
+ * Hook allows to join or leave a room and check the current connection status.
5
6
  * @category Connection
6
- * @returns
7
+ * @group Hooks
7
8
  */
8
9
  export function useConnection() {
9
10
  const context = useFishjamContext();
@@ -13,5 +14,22 @@ export function useConnection() {
13
14
  const leaveRoom = useCallback(() => {
14
15
  client.disconnect();
15
16
  }, [client]);
16
- return { joinRoom, leaveRoom, peerStatus: context.peerStatus, reconnectionStatus };
17
+ const peerStatus = context.peerStatus;
18
+ return {
19
+ /**
20
+ * Join room and start streaming camera and microphone
21
+ */
22
+ joinRoom,
23
+ /**
24
+ * Leave room and stop streaming
25
+ */
26
+ leaveRoom,
27
+ /**
28
+ * Current peer connection status
29
+ */
30
+ peerStatus,
31
+ /**
32
+ * Current reconnection status
33
+ */ reconnectionStatus,
34
+ };
17
35
  }