@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.
Files changed (111) hide show
  1. package/dist/DeviceManager.d.ts +15 -10
  2. package/dist/DeviceManager.d.ts.map +1 -1
  3. package/dist/DeviceManager.js +29 -35
  4. package/dist/constraints.d.ts +2 -22
  5. package/dist/constraints.d.ts.map +1 -1
  6. package/dist/constraints.js +11 -16
  7. package/dist/fishjamProvider.d.ts +10 -8
  8. package/dist/fishjamProvider.d.ts.map +1 -1
  9. package/dist/fishjamProvider.js +47 -23
  10. package/dist/hooks/deviceManagers/useAudioDeviceManager.d.ts +6 -0
  11. package/dist/hooks/deviceManagers/useAudioDeviceManager.d.ts.map +1 -0
  12. package/dist/hooks/deviceManagers/useAudioDeviceManager.js +11 -0
  13. package/dist/hooks/deviceManagers/useDeviceManager.d.ts +4 -0
  14. package/dist/hooks/deviceManagers/useDeviceManager.d.ts.map +1 -0
  15. package/dist/hooks/deviceManagers/useDeviceManager.js +39 -0
  16. package/dist/hooks/deviceManagers/useVideoDeviceManager.d.ts +6 -0
  17. package/dist/hooks/deviceManagers/useVideoDeviceManager.d.ts.map +1 -0
  18. package/dist/hooks/deviceManagers/useVideoDeviceManager.js +11 -0
  19. package/dist/hooks/internal.d.ts +2 -0
  20. package/dist/hooks/internal.d.ts.map +1 -0
  21. package/dist/hooks/internal.js +1 -0
  22. package/dist/hooks/public.d.ts +6 -6
  23. package/dist/hooks/public.d.ts.map +1 -1
  24. package/dist/hooks/public.js +6 -6
  25. package/dist/hooks/useConnection.d.ts +12 -0
  26. package/dist/hooks/useConnection.d.ts.map +1 -0
  27. package/dist/hooks/useConnection.js +20 -0
  28. package/dist/hooks/useDevices.d.ts +19 -0
  29. package/dist/hooks/useDevices.d.ts.map +1 -0
  30. package/dist/hooks/useDevices.js +98 -0
  31. package/dist/hooks/useFishjamClientState.d.ts +10 -0
  32. package/dist/hooks/useFishjamClientState.d.ts.map +1 -0
  33. package/dist/hooks/{clientState.js → useFishjamClientState.js} +49 -34
  34. package/dist/hooks/useFishjamClient_DO_NOT_USE.d.ts +7 -0
  35. package/dist/hooks/useFishjamClient_DO_NOT_USE.d.ts.map +1 -0
  36. package/dist/hooks/useFishjamClient_DO_NOT_USE.js +11 -0
  37. package/dist/hooks/useFishjamContext.d.ts +20 -0
  38. package/dist/hooks/useFishjamContext.d.ts.map +1 -0
  39. package/dist/hooks/usePeerStatus.d.ts +8 -0
  40. package/dist/hooks/usePeerStatus.d.ts.map +1 -0
  41. package/dist/hooks/usePeerStatus.js +39 -0
  42. package/dist/hooks/usePeers.d.ts +10 -0
  43. package/dist/hooks/usePeers.d.ts.map +1 -0
  44. package/dist/hooks/usePeers.js +19 -0
  45. package/dist/hooks/useProcessedPreviewStream.d.ts +3 -0
  46. package/dist/hooks/useProcessedPreviewStream.d.ts.map +1 -0
  47. package/dist/hooks/useProcessedPreviewStream.js +17 -0
  48. package/dist/hooks/useReconnection.d.ts +7 -0
  49. package/dist/hooks/useReconnection.d.ts.map +1 -0
  50. package/dist/hooks/useReconnection.js +31 -0
  51. package/dist/hooks/useScreenShare.d.ts +7 -0
  52. package/dist/hooks/useScreenShare.d.ts.map +1 -0
  53. package/dist/hooks/{screenShare.js → useScreenShare.js} +53 -24
  54. package/dist/hooks/useStatus.d.ts +6 -0
  55. package/dist/hooks/useStatus.d.ts.map +1 -0
  56. package/dist/hooks/useStatus.js +8 -0
  57. package/dist/hooks/useTrackManager.d.ts +11 -0
  58. package/dist/hooks/useTrackManager.d.ts.map +1 -0
  59. package/dist/hooks/useTrackManager.js +176 -0
  60. package/dist/index.d.ts +3 -8
  61. package/dist/index.d.ts.map +1 -1
  62. package/dist/index.js +2 -4
  63. package/dist/mediaInitializer.d.ts +2 -2
  64. package/dist/mediaInitializer.d.ts.map +1 -1
  65. package/dist/types/internal.d.ts +129 -0
  66. package/dist/types/internal.d.ts.map +1 -0
  67. package/dist/types/public.d.ts +65 -0
  68. package/dist/types/public.d.ts.map +1 -0
  69. package/dist/utils/errors.d.ts +1 -1
  70. package/dist/utils/errors.d.ts.map +1 -1
  71. package/dist/utils/media.d.ts +3 -2
  72. package/dist/utils/media.d.ts.map +1 -1
  73. package/dist/utils/track.d.ts +2 -2
  74. package/dist/utils/track.d.ts.map +1 -1
  75. package/dist/utils/track.js +0 -2
  76. package/package.json +12 -15
  77. package/readme.md +20 -118
  78. package/dist/Client.d.ts +0 -198
  79. package/dist/Client.d.ts.map +0 -1
  80. package/dist/Client.js +0 -461
  81. package/dist/hooks/clientState.d.ts +0 -4
  82. package/dist/hooks/clientState.d.ts.map +0 -1
  83. package/dist/hooks/connection.d.ts +0 -6
  84. package/dist/hooks/connection.d.ts.map +0 -1
  85. package/dist/hooks/connection.js +0 -28
  86. package/dist/hooks/devices.d.ts +0 -4
  87. package/dist/hooks/devices.d.ts.map +0 -1
  88. package/dist/hooks/devices.js +0 -9
  89. package/dist/hooks/fishjamContext.d.ts +0 -4
  90. package/dist/hooks/fishjamContext.d.ts.map +0 -1
  91. package/dist/hooks/participants.d.ts +0 -6
  92. package/dist/hooks/participants.d.ts.map +0 -1
  93. package/dist/hooks/participants.js +0 -13
  94. package/dist/hooks/screenShare.d.ts +0 -3
  95. package/dist/hooks/screenShare.d.ts.map +0 -1
  96. package/dist/hooks/setupMedia.d.ts +0 -3
  97. package/dist/hooks/setupMedia.d.ts.map +0 -1
  98. package/dist/hooks/setupMedia.js +0 -200
  99. package/dist/hooks/state.d.ts +0 -6
  100. package/dist/hooks/state.d.ts.map +0 -1
  101. package/dist/hooks/state.js +0 -15
  102. package/dist/state.types.d.ts +0 -55
  103. package/dist/state.types.d.ts.map +0 -1
  104. package/dist/trackManager.d.ts +0 -9
  105. package/dist/trackManager.d.ts.map +0 -1
  106. package/dist/trackManager.js +0 -116
  107. package/dist/types.d.ts +0 -235
  108. package/dist/types.d.ts.map +0 -1
  109. /package/dist/hooks/{fishjamContext.js → useFishjamContext.js} +0 -0
  110. /package/dist/{state.types.js → types/internal.js} +0 -0
  111. /package/dist/{types.js → types/public.js} +0 -0
@@ -1,5 +1,6 @@
1
- import type { DeviceManagerConfig, DeviceState, MediaManager, StorageConfig, DeviceError } from "./types";
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?: string | boolean;
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 DeviceManagerStatus = "uninitialized" | "initializing" | "initialized" | "error";
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: "audio" | "video", defaultConfig?: DeviceManagerConfig);
37
+ constructor({ deviceType, storage, userConstraints, defaultConstraints }: DeviceManagerConfig);
32
38
  private createStorageConfig;
33
39
  getStatus(): DeviceManagerStatus;
34
- getConstraints(currentConstraints: boolean | MediaTrackConstraints | undefined): MediaTrackConstraints | undefined;
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 | boolean): Promise<void>;
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,mBAAmB,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAK1G,OAAO,KAAK,YAAY,MAAM,eAAe,CAAC;AAI9C,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,CAAC,KAAK,EAAE;QAAE,UAAU,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,EAAE,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IAC7G,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,eAAe,GAAG,cAAc,GAAG,aAAa,GAAG,OAAO,CAAC;4CAGxD,YAAY,CAAC,mBAAmB,CAAC;AADtE,qBAAa,aACX,SAAQ,kBACR,YAAW,YAAY;IAEvB,OAAO,CAAC,WAAW,CAAoC;IACvD,OAAO,CAAC,aAAa,CAAuB;IAE5C,OAAO,CAAC,MAAM,CAAwC;IACtD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;IAExC,WAAW,EAAE,WAAW,CAM7B;gBAEU,UAAU,EAAE,OAAO,GAAG,OAAO,EAAE,aAAa,CAAC,EAAE,mBAAmB;IAS9E,OAAO,CAAC,mBAAmB;IAMpB,SAAS,IAAI,mBAAmB;IAIhC,cAAc,CACnB,kBAAkB,EAAE,OAAO,GAAG,qBAAqB,GAAG,SAAS,GAC9D,qBAAqB,GAAG,SAAS;IAO7B,QAAQ,uCAAgC;IAExC,SAAS,2BAKd;IAEK,UAAU,WACP,WAAW,GAAG,IAAI,SACnB,gBAAgB,GAAG,IAAI,WACrB,eAAe,EAAE,kBACV,OAAO,UAChB,WAAW,GAAG,IAAI,iBAWzB;IAEF,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,YAAY,CAIlB;IAEK,aAAa,IAAI,eAAe,GAAG,IAAI;IAI9C,OAAO,CAAC,cAAc;IAMT,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO;IA4EjC,IAAI;IAOV,OAAO;IAWP,MAAM;IAWN,aAAa,0BAElB;IAEK,SAAS,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,aAAa,EAAE,WAAW,CAAC,EAAE,OAAO,GAAG,qBAAqB;CAIlG"}
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"}
@@ -1,4 +1,4 @@
1
- import { prepareMediaTrackConstraints, toMediaTrackConstraints } from "./constraints";
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, defaultConfig) {
17
+ constructor({ deviceType, storage, userConstraints, defaultConstraints }) {
18
18
  super();
19
- this.storageConfig = this.createStorageConfig(defaultConfig?.storage);
19
+ this.storageConfig = this.createStorageConfig(deviceType, storage);
20
20
  this.deviceType = deviceType;
21
- this.constraints = toMediaTrackConstraints(defaultConfig?.trackConstraints ?? true);
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(this.deviceType);
27
+ return getLocalStorageConfig(deviceType);
28
28
  return storage;
29
29
  }
30
30
  getStatus() {
31
31
  return this.status;
32
32
  }
33
- getConstraints(currentConstraints) {
34
- if (currentConstraints === false)
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 this.deviceState.media?.stream?.getAudioTracks() ?? [];
40
+ return stream?.getAudioTracks() ?? [];
44
41
  }
45
- return this.deviceState.media?.stream?.getVideoTracks() ?? [];
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 shouldRestart = !!deviceId && deviceId !== this.deviceState.media?.deviceInfo?.deviceId;
77
- const newDevice = deviceId === true ? this.getLastDevice()?.deviceId || true : deviceId;
78
- const trackConstraints = this.constraints;
79
- const exactConstraints = shouldRestart && prepareMediaTrackConstraints(newDevice, trackConstraints);
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: shouldRestart, constraints: newDevice }, this.deviceState);
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 currentDeviceId = getTrack()?.getSettings()?.deviceId;
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 (shouldRestart) {
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: shouldRestart }, this.deviceState);
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
  }
@@ -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 toMediaTrackConstraints: (constraint?: boolean | MediaTrackConstraints) => MediaTrackConstraints | undefined;
5
- export declare const prepareMediaTrackConstraints: (deviceId: string | undefined | boolean, constraints: MediaTrackConstraints | undefined) => MediaTrackConstraints | boolean;
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,uBAAuB,gBACrB,OAAO,GAAG,qBAAqB,KAC3C,qBAAqB,GAAG,SAK1B,CAAC;AAEF,eAAO,MAAM,4BAA4B,aAC7B,MAAM,GAAG,SAAS,GAAG,OAAO,eACzB,qBAAqB,GAAG,SAAS,KAC7C,qBAAqB,GAAG,OAK1B,CAAC;AAEF,eAAO,MAAM,wBAAwB,gBACtB,qBAAqB,GAAG,SAAS,YACpC,MAAM,GAAG,SAAS;;;;;;;;;;;;;;;;;;CAI5B,CAAC;AAEH,eAAO,MAAM,kBAAkB,oBACZ,MAAM,GAAG,SAAS,eACtB,qBAAqB,GAAG,SAAS,KAC7C,qBAAqB,GAAG,SAAS,GAAG,OAEtC,CAAC"}
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"}
@@ -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 false;
36
- if (deviceId === true)
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
- return deviceIdToStart ? getExactDeviceConstraint(constraints, deviceIdToStart) : constraints;
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 { PropsWithChildren } from "react";
2
- import type { DeviceManagerConfig } from "./types";
3
- import type { ReconnectConfig } from "@fishjam-cloud/ts-client";
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
- config?: {
6
- reconnect?: ReconnectConfig | boolean;
7
- };
8
- deviceManagerDefaultConfig?: DeviceManagerConfig;
5
+ reconnect?: ReconnectConfig | boolean;
6
+ constraints?: Pick<MediaStreamConstraints, "audio" | "video">;
7
+ persistLastDevice?: boolean | PersistLastDeviceHandlers;
9
8
  }
10
- export declare function FishjamProvider({ children, config, deviceManagerDefaultConfig }: FishjamProviderProps): import("react/jsx-runtime").JSX.Element;
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,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"}
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"}
@@ -1,30 +1,54 @@
1
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,
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
- // 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);
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: client.current.videoDeviceManager,
23
- tsClient,
32
+ mediaManager: videoDeviceManagerRef.current,
33
+ tsClient: fishjamClientRef.current,
34
+ getCurrentPeerStatus,
24
35
  });
25
36
  const audioTrackManager = useTrackManager({
26
- mediaManager: client.current.audioDeviceManager,
27
- tsClient,
37
+ mediaManager: audioDeviceManagerRef.current,
38
+ tsClient: fishjamClientRef.current,
39
+ getCurrentPeerStatus,
28
40
  });
29
- return (_jsx(FishjamContext.Provider, { value: { state, screenshareState, videoTrackManager, audioTrackManager }, children: children }));
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,6 @@
1
+ /**
2
+ *
3
+ * @category Devices
4
+ */
5
+ export declare const useAudioDeviceManager: () => import("../../types/internal").DeviceManagerState;
6
+ //# sourceMappingURL=useAudioDeviceManager.d.ts.map
@@ -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,4 @@
1
+ import type { DeviceManagerState } from "../../types/internal";
2
+ import type { DeviceManager } from "../../DeviceManager";
3
+ export declare const useDeviceManager: (deviceManager: DeviceManager) => DeviceManagerState;
4
+ //# sourceMappingURL=useDeviceManager.d.ts.map
@@ -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,6 @@
1
+ /**
2
+ *
3
+ * @category Devices
4
+ */
5
+ export declare const useVideoDeviceManager: () => import("../../types/internal").DeviceManagerState;
6
+ //# sourceMappingURL=useVideoDeviceManager.d.ts.map
@@ -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,2 @@
1
+ export { useFishjamClient_DO_NOT_USE } from "./useFishjamClient_DO_NOT_USE";
2
+ //# sourceMappingURL=internal.d.ts.map
@@ -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";
@@ -1,7 +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";
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,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"}
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"}
@@ -1,6 +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";
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"}