@fishjam-cloud/react-client 0.5.5 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Client.d.ts +2 -2
- package/dist/Client.d.ts.map +1 -1
- package/dist/fishjamProvider.d.ts +12 -0
- package/dist/fishjamProvider.d.ts.map +1 -0
- package/dist/fishjamProvider.js +30 -0
- package/dist/hooks/clientState.d.ts +4 -0
- package/dist/hooks/clientState.d.ts.map +1 -0
- package/dist/hooks/clientState.js +81 -0
- package/dist/hooks/connection.d.ts +6 -0
- package/dist/hooks/connection.d.ts.map +1 -0
- package/dist/hooks/connection.js +28 -0
- package/dist/hooks/devices.d.ts +4 -0
- package/dist/hooks/devices.d.ts.map +1 -0
- package/dist/hooks/devices.js +9 -0
- package/dist/hooks/fishjamContext.d.ts +4 -0
- package/dist/hooks/fishjamContext.d.ts.map +1 -0
- package/dist/hooks/fishjamContext.js +8 -0
- package/dist/hooks/participants.d.ts +6 -0
- package/dist/hooks/participants.d.ts.map +1 -0
- package/dist/hooks/participants.js +13 -0
- package/dist/hooks/public.d.ts +7 -0
- package/dist/hooks/public.d.ts.map +1 -0
- package/dist/hooks/public.js +6 -0
- package/dist/hooks/screenShare.d.ts +3 -0
- package/dist/hooks/screenShare.d.ts.map +1 -0
- package/dist/{screenShareTrackManager.js → hooks/screenShare.js} +6 -4
- package/dist/hooks/setupMedia.d.ts +3 -0
- package/dist/hooks/setupMedia.d.ts.map +1 -0
- package/dist/hooks/setupMedia.js +200 -0
- package/dist/hooks/state.d.ts +6 -0
- package/dist/hooks/state.d.ts.map +1 -0
- package/dist/hooks/state.js +15 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/trackManager.js +11 -11
- package/dist/types.d.ts +7 -9
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -4
- package/dist/create.d.ts +0 -10
- package/dist/create.d.ts.map +0 -1
- package/dist/create.js +0 -195
- package/dist/screenShareTrackManager.d.ts +0 -4
- package/dist/screenShareTrackManager.d.ts.map +0 -1
- package/dist/useSetupMedia.d.ts +0 -3
- package/dist/useSetupMedia.d.ts.map +0 -1
- package/dist/useSetupMedia.js +0 -201
package/dist/Client.d.ts
CHANGED
|
@@ -153,7 +153,7 @@ export interface ClientEvents {
|
|
|
153
153
|
localTrackMetadataChanged: (event: Parameters<MessageEvents<PeerMetadata, TrackMetadata>["localTrackMetadataChanged"]>[0], client: ClientApi) => void;
|
|
154
154
|
disconnectRequested: (event: Parameters<MessageEvents<PeerMetadata, TrackMetadata>["disconnectRequested"]>[0], client: ClientApi) => void;
|
|
155
155
|
}
|
|
156
|
-
export type
|
|
156
|
+
export type ReactClientCreateConfig = {
|
|
157
157
|
clientConfig?: CreateConfig<PeerMetadata, TrackMetadata>;
|
|
158
158
|
deviceManagerDefaultConfig?: DeviceManagerConfig;
|
|
159
159
|
};
|
|
@@ -173,7 +173,7 @@ export declare class Client extends Client_base {
|
|
|
173
173
|
videoDeviceManager: DeviceManager;
|
|
174
174
|
audioDeviceManager: DeviceManager;
|
|
175
175
|
private initialized;
|
|
176
|
-
constructor(config?:
|
|
176
|
+
constructor(config?: ReactClientCreateConfig);
|
|
177
177
|
setDeviceManagerConfig(config: DeviceManagerConfig): void;
|
|
178
178
|
private trackContextToTrack;
|
|
179
179
|
getTsClient: () => FishjamClient<PeerMetadata, TrackMetadata>;
|
package/dist/Client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Client.d.ts","sourceRoot":"","sources":["../src/Client.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Client.d.ts","sourceRoot":"","sources":["../src/Client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { PropsWithChildren } from "react";
|
|
2
|
+
import type { DeviceManagerConfig } from "./types";
|
|
3
|
+
import type { ReconnectConfig } from "@fishjam-cloud/ts-client";
|
|
4
|
+
interface FishjamProviderProps extends PropsWithChildren {
|
|
5
|
+
config?: {
|
|
6
|
+
reconnect?: ReconnectConfig | boolean;
|
|
7
|
+
};
|
|
8
|
+
deviceManagerDefaultConfig?: DeviceManagerConfig;
|
|
9
|
+
}
|
|
10
|
+
export declare function FishjamProvider({ children, config, deviceManagerDefaultConfig }: FishjamProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=fishjamProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fishjamProvider.d.ts","sourceRoot":"","sources":["../src/fishjamProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAI/C,OAAO,KAAK,EAAE,mBAAmB,EAAoB,MAAM,SAAS,CAAC;AAErE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAGhE,UAAU,oBAAqB,SAAQ,iBAAiB;IACtD,MAAM,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,eAAe,GAAG,OAAO,CAAA;KAAE,CAAC;IACnD,0BAA0B,CAAC,EAAE,mBAAmB,CAAC;CAClD;AAED,wBAAgB,eAAe,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,0BAA0B,EAAE,EAAE,oBAAoB,2CAmCrG"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useRef, useState } from "react";
|
|
3
|
+
import { Client } from "./Client";
|
|
4
|
+
import { useTrackManager } from "./trackManager";
|
|
5
|
+
import { useClientState } from "./hooks/clientState";
|
|
6
|
+
import { FishjamContext } from "./hooks/fishjamContext";
|
|
7
|
+
export function FishjamProvider({ children, config, deviceManagerDefaultConfig }) {
|
|
8
|
+
const client = useRef(new Client({
|
|
9
|
+
clientConfig: config,
|
|
10
|
+
deviceManagerDefaultConfig,
|
|
11
|
+
}));
|
|
12
|
+
// TODO: do the same for client config or just remove the Client class
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
if (!deviceManagerDefaultConfig)
|
|
15
|
+
return;
|
|
16
|
+
client.current.setDeviceManagerConfig(deviceManagerDefaultConfig);
|
|
17
|
+
}, [deviceManagerDefaultConfig]);
|
|
18
|
+
const state = useClientState(client.current);
|
|
19
|
+
const tsClient = client.current.getTsClient();
|
|
20
|
+
const screenshareState = useState(null);
|
|
21
|
+
const videoTrackManager = useTrackManager({
|
|
22
|
+
mediaManager: client.current.videoDeviceManager,
|
|
23
|
+
tsClient,
|
|
24
|
+
});
|
|
25
|
+
const audioTrackManager = useTrackManager({
|
|
26
|
+
mediaManager: client.current.audioDeviceManager,
|
|
27
|
+
tsClient,
|
|
28
|
+
});
|
|
29
|
+
return (_jsx(FishjamContext.Provider, { value: { state, screenshareState, videoTrackManager, audioTrackManager }, children: children }));
|
|
30
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clientState.d.ts","sourceRoot":"","sources":["../../src/hooks/clientState.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAmDxC,eAAO,MAAM,cAAc,WAAY,MAAM,UAwC5C,CAAC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { useCallback, useRef, useSyncExternalStore } from "react";
|
|
2
|
+
const eventNames = [
|
|
3
|
+
"socketOpen",
|
|
4
|
+
"socketError",
|
|
5
|
+
"socketClose",
|
|
6
|
+
"authSuccess",
|
|
7
|
+
"authError",
|
|
8
|
+
"disconnected",
|
|
9
|
+
"joined",
|
|
10
|
+
"joinError",
|
|
11
|
+
"peerJoined",
|
|
12
|
+
"peerUpdated",
|
|
13
|
+
"peerLeft",
|
|
14
|
+
"reconnected",
|
|
15
|
+
"reconnectionRetriesLimitReached",
|
|
16
|
+
"reconnectionStarted",
|
|
17
|
+
"componentAdded",
|
|
18
|
+
"componentUpdated",
|
|
19
|
+
"componentRemoved",
|
|
20
|
+
"trackReady",
|
|
21
|
+
"trackAdded",
|
|
22
|
+
"trackRemoved",
|
|
23
|
+
"trackUpdated",
|
|
24
|
+
"bandwidthEstimationChanged",
|
|
25
|
+
"encodingChanged",
|
|
26
|
+
"voiceActivityChanged",
|
|
27
|
+
"deviceDisabled",
|
|
28
|
+
"deviceEnabled",
|
|
29
|
+
"managerInitialized",
|
|
30
|
+
"managerStarted",
|
|
31
|
+
"deviceStopped",
|
|
32
|
+
"deviceReady",
|
|
33
|
+
"devicesStarted",
|
|
34
|
+
"devicesReady",
|
|
35
|
+
"error",
|
|
36
|
+
"targetTrackEncodingRequested",
|
|
37
|
+
"localTrackAdded",
|
|
38
|
+
"localTrackRemoved",
|
|
39
|
+
"localTrackReplaced",
|
|
40
|
+
"localTrackMuted",
|
|
41
|
+
"localTrackUnmuted",
|
|
42
|
+
"localTrackBandwidthSet",
|
|
43
|
+
"localTrackEncodingBandwidthSet",
|
|
44
|
+
"localTrackEncodingEnabled",
|
|
45
|
+
"localTrackEncodingDisabled",
|
|
46
|
+
"localPeerMetadataChanged",
|
|
47
|
+
"localTrackMetadataChanged",
|
|
48
|
+
"disconnectRequested",
|
|
49
|
+
];
|
|
50
|
+
export const useClientState = (client) => {
|
|
51
|
+
const mutationRef = useRef(false);
|
|
52
|
+
const subscribe = useCallback((subscribeCallback) => {
|
|
53
|
+
const callback = () => {
|
|
54
|
+
mutationRef.current = true;
|
|
55
|
+
subscribeCallback();
|
|
56
|
+
};
|
|
57
|
+
eventNames.forEach((eventName) => client.on(eventName, callback));
|
|
58
|
+
return () => {
|
|
59
|
+
eventNames.forEach((eventName) => client.removeListener(eventName, callback));
|
|
60
|
+
};
|
|
61
|
+
}, [client]);
|
|
62
|
+
const lastSnapshotRef = useRef(null);
|
|
63
|
+
const getSnapshot = useCallback(() => {
|
|
64
|
+
if (mutationRef.current || lastSnapshotRef.current === null) {
|
|
65
|
+
lastSnapshotRef.current = {
|
|
66
|
+
remote: client.peers,
|
|
67
|
+
media: client.media,
|
|
68
|
+
bandwidthEstimation: client.bandwidthEstimation,
|
|
69
|
+
tracks: client.peersTracks,
|
|
70
|
+
local: client.local,
|
|
71
|
+
status: client.status,
|
|
72
|
+
devices: client.devices,
|
|
73
|
+
client: client,
|
|
74
|
+
reconnectionStatus: client.reconnectionStatus,
|
|
75
|
+
};
|
|
76
|
+
mutationRef.current = false;
|
|
77
|
+
}
|
|
78
|
+
return lastSnapshotRef.current;
|
|
79
|
+
}, [client]);
|
|
80
|
+
return useSyncExternalStore(subscribe, getSnapshot);
|
|
81
|
+
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { UseConnect } from "../types";
|
|
2
|
+
import type { UseReconnection } from "../state.types";
|
|
3
|
+
export declare function useConnect(): UseConnect;
|
|
4
|
+
export declare function useDisconnect(): () => void;
|
|
5
|
+
export declare function useReconnection(): UseReconnection;
|
|
6
|
+
//# sourceMappingURL=connection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/hooks/connection.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAsB,UAAU,EAAE,MAAM,UAAU,CAAC;AAE/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,wBAAgB,UAAU,IAAI,UAAU,CAWvC;AAED,wBAAgB,aAAa,eAM5B;AAED,wBAAgB,eAAe,IAAI,eAAe,CASjD"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { useFishjamContext } from "./fishjamContext";
|
|
2
|
+
import { useCallback, useMemo } from "react";
|
|
3
|
+
export function useConnect() {
|
|
4
|
+
const { state } = useFishjamContext();
|
|
5
|
+
return useMemo(() => {
|
|
6
|
+
return (config) => {
|
|
7
|
+
state.client.connect(config);
|
|
8
|
+
return () => {
|
|
9
|
+
state.client.disconnect();
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
}, [state.client]);
|
|
13
|
+
}
|
|
14
|
+
export function useDisconnect() {
|
|
15
|
+
const { state } = useFishjamContext();
|
|
16
|
+
return useCallback(() => {
|
|
17
|
+
state.client.disconnect();
|
|
18
|
+
}, [state.client]);
|
|
19
|
+
}
|
|
20
|
+
export function useReconnection() {
|
|
21
|
+
const { state } = useFishjamContext();
|
|
22
|
+
return {
|
|
23
|
+
status: state.reconnectionStatus,
|
|
24
|
+
isReconnecting: state.reconnectionStatus === "reconnecting",
|
|
25
|
+
isError: state.reconnectionStatus === "error",
|
|
26
|
+
isIdle: state.reconnectionStatus === "idle",
|
|
27
|
+
};
|
|
28
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devices.d.ts","sourceRoot":"","sources":["../../src/hooks/devices.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE3D,wBAAgB,SAAS,IAAI,YAAY,GAAG,YAAY,CAGvD;AAED,wBAAgB,aAAa,IAAI,YAAY,GAAG,YAAY,CAG3D"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { useFishjamContext } from "./fishjamContext";
|
|
2
|
+
export function useCamera() {
|
|
3
|
+
const { state, videoTrackManager } = useFishjamContext();
|
|
4
|
+
return { ...state.devices.camera, ...videoTrackManager };
|
|
5
|
+
}
|
|
6
|
+
export function useMicrophone() {
|
|
7
|
+
const { state, audioTrackManager } = useFishjamContext();
|
|
8
|
+
return { ...state.devices.microphone, ...audioTrackManager };
|
|
9
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fishjamContext.d.ts","sourceRoot":"","sources":["../../src/hooks/fishjamContext.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAEnD,eAAO,MAAM,cAAc,oDAAiD,CAAC;AAE7E,wBAAgB,iBAAiB,IAGb,kBAAkB,CACrC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { createContext, useContext } from "react";
|
|
2
|
+
export const FishjamContext = createContext(null);
|
|
3
|
+
export function useFishjamContext() {
|
|
4
|
+
const context = useContext(FishjamContext);
|
|
5
|
+
if (!context)
|
|
6
|
+
throw new Error("useFishjamContext must be used within a FishjamContextProvider");
|
|
7
|
+
return context;
|
|
8
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"participants.d.ts","sourceRoot":"","sources":["../../src/hooks/participants.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAWpD,wBAAgB,eAAe;;;EAQ9B"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { useFishjamContext } from "./fishjamContext";
|
|
2
|
+
function getPeerWithDistinguishedTracks(peerState) {
|
|
3
|
+
const localTracks = Object.values(peerState.tracks ?? {});
|
|
4
|
+
const videoTracks = localTracks.filter(({ track }) => track?.kind === "video");
|
|
5
|
+
const audioTracks = localTracks.filter(({ track }) => track?.kind === "audio");
|
|
6
|
+
return { ...peerState, videoTracks, audioTracks };
|
|
7
|
+
}
|
|
8
|
+
export function useParticipants() {
|
|
9
|
+
const { state } = useFishjamContext();
|
|
10
|
+
const localParticipant = state.local ? getPeerWithDistinguishedTracks(state.local) : null;
|
|
11
|
+
const participants = Object.values(state.remote).map(getPeerWithDistinguishedTracks);
|
|
12
|
+
return { localParticipant, participants };
|
|
13
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { useConnect, useDisconnect, useReconnection } from "./connection";
|
|
2
|
+
export { useCamera, useMicrophone } from "./devices";
|
|
3
|
+
export { useParticipants } from "./participants";
|
|
4
|
+
export { useScreenShare } from "./screenShare";
|
|
5
|
+
export { useSelector, useStatus, useTracks, useClient } from "./state";
|
|
6
|
+
export { useSetupMedia } from "./setupMedia";
|
|
7
|
+
//# sourceMappingURL=public.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../src/hooks/public.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { useConnect, useDisconnect, useReconnection } from "./connection";
|
|
2
|
+
export { useCamera, useMicrophone } from "./devices";
|
|
3
|
+
export { useParticipants } from "./participants";
|
|
4
|
+
export { useScreenShare } from "./screenShare";
|
|
5
|
+
export { useSelector, useStatus, useTracks, useClient } from "./state";
|
|
6
|
+
export { useSetupMedia } from "./setupMedia";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screenShare.d.ts","sourceRoot":"","sources":["../../src/hooks/screenShare.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAoB,MAAM,UAAU,CAAC;AAUjE,eAAO,MAAM,cAAc,QAAO,cAwGjC,CAAC"}
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import { useCallback, useEffect } from "react";
|
|
2
|
-
import { getRemoteOrLocalTrack } from "
|
|
2
|
+
import { getRemoteOrLocalTrack } from "../utils/track";
|
|
3
|
+
import { useFishjamContext } from "./fishjamContext";
|
|
3
4
|
const getTracks = (stream) => {
|
|
4
5
|
const video = stream.getVideoTracks()[0];
|
|
5
6
|
const audio = stream.getAudioTracks()[0] ?? null;
|
|
6
7
|
return [video, audio];
|
|
7
8
|
};
|
|
8
|
-
export const useScreenShare = (
|
|
9
|
-
|
|
10
|
-
[state, setState]
|
|
9
|
+
export const useScreenShare = () => {
|
|
10
|
+
const ctx = useFishjamContext();
|
|
11
|
+
const [state, setState] = ctx.screenshareState;
|
|
12
|
+
const tsClient = ctx.state.client.getTsClient();
|
|
11
13
|
const startStreaming = async (props) => {
|
|
12
14
|
const stream = await navigator.mediaDevices.getDisplayMedia({
|
|
13
15
|
video: props?.videoConstraints ?? true,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setupMedia.d.ts","sourceRoot":"","sources":["../../src/hooks/setupMedia.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAYzE,eAAO,MAAM,aAAa,WAAY,mBAAmB,KAAG,mBA6O3D,CAAC"}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { useEffect, useMemo, useRef } from "react";
|
|
2
|
+
import { useFishjamContext } from "./fishjamContext";
|
|
3
|
+
const isBroadcastedTrackChanged = (client, pending) => client.status === "joined" && !pending && !client.isReconnecting();
|
|
4
|
+
const isBroadcastedTrackStopped = (status, stream) => status === "joined" && stream;
|
|
5
|
+
export const useSetupMedia = (config) => {
|
|
6
|
+
const { state, videoTrackManager, audioTrackManager } = useFishjamContext();
|
|
7
|
+
const configRef = useRef(config);
|
|
8
|
+
useEffect(() => {
|
|
9
|
+
configRef.current = config;
|
|
10
|
+
state.client.setDeviceManagerConfig({
|
|
11
|
+
storage: config.storage,
|
|
12
|
+
});
|
|
13
|
+
}, [config, state.client]);
|
|
14
|
+
useEffect(() => {
|
|
15
|
+
if (!configRef.current.startOnMount)
|
|
16
|
+
return;
|
|
17
|
+
state.client.initializeDevices({
|
|
18
|
+
audioTrackConstraints: configRef?.current.microphone.trackConstraints,
|
|
19
|
+
videoTrackConstraints: configRef?.current.camera.trackConstraints,
|
|
20
|
+
});
|
|
21
|
+
// eslint-disable-next-line
|
|
22
|
+
}, []);
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
let pending = false;
|
|
25
|
+
const broadcastOnCameraStart = async (client) => {
|
|
26
|
+
const config = configRef.current.camera;
|
|
27
|
+
const onDeviceChange = config.onDeviceChange ?? "replace";
|
|
28
|
+
const stream = videoTrackManager.getCurrentTrack()?.stream;
|
|
29
|
+
if (isBroadcastedTrackChanged(client, pending)) {
|
|
30
|
+
if (!stream && config.broadcastOnDeviceStart) {
|
|
31
|
+
pending = true;
|
|
32
|
+
await videoTrackManager
|
|
33
|
+
.startStreaming(config.defaultSimulcastConfig, config.defaultMaxBandwidth)
|
|
34
|
+
.finally(() => {
|
|
35
|
+
pending = false;
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
else if (stream && onDeviceChange === "replace") {
|
|
39
|
+
pending = true;
|
|
40
|
+
await videoTrackManager.refreshStreamedTrack().finally(() => {
|
|
41
|
+
pending = false;
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
else if (stream && onDeviceChange === "remove") {
|
|
45
|
+
pending = true;
|
|
46
|
+
await videoTrackManager.stopStreaming().finally(() => {
|
|
47
|
+
pending = false;
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
const managerInitialized = async (event, client) => {
|
|
53
|
+
if (event.video?.media?.stream) {
|
|
54
|
+
await broadcastOnCameraStart(client);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
const devicesReady = async (event, client) => {
|
|
58
|
+
if (event.trackType === "video" && event.restarted && event?.media?.stream) {
|
|
59
|
+
await broadcastOnCameraStart(client);
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
const deviceReady = async (event, client) => {
|
|
63
|
+
if (event.trackType === "video") {
|
|
64
|
+
await broadcastOnCameraStart(client);
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
state.client.on("managerInitialized", managerInitialized);
|
|
68
|
+
state.client.on("devicesReady", devicesReady);
|
|
69
|
+
state.client.on("deviceReady", deviceReady);
|
|
70
|
+
return () => {
|
|
71
|
+
state.client.removeListener("managerInitialized", managerInitialized);
|
|
72
|
+
state.client.removeListener("devicesReady", devicesReady);
|
|
73
|
+
state.client.removeListener("deviceReady", deviceReady);
|
|
74
|
+
};
|
|
75
|
+
}, [state.client, videoTrackManager]);
|
|
76
|
+
useEffect(() => {
|
|
77
|
+
const removeOnCameraStopped = async (event, client) => {
|
|
78
|
+
const stream = videoTrackManager.getCurrentTrack()?.stream;
|
|
79
|
+
const onDeviceStop = configRef.current.camera.onDeviceStop ?? "mute";
|
|
80
|
+
if (event.mediaDeviceType === "userMedia" &&
|
|
81
|
+
event.trackType === "video" &&
|
|
82
|
+
isBroadcastedTrackStopped(client.status, stream)) {
|
|
83
|
+
if (onDeviceStop === "mute") {
|
|
84
|
+
await videoTrackManager.pauseStreaming();
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
await videoTrackManager.stopStreaming();
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
state.client.on("deviceStopped", removeOnCameraStopped);
|
|
92
|
+
return () => {
|
|
93
|
+
state.client.removeListener("deviceStopped", removeOnCameraStopped);
|
|
94
|
+
};
|
|
95
|
+
}, [state.client, videoTrackManager]);
|
|
96
|
+
useEffect(() => {
|
|
97
|
+
const broadcastCameraOnConnect = async (_, client) => {
|
|
98
|
+
const camera = client.devices.camera;
|
|
99
|
+
const stream = camera.stream;
|
|
100
|
+
const config = configRef.current.camera;
|
|
101
|
+
if (stream && config.broadcastOnConnect) {
|
|
102
|
+
await videoTrackManager.startStreaming(config.defaultSimulcastConfig, config.defaultMaxBandwidth);
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
state.client.on("joined", broadcastCameraOnConnect);
|
|
106
|
+
return () => {
|
|
107
|
+
state.client.removeListener("joined", broadcastCameraOnConnect);
|
|
108
|
+
};
|
|
109
|
+
}, [state.client, videoTrackManager]);
|
|
110
|
+
useEffect(() => {
|
|
111
|
+
let pending = false;
|
|
112
|
+
const broadcastOnMicrophoneStart = async (client) => {
|
|
113
|
+
const stream = audioTrackManager.getCurrentTrack()?.stream;
|
|
114
|
+
const config = configRef.current.microphone;
|
|
115
|
+
const onDeviceChange = config.onDeviceChange ?? "replace";
|
|
116
|
+
if (isBroadcastedTrackChanged(client, pending)) {
|
|
117
|
+
if (!stream && config.broadcastOnDeviceStart) {
|
|
118
|
+
pending = true;
|
|
119
|
+
await audioTrackManager.startStreaming(undefined, config.defaultMaxBandwidth).finally(() => {
|
|
120
|
+
pending = false;
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
else if (stream && onDeviceChange === "replace") {
|
|
124
|
+
pending = true;
|
|
125
|
+
await audioTrackManager.refreshStreamedTrack().finally(() => {
|
|
126
|
+
pending = false;
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
else if (stream && onDeviceChange === "remove") {
|
|
130
|
+
pending = true;
|
|
131
|
+
await audioTrackManager.stopStreaming().finally(() => {
|
|
132
|
+
pending = false;
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
const managerInitialized = async (event, client) => {
|
|
138
|
+
if (event.audio?.media?.stream) {
|
|
139
|
+
await broadcastOnMicrophoneStart(client);
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
const devicesReady = async (event, client) => {
|
|
143
|
+
if (event.trackType === "audio" && event.restarted && event?.media?.stream) {
|
|
144
|
+
await broadcastOnMicrophoneStart(client);
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
const deviceReady = async (event, client) => {
|
|
148
|
+
if (event.trackType === "audio") {
|
|
149
|
+
await broadcastOnMicrophoneStart(client);
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
state.client.on("managerInitialized", managerInitialized);
|
|
153
|
+
state.client.on("deviceReady", deviceReady);
|
|
154
|
+
state.client.on("devicesReady", devicesReady);
|
|
155
|
+
return () => {
|
|
156
|
+
state.client.removeListener("managerInitialized", managerInitialized);
|
|
157
|
+
state.client.removeListener("deviceReady", deviceReady);
|
|
158
|
+
state.client.removeListener("devicesReady", devicesReady);
|
|
159
|
+
};
|
|
160
|
+
}, [state.client, audioTrackManager]);
|
|
161
|
+
useEffect(() => {
|
|
162
|
+
const onMicrophoneStopped = async (event, client) => {
|
|
163
|
+
const stream = audioTrackManager.getCurrentTrack()?.stream;
|
|
164
|
+
const onDeviceStop = configRef.current.microphone.onDeviceStop ?? "mute";
|
|
165
|
+
const isRightDeviceType = event.mediaDeviceType === "userMedia";
|
|
166
|
+
const isRightTrackType = event.trackType === "audio";
|
|
167
|
+
if (isRightDeviceType && isRightTrackType && isBroadcastedTrackStopped(client.status, stream)) {
|
|
168
|
+
if (onDeviceStop === "mute") {
|
|
169
|
+
await audioTrackManager.pauseStreaming();
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
await audioTrackManager.stopStreaming();
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
};
|
|
176
|
+
state.client.on("deviceStopped", onMicrophoneStopped);
|
|
177
|
+
return () => {
|
|
178
|
+
state.client.removeListener("deviceStopped", onMicrophoneStopped);
|
|
179
|
+
};
|
|
180
|
+
}, [state.client, audioTrackManager]);
|
|
181
|
+
useEffect(() => {
|
|
182
|
+
const broadcastMicrophoneOnConnect = async (_, client) => {
|
|
183
|
+
const config = configRef.current.microphone;
|
|
184
|
+
const microphone = client.devices.microphone;
|
|
185
|
+
if (microphone.stream && config.broadcastOnConnect) {
|
|
186
|
+
await audioTrackManager.startStreaming(undefined, config.defaultMaxBandwidth);
|
|
187
|
+
}
|
|
188
|
+
};
|
|
189
|
+
state.client.on("joined", broadcastMicrophoneOnConnect);
|
|
190
|
+
return () => {
|
|
191
|
+
state.client.removeListener("joined", broadcastMicrophoneOnConnect);
|
|
192
|
+
};
|
|
193
|
+
}, [state.client, audioTrackManager]);
|
|
194
|
+
return useMemo(() => ({
|
|
195
|
+
init: () => state.client.initializeDevices({
|
|
196
|
+
audioTrackConstraints: configRef.current?.microphone?.trackConstraints,
|
|
197
|
+
videoTrackConstraints: configRef.current?.camera?.trackConstraints,
|
|
198
|
+
}),
|
|
199
|
+
}), [state.client]);
|
|
200
|
+
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Selector } from "../state.types";
|
|
2
|
+
export declare function useSelector<Result>(selector: Selector<Result>): Result;
|
|
3
|
+
export declare function useStatus(): import("../state.types").PeerStatus;
|
|
4
|
+
export declare function useTracks(): Record<string, import("../state.types").TrackWithOrigin>;
|
|
5
|
+
export declare function useClient(): import("..").Client;
|
|
6
|
+
//# sourceMappingURL=state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/hooks/state.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,wBAAgB,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,CAItE;AAED,wBAAgB,SAAS,wCAExB;AAED,wBAAgB,SAAS,6DAExB;AAED,wBAAgB,SAAS,wBAExB"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { useMemo } from "react";
|
|
2
|
+
import { useFishjamContext } from "./fishjamContext";
|
|
3
|
+
export function useSelector(selector) {
|
|
4
|
+
const { state } = useFishjamContext();
|
|
5
|
+
return useMemo(() => selector(state), [selector, state]);
|
|
6
|
+
}
|
|
7
|
+
export function useStatus() {
|
|
8
|
+
return useSelector((s) => s.status);
|
|
9
|
+
}
|
|
10
|
+
export function useTracks() {
|
|
11
|
+
return useSelector((s) => s.tracks);
|
|
12
|
+
}
|
|
13
|
+
export function useClient() {
|
|
14
|
+
return useSelector((s) => s.client);
|
|
15
|
+
}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
export
|
|
1
|
+
export * from "./hooks/public";
|
|
2
|
+
export * from "./fishjamProvider";
|
|
2
3
|
export { Client } from "./Client";
|
|
3
4
|
export type { ClientEvents } from "./Client";
|
|
4
5
|
export type { PeerState, Track, PeerId, TrackId, TrackWithOrigin, Origin, PeerStatus, Selector, State, SetStore, } from "./state.types";
|
|
5
|
-
export type { DeviceManagerConfig, StorageConfig, Devices, UserMediaAPI, UseSetupMediaResult, UseSetupMediaConfig, CreateFishjamClient, ScreenshareApi, UseConnect, ConnectConfig, TrackManager, TrackMiddleware, TrackMetadata, // only for compatibility reasons, will be removed in: FCE-415
|
|
6
|
+
export type { DeviceManagerConfig, Participiants, StorageConfig, Devices, UserMediaAPI, UseSetupMediaResult, UseSetupMediaConfig, CreateFishjamClient, ScreenshareApi, UseConnect, ConnectConfig, TrackManager, TrackMiddleware, TrackMetadata, // only for compatibility reasons, will be removed in: FCE-415
|
|
6
7
|
PeerMetadata, } from "./types";
|
|
7
8
|
export { AUDIO_TRACK_CONSTRAINTS, VIDEO_TRACK_CONSTRAINTS, SCREEN_SHARING_MEDIA_CONSTRAINTS } from "./constraints";
|
|
8
9
|
export type { Peer, MessageEvents, CreateConfig, TrackBandwidthLimit, SimulcastBandwidthLimit, BandwidthLimit, WebRTCEndpointEvents, TrackContextEvents, Endpoint, SimulcastConfig, TrackContext, VadStatus, EncodingReason, MetadataParser, AuthErrorReason, Encoding, } from "@fishjam-cloud/ts-client";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAElC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,YAAY,EACV,SAAS,EACT,KAAK,EACL,MAAM,EACN,OAAO,EACP,eAAe,EACf,MAAM,EACN,UAAU,EACV,QAAQ,EACR,KAAK,EACL,QAAQ,GACT,MAAM,eAAe,CAAC;AAEvB,YAAY,EACV,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,OAAO,EACP,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,EACd,UAAU,EACV,aAAa,EACb,YAAY,EACZ,eAAe,EACf,aAAa,EAAE,8DAA8D;AAC7E,YAAY,GACb,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,gCAAgC,EAAE,MAAM,eAAe,CAAC;AAEnH,YAAY,EACV,IAAI,EACJ,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,EACd,oBAAoB,EACpB,kBAAkB,EAClB,QAAQ,EACR,eAAe,EACf,YAAY,EACZ,SAAS,EACT,cAAc,EACd,cAAc,EACd,eAAe,EACf,QAAQ,GACT,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
export
|
|
1
|
+
export * from "./hooks/public";
|
|
2
|
+
export * from "./fishjamProvider";
|
|
2
3
|
export { Client } from "./Client";
|
|
3
4
|
export { AUDIO_TRACK_CONSTRAINTS, VIDEO_TRACK_CONSTRAINTS, SCREEN_SHARING_MEDIA_CONSTRAINTS } from "./constraints";
|
|
4
5
|
export { FishjamClient } from "@fishjam-cloud/ts-client";
|
package/dist/trackManager.js
CHANGED
|
@@ -9,7 +9,7 @@ export const useTrackManager = ({ mediaManager, tsClient }) => {
|
|
|
9
9
|
const [paused, setPaused] = useState(false);
|
|
10
10
|
const [currentTrackMiddleware, setCurrentTrackMiddleware] = useState(null);
|
|
11
11
|
const type = TRACK_TYPE_TO_DEVICE[mediaManager.getDeviceType()];
|
|
12
|
-
const
|
|
12
|
+
const metadata = { type, paused };
|
|
13
13
|
useEffect(() => {
|
|
14
14
|
const disconnectedHandler = () => {
|
|
15
15
|
setCurrentTrackId(null);
|
|
@@ -39,11 +39,11 @@ export const useTrackManager = ({ mediaManager, tsClient }) => {
|
|
|
39
39
|
function getCurrentTrack() {
|
|
40
40
|
return getRemoteOrLocalTrack(tsClient, currentTrackId);
|
|
41
41
|
}
|
|
42
|
-
|
|
43
|
-
mediaManager?.start(deviceId ?? true);
|
|
42
|
+
function initialize(deviceId) {
|
|
43
|
+
return mediaManager?.start(deviceId ?? true);
|
|
44
44
|
}
|
|
45
|
-
|
|
46
|
-
mediaManager?.stop();
|
|
45
|
+
function stop() {
|
|
46
|
+
return mediaManager?.stop();
|
|
47
47
|
}
|
|
48
48
|
async function startStreaming(simulcastConfig, maxBandwidth) {
|
|
49
49
|
if (currentTrackId)
|
|
@@ -56,13 +56,13 @@ export const useTrackManager = ({ mediaManager, tsClient }) => {
|
|
|
56
56
|
return track.trackId;
|
|
57
57
|
// see `getRemoteOrLocalTrackContext()` explanation
|
|
58
58
|
setCurrentTrackId(media.track.id);
|
|
59
|
-
const trackMetadata = { ...
|
|
59
|
+
const trackMetadata = { ...metadata, paused: false };
|
|
60
60
|
const remoteTrackId = await tsClient.addTrack(media.track, trackMetadata, simulcastConfig, maxBandwidth);
|
|
61
61
|
setCurrentTrackId(remoteTrackId);
|
|
62
62
|
setPaused(false);
|
|
63
63
|
return remoteTrackId;
|
|
64
64
|
}
|
|
65
|
-
|
|
65
|
+
function refreshStreamedTrack() {
|
|
66
66
|
const prevTrack = getPreviousTrack();
|
|
67
67
|
const newTrack = mediaManager.getTracks()[0];
|
|
68
68
|
if (!newTrack)
|
|
@@ -79,7 +79,7 @@ export const useTrackManager = ({ mediaManager, tsClient }) => {
|
|
|
79
79
|
const prevTrack = getPreviousTrack();
|
|
80
80
|
setPaused(true);
|
|
81
81
|
await tsClient.replaceTrack(prevTrack.trackId, null);
|
|
82
|
-
const trackMetadata = { ...
|
|
82
|
+
const trackMetadata = { ...metadata, paused: true };
|
|
83
83
|
return tsClient.updateTrackMetadata(prevTrack.trackId, trackMetadata);
|
|
84
84
|
}
|
|
85
85
|
async function resumeStreaming() {
|
|
@@ -89,14 +89,14 @@ export const useTrackManager = ({ mediaManager, tsClient }) => {
|
|
|
89
89
|
throw Error("Device is unavailable");
|
|
90
90
|
setPaused(false);
|
|
91
91
|
await tsClient.replaceTrack(prevTrack.trackId, media.track);
|
|
92
|
-
const trackMetadata = { ...
|
|
92
|
+
const trackMetadata = { ...metadata, paused: false };
|
|
93
93
|
return tsClient.updateTrackMetadata(prevTrack.trackId, trackMetadata);
|
|
94
94
|
}
|
|
95
95
|
function disableTrack() {
|
|
96
|
-
|
|
96
|
+
mediaManager.disable();
|
|
97
97
|
}
|
|
98
98
|
function enableTrack() {
|
|
99
|
-
|
|
99
|
+
mediaManager.enable();
|
|
100
100
|
}
|
|
101
101
|
return {
|
|
102
102
|
getCurrentTrack,
|
package/dist/types.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ConnectConfig as TSClientConnectConfig, SimulcastConfig, TrackBandwidthLimit, TrackKind } from "@fishjam-cloud/ts-client";
|
|
2
2
|
import type { PeerState, PeerStatus, Selector, State, Track, TrackId, TrackWithOrigin, UseReconnection } from "./state.types";
|
|
3
|
-
import type { JSX,
|
|
3
|
+
import type { JSX, PropsWithChildren } from "react";
|
|
4
4
|
import type { Client } from "./Client";
|
|
5
5
|
export type PeerMetadata = {
|
|
6
6
|
displayName?: string;
|
|
@@ -194,9 +194,6 @@ export type Devices = {
|
|
|
194
194
|
camera: UserMediaAPI;
|
|
195
195
|
microphone: UserMediaAPI;
|
|
196
196
|
};
|
|
197
|
-
export type FishjamContextProviderProps = {
|
|
198
|
-
children: ReactNode;
|
|
199
|
-
};
|
|
200
197
|
export type TracksMiddleware = (videoTrack: MediaStreamTrack, audioTrack: MediaStreamTrack | null) => [MediaStreamTrack, MediaStreamTrack | null];
|
|
201
198
|
export type FishjamContextType = {
|
|
202
199
|
state: State;
|
|
@@ -213,8 +210,12 @@ type DistinguishedTracks = {
|
|
|
213
210
|
audioTracks: Track[];
|
|
214
211
|
};
|
|
215
212
|
export type PeerStateWithTracks = PeerState & DistinguishedTracks;
|
|
213
|
+
export type Participiants = {
|
|
214
|
+
localParticipant: PeerStateWithTracks | null;
|
|
215
|
+
participants: PeerStateWithTracks[];
|
|
216
|
+
};
|
|
216
217
|
export type CreateFishjamClient = {
|
|
217
|
-
FishjamContextProvider: ({ children }:
|
|
218
|
+
FishjamContextProvider: ({ children }: PropsWithChildren) => JSX.Element;
|
|
218
219
|
useConnect: () => (config: ConnectConfig) => () => void;
|
|
219
220
|
useDisconnect: () => () => void;
|
|
220
221
|
useStatus: () => PeerStatus;
|
|
@@ -225,10 +226,7 @@ export type CreateFishjamClient = {
|
|
|
225
226
|
useMicrophone: () => Devices["microphone"] & TrackManager;
|
|
226
227
|
useClient: () => Client;
|
|
227
228
|
useReconnection: () => UseReconnection;
|
|
228
|
-
useParticipants: () =>
|
|
229
|
-
localParticipant: PeerStateWithTracks | null;
|
|
230
|
-
participants: PeerStateWithTracks[];
|
|
231
|
-
};
|
|
229
|
+
useParticipants: () => Participiants;
|
|
232
230
|
useScreenShare: () => ScreenshareApi;
|
|
233
231
|
};
|
|
234
232
|
export type TrackType = TrackKind | "audiovideo";
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,IAAI,qBAAqB,EACtC,eAAe,EACf,mBAAmB,EACnB,SAAS,EACV,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EACV,SAAS,EACT,UAAU,EACV,QAAQ,EACR,KAAK,EACL,KAAK,EACL,OAAO,EACP,eAAe,EACf,eAAe,EAChB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fishjam-cloud/react-client",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "React client library for Fishjam Cloud",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "Fishjam Cloud Team",
|
|
@@ -38,8 +38,7 @@
|
|
|
38
38
|
"format:check": "prettier --check . --ignore-path ./.eslintignore",
|
|
39
39
|
"lint": "eslint . --ext .ts,.tsx --fix",
|
|
40
40
|
"lint:check": "eslint . --ext .ts,.tsx",
|
|
41
|
-
"prepack": "yarn workspace @fishjam-cloud/ts-client build && yarn build"
|
|
42
|
-
"typecheck": "tsc"
|
|
41
|
+
"prepack": "yarn workspace @fishjam-cloud/ts-client build && yarn build"
|
|
43
42
|
},
|
|
44
43
|
"devDependencies": {
|
|
45
44
|
"@playwright/test": "^1.46.1",
|
|
@@ -54,7 +53,7 @@
|
|
|
54
53
|
"typescript": "^5.5.4"
|
|
55
54
|
},
|
|
56
55
|
"dependencies": {
|
|
57
|
-
"@fishjam-cloud/ts-client": "0.
|
|
56
|
+
"@fishjam-cloud/ts-client": "0.6.0",
|
|
58
57
|
"events": "3.3.0",
|
|
59
58
|
"lodash.isequal": "4.5.0"
|
|
60
59
|
},
|
package/dist/create.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { CreateFishjamClient, DeviceManagerConfig, PeerMetadata, TrackMetadata } from "./types";
|
|
2
|
-
import type { CreateConfig } from "@fishjam-cloud/ts-client";
|
|
3
|
-
/**
|
|
4
|
-
* Create a client that can be used with a context.
|
|
5
|
-
* Returns context provider, and two hooks to interact with the context.
|
|
6
|
-
*
|
|
7
|
-
* @returns ContextProvider, useSelector, useConnect
|
|
8
|
-
*/
|
|
9
|
-
export declare function create(config?: CreateConfig<PeerMetadata, TrackMetadata>, deviceManagerDefaultConfig?: DeviceManagerConfig): CreateFishjamClient;
|
|
10
|
-
//# sourceMappingURL=create.d.ts.map
|
package/dist/create.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../src/create.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,mBAAmB,EACnB,mBAAmB,EAGnB,YAAY,EAIZ,aAAa,EAGd,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAuD7D;;;;;GAKG;AACH,wBAAgB,MAAM,CACpB,MAAM,CAAC,EAAE,YAAY,CAAC,YAAY,EAAE,aAAa,CAAC,EAClD,0BAA0B,CAAC,EAAE,mBAAmB,GAC/C,mBAAmB,CA+KrB"}
|
package/dist/create.js
DELETED
|
@@ -1,195 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { createContext, useCallback, useContext, useMemo, useRef, useState, useSyncExternalStore } from "react";
|
|
3
|
-
import { Client } from "./Client";
|
|
4
|
-
import { createUseSetupMediaHook } from "./useSetupMedia";
|
|
5
|
-
import { useScreenShare as _useScreenShare } from "./screenShareTrackManager";
|
|
6
|
-
import { useTrackManager } from "./trackManager";
|
|
7
|
-
const eventNames = [
|
|
8
|
-
"socketOpen",
|
|
9
|
-
"socketError",
|
|
10
|
-
"socketClose",
|
|
11
|
-
"authSuccess",
|
|
12
|
-
"authError",
|
|
13
|
-
"disconnected",
|
|
14
|
-
"joined",
|
|
15
|
-
"joinError",
|
|
16
|
-
"peerJoined",
|
|
17
|
-
"peerUpdated",
|
|
18
|
-
"peerLeft",
|
|
19
|
-
"reconnected",
|
|
20
|
-
"reconnectionRetriesLimitReached",
|
|
21
|
-
"reconnectionStarted",
|
|
22
|
-
"componentAdded",
|
|
23
|
-
"componentUpdated",
|
|
24
|
-
"componentRemoved",
|
|
25
|
-
"trackReady",
|
|
26
|
-
"trackAdded",
|
|
27
|
-
"trackRemoved",
|
|
28
|
-
"trackUpdated",
|
|
29
|
-
"bandwidthEstimationChanged",
|
|
30
|
-
"encodingChanged",
|
|
31
|
-
"voiceActivityChanged",
|
|
32
|
-
"deviceDisabled",
|
|
33
|
-
"deviceEnabled",
|
|
34
|
-
"managerInitialized",
|
|
35
|
-
"managerStarted",
|
|
36
|
-
"deviceStopped",
|
|
37
|
-
"deviceReady",
|
|
38
|
-
"devicesStarted",
|
|
39
|
-
"devicesReady",
|
|
40
|
-
"error",
|
|
41
|
-
"targetTrackEncodingRequested",
|
|
42
|
-
"localTrackAdded",
|
|
43
|
-
"localTrackRemoved",
|
|
44
|
-
"localTrackReplaced",
|
|
45
|
-
"localTrackMuted",
|
|
46
|
-
"localTrackUnmuted",
|
|
47
|
-
"localTrackBandwidthSet",
|
|
48
|
-
"localTrackEncodingBandwidthSet",
|
|
49
|
-
"localTrackEncodingEnabled",
|
|
50
|
-
"localTrackEncodingDisabled",
|
|
51
|
-
"localPeerMetadataChanged",
|
|
52
|
-
"localTrackMetadataChanged",
|
|
53
|
-
"disconnectRequested",
|
|
54
|
-
];
|
|
55
|
-
/**
|
|
56
|
-
* Create a client that can be used with a context.
|
|
57
|
-
* Returns context provider, and two hooks to interact with the context.
|
|
58
|
-
*
|
|
59
|
-
* @returns ContextProvider, useSelector, useConnect
|
|
60
|
-
*/
|
|
61
|
-
export function create(config, deviceManagerDefaultConfig) {
|
|
62
|
-
const FishjamContext = createContext(undefined);
|
|
63
|
-
function FishjamContextProvider({ children }) {
|
|
64
|
-
const memoClient = useMemo(() => new Client({ clientConfig: config, deviceManagerDefaultConfig }), []);
|
|
65
|
-
const clientRef = useRef(memoClient);
|
|
66
|
-
const mutationRef = useRef(false);
|
|
67
|
-
const subscribe = useCallback((subscribeCallback) => {
|
|
68
|
-
const client = clientRef.current;
|
|
69
|
-
const callback = () => {
|
|
70
|
-
mutationRef.current = true;
|
|
71
|
-
subscribeCallback();
|
|
72
|
-
};
|
|
73
|
-
eventNames.forEach((eventName) => client.on(eventName, callback));
|
|
74
|
-
return () => {
|
|
75
|
-
eventNames.forEach((eventName) => client.removeListener(eventName, callback));
|
|
76
|
-
};
|
|
77
|
-
}, []);
|
|
78
|
-
const lastSnapshotRef = useRef(null);
|
|
79
|
-
const getSnapshot = useCallback(() => {
|
|
80
|
-
if (mutationRef.current || lastSnapshotRef.current === null) {
|
|
81
|
-
lastSnapshotRef.current = {
|
|
82
|
-
remote: clientRef.current.peers,
|
|
83
|
-
media: clientRef.current.media,
|
|
84
|
-
bandwidthEstimation: clientRef.current.bandwidthEstimation,
|
|
85
|
-
tracks: clientRef.current.peersTracks,
|
|
86
|
-
local: clientRef.current.local,
|
|
87
|
-
status: clientRef.current.status,
|
|
88
|
-
devices: clientRef.current.devices,
|
|
89
|
-
client: clientRef.current,
|
|
90
|
-
reconnectionStatus: clientRef.current.reconnectionStatus,
|
|
91
|
-
};
|
|
92
|
-
mutationRef.current = false;
|
|
93
|
-
}
|
|
94
|
-
return lastSnapshotRef.current;
|
|
95
|
-
}, []);
|
|
96
|
-
const state = useSyncExternalStore(subscribe, getSnapshot);
|
|
97
|
-
const tsClient = state.client.getTsClient();
|
|
98
|
-
const screenshareState = useState(null);
|
|
99
|
-
const videoTrackManager = useTrackManager({
|
|
100
|
-
mediaManager: state.client.videoDeviceManager,
|
|
101
|
-
tsClient,
|
|
102
|
-
});
|
|
103
|
-
const audioTrackManager = useTrackManager({
|
|
104
|
-
mediaManager: state.client.audioDeviceManager,
|
|
105
|
-
tsClient,
|
|
106
|
-
});
|
|
107
|
-
return (_jsx(FishjamContext.Provider, { value: { state, screenshareState, videoTrackManager, audioTrackManager }, children: children }));
|
|
108
|
-
}
|
|
109
|
-
function useFishjamContext() {
|
|
110
|
-
const context = useContext(FishjamContext);
|
|
111
|
-
if (!context)
|
|
112
|
-
throw new Error("useFishjamContext must be used within a FishjamContextProvider");
|
|
113
|
-
return context;
|
|
114
|
-
}
|
|
115
|
-
function useSelector(selector) {
|
|
116
|
-
const { state } = useFishjamContext();
|
|
117
|
-
return useMemo(() => selector(state), [selector, state]);
|
|
118
|
-
}
|
|
119
|
-
function useConnect() {
|
|
120
|
-
const { state } = useFishjamContext();
|
|
121
|
-
return useMemo(() => {
|
|
122
|
-
return (config) => {
|
|
123
|
-
state.client.connect(config);
|
|
124
|
-
return () => {
|
|
125
|
-
state.client.disconnect();
|
|
126
|
-
};
|
|
127
|
-
};
|
|
128
|
-
}, [state.client]);
|
|
129
|
-
}
|
|
130
|
-
function useDisconnect() {
|
|
131
|
-
const { state } = useFishjamContext();
|
|
132
|
-
return useCallback(() => {
|
|
133
|
-
state.client.disconnect();
|
|
134
|
-
}, [state.client]);
|
|
135
|
-
}
|
|
136
|
-
function useStatus() {
|
|
137
|
-
return useSelector((s) => s.status);
|
|
138
|
-
}
|
|
139
|
-
function useTracks() {
|
|
140
|
-
return useSelector((s) => s.tracks);
|
|
141
|
-
}
|
|
142
|
-
function useClient() {
|
|
143
|
-
return useSelector((s) => s.client);
|
|
144
|
-
}
|
|
145
|
-
function useCamera() {
|
|
146
|
-
const { state, videoTrackManager } = useFishjamContext();
|
|
147
|
-
return { ...state.devices.camera, ...videoTrackManager };
|
|
148
|
-
}
|
|
149
|
-
function useMicrophone() {
|
|
150
|
-
const { state, audioTrackManager } = useFishjamContext();
|
|
151
|
-
return { ...state.devices.microphone, ...audioTrackManager };
|
|
152
|
-
}
|
|
153
|
-
function useReconnection() {
|
|
154
|
-
const { state } = useFishjamContext();
|
|
155
|
-
return {
|
|
156
|
-
status: state.reconnectionStatus,
|
|
157
|
-
isReconnecting: state.reconnectionStatus === "reconnecting",
|
|
158
|
-
isError: state.reconnectionStatus === "error",
|
|
159
|
-
isIdle: state.reconnectionStatus === "idle",
|
|
160
|
-
};
|
|
161
|
-
}
|
|
162
|
-
function getPeerWithDistinguishedTracks(peerState) {
|
|
163
|
-
const localTracks = Object.values(peerState.tracks ?? {});
|
|
164
|
-
const videoTracks = localTracks.filter(({ track }) => track?.kind === "video");
|
|
165
|
-
const audioTracks = localTracks.filter(({ track }) => track?.kind === "audio");
|
|
166
|
-
return { ...peerState, videoTracks, audioTracks };
|
|
167
|
-
}
|
|
168
|
-
function useParticipants() {
|
|
169
|
-
const { state } = useFishjamContext();
|
|
170
|
-
const localParticipant = state.local
|
|
171
|
-
? getPeerWithDistinguishedTracks(state.local)
|
|
172
|
-
: null;
|
|
173
|
-
const participants = Object.values(state.remote).map(getPeerWithDistinguishedTracks);
|
|
174
|
-
return { localParticipant, participants };
|
|
175
|
-
}
|
|
176
|
-
function useScreenShare() {
|
|
177
|
-
const { state, screenshareState } = useFishjamContext();
|
|
178
|
-
return _useScreenShare(screenshareState, state.client.getTsClient());
|
|
179
|
-
}
|
|
180
|
-
return {
|
|
181
|
-
FishjamContextProvider,
|
|
182
|
-
useSelector,
|
|
183
|
-
useConnect,
|
|
184
|
-
useDisconnect,
|
|
185
|
-
useStatus,
|
|
186
|
-
useTracks,
|
|
187
|
-
useSetupMedia: createUseSetupMediaHook(useFishjamContext),
|
|
188
|
-
useParticipants,
|
|
189
|
-
useScreenShare,
|
|
190
|
-
useCamera,
|
|
191
|
-
useMicrophone,
|
|
192
|
-
useClient,
|
|
193
|
-
useReconnection,
|
|
194
|
-
};
|
|
195
|
-
}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import type { FishjamClient } from "@fishjam-cloud/ts-client";
|
|
2
|
-
import type { PeerMetadata, ScreenshareApi, ScreenshareState, TrackMetadata } from "./types";
|
|
3
|
-
export declare const useScreenShare: ([state, setState]: [ScreenshareState, React.Dispatch<React.SetStateAction<ScreenshareState>>], tsClient: FishjamClient<PeerMetadata, TrackMetadata>) => ScreenshareApi;
|
|
4
|
-
//# sourceMappingURL=screenShareTrackManager.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"screenShareTrackManager.d.ts","sourceRoot":"","sources":["../src/screenShareTrackManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAG9D,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,aAAa,EAAoB,MAAM,SAAS,CAAC;AAS/G,eAAO,MAAM,cAAc,sBAEN,CAAC,gBAAgB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,CAAC,YACnF,aAAa,CAAC,YAAY,EAAE,aAAa,CAAC,KACnD,cAmGF,CAAC"}
|
package/dist/useSetupMedia.d.ts
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import type { FishjamContextType, UseSetupMediaConfig, UseSetupMediaResult } from "./types";
|
|
2
|
-
export declare const createUseSetupMediaHook: (useFishjamContext: () => FishjamContextType) => (config: UseSetupMediaConfig) => UseSetupMediaResult;
|
|
3
|
-
//# sourceMappingURL=useSetupMedia.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useSetupMedia.d.ts","sourceRoot":"","sources":["../src/useSetupMedia.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAK5F,eAAO,MAAM,uBAAuB,sBAAuB,MAAM,kBAAkB,cAOjE,mBAAmB,KAAG,mBA+OvC,CAAC"}
|
package/dist/useSetupMedia.js
DELETED
|
@@ -1,201 +0,0 @@
|
|
|
1
|
-
import { useEffect, useMemo, useRef } from "react";
|
|
2
|
-
export const createUseSetupMediaHook = (useFishjamContext) => {
|
|
3
|
-
const isBroadcastedTrackChanged = (client, pending) => client.status === "joined" && !pending && !client.isReconnecting();
|
|
4
|
-
const isBroadcastedTrackStopped = (status, stream) => status === "joined" && stream;
|
|
5
|
-
return (config) => {
|
|
6
|
-
const { state, videoTrackManager, audioTrackManager } = useFishjamContext();
|
|
7
|
-
const configRef = useRef(config);
|
|
8
|
-
useEffect(() => {
|
|
9
|
-
configRef.current = config;
|
|
10
|
-
state.client.setDeviceManagerConfig({
|
|
11
|
-
storage: config.storage,
|
|
12
|
-
});
|
|
13
|
-
}, [config, state.client]);
|
|
14
|
-
useEffect(() => {
|
|
15
|
-
if (!configRef.current.startOnMount)
|
|
16
|
-
return;
|
|
17
|
-
state.client.initializeDevices({
|
|
18
|
-
audioTrackConstraints: configRef?.current.microphone.trackConstraints,
|
|
19
|
-
videoTrackConstraints: configRef?.current.camera.trackConstraints,
|
|
20
|
-
});
|
|
21
|
-
// eslint-disable-next-line
|
|
22
|
-
}, []);
|
|
23
|
-
useEffect(() => {
|
|
24
|
-
let pending = false;
|
|
25
|
-
const broadcastOnCameraStart = async (client) => {
|
|
26
|
-
const config = configRef.current.camera;
|
|
27
|
-
const onDeviceChange = config.onDeviceChange ?? "replace";
|
|
28
|
-
const stream = videoTrackManager.getCurrentTrack()?.stream;
|
|
29
|
-
if (isBroadcastedTrackChanged(client, pending)) {
|
|
30
|
-
if (!stream && config.broadcastOnDeviceStart) {
|
|
31
|
-
pending = true;
|
|
32
|
-
await videoTrackManager
|
|
33
|
-
.startStreaming(config.defaultSimulcastConfig, config.defaultMaxBandwidth)
|
|
34
|
-
.finally(() => {
|
|
35
|
-
pending = false;
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
else if (stream && onDeviceChange === "replace") {
|
|
39
|
-
pending = true;
|
|
40
|
-
await videoTrackManager.refreshStreamedTrack().finally(() => {
|
|
41
|
-
pending = false;
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
else if (stream && onDeviceChange === "remove") {
|
|
45
|
-
pending = true;
|
|
46
|
-
await videoTrackManager.stopStreaming().finally(() => {
|
|
47
|
-
pending = false;
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
};
|
|
52
|
-
const managerInitialized = async (event, client) => {
|
|
53
|
-
if (event.video?.media?.stream) {
|
|
54
|
-
await broadcastOnCameraStart(client);
|
|
55
|
-
}
|
|
56
|
-
};
|
|
57
|
-
const devicesReady = async (event, client) => {
|
|
58
|
-
if (event.trackType === "video" && event.restarted && event?.media?.stream) {
|
|
59
|
-
await broadcastOnCameraStart(client);
|
|
60
|
-
}
|
|
61
|
-
};
|
|
62
|
-
const deviceReady = async (event, client) => {
|
|
63
|
-
if (event.trackType === "video") {
|
|
64
|
-
await broadcastOnCameraStart(client);
|
|
65
|
-
}
|
|
66
|
-
};
|
|
67
|
-
state.client.on("managerInitialized", managerInitialized);
|
|
68
|
-
state.client.on("devicesReady", devicesReady);
|
|
69
|
-
state.client.on("deviceReady", deviceReady);
|
|
70
|
-
return () => {
|
|
71
|
-
state.client.removeListener("managerInitialized", managerInitialized);
|
|
72
|
-
state.client.removeListener("devicesReady", devicesReady);
|
|
73
|
-
state.client.removeListener("deviceReady", deviceReady);
|
|
74
|
-
};
|
|
75
|
-
}, [state.client, videoTrackManager]);
|
|
76
|
-
useEffect(() => {
|
|
77
|
-
const removeOnCameraStopped = async (event, client) => {
|
|
78
|
-
const stream = videoTrackManager.getCurrentTrack()?.stream;
|
|
79
|
-
const onDeviceStop = configRef.current.camera.onDeviceStop ?? "mute";
|
|
80
|
-
if (event.mediaDeviceType === "userMedia" &&
|
|
81
|
-
event.trackType === "video" &&
|
|
82
|
-
isBroadcastedTrackStopped(client.status, stream)) {
|
|
83
|
-
if (onDeviceStop === "mute") {
|
|
84
|
-
await videoTrackManager.pauseStreaming();
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
await videoTrackManager.stopStreaming();
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
};
|
|
91
|
-
state.client.on("deviceStopped", removeOnCameraStopped);
|
|
92
|
-
return () => {
|
|
93
|
-
state.client.removeListener("deviceStopped", removeOnCameraStopped);
|
|
94
|
-
};
|
|
95
|
-
}, [state.client, videoTrackManager]);
|
|
96
|
-
useEffect(() => {
|
|
97
|
-
const broadcastCameraOnConnect = async (_, client) => {
|
|
98
|
-
const camera = client.devices.camera;
|
|
99
|
-
const stream = camera.stream;
|
|
100
|
-
const config = configRef.current.camera;
|
|
101
|
-
if (stream && config.broadcastOnConnect) {
|
|
102
|
-
await videoTrackManager.startStreaming(config.defaultSimulcastConfig, config.defaultMaxBandwidth);
|
|
103
|
-
}
|
|
104
|
-
};
|
|
105
|
-
state.client.on("joined", broadcastCameraOnConnect);
|
|
106
|
-
return () => {
|
|
107
|
-
state.client.removeListener("joined", broadcastCameraOnConnect);
|
|
108
|
-
};
|
|
109
|
-
}, [state.client, videoTrackManager]);
|
|
110
|
-
useEffect(() => {
|
|
111
|
-
let pending = false;
|
|
112
|
-
const broadcastOnMicrophoneStart = async (client) => {
|
|
113
|
-
const stream = audioTrackManager.getCurrentTrack()?.stream;
|
|
114
|
-
const config = configRef.current.microphone;
|
|
115
|
-
const onDeviceChange = config.onDeviceChange ?? "replace";
|
|
116
|
-
if (isBroadcastedTrackChanged(client, pending)) {
|
|
117
|
-
if (!stream && config.broadcastOnDeviceStart) {
|
|
118
|
-
pending = true;
|
|
119
|
-
await audioTrackManager.startStreaming(undefined, config.defaultMaxBandwidth).finally(() => {
|
|
120
|
-
pending = false;
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
-
else if (stream && onDeviceChange === "replace") {
|
|
124
|
-
pending = true;
|
|
125
|
-
await audioTrackManager.refreshStreamedTrack().finally(() => {
|
|
126
|
-
pending = false;
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
|
-
else if (stream && onDeviceChange === "remove") {
|
|
130
|
-
pending = true;
|
|
131
|
-
await audioTrackManager.stopStreaming().finally(() => {
|
|
132
|
-
pending = false;
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
};
|
|
137
|
-
const managerInitialized = async (event, client) => {
|
|
138
|
-
if (event.audio?.media?.stream) {
|
|
139
|
-
await broadcastOnMicrophoneStart(client);
|
|
140
|
-
}
|
|
141
|
-
};
|
|
142
|
-
const devicesReady = async (event, client) => {
|
|
143
|
-
if (event.trackType === "audio" && event.restarted && event?.media?.stream) {
|
|
144
|
-
await broadcastOnMicrophoneStart(client);
|
|
145
|
-
}
|
|
146
|
-
};
|
|
147
|
-
const deviceReady = async (event, client) => {
|
|
148
|
-
if (event.trackType === "audio") {
|
|
149
|
-
await broadcastOnMicrophoneStart(client);
|
|
150
|
-
}
|
|
151
|
-
};
|
|
152
|
-
state.client.on("managerInitialized", managerInitialized);
|
|
153
|
-
state.client.on("deviceReady", deviceReady);
|
|
154
|
-
state.client.on("devicesReady", devicesReady);
|
|
155
|
-
return () => {
|
|
156
|
-
state.client.removeListener("managerInitialized", managerInitialized);
|
|
157
|
-
state.client.removeListener("deviceReady", deviceReady);
|
|
158
|
-
state.client.removeListener("devicesReady", devicesReady);
|
|
159
|
-
};
|
|
160
|
-
}, [state.client, audioTrackManager]);
|
|
161
|
-
useEffect(() => {
|
|
162
|
-
const onMicrophoneStopped = async (event, client) => {
|
|
163
|
-
const stream = audioTrackManager.getCurrentTrack()?.stream;
|
|
164
|
-
const onDeviceStop = configRef.current.microphone.onDeviceStop ?? "mute";
|
|
165
|
-
const isRightDeviceType = event.mediaDeviceType === "userMedia";
|
|
166
|
-
const isRightTrackType = event.trackType === "audio";
|
|
167
|
-
if (isRightDeviceType && isRightTrackType && isBroadcastedTrackStopped(client.status, stream)) {
|
|
168
|
-
if (onDeviceStop === "mute") {
|
|
169
|
-
await audioTrackManager.pauseStreaming();
|
|
170
|
-
}
|
|
171
|
-
else {
|
|
172
|
-
await audioTrackManager.stopStreaming();
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
};
|
|
176
|
-
state.client.on("deviceStopped", onMicrophoneStopped);
|
|
177
|
-
return () => {
|
|
178
|
-
state.client.removeListener("deviceStopped", onMicrophoneStopped);
|
|
179
|
-
};
|
|
180
|
-
}, [state.client, audioTrackManager]);
|
|
181
|
-
useEffect(() => {
|
|
182
|
-
const broadcastMicrophoneOnConnect = async (_, client) => {
|
|
183
|
-
const config = configRef.current.microphone;
|
|
184
|
-
const microphone = client.devices.microphone;
|
|
185
|
-
if (microphone.stream && config.broadcastOnConnect) {
|
|
186
|
-
await audioTrackManager.startStreaming(undefined, config.defaultMaxBandwidth);
|
|
187
|
-
}
|
|
188
|
-
};
|
|
189
|
-
state.client.on("joined", broadcastMicrophoneOnConnect);
|
|
190
|
-
return () => {
|
|
191
|
-
state.client.removeListener("joined", broadcastMicrophoneOnConnect);
|
|
192
|
-
};
|
|
193
|
-
}, [state.client, audioTrackManager]);
|
|
194
|
-
return useMemo(() => ({
|
|
195
|
-
init: () => state.client.initializeDevices({
|
|
196
|
-
audioTrackConstraints: configRef.current?.microphone?.trackConstraints,
|
|
197
|
-
videoTrackConstraints: configRef.current?.camera?.trackConstraints,
|
|
198
|
-
}),
|
|
199
|
-
}), [state.client]);
|
|
200
|
-
};
|
|
201
|
-
};
|