@fishjam-cloud/react-client 0.7.0 → 0.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/dist/DeviceManager.d.ts +33 -17
  2. package/dist/DeviceManager.d.ts.map +1 -1
  3. package/dist/DeviceManager.js +126 -97
  4. package/dist/constraints.d.ts +2 -3
  5. package/dist/constraints.d.ts.map +1 -1
  6. package/dist/constraints.js +9 -10
  7. package/dist/devices/MiddlewareManager.d.ts +9 -0
  8. package/dist/devices/MiddlewareManager.d.ts.map +1 -0
  9. package/dist/devices/MiddlewareManager.js +26 -0
  10. package/dist/fishjamProvider.d.ts +8 -6
  11. package/dist/fishjamProvider.d.ts.map +1 -1
  12. package/dist/fishjamProvider.js +27 -11
  13. package/dist/hooks/deviceManagers/useDeviceManager.d.ts +1 -1
  14. package/dist/hooks/deviceManagers/useDeviceManager.d.ts.map +1 -1
  15. package/dist/hooks/deviceManagers/useDeviceManager.js +2 -2
  16. package/dist/hooks/{useDevices.d.ts → devices.d.ts} +14 -2
  17. package/dist/hooks/devices.d.ts.map +1 -0
  18. package/dist/hooks/{useDevices.js → devices.js} +29 -15
  19. package/dist/hooks/public.d.ts +2 -4
  20. package/dist/hooks/public.d.ts.map +1 -1
  21. package/dist/hooks/public.js +2 -4
  22. package/dist/hooks/useConnection.d.ts +10 -2
  23. package/dist/hooks/useConnection.d.ts.map +1 -1
  24. package/dist/hooks/useConnection.js +8 -0
  25. package/dist/hooks/useFishjamClientState.d.ts +1 -2
  26. package/dist/hooks/useFishjamClientState.d.ts.map +1 -1
  27. package/dist/hooks/useFishjamClientState.js +0 -4
  28. package/dist/hooks/useFishjamClient_DO_NOT_USE.d.ts +6 -1
  29. package/dist/hooks/useFishjamClient_DO_NOT_USE.d.ts.map +1 -1
  30. package/dist/hooks/useFishjamClient_DO_NOT_USE.js +5 -0
  31. package/dist/hooks/useFishjamContext.d.ts +4 -4
  32. package/dist/hooks/useFishjamContext.d.ts.map +1 -1
  33. package/dist/hooks/usePeerStatus.d.ts +8 -0
  34. package/dist/hooks/usePeerStatus.d.ts.map +1 -0
  35. package/dist/hooks/{useParticipantStatus.js → usePeerStatus.js} +12 -12
  36. package/dist/hooks/usePeers.d.ts +10 -0
  37. package/dist/hooks/usePeers.d.ts.map +1 -0
  38. package/dist/hooks/{useParticipants.js → usePeers.js} +8 -5
  39. package/dist/hooks/useReconnection.d.ts +4 -0
  40. package/dist/hooks/useReconnection.d.ts.map +1 -1
  41. package/dist/hooks/useReconnection.js +4 -0
  42. package/dist/hooks/useScreenShare.d.ts +13 -1
  43. package/dist/hooks/useScreenShare.d.ts.map +1 -1
  44. package/dist/hooks/useScreenShare.js +34 -31
  45. package/dist/hooks/useStatus.d.ts +5 -1
  46. package/dist/hooks/useStatus.d.ts.map +1 -1
  47. package/dist/hooks/useStatus.js +4 -0
  48. package/dist/hooks/useTrackManager.d.ts +4 -4
  49. package/dist/hooks/useTrackManager.d.ts.map +1 -1
  50. package/dist/hooks/useTrackManager.js +32 -47
  51. package/dist/index.d.ts +3 -6
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +2 -3
  54. package/dist/mediaInitializer.d.ts +2 -2
  55. package/dist/mediaInitializer.d.ts.map +1 -1
  56. package/dist/mediaInitializer.js +30 -1
  57. package/dist/types/internal.d.ts +119 -0
  58. package/dist/types/internal.d.ts.map +1 -0
  59. package/dist/types/public.d.ts +65 -0
  60. package/dist/types/public.d.ts.map +1 -0
  61. package/dist/utils/errors.d.ts +1 -1
  62. package/dist/utils/errors.d.ts.map +1 -1
  63. package/dist/utils/localStorage.d.ts +3 -4
  64. package/dist/utils/localStorage.d.ts.map +1 -1
  65. package/dist/utils/localStorage.js +18 -4
  66. package/dist/utils/track.d.ts +3 -2
  67. package/dist/utils/track.d.ts.map +1 -1
  68. package/dist/utils/track.js +8 -2
  69. package/package.json +7 -7
  70. package/readme.md +20 -118
  71. package/dist/hooks/deviceManagers/useAudioDeviceManager.d.ts +0 -2
  72. package/dist/hooks/deviceManagers/useAudioDeviceManager.d.ts.map +0 -1
  73. package/dist/hooks/deviceManagers/useAudioDeviceManager.js +0 -7
  74. package/dist/hooks/deviceManagers/useVideoDeviceManager.d.ts +0 -2
  75. package/dist/hooks/deviceManagers/useVideoDeviceManager.d.ts.map +0 -1
  76. package/dist/hooks/deviceManagers/useVideoDeviceManager.js +0 -7
  77. package/dist/hooks/useDevices.d.ts.map +0 -1
  78. package/dist/hooks/useParticipantStatus.d.ts +0 -8
  79. package/dist/hooks/useParticipantStatus.d.ts.map +0 -1
  80. package/dist/hooks/useParticipants.d.ts +0 -6
  81. package/dist/hooks/useParticipants.d.ts.map +0 -1
  82. package/dist/hooks/useProcessedPreviewStream.d.ts +0 -3
  83. package/dist/hooks/useProcessedPreviewStream.d.ts.map +0 -1
  84. package/dist/hooks/useProcessedPreviewStream.js +0 -17
  85. package/dist/state.types.d.ts +0 -42
  86. package/dist/state.types.d.ts.map +0 -1
  87. package/dist/types.d.ts +0 -255
  88. package/dist/types.d.ts.map +0 -1
  89. package/dist/utils/media.d.ts +0 -12
  90. package/dist/utils/media.d.ts.map +0 -1
  91. package/dist/utils/media.js +0 -64
  92. /package/dist/{state.types.js → types/internal.js} +0 -0
  93. /package/dist/{types.js → types/public.js} +0 -0
@@ -1,16 +1,18 @@
1
1
  import { useFishjamContext } from "./useFishjamContext";
2
- import { useVideoDeviceManager } from "./deviceManagers/useVideoDeviceManager";
3
- import { useAudioDeviceManager } from "./deviceManagers/useAudioDeviceManager";
4
2
  import { useCallback } from "react";
3
+ import { useDeviceManager } from "./deviceManagers/useDeviceManager";
5
4
  import { getAvailableMedia, getCorrectedResult } from "../mediaInitializer";
6
- import { useProcessedPreviewStream } from "./useProcessedPreviewStream";
7
5
  import { prepareConstraints } from "../constraints";
6
+ /**
7
+ *
8
+ * @category Devices
9
+ */
8
10
  export function useCamera() {
9
- const { videoTrackManager } = useFishjamContext();
10
- const { deviceState } = useVideoDeviceManager();
11
+ const { videoTrackManager, videoDeviceManagerRef } = useFishjamContext();
12
+ const { deviceState, status } = useDeviceManager(videoDeviceManagerRef.current);
11
13
  const { currentTrack, ...trackManager } = videoTrackManager;
12
- const processedPreviewStream = useProcessedPreviewStream(videoTrackManager, deviceState.media?.track);
13
- const stream = currentTrack?.stream ?? processedPreviewStream ?? deviceState.media?.stream ?? null;
14
+ const stream = deviceState.media?.stream ?? null;
15
+ const currentMiddleware = deviceState.currentMiddleware ?? null;
14
16
  const isStreaming = Boolean(currentTrack?.stream);
15
17
  const track = stream?.getAudioTracks()[0] ?? null;
16
18
  const trackId = currentTrack?.trackId ?? null;
@@ -18,20 +20,26 @@ export function useCamera() {
18
20
  const activeDevice = deviceState.media?.deviceInfo ?? null;
19
21
  return {
20
22
  ...trackManager,
23
+ currentMiddleware,
24
+ status,
21
25
  stream,
26
+ track,
22
27
  devices,
23
28
  activeDevice,
24
29
  isStreaming,
25
- track,
26
30
  trackId,
27
31
  };
28
32
  }
33
+ /**
34
+ *
35
+ * @category Devices
36
+ */
29
37
  export function useMicrophone() {
30
- const { audioTrackManager } = useFishjamContext();
31
- const { deviceState } = useAudioDeviceManager();
38
+ const { audioTrackManager, audioDeviceManagerRef } = useFishjamContext();
39
+ const { deviceState, status } = useDeviceManager(audioDeviceManagerRef.current);
32
40
  const { currentTrack, ...trackManager } = audioTrackManager;
33
- const processedPreviewStream = useProcessedPreviewStream(audioTrackManager, deviceState.media?.track);
34
- const stream = currentTrack?.stream ?? processedPreviewStream ?? deviceState.media?.stream ?? null;
41
+ const stream = deviceState.media?.stream ?? null;
42
+ const currentMiddleware = deviceState.currentMiddleware ?? null;
35
43
  const isStreaming = Boolean(currentTrack?.stream);
36
44
  const track = stream?.getAudioTracks()[0] ?? null;
37
45
  const trackId = currentTrack?.trackId ?? null;
@@ -40,15 +48,21 @@ export function useMicrophone() {
40
48
  const isAudioPlaying = currentTrack?.vadStatus === "speech";
41
49
  return {
42
50
  ...trackManager,
51
+ currentMiddleware,
52
+ status,
43
53
  stream,
44
- isStreaming,
45
54
  track,
55
+ isStreaming,
46
56
  trackId,
47
57
  devices,
48
58
  activeDevice,
49
59
  isAudioPlaying,
50
60
  };
51
61
  }
62
+ /**
63
+ *
64
+ * @category Devices
65
+ */
52
66
  export const useInitializeDevices = () => {
53
67
  const { videoDeviceManagerRef, audioDeviceManagerRef, hasDevicesBeenInitializedRef } = useFishjamContext();
54
68
  const initializeDevices = useCallback(async () => {
@@ -58,8 +72,8 @@ export const useInitializeDevices = () => {
58
72
  const videoManager = videoDeviceManagerRef.current;
59
73
  const audioManager = audioDeviceManagerRef.current;
60
74
  const constraints = {
61
- video: videoManager.getConstraints(true),
62
- audio: audioManager.getConstraints(true),
75
+ video: videoManager.getConstraints(),
76
+ audio: audioManager.getConstraints(),
63
77
  };
64
78
  const previousDevices = {
65
79
  video: videoManager.getLastDevice(),
@@ -1,9 +1,7 @@
1
1
  export { useConnect, useDisconnect } from "./useConnection";
2
2
  export { useReconnection } from "./useReconnection";
3
- export { useCamera, useMicrophone, useInitializeDevices } from "./useDevices";
4
- export { useParticipants } from "./useParticipants";
3
+ export { useCamera, useMicrophone, useInitializeDevices } from "./devices";
4
+ export { usePeers } from "./usePeers";
5
5
  export { useScreenShare } from "./useScreenShare";
6
6
  export { useStatus } from "./useStatus";
7
- export { useAudioDeviceManager } from "./deviceManagers/useAudioDeviceManager";
8
- export { useVideoDeviceManager } from "./deviceManagers/useVideoDeviceManager";
9
7
  //# sourceMappingURL=public.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../src/hooks/public.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAC/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC"}
1
+ {"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../src/hooks/public.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAC3E,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC"}
@@ -1,8 +1,6 @@
1
1
  export { useConnect, useDisconnect } from "./useConnection";
2
2
  export { useReconnection } from "./useReconnection";
3
- export { useCamera, useMicrophone, useInitializeDevices } from "./useDevices";
4
- export { useParticipants } from "./useParticipants";
3
+ export { useCamera, useMicrophone, useInitializeDevices } from "./devices";
4
+ export { usePeers } from "./usePeers";
5
5
  export { useScreenShare } from "./useScreenShare";
6
6
  export { useStatus } from "./useStatus";
7
- export { useAudioDeviceManager } from "./deviceManagers/useAudioDeviceManager";
8
- export { useVideoDeviceManager } from "./deviceManagers/useVideoDeviceManager";
@@ -1,4 +1,12 @@
1
- import type { UseConnect } from "../types";
2
- export declare function useConnect(): UseConnect;
1
+ import type { ConnectConfig } from "../types/public";
2
+ /**
3
+ *
4
+ * @category Connection
5
+ */
6
+ export declare function useConnect(): (config: ConnectConfig) => Promise<void>;
7
+ /**
8
+ *
9
+ * @category Connection
10
+ */
3
11
  export declare function useDisconnect(): () => void;
4
12
  //# sourceMappingURL=useConnection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useConnection.d.ts","sourceRoot":"","sources":["../../src/hooks/useConnection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,UAAU,EAAE,MAAM,UAAU,CAAC;AAI1D,wBAAgB,UAAU,IAAI,UAAU,CAOvC;AAED,wBAAgB,aAAa,eAM5B"}
1
+ {"version":3,"file":"useConnection.d.ts","sourceRoot":"","sources":["../../src/hooks/useConnection.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD;;;GAGG;AACH,wBAAgB,UAAU,IAAI,CAAC,MAAM,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAIrE;AAED;;;GAGG;AACH,wBAAgB,aAAa,eAM5B"}
@@ -1,9 +1,17 @@
1
1
  import { useCallback } from "react";
2
2
  import { useFishjamContext } from "./useFishjamContext";
3
+ /**
4
+ *
5
+ * @category Connection
6
+ */
3
7
  export function useConnect() {
4
8
  const client = useFishjamContext().fishjamClientRef.current;
5
9
  return useCallback((config) => client.connect({ ...config, peerMetadata: config.peerMetadata ?? {} }), [client]);
6
10
  }
11
+ /**
12
+ *
13
+ * @category Connection
14
+ */
7
15
  export function useDisconnect() {
8
16
  const client = useFishjamContext().fishjamClientRef.current;
9
17
  return useCallback(() => {
@@ -1,6 +1,5 @@
1
1
  import type { FishjamClient } from "@fishjam-cloud/ts-client";
2
- import type { PeerMetadata, TrackMetadata } from "../types";
3
- import type { PeerState } from "../state.types";
2
+ import type { PeerMetadata, PeerState, TrackMetadata } from "../types/internal";
4
3
  export interface FishjamClientState {
5
4
  peers: PeerState[];
6
5
  components: PeerState[];
@@ -1 +1 @@
1
- {"version":3,"file":"useFishjamClientState.d.ts","sourceRoot":"","sources":["../../src/hooks/useFishjamClientState.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAA0D,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACtH,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAkB,MAAM,gBAAgB,CAAC;AA0ChE,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,cAAc,EAAE,OAAO,CAAC;CACzB;AAuCD,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,aAAa,CAAC,YAAY,EAAE,aAAa,CAAC,GAAG,kBAAkB,CAyCnH"}
1
+ {"version":3,"file":"useFishjamClientState.d.ts","sourceRoot":"","sources":["../../src/hooks/useFishjamClientState.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAA0D,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACtH,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAW,aAAa,EAAE,MAAM,mBAAmB,CAAC;AA2CzF,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,cAAc,EAAE,OAAO,CAAC;CACzB;AAmCD,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,aAAa,CAAC,YAAY,EAAE,aAAa,CAAC,GAAG,kBAAkB,CAyCnH"}
@@ -40,7 +40,6 @@ const eventNames = [
40
40
  ];
41
41
  function trackContextToTrack(track) {
42
42
  return {
43
- rawMetadata: track.rawMetadata,
44
43
  metadata: track.metadata,
45
44
  trackId: track.trackId,
46
45
  stream: track.stream,
@@ -48,15 +47,12 @@ function trackContextToTrack(track) {
48
47
  encoding: track.encoding ?? null,
49
48
  vadStatus: track.vadStatus,
50
49
  track: track.track,
51
- metadataParsingError: track.metadataParsingError,
52
50
  };
53
51
  }
54
52
  function endpointToPeerState(peer) {
55
53
  const tracks = [...peer.tracks].reduce((acc, [, track]) => ({ ...acc, [track.trackId]: trackContextToTrack(track) }), {});
56
54
  return {
57
- rawMetadata: peer.rawMetadata,
58
55
  metadata: peer.metadata,
59
- metadataParsingError: peer.metadataParsingError,
60
56
  id: peer.id,
61
57
  tracks,
62
58
  };
@@ -1,2 +1,7 @@
1
- export declare function useFishjamClient_DO_NOT_USE(): import("@fishjam-cloud/ts-client").FishjamClient<import("..").PeerMetadata, import("..").TrackMetadata>;
1
+ /**
2
+ *
3
+ * @category Connection
4
+ * @deprecated
5
+ */
6
+ export declare function useFishjamClient_DO_NOT_USE(): import("@fishjam-cloud/ts-client").FishjamClient<import("../types/internal").PeerMetadata, import("../types/internal").TrackMetadata>;
2
7
  //# sourceMappingURL=useFishjamClient_DO_NOT_USE.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useFishjamClient_DO_NOT_USE.d.ts","sourceRoot":"","sources":["../../src/hooks/useFishjamClient_DO_NOT_USE.ts"],"names":[],"mappings":"AAGA,wBAAgB,2BAA2B,4GAI1C"}
1
+ {"version":3,"file":"useFishjamClient_DO_NOT_USE.d.ts","sourceRoot":"","sources":["../../src/hooks/useFishjamClient_DO_NOT_USE.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,wBAAgB,2BAA2B,0IAI1C"}
@@ -1,5 +1,10 @@
1
1
  import { useFishjamContext } from "./useFishjamContext";
2
2
  import { useMemo } from "react";
3
+ /**
4
+ *
5
+ * @category Connection
6
+ * @deprecated
7
+ */
3
8
  export function useFishjamClient_DO_NOT_USE() {
4
9
  const client = useFishjamContext().fishjamClientRef.current;
5
10
  return useMemo(() => client, [client]);
@@ -1,16 +1,16 @@
1
1
  import type { FishjamClient } from "@fishjam-cloud/ts-client";
2
2
  import { type MutableRefObject } from "react";
3
- import type { PeerMetadata, TrackMetadata, ScreenShareState, TrackManager } from "../types";
3
+ import type { PeerMetadata, TrackMetadata, TrackManager } from "../types/internal";
4
4
  import type { DeviceManager } from "../DeviceManager";
5
- import type { ParticipantStatus } from "../state.types";
6
5
  import type { FishjamClientState } from "./useFishjamClientState";
6
+ import type { PeerStatus, ScreenshareApi } from "../types/public";
7
7
  export type FishjamContextType = {
8
8
  fishjamClientRef: MutableRefObject<FishjamClient<PeerMetadata, TrackMetadata>>;
9
9
  videoDeviceManagerRef: MutableRefObject<DeviceManager>;
10
10
  audioDeviceManagerRef: MutableRefObject<DeviceManager>;
11
11
  hasDevicesBeenInitializedRef: MutableRefObject<boolean>;
12
- screenShareState: [ScreenShareState, React.Dispatch<React.SetStateAction<ScreenShareState>>];
13
- peerStatus: ParticipantStatus;
12
+ screenShareManager: ScreenshareApi;
13
+ peerStatus: PeerStatus;
14
14
  videoTrackManager: TrackManager;
15
15
  audioTrackManager: TrackManager;
16
16
  clientState: FishjamClientState;
@@ -1 +1 @@
1
- {"version":3,"file":"useFishjamContext.d.ts","sourceRoot":"","sources":["../../src/hooks/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,aAAa,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC5F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,gBAAgB,EAAE,gBAAgB,CAAC,aAAa,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC,CAAC;IAC/E,qBAAqB,EAAE,gBAAgB,CAAC,aAAa,CAAC,CAAC;IACvD,qBAAqB,EAAE,gBAAgB,CAAC,aAAa,CAAC,CAAC;IACvD,4BAA4B,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACxD,gBAAgB,EAAE,CAAC,gBAAgB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC7F,UAAU,EAAE,iBAAiB,CAAC;IAC9B,iBAAiB,EAAE,YAAY,CAAC;IAChC,iBAAiB,EAAE,YAAY,CAAC;IAChC,WAAW,EAAE,kBAAkB,CAAC;CACjC,CAAC;AAEF,eAAO,MAAM,cAAc,oDAAiD,CAAC;AAE7E,wBAAgB,iBAAiB,IAGb,kBAAkB,CACrC"}
1
+ {"version":3,"file":"useFishjamContext.d.ts","sourceRoot":"","sources":["../../src/hooks/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,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACnF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAElE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,gBAAgB,EAAE,gBAAgB,CAAC,aAAa,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC,CAAC;IAC/E,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;CACjC,CAAC;AAEF,eAAO,MAAM,cAAc,oDAAiD,CAAC;AAE7E,wBAAgB,iBAAiB,IAGb,kBAAkB,CACrC"}
@@ -0,0 +1,8 @@
1
+ import type { FishjamClient } from "@fishjam-cloud/ts-client";
2
+ import type { PeerMetadata, TrackMetadata } from "../types/internal";
3
+ import type { PeerStatus } from "../types/public";
4
+ export declare const usePeerStatus: (client: FishjamClient<PeerMetadata, TrackMetadata>) => {
5
+ readonly peerStatus: PeerStatus;
6
+ readonly getCurrentPeerStatus: () => PeerStatus;
7
+ };
8
+ //# sourceMappingURL=usePeerStatus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePeerStatus.d.ts","sourceRoot":"","sources":["../../src/hooks/usePeerStatus.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,eAAO,MAAM,aAAa,WAAY,aAAa,CAAC,YAAY,EAAE,aAAa,CAAC;;;CA8C/E,CAAC"}
@@ -1,24 +1,24 @@
1
1
  import { useCallback, useEffect, useRef, useState } from "react";
2
- export const useParticipantStatus = (client) => {
3
- const [peerStatus, setParticipantStatusState] = useState("idle");
2
+ export const usePeerStatus = (client) => {
3
+ const [peerStatus, setPeerStatusState] = useState("idle");
4
4
  const peerStatusRef = useRef("idle");
5
- const setParticipantStatus = useCallback((status) => {
5
+ const setPeerStatus = useCallback((status) => {
6
6
  peerStatusRef.current = status;
7
- setParticipantStatusState(status);
8
- }, [setParticipantStatusState]);
9
- const getCurrentParticipantStatus = useCallback(() => peerStatusRef.current, []);
7
+ setPeerStatusState(status);
8
+ }, [setPeerStatusState]);
9
+ const getCurrentPeerStatus = useCallback(() => peerStatusRef.current, []);
10
10
  useEffect(() => {
11
11
  const setConnecting = () => {
12
- setParticipantStatus("connecting");
12
+ setPeerStatus("connecting");
13
13
  };
14
14
  const setError = () => {
15
- setParticipantStatus("error");
15
+ setPeerStatus("error");
16
16
  };
17
17
  const setJoined = () => {
18
- setParticipantStatus("connected");
18
+ setPeerStatus("connected");
19
19
  };
20
20
  const setDisconnected = () => {
21
- setParticipantStatus("idle");
21
+ setPeerStatus("idle");
22
22
  };
23
23
  client.on("connectionStarted", setConnecting);
24
24
  client.on("joined", setJoined);
@@ -34,6 +34,6 @@ export const useParticipantStatus = (client) => {
34
34
  client.off("connectionError", setError);
35
35
  client.off("disconnected", setDisconnected);
36
36
  };
37
- }, [client, setParticipantStatus]);
38
- return { peerStatus, getCurrentParticipantStatus };
37
+ }, [client, setPeerStatus]);
38
+ return { peerStatus, getCurrentPeerStatus };
39
39
  };
@@ -0,0 +1,10 @@
1
+ import type { PeerWithTracks } from "../types/public";
2
+ /**
3
+ *
4
+ * @category Connection
5
+ */
6
+ export declare function usePeers(): {
7
+ localPeer: PeerWithTracks | null;
8
+ peers: PeerWithTracks[];
9
+ };
10
+ //# sourceMappingURL=usePeers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePeers.d.ts","sourceRoot":"","sources":["../../src/hooks/usePeers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AActD;;;GAGG;AACH,wBAAgB,QAAQ;;;EAOvB"}
@@ -7,10 +7,13 @@ function getPeerWithDistinguishedTracks(peerState) {
7
7
  const screenShareAudioTrack = peerTracks.find(({ metadata }) => metadata?.type === "screenShareAudio");
8
8
  return { ...peerState, cameraTrack, microphoneTrack, screenShareVideoTrack, screenShareAudioTrack };
9
9
  }
10
- export function useParticipants() {
10
+ /**
11
+ *
12
+ * @category Connection
13
+ */
14
+ export function usePeers() {
11
15
  const { clientState } = useFishjamContext();
12
- const { localPeer, peers } = clientState;
13
- const localParticipant = localPeer ? getPeerWithDistinguishedTracks(localPeer) : null;
14
- const participants = Object.values(peers).map(getPeerWithDistinguishedTracks);
15
- return { localParticipant, participants };
16
+ const localPeer = clientState.localPeer ? getPeerWithDistinguishedTracks(clientState.localPeer) : null;
17
+ const peers = Object.values(clientState.peers).map(getPeerWithDistinguishedTracks);
18
+ return { localPeer, peers };
16
19
  }
@@ -1,3 +1,7 @@
1
1
  import type { ReconnectionStatus } from "@fishjam-cloud/ts-client";
2
+ /**
3
+ *
4
+ * @category Connection
5
+ */
2
6
  export declare const useReconnection: () => ReconnectionStatus;
3
7
  //# sourceMappingURL=useReconnection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useReconnection.d.ts","sourceRoot":"","sources":["../../src/hooks/useReconnection.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,eAAO,MAAM,eAAe,QAAO,kBA6BlC,CAAC"}
1
+ {"version":3,"file":"useReconnection.d.ts","sourceRoot":"","sources":["../../src/hooks/useReconnection.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEnE;;;GAGG;AACH,eAAO,MAAM,eAAe,QAAO,kBA6BlC,CAAC"}
@@ -1,5 +1,9 @@
1
1
  import { useEffect, useState } from "react";
2
2
  import { useFishjamContext } from "./useFishjamContext";
3
+ /**
4
+ *
5
+ * @category Connection
6
+ */
3
7
  export const useReconnection = () => {
4
8
  const { fishjamClientRef } = useFishjamContext();
5
9
  const [reconnectionStatus, setReconnectionStatus] = useState("idle");
@@ -1,3 +1,15 @@
1
- import type { ScreenshareApi } from "../types";
1
+ import type { FishjamClient } from "@fishjam-cloud/ts-client";
2
+ import type { ScreenshareApi } from "../types/public";
3
+ import type { PeerMetadata, TrackMetadata } from "../types/internal";
4
+ interface ScreenShareManagerProps {
5
+ fishjamClient: FishjamClient<PeerMetadata, TrackMetadata>;
6
+ }
7
+ /**
8
+ *
9
+ * @category Screenshare
10
+ */
11
+ export declare const useScreenShareManager: ({ fishjamClient }: ScreenShareManagerProps) => ScreenshareApi;
2
12
  export declare const useScreenShare: () => ScreenshareApi;
13
+ export declare const getTracksFromStream: (stream: MediaStream) => [MediaStreamTrack, MediaStreamTrack | null];
14
+ export {};
3
15
  //# sourceMappingURL=useScreenShare.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useScreenShare.d.ts","sourceRoot":"","sources":["../../src/hooks/useScreenShare.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAoB,MAAM,UAAU,CAAC;AAUjE,eAAO,MAAM,cAAc,QAAO,cA0IjC,CAAC"}
1
+ {"version":3,"file":"useScreenShare.d.ts","sourceRoot":"","sources":["../../src/hooks/useScreenShare.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,KAAK,EAAoB,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAoB,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGvF,UAAU,uBAAuB;IAC/B,aAAa,EAAE,aAAa,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;CAC3D;AAED;;;GAGG;AACH,eAAO,MAAM,qBAAqB,sBAAuB,uBAAuB,KAAG,cAmIlF,CAAC;AAEF,eAAO,MAAM,cAAc,sBAI1B,CAAC;AAEF,eAAO,MAAM,mBAAmB,WAAY,WAAW,KAAG,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAKnG,CAAC"}
@@ -1,45 +1,41 @@
1
- import { useCallback, useEffect, useRef } from "react";
1
+ import { useCallback, useEffect, useRef, useState } from "react";
2
2
  import { getRemoteOrLocalTrack } from "../utils/track";
3
3
  import { useFishjamContext } from "./useFishjamContext";
4
- const getTracks = (stream) => {
5
- const video = stream.getVideoTracks()[0];
6
- const audio = stream.getAudioTracks()[0] ?? null;
7
- return [video, audio];
8
- };
9
- export const useScreenShare = () => {
10
- const ctx = useFishjamContext();
11
- const [state, setState] = ctx.screenShareState;
4
+ /**
5
+ *
6
+ * @category Screenshare
7
+ */
8
+ export const useScreenShareManager = ({ fishjamClient }) => {
9
+ const [state, setState] = useState({ stream: null, trackIds: null });
12
10
  const cleanMiddlewareFnRef = useRef(null);
13
- const { fishjamClientRef } = useFishjamContext();
14
- const tsClient = fishjamClientRef.current;
15
11
  const stream = state.stream ?? null;
16
- const [videoTrack, audioTrack] = stream ? getTracks(stream) : [null, null];
17
- const getDisplayName = () => tsClient.getLocalPeer()?.metadata?.displayName;
12
+ const [videoTrack, audioTrack] = stream ? getTracksFromStream(stream) : [null, null];
13
+ const getDisplayName = () => fishjamClient.getLocalPeer()?.metadata?.peer?.displayName;
18
14
  const startStreaming = async (props) => {
19
15
  const stream = await navigator.mediaDevices.getDisplayMedia({
20
16
  video: props?.videoConstraints ?? true,
21
17
  audio: props?.audioConstraints ?? true,
22
18
  });
23
19
  const displayName = getDisplayName();
24
- let [video, audio] = getTracks(stream);
20
+ let [video, audio] = getTracksFromStream(stream);
25
21
  if (state.tracksMiddleware) {
26
22
  const { videoTrack, audioTrack, onClear } = state.tracksMiddleware(video, audio);
27
23
  video = videoTrack;
28
24
  audio = audioTrack;
29
25
  cleanMiddlewareFnRef.current = onClear;
30
26
  }
31
- const addTrackPromises = [tsClient.addTrack(video, { displayName, type: "screenShareVideo", paused: false })];
27
+ const addTrackPromises = [fishjamClient.addTrack(video, { displayName, type: "screenShareVideo", paused: false })];
32
28
  if (audio)
33
- addTrackPromises.push(tsClient.addTrack(audio, { displayName, type: "screenShareAudio", paused: false }));
29
+ addTrackPromises.push(fishjamClient.addTrack(audio, { displayName, type: "screenShareAudio", paused: false }));
34
30
  const [videoId, audioId] = await Promise.all(addTrackPromises);
35
31
  setState({ stream, trackIds: { videoId, audioId } });
36
32
  };
37
33
  const replaceTracks = async (newVideoTrack, newAudioTrack) => {
38
34
  if (!state?.stream)
39
35
  return;
40
- const addTrackPromises = [tsClient.replaceTrack(state.trackIds.videoId, newVideoTrack)];
36
+ const addTrackPromises = [fishjamClient.replaceTrack(state.trackIds.videoId, newVideoTrack)];
41
37
  if (newAudioTrack && state.trackIds.audioId) {
42
- addTrackPromises.push(tsClient.replaceTrack(state.trackIds.audioId, newAudioTrack));
38
+ addTrackPromises.push(fishjamClient.replaceTrack(state.trackIds.audioId, newAudioTrack));
43
39
  }
44
40
  await Promise.all(addTrackPromises);
45
41
  };
@@ -50,7 +46,7 @@ export const useScreenShare = () => {
50
46
  const setTracksMiddleware = async (middleware) => {
51
47
  if (!state?.stream)
52
48
  return;
53
- const [video, audio] = getTracks(state.stream);
49
+ const [video, audio] = getTracksFromStream(state.stream);
54
50
  cleanMiddleware();
55
51
  const { videoTrack, audioTrack, onClear } = middleware?.(video, audio) ?? {
56
52
  videoTrack: video,
@@ -65,22 +61,21 @@ export const useScreenShare = () => {
65
61
  console.warn("No stream to stop");
66
62
  return;
67
63
  }
68
- const [video, audio] = getTracks(state.stream);
64
+ const [video, audio] = getTracksFromStream(state.stream);
69
65
  video.stop();
70
66
  if (audio)
71
67
  audio.stop();
72
- const client = fishjamClientRef.current;
73
- const removeTrackPromises = [client.removeTrack(state.trackIds.videoId)];
68
+ const removeTrackPromises = [fishjamClient.removeTrack(state.trackIds.videoId)];
74
69
  if (state.trackIds.audioId)
75
- removeTrackPromises.push(client.removeTrack(state.trackIds.audioId));
70
+ removeTrackPromises.push(fishjamClient.removeTrack(state.trackIds.audioId));
76
71
  await Promise.all(removeTrackPromises);
77
72
  cleanMiddleware();
78
73
  setState(({ tracksMiddleware }) => ({ stream: null, trackIds: null, tracksMiddleware }));
79
- }, [state, fishjamClientRef, setState, cleanMiddleware]);
74
+ }, [state, fishjamClient, setState, cleanMiddleware]);
80
75
  useEffect(() => {
81
76
  if (!state.stream)
82
77
  return;
83
- const [video, audio] = getTracks(state.stream);
78
+ const [video, audio] = getTracksFromStream(state.stream);
84
79
  const trackEndedHandler = () => {
85
80
  stopStreaming();
86
81
  };
@@ -92,19 +87,18 @@ export const useScreenShare = () => {
92
87
  };
93
88
  }, [state, stopStreaming]);
94
89
  useEffect(() => {
95
- const client = fishjamClientRef.current;
96
90
  const onDisconnected = () => {
97
91
  if (stream) {
98
92
  stopStreaming();
99
93
  }
100
94
  };
101
- client.on("disconnected", onDisconnected);
95
+ fishjamClient.on("disconnected", onDisconnected);
102
96
  return () => {
103
- client.removeListener("disconnected", onDisconnected);
97
+ fishjamClient.removeListener("disconnected", onDisconnected);
104
98
  };
105
- }, [stopStreaming, fishjamClientRef, stream]);
106
- const videoBroadcast = state.stream ? getRemoteOrLocalTrack(tsClient, state.trackIds.videoId) : null;
107
- const audioBroadcast = state.trackIds?.audioId ? getRemoteOrLocalTrack(tsClient, state.trackIds.audioId) : null;
99
+ }, [stopStreaming, fishjamClient, stream]);
100
+ const videoBroadcast = state.stream ? getRemoteOrLocalTrack(fishjamClient, state.trackIds.videoId) : null;
101
+ const audioBroadcast = state.trackIds?.audioId ? getRemoteOrLocalTrack(fishjamClient, state.trackIds.audioId) : null;
108
102
  return {
109
103
  startStreaming,
110
104
  stopStreaming,
@@ -117,3 +111,12 @@ export const useScreenShare = () => {
117
111
  currentTracksMiddleware: state?.tracksMiddleware ?? null,
118
112
  };
119
113
  };
114
+ export const useScreenShare = () => {
115
+ const { screenShareManager } = useFishjamContext();
116
+ return screenShareManager;
117
+ };
118
+ export const getTracksFromStream = (stream) => {
119
+ const video = stream.getVideoTracks()[0];
120
+ const audio = stream.getAudioTracks()[0] ?? null;
121
+ return [video, audio];
122
+ };
@@ -1,2 +1,6 @@
1
- export declare function useStatus(): import("..").ParticipantStatus;
1
+ /**
2
+ *
3
+ * @category Connection
4
+ */
5
+ export declare function useStatus(): import("..").PeerStatus;
2
6
  //# sourceMappingURL=useStatus.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useStatus.d.ts","sourceRoot":"","sources":["../../src/hooks/useStatus.ts"],"names":[],"mappings":"AAEA,wBAAgB,SAAS,mCAExB"}
1
+ {"version":3,"file":"useStatus.d.ts","sourceRoot":"","sources":["../../src/hooks/useStatus.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,SAAS,4BAExB"}
@@ -1,4 +1,8 @@
1
1
  import { useFishjamContext } from "./useFishjamContext";
2
+ /**
3
+ *
4
+ * @category Connection
5
+ */
2
6
  export function useStatus() {
3
7
  return useFishjamContext().peerStatus;
4
8
  }
@@ -1,11 +1,11 @@
1
1
  import type { FishjamClient } from "@fishjam-cloud/ts-client";
2
- import type { MediaManager, PeerMetadata, TrackManager, TrackMetadata } from "../types";
3
- import type { ParticipantStatus } from "../state.types";
2
+ import type { MediaManager, PeerMetadata, TrackManager, TrackMetadata } from "../types/internal";
3
+ import type { PeerStatus } from "../types/public";
4
4
  interface TrackManagerConfig {
5
5
  mediaManager: MediaManager;
6
6
  tsClient: FishjamClient<PeerMetadata, TrackMetadata>;
7
- getCurrentParticipantStatus: () => ParticipantStatus;
7
+ getCurrentPeerStatus: () => PeerStatus;
8
8
  }
9
- export declare const useTrackManager: ({ mediaManager, tsClient, getCurrentParticipantStatus, }: TrackManagerConfig) => TrackManager;
9
+ export declare const useTrackManager: ({ mediaManager, tsClient, getCurrentPeerStatus }: TrackManagerConfig) => TrackManager;
10
10
  export {};
11
11
  //# sourceMappingURL=useTrackManager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useTrackManager.d.ts","sourceRoot":"","sources":["../../src/hooks/useTrackManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAwC,MAAM,0BAA0B,CAAC;AACpG,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAc,YAAY,EAAE,aAAa,EAAmB,MAAM,UAAU,CAAC;AAGrH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,UAAU,kBAAkB;IAC1B,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,EAAE,aAAa,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;IACrD,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;CACtD;AAOD,eAAO,MAAM,eAAe,6DAIzB,kBAAkB,KAAG,YA2MvB,CAAC"}
1
+ {"version":3,"file":"useTrackManager.d.ts","sourceRoot":"","sources":["../../src/hooks/useTrackManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAwC,MAAM,0BAA0B,CAAC;AACpG,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGjG,OAAO,KAAK,EAAE,UAAU,EAAmB,MAAM,iBAAiB,CAAC;AAEnE,UAAU,kBAAkB;IAC1B,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,EAAE,aAAa,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;IACrD,oBAAoB,EAAE,MAAM,UAAU,CAAC;CACxC;AASD,eAAO,MAAM,eAAe,qDAAsD,kBAAkB,KAAG,YA0LtG,CAAC"}