@fishjam-cloud/react-client 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/dist/Client.d.ts +210 -0
  2. package/dist/Client.d.ts.map +1 -0
  3. package/dist/Client.js +589 -0
  4. package/dist/DeviceManager.d.ts +49 -0
  5. package/dist/DeviceManager.d.ts.map +1 -0
  6. package/dist/DeviceManager.js +157 -0
  7. package/dist/ScreenShareManager.d.ts +57 -0
  8. package/dist/ScreenShareManager.d.ts.map +1 -0
  9. package/dist/ScreenShareManager.js +135 -0
  10. package/dist/constraints.d.ts +26 -0
  11. package/dist/constraints.d.ts.map +1 -0
  12. package/dist/constraints.js +47 -0
  13. package/dist/create.d.ts +11 -0
  14. package/dist/create.d.ts.map +1 -0
  15. package/dist/create.js +228 -0
  16. package/dist/index.d.ts +10 -0
  17. package/dist/index.d.ts.map +1 -0
  18. package/dist/index.js +4 -0
  19. package/dist/mediaInitializer.d.ts +11 -0
  20. package/dist/mediaInitializer.d.ts.map +1 -0
  21. package/dist/mediaInitializer.js +48 -0
  22. package/dist/state.types.d.ts +60 -0
  23. package/dist/state.types.d.ts.map +1 -0
  24. package/dist/state.types.js +1 -0
  25. package/dist/trackManager.d.ts +24 -0
  26. package/dist/trackManager.d.ts.map +1 -0
  27. package/dist/trackManager.js +99 -0
  28. package/dist/types.d.ts +213 -0
  29. package/dist/types.d.ts.map +1 -0
  30. package/dist/types.js +1 -0
  31. package/dist/useSetupMedia.d.ts +3 -0
  32. package/dist/useSetupMedia.d.ts.map +1 -0
  33. package/dist/useSetupMedia.js +262 -0
  34. package/dist/utils/errors.d.ts +7 -0
  35. package/dist/utils/errors.d.ts.map +1 -0
  36. package/dist/utils/errors.js +22 -0
  37. package/dist/utils/localStorage.d.ts +5 -0
  38. package/dist/utils/localStorage.d.ts.map +1 -0
  39. package/dist/utils/localStorage.js +21 -0
  40. package/dist/utils/media.d.ts +12 -0
  41. package/dist/utils/media.d.ts.map +1 -0
  42. package/dist/utils/media.js +64 -0
  43. package/package.json +65 -0
  44. package/readme.md +151 -0
@@ -0,0 +1,10 @@
1
+ export { create } from "./create";
2
+ export { Client } from "./Client";
3
+ export type { ClientEvents } from "./Client";
4
+ export type { PeerState, Track, PeerId, TrackId, TrackWithOrigin, Origin, PeerStatus, Selector, State, SetStore, } from "./state.types";
5
+ export type { DeviceManagerConfig, StorageConfig, Devices, UserMediaAPI, ScreenShareAPI, UseSetupMediaResult, UseSetupMediaConfig, CreateFishjamClient, UseConnect, GenericTrackManager, } from "./types";
6
+ export type { ScreenShareManagerConfig } from "./ScreenShareManager";
7
+ export { AUDIO_TRACK_CONSTRAINTS, VIDEO_TRACK_CONSTRAINTS, SCREEN_SHARING_MEDIA_CONSTRAINTS } from "./constraints";
8
+ export type { Peer, MessageEvents, SignalingUrl, CreateConfig, TrackBandwidthLimit, SimulcastBandwidthLimit, BandwidthLimit, WebRTCEndpointEvents, TrackContextEvents, Endpoint, SimulcastConfig, TrackContext, VadStatus, EncodingReason, MetadataParser, ConnectConfig, AuthErrorReason, Encoding, } from "@fishjam-cloud/ts-client";
9
+ export { FishjamClient } from "@fishjam-cloud/ts-client";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,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,OAAO,EACP,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,UAAU,EACV,mBAAmB,GACpB,MAAM,SAAS,CAAC;AAEjB,YAAY,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAErE,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,gCAAgC,EAAE,MAAM,eAAe,CAAC;AAEnH,YAAY,EACV,IAAI,EACJ,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,EACd,oBAAoB,EACpB,kBAAkB,EAClB,QAAQ,EACR,eAAe,EACf,YAAY,EACZ,SAAS,EACT,cAAc,EACd,cAAc,EACd,aAAa,EACb,eAAe,EACf,QAAQ,GACT,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,4 @@
1
+ export { create } from "./create";
2
+ export { Client } from "./Client";
3
+ export { AUDIO_TRACK_CONSTRAINTS, VIDEO_TRACK_CONSTRAINTS, SCREEN_SHARING_MEDIA_CONSTRAINTS } from "./constraints";
4
+ export { FishjamClient } from "@fishjam-cloud/ts-client";
@@ -0,0 +1,11 @@
1
+ import type { DeviceError } from "./types";
2
+ type AudioVideo<T> = {
3
+ audio: T;
4
+ video: T;
5
+ };
6
+ type MediaConstraints = AudioVideo<MediaTrackConstraints | undefined>;
7
+ type PreviousDevices = AudioVideo<MediaDeviceInfo | null>;
8
+ export declare const getAvailableMedia: (constraints: MediaStreamConstraints, deviceErrors?: AudioVideo<DeviceError | null>) => Promise<[MediaStream | null, AudioVideo<DeviceError | null>]>;
9
+ export declare const getCorrectedResult: (stream: MediaStream, deviceErrors: AudioVideo<DeviceError | null>, devices: MediaDeviceInfo[], constraints: MediaConstraints, previousDevices: PreviousDevices) => Promise<[MediaStream | null, AudioVideo<DeviceError | null>]>;
10
+ export {};
11
+ //# sourceMappingURL=mediaInitializer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mediaInitializer.d.ts","sourceRoot":"","sources":["../src/mediaInitializer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAS3C,KAAK,UAAU,CAAC,CAAC,IAAI;IAAE,KAAK,EAAE,CAAC,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,CAAC;AAE5C,KAAK,gBAAgB,GAAG,UAAU,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAAC;AAEtE,KAAK,eAAe,GAAG,UAAU,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;AAsB1D,eAAO,MAAM,iBAAiB,gBACf,sBAAsB,iBACrB,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,KAC3C,OAAO,CAAC,CAAC,WAAW,GAAG,IAAI,EAAE,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC,CAuB9D,CAAC;AAIF,eAAO,MAAM,kBAAkB,WACrB,WAAW,gBACL,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,WACnC,eAAe,EAAE,eACb,gBAAgB,mBACZ,eAAe,KAC/B,OAAO,CAAC,CAAC,WAAW,GAAG,IAAI,EAAE,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC,CAsB9D,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { prepareConstraints } from "./constraints";
2
+ import { NOT_FOUND_ERROR, OVERCONSTRAINED_ERROR, PERMISSION_DENIED, UNHANDLED_ERROR } from "./utils/errors";
3
+ import { getCurrentDevicesSettings, stopTracks, isAnyDeviceDifferentFromLastSession, removeSpecifiedDeviceFromConstraints, } from "./utils/media";
4
+ const defaultErrors = { audio: null, video: null };
5
+ const tryToGetAudioOnlyThenVideoOnly = async (constraints, deviceErrors = defaultErrors, transformConstraint = () => false) => {
6
+ const audioOnly = await getAvailableMedia({ ...constraints, video: transformConstraint(constraints.video) }, { ...deviceErrors, audio: null });
7
+ if (audioOnly[0])
8
+ return audioOnly;
9
+ return getAvailableMedia({ ...constraints, audio: transformConstraint(constraints.audio) }, { ...deviceErrors, video: null });
10
+ };
11
+ export const getAvailableMedia = async (constraints, deviceErrors = defaultErrors) => {
12
+ try {
13
+ return [await navigator.mediaDevices.getUserMedia(constraints), deviceErrors];
14
+ }
15
+ catch (err) {
16
+ if (!(err instanceof DOMException))
17
+ return [null, { audio: UNHANDLED_ERROR, video: UNHANDLED_ERROR }];
18
+ if (err.name === deviceErrors.audio?.name || err.name === deviceErrors.video?.name)
19
+ return [null, deviceErrors];
20
+ switch (err.name) {
21
+ case "NotFoundError":
22
+ return tryToGetAudioOnlyThenVideoOnly(constraints, { audio: NOT_FOUND_ERROR, video: NOT_FOUND_ERROR });
23
+ case "OverconstrainedError":
24
+ return tryToGetAudioOnlyThenVideoOnly(constraints, { audio: OVERCONSTRAINED_ERROR, video: OVERCONSTRAINED_ERROR }, removeSpecifiedDeviceFromConstraints);
25
+ case "NotAllowedError":
26
+ return tryToGetAudioOnlyThenVideoOnly(constraints, { audio: PERMISSION_DENIED, video: PERMISSION_DENIED });
27
+ default:
28
+ return [null, { audio: UNHANDLED_ERROR, video: UNHANDLED_ERROR }];
29
+ }
30
+ }
31
+ };
32
+ // Safari changes deviceId between sessions, therefore we cannot rely on deviceId for identification purposes.
33
+ // We can switch a random device that comes from safari to one that has the same label as the one used in the previous session.
34
+ export const getCorrectedResult = async (stream, deviceErrors, devices, constraints, previousDevices) => {
35
+ const shouldCorrectDevices = isAnyDeviceDifferentFromLastSession(previousDevices.video, previousDevices.audio, getCurrentDevicesSettings(stream, devices));
36
+ if (!shouldCorrectDevices)
37
+ return [stream, deviceErrors];
38
+ const videoIdToStart = devices.find((info) => info.label === previousDevices.video?.label)?.deviceId;
39
+ const audioIdToStart = devices.find((info) => info.label === previousDevices.audio?.label)?.deviceId;
40
+ if (!videoIdToStart && !audioIdToStart)
41
+ return [stream, deviceErrors];
42
+ stopTracks(stream);
43
+ const exactConstraints = {
44
+ video: !deviceErrors.video && prepareConstraints(videoIdToStart, constraints.video),
45
+ audio: !deviceErrors.audio && prepareConstraints(audioIdToStart, constraints.audio),
46
+ };
47
+ return await getAvailableMedia(exactConstraints, deviceErrors);
48
+ };
@@ -0,0 +1,60 @@
1
+ import type { Encoding, VadStatus, SimulcastConfig, ReconnectionStatus } from "@fishjam-cloud/ts-client";
2
+ import type { MediaState } from "./types";
3
+ import type { Devices } from "./types";
4
+ import type { Client } from "./Client";
5
+ import type { ScreenShareManager } from "./ScreenShareManager";
6
+ import type { TrackManager } from "./trackManager";
7
+ export type TrackId = string;
8
+ export type PeerId = string;
9
+ export type Track<TrackMetadata> = {
10
+ stream: MediaStream | null;
11
+ encoding: Encoding | null;
12
+ trackId: TrackId;
13
+ metadata?: TrackMetadata;
14
+ rawMetadata: any;
15
+ metadataParsingError?: any;
16
+ simulcastConfig: SimulcastConfig | null;
17
+ vadStatus: VadStatus;
18
+ track: MediaStreamTrack | null;
19
+ };
20
+ export interface Origin<OriginMetadata> {
21
+ id: string;
22
+ type: string;
23
+ metadata?: OriginMetadata;
24
+ rawMetadata: any;
25
+ metadataParsingError?: any;
26
+ }
27
+ export type TrackWithOrigin<PeerMetadata, TrackMetadata> = Track<TrackMetadata> & {
28
+ origin: Origin<PeerMetadata>;
29
+ };
30
+ export type PeerState<PeerMetadata, TrackMetadata> = {
31
+ id: PeerId;
32
+ metadata?: PeerMetadata;
33
+ rawMetadata: any;
34
+ metadataParsingError?: any;
35
+ tracks: Record<TrackId, Track<TrackMetadata>>;
36
+ };
37
+ export type PeerStatus = "connecting" | "connected" | "authenticated" | "joined" | "error" | "closed" | null;
38
+ export type UseReconnection = {
39
+ status: ReconnectionStatus;
40
+ isReconnecting: boolean;
41
+ isError: boolean;
42
+ isIdle: boolean;
43
+ };
44
+ export type State<PeerMetadata, TrackMetadata> = {
45
+ local: PeerState<PeerMetadata, TrackMetadata> | null;
46
+ remote: Record<PeerId, PeerState<PeerMetadata, TrackMetadata>>;
47
+ tracks: Record<TrackId, TrackWithOrigin<PeerMetadata, TrackMetadata>>;
48
+ bandwidthEstimation: bigint;
49
+ status: PeerStatus;
50
+ media: MediaState | null;
51
+ devices: Devices<TrackMetadata>;
52
+ client: Client<PeerMetadata, TrackMetadata>;
53
+ videoTrackManager: TrackManager<PeerMetadata, TrackMetadata>;
54
+ audioTrackManager: TrackManager<PeerMetadata, TrackMetadata>;
55
+ screenShareManager: ScreenShareManager;
56
+ reconnectionStatus: ReconnectionStatus;
57
+ };
58
+ export type SetStore<PeerMetadata, TrackMetadata> = (setter: (prevState: State<PeerMetadata, TrackMetadata>) => State<PeerMetadata, TrackMetadata>) => void;
59
+ export type Selector<PeerMetadata, TrackMetadata, Result> = (snapshot: State<PeerMetadata, TrackMetadata>) => Result;
60
+ //# sourceMappingURL=state.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.types.d.ts","sourceRoot":"","sources":["../src/state.types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,24 @@
1
+ import type { FishjamClient, SimulcastConfig, TrackBandwidthLimit } from "@fishjam-cloud/ts-client";
2
+ import type { GenericMediaManager, GenericTrackManager } from "./types";
3
+ import type { Track } from "./state.types";
4
+ export declare class TrackManager<PeerMetadata, TrackMetadata> implements GenericTrackManager<TrackMetadata> {
5
+ private mediaManager;
6
+ private tsClient;
7
+ private currentTrackId;
8
+ constructor(tsClient: FishjamClient<PeerMetadata, TrackMetadata>, deviceManager: GenericMediaManager);
9
+ private getPreviousTrack;
10
+ getCurrentTrack: () => Track<TrackMetadata> | null;
11
+ private trackContextToTrack;
12
+ private getRemoteTrack;
13
+ initialize: (deviceId?: string) => Promise<void>;
14
+ cleanup: () => Promise<void>;
15
+ startStreaming: (trackMetadata?: TrackMetadata, simulcastConfig?: SimulcastConfig, maxBandwidth?: TrackBandwidthLimit) => Promise<string>;
16
+ refreshStreamedTrack: () => Promise<void>;
17
+ stopStreaming: () => Promise<void>;
18
+ pauseStreaming: () => Promise<void>;
19
+ isMuted: () => boolean;
20
+ resumeStreaming: () => Promise<void>;
21
+ disableTrack: () => Promise<void>;
22
+ enableTrack: () => Promise<void>;
23
+ }
24
+ //# sourceMappingURL=trackManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trackManager.d.ts","sourceRoot":"","sources":["../src/trackManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,mBAAmB,EAAgB,MAAM,0BAA0B,CAAC;AAClH,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AACxE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAE3C,qBAAa,YAAY,CAAC,YAAY,EAAE,aAAa,CAAE,YAAW,mBAAmB,CAAC,aAAa,CAAC;IAClG,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,QAAQ,CAA6C;IAC7D,OAAO,CAAC,cAAc,CAAuB;gBAEjC,QAAQ,EAAE,aAAa,CAAC,YAAY,EAAE,aAAa,CAAC,EAAE,aAAa,EAAE,mBAAmB;IAKpG,OAAO,CAAC,gBAAgB,CAQtB;IAEK,eAAe,QAAO,KAAK,CAAC,aAAa,CAAC,GAAG,IAAI,CAGtD;IAEF,OAAO,CAAC,mBAAmB,CAUxB;IAEH,OAAO,CAAC,cAAc,CASpB;IAEK,UAAU,cAAqB,MAAM,mBAE1C;IAEK,OAAO,sBAEZ;IAEK,cAAc,mBACH,aAAa,oBACX,eAAe,iBAClB,mBAAmB,qBAoBlC;IAEK,oBAAoB,sBAOzB;IAEK,aAAa,sBAIlB;IAEK,cAAc,sBAGnB;IAEK,OAAO,gBAMZ;IAEK,eAAe,sBAOpB;IAEK,YAAY,sBAEjB;IAEK,WAAW,sBAEhB;CACH"}
@@ -0,0 +1,99 @@
1
+ export class TrackManager {
2
+ mediaManager;
3
+ tsClient;
4
+ currentTrackId = null;
5
+ constructor(tsClient, deviceManager) {
6
+ this.mediaManager = deviceManager;
7
+ this.tsClient = tsClient;
8
+ }
9
+ getPreviousTrack = () => {
10
+ if (!this.currentTrackId)
11
+ throw Error("There is no current track id");
12
+ const prevTrack = this.getRemoteTrack(this.currentTrackId);
13
+ if (!prevTrack)
14
+ throw Error("There is no previous track");
15
+ return prevTrack;
16
+ };
17
+ getCurrentTrack = () => {
18
+ if (!this.currentTrackId)
19
+ return null;
20
+ return this.getRemoteTrack(this.currentTrackId);
21
+ };
22
+ trackContextToTrack = (track) => ({
23
+ rawMetadata: track.rawMetadata,
24
+ metadata: track.metadata,
25
+ trackId: track.trackId,
26
+ stream: track.stream,
27
+ simulcastConfig: track.simulcastConfig || null,
28
+ encoding: track.encoding || null,
29
+ vadStatus: track.vadStatus,
30
+ track: track.track,
31
+ metadataParsingError: track.metadataParsingError,
32
+ });
33
+ getRemoteTrack = (remoteOrLocalTrackId) => {
34
+ const tracks = this.tsClient?.getLocalPeer()?.tracks;
35
+ if (!tracks)
36
+ return null;
37
+ const trackByRemoteId = tracks?.get(remoteOrLocalTrackId);
38
+ if (trackByRemoteId)
39
+ return this.trackContextToTrack(trackByRemoteId);
40
+ const trackByLocalId = [...tracks.values()].find((track) => track.track?.id === remoteOrLocalTrackId);
41
+ return trackByLocalId ? this.trackContextToTrack(trackByLocalId) : null;
42
+ };
43
+ initialize = async (deviceId) => {
44
+ this.mediaManager?.start(deviceId ?? true);
45
+ };
46
+ cleanup = async () => {
47
+ this?.mediaManager?.stop();
48
+ };
49
+ startStreaming = async (trackMetadata, simulcastConfig, maxBandwidth) => {
50
+ if (this.currentTrackId)
51
+ throw Error("Track already added");
52
+ const media = this.mediaManager.getMedia();
53
+ if (!media || !media.stream || !media.track)
54
+ throw Error("Device is unavailable");
55
+ const track = this.getRemoteTrack(media.track.id);
56
+ if (track)
57
+ return track.trackId;
58
+ // see `getRemoteTrack()` explanation
59
+ this.currentTrackId = media.track.id;
60
+ const remoteTrackId = await this.tsClient.addTrack(media.track, trackMetadata, simulcastConfig, maxBandwidth);
61
+ this.currentTrackId = remoteTrackId;
62
+ return remoteTrackId;
63
+ };
64
+ refreshStreamedTrack = async () => {
65
+ const prevTrack = this.getPreviousTrack();
66
+ const newTrack = this.mediaManager.getTracks()[0];
67
+ if (!newTrack)
68
+ throw Error("New track is empty");
69
+ return this.tsClient.replaceTrack(prevTrack.trackId, newTrack);
70
+ };
71
+ stopStreaming = async () => {
72
+ const prevTrack = this.getPreviousTrack();
73
+ this.currentTrackId = null;
74
+ return this.tsClient.removeTrack(prevTrack.trackId);
75
+ };
76
+ pauseStreaming = async () => {
77
+ const prevTrack = this.getPreviousTrack();
78
+ await this.tsClient.replaceTrack(prevTrack.trackId, null);
79
+ };
80
+ isMuted = () => {
81
+ const media = this.mediaManager.getMedia();
82
+ const isTrackDisabled = !media?.track?.enabled;
83
+ const areMediaDisabled = !media?.enabled;
84
+ return isTrackDisabled && areMediaDisabled;
85
+ };
86
+ resumeStreaming = async () => {
87
+ const prevTrack = this.getPreviousTrack();
88
+ const media = this.mediaManager.getMedia();
89
+ if (!media)
90
+ throw Error("Device is unavailable");
91
+ await this.tsClient.replaceTrack(prevTrack.trackId, media.track);
92
+ };
93
+ disableTrack = async () => {
94
+ this.mediaManager.disable();
95
+ };
96
+ enableTrack = async () => {
97
+ this.mediaManager.enable();
98
+ };
99
+ }
@@ -0,0 +1,213 @@
1
+ import type { ConnectConfig, SimulcastConfig, TrackBandwidthLimit } from "@fishjam-cloud/ts-client";
2
+ import type { ScreenShareManagerConfig } from "./ScreenShareManager";
3
+ import type { PeerState, PeerStatus, Selector, State, Track, TrackId, TrackWithOrigin, UseReconnection } from "./state.types";
4
+ import type { JSX, ReactNode } from "react";
5
+ import type { Client } from "./Client";
6
+ export type DevicesStatus = "OK" | "Error" | "Not requested" | "Requesting";
7
+ export type MediaStatus = "OK" | "Error" | "Not requested" | "Requesting";
8
+ export type Media = {
9
+ stream: MediaStream | null;
10
+ track: MediaStreamTrack | null;
11
+ enabled: boolean;
12
+ deviceInfo: MediaDeviceInfo | null;
13
+ };
14
+ export type DeviceState = {
15
+ media: Media | null;
16
+ mediaStatus: MediaStatus;
17
+ devices: MediaDeviceInfo[] | null;
18
+ devicesStatus: DevicesStatus;
19
+ error: DeviceError | null;
20
+ };
21
+ export type MediaState = {
22
+ video: DeviceState;
23
+ audio: DeviceState;
24
+ };
25
+ export type DeviceManagerInitConfig = {
26
+ videoTrackConstraints?: boolean | MediaTrackConstraints;
27
+ audioTrackConstraints?: boolean | MediaTrackConstraints;
28
+ };
29
+ export type DeviceManagerConfig = {
30
+ trackConstraints?: boolean | MediaTrackConstraints;
31
+ startOnMount?: boolean;
32
+ storage?: boolean | StorageConfig;
33
+ };
34
+ export type StorageConfig = {
35
+ getLastDevice: (() => MediaDeviceInfo | null) | null;
36
+ saveLastDevice: (info: MediaDeviceInfo) => void;
37
+ };
38
+ export type DeviceManagerStartConfig = {
39
+ audioDeviceId?: string | boolean;
40
+ videoDeviceId?: string | boolean;
41
+ };
42
+ export type DeviceError = {
43
+ name: "OverconstrainedError";
44
+ } | {
45
+ name: "NotAllowedError";
46
+ } | {
47
+ name: "NotFoundError";
48
+ } | {
49
+ name: "UNHANDLED_ERROR";
50
+ };
51
+ export type Errors = {
52
+ audio?: DeviceError | null;
53
+ video?: DeviceError | null;
54
+ };
55
+ export type CurrentDevices = {
56
+ videoinput: MediaDeviceInfo | null;
57
+ audioinput: MediaDeviceInfo | null;
58
+ };
59
+ export type UseSetupMediaConfig<TrackMetadata> = {
60
+ camera: {
61
+ /**
62
+ * Determines whether broadcasting should start when the user connects to the server with an active camera stream.
63
+ */
64
+ broadcastOnConnect?: boolean;
65
+ /**
66
+ * Determines whether broadcasting should start when the user initiates the camera and is connected to the server.
67
+ */
68
+ broadcastOnDeviceStart?: boolean;
69
+ /**
70
+ * Determines whether track should be replaced when the user requests a device.
71
+ * default: replace
72
+ */
73
+ onDeviceChange?: "replace" | "remove";
74
+ /**
75
+ * Determines whether currently broadcasted track should be removed or muted
76
+ * when the user stopped a device.
77
+ * default: replace
78
+ */
79
+ onDeviceStop?: "remove" | "mute";
80
+ trackConstraints: boolean | MediaTrackConstraints;
81
+ defaultTrackMetadata?: TrackMetadata;
82
+ defaultSimulcastConfig?: SimulcastConfig;
83
+ defaultMaxBandwidth?: TrackBandwidthLimit;
84
+ };
85
+ microphone: {
86
+ /**
87
+ * Determines whether broadcasting should start when the user connects to the server with an active camera stream.
88
+ */
89
+ broadcastOnConnect?: boolean;
90
+ /**
91
+ * Determines whether broadcasting should start when the user initiates the camera and is connected to the server.
92
+ */
93
+ broadcastOnDeviceStart?: boolean;
94
+ /**
95
+ * Determines whether currently broadcasted track should be replaced or stopped
96
+ * when the user changed a device.
97
+ * default: replace
98
+ */
99
+ onDeviceChange?: "replace" | "remove";
100
+ /**
101
+ * Determines whether currently broadcasted track should be removed or muted
102
+ * when the user stopped a device.
103
+ * default: replace
104
+ */
105
+ onDeviceStop?: "remove" | "mute";
106
+ trackConstraints: boolean | MediaTrackConstraints;
107
+ defaultTrackMetadata?: TrackMetadata;
108
+ defaultMaxBandwidth?: TrackBandwidthLimit;
109
+ };
110
+ screenShare: {
111
+ /**
112
+ * Determines whether broadcasting should start when the user connects to the server with an active camera stream.
113
+ */
114
+ broadcastOnConnect?: boolean;
115
+ /**
116
+ * Determines whether broadcasting should start when the user initiates the camera and is connected to the server.
117
+ */
118
+ broadcastOnDeviceStart?: boolean;
119
+ streamConfig?: ScreenShareManagerConfig;
120
+ defaultTrackMetadata?: TrackMetadata;
121
+ defaultMaxBandwidth?: TrackBandwidthLimit;
122
+ };
123
+ startOnMount?: boolean;
124
+ storage?: boolean | StorageConfig;
125
+ };
126
+ export type UseSetupMediaResult = {
127
+ init: () => void;
128
+ };
129
+ export interface GenericMediaManager {
130
+ start: (deviceId?: string | boolean) => Promise<void>;
131
+ stop: () => Promise<void>;
132
+ disable: () => void;
133
+ enable: () => void;
134
+ getTracks: () => MediaStreamTrack[];
135
+ getMedia: () => {
136
+ stream: MediaStream | null;
137
+ track: MediaStreamTrack | null;
138
+ enabled: boolean;
139
+ } | null;
140
+ }
141
+ export interface GenericTrackManager<TrackMetadata> {
142
+ initialize: (deviceId?: string) => Promise<void>;
143
+ cleanup: () => Promise<void>;
144
+ startStreaming: (trackMetadata?: TrackMetadata, simulcastConfig?: SimulcastConfig, maxBandwidth?: TrackBandwidthLimit) => Promise<string>;
145
+ stopStreaming: () => Promise<void>;
146
+ pauseStreaming: () => Promise<void>;
147
+ resumeStreaming: () => Promise<void>;
148
+ disableTrack: () => void;
149
+ enableTrack: () => void;
150
+ }
151
+ export type UserMediaAPI<TrackMetadata> = {
152
+ broadcast: Track<TrackMetadata> | null;
153
+ status: DevicesStatus | null;
154
+ stream: MediaStream | null;
155
+ track: MediaStreamTrack | null;
156
+ enabled: boolean;
157
+ mediaStatus: MediaStatus | null;
158
+ deviceInfo: MediaDeviceInfo | null;
159
+ error: DeviceError | null;
160
+ devices: MediaDeviceInfo[] | null;
161
+ };
162
+ export type ScreenShareAPI<TrackMetadata> = {
163
+ initialize: (config?: ScreenShareManagerConfig) => Promise<void>;
164
+ cleanup: () => Promise<void>;
165
+ startStreaming: (trackMetadata?: TrackMetadata, maxBandwidth?: TrackBandwidthLimit) => Promise<string>;
166
+ stopStreaming: () => Promise<void>;
167
+ disableTrack: () => void;
168
+ enableTrack: () => void;
169
+ broadcast: Track<TrackMetadata> | null;
170
+ status: DevicesStatus | null;
171
+ stream: MediaStream | null;
172
+ track: MediaStreamTrack | null;
173
+ enabled: boolean;
174
+ mediaStatus: MediaStatus | null;
175
+ error: DeviceError | null;
176
+ };
177
+ export type Devices<TrackMetadata> = {
178
+ camera: UserMediaAPI<TrackMetadata>;
179
+ microphone: UserMediaAPI<TrackMetadata>;
180
+ screenShare: ScreenShareAPI<TrackMetadata>;
181
+ };
182
+ export type FishjamContextProviderProps = {
183
+ children: ReactNode;
184
+ };
185
+ export type FishjamContextType<PeerMetadata, TrackMetadata> = {
186
+ state: State<PeerMetadata, TrackMetadata>;
187
+ };
188
+ export type UseConnect<PeerMetadata> = (config: ConnectConfig<PeerMetadata>) => () => void;
189
+ type DistinguishedTracks<TrackMetadata> = {
190
+ videoTrack?: Track<TrackMetadata>;
191
+ audioTrack?: Track<TrackMetadata>;
192
+ };
193
+ export type PeerStateWithTracks<PeerMetadata, TrackMetadata> = PeerState<PeerMetadata, TrackMetadata> & DistinguishedTracks<TrackMetadata>;
194
+ export type CreateFishjamClient<PeerMetadata, TrackMetadata> = {
195
+ FishjamContextProvider: ({ children }: FishjamContextProviderProps) => JSX.Element;
196
+ useConnect: () => (config: ConnectConfig<PeerMetadata>) => () => void;
197
+ useDisconnect: () => () => void;
198
+ useStatus: () => PeerStatus;
199
+ useSelector: <Result>(selector: Selector<PeerMetadata, TrackMetadata, Result>) => Result;
200
+ useTracks: () => Record<TrackId, TrackWithOrigin<PeerMetadata, TrackMetadata>>;
201
+ useSetupMedia: (config: UseSetupMediaConfig<TrackMetadata>) => UseSetupMediaResult;
202
+ useCamera: () => Devices<TrackMetadata>["camera"] & GenericTrackManager<TrackMetadata>;
203
+ useMicrophone: () => Devices<TrackMetadata>["microphone"] & GenericTrackManager<TrackMetadata>;
204
+ useScreenShare: () => ScreenShareAPI<TrackMetadata>;
205
+ useClient: () => Client<PeerMetadata, TrackMetadata>;
206
+ useReconnection: () => UseReconnection;
207
+ useParticipants: () => {
208
+ localParticipant: PeerStateWithTracks<PeerMetadata, TrackMetadata> | null;
209
+ participants: PeerStateWithTracks<PeerMetadata, TrackMetadata>[];
210
+ };
211
+ };
212
+ export {};
213
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,3 @@
1
+ import type { FishjamContextType, UseSetupMediaConfig, UseSetupMediaResult } from "./types";
2
+ export declare const createUseSetupMediaHook: <PeerMetadata, TrackMetadata>(useFishjamContext: () => FishjamContextType<PeerMetadata, TrackMetadata>) => (config: UseSetupMediaConfig<TrackMetadata>) => UseSetupMediaResult;
3
+ //# sourceMappingURL=useSetupMedia.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSetupMedia.d.ts","sourceRoot":"","sources":["../src/useSetupMedia.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAM5F,eAAO,MAAM,uBAAuB,GAAI,YAAY,EAAE,aAAa,qBAC9C,MAAM,kBAAkB,CAAC,YAAY,EAAE,aAAa,CAAC,cAQxD,mBAAmB,CAAC,aAAa,CAAC,KAAG,mBAmVtD,CAAC"}