@fishjam-cloud/react-client 0.10.1 → 0.11.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 (70) hide show
  1. package/LICENSE.txt +201 -0
  2. package/dist/FishjamProvider.d.ts +43 -0
  3. package/dist/FishjamProvider.d.ts.map +1 -0
  4. package/dist/{fishjamProvider.js → FishjamProvider.js} +17 -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.map +1 -1
  9. package/dist/devices/mediaInitializer.js +1 -1
  10. package/dist/hooks/devices/useCamera.d.ts +44 -2
  11. package/dist/hooks/devices/useCamera.d.ts.map +1 -1
  12. package/dist/hooks/devices/useCamera.js +13 -2
  13. package/dist/hooks/devices/useInitializeDevices.d.ts +14 -3
  14. package/dist/hooks/devices/useInitializeDevices.d.ts.map +1 -1
  15. package/dist/hooks/devices/useInitializeDevices.js +6 -6
  16. package/dist/hooks/devices/useMicrophone.d.ts +46 -2
  17. package/dist/hooks/devices/useMicrophone.d.ts.map +1 -1
  18. package/dist/hooks/devices/useMicrophone.js +15 -2
  19. package/dist/hooks/internal/device/useDeviceApi.d.ts +2 -4
  20. package/dist/hooks/internal/device/useDeviceApi.d.ts.map +1 -1
  21. package/dist/hooks/internal/device/useDeviceApi.js +16 -22
  22. package/dist/hooks/internal/device/useDeviceManager.d.ts +1 -1
  23. package/dist/hooks/internal/device/useDeviceManager.d.ts.map +1 -1
  24. package/dist/hooks/internal/device/useDeviceManager.js +2 -2
  25. package/dist/hooks/internal/useFishjamClientState.d.ts +1 -1
  26. package/dist/hooks/internal/useFishjamClientState.d.ts.map +1 -1
  27. package/dist/hooks/internal/useFishjamClient_DO_NOT_USE.d.ts.map +1 -1
  28. package/dist/hooks/internal/useFishjamClient_DO_NOT_USE.js +1 -1
  29. package/dist/hooks/internal/useFishjamContext.d.ts +4 -3
  30. package/dist/hooks/internal/useFishjamContext.d.ts.map +1 -1
  31. package/dist/hooks/internal/usePeerStatus.d.ts.map +1 -1
  32. package/dist/hooks/internal/usePeerStatus.js +2 -0
  33. package/dist/hooks/internal/useReconnection.d.ts.map +1 -1
  34. package/dist/hooks/internal/useScreenshareManager.d.ts +10 -0
  35. package/dist/hooks/internal/useScreenshareManager.d.ts.map +1 -0
  36. package/dist/hooks/internal/useScreenshareManager.js +114 -0
  37. package/dist/hooks/internal/useTrackManager.d.ts +3 -3
  38. package/dist/hooks/internal/useTrackManager.d.ts.map +1 -1
  39. package/dist/hooks/internal/useTrackManager.js +13 -36
  40. package/dist/hooks/useConnection.d.ts +30 -10
  41. package/dist/hooks/useConnection.d.ts.map +1 -1
  42. package/dist/hooks/useConnection.js +10 -3
  43. package/dist/hooks/usePeers.d.ts +31 -11
  44. package/dist/hooks/usePeers.d.ts.map +1 -1
  45. package/dist/hooks/usePeers.js +7 -5
  46. package/dist/hooks/useScreenShare.d.ts +46 -10
  47. package/dist/hooks/useScreenShare.d.ts.map +1 -1
  48. package/dist/hooks/useScreenShare.js +3 -121
  49. package/dist/hooks/useUpdatePeerMetadata.d.ts +6 -0
  50. package/dist/hooks/useUpdatePeerMetadata.d.ts.map +1 -1
  51. package/dist/hooks/useUpdatePeerMetadata.js +6 -0
  52. package/dist/hooks/useVAD.d.ts +6 -0
  53. package/dist/hooks/useVAD.d.ts.map +1 -1
  54. package/dist/hooks/useVAD.js +10 -4
  55. package/dist/index.d.ts +10 -11
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +5 -4
  58. package/dist/types/internal.d.ts +4 -24
  59. package/dist/types/internal.d.ts.map +1 -1
  60. package/dist/types/public.d.ts +17 -31
  61. package/dist/types/public.d.ts.map +1 -1
  62. package/dist/utils/bandwidth.d.ts.map +1 -1
  63. package/dist/utils/localStorage.d.ts +1 -1
  64. package/dist/utils/localStorage.d.ts.map +1 -1
  65. package/dist/utils/track.d.ts.map +1 -1
  66. package/dist/utils/track.js +0 -1
  67. package/package.json +10 -10
  68. package/readme.md +8 -8
  69. package/dist/fishjamProvider.d.ts +0 -17
  70. package/dist/fishjamProvider.d.ts.map +0 -1
@@ -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,4 +1,4 @@
1
- import type { Component, Peer, FishjamClient, GenericMetadata } from "@fishjam-cloud/ts-client";
1
+ import type { Component, FishjamClient, GenericMetadata, Peer } from "@fishjam-cloud/ts-client";
2
2
  import type { PeerId } from "../../types/internal";
3
3
  export interface FishjamClientState<P = GenericMetadata, S = GenericMetadata> {
4
4
  peers: Record<PeerId, Peer<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,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAG/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 +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";
6
+ import type { UseScreenshareResult } from "../useScreenShare";
5
7
  import type { FishjamClientState } from "./useFishjamClientState";
6
- import type { BandwidthLimits, PeerStatus, ScreenshareApi } from "../../types/public";
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,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE,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,10 @@
1
+ import type { FishjamClient } from "@fishjam-cloud/ts-client";
2
+ import type { PeerStatus } from "../../types/public";
3
+ import type { UseScreenshareResult } from "../useScreenShare";
4
+ interface ScreenShareManagerProps {
5
+ fishjamClient: FishjamClient;
6
+ getCurrentPeerStatus: () => PeerStatus;
7
+ }
8
+ export declare const useScreenShareManager: ({ fishjamClient, getCurrentPeerStatus, }: ScreenShareManagerProps) => UseScreenshareResult;
9
+ export {};
10
+ //# 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,EAAoB,MAAM,oBAAoB,CAAC;AACvE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAE9D,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,46 @@
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
  /**
17
18
  * @category Connection
18
- * @returns
19
19
  */
20
- export declare function useConnection(): {
21
- joinRoom: <PeerMetadata extends GenericMetadata = GenericMetadata>({ url, peerToken, peerMetadata, }: JoinRoomConfig<PeerMetadata>) => Promise<void>;
20
+ export interface UseConnectionResult {
21
+ /**
22
+ * Join room and start streaming camera and microphone
23
+ *
24
+ * @param {JoinRoomConfig}
25
+ */
26
+ joinRoom: <PeerMetadata extends GenericMetadata = GenericMetadata>(config: 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;
25
- };
31
+ /**
32
+ * Current peer connection status
33
+ */
34
+ peerStatus: PeerStatus;
35
+ /**
36
+ * Current reconnection status
37
+ */
38
+ reconnectionStatus: ReconnectionStatus;
39
+ }
40
+ /**
41
+ * Hook allows to join or leave a room and check the current connection status.
42
+ * @category Connection
43
+ * @returns {UseConnectionResult}
44
+ */
45
+ export declare function useConnection(): UseConnectionResult;
26
46
  //# 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;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,QAAQ,EAAE,CAAC,YAAY,SAAS,eAAe,GAAG,eAAe,EAC/D,MAAM,EAAE,cAAc,CAAC,YAAY,CAAC,KACjC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB;;OAEG;IACH,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB;;OAEG;IACH,UAAU,EAAE,UAAU,CAAC;IACvB;;OAEG;IACH,kBAAkB,EAAE,kBAAkB,CAAC;CACxC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,mBAAmB,CAuBnD"}
@@ -2,16 +2,23 @@ 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
+ * @returns {UseConnectionResult}
7
8
  */
8
9
  export function useConnection() {
9
10
  const context = useFishjamContext();
10
11
  const client = context.fishjamClientRef.current;
11
12
  const reconnectionStatus = useReconnection();
12
- const joinRoom = useCallback(({ url, peerToken, peerMetadata, }) => client.connect({ url, token: peerToken, peerMetadata: peerMetadata ?? {} }), [client]);
13
+ const joinRoom = useCallback(({ url, peerToken, peerMetadata }) => client.connect({ url, token: peerToken, peerMetadata: peerMetadata ?? {} }), [client]);
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
+ joinRoom,
20
+ leaveRoom,
21
+ peerStatus,
22
+ reconnectionStatus,
23
+ };
17
24
  }
@@ -1,31 +1,51 @@
1
- import type { DistinguishedTracks, PeerState } from "../types/internal";
2
- export type PeerWithTracks<P, S> = PeerState<P, S> & DistinguishedTracks;
1
+ import type { Metadata } from "@fishjam-cloud/ts-client";
2
+ import type { PeerId } from "../types/internal";
3
+ import type { Track } from "../types/public";
3
4
  /**
4
- * Result type for the usePeers hook.
5
+ *
6
+ * @category Connection
7
+ * @typeParam PeerMetadata Type of metadata set by peer while connecting to a room.
8
+ * @typeParam ServerMetadata Type of metadata set by the server while creating a peer.
9
+ */
10
+ export type PeerWithTracks<PeerMetadata, ServerMetadata> = {
11
+ id: PeerId;
12
+ metadata?: Metadata<PeerMetadata, ServerMetadata>;
13
+ tracks: Track[];
14
+ cameraTrack?: Track;
15
+ microphoneTrack?: Track;
16
+ screenShareVideoTrack?: Track;
17
+ screenShareAudioTrack?: Track;
18
+ };
19
+ /**
20
+ *
21
+ * @category Connection
22
+ * @typeParam PeerMetadata Type of metadata set by peer while connecting to a room.
23
+ * @typeParam ServerMetadata Type of metadata set by the server while creating a peer.
5
24
  */
6
- export type UsePeersResult<P, S> = {
25
+ export type UsePeersResult<PeerMetadata, ServerMetadata> = {
7
26
  /**
8
27
  * The local peer with distinguished tracks (camera, microphone, screen share).
9
28
  * Will be null if the local peer is not found.
10
29
  */
11
- localPeer: PeerWithTracks<P, S> | null;
30
+ localPeer: PeerWithTracks<PeerMetadata, ServerMetadata> | null;
12
31
  /**
13
32
  * Array of remote peers with distinguished tracks (camera, microphone, screen share).
14
33
  */
15
- remotePeers: PeerWithTracks<P, S>[];
34
+ remotePeers: PeerWithTracks<PeerMetadata, ServerMetadata>[];
16
35
  /**
17
36
  * @deprecated Use remotePeers instead
18
37
  * Legacy array containing remote peers.
19
38
  * This property will be removed in future versions.
20
39
  */
21
- peers: PeerWithTracks<P, S>[];
40
+ peers: PeerWithTracks<PeerMetadata, ServerMetadata>[];
22
41
  };
23
42
  /**
43
+ * Hook allows to access id, tracks and metadata of the local and remote peers.
24
44
  *
25
45
  * @category Connection
26
- *
27
- * @typeParam P Type of metadata set by peer while connecting to a room.
28
- * @typeParam S Type of metadata set by the server while creating a peer.
46
+ * @group Hooks
47
+ * @typeParam PeerMetadata Type of metadata set by peer while connecting to a room.
48
+ * @typeParam ServerMetadata Type of metadata set by the server while creating a peer.
29
49
  */
30
- export declare function usePeers<P = Record<string, unknown>, S = Record<string, unknown>>(): UsePeersResult<P, S>;
50
+ export declare function usePeers<PeerMetadata = Record<string, unknown>, ServerMetadata = Record<string, unknown>>(): UsePeersResult<PeerMetadata, ServerMetadata>;
31
51
  //# sourceMappingURL=usePeers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"usePeers.d.ts","sourceRoot":"","sources":["../../src/hooks/usePeers.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAExE,MAAM,MAAM,cAAc,CAAC,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,mBAAmB,CAAC;AAiCzE;;GAEG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,EAAE,CAAC,IAAI;IACjC;;;OAGG;IACH,SAAS,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;IAEvC;;OAEG;IACH,WAAW,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IAEpC;;;;OAIG;IACH,KAAK,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;CAC/B,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAQzG"}
1
+ {"version":3,"file":"usePeers.d.ts","sourceRoot":"","sources":["../../src/hooks/usePeers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,QAAQ,EAIT,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAG7C;;;;;GAKG;AACH,MAAM,MAAM,cAAc,CAAC,YAAY,EAAE,cAAc,IAAI;IACzD,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,EAAE,QAAQ,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IAClD,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,KAAK,CAAC;IACpB,eAAe,CAAC,EAAE,KAAK,CAAC;IACxB,qBAAqB,CAAC,EAAE,KAAK,CAAC;IAC9B,qBAAqB,CAAC,EAAE,KAAK,CAAC;CAC/B,CAAC;AAgCF;;;;;GAKG;AACH,MAAM,MAAM,cAAc,CAAC,YAAY,EAAE,cAAc,IAAI;IACzD;;;OAGG;IACH,SAAS,EAAE,cAAc,CAAC,YAAY,EAAE,cAAc,CAAC,GAAG,IAAI,CAAC;IAE/D;;OAEG;IACH,WAAW,EAAE,cAAc,CAAC,YAAY,EAAE,cAAc,CAAC,EAAE,CAAC;IAE5D;;;;OAIG;IACH,KAAK,EAAE,cAAc,CAAC,YAAY,EAAE,cAAc,CAAC,EAAE,CAAC;CACvD,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CACtB,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACtC,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KACrC,cAAc,CAAC,YAAY,EAAE,cAAc,CAAC,CAYhD"}
@@ -6,7 +6,6 @@ function trackContextToTrack(track) {
6
6
  stream: track.stream,
7
7
  simulcastConfig: track.simulcastConfig ?? null,
8
8
  encoding: track.encoding ?? null,
9
- vadStatus: track.vadStatus,
10
9
  track: track.track,
11
10
  };
12
11
  }
@@ -27,15 +26,18 @@ function getPeerWithDistinguishedTracks(peer) {
27
26
  };
28
27
  }
29
28
  /**
29
+ * Hook allows to access id, tracks and metadata of the local and remote peers.
30
30
  *
31
31
  * @category Connection
32
- *
33
- * @typeParam P Type of metadata set by peer while connecting to a room.
34
- * @typeParam S Type of metadata set by the server while creating a peer.
32
+ * @group Hooks
33
+ * @typeParam PeerMetadata Type of metadata set by peer while connecting to a room.
34
+ * @typeParam ServerMetadata Type of metadata set by the server while creating a peer.
35
35
  */
36
36
  export function usePeers() {
37
37
  const { clientState } = useFishjamContext();
38
- const localPeer = clientState.localPeer ? getPeerWithDistinguishedTracks(clientState.localPeer) : null;
38
+ const localPeer = clientState.localPeer
39
+ ? getPeerWithDistinguishedTracks(clientState.localPeer)
40
+ : null;
39
41
  const remotePeers = Object.values(clientState.peers).map((peer) => getPeerWithDistinguishedTracks(peer));
40
42
  return { localPeer, remotePeers, peers: remotePeers };
41
43
  }