Skip to content

Commit

Permalink
[FCE-941] Cleanup hooks export (#205)
Browse files Browse the repository at this point in the history
## Description

In this PR:
- all internal hooks are now in `hooks/internal` directory
- all device related files are in `devices/` directory
- removed exports for `constraints` consts (undocumented feature) and
`Endpoint` types (outdated feature)
- directly export public hooks from main index file

## Motivation and Context

I spent too much time trying to figure out which hooks are public and
which are private. So I made this cleanup for future me. I also updated
exports to match mobile. sdk

## Types of changes

- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to
      not work as expected)
  • Loading branch information
mironiasty authored Nov 28, 2024
1 parent a8922b4 commit bb39058
Show file tree
Hide file tree
Showing 30 changed files with 77 additions and 105 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import type { PeerStatus, Device } from "@fishjam-cloud/react-client";
import type { DeviceType } from "@fishjam-cloud/react-client/dist/DeviceManager";
import type { DeviceType } from "@fishjam-cloud/react-client";

type DeviceControlsProps = {
status: PeerStatus;
Expand Down
4 changes: 2 additions & 2 deletions packages/react-client/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@
"types": "./dist/index.d.ts"
},
"./internal": {
"import": "./dist/hooks/internal.js",
"types": "./dist/hooks/internal.d.ts"
"import": "./dist/internal.js",
"types": "./dist/internal.d.ts"
}
},
"scripts": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,17 @@ import type {
Media,
MediaManager,
MediaStatus,
} from "./types/internal";
} from "../types/internal";

import { prepareMediaTrackConstraints } from "./constraints";

import EventEmitter from "events";
import type TypedEmitter from "typed-emitter";
import type { PersistLastDeviceHandlers, TrackMiddleware } from "./types/public";
import { MiddlewareManager } from "./devices/MiddlewareManager";
import { createStorageConfig } from "./utils/localStorage";
import { setupOnEndedCallback } from "./utils/track";
import { parseUserMediaError } from "./utils/errors";

export type DeviceType = "audio" | "video";
import type { PersistLastDeviceHandlers, TrackMiddleware, DeviceType } from "../types/public";
import { MiddlewareManager } from "./MiddlewareManager";
import { createStorageConfig } from "../utils/localStorage";
import { setupOnEndedCallback } from "../utils/track";
import { parseUserMediaError } from "../utils/errors";

export type DeviceManagerEvents = {
managerStarted: (
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { prepareConstraints } from "./constraints";
import type { CurrentDevices, DeviceError } from "./types/internal";
import { NOT_FOUND_ERROR, OVERCONSTRAINED_ERROR, PERMISSION_DENIED, UNHANDLED_ERROR } from "./utils/errors";
import type { CurrentDevices, DeviceError } from "../types/internal";
import { NOT_FOUND_ERROR, OVERCONSTRAINED_ERROR, PERMISSION_DENIED, UNHANDLED_ERROR } from "../utils/errors";

type AudioVideo<T> = { audio: T; video: T };

Expand Down
14 changes: 7 additions & 7 deletions packages/react-client/src/fishjamProvider.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import { useRef, type PropsWithChildren } from "react";
import { useTrackManager } from "./hooks/useTrackManager";
import { useTrackManager } from "./hooks/internal/useTrackManager";
import { FishjamClient, type ReconnectConfig } from "@fishjam-cloud/ts-client";
import type { FishjamContextType } from "./hooks/useFishjamContext";
import { FishjamContext } from "./hooks/useFishjamContext";
import { DeviceManager } from "./DeviceManager";
import { usePeerStatus } from "./hooks/usePeerStatus";
import { useFishjamClientState } from "./hooks/useFishjamClientState";
import { AUDIO_TRACK_CONSTRAINTS, VIDEO_TRACK_CONSTRAINTS } from "./constraints";
import type { FishjamContextType } from "./hooks/internal/useFishjamContext";
import { FishjamContext } from "./hooks/internal/useFishjamContext";
import { DeviceManager } from "./devices/DeviceManager";
import { usePeerStatus } from "./hooks/internal/usePeerStatus";
import { useFishjamClientState } from "./hooks/internal/useFishjamClientState";
import { AUDIO_TRACK_CONSTRAINTS, VIDEO_TRACK_CONSTRAINTS } from "./devices/constraints";
import type { BandwidthLimits, PersistLastDeviceHandlers, StartStreamingProps } from "./types/public";
import { useScreenShareManager } from "./hooks/useScreenShare";
import { mergeWithDefaultBandwitdthLimits } from "./utils/bandwidth";
Expand Down
4 changes: 2 additions & 2 deletions packages/react-client/src/hooks/devices/useCamera.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import type { Device } from "../../types/public";
import { useFishjamContext } from "../useFishjamContext";
import { useDeviceApi } from "./useDeviceApi";
import { useFishjamContext } from "../internal/useFishjamContext";
import { useDeviceApi } from "../internal/device/useDeviceApi";

/**
*
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { useCallback } from "react";
import { prepareConstraints } from "../../constraints";
import { getAvailableMedia, getCorrectedResult } from "../../mediaInitializer";
import { useFishjamContext } from "../useFishjamContext";
import { prepareConstraints } from "../../devices/constraints";
import { getAvailableMedia, getCorrectedResult } from "../../devices/mediaInitializer";
import { useFishjamContext } from "../internal/useFishjamContext";

/**
*
Expand Down
4 changes: 2 additions & 2 deletions packages/react-client/src/hooks/devices/useMicrophone.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import type { Device } from "../../types/public";
import { useFishjamContext } from "../useFishjamContext";
import { useDeviceApi } from "./useDeviceApi";
import { useFishjamContext } from "../internal/useFishjamContext";
import { useDeviceApi } from "../internal/device/useDeviceApi";

/**
*
Expand Down
1 change: 0 additions & 1 deletion packages/react-client/src/hooks/internal.ts

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { useMemo } from "react";
import type { TrackManager } from "../../types/internal";
import type { Device } from "../../types/public";
import type { DeviceManager } from "../../DeviceManager";
import { useDeviceManager } from "../deviceManagers/useDeviceManager";
import type { TrackManager } from "../../../types/internal";
import type { Device } from "../../../types/public";
import type { DeviceManager } from "../../../devices/DeviceManager";
import { useDeviceManager } from "./useDeviceManager";

type DeviceApiDependencies = {
trackManager: TrackManager;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { useCallback, useRef, useSyncExternalStore } from "react";
import type { DeviceManagerState } from "../../types/internal";
import type { DeviceManager, DeviceManagerEvents } from "../../DeviceManager";
import type { DeviceManagerState } from "../../../types/internal";
import type { DeviceManager, DeviceManagerEvents } from "../../../devices/DeviceManager";

const eventNames = [
"deviceDisabled",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { useCallback, useMemo, useRef, useSyncExternalStore } from "react";
import type { Component, MessageEvents, Peer, FishjamClient, GenericMetadata } from "@fishjam-cloud/ts-client";
import type { PeerId } from "../types/internal";
import type { PeerId } from "../../types/internal";

const eventNames = [
"socketClose",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import type { FishjamClient } from "@fishjam-cloud/ts-client";
import { createContext, type MutableRefObject, useContext } from "react";
import type { TrackManager } from "../types/internal";
import type { DeviceManager } from "../DeviceManager";
import type { TrackManager } from "../../types/internal";
import type { DeviceManager } from "../../devices/DeviceManager";
import type { FishjamClientState } from "./useFishjamClientState";
import type { BandwidthLimits, PeerStatus, ScreenshareApi } from "../types/public";
import type { BandwidthLimits, PeerStatus, ScreenshareApi } from "../../types/public";

export type FishjamContextType = {
fishjamClientRef: MutableRefObject<FishjamClient>;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { useCallback, useEffect, useRef, useState } from "react";
import type { FishjamClient } from "@fishjam-cloud/ts-client";
import type { PeerStatus } from "../types/public";
import type { PeerStatus } from "../../types/public";

export const usePeerStatus = (client: FishjamClient) => {
const [peerStatus, setPeerStatusState] = useState<PeerStatus>("idle");
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import type { FishjamClient, TrackMetadata } from "@fishjam-cloud/ts-client";
import type { MediaManager, TrackManager } from "../types/internal";
import { getConfigAndBandwidthFromProps, getRemoteOrLocalTrack } from "../utils/track";
import type { MediaManager, TrackManager } from "../../types/internal";
import { getConfigAndBandwidthFromProps, getRemoteOrLocalTrack } from "../../utils/track";
import { useCallback, useEffect, useMemo, useState } from "react";
import type { BandwidthLimits, PeerStatus, StartStreamingProps, TrackMiddleware } from "../types/public";
import type { BandwidthLimits, PeerStatus, StartStreamingProps, TrackMiddleware } from "../../types/public";

interface TrackManagerConfig {
mediaManager: MediaManager;
Expand Down
10 changes: 0 additions & 10 deletions packages/react-client/src/hooks/public.ts

This file was deleted.

6 changes: 4 additions & 2 deletions packages/react-client/src/hooks/useConnection.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import { useCallback } from "react";
import { useFishjamContext } from "./useFishjamContext";
import type { ConnectConfig } from "../types/public";
import { useFishjamContext } from "./internal/useFishjamContext";
import type { ConnectConfig as TSClientConnectConfig } from "@fishjam-cloud/ts-client";

export type ConnectConfig<P> = Omit<TSClientConnectConfig<P>, "peerMetadata"> & { peerMetadata?: P };

/**
*
Expand Down
7 changes: 5 additions & 2 deletions packages/react-client/src/hooks/usePeers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,11 @@ import type {
TrackContext,
TrackMetadata,
} from "@fishjam-cloud/ts-client";
import type { PeerWithTracks, Track } from "../types/public";
import { useFishjamContext } from "./useFishjamContext";
import type { Track } from "../types/public";
import { useFishjamContext } from "./internal/useFishjamContext";
import type { DistinguishedTracks, PeerState } from "../types/internal";

export type PeerWithTracks<P, S> = PeerState<P, S> & DistinguishedTracks;

function trackContextToTrack(track: FishjamTrackContext | TrackContext): Track {
return {
Expand Down
2 changes: 1 addition & 1 deletion packages/react-client/src/hooks/useReconnection.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { useEffect, useState } from "react";
import { useFishjamContext } from "./useFishjamContext";
import { useFishjamContext } from "./internal/useFishjamContext";
import type { ReconnectionStatus } from "@fishjam-cloud/ts-client";

/**
Expand Down
2 changes: 1 addition & 1 deletion packages/react-client/src/hooks/useScreenShare.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import type { FishjamClient } from "@fishjam-cloud/ts-client";
import { getRemoteOrLocalTrack } from "../utils/track";
import type { TracksMiddleware, ScreenshareApi, PeerStatus } from "../types/public";
import type { ScreenShareState } from "../types/internal";
import { useFishjamContext } from "./useFishjamContext";
import { useFishjamContext } from "./internal/useFishjamContext";

interface ScreenShareManagerProps {
fishjamClient: FishjamClient;
Expand Down
2 changes: 1 addition & 1 deletion packages/react-client/src/hooks/useStatus.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { useFishjamContext } from "./useFishjamContext";
import { useFishjamContext } from "./internal/useFishjamContext";

/**
*
Expand Down
2 changes: 1 addition & 1 deletion packages/react-client/src/hooks/useUpdatePeerMetadata.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { useCallback } from "react";
import { useFishjamContext } from "./useFishjamContext";
import type { GenericMetadata } from "@fishjam-cloud/ts-client";
import { useFishjamContext } from "./internal/useFishjamContext";

export const useUpdatePeerMetadata = <PeerMetadata = GenericMetadata>() => {
const { fishjamClientRef } = useFishjamContext();
Expand Down
4 changes: 2 additions & 2 deletions packages/react-client/src/hooks/useVAD.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { useEffect, useMemo, useState } from "react";
import type { PeerId, TrackId } from "../types/internal";
import { useFishjamContext } from "./useFishjamContext";
import { useFishjamContext } from "./internal/useFishjamContext";
import type { TrackContext, VadStatus } from "@fishjam-cloud/ts-client";
import { useFishjamClientState } from "./useFishjamClientState";
import { useFishjamClientState } from "./internal/useFishjamClientState";

export const useVAD = (peerIds: PeerId[]): Record<PeerId, boolean> => {
const { fishjamClientRef } = useFishjamContext();
Expand Down
36 changes: 16 additions & 20 deletions packages/react-client/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,43 +1,39 @@
export {
useConnect,
useDisconnect,
useReconnection,
useCamera,
useMicrophone,
useInitializeDevices,
usePeers,
useScreenShare,
useStatus,
useUpdatePeerMetadata,
useVAD,
} from "./hooks/public";
export type { ConnectConfig } from "./hooks/useConnection";
export type { PeerWithTracks } from "./hooks/usePeers";

export { useConnect, useDisconnect } from "./hooks/useConnection";
export { usePeers } from "./hooks/usePeers";
export { useReconnection } from "./hooks/useReconnection";
export { useCamera } from "./hooks/devices/useCamera";
export { useMicrophone } from "./hooks/devices/useMicrophone";
export { useInitializeDevices } from "./hooks/devices/useInitializeDevices";
export { useScreenShare } from "./hooks/useScreenShare";
export { useUpdatePeerMetadata } from "./hooks/useUpdatePeerMetadata";
export { useStatus } from "./hooks/useStatus";
export { useVAD } from "./hooks/useVAD";

export { FishjamProvider } from "./fishjamProvider";

export {
export type {
Track,
TrackMiddleware,
TracksMiddleware,
PeerStatus,
Device,
PeerWithTracks,
ConnectConfig,
PersistLastDeviceHandlers,
ScreenshareApi,
StartStreamingProps,
DeviceType,
} from "./types/public";

export { AUDIO_TRACK_CONSTRAINTS, VIDEO_TRACK_CONSTRAINTS, SCREEN_SHARING_MEDIA_CONSTRAINTS } from "./constraints";

export type {
Peer,
MessageEvents,
CreateConfig,
TrackBandwidthLimit,
SimulcastBandwidthLimit,
BandwidthLimit,
WebRTCEndpointEvents,
TrackContextEvents,
Endpoint,
SimulcastConfig,
TrackContext,
VadStatus,
Expand Down
1 change: 1 addition & 0 deletions packages/react-client/src/internal.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { useFishjamClient_DO_NOT_USE } from "./hooks/internal/useFishjamClient_DO_NOT_USE";
3 changes: 1 addition & 2 deletions packages/react-client/src/types/internal.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import type { DeviceType } from "../DeviceManager";
import type { StartStreamingProps, Track, TrackMiddleware, TracksMiddleware } from "./public";
import type { StartStreamingProps, Track, TrackMiddleware, TracksMiddleware, DeviceType } from "./public";
import type { Peer } from "@fishjam-cloud/ts-client";

export type TrackId = string;
Expand Down
23 changes: 4 additions & 19 deletions packages/react-client/src/types/public.ts
Original file line number Diff line number Diff line change
@@ -1,19 +1,6 @@
import type {
Encoding,
SimulcastConfig,
TrackMetadata,
ConnectConfig as TSClientConnectConfig,
VadStatus,
} from "@fishjam-cloud/ts-client";
import type { Encoding, SimulcastConfig, TrackMetadata, VadStatus } from "@fishjam-cloud/ts-client";

import type {
DeviceError,
DeviceManagerStatus,
DistinguishedTracks,
PeerState,
TrackId,
TrackManager,
} from "./internal";
import type { DeviceError, DeviceManagerStatus, TrackId, TrackManager } from "./internal";

export type Track = {
stream: MediaStream | null;
Expand Down Expand Up @@ -56,10 +43,6 @@ export type Device = {
isDeviceEnabled: boolean;
} & Omit<TrackManager, "currentTrack">;

export type PeerWithTracks<P, S> = PeerState<P, S> & DistinguishedTracks;

export type ConnectConfig<P> = Omit<TSClientConnectConfig<P>, "peerMetadata"> & { peerMetadata?: P };

export type PersistLastDeviceHandlers = {
getLastDevice: () => MediaDeviceInfo | null;
saveLastDevice: (info: MediaDeviceInfo) => void;
Expand All @@ -85,3 +68,5 @@ export type SimulcastBandwidthLimits = Record<Encoding, number>;
export type StartStreamingProps = { simulcast?: Encoding[] | false };

export type BandwidthLimits = { singleStream: number; simulcast: SimulcastBandwidthLimits };

export type DeviceType = "audio" | "video";
3 changes: 1 addition & 2 deletions packages/react-client/src/utils/localStorage.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import type { PersistLastDeviceHandlers } from "../types/public";
import type { DeviceType } from "../DeviceManager";
import type { PersistLastDeviceHandlers, DeviceType } from "../types/public";

export function createStorageConfig(
deviceType: DeviceType,
Expand Down

0 comments on commit bb39058

Please sign in to comment.