@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.
- package/dist/DeviceManager.d.ts +33 -17
- package/dist/DeviceManager.d.ts.map +1 -1
- package/dist/DeviceManager.js +126 -97
- package/dist/constraints.d.ts +2 -3
- package/dist/constraints.d.ts.map +1 -1
- package/dist/constraints.js +9 -10
- package/dist/devices/MiddlewareManager.d.ts +9 -0
- package/dist/devices/MiddlewareManager.d.ts.map +1 -0
- package/dist/devices/MiddlewareManager.js +26 -0
- package/dist/fishjamProvider.d.ts +8 -6
- package/dist/fishjamProvider.d.ts.map +1 -1
- package/dist/fishjamProvider.js +27 -11
- package/dist/hooks/deviceManagers/useDeviceManager.d.ts +1 -1
- package/dist/hooks/deviceManagers/useDeviceManager.d.ts.map +1 -1
- package/dist/hooks/deviceManagers/useDeviceManager.js +2 -2
- package/dist/hooks/{useDevices.d.ts → devices.d.ts} +14 -2
- package/dist/hooks/devices.d.ts.map +1 -0
- package/dist/hooks/{useDevices.js → devices.js} +29 -15
- package/dist/hooks/public.d.ts +2 -4
- package/dist/hooks/public.d.ts.map +1 -1
- package/dist/hooks/public.js +2 -4
- package/dist/hooks/useConnection.d.ts +10 -2
- package/dist/hooks/useConnection.d.ts.map +1 -1
- package/dist/hooks/useConnection.js +8 -0
- package/dist/hooks/useFishjamClientState.d.ts +1 -2
- package/dist/hooks/useFishjamClientState.d.ts.map +1 -1
- package/dist/hooks/useFishjamClientState.js +0 -4
- package/dist/hooks/useFishjamClient_DO_NOT_USE.d.ts +6 -1
- package/dist/hooks/useFishjamClient_DO_NOT_USE.d.ts.map +1 -1
- package/dist/hooks/useFishjamClient_DO_NOT_USE.js +5 -0
- package/dist/hooks/useFishjamContext.d.ts +4 -4
- package/dist/hooks/useFishjamContext.d.ts.map +1 -1
- package/dist/hooks/usePeerStatus.d.ts +8 -0
- package/dist/hooks/usePeerStatus.d.ts.map +1 -0
- package/dist/hooks/{useParticipantStatus.js → usePeerStatus.js} +12 -12
- package/dist/hooks/usePeers.d.ts +10 -0
- package/dist/hooks/usePeers.d.ts.map +1 -0
- package/dist/hooks/{useParticipants.js → usePeers.js} +8 -5
- package/dist/hooks/useReconnection.d.ts +4 -0
- package/dist/hooks/useReconnection.d.ts.map +1 -1
- package/dist/hooks/useReconnection.js +4 -0
- package/dist/hooks/useScreenShare.d.ts +13 -1
- package/dist/hooks/useScreenShare.d.ts.map +1 -1
- package/dist/hooks/useScreenShare.js +34 -31
- package/dist/hooks/useStatus.d.ts +5 -1
- package/dist/hooks/useStatus.d.ts.map +1 -1
- package/dist/hooks/useStatus.js +4 -0
- package/dist/hooks/useTrackManager.d.ts +4 -4
- package/dist/hooks/useTrackManager.d.ts.map +1 -1
- package/dist/hooks/useTrackManager.js +32 -47
- package/dist/index.d.ts +3 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -3
- package/dist/mediaInitializer.d.ts +2 -2
- package/dist/mediaInitializer.d.ts.map +1 -1
- package/dist/mediaInitializer.js +30 -1
- package/dist/types/internal.d.ts +119 -0
- package/dist/types/internal.d.ts.map +1 -0
- package/dist/types/public.d.ts +65 -0
- package/dist/types/public.d.ts.map +1 -0
- package/dist/utils/errors.d.ts +1 -1
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/localStorage.d.ts +3 -4
- package/dist/utils/localStorage.d.ts.map +1 -1
- package/dist/utils/localStorage.js +18 -4
- package/dist/utils/track.d.ts +3 -2
- package/dist/utils/track.d.ts.map +1 -1
- package/dist/utils/track.js +8 -2
- package/package.json +7 -7
- package/readme.md +20 -118
- package/dist/hooks/deviceManagers/useAudioDeviceManager.d.ts +0 -2
- package/dist/hooks/deviceManagers/useAudioDeviceManager.d.ts.map +0 -1
- package/dist/hooks/deviceManagers/useAudioDeviceManager.js +0 -7
- package/dist/hooks/deviceManagers/useVideoDeviceManager.d.ts +0 -2
- package/dist/hooks/deviceManagers/useVideoDeviceManager.d.ts.map +0 -1
- package/dist/hooks/deviceManagers/useVideoDeviceManager.js +0 -7
- package/dist/hooks/useDevices.d.ts.map +0 -1
- package/dist/hooks/useParticipantStatus.d.ts +0 -8
- package/dist/hooks/useParticipantStatus.d.ts.map +0 -1
- package/dist/hooks/useParticipants.d.ts +0 -6
- package/dist/hooks/useParticipants.d.ts.map +0 -1
- package/dist/hooks/useProcessedPreviewStream.d.ts +0 -3
- package/dist/hooks/useProcessedPreviewStream.d.ts.map +0 -1
- package/dist/hooks/useProcessedPreviewStream.js +0 -17
- package/dist/state.types.d.ts +0 -42
- package/dist/state.types.d.ts.map +0 -1
- package/dist/types.d.ts +0 -255
- package/dist/types.d.ts.map +0 -1
- package/dist/utils/media.d.ts +0 -12
- package/dist/utils/media.d.ts.map +0 -1
- package/dist/utils/media.js +0 -64
- /package/dist/{state.types.js → types/internal.js} +0 -0
- /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 } =
|
|
11
|
+
const { videoTrackManager, videoDeviceManagerRef } = useFishjamContext();
|
|
12
|
+
const { deviceState, status } = useDeviceManager(videoDeviceManagerRef.current);
|
|
11
13
|
const { currentTrack, ...trackManager } = videoTrackManager;
|
|
12
|
-
const
|
|
13
|
-
const
|
|
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 } =
|
|
38
|
+
const { audioTrackManager, audioDeviceManagerRef } = useFishjamContext();
|
|
39
|
+
const { deviceState, status } = useDeviceManager(audioDeviceManagerRef.current);
|
|
32
40
|
const { currentTrack, ...trackManager } = audioTrackManager;
|
|
33
|
-
const
|
|
34
|
-
const
|
|
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(
|
|
62
|
-
audio: audioManager.getConstraints(
|
|
75
|
+
video: videoManager.getConstraints(),
|
|
76
|
+
audio: audioManager.getConstraints(),
|
|
63
77
|
};
|
|
64
78
|
const previousDevices = {
|
|
65
79
|
video: videoManager.getLastDevice(),
|
package/dist/hooks/public.d.ts
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
export { useConnect, useDisconnect } from "./useConnection";
|
|
2
2
|
export { useReconnection } from "./useReconnection";
|
|
3
|
-
export { useCamera, useMicrophone, useInitializeDevices } from "./
|
|
4
|
-
export {
|
|
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,
|
|
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"}
|
package/dist/hooks/public.js
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
export { useConnect, useDisconnect } from "./useConnection";
|
|
2
2
|
export { useReconnection } from "./useReconnection";
|
|
3
|
-
export { useCamera, useMicrophone, useInitializeDevices } from "./
|
|
4
|
-
export {
|
|
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 {
|
|
2
|
-
|
|
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":"
|
|
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,
|
|
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
|
-
|
|
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,
|
|
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,
|
|
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
|
-
|
|
13
|
-
peerStatus:
|
|
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,
|
|
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
|
|
3
|
-
const [peerStatus,
|
|
2
|
+
export const usePeerStatus = (client) => {
|
|
3
|
+
const [peerStatus, setPeerStatusState] = useState("idle");
|
|
4
4
|
const peerStatusRef = useRef("idle");
|
|
5
|
-
const
|
|
5
|
+
const setPeerStatus = useCallback((status) => {
|
|
6
6
|
peerStatusRef.current = status;
|
|
7
|
-
|
|
8
|
-
}, [
|
|
9
|
-
const
|
|
7
|
+
setPeerStatusState(status);
|
|
8
|
+
}, [setPeerStatusState]);
|
|
9
|
+
const getCurrentPeerStatus = useCallback(() => peerStatusRef.current, []);
|
|
10
10
|
useEffect(() => {
|
|
11
11
|
const setConnecting = () => {
|
|
12
|
-
|
|
12
|
+
setPeerStatus("connecting");
|
|
13
13
|
};
|
|
14
14
|
const setError = () => {
|
|
15
|
-
|
|
15
|
+
setPeerStatus("error");
|
|
16
16
|
};
|
|
17
17
|
const setJoined = () => {
|
|
18
|
-
|
|
18
|
+
setPeerStatus("connected");
|
|
19
19
|
};
|
|
20
20
|
const setDisconnected = () => {
|
|
21
|
-
|
|
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,
|
|
38
|
-
return { peerStatus,
|
|
37
|
+
}, [client, setPeerStatus]);
|
|
38
|
+
return { peerStatus, getCurrentPeerStatus };
|
|
39
39
|
};
|
|
@@ -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
|
-
|
|
10
|
+
/**
|
|
11
|
+
*
|
|
12
|
+
* @category Connection
|
|
13
|
+
*/
|
|
14
|
+
export function usePeers() {
|
|
11
15
|
const { clientState } = useFishjamContext();
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
|
|
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 +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 {
|
|
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":"
|
|
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
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
}
|
|
9
|
-
|
|
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 ?
|
|
17
|
-
const getDisplayName = () =>
|
|
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] =
|
|
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 = [
|
|
27
|
+
const addTrackPromises = [fishjamClient.addTrack(video, { displayName, type: "screenShareVideo", paused: false })];
|
|
32
28
|
if (audio)
|
|
33
|
-
addTrackPromises.push(
|
|
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 = [
|
|
36
|
+
const addTrackPromises = [fishjamClient.replaceTrack(state.trackIds.videoId, newVideoTrack)];
|
|
41
37
|
if (newAudioTrack && state.trackIds.audioId) {
|
|
42
|
-
addTrackPromises.push(
|
|
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] =
|
|
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] =
|
|
64
|
+
const [video, audio] = getTracksFromStream(state.stream);
|
|
69
65
|
video.stop();
|
|
70
66
|
if (audio)
|
|
71
67
|
audio.stop();
|
|
72
|
-
const
|
|
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(
|
|
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,
|
|
74
|
+
}, [state, fishjamClient, setState, cleanMiddleware]);
|
|
80
75
|
useEffect(() => {
|
|
81
76
|
if (!state.stream)
|
|
82
77
|
return;
|
|
83
|
-
const [video, audio] =
|
|
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
|
-
|
|
95
|
+
fishjamClient.on("disconnected", onDisconnected);
|
|
102
96
|
return () => {
|
|
103
|
-
|
|
97
|
+
fishjamClient.removeListener("disconnected", onDisconnected);
|
|
104
98
|
};
|
|
105
|
-
}, [stopStreaming,
|
|
106
|
-
const videoBroadcast = state.stream ? getRemoteOrLocalTrack(
|
|
107
|
-
const audioBroadcast = state.trackIds?.audioId ? getRemoteOrLocalTrack(
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useStatus.d.ts","sourceRoot":"","sources":["../../src/hooks/useStatus.ts"],"names":[],"mappings":"AAEA,wBAAgB,SAAS,
|
|
1
|
+
{"version":3,"file":"useStatus.d.ts","sourceRoot":"","sources":["../../src/hooks/useStatus.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,SAAS,4BAExB"}
|
package/dist/hooks/useStatus.js
CHANGED
|
@@ -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 {
|
|
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
|
-
|
|
7
|
+
getCurrentPeerStatus: () => PeerStatus;
|
|
8
8
|
}
|
|
9
|
-
export declare const useTrackManager: ({ mediaManager, tsClient,
|
|
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,
|
|
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"}
|