@fishjam-cloud/react-client 0.6.0 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/DeviceManager.d.ts +15 -10
- package/dist/DeviceManager.d.ts.map +1 -1
- package/dist/DeviceManager.js +29 -35
- package/dist/constraints.d.ts +2 -22
- package/dist/constraints.d.ts.map +1 -1
- package/dist/constraints.js +11 -16
- package/dist/fishjamProvider.d.ts +10 -8
- package/dist/fishjamProvider.d.ts.map +1 -1
- package/dist/fishjamProvider.js +47 -23
- package/dist/hooks/deviceManagers/useAudioDeviceManager.d.ts +6 -0
- package/dist/hooks/deviceManagers/useAudioDeviceManager.d.ts.map +1 -0
- package/dist/hooks/deviceManagers/useAudioDeviceManager.js +11 -0
- package/dist/hooks/deviceManagers/useDeviceManager.d.ts +4 -0
- package/dist/hooks/deviceManagers/useDeviceManager.d.ts.map +1 -0
- package/dist/hooks/deviceManagers/useDeviceManager.js +39 -0
- package/dist/hooks/deviceManagers/useVideoDeviceManager.d.ts +6 -0
- package/dist/hooks/deviceManagers/useVideoDeviceManager.d.ts.map +1 -0
- package/dist/hooks/deviceManagers/useVideoDeviceManager.js +11 -0
- package/dist/hooks/internal.d.ts +2 -0
- package/dist/hooks/internal.d.ts.map +1 -0
- package/dist/hooks/internal.js +1 -0
- package/dist/hooks/public.d.ts +6 -6
- package/dist/hooks/public.d.ts.map +1 -1
- package/dist/hooks/public.js +6 -6
- package/dist/hooks/useConnection.d.ts +12 -0
- package/dist/hooks/useConnection.d.ts.map +1 -0
- package/dist/hooks/useConnection.js +20 -0
- package/dist/hooks/useDevices.d.ts +19 -0
- package/dist/hooks/useDevices.d.ts.map +1 -0
- package/dist/hooks/useDevices.js +98 -0
- package/dist/hooks/useFishjamClientState.d.ts +10 -0
- package/dist/hooks/useFishjamClientState.d.ts.map +1 -0
- package/dist/hooks/{clientState.js → useFishjamClientState.js} +49 -34
- package/dist/hooks/useFishjamClient_DO_NOT_USE.d.ts +7 -0
- package/dist/hooks/useFishjamClient_DO_NOT_USE.d.ts.map +1 -0
- package/dist/hooks/useFishjamClient_DO_NOT_USE.js +11 -0
- package/dist/hooks/useFishjamContext.d.ts +20 -0
- package/dist/hooks/useFishjamContext.d.ts.map +1 -0
- package/dist/hooks/usePeerStatus.d.ts +8 -0
- package/dist/hooks/usePeerStatus.d.ts.map +1 -0
- package/dist/hooks/usePeerStatus.js +39 -0
- package/dist/hooks/usePeers.d.ts +10 -0
- package/dist/hooks/usePeers.d.ts.map +1 -0
- package/dist/hooks/usePeers.js +19 -0
- package/dist/hooks/useProcessedPreviewStream.d.ts +3 -0
- package/dist/hooks/useProcessedPreviewStream.d.ts.map +1 -0
- package/dist/hooks/useProcessedPreviewStream.js +17 -0
- package/dist/hooks/useReconnection.d.ts +7 -0
- package/dist/hooks/useReconnection.d.ts.map +1 -0
- package/dist/hooks/useReconnection.js +31 -0
- package/dist/hooks/useScreenShare.d.ts +7 -0
- package/dist/hooks/useScreenShare.d.ts.map +1 -0
- package/dist/hooks/{screenShare.js → useScreenShare.js} +53 -24
- package/dist/hooks/useStatus.d.ts +6 -0
- package/dist/hooks/useStatus.d.ts.map +1 -0
- package/dist/hooks/useStatus.js +8 -0
- package/dist/hooks/useTrackManager.d.ts +11 -0
- package/dist/hooks/useTrackManager.d.ts.map +1 -0
- package/dist/hooks/useTrackManager.js +176 -0
- package/dist/index.d.ts +3 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -4
- package/dist/mediaInitializer.d.ts +2 -2
- package/dist/mediaInitializer.d.ts.map +1 -1
- package/dist/types/internal.d.ts +129 -0
- package/dist/types/internal.d.ts.map +1 -0
- package/dist/types/public.d.ts +65 -0
- package/dist/types/public.d.ts.map +1 -0
- package/dist/utils/errors.d.ts +1 -1
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/media.d.ts +3 -2
- package/dist/utils/media.d.ts.map +1 -1
- package/dist/utils/track.d.ts +2 -2
- package/dist/utils/track.d.ts.map +1 -1
- package/dist/utils/track.js +0 -2
- package/package.json +12 -15
- package/readme.md +20 -118
- package/dist/Client.d.ts +0 -198
- package/dist/Client.d.ts.map +0 -1
- package/dist/Client.js +0 -461
- package/dist/hooks/clientState.d.ts +0 -4
- package/dist/hooks/clientState.d.ts.map +0 -1
- package/dist/hooks/connection.d.ts +0 -6
- package/dist/hooks/connection.d.ts.map +0 -1
- package/dist/hooks/connection.js +0 -28
- package/dist/hooks/devices.d.ts +0 -4
- package/dist/hooks/devices.d.ts.map +0 -1
- package/dist/hooks/devices.js +0 -9
- package/dist/hooks/fishjamContext.d.ts +0 -4
- package/dist/hooks/fishjamContext.d.ts.map +0 -1
- package/dist/hooks/participants.d.ts +0 -6
- package/dist/hooks/participants.d.ts.map +0 -1
- package/dist/hooks/participants.js +0 -13
- package/dist/hooks/screenShare.d.ts +0 -3
- package/dist/hooks/screenShare.d.ts.map +0 -1
- package/dist/hooks/setupMedia.d.ts +0 -3
- package/dist/hooks/setupMedia.d.ts.map +0 -1
- package/dist/hooks/setupMedia.js +0 -200
- package/dist/hooks/state.d.ts +0 -6
- package/dist/hooks/state.d.ts.map +0 -1
- package/dist/hooks/state.js +0 -15
- package/dist/state.types.d.ts +0 -55
- package/dist/state.types.d.ts.map +0 -1
- package/dist/trackManager.d.ts +0 -9
- package/dist/trackManager.d.ts.map +0 -1
- package/dist/trackManager.js +0 -116
- package/dist/types.d.ts +0 -235
- package/dist/types.d.ts.map +0 -1
- /package/dist/hooks/{fishjamContext.js → useFishjamContext.js} +0 -0
- /package/dist/{state.types.js → types/internal.js} +0 -0
- /package/dist/{types.js → types/public.js} +0 -0
package/dist/DeviceManager.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { DeviceState, MediaManager, DeviceError, DeviceManagerStatus } from "./types/internal";
|
|
2
2
|
import type TypedEmitter from "typed-emitter";
|
|
3
|
+
import type { PersistLastDeviceHandlers } from "./types/public";
|
|
3
4
|
export type DeviceManagerEvents = {
|
|
4
5
|
managerStarted: (event: DeviceState & {
|
|
5
6
|
constraints: MediaTrackConstraints | undefined;
|
|
@@ -7,7 +8,7 @@ export type DeviceManagerEvents = {
|
|
|
7
8
|
managerInitialized: (state: DeviceState) => void;
|
|
8
9
|
devicesStarted: (event: {
|
|
9
10
|
restarting: boolean;
|
|
10
|
-
constraints?:
|
|
11
|
+
constraints?: MediaTrackConstraints | boolean;
|
|
11
12
|
}, state: DeviceState) => void;
|
|
12
13
|
deviceReady: (event: {
|
|
13
14
|
stream: MediaStream;
|
|
@@ -20,31 +21,35 @@ export type DeviceManagerEvents = {
|
|
|
20
21
|
deviceDisabled: (state: DeviceState) => void;
|
|
21
22
|
error: (event: any, state: DeviceState) => void;
|
|
22
23
|
};
|
|
23
|
-
export type
|
|
24
|
+
export type DeviceManagerConfig = {
|
|
25
|
+
deviceType: "audio" | "video";
|
|
26
|
+
defaultConstraints: MediaTrackConstraints;
|
|
27
|
+
userConstraints?: boolean | MediaTrackConstraints;
|
|
28
|
+
storage?: boolean | PersistLastDeviceHandlers;
|
|
29
|
+
};
|
|
24
30
|
declare const DeviceManager_base: new () => TypedEmitter<DeviceManagerEvents>;
|
|
25
31
|
export declare class DeviceManager extends DeviceManager_base implements MediaManager {
|
|
26
|
-
private constraints;
|
|
27
|
-
private storageConfig;
|
|
32
|
+
private readonly constraints;
|
|
33
|
+
private readonly storageConfig;
|
|
28
34
|
private status;
|
|
29
35
|
private readonly deviceType;
|
|
30
36
|
deviceState: DeviceState;
|
|
31
|
-
constructor(deviceType
|
|
37
|
+
constructor({ deviceType, storage, userConstraints, defaultConstraints }: DeviceManagerConfig);
|
|
32
38
|
private createStorageConfig;
|
|
33
39
|
getStatus(): DeviceManagerStatus;
|
|
34
|
-
getConstraints(
|
|
35
|
-
getMedia: () => import("./types").Media | null;
|
|
40
|
+
getConstraints(): MediaTrackConstraints | boolean;
|
|
41
|
+
getMedia: () => import("./types/internal").Media | null;
|
|
36
42
|
getTracks: () => MediaStreamTrack[];
|
|
37
43
|
initialize: (stream: MediaStream | null, track: MediaStreamTrack | null, devices: MediaDeviceInfo[], requestedMedia: boolean, error?: DeviceError | null) => DeviceState;
|
|
38
44
|
private setupOnEndedCallback;
|
|
39
45
|
private onTrackEnded;
|
|
40
46
|
getLastDevice(): MediaDeviceInfo | null;
|
|
41
47
|
private saveLastDevice;
|
|
42
|
-
start(deviceId?: string
|
|
48
|
+
start(deviceId?: string): Promise<void>;
|
|
43
49
|
stop(): Promise<void>;
|
|
44
50
|
disable(): void;
|
|
45
51
|
enable(): void;
|
|
46
52
|
getDeviceType: () => "audio" | "video";
|
|
47
|
-
setConfig(storage?: boolean | StorageConfig, constraints?: boolean | MediaTrackConstraints): void;
|
|
48
53
|
}
|
|
49
54
|
export {};
|
|
50
55
|
//# sourceMappingURL=DeviceManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeviceManager.d.ts","sourceRoot":"","sources":["../src/DeviceManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"DeviceManager.d.ts","sourceRoot":"","sources":["../src/DeviceManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAKpG,OAAO,KAAK,YAAY,MAAM,eAAe,CAAC;AAG9C,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAEhE,MAAM,MAAM,mBAAmB,GAAG;IAChC,cAAc,EAAE,CACd,KAAK,EAAE,WAAW,GAAG;QACnB,WAAW,EAAE,qBAAqB,GAAG,SAAS,CAAC;KAChD,EACD,KAAK,EAAE,WAAW,KACf,IAAI,CAAC;IACV,kBAAkB,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IACjD,cAAc,EAAE,CACd,KAAK,EAAE;QAAE,UAAU,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAA;KAAE,EAC7E,KAAK,EAAE,WAAW,KACf,IAAI,CAAC;IACV,WAAW,EAAE,CAAC,KAAK,EAAE;QAAE,MAAM,EAAE,WAAW,CAAA;KAAE,EAAE,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IAC1E,YAAY,EAAE,CAAC,KAAK,EAAE,WAAW,GAAG;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,EAAE,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IACxF,aAAa,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IAC5C,aAAa,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IAC5C,cAAc,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IAE7C,KAAK,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;CACjD,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,UAAU,EAAE,OAAO,GAAG,OAAO,CAAC;IAC9B,kBAAkB,EAAE,qBAAqB,CAAC;IAC1C,eAAe,CAAC,EAAE,OAAO,GAAG,qBAAqB,CAAC;IAClD,OAAO,CAAC,EAAE,OAAO,GAAG,yBAAyB,CAAC;CAC/C,CAAC;4CAGmC,YAAY,CAAC,mBAAmB,CAAC;AADtE,qBAAa,aACX,SAAQ,kBACR,YAAW,YAAY;IAEvB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAkC;IAC9D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAmC;IAEjE,OAAO,CAAC,MAAM,CAAwC;IACtD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;IAExC,WAAW,EAAE,WAAW,CAM7B;gBAEU,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,EAAE,mBAAmB;IAO7F,OAAO,CAAC,mBAAmB;IASpB,SAAS,IAAI,mBAAmB;IAIhC,cAAc,IAAI,qBAAqB,GAAG,OAAO;IAIjD,QAAQ,gDAAgC;IAExC,SAAS,2BAMd;IAEK,UAAU,WACP,WAAW,GAAG,IAAI,SACnB,gBAAgB,GAAG,IAAI,WACrB,eAAe,EAAE,kBACV,OAAO,UAChB,WAAW,GAAG,IAAI,iBAazB;IAEF,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,YAAY,CAIlB;IAEK,aAAa,IAAI,eAAe,GAAG,IAAI;IAI9C,OAAO,CAAC,cAAc;IAIT,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM;IAgFvB,IAAI;IAOV,OAAO;IAWP,MAAM;IAWN,aAAa,0BAElB;CACH"}
|
package/dist/DeviceManager.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { prepareMediaTrackConstraints
|
|
1
|
+
import { prepareMediaTrackConstraints } from "./constraints";
|
|
2
2
|
import EventEmitter from "events";
|
|
3
3
|
import { getDeviceInfo, getLocalStorageConfig, prepareDeviceState } from "./utils/media";
|
|
4
4
|
import { parseUserMediaError } from "./utils/errors";
|
|
@@ -14,35 +14,32 @@ export class DeviceManager extends EventEmitter {
|
|
|
14
14
|
devicesStatus: "Not requested",
|
|
15
15
|
error: null,
|
|
16
16
|
};
|
|
17
|
-
constructor(deviceType,
|
|
17
|
+
constructor({ deviceType, storage, userConstraints, defaultConstraints }) {
|
|
18
18
|
super();
|
|
19
|
-
this.storageConfig = this.createStorageConfig(
|
|
19
|
+
this.storageConfig = this.createStorageConfig(deviceType, storage);
|
|
20
20
|
this.deviceType = deviceType;
|
|
21
|
-
this.constraints =
|
|
21
|
+
this.constraints = userConstraints ?? defaultConstraints;
|
|
22
22
|
}
|
|
23
|
-
createStorageConfig(storage) {
|
|
23
|
+
createStorageConfig(deviceType, storage) {
|
|
24
24
|
if (storage === false)
|
|
25
25
|
return null;
|
|
26
26
|
if (storage === true || storage === undefined)
|
|
27
|
-
return getLocalStorageConfig(
|
|
27
|
+
return getLocalStorageConfig(deviceType);
|
|
28
28
|
return storage;
|
|
29
29
|
}
|
|
30
30
|
getStatus() {
|
|
31
31
|
return this.status;
|
|
32
32
|
}
|
|
33
|
-
getConstraints(
|
|
34
|
-
|
|
35
|
-
return undefined;
|
|
36
|
-
if (currentConstraints === undefined || currentConstraints === true)
|
|
37
|
-
return this.constraints;
|
|
38
|
-
return currentConstraints ?? this.constraints;
|
|
33
|
+
getConstraints() {
|
|
34
|
+
return this.constraints;
|
|
39
35
|
}
|
|
40
36
|
getMedia = () => this.deviceState.media;
|
|
41
37
|
getTracks = () => {
|
|
38
|
+
const stream = this.deviceState.media?.stream;
|
|
42
39
|
if (this.deviceType === "audio") {
|
|
43
|
-
return
|
|
40
|
+
return stream?.getAudioTracks() ?? [];
|
|
44
41
|
}
|
|
45
|
-
return
|
|
42
|
+
return stream?.getVideoTracks() ?? [];
|
|
46
43
|
};
|
|
47
44
|
initialize = (stream, track, devices, requestedMedia, error = null) => {
|
|
48
45
|
this.deviceState = prepareDeviceState(stream, track, devices, error, requestedMedia);
|
|
@@ -51,6 +48,7 @@ export class DeviceManager extends EventEmitter {
|
|
|
51
48
|
this.saveLastDevice(deviceInfo);
|
|
52
49
|
this.status = "initialized";
|
|
53
50
|
this.setupOnEndedCallback();
|
|
51
|
+
this.emit("managerInitialized", this.deviceState);
|
|
54
52
|
return this.deviceState;
|
|
55
53
|
};
|
|
56
54
|
setupOnEndedCallback() {
|
|
@@ -67,27 +65,27 @@ export class DeviceManager extends EventEmitter {
|
|
|
67
65
|
return this.storageConfig?.getLastDevice?.() ?? null;
|
|
68
66
|
}
|
|
69
67
|
saveLastDevice(info) {
|
|
70
|
-
if (!this.storageConfig)
|
|
71
|
-
console.warn("Device manager storage has been disabled");
|
|
72
68
|
this.storageConfig?.saveLastDevice(info);
|
|
73
69
|
}
|
|
74
|
-
// todo `audioDeviceId / videoDeviceId === true` means use last device
|
|
75
70
|
async start(deviceId) {
|
|
76
|
-
const
|
|
77
|
-
const
|
|
78
|
-
const
|
|
79
|
-
const
|
|
71
|
+
const newDeviceId = deviceId ?? this.getLastDevice()?.deviceId;
|
|
72
|
+
const currentDeviceId = this.deviceState.media?.deviceInfo?.deviceId;
|
|
73
|
+
const shouldReplaceDevice = Boolean(currentDeviceId && currentDeviceId !== newDeviceId);
|
|
74
|
+
const isDeviceStopped = currentDeviceId === undefined;
|
|
75
|
+
const shouldProceed = isDeviceStopped || shouldReplaceDevice;
|
|
76
|
+
const exactConstraints = shouldProceed && prepareMediaTrackConstraints(newDeviceId, this.constraints);
|
|
80
77
|
if (!exactConstraints)
|
|
81
78
|
return;
|
|
82
79
|
this.deviceState.mediaStatus = "Requesting";
|
|
83
|
-
this.emit("devicesStarted", { ...this.deviceState, restarting:
|
|
80
|
+
this.emit("devicesStarted", { ...this.deviceState, restarting: shouldReplaceDevice, constraints: exactConstraints }, this.deviceState);
|
|
84
81
|
try {
|
|
85
82
|
const stream = await navigator.mediaDevices.getUserMedia({ [this.deviceType]: exactConstraints });
|
|
86
83
|
const getTrack = () => {
|
|
87
84
|
const tracks = this.deviceType === "audio" ? stream.getAudioTracks() : stream.getVideoTracks();
|
|
88
85
|
return tracks[0] ?? null;
|
|
89
86
|
};
|
|
90
|
-
const
|
|
87
|
+
const track = getTrack();
|
|
88
|
+
const currentDeviceId = track?.getSettings()?.deviceId;
|
|
91
89
|
const deviceInfo = currentDeviceId ? getDeviceInfo(currentDeviceId, this.deviceState.devices ?? []) : null;
|
|
92
90
|
if (deviceInfo) {
|
|
93
91
|
this.saveLastDevice?.(deviceInfo);
|
|
@@ -104,18 +102,18 @@ export class DeviceManager extends EventEmitter {
|
|
|
104
102
|
// Manually stopping tracks on its own does not generate the `ended` event.
|
|
105
103
|
// The ended event in Safari has already been emitted and will be handled in the future.
|
|
106
104
|
// Therefore, in the `onTrackEnded` method, events for already stopped tracks are filtered out to prevent the state from being damaged.
|
|
107
|
-
if (
|
|
105
|
+
if (shouldReplaceDevice) {
|
|
108
106
|
this.deviceState?.media?.track?.stop();
|
|
109
|
-
this.deviceState.media = {
|
|
110
|
-
stream: stream,
|
|
111
|
-
track: getTrack(),
|
|
112
|
-
deviceInfo,
|
|
113
|
-
enabled: true,
|
|
114
|
-
};
|
|
115
107
|
}
|
|
108
|
+
this.deviceState.media = {
|
|
109
|
+
stream,
|
|
110
|
+
track,
|
|
111
|
+
deviceInfo,
|
|
112
|
+
enabled: true,
|
|
113
|
+
};
|
|
116
114
|
this.setupOnEndedCallback();
|
|
117
115
|
this.deviceState.mediaStatus = "OK";
|
|
118
|
-
this.emit("devicesReady", { ...this.deviceState, restarted:
|
|
116
|
+
this.emit("devicesReady", { ...this.deviceState, restarted: shouldReplaceDevice }, this.deviceState);
|
|
119
117
|
}
|
|
120
118
|
catch (err) {
|
|
121
119
|
const parsedError = parseUserMediaError(err);
|
|
@@ -153,8 +151,4 @@ export class DeviceManager extends EventEmitter {
|
|
|
153
151
|
getDeviceType = () => {
|
|
154
152
|
return this.deviceType;
|
|
155
153
|
};
|
|
156
|
-
setConfig(storage, constraints) {
|
|
157
|
-
this.storageConfig = this.createStorageConfig(storage);
|
|
158
|
-
this.constraints = constraints ? toMediaTrackConstraints(constraints) : undefined;
|
|
159
|
-
}
|
|
160
154
|
}
|
package/dist/constraints.d.ts
CHANGED
|
@@ -1,26 +1,6 @@
|
|
|
1
1
|
export declare const AUDIO_TRACK_CONSTRAINTS: MediaTrackConstraints;
|
|
2
2
|
export declare const VIDEO_TRACK_CONSTRAINTS: MediaTrackConstraints;
|
|
3
3
|
export declare const SCREEN_SHARING_MEDIA_CONSTRAINTS: MediaStreamConstraints;
|
|
4
|
-
export declare const
|
|
5
|
-
export declare const
|
|
6
|
-
export declare const getExactDeviceConstraint: (constraints: MediaTrackConstraints | undefined, deviceId: string | undefined) => {
|
|
7
|
-
deviceId: {
|
|
8
|
-
exact: string | undefined;
|
|
9
|
-
};
|
|
10
|
-
advanced?: MediaTrackConstraintSet[];
|
|
11
|
-
aspectRatio?: ConstrainDouble;
|
|
12
|
-
autoGainControl?: ConstrainBoolean;
|
|
13
|
-
channelCount?: ConstrainULong;
|
|
14
|
-
displaySurface?: ConstrainDOMString;
|
|
15
|
-
echoCancellation?: ConstrainBoolean;
|
|
16
|
-
facingMode?: ConstrainDOMString;
|
|
17
|
-
frameRate?: ConstrainDouble;
|
|
18
|
-
groupId?: ConstrainDOMString;
|
|
19
|
-
height?: ConstrainULong;
|
|
20
|
-
noiseSuppression?: ConstrainBoolean;
|
|
21
|
-
sampleRate?: ConstrainULong;
|
|
22
|
-
sampleSize?: ConstrainULong;
|
|
23
|
-
width?: ConstrainULong;
|
|
24
|
-
};
|
|
25
|
-
export declare const prepareConstraints: (deviceIdToStart: string | undefined, constraints: MediaTrackConstraints | undefined) => MediaTrackConstraints | undefined | boolean;
|
|
4
|
+
export declare const prepareMediaTrackConstraints: (deviceId: string | undefined, constraints: MediaTrackConstraints | undefined | boolean) => MediaTrackConstraints | boolean;
|
|
5
|
+
export declare const prepareConstraints: (deviceIdToStart: string | undefined, constraints: MediaTrackConstraints | undefined | boolean) => MediaTrackConstraints | undefined | boolean;
|
|
26
6
|
//# sourceMappingURL=constraints.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constraints.d.ts","sourceRoot":"","sources":["../src/constraints.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,uBAAuB,EAAE,qBAErC,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,qBAerC,CAAC;AAEF,eAAO,MAAM,gCAAgC,EAAE,sBAM9C,CAAC;AAEF,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"constraints.d.ts","sourceRoot":"","sources":["../src/constraints.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,uBAAuB,EAAE,qBAErC,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,qBAerC,CAAC;AAEF,eAAO,MAAM,gCAAgC,EAAE,sBAM9C,CAAC;AAEF,eAAO,MAAM,4BAA4B,aAC7B,MAAM,GAAG,SAAS,eACf,qBAAqB,GAAG,SAAS,GAAG,OAAO,KACvD,qBAAqB,GAAG,OAM1B,CAAC;AAEF,eAAO,MAAM,kBAAkB,oBACZ,MAAM,GAAG,SAAS,eACtB,qBAAqB,GAAG,SAAS,GAAG,OAAO,KACvD,qBAAqB,GAAG,SAAS,GAAG,OAUtC,CAAC"}
|
package/dist/constraints.js
CHANGED
|
@@ -24,24 +24,19 @@ export const SCREEN_SHARING_MEDIA_CONSTRAINTS = {
|
|
|
24
24
|
height: { max: 1080, ideal: 1080 },
|
|
25
25
|
},
|
|
26
26
|
};
|
|
27
|
-
export const toMediaTrackConstraints = (constraint) => {
|
|
28
|
-
if (typeof constraint === "boolean") {
|
|
29
|
-
return constraint ? {} : undefined;
|
|
30
|
-
}
|
|
31
|
-
return constraint;
|
|
32
|
-
};
|
|
33
27
|
export const prepareMediaTrackConstraints = (deviceId, constraints) => {
|
|
28
|
+
const trackConstraints = typeof constraints === "boolean" ? {} : constraints;
|
|
34
29
|
if (!deviceId)
|
|
35
|
-
return
|
|
36
|
-
|
|
37
|
-
return { ...constraints };
|
|
38
|
-
const exactId = deviceId ? { deviceId: { exact: deviceId } } : {};
|
|
39
|
-
return { ...constraints, ...exactId };
|
|
30
|
+
return { ...trackConstraints };
|
|
31
|
+
return { ...trackConstraints, deviceId: { exact: deviceId } };
|
|
40
32
|
};
|
|
41
|
-
export const getExactDeviceConstraint = (constraints, deviceId) => ({
|
|
42
|
-
...constraints,
|
|
43
|
-
deviceId: { exact: deviceId },
|
|
44
|
-
});
|
|
45
33
|
export const prepareConstraints = (deviceIdToStart, constraints) => {
|
|
46
|
-
|
|
34
|
+
if (!deviceIdToStart)
|
|
35
|
+
return constraints;
|
|
36
|
+
// The resulting stream will not contain a track of this type,
|
|
37
|
+
// which means that the device will not be activated.
|
|
38
|
+
if (constraints === false)
|
|
39
|
+
return false;
|
|
40
|
+
const constraintsObj = constraints === true ? {} : constraints;
|
|
41
|
+
return { ...constraintsObj, deviceId: { ideal: deviceIdToStart } };
|
|
47
42
|
};
|
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import type
|
|
3
|
-
import type {
|
|
1
|
+
import { type PropsWithChildren } from "react";
|
|
2
|
+
import { type ReconnectConfig } from "@fishjam-cloud/ts-client";
|
|
3
|
+
import type { PersistLastDeviceHandlers } from "./types/public";
|
|
4
4
|
interface FishjamProviderProps extends PropsWithChildren {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
deviceManagerDefaultConfig?: DeviceManagerConfig;
|
|
5
|
+
reconnect?: ReconnectConfig | boolean;
|
|
6
|
+
constraints?: Pick<MediaStreamConstraints, "audio" | "video">;
|
|
7
|
+
persistLastDevice?: boolean | PersistLastDeviceHandlers;
|
|
9
8
|
}
|
|
10
|
-
|
|
9
|
+
/**
|
|
10
|
+
* @category Components
|
|
11
|
+
*/
|
|
12
|
+
export declare function FishjamProvider({ children, reconnect, constraints, persistLastDevice }: FishjamProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
11
13
|
export {};
|
|
12
14
|
//# sourceMappingURL=fishjamProvider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fishjamProvider.d.ts","sourceRoot":"","sources":["../src/fishjamProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"fishjamProvider.d.ts","sourceRoot":"","sources":["../src/fishjamProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAGjE,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAO/E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAEhE,UAAU,oBAAqB,SAAQ,iBAAiB;IACtD,SAAS,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC;IACtC,WAAW,CAAC,EAAE,IAAI,CAAC,sBAAsB,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC;IAC9D,iBAAiB,CAAC,EAAE,OAAO,GAAG,yBAAyB,CAAC;CACzD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,iBAAiB,EAAE,EAAE,oBAAoB,2CAsD5G"}
|
package/dist/fishjamProvider.js
CHANGED
|
@@ -1,30 +1,54 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
2
|
+
import { useRef, useState } from "react";
|
|
3
|
+
import { useTrackManager } from "./hooks/useTrackManager";
|
|
4
|
+
import { FishjamClient } from "@fishjam-cloud/ts-client";
|
|
5
|
+
import { FishjamContext } from "./hooks/useFishjamContext";
|
|
6
|
+
import { DeviceManager } from "./DeviceManager";
|
|
7
|
+
import { usePeerStatus } from "./hooks/usePeerStatus";
|
|
8
|
+
import { useFishjamClientState } from "./hooks/useFishjamClientState";
|
|
9
|
+
import { AUDIO_TRACK_CONSTRAINTS, VIDEO_TRACK_CONSTRAINTS } from "./constraints";
|
|
10
|
+
/**
|
|
11
|
+
* @category Components
|
|
12
|
+
*/
|
|
13
|
+
export function FishjamProvider({ children, reconnect, constraints, persistLastDevice }) {
|
|
14
|
+
const fishjamClientRef = useRef(new FishjamClient({ reconnect }));
|
|
15
|
+
const hasDevicesBeenInitializedRef = useRef(false);
|
|
16
|
+
const storage = persistLastDevice;
|
|
17
|
+
const videoDeviceManagerRef = useRef(new DeviceManager({
|
|
18
|
+
deviceType: "video",
|
|
19
|
+
defaultConstraints: VIDEO_TRACK_CONSTRAINTS,
|
|
20
|
+
userConstraints: constraints?.video,
|
|
21
|
+
storage,
|
|
11
22
|
}));
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
}
|
|
18
|
-
const
|
|
19
|
-
const
|
|
20
|
-
const screenshareState = useState(null);
|
|
23
|
+
const audioDeviceManagerRef = useRef(new DeviceManager({
|
|
24
|
+
deviceType: "audio",
|
|
25
|
+
defaultConstraints: AUDIO_TRACK_CONSTRAINTS,
|
|
26
|
+
userConstraints: constraints?.audio,
|
|
27
|
+
storage,
|
|
28
|
+
}));
|
|
29
|
+
const screenShareState = useState({ stream: null, trackIds: null });
|
|
30
|
+
const { peerStatus, getCurrentPeerStatus } = usePeerStatus(fishjamClientRef.current);
|
|
21
31
|
const videoTrackManager = useTrackManager({
|
|
22
|
-
mediaManager:
|
|
23
|
-
tsClient,
|
|
32
|
+
mediaManager: videoDeviceManagerRef.current,
|
|
33
|
+
tsClient: fishjamClientRef.current,
|
|
34
|
+
getCurrentPeerStatus,
|
|
24
35
|
});
|
|
25
36
|
const audioTrackManager = useTrackManager({
|
|
26
|
-
mediaManager:
|
|
27
|
-
tsClient,
|
|
37
|
+
mediaManager: audioDeviceManagerRef.current,
|
|
38
|
+
tsClient: fishjamClientRef.current,
|
|
39
|
+
getCurrentPeerStatus,
|
|
28
40
|
});
|
|
29
|
-
|
|
41
|
+
const clientState = useFishjamClientState(fishjamClientRef.current);
|
|
42
|
+
const context = {
|
|
43
|
+
fishjamClientRef,
|
|
44
|
+
peerStatus,
|
|
45
|
+
screenShareState,
|
|
46
|
+
videoTrackManager,
|
|
47
|
+
audioTrackManager,
|
|
48
|
+
videoDeviceManagerRef,
|
|
49
|
+
audioDeviceManagerRef,
|
|
50
|
+
hasDevicesBeenInitializedRef,
|
|
51
|
+
clientState,
|
|
52
|
+
};
|
|
53
|
+
return _jsx(FishjamContext.Provider, { value: context, children: children });
|
|
30
54
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAudioDeviceManager.d.ts","sourceRoot":"","sources":["../../../src/hooks/deviceManagers/useAudioDeviceManager.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,eAAO,MAAM,qBAAqB,yDAKjC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { useFishjamContext } from "../useFishjamContext";
|
|
2
|
+
import { useDeviceManager } from "./useDeviceManager";
|
|
3
|
+
/**
|
|
4
|
+
*
|
|
5
|
+
* @category Devices
|
|
6
|
+
*/
|
|
7
|
+
export const useAudioDeviceManager = () => {
|
|
8
|
+
const { audioDeviceManagerRef } = useFishjamContext();
|
|
9
|
+
const audioDeviceState = useDeviceManager(audioDeviceManagerRef.current);
|
|
10
|
+
return audioDeviceState;
|
|
11
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDeviceManager.d.ts","sourceRoot":"","sources":["../../../src/hooks/deviceManagers/useDeviceManager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAuB,MAAM,qBAAqB,CAAC;AAc9E,eAAO,MAAM,gBAAgB,kBAAmB,aAAa,uBAoC5D,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { useCallback, useRef, useSyncExternalStore } from "react";
|
|
2
|
+
const eventNames = [
|
|
3
|
+
"deviceDisabled",
|
|
4
|
+
"deviceEnabled",
|
|
5
|
+
"managerStarted",
|
|
6
|
+
"deviceStopped",
|
|
7
|
+
"deviceReady",
|
|
8
|
+
"devicesStarted",
|
|
9
|
+
"devicesReady",
|
|
10
|
+
"managerInitialized",
|
|
11
|
+
"error",
|
|
12
|
+
];
|
|
13
|
+
export const useDeviceManager = (deviceManager) => {
|
|
14
|
+
const mutationRef = useRef(false);
|
|
15
|
+
const subscribe = useCallback((subscribeCallback) => {
|
|
16
|
+
const callback = () => {
|
|
17
|
+
mutationRef.current = true;
|
|
18
|
+
subscribeCallback();
|
|
19
|
+
};
|
|
20
|
+
eventNames.forEach((eventName) => deviceManager.on(eventName, callback));
|
|
21
|
+
return () => {
|
|
22
|
+
eventNames.forEach((eventName) => deviceManager.removeListener(eventName, callback));
|
|
23
|
+
};
|
|
24
|
+
}, [deviceManager]);
|
|
25
|
+
const lastSnapshotRef = useRef(null);
|
|
26
|
+
const getSnapshot = useCallback(() => {
|
|
27
|
+
if (mutationRef.current || lastSnapshotRef.current === null) {
|
|
28
|
+
lastSnapshotRef.current = {
|
|
29
|
+
deviceState: deviceManager.deviceState,
|
|
30
|
+
status: deviceManager.getStatus(),
|
|
31
|
+
tracks: deviceManager.getTracks(),
|
|
32
|
+
};
|
|
33
|
+
mutationRef.current = false;
|
|
34
|
+
}
|
|
35
|
+
return lastSnapshotRef.current;
|
|
36
|
+
}, [deviceManager]);
|
|
37
|
+
const deviceState = useSyncExternalStore(subscribe, getSnapshot);
|
|
38
|
+
return deviceState;
|
|
39
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useVideoDeviceManager.d.ts","sourceRoot":"","sources":["../../../src/hooks/deviceManagers/useVideoDeviceManager.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,eAAO,MAAM,qBAAqB,yDAIjC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { useFishjamContext } from "../useFishjamContext";
|
|
2
|
+
import { useDeviceManager } from "./useDeviceManager";
|
|
3
|
+
/**
|
|
4
|
+
*
|
|
5
|
+
* @category Devices
|
|
6
|
+
*/
|
|
7
|
+
export const useVideoDeviceManager = () => {
|
|
8
|
+
const { videoDeviceManagerRef } = useFishjamContext();
|
|
9
|
+
const videoDeviceState = useDeviceManager(videoDeviceManagerRef.current);
|
|
10
|
+
return videoDeviceState;
|
|
11
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../src/hooks/internal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { useFishjamClient_DO_NOT_USE } from "./useFishjamClient_DO_NOT_USE";
|
package/dist/hooks/public.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { useConnect, useDisconnect
|
|
2
|
-
export {
|
|
3
|
-
export {
|
|
4
|
-
export {
|
|
5
|
-
export {
|
|
6
|
-
export {
|
|
1
|
+
export { useConnect, useDisconnect } from "./useConnection";
|
|
2
|
+
export { useReconnection } from "./useReconnection";
|
|
3
|
+
export { useCamera, useMicrophone, useInitializeDevices } from "./useDevices";
|
|
4
|
+
export { usePeers } from "./usePeers";
|
|
5
|
+
export { useScreenShare } from "./useScreenShare";
|
|
6
|
+
export { useStatus } from "./useStatus";
|
|
7
7
|
//# sourceMappingURL=public.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../src/hooks/public.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../src/hooks/public.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/hooks/public.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { useConnect, useDisconnect
|
|
2
|
-
export {
|
|
3
|
-
export {
|
|
4
|
-
export {
|
|
5
|
-
export {
|
|
6
|
-
export {
|
|
1
|
+
export { useConnect, useDisconnect } from "./useConnection";
|
|
2
|
+
export { useReconnection } from "./useReconnection";
|
|
3
|
+
export { useCamera, useMicrophone, useInitializeDevices } from "./useDevices";
|
|
4
|
+
export { usePeers } from "./usePeers";
|
|
5
|
+
export { useScreenShare } from "./useScreenShare";
|
|
6
|
+
export { useStatus } from "./useStatus";
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ConnectConfig } from "../types/public";
|
|
2
|
+
/**
|
|
3
|
+
*
|
|
4
|
+
* @category Connection
|
|
5
|
+
*/
|
|
6
|
+
export declare function useConnect(): (config: ConnectConfig) => Promise<void>;
|
|
7
|
+
/**
|
|
8
|
+
*
|
|
9
|
+
* @category Connection
|
|
10
|
+
*/
|
|
11
|
+
export declare function useDisconnect(): () => void;
|
|
12
|
+
//# sourceMappingURL=useConnection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useConnection.d.ts","sourceRoot":"","sources":["../../src/hooks/useConnection.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD;;;GAGG;AACH,wBAAgB,UAAU,IAAI,CAAC,MAAM,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAIrE;AAED;;;GAGG;AACH,wBAAgB,aAAa,eAM5B"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { useCallback } from "react";
|
|
2
|
+
import { useFishjamContext } from "./useFishjamContext";
|
|
3
|
+
/**
|
|
4
|
+
*
|
|
5
|
+
* @category Connection
|
|
6
|
+
*/
|
|
7
|
+
export function useConnect() {
|
|
8
|
+
const client = useFishjamContext().fishjamClientRef.current;
|
|
9
|
+
return useCallback((config) => client.connect({ ...config, peerMetadata: config.peerMetadata ?? {} }), [client]);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
*
|
|
13
|
+
* @category Connection
|
|
14
|
+
*/
|
|
15
|
+
export function useDisconnect() {
|
|
16
|
+
const client = useFishjamContext().fishjamClientRef.current;
|
|
17
|
+
return useCallback(() => {
|
|
18
|
+
client.disconnect();
|
|
19
|
+
}, [client]);
|
|
20
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { AudioDevice, Device } from "../types/public";
|
|
2
|
+
/**
|
|
3
|
+
*
|
|
4
|
+
* @category Devices
|
|
5
|
+
*/
|
|
6
|
+
export declare function useCamera(): Device;
|
|
7
|
+
/**
|
|
8
|
+
*
|
|
9
|
+
* @category Devices
|
|
10
|
+
*/
|
|
11
|
+
export declare function useMicrophone(): AudioDevice;
|
|
12
|
+
/**
|
|
13
|
+
*
|
|
14
|
+
* @category Devices
|
|
15
|
+
*/
|
|
16
|
+
export declare const useInitializeDevices: () => {
|
|
17
|
+
initializeDevices: () => Promise<void>;
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=useDevices.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDevices.d.ts","sourceRoot":"","sources":["../../src/hooks/useDevices.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE3D;;;GAGG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAuBlC;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,WAAW,CA2B3C;AAED;;;GAGG;AACH,eAAO,MAAM,oBAAoB;;CAqDhC,CAAC"}
|