@fishjam-cloud/react-native-client 0.2.3 → 0.3.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 (86) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +14 -401
  3. package/android/build.gradle +3 -3
  4. package/android/src/main/java/io/fishjam/reactnative/EmitableEvents.kt +25 -12
  5. package/android/src/main/java/io/fishjam/reactnative/Errors.kt +3 -2
  6. package/android/src/main/java/io/fishjam/reactnative/RNFishjamClient.kt +122 -105
  7. package/android/src/main/java/io/fishjam/reactnative/RNFishjamClientModule.kt +24 -33
  8. package/android/src/main/java/io/fishjam/reactnative/VideoPreviewView.kt +13 -3
  9. package/build/RNFishjamClientModule.d.ts +17 -15
  10. package/build/RNFishjamClientModule.d.ts.map +1 -1
  11. package/build/RNFishjamClientModule.js.map +1 -1
  12. package/build/common/client.d.ts +4 -4
  13. package/build/common/client.d.ts.map +1 -1
  14. package/build/common/client.js +5 -5
  15. package/build/common/client.js.map +1 -1
  16. package/build/common/metadata.d.ts +3 -3
  17. package/build/common/metadata.d.ts.map +1 -1
  18. package/build/common/metadata.js +4 -4
  19. package/build/common/metadata.js.map +1 -1
  20. package/build/common/webRTC.d.ts +0 -8
  21. package/build/common/webRTC.d.ts.map +1 -1
  22. package/build/common/webRTC.js +0 -9
  23. package/build/common/webRTC.js.map +1 -1
  24. package/build/components/VideoRendererView.d.ts +1 -1
  25. package/build/components/VideoRendererView.js +1 -1
  26. package/build/components/VideoRendererView.js.map +1 -1
  27. package/build/debug/common/webRTC.d.ts +9 -0
  28. package/build/debug/common/webRTC.d.ts.map +1 -0
  29. package/build/debug/common/webRTC.js +11 -0
  30. package/build/debug/common/webRTC.js.map +1 -0
  31. package/build/debug/index.d.ts +4 -0
  32. package/build/debug/index.d.ts.map +1 -0
  33. package/build/debug/index.js +3 -0
  34. package/build/debug/index.js.map +1 -0
  35. package/build/debug/stats/types.d.ts.map +1 -0
  36. package/build/debug/stats/types.js.map +1 -0
  37. package/build/debug/stats/useRTCStatistics.d.ts.map +1 -0
  38. package/build/{stats → debug/stats}/useRTCStatistics.js +1 -1
  39. package/build/debug/stats/useRTCStatistics.js.map +1 -0
  40. package/build/hooks/useCamera.d.ts +17 -0
  41. package/build/hooks/useCamera.d.ts.map +1 -1
  42. package/build/hooks/useCamera.js +1 -1
  43. package/build/hooks/useCamera.js.map +1 -1
  44. package/build/hooks/useFishjamEvent.d.ts +2 -1
  45. package/build/hooks/useFishjamEvent.d.ts.map +1 -1
  46. package/build/hooks/useFishjamEvent.js +2 -1
  47. package/build/hooks/useFishjamEvent.js.map +1 -1
  48. package/build/hooks/usePeerStatus.d.ts +19 -0
  49. package/build/hooks/usePeerStatus.d.ts.map +1 -0
  50. package/build/hooks/usePeerStatus.js +18 -0
  51. package/build/hooks/usePeerStatus.js.map +1 -0
  52. package/build/hooks/{useParticipants.d.ts → usePeers.d.ts} +11 -11
  53. package/build/hooks/usePeers.d.ts.map +1 -0
  54. package/build/hooks/usePeers.js +34 -0
  55. package/build/hooks/usePeers.js.map +1 -0
  56. package/build/hooks/useScreenShare.d.ts +57 -0
  57. package/build/hooks/useScreenShare.d.ts.map +1 -0
  58. package/build/hooks/useScreenShare.js +85 -0
  59. package/build/hooks/useScreenShare.js.map +1 -0
  60. package/build/index.d.ts +8 -7
  61. package/build/index.d.ts.map +1 -1
  62. package/build/index.js +4 -4
  63. package/build/index.js.map +1 -1
  64. package/debug/package.json +4 -0
  65. package/ios/Events.swift +29 -13
  66. package/ios/RNFishjamClient.podspec +1 -1
  67. package/ios/RNFishjamClient.swift +110 -107
  68. package/ios/RNFishjamClientModule.swift +22 -29
  69. package/ios/VideoPreviewView.swift +27 -9
  70. package/package.json +14 -11
  71. package/plugin/broadcastExtensionFiles/FishjamBroadcastSampleHandler.swift +1 -1
  72. package/plugin/build/withFishjamIos.js +3 -3
  73. package/build/hooks/useParticipants.d.ts.map +0 -1
  74. package/build/hooks/useParticipants.js +0 -34
  75. package/build/hooks/useParticipants.js.map +0 -1
  76. package/build/hooks/useScreencast.d.ts +0 -57
  77. package/build/hooks/useScreencast.d.ts.map +0 -1
  78. package/build/hooks/useScreencast.js +0 -85
  79. package/build/hooks/useScreencast.js.map +0 -1
  80. package/build/stats/types.d.ts.map +0 -1
  81. package/build/stats/types.js.map +0 -1
  82. package/build/stats/useRTCStatistics.d.ts.map +0 -1
  83. package/build/stats/useRTCStatistics.js.map +0 -1
  84. /package/build/{stats → debug/stats}/types.d.ts +0 -0
  85. /package/build/{stats → debug/stats}/types.js +0 -0
  86. /package/build/{stats → debug/stats}/useRTCStatistics.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"useCamera.js","sourceRoot":"","sources":["../../src/hooks/useCamera.ts"],"names":[],"mappings":"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","sourcesContent":["import { useCallback, useMemo, useState } from 'react';\nimport { Platform } from 'react-native';\n\nimport {\n BandwidthLimit,\n Brand,\n SimulcastBandwidthLimit,\n SimulcastConfig,\n TrackBandwidthLimit,\n TrackEncoding,\n} from '../types';\nimport RNFishjamClientModule from '../RNFishjamClientModule';\nimport { ReceivableEvents, useFishjamEvent } from './useFishjamEvent';\n\ntype SimulcastConfigUpdateEvent = SimulcastConfig;\nexport type CameraId = Brand<string, 'CameraId'>;\n\nexport type CameraFacingDirection = 'front' | 'back' | 'unspecified';\n\nexport type Camera = {\n id: CameraId;\n name: string;\n facingDirection: CameraFacingDirection;\n};\n\nexport type VideoQuality =\n | 'QVGA169'\n | 'VGA169'\n | 'QHD169'\n | 'HD169'\n | 'FHD169'\n | 'QVGA43'\n | 'VGA43'\n | 'QHD43'\n | 'HD43'\n | 'FHD43';\n\ntype CameraConfigBase = {\n /**\n * resolution + aspect ratio of local video track, one of: `QVGA_169`, `VGA_169`, `QHD_169`, `HD_169`,\n * `FHD_169`, `QVGA_43`, `VGA_43`, `QHD_43`, `HD_43`, `FHD_43`. Note that quality might be worse than\n * specified due to device capabilities, internet connection etc.\n * @default `VGA_169`\n */\n quality?: VideoQuality;\n /**\n * whether the camera track is initially enabled, you can toggle it on/off later with toggleCamera method\n * @default `true`\n */\n cameraEnabled?: boolean;\n /**\n * id of the camera to start capture with. Get available cameras with `cameras`.\n * You can switch the cameras later with `switchCamera` functions.\n * @default the first front camera\n */\n cameraId?: CameraId;\n};\n\nexport type CameraConfig = CameraConfigBase & {\n /**\n * whether video track uses simulcast. By default simulcast is disabled.\n */\n simulcastEnabled?: boolean;\n /**\n * bandwidth limit of a video track. By default there is no bandwidth limit.\n */\n};\n\nexport type CameraConfigInternal = CameraConfigBase & {\n videoTrackMetadata?: { active: boolean; type: 'camera' };\n /**\n * SimulcastConfig of a video track. By default simulcast is disabled.\n */\n simulcastConfig?: SimulcastConfig;\n /**\n * bandwidth limit of a video track. By default there is no bandwidth limit.\n */\n maxBandwidth?: TrackBandwidthLimit;\n} & (\n | { maxBandwidthInt?: BandwidthLimit }\n | { maxBandwidthMap?: SimulcastBandwidthLimit }\n );\n\nconst defaultSimulcastConfig = () => ({\n enabled: false,\n activeEncodings: [],\n});\n\nfunction maxBandwidthConfig(maxBandwidth: TrackBandwidthLimit | undefined) {\n if (Platform.OS === 'android') {\n if (typeof maxBandwidth === 'object') {\n return {\n maxBandwidth: undefined,\n maxBandwidthMap: maxBandwidth,\n };\n } else {\n return {\n maxBandwidth: undefined,\n maxBandwidthInt: maxBandwidth,\n };\n }\n }\n return { maxBandwidth };\n}\n\nfunction simulcastConfig(\n simulcastEnabled: boolean | undefined,\n): SimulcastConfig | undefined {\n // iOS has a limit of 3 hardware encoders\n // 3 simulcast layers + 1 screencast layer = 4, which is too much\n // so we limit simulcast layers to 2\n if (simulcastEnabled) {\n return Platform.select<SimulcastConfig>({\n ios: { enabled: true, activeEncodings: ['l', 'h'] },\n android: { enabled: true, activeEncodings: ['l', 'm', 'h'] },\n });\n }\n return undefined;\n}\n\nexport function updateCameraConfig(\n config: Readonly<CameraConfig>,\n): CameraConfigInternal {\n return {\n ...config,\n ...maxBandwidthConfig({ l: 150, m: 500, h: 1500 }),\n videoTrackMetadata: { active: true, type: 'camera' },\n simulcastConfig: simulcastConfig(config.simulcastEnabled),\n };\n}\n\n/**\n * This hook can toggle camera on/off and provides current camera state.\n * @category Devices\n * @group Hooks\n */\nexport function useCamera() {\n const [isCameraOn, setIsCameraOn] = useState<boolean>(\n RNFishjamClientModule.isCameraOn,\n );\n\n const [currentCamera, setCurrentCamera] = useState<Camera | undefined>(\n undefined,\n );\n\n const [simulcastConfig, setSimulcastConfig] = useState<SimulcastConfig>(\n defaultSimulcastConfig(),\n );\n\n useFishjamEvent<SimulcastConfigUpdateEvent>(\n ReceivableEvents.SimulcastConfigUpdate,\n setSimulcastConfig,\n );\n\n useFishjamEvent(ReceivableEvents.IsCameraOn, setIsCameraOn);\n\n const cameras = useMemo(() => {\n return RNFishjamClientModule.cameras;\n }, []);\n\n const prepareCamera = useCallback(\n async (config: Readonly<CameraConfig> = {}) => {\n const camera = RNFishjamClientModule.cameras.find((camera) =>\n config.cameraId\n ? camera.id === config.cameraId\n : camera.facingDirection === 'front',\n );\n\n setCurrentCamera(camera);\n const updatedConfig = updateCameraConfig({\n ...config,\n cameraId: camera?.id,\n });\n await RNFishjamClientModule.startCamera(updatedConfig);\n },\n [],\n );\n\n const toggleCamera = useCallback(async () => {\n const state = await RNFishjamClientModule.toggleCamera();\n await RNFishjamClientModule.updateVideoTrackMetadata({\n active: state,\n type: 'camera',\n });\n setIsCameraOn(state);\n }, []);\n\n const switchCamera = useCallback(\n async (cameraId: CameraId) => {\n await RNFishjamClientModule.switchCamera(cameraId);\n setCurrentCamera(cameras.find((camera) => camera.id === cameraId));\n },\n [cameras],\n );\n\n const setVideoTrackBandwidth = useCallback(\n async (bandwidth: BandwidthLimit) => {\n await RNFishjamClientModule.setVideoTrackBandwidth(bandwidth);\n },\n [],\n );\n\n const toggleVideoTrackEncoding = useCallback(\n async (encoding: TrackEncoding) => {\n const videoSimulcastConfig =\n await RNFishjamClientModule.toggleVideoTrackEncoding(encoding);\n setSimulcastConfig(videoSimulcastConfig);\n },\n [],\n );\n\n const setVideoTrackEncodingBandwidth = useCallback(\n async (encoding: TrackEncoding, bandwidth: BandwidthLimit) => {\n await RNFishjamClientModule.setVideoTrackEncodingBandwidth(\n encoding,\n bandwidth,\n );\n },\n [],\n );\n\n return {\n /**\n * Informs if user camera is streaming video\n */\n isCameraOn,\n /**\n * Which camera is now used for streaming (or will be used as default when camera will be enabled)\n */\n currentCamera,\n /**\n * Simulcast configuration\n */\n simulcastConfig,\n /**\n * Property that lists cameras available on device.\n * @returns A promise that resolves to the list of available cameras.\n */\n cameras,\n\n /** Enable/disable current camera */\n toggleCamera,\n /**\n * Prepares camera and starts local video track\n * @param config configuration of the camera capture\n * @returns A promise that resolves when camera is started.\n */\n prepareCamera,\n /**\n * Switches to the specified camera.\n * List of available devices can be retrieved from `cameras` variable\n * @returns A promise that resolves when camera is switched.\n */ switchCamera,\n\n /**\n * @deprecated\n * toggles encoding of a video track on/off\n * @param encoding encoding to toggle\n */\n toggleVideoTrackEncoding,\n /**\n * updates maximum bandwidth for the given simulcast encoding of the video track\n * @param encoding encoding to update\n * @param bandwidth BandwidthLimit to set\n * @deprecated\n */\n setVideoTrackEncodingBandwidth,\n /**\n * updates maximum bandwidth for the video track. This value directly translates\n * to quality of the stream and the amount of RTP packets being sent. In case simulcast\n * is enabled bandwidth is split between all of the variant streams proportionally to\n * their resolution.\n * @param BandwidthLimit to set\n * @deprecated\n */\n setVideoTrackBandwidth,\n };\n}\n"]}
1
+ {"version":3,"file":"useCamera.js","sourceRoot":"","sources":["../../src/hooks/useCamera.ts"],"names":[],"mappings":"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","sourcesContent":["import { useCallback, useMemo, useState } from 'react';\nimport { Platform } from 'react-native';\n\nimport {\n BandwidthLimit,\n Brand,\n SimulcastBandwidthLimit,\n SimulcastConfig,\n TrackBandwidthLimit,\n TrackEncoding,\n} from '../types';\nimport RNFishjamClientModule from '../RNFishjamClientModule';\nimport { ReceivableEvents, useFishjamEvent } from './useFishjamEvent';\n\ntype SimulcastConfigUpdateEvent = SimulcastConfig;\nexport type CameraId = Brand<string, 'CameraId'>;\n\nexport type CameraFacingDirection = 'front' | 'back' | 'unspecified';\n\nexport type Camera = {\n id: CameraId;\n name: string;\n facingDirection: CameraFacingDirection;\n};\n\nexport type VideoQuality =\n | 'QVGA169'\n | 'VGA169'\n | 'QHD169'\n | 'HD169'\n | 'FHD169'\n | 'QVGA43'\n | 'VGA43'\n | 'QHD43'\n | 'HD43'\n | 'FHD43';\n\ntype CameraConfigBase = {\n /**\n * resolution + aspect ratio of local video track, one of: `QVGA_169`, `VGA_169`, `QHD_169`, `HD_169`,\n * `FHD_169`, `QVGA_43`, `VGA_43`, `QHD_43`, `HD_43`, `FHD_43`. Note that quality might be worse than\n * specified due to device capabilities, internet connection etc.\n * @default `VGA_169`\n */\n quality?: VideoQuality;\n /**\n * whether to flip the dimensions of the video, that is whether to film in vertical orientation.\n * This basically switches width with height and is only used to select closes capture format.\n *\n * To record horizontal video your phone orientation must be in landscape and your app must support this orientation.\n *\n * Platform specific capture formats:\n * @see iOS: https://developer.apple.com/documentation/avfoundation/avcapturedevice/format\n * @see Android: https://github.com/webrtc-sdk/webrtc/blob/cdc3bba5aa38910a55428b919ba45aceac1ad9ad/sdk/android/api/org/webrtc/CameraEnumerationAndroid.java#L50\n *\n * WebRTC device orientation handling:\n * @see iOS: https://github.com/webrtc-sdk/webrtc/blob/cdc3bba5aa38910a55428b919ba45aceac1ad9ad/sdk/objc/components/capturer/RTCCameraVideoCapturer.m#L285\n * @see Android: https://github.com/pristineio/webrtc-mirror/blob/7a5bcdffaab90a05bc1146b2b1ea71c004e54d71/webrtc/sdk/android/src/java/org/webrtc/Camera2Session.java#L347\n *\n * @default `true`\n */\n flipDimensions?: boolean;\n /**\n * whether the camera track is initially enabled, you can toggle it on/off later with toggleCamera method\n * @default `true`\n */\n cameraEnabled?: boolean;\n /**\n * id of the camera to start capture with. Get available cameras with `cameras`.\n * You can switch the cameras later with `switchCamera` functions.\n * @default the first front camera\n */\n cameraId?: CameraId;\n};\n\nexport type CameraConfig = CameraConfigBase & {\n /**\n * whether video track uses simulcast. By default simulcast is disabled.\n */\n simulcastEnabled?: boolean;\n /**\n * bandwidth limit of a video track. By default there is no bandwidth limit.\n */\n};\n\nexport type CameraConfigInternal = CameraConfigBase & {\n videoTrackMetadata?: { active: boolean; type: 'camera' };\n /**\n * SimulcastConfig of a video track. By default simulcast is disabled.\n */\n simulcastConfig?: SimulcastConfig;\n /**\n * bandwidth limit of a video track. By default there is no bandwidth limit.\n */\n maxBandwidth?: TrackBandwidthLimit;\n} & (\n | { maxBandwidthInt?: BandwidthLimit }\n | { maxBandwidthMap?: SimulcastBandwidthLimit }\n );\n\nconst defaultSimulcastConfig = () => ({\n enabled: false,\n activeEncodings: [],\n});\n\nfunction maxBandwidthConfig(maxBandwidth: TrackBandwidthLimit | undefined) {\n if (Platform.OS === 'android') {\n if (typeof maxBandwidth === 'object') {\n return {\n maxBandwidth: undefined,\n maxBandwidthMap: maxBandwidth,\n };\n } else {\n return {\n maxBandwidth: undefined,\n maxBandwidthInt: maxBandwidth,\n };\n }\n }\n return { maxBandwidth };\n}\n\nfunction simulcastConfig(\n simulcastEnabled: boolean | undefined,\n): SimulcastConfig | undefined {\n // iOS has a limit of 3 hardware encoders\n // 3 simulcast layers + 1 screen share layer = 4, which is too much\n // so we limit simulcast layers to 2\n if (simulcastEnabled) {\n return Platform.select<SimulcastConfig>({\n ios: { enabled: true, activeEncodings: ['l', 'h'] },\n android: { enabled: true, activeEncodings: ['l', 'm', 'h'] },\n });\n }\n return undefined;\n}\n\nexport function updateCameraConfig(\n config: Readonly<CameraConfig>,\n): CameraConfigInternal {\n return {\n ...config,\n ...maxBandwidthConfig({ l: 150, m: 500, h: 1500 }),\n videoTrackMetadata: { active: true, type: 'camera' },\n simulcastConfig: simulcastConfig(config.simulcastEnabled),\n };\n}\n\n/**\n * This hook can toggle camera on/off and provides current camera state.\n * @category Devices\n * @group Hooks\n */\nexport function useCamera() {\n const [isCameraOn, setIsCameraOn] = useState<boolean>(\n RNFishjamClientModule.isCameraOn,\n );\n\n const [currentCamera, setCurrentCamera] = useState<Camera | undefined>(\n undefined,\n );\n\n const [simulcastConfig, setSimulcastConfig] = useState<SimulcastConfig>(\n defaultSimulcastConfig(),\n );\n\n useFishjamEvent<SimulcastConfigUpdateEvent>(\n ReceivableEvents.SimulcastConfigUpdate,\n setSimulcastConfig,\n );\n\n useFishjamEvent(ReceivableEvents.IsCameraOn, setIsCameraOn);\n\n const cameras = useMemo(() => {\n return RNFishjamClientModule.cameras;\n }, []);\n\n const prepareCamera = useCallback(\n async (config: Readonly<CameraConfig> = {}) => {\n const camera = RNFishjamClientModule.cameras.find((camera) =>\n config.cameraId\n ? camera.id === config.cameraId\n : camera.facingDirection === 'front',\n );\n\n setCurrentCamera(camera);\n const updatedConfig = updateCameraConfig({\n ...config,\n cameraId: camera?.id,\n });\n await RNFishjamClientModule.startCamera(updatedConfig);\n },\n [],\n );\n\n const toggleCamera = useCallback(async () => {\n const state = await RNFishjamClientModule.toggleCamera();\n await RNFishjamClientModule.updateVideoTrackMetadata({\n active: state,\n type: 'camera',\n });\n setIsCameraOn(state);\n }, []);\n\n const switchCamera = useCallback(\n async (cameraId: CameraId) => {\n await RNFishjamClientModule.switchCamera(cameraId);\n setCurrentCamera(cameras.find((camera) => camera.id === cameraId));\n },\n [cameras],\n );\n\n const setVideoTrackBandwidth = useCallback(\n async (bandwidth: BandwidthLimit) => {\n await RNFishjamClientModule.setVideoTrackBandwidth(bandwidth);\n },\n [],\n );\n\n const toggleVideoTrackEncoding = useCallback(\n async (encoding: TrackEncoding) => {\n const videoSimulcastConfig =\n await RNFishjamClientModule.toggleVideoTrackEncoding(encoding);\n setSimulcastConfig(videoSimulcastConfig);\n },\n [],\n );\n\n const setVideoTrackEncodingBandwidth = useCallback(\n async (encoding: TrackEncoding, bandwidth: BandwidthLimit) => {\n await RNFishjamClientModule.setVideoTrackEncodingBandwidth(\n encoding,\n bandwidth,\n );\n },\n [],\n );\n\n return {\n /**\n * Informs if user camera is streaming video\n */\n isCameraOn,\n /**\n * Which camera is now used for streaming (or will be used as default when camera will be enabled)\n */\n currentCamera,\n /**\n * Simulcast configuration\n */\n simulcastConfig,\n /**\n * Property that lists cameras available on device.\n * @returns A promise that resolves to the list of available cameras.\n */\n cameras,\n\n /** Enable/disable current camera */\n toggleCamera,\n /**\n * Prepares camera and starts local video track\n * @param config configuration of the camera capture\n * @returns A promise that resolves when camera is started.\n */\n prepareCamera,\n /**\n * Switches to the specified camera.\n * List of available devices can be retrieved from `cameras` variable\n * @returns A promise that resolves when camera is switched.\n */ switchCamera,\n\n /**\n * @deprecated\n * toggles encoding of a video track on/off\n * @param encoding encoding to toggle\n */\n toggleVideoTrackEncoding,\n /**\n * updates maximum bandwidth for the given simulcast encoding of the video track\n * @param encoding encoding to update\n * @param bandwidth BandwidthLimit to set\n * @deprecated\n */\n setVideoTrackEncodingBandwidth,\n /**\n * updates maximum bandwidth for the video track. This value directly translates\n * to quality of the stream and the amount of RTP packets being sent. In case simulcast\n * is enabled bandwidth is split between all of the variant streams proportionally to\n * their resolution.\n * @param BandwidthLimit to set\n * @deprecated\n */\n setVideoTrackBandwidth,\n };\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  export declare const ReceivableEvents: {
2
2
  readonly IsCameraOn: "IsCameraOn";
3
3
  readonly IsMicrophoneOn: "IsMicrophoneOn";
4
- readonly IsScreencastOn: "IsScreencastOn";
4
+ readonly IsScreenShareOn: "IsScreenShareOn";
5
5
  readonly SimulcastConfigUpdate: "SimulcastConfigUpdate";
6
6
  readonly PeersUpdate: "PeersUpdate";
7
7
  readonly AudioDeviceUpdate: "AudioDeviceUpdate";
@@ -11,6 +11,7 @@ export declare const ReceivableEvents: {
11
11
  readonly ReconnectionStarted: "ReconnectionStarted";
12
12
  readonly Reconnected: "Reconnected";
13
13
  readonly Warning: "Warning";
14
+ readonly PeerStatusChanged: "PeerStatusChanged";
14
15
  };
15
16
  export declare function useFishjamEvent<T>(eventName: keyof typeof ReceivableEvents, callback: (event: T) => void): void;
16
17
  //# sourceMappingURL=useFishjamEvent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useFishjamEvent.d.ts","sourceRoot":"","sources":["../../src/hooks/useFishjamEvent.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;CAanB,CAAC;AAEX,wBAAgB,eAAe,CAAC,CAAC,EAC/B,SAAS,EAAE,MAAM,OAAO,gBAAgB,EACxC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,QAU7B"}
1
+ {"version":3,"file":"useFishjamEvent.d.ts","sourceRoot":"","sources":["../../src/hooks/useFishjamEvent.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;CAcnB,CAAC;AAEX,wBAAgB,eAAe,CAAC,CAAC,EAC/B,SAAS,EAAE,MAAM,OAAO,gBAAgB,EACxC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,QAU7B"}
@@ -3,7 +3,7 @@ import { nativeModuleEventEmitter } from '../RNFishjamClientModule';
3
3
  export const ReceivableEvents = {
4
4
  IsCameraOn: 'IsCameraOn',
5
5
  IsMicrophoneOn: 'IsMicrophoneOn',
6
- IsScreencastOn: 'IsScreencastOn',
6
+ IsScreenShareOn: 'IsScreenShareOn',
7
7
  SimulcastConfigUpdate: 'SimulcastConfigUpdate',
8
8
  PeersUpdate: 'PeersUpdate',
9
9
  AudioDeviceUpdate: 'AudioDeviceUpdate',
@@ -13,6 +13,7 @@ export const ReceivableEvents = {
13
13
  ReconnectionStarted: 'ReconnectionStarted',
14
14
  Reconnected: 'Reconnected',
15
15
  Warning: 'Warning',
16
+ PeerStatusChanged: 'PeerStatusChanged',
16
17
  };
17
18
  export function useFishjamEvent(eventName, callback) {
18
19
  useEffect(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"useFishjamEvent.js","sourceRoot":"","sources":["../../src/hooks/useFishjamEvent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,UAAU,EAAE,YAAY;IACxB,cAAc,EAAE,gBAAgB;IAChC,cAAc,EAAE,gBAAgB;IAChC,qBAAqB,EAAE,uBAAuB;IAC9C,WAAW,EAAE,aAAa;IAC1B,iBAAiB,EAAE,mBAAmB;IACtC,cAAc,EAAE,gBAAgB;IAChC,mBAAmB,EAAE,qBAAqB;IAC1C,+BAA+B,EAAE,iCAAiC;IAClE,mBAAmB,EAAE,qBAAqB;IAC1C,WAAW,EAAE,aAAa;IAC1B,OAAO,EAAE,SAAS;CACV,CAAC;AAEX,MAAM,UAAU,eAAe,CAC7B,SAAwC,EACxC,QAA4B;IAE5B,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,aAAa,GAAG,wBAAwB,CAAC,WAAW,CAExD,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;YACrB,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;IACtC,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;AAC5B,CAAC","sourcesContent":["import { useEffect } from 'react';\nimport { nativeModuleEventEmitter } from '../RNFishjamClientModule';\n\nexport const ReceivableEvents = {\n IsCameraOn: 'IsCameraOn',\n IsMicrophoneOn: 'IsMicrophoneOn',\n IsScreencastOn: 'IsScreencastOn',\n SimulcastConfigUpdate: 'SimulcastConfigUpdate',\n PeersUpdate: 'PeersUpdate',\n AudioDeviceUpdate: 'AudioDeviceUpdate',\n SendMediaEvent: 'SendMediaEvent',\n BandwidthEstimation: 'BandwidthEstimation',\n ReconnectionRetriesLimitReached: 'ReconnectionRetriesLimitReached',\n ReconnectionStarted: 'ReconnectionStarted',\n Reconnected: 'Reconnected',\n Warning: 'Warning',\n} as const;\n\nexport function useFishjamEvent<T>(\n eventName: keyof typeof ReceivableEvents,\n callback: (event: T) => void,\n) {\n useEffect(() => {\n const eventListener = nativeModuleEventEmitter.addListener<\n Record<keyof typeof ReceivableEvents, T>\n >(eventName, (event) => {\n callback(event[eventName]);\n });\n return () => eventListener.remove();\n }, [callback, eventName]);\n}\n"]}
1
+ {"version":3,"file":"useFishjamEvent.js","sourceRoot":"","sources":["../../src/hooks/useFishjamEvent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,UAAU,EAAE,YAAY;IACxB,cAAc,EAAE,gBAAgB;IAChC,eAAe,EAAE,iBAAiB;IAClC,qBAAqB,EAAE,uBAAuB;IAC9C,WAAW,EAAE,aAAa;IAC1B,iBAAiB,EAAE,mBAAmB;IACtC,cAAc,EAAE,gBAAgB;IAChC,mBAAmB,EAAE,qBAAqB;IAC1C,+BAA+B,EAAE,iCAAiC;IAClE,mBAAmB,EAAE,qBAAqB;IAC1C,WAAW,EAAE,aAAa;IAC1B,OAAO,EAAE,SAAS;IAClB,iBAAiB,EAAE,mBAAmB;CAC9B,CAAC;AAEX,MAAM,UAAU,eAAe,CAC7B,SAAwC,EACxC,QAA4B;IAE5B,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,aAAa,GAAG,wBAAwB,CAAC,WAAW,CAExD,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;YACrB,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;IACtC,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;AAC5B,CAAC","sourcesContent":["import { useEffect } from 'react';\nimport { nativeModuleEventEmitter } from '../RNFishjamClientModule';\n\nexport const ReceivableEvents = {\n IsCameraOn: 'IsCameraOn',\n IsMicrophoneOn: 'IsMicrophoneOn',\n IsScreenShareOn: 'IsScreenShareOn',\n SimulcastConfigUpdate: 'SimulcastConfigUpdate',\n PeersUpdate: 'PeersUpdate',\n AudioDeviceUpdate: 'AudioDeviceUpdate',\n SendMediaEvent: 'SendMediaEvent',\n BandwidthEstimation: 'BandwidthEstimation',\n ReconnectionRetriesLimitReached: 'ReconnectionRetriesLimitReached',\n ReconnectionStarted: 'ReconnectionStarted',\n Reconnected: 'Reconnected',\n Warning: 'Warning',\n PeerStatusChanged: 'PeerStatusChanged',\n} as const;\n\nexport function useFishjamEvent<T>(\n eventName: keyof typeof ReceivableEvents,\n callback: (event: T) => void,\n) {\n useEffect(() => {\n const eventListener = nativeModuleEventEmitter.addListener<\n Record<keyof typeof ReceivableEvents, T>\n >(eventName, (event) => {\n callback(event[eventName]);\n });\n return () => eventListener.remove();\n }, [callback, eventName]);\n}\n"]}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Represents the possible statuses of a peer connection to a room (websocket state).
3
+ *
4
+ * idle - Peer is not connected, either never connected or successfully disconnected.
5
+ * connecting - Peer is in the process of connecting.
6
+ * connected - Peer has successfully connected.
7
+ * error - There was an error in the connection process.
8
+ */
9
+ export type PeerStatus = 'connecting' | 'connected' | 'error' | 'idle';
10
+ /**
11
+ * This hook provides live updates of current connection state of the local peer to a room (websocket state)
12
+ * @returns Current peer status.
13
+ * @category Connection
14
+ * @group Hooks
15
+ */
16
+ export declare const usePeerStatus: () => {
17
+ peerStatus: "connecting" | "connected" | "error" | "idle";
18
+ };
19
+ //# sourceMappingURL=usePeerStatus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePeerStatus.d.ts","sourceRoot":"","sources":["../../src/hooks/usePeerStatus.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AACH,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG,WAAW,GAAG,OAAO,GAAG,MAAM,CAAC;AAEvE;;;;;GAKG;AACH,eAAO,MAAM,aAAa;;CAYzB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { useCallback, useState } from 'react';
2
+ import { ReceivableEvents, useFishjamEvent } from './useFishjamEvent';
3
+ import RNFishjamClientModule from '../RNFishjamClientModule';
4
+ /**
5
+ * This hook provides live updates of current connection state of the local peer to a room (websocket state)
6
+ * @returns Current peer status.
7
+ * @category Connection
8
+ * @group Hooks
9
+ */
10
+ export const usePeerStatus = () => {
11
+ const [peerStatus, setPeerStatus] = useState(RNFishjamClientModule.peerStatus);
12
+ const onPeerStatusChanged = useCallback((status) => {
13
+ status && setPeerStatus(status);
14
+ }, []);
15
+ useFishjamEvent(ReceivableEvents.PeerStatusChanged, onPeerStatusChanged);
16
+ return { peerStatus };
17
+ };
18
+ //# sourceMappingURL=usePeerStatus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePeerStatus.js","sourceRoot":"","sources":["../../src/hooks/usePeerStatus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,qBAAqB,MAAM,0BAA0B,CAAC;AAY7D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,EAAE;IAChC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAC1C,qBAAqB,CAAC,UAAU,CACjC,CAAC;IAEF,MAAM,mBAAmB,GAAG,WAAW,CAAC,CAAC,MAAmB,EAAE,EAAE;QAC9D,MAAM,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,eAAe,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,mBAAmB,CAAC,CAAC;IAEzE,OAAO,EAAE,UAAU,EAAE,CAAC;AACxB,CAAC,CAAC","sourcesContent":["import { useCallback, useState } from 'react';\nimport { ReceivableEvents, useFishjamEvent } from './useFishjamEvent';\nimport RNFishjamClientModule from '../RNFishjamClientModule';\n\n/**\n * Represents the possible statuses of a peer connection to a room (websocket state).\n *\n * idle - Peer is not connected, either never connected or successfully disconnected.\n * connecting - Peer is in the process of connecting.\n * connected - Peer has successfully connected.\n * error - There was an error in the connection process.\n */\nexport type PeerStatus = 'connecting' | 'connected' | 'error' | 'idle';\n\n/**\n * This hook provides live updates of current connection state of the local peer to a room (websocket state)\n * @returns Current peer status.\n * @category Connection\n * @group Hooks\n */\nexport const usePeerStatus = () => {\n const [peerStatus, setPeerStatus] = useState(\n RNFishjamClientModule.peerStatus,\n );\n\n const onPeerStatusChanged = useCallback((status?: PeerStatus) => {\n status && setPeerStatus(status);\n }, []);\n\n useFishjamEvent(ReceivableEvents.PeerStatusChanged, onPeerStatusChanged);\n\n return { peerStatus };\n};\n"]}
@@ -30,32 +30,32 @@ export type Track = VideoTrack | AudioTrack;
30
30
  * - low_bandwidth - there is no longer enough bandwidth to maintain previously selected encoding
31
31
  */
32
32
  export type EncodingReason = 'other' | 'encoding_inactive' | 'low_bandwidth';
33
- export type Participant<ParticipantMetadata extends GenericMetadata = GenericMetadata> = {
33
+ export type Peer<PeerMetadata extends GenericMetadata = GenericMetadata> = {
34
34
  /**
35
- * id used to identify a participant
35
+ * id used to identify a peer
36
36
  */
37
37
  id: string;
38
38
  /**
39
- * whether the participant is local or remote
39
+ * whether the peer is local or remote
40
40
  */
41
41
  isLocal: boolean;
42
42
  /**
43
- * a map indexed by strings, containing participant metadata from the server
43
+ * a map indexed by strings, containing peer metadata from the server
44
44
  */
45
- metadata: ParticipantMetadata;
45
+ metadata: PeerMetadata;
46
46
  /**
47
- * a list of participants's video and audio tracks
47
+ * a list of peer's video and audio tracks
48
48
  */
49
49
  tracks: Track[];
50
50
  };
51
51
  /**
52
- * This hook provides live updates of room participants.
53
- * @returns An array of room participants.
52
+ * This hook provides live updates of room peers.
53
+ * @returns An array of room peers.
54
54
  * @category Connection
55
55
  * @group Hooks
56
56
  */
57
- export declare function useParticipants<ParticipantMetadata extends GenericMetadata = GenericMetadata>(): {
58
- participants: Participant<ParticipantMetadata>[];
57
+ export declare function usePeers<PeerMetadata extends GenericMetadata = GenericMetadata>(): {
58
+ peers: Peer<PeerMetadata>[];
59
59
  };
60
60
  export {};
61
- //# sourceMappingURL=useParticipants.d.ts.map
61
+ //# sourceMappingURL=usePeers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePeers.d.ts","sourceRoot":"","sources":["../../src/hooks/usePeers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,aAAa,EAAiB,MAAM,UAAU,CAAC;AAIzE,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;AAE1C;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE7C,KAAK,SAAS,GAAG;IACf,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG;IACnC,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,SAAS,GAAG,SAAS,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG;IACnC,IAAI,EAAE,OAAO,CAAC;IAEd,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IAE/B,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,KAAK,GAAG,UAAU,GAAG,UAAU,CAAC;AAC5C;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,mBAAmB,GAAG,eAAe,CAAC;AAE7E,MAAM,MAAM,IAAI,CAAC,YAAY,SAAS,eAAe,GAAG,eAAe,IAAI;IACzE;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IACX;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,QAAQ,EAAE,YAAY,CAAC;IACvB;;OAEG;IACH,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB,CAAC;AAcF;;;;;GAKG;AACH,wBAAgB,QAAQ,CACtB,YAAY,SAAS,eAAe,GAAG,eAAe;;EAoBvD"}
@@ -0,0 +1,34 @@
1
+ import { useCallback, useEffect, useState } from 'react';
2
+ import RNFishjamClientModule from '../RNFishjamClientModule';
3
+ import { ReceivableEvents, useFishjamEvent } from './useFishjamEvent';
4
+ function addIsActiveToTracks(peers) {
5
+ return peers.map((peer) => ({
6
+ ...peer,
7
+ tracks: peer.tracks.map((track) => ({
8
+ ...track,
9
+ isActive: track?.metadata?.active ?? true,
10
+ })),
11
+ }));
12
+ }
13
+ /**
14
+ * This hook provides live updates of room peers.
15
+ * @returns An array of room peers.
16
+ * @category Connection
17
+ * @group Hooks
18
+ */
19
+ export function usePeers() {
20
+ const [peers, setPeers] = useState([]);
21
+ const updateActivePeers = useCallback((peers) => {
22
+ setPeers(addIsActiveToTracks(peers));
23
+ }, []);
24
+ useFishjamEvent(ReceivableEvents.PeersUpdate, updateActivePeers);
25
+ useEffect(() => {
26
+ async function updatePeers() {
27
+ const peers = await RNFishjamClientModule.getPeers();
28
+ setPeers(addIsActiveToTracks(peers));
29
+ }
30
+ updatePeers();
31
+ }, []);
32
+ return { peers };
33
+ }
34
+ //# sourceMappingURL=usePeers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePeers.js","sourceRoot":"","sources":["../../src/hooks/usePeers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAGzD,OAAO,qBAAqB,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AA4DtE,SAAS,mBAAmB,CAE1B,KAAwC;IACxC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC1B,GAAG,IAAI;QACP,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAClC,GAAG,KAAK;YACR,QAAQ,EACL,KAAsC,EAAE,QAAQ,EAAE,MAAM,IAAI,IAAI;SACpE,CAAC,CAAC;KACJ,CAAC,CAAC,CAAC;AACN,CAAC;AACD;;;;;GAKG;AACH,MAAM,UAAU,QAAQ;IAGtB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAuB,EAAE,CAAC,CAAC;IAE7D,MAAM,iBAAiB,GAAG,WAAW,CAAC,CAAC,KAA2B,EAAE,EAAE;QACpE,QAAQ,CAAC,mBAAmB,CAAe,KAAK,CAAC,CAAC,CAAC;IACrD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,eAAe,CAAC,gBAAgB,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;IAEjE,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,UAAU,WAAW;YACxB,MAAM,KAAK,GAAG,MAAM,qBAAqB,CAAC,QAAQ,EAAgB,CAAC;YACnE,QAAQ,CAAC,mBAAmB,CAAe,KAAK,CAAC,CAAC,CAAC;QACrD,CAAC;QAED,WAAW,EAAE,CAAC;IAChB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC","sourcesContent":["import { useCallback, useEffect, useState } from 'react';\n\nimport { GenericMetadata, TrackEncoding, TrackMetadata } from '../types';\nimport RNFishjamClientModule from '../RNFishjamClientModule';\nimport { ReceivableEvents, useFishjamEvent } from './useFishjamEvent';\n\nexport type TrackType = 'Audio' | 'Video';\n\n/**\n * Type describing Voice Activity Detection statuses.\n *\n * speech - voice activity has been detected\n * silence - lack of voice activity has been detected\n */\nexport type VadStatus = 'silence' | 'speech';\n\ntype TrackBase = {\n id: string;\n type: TrackType;\n isActive: boolean;\n};\n\nexport type AudioTrack = TrackBase & {\n type: 'Audio';\n vadStatus: VadStatus | undefined;\n};\n\nexport type VideoTrack = TrackBase & {\n type: 'Video';\n // Encoding that is currently received. Only present for remote tracks.\n encoding: TrackEncoding | null;\n // The reason of currently selected encoding. Only present for remote tracks.\n encodingReason: EncodingReason | null;\n};\n\nexport type Track = VideoTrack | AudioTrack;\n/**\n * Type describing possible reasons of currently selected encoding.\n *\n * - other - the exact reason couldn't be determined\n * - encoding_inactive - previously selected encoding became inactive\n * - low_bandwidth - there is no longer enough bandwidth to maintain previously selected encoding\n */\nexport type EncodingReason = 'other' | 'encoding_inactive' | 'low_bandwidth';\n\nexport type Peer<PeerMetadata extends GenericMetadata = GenericMetadata> = {\n /**\n * id used to identify a peer\n */\n id: string;\n /**\n * whether the peer is local or remote\n */\n isLocal: boolean;\n /**\n * a map indexed by strings, containing peer metadata from the server\n */\n metadata: PeerMetadata;\n /**\n * a list of peer's video and audio tracks\n */\n tracks: Track[];\n};\n\nfunction addIsActiveToTracks<\n PeerMetadata extends GenericMetadata = GenericMetadata,\n>(peers: ReadonlyArray<Peer<PeerMetadata>>): Peer<PeerMetadata>[] {\n return peers.map((peer) => ({\n ...peer,\n tracks: peer.tracks.map((track) => ({\n ...track,\n isActive:\n (track as { metadata?: TrackMetadata })?.metadata?.active ?? true,\n })),\n }));\n}\n/**\n * This hook provides live updates of room peers.\n * @returns An array of room peers.\n * @category Connection\n * @group Hooks\n */\nexport function usePeers<\n PeerMetadata extends GenericMetadata = GenericMetadata,\n>() {\n const [peers, setPeers] = useState<Peer<PeerMetadata>[]>([]);\n\n const updateActivePeers = useCallback((peers: Peer<PeerMetadata>[]) => {\n setPeers(addIsActiveToTracks<PeerMetadata>(peers));\n }, []);\n\n useFishjamEvent(ReceivableEvents.PeersUpdate, updateActivePeers);\n\n useEffect(() => {\n async function updatePeers() {\n const peers = await RNFishjamClientModule.getPeers<PeerMetadata>();\n setPeers(addIsActiveToTracks<PeerMetadata>(peers));\n }\n\n updatePeers();\n }, []);\n\n return { peers };\n}\n"]}
@@ -0,0 +1,57 @@
1
+ import { BandwidthLimit, SimulcastConfig, TrackBandwidthLimit, TrackEncoding, TrackMetadata } from '../types';
2
+ export type ScreenShareQuality = 'VGA' | 'HD5' | 'HD15' | 'FHD15' | 'FHD30';
3
+ export type ScreenShareOptions = {
4
+ /**
5
+ * Resolution + fps of screen share track, one of: `VGA`, `HD5`, `HD15`, `FHD15`, `FHD30`.
6
+ * Note that quality might be worse than specified due to device capabilities, internet
7
+ * connection etc.
8
+ * @default `HD15``
9
+ */
10
+ quality: ScreenShareQuality;
11
+ /**
12
+ * bandwidth limit of a screen share track. By default there is no bandwidth limit.
13
+ */
14
+ maxBandwidth: TrackBandwidthLimit;
15
+ };
16
+ export type ScreenShareOptionsInternal = {
17
+ screenShareMetadata: TrackMetadata & {
18
+ displayName?: string;
19
+ };
20
+ /**
21
+ * SimulcastConfig of a screen share track. By default simulcast is disabled.
22
+ */
23
+ simulcastConfig: SimulcastConfig;
24
+ };
25
+ /**
26
+ * This hook can toggle screen sharing on/off and provides current screen share state.
27
+ * @returns An object with functions to manage screen share.
28
+ * @category Screenshare
29
+ * @group Hooks
30
+ */
31
+ export declare function useScreenShare(): {
32
+ isScreenShareOn: boolean;
33
+ simulcastConfig: SimulcastConfig;
34
+ /**
35
+ * Toggles the screen share on/off
36
+ */
37
+ toggleScreenShare: (screenShareOptions?: Partial<ScreenShareOptions>) => Promise<void>;
38
+ handleScreenSharePermission: () => Promise<"granted" | "denied">;
39
+ /**
40
+ * @deprecated
41
+ */
42
+ setScreenShareTrackBandwidth: (bandwidth: BandwidthLimit) => Promise<void>;
43
+ /**
44
+ * Toggles simulcast encoding of a screen share track on/off
45
+ * @param encoding encoding to toggle
46
+ * @deprecated
47
+ */
48
+ toggleScreenShareTrackEncoding: (encoding: TrackEncoding) => Promise<void>;
49
+ /**
50
+ * updates maximum bandwidth for the given simulcast encoding of the screen share track
51
+ * @param encoding encoding to update
52
+ * @param bandwidth BandwidthLimit to set
53
+ * @deprecated
54
+ */
55
+ setScreenShareTrackEncodingBandwidth: (encoding: TrackEncoding, bandwidth: BandwidthLimit) => Promise<void>;
56
+ };
57
+ //# sourceMappingURL=useScreenShare.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useScreenShare.d.ts","sourceRoot":"","sources":["../../src/hooks/useScreenShare.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,aAAa,EACb,aAAa,EACd,MAAM,UAAU,CAAC;AAKlB,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAE5E,MAAM,MAAM,kBAAkB,GAAG;IAC/B;;;;;OAKG;IACH,OAAO,EAAE,kBAAkB,CAAC;IAC5B;;OAEG;IACH,YAAY,EAAE,mBAAmB,CAAC;CACnC,CAAC;AACF,MAAM,MAAM,0BAA0B,GAAG;IACvC,mBAAmB,EAAE,aAAa,GAAG;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9D;;OAEG;IACH,eAAe,EAAE,eAAe,CAAC;CAClC,CAAC;AASF;;;;;GAKG;AACH,wBAAgB,cAAc;;;IAiE1B;;OAEG;6CAvDwB,OAAO,CAAC,kBAAkB,CAAC;;IA2DtD;;OAEG;8CAzBe,cAAc;IA2BhC;;;;OAIG;+CAlDc,aAAa;IAoD9B;;;;;OAKG;qDAhDc,aAAa,aAAa,cAAc;EA2D5D"}
@@ -0,0 +1,85 @@
1
+ import { useCallback, useState } from 'react';
2
+ import RNFishjamClientModule from '../RNFishjamClientModule';
3
+ import { Platform } from 'react-native';
4
+ import { ReceivableEvents, useFishjamEvent } from './useFishjamEvent';
5
+ const defaultSimulcastConfig = () => ({
6
+ enabled: false,
7
+ activeEncodings: [],
8
+ });
9
+ let screenShareSimulcastConfig = defaultSimulcastConfig();
10
+ /**
11
+ * This hook can toggle screen sharing on/off and provides current screen share state.
12
+ * @returns An object with functions to manage screen share.
13
+ * @category Screenshare
14
+ * @group Hooks
15
+ */
16
+ export function useScreenShare() {
17
+ const [isScreenShareOn, setIsScreenShareOn] = useState(RNFishjamClientModule.isScreenShareOn);
18
+ const [simulcastConfig, setSimulcastConfig] = useState(screenShareSimulcastConfig);
19
+ useFishjamEvent(ReceivableEvents.IsScreenShareOn, setIsScreenShareOn);
20
+ const toggleScreenShare = useCallback(async (screenShareOptions = {}) => {
21
+ const options = {
22
+ ...screenShareOptions,
23
+ screenShareMetadata: {
24
+ displayName: 'presenting',
25
+ type: 'screensharing',
26
+ active: !isScreenShareOn,
27
+ },
28
+ };
29
+ await RNFishjamClientModule.toggleScreenShare(options);
30
+ screenShareSimulcastConfig = defaultSimulcastConfig(); //to do: sync with camera settings
31
+ setSimulcastConfig(screenShareSimulcastConfig);
32
+ }, [isScreenShareOn]);
33
+ const toggleScreenShareTrackEncoding = useCallback(async (encoding) => {
34
+ screenShareSimulcastConfig =
35
+ await RNFishjamClientModule.toggleScreenShareTrackEncoding(encoding);
36
+ setSimulcastConfig(screenShareSimulcastConfig);
37
+ }, []);
38
+ const setScreenShareTrackEncodingBandwidth = useCallback(async (encoding, bandwidth) => {
39
+ await RNFishjamClientModule.setScreenShareTrackEncodingBandwidth(encoding, bandwidth);
40
+ }, []);
41
+ const setScreenShareTrackBandwidth = useCallback(async (bandwidth) => {
42
+ await RNFishjamClientModule.setScreenShareTrackBandwidth(bandwidth);
43
+ }, []);
44
+ const handleScreenSharePermission = useCallback(async () => {
45
+ if (Platform.OS == 'android') {
46
+ return await RNFishjamClientModule.handleScreenSharePermission();
47
+ }
48
+ return 'denied';
49
+ }, []);
50
+ return {
51
+ isScreenShareOn,
52
+ simulcastConfig,
53
+ /**
54
+ * Toggles the screen share on/off
55
+ */
56
+ toggleScreenShare,
57
+ handleScreenSharePermission,
58
+ /**
59
+ * @deprecated
60
+ */
61
+ setScreenShareTrackBandwidth,
62
+ /**
63
+ * Toggles simulcast encoding of a screen share track on/off
64
+ * @param encoding encoding to toggle
65
+ * @deprecated
66
+ */
67
+ toggleScreenShareTrackEncoding,
68
+ /**
69
+ * updates maximum bandwidth for the given simulcast encoding of the screen share track
70
+ * @param encoding encoding to update
71
+ * @param bandwidth BandwidthLimit to set
72
+ * @deprecated
73
+ */
74
+ setScreenShareTrackEncodingBandwidth,
75
+ /**
76
+ * updates maximum bandwidth for the screen share track. This value directly translates
77
+ * to quality of the stream and the amount of RTP packets being sent. In case simulcast
78
+ * is enabled bandwidth is split between all of the variant streams proportionally to
79
+ * their resolution
80
+ * @param bandwidth BandwidthLimit to set
81
+ * @deprecated
82
+ */
83
+ };
84
+ }
85
+ //# sourceMappingURL=useScreenShare.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useScreenShare.js","sourceRoot":"","sources":["../../src/hooks/useScreenShare.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAS9C,OAAO,qBAAqB,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAyBtE,MAAM,sBAAsB,GAAG,GAAG,EAAE,CAAC,CAAC;IACpC,OAAO,EAAE,KAAK;IACd,eAAe,EAAE,EAAE;CACpB,CAAC,CAAC;AAEH,IAAI,0BAA0B,GAAoB,sBAAsB,EAAE,CAAC;AAE3E;;;;;GAKG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CACpD,qBAAqB,CAAC,eAAe,CACtC,CAAC;IAEF,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CACpD,0BAA0B,CAC3B,CAAC;IAEF,eAAe,CAAC,gBAAgB,CAAC,eAAe,EAAE,kBAAkB,CAAC,CAAC;IAEtE,MAAM,iBAAiB,GAAG,WAAW,CACnC,KAAK,EAAE,qBAAkD,EAAE,EAAE,EAAE;QAC7D,MAAM,OAAO,GAAG;YACd,GAAG,kBAAkB;YACrB,mBAAmB,EAAE;gBACnB,WAAW,EAAE,YAAY;gBACzB,IAAI,EAAE,eAAwB;gBAC9B,MAAM,EAAE,CAAC,eAAe;aACzB;SACF,CAAC;QACF,MAAM,qBAAqB,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACvD,0BAA0B,GAAG,sBAAsB,EAAE,CAAC,CAAC,kCAAkC;QACzF,kBAAkB,CAAC,0BAA0B,CAAC,CAAC;IACjD,CAAC,EACD,CAAC,eAAe,CAAC,CAClB,CAAC;IAEF,MAAM,8BAA8B,GAAG,WAAW,CAChD,KAAK,EAAE,QAAuB,EAAE,EAAE;QAChC,0BAA0B;YACxB,MAAM,qBAAqB,CAAC,8BAA8B,CAAC,QAAQ,CAAC,CAAC;QACvE,kBAAkB,CAAC,0BAA0B,CAAC,CAAC;IACjD,CAAC,EACD,EAAE,CACH,CAAC;IAEF,MAAM,oCAAoC,GAAG,WAAW,CACtD,KAAK,EAAE,QAAuB,EAAE,SAAyB,EAAE,EAAE;QAC3D,MAAM,qBAAqB,CAAC,oCAAoC,CAC9D,QAAQ,EACR,SAAS,CACV,CAAC;IACJ,CAAC,EACD,EAAE,CACH,CAAC;IAEF,MAAM,4BAA4B,GAAG,WAAW,CAC9C,KAAK,EAAE,SAAyB,EAAE,EAAE;QAClC,MAAM,qBAAqB,CAAC,4BAA4B,CAAC,SAAS,CAAC,CAAC;IACtE,CAAC,EACD,EAAE,CACH,CAAC;IAEF,MAAM,2BAA2B,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACzD,IAAI,QAAQ,CAAC,EAAE,IAAI,SAAS,EAAE,CAAC;YAC7B,OAAO,MAAM,qBAAqB,CAAC,2BAA2B,EAAE,CAAC;QACnE,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO;QACL,eAAe;QACf,eAAe;QAEf;;WAEG;QACH,iBAAiB;QACjB,2BAA2B;QAE3B;;WAEG;QACH,4BAA4B;QAC5B;;;;WAIG;QACH,8BAA8B;QAC9B;;;;;WAKG;QACH,oCAAoC;QACpC;;;;;;;WAOG;KACJ,CAAC;AACJ,CAAC","sourcesContent":["import { useCallback, useState } from 'react';\n\nimport {\n BandwidthLimit,\n SimulcastConfig,\n TrackBandwidthLimit,\n TrackEncoding,\n TrackMetadata,\n} from '../types';\nimport RNFishjamClientModule from '../RNFishjamClientModule';\nimport { Platform } from 'react-native';\nimport { ReceivableEvents, useFishjamEvent } from './useFishjamEvent';\n\nexport type ScreenShareQuality = 'VGA' | 'HD5' | 'HD15' | 'FHD15' | 'FHD30';\n\nexport type ScreenShareOptions = {\n /**\n * Resolution + fps of screen share track, one of: `VGA`, `HD5`, `HD15`, `FHD15`, `FHD30`.\n * Note that quality might be worse than specified due to device capabilities, internet\n * connection etc.\n * @default `HD15``\n */\n quality: ScreenShareQuality;\n /**\n * bandwidth limit of a screen share track. By default there is no bandwidth limit.\n */\n maxBandwidth: TrackBandwidthLimit;\n};\nexport type ScreenShareOptionsInternal = {\n screenShareMetadata: TrackMetadata & { displayName?: string };\n /**\n * SimulcastConfig of a screen share track. By default simulcast is disabled.\n */\n simulcastConfig: SimulcastConfig;\n};\n\nconst defaultSimulcastConfig = () => ({\n enabled: false,\n activeEncodings: [],\n});\n\nlet screenShareSimulcastConfig: SimulcastConfig = defaultSimulcastConfig();\n\n/**\n * This hook can toggle screen sharing on/off and provides current screen share state.\n * @returns An object with functions to manage screen share.\n * @category Screenshare\n * @group Hooks\n */\nexport function useScreenShare() {\n const [isScreenShareOn, setIsScreenShareOn] = useState(\n RNFishjamClientModule.isScreenShareOn,\n );\n\n const [simulcastConfig, setSimulcastConfig] = useState<SimulcastConfig>(\n screenShareSimulcastConfig,\n );\n\n useFishjamEvent(ReceivableEvents.IsScreenShareOn, setIsScreenShareOn);\n\n const toggleScreenShare = useCallback(\n async (screenShareOptions: Partial<ScreenShareOptions> = {}) => {\n const options = {\n ...screenShareOptions,\n screenShareMetadata: {\n displayName: 'presenting',\n type: 'screensharing' as const,\n active: !isScreenShareOn,\n },\n };\n await RNFishjamClientModule.toggleScreenShare(options);\n screenShareSimulcastConfig = defaultSimulcastConfig(); //to do: sync with camera settings\n setSimulcastConfig(screenShareSimulcastConfig);\n },\n [isScreenShareOn],\n );\n\n const toggleScreenShareTrackEncoding = useCallback(\n async (encoding: TrackEncoding) => {\n screenShareSimulcastConfig =\n await RNFishjamClientModule.toggleScreenShareTrackEncoding(encoding);\n setSimulcastConfig(screenShareSimulcastConfig);\n },\n [],\n );\n\n const setScreenShareTrackEncodingBandwidth = useCallback(\n async (encoding: TrackEncoding, bandwidth: BandwidthLimit) => {\n await RNFishjamClientModule.setScreenShareTrackEncodingBandwidth(\n encoding,\n bandwidth,\n );\n },\n [],\n );\n\n const setScreenShareTrackBandwidth = useCallback(\n async (bandwidth: BandwidthLimit) => {\n await RNFishjamClientModule.setScreenShareTrackBandwidth(bandwidth);\n },\n [],\n );\n\n const handleScreenSharePermission = useCallback(async () => {\n if (Platform.OS == 'android') {\n return await RNFishjamClientModule.handleScreenSharePermission();\n }\n return 'denied';\n }, []);\n\n return {\n isScreenShareOn,\n simulcastConfig,\n\n /**\n * Toggles the screen share on/off\n */\n toggleScreenShare,\n handleScreenSharePermission,\n\n /**\n * @deprecated\n */\n setScreenShareTrackBandwidth,\n /**\n * Toggles simulcast encoding of a screen share track on/off\n * @param encoding encoding to toggle\n * @deprecated\n */\n toggleScreenShareTrackEncoding,\n /**\n * updates maximum bandwidth for the given simulcast encoding of the screen share track\n * @param encoding encoding to update\n * @param bandwidth BandwidthLimit to set\n * @deprecated\n */\n setScreenShareTrackEncodingBandwidth,\n /**\n * updates maximum bandwidth for the screen share track. This value directly translates\n * to quality of the stream and the amount of RTP packets being sent. In case simulcast\n * is enabled bandwidth is split between all of the variant streams proportionally to\n * their resolution\n * @param bandwidth BandwidthLimit to set\n * @deprecated\n */\n };\n}\n"]}
package/build/index.d.ts CHANGED
@@ -1,19 +1,18 @@
1
- export type { Participant, Track, TrackType, VadStatus, EncodingReason, } from './hooks/useParticipants';
2
- export { useParticipants } from './hooks/useParticipants';
1
+ export type { Peer, Track, TrackType, VadStatus, EncodingReason, } from './hooks/usePeers';
2
+ export { usePeers } from './hooks/usePeers';
3
3
  export type { AudioOutputDevice, AudioOutputDeviceType, AudioSessionMode, } from './hooks/useAudioSettings';
4
4
  export { useAudioSettings } from './hooks/useAudioSettings';
5
5
  export { useBandwidthEstimation } from './hooks/useBandwidthEstimation';
6
6
  export type { CameraId, Camera, CameraConfig, VideoQuality, CameraFacingDirection, } from './hooks/useCamera';
7
7
  export { useCamera } from './hooks/useCamera';
8
8
  export { useMicrophone } from './hooks/useMicrophone';
9
- export { useRTCStatistics } from './stats/useRTCStatistics';
10
- export type { ScreencastOptions, ScreencastQuality, } from './hooks/useScreencast';
11
- export { useScreencast } from './hooks/useScreencast';
9
+ export type { ScreenShareOptions, ScreenShareQuality, } from './hooks/useScreenShare';
10
+ export { useScreenShare } from './hooks/useScreenShare';
12
11
  export type { ReconnectionStatus } from './hooks/useReconnection';
13
12
  export { useReconnection } from './hooks/useReconnection';
14
13
  export { updatePeerMetadata } from './common/metadata';
15
- export type { LoggingSeverity } from './common/webRTC';
16
- export { changeWebRTCLoggingSeverity, setTargetTrackEncoding, } from './common/webRTC';
14
+ export { setTargetTrackEncoding } from './common/webRTC';
15
+ export type { ConnectionConfig } from './common/client';
17
16
  export { joinRoom, leaveRoom } from './common/client';
18
17
  export type { VideoPreviewViewProps } from './components/VideoPreviewView';
19
18
  export { VideoPreviewView } from './components/VideoPreviewView';
@@ -21,5 +20,7 @@ export type { VideoRendererProps } from './components/VideoRendererView';
21
20
  export { VideoRendererView } from './components/VideoRendererView';
22
21
  export { AndroidForegroundServiceType } from './types';
23
22
  export { startForegroundService, stopForegroundService, } from './utils/foregroundService';
23
+ export type { PeerStatus } from './hooks/usePeerStatus';
24
+ export { usePeerStatus } from './hooks/usePeerStatus';
24
25
  export type { TrackBandwidthLimit, TrackEncoding, SimulcastBandwidthLimit, BandwidthLimit, SimulcastConfig, VideoLayout, } from './types';
25
26
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAEA,YAAY,EACV,WAAW,EACX,KAAK,EACL,SAAS,EACT,SAAS,EACT,cAAc,GACf,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,YAAY,EACV,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAExE,YAAY,EACV,QAAQ,EACR,MAAM,EACN,YAAY,EACZ,YAAY,EACZ,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,YAAY,EACV,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,YAAY,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EACL,2BAA2B,EAC3B,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEtD,YAAY,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEjE,YAAY,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,OAAO,EAAE,4BAA4B,EAAE,MAAM,SAAS,CAAC;AACvD,OAAO,EACL,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,2BAA2B,CAAC;AAEnC,YAAY,EACV,mBAAmB,EACnB,aAAa,EACb,uBAAuB,EACvB,cAAc,EACd,eAAe,EACf,WAAW,GACZ,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAEA,YAAY,EACV,IAAI,EACJ,KAAK,EACL,SAAS,EACT,SAAS,EACT,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,YAAY,EACV,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAExE,YAAY,EACV,QAAQ,EACR,MAAM,EACN,YAAY,EACZ,YAAY,EACZ,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,YAAY,EACV,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,YAAY,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEtD,YAAY,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEjE,YAAY,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,OAAO,EAAE,4BAA4B,EAAE,MAAM,SAAS,CAAC;AACvD,OAAO,EACL,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,2BAA2B,CAAC;AAEnC,YAAY,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,YAAY,EACV,mBAAmB,EACnB,aAAa,EACb,uBAAuB,EACvB,cAAc,EACd,eAAe,EACf,WAAW,GACZ,MAAM,SAAS,CAAC"}
package/build/index.js CHANGED
@@ -1,18 +1,18 @@
1
1
  import { initializeWarningListener } from './utils/errorListener';
2
- export { useParticipants } from './hooks/useParticipants';
2
+ export { usePeers } from './hooks/usePeers';
3
3
  export { useAudioSettings } from './hooks/useAudioSettings';
4
4
  export { useBandwidthEstimation } from './hooks/useBandwidthEstimation';
5
5
  export { useCamera } from './hooks/useCamera';
6
6
  export { useMicrophone } from './hooks/useMicrophone';
7
- export { useRTCStatistics } from './stats/useRTCStatistics';
8
- export { useScreencast } from './hooks/useScreencast';
7
+ export { useScreenShare } from './hooks/useScreenShare';
9
8
  export { useReconnection } from './hooks/useReconnection';
10
9
  export { updatePeerMetadata } from './common/metadata';
11
- export { changeWebRTCLoggingSeverity, setTargetTrackEncoding, } from './common/webRTC';
10
+ export { setTargetTrackEncoding } from './common/webRTC';
12
11
  export { joinRoom, leaveRoom } from './common/client';
13
12
  export { VideoPreviewView } from './components/VideoPreviewView';
14
13
  export { VideoRendererView } from './components/VideoRendererView';
15
14
  export { AndroidForegroundServiceType } from './types';
16
15
  export { startForegroundService, stopForegroundService, } from './utils/foregroundService';
16
+ export { usePeerStatus } from './hooks/usePeerStatus';
17
17
  initializeWarningListener();
18
18
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AASlE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAO1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AASxE,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAM5D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGtD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAGvD,OAAO,EACL,2BAA2B,EAC3B,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,OAAO,EAAE,4BAA4B,EAAE,MAAM,SAAS,CAAC;AACvD,OAAO,EACL,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,2BAA2B,CAAC;AAWnC,yBAAyB,EAAE,CAAC","sourcesContent":["import { initializeWarningListener } from './utils/errorListener';\n\nexport type {\n Participant,\n Track,\n TrackType,\n VadStatus,\n EncodingReason,\n} from './hooks/useParticipants';\nexport { useParticipants } from './hooks/useParticipants';\n\nexport type {\n AudioOutputDevice,\n AudioOutputDeviceType,\n AudioSessionMode,\n} from './hooks/useAudioSettings';\nexport { useAudioSettings } from './hooks/useAudioSettings';\n\nexport { useBandwidthEstimation } from './hooks/useBandwidthEstimation';\n\nexport type {\n CameraId,\n Camera,\n CameraConfig,\n VideoQuality,\n CameraFacingDirection,\n} from './hooks/useCamera';\nexport { useCamera } from './hooks/useCamera';\n\nexport { useMicrophone } from './hooks/useMicrophone';\n\nexport { useRTCStatistics } from './stats/useRTCStatistics';\n\nexport type {\n ScreencastOptions,\n ScreencastQuality,\n} from './hooks/useScreencast';\nexport { useScreencast } from './hooks/useScreencast';\n\nexport type { ReconnectionStatus } from './hooks/useReconnection';\nexport { useReconnection } from './hooks/useReconnection';\n\nexport { updatePeerMetadata } from './common/metadata';\n\nexport type { LoggingSeverity } from './common/webRTC';\nexport {\n changeWebRTCLoggingSeverity,\n setTargetTrackEncoding,\n} from './common/webRTC';\n\nexport { joinRoom, leaveRoom } from './common/client';\n\nexport type { VideoPreviewViewProps } from './components/VideoPreviewView';\nexport { VideoPreviewView } from './components/VideoPreviewView';\n\nexport type { VideoRendererProps } from './components/VideoRendererView';\nexport { VideoRendererView } from './components/VideoRendererView';\n\nexport { AndroidForegroundServiceType } from './types';\nexport {\n startForegroundService,\n stopForegroundService,\n} from './utils/foregroundService';\n\nexport type {\n TrackBandwidthLimit,\n TrackEncoding,\n SimulcastBandwidthLimit,\n BandwidthLimit,\n SimulcastConfig,\n VideoLayout,\n} from './types';\n\ninitializeWarningListener();\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AASlE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAO5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AASxE,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAMtD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAGzD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,OAAO,EAAE,4BAA4B,EAAE,MAAM,SAAS,CAAC;AACvD,OAAO,EACL,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAWtD,yBAAyB,EAAE,CAAC","sourcesContent":["import { initializeWarningListener } from './utils/errorListener';\n\nexport type {\n Peer,\n Track,\n TrackType,\n VadStatus,\n EncodingReason,\n} from './hooks/usePeers';\nexport { usePeers } from './hooks/usePeers';\n\nexport type {\n AudioOutputDevice,\n AudioOutputDeviceType,\n AudioSessionMode,\n} from './hooks/useAudioSettings';\nexport { useAudioSettings } from './hooks/useAudioSettings';\n\nexport { useBandwidthEstimation } from './hooks/useBandwidthEstimation';\n\nexport type {\n CameraId,\n Camera,\n CameraConfig,\n VideoQuality,\n CameraFacingDirection,\n} from './hooks/useCamera';\nexport { useCamera } from './hooks/useCamera';\n\nexport { useMicrophone } from './hooks/useMicrophone';\n\nexport type {\n ScreenShareOptions,\n ScreenShareQuality,\n} from './hooks/useScreenShare';\nexport { useScreenShare } from './hooks/useScreenShare';\n\nexport type { ReconnectionStatus } from './hooks/useReconnection';\nexport { useReconnection } from './hooks/useReconnection';\n\nexport { updatePeerMetadata } from './common/metadata';\n\nexport { setTargetTrackEncoding } from './common/webRTC';\n\nexport type { ConnectionConfig } from './common/client';\nexport { joinRoom, leaveRoom } from './common/client';\n\nexport type { VideoPreviewViewProps } from './components/VideoPreviewView';\nexport { VideoPreviewView } from './components/VideoPreviewView';\n\nexport type { VideoRendererProps } from './components/VideoRendererView';\nexport { VideoRendererView } from './components/VideoRendererView';\n\nexport { AndroidForegroundServiceType } from './types';\nexport {\n startForegroundService,\n stopForegroundService,\n} from './utils/foregroundService';\n\nexport type { PeerStatus } from './hooks/usePeerStatus';\nexport { usePeerStatus } from './hooks/usePeerStatus';\n\nexport type {\n TrackBandwidthLimit,\n TrackEncoding,\n SimulcastBandwidthLimit,\n BandwidthLimit,\n SimulcastConfig,\n VideoLayout,\n} from './types';\n\ninitializeWarningListener();\n"]}
@@ -0,0 +1,4 @@
1
+ {
2
+ "main": "../build/debug/index.js",
3
+ "types": "../build/debug/index.d.ts"
4
+ }
package/ios/Events.swift CHANGED
@@ -1,14 +1,30 @@
1
- struct EmitableEvents {
2
- static let IsCameraOn = "IsCameraOn"
3
- static let IsMicrophoneOn = "IsMicrophoneOn"
4
- static let IsScreencastOn = "IsScreencastOn"
5
- static let SimulcastConfigUpdate = "SimulcastConfigUpdate"
6
- static let PeersUpdate = "PeersUpdate"
7
- static let AudioDeviceUpdate = "AudioDeviceUpdate"
8
- static let SendMediaEvent = "SendMediaEvent"
9
- static let BandwidthEstimation = "BandwidthEstimation"
10
- static let ReconnectionRetriesLimitReached = "ReconnectionRetriesLimitReached"
11
- static let ReconnectionStarted = "ReconnectionStarted"
12
- static let Reconnected = "Reconnected"
13
- static let Warning = "Warning"
1
+ enum PeerStatus: String {
2
+ case connecting
3
+ case connected
4
+ case error
5
+ case idle
6
+ }
7
+
8
+ enum EmitableEvents: String, CaseIterable {
9
+ case IsCameraOn
10
+ case IsMicrophoneOn
11
+ case IsScreenShareOn
12
+ case SimulcastConfigUpdate
13
+ case PeersUpdate
14
+ case AudioDeviceUpdate
15
+ case SendMediaEvent
16
+ case BandwidthEstimation
17
+ case ReconnectionRetriesLimitReached
18
+ case ReconnectionStarted
19
+ case Reconnected
20
+ case Warning
21
+ case PeerStatusChanged
22
+
23
+ var name: String {
24
+ rawValue
25
+ }
26
+
27
+ static var allEvents: [String] {
28
+ EmitableEvents.allCases.map(\.name)
29
+ }
14
30
  }
@@ -25,6 +25,6 @@ Pod::Spec.new do |s|
25
25
 
26
26
  s.source_files = '**/*.{h,m,swift}'
27
27
 
28
- s.dependency 'FishjamCloudClient', '0.2.3'
28
+ s.dependency 'FishjamCloudClient', '0.3.0'
29
29
 
30
30
  end