@fishjam-cloud/react-native-client 0.24.0 → 0.25.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +56 -15
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/overrides/RTCPeerConnection.d.ts +8 -0
- package/dist/overrides/RTCPeerConnection.d.ts.map +1 -0
- package/dist/overrides/RTCPeerConnection.js +16 -0
- package/dist/overrides/RTCView.d.ts +11 -0
- package/dist/overrides/RTCView.d.ts.map +1 -0
- package/dist/overrides/RTCView.js +21 -0
- package/dist/polyfills/local-storage.d.ts +10 -0
- package/dist/polyfills/local-storage.d.ts.map +1 -0
- package/dist/polyfills/local-storage.js +24 -0
- package/{build/hooks → dist}/useForegroundService.d.ts +10 -10
- package/dist/useForegroundService.d.ts.map +1 -0
- package/dist/useForegroundService.js +10 -0
- package/dist/webrtc-polyfill.d.ts +2 -0
- package/dist/webrtc-polyfill.d.ts.map +1 -0
- package/dist/webrtc-polyfill.js +14 -0
- package/package.json +45 -92
- package/plugin/broadcastExtensionFiles/Atomic.swift +37 -0
- package/plugin/broadcastExtensionFiles/DarwinNotificationCenter.swift +29 -0
- package/plugin/broadcastExtensionFiles/Info.plist +1 -1
- package/plugin/broadcastExtensionFiles/SampleHandler.swift +104 -0
- package/plugin/broadcastExtensionFiles/SampleUploader.swift +146 -0
- package/plugin/broadcastExtensionFiles/SocketConnection.swift +198 -0
- package/plugin/build/types.d.ts +5 -4
- package/plugin/build/withFishjam.d.ts +31 -2
- package/plugin/build/withFishjam.js +31 -5
- package/plugin/build/withFishjamAndroid.d.ts +2 -2
- package/plugin/build/withFishjamAndroid.js +48 -40
- package/plugin/build/withFishjamIos.d.ts +3 -8
- package/plugin/build/withFishjamIos.js +52 -72
- package/LICENSE.txt +0 -201
- package/android/build.gradle +0 -95
- package/android/src/main/AndroidManifest.xml +0 -2
- package/android/src/main/java/io/fishjam/reactnative/AudioDeviceKind.kt +0 -34
- package/android/src/main/java/io/fishjam/reactnative/AudioSwitchManager.kt +0 -61
- package/android/src/main/java/io/fishjam/reactnative/EmitableEvents.kt +0 -126
- package/android/src/main/java/io/fishjam/reactnative/Errors.kt +0 -31
- package/android/src/main/java/io/fishjam/reactnative/PipContainerView.kt +0 -282
- package/android/src/main/java/io/fishjam/reactnative/PipContainerViewModule.kt +0 -41
- package/android/src/main/java/io/fishjam/reactnative/PipTrackSelector.kt +0 -98
- package/android/src/main/java/io/fishjam/reactnative/PipViewFactory.kt +0 -186
- package/android/src/main/java/io/fishjam/reactnative/RNFishjamClient.kt +0 -1001
- package/android/src/main/java/io/fishjam/reactnative/RNFishjamClientModule.kt +0 -358
- package/android/src/main/java/io/fishjam/reactnative/Utils.kt +0 -11
- package/android/src/main/java/io/fishjam/reactnative/VideoPreviewView.kt +0 -40
- package/android/src/main/java/io/fishjam/reactnative/VideoPreviewViewModule.kt +0 -22
- package/android/src/main/java/io/fishjam/reactnative/VideoRendererView.kt +0 -76
- package/android/src/main/java/io/fishjam/reactnative/VideoRendererViewModule.kt +0 -33
- package/android/src/main/java/io/fishjam/reactnative/VideoView.kt +0 -257
- package/android/src/main/java/io/fishjam/reactnative/extensions/CaptureDevice.kt +0 -17
- package/android/src/main/java/io/fishjam/reactnative/foregroundService/FishjamForegroundService.kt +0 -101
- package/android/src/main/java/io/fishjam/reactnative/foregroundService/ForegroundServiceManager.kt +0 -118
- package/android/src/main/java/io/fishjam/reactnative/foregroundService/ForegroundServiceState.kt +0 -46
- package/android/src/main/java/io/fishjam/reactnative/helpers/PictureInPictureHelperFragment.kt +0 -20
- package/android/src/main/java/io/fishjam/reactnative/managers/ListenerManager.kt +0 -24
- package/android/src/main/java/io/fishjam/reactnative/managers/LocalCameraTracksChangedListenersManager.kt +0 -8
- package/android/src/main/java/io/fishjam/reactnative/managers/LocalTracksSwitchListenersManager.kt +0 -17
- package/android/src/main/java/io/fishjam/reactnative/managers/TracksUpdateListenersManager.kt +0 -7
- package/android/src/main/java/io/fishjam/reactnative/utils/PermissionUtils.kt +0 -45
- package/build/RNFishjamClientModule.d.ts +0 -106
- package/build/RNFishjamClientModule.d.ts.map +0 -1
- package/build/RNFishjamClientModule.js +0 -21
- package/build/RNFishjamClientModule.js.map +0 -1
- package/build/common/metadata.d.ts +0 -9
- package/build/common/metadata.d.ts.map +0 -1
- package/build/common/metadata.js +0 -11
- package/build/common/metadata.js.map +0 -1
- package/build/components/FishjamRoom/GridTrackItem.d.ts +0 -12
- package/build/components/FishjamRoom/GridTrackItem.d.ts.map +0 -1
- package/build/components/FishjamRoom/GridTrackItem.js +0 -56
- package/build/components/FishjamRoom/GridTrackItem.js.map +0 -1
- package/build/components/FishjamRoom/VideosGrid.d.ts +0 -3
- package/build/components/FishjamRoom/VideosGrid.d.ts.map +0 -1
- package/build/components/FishjamRoom/VideosGrid.js +0 -20
- package/build/components/FishjamRoom/VideosGrid.js.map +0 -1
- package/build/components/FishjamRoom/index.d.ts +0 -33
- package/build/components/FishjamRoom/index.d.ts.map +0 -1
- package/build/components/FishjamRoom/index.js +0 -52
- package/build/components/FishjamRoom/index.js.map +0 -1
- package/build/components/FishjamRoom/parsePeersToTracks.d.ts +0 -4
- package/build/components/FishjamRoom/parsePeersToTracks.d.ts.map +0 -1
- package/build/components/FishjamRoom/parsePeersToTracks.js +0 -37
- package/build/components/FishjamRoom/parsePeersToTracks.js.map +0 -1
- package/build/components/PipContainerView.d.ts +0 -48
- package/build/components/PipContainerView.d.ts.map +0 -1
- package/build/components/PipContainerView.js +0 -34
- package/build/components/PipContainerView.js.map +0 -1
- package/build/components/VideoPreviewView.d.ts +0 -28
- package/build/components/VideoPreviewView.d.ts.map +0 -1
- package/build/components/VideoPreviewView.js +0 -17
- package/build/components/VideoPreviewView.js.map +0 -1
- package/build/components/VideoRendererView.d.ts +0 -39
- package/build/components/VideoRendererView.d.ts.map +0 -1
- package/build/components/VideoRendererView.js +0 -25
- package/build/components/VideoRendererView.js.map +0 -1
- package/build/consts/index.d.ts +0 -5
- package/build/consts/index.d.ts.map +0 -1
- package/build/consts/index.js +0 -8
- package/build/consts/index.js.map +0 -1
- package/build/debug/common/webRTC.d.ts +0 -9
- package/build/debug/common/webRTC.d.ts.map +0 -1
- package/build/debug/common/webRTC.js +0 -11
- package/build/debug/common/webRTC.js.map +0 -1
- package/build/debug/index.d.ts +0 -4
- package/build/debug/index.d.ts.map +0 -1
- package/build/debug/index.js +0 -3
- package/build/debug/index.js.map +0 -1
- package/build/debug/stats/types.d.ts +0 -55
- package/build/debug/stats/types.d.ts.map +0 -1
- package/build/debug/stats/types.js +0 -2
- package/build/debug/stats/types.js.map +0 -1
- package/build/debug/stats/useRTCStatistics.d.ts +0 -9
- package/build/debug/stats/useRTCStatistics.d.ts.map +0 -1
- package/build/debug/stats/useRTCStatistics.js +0 -79
- package/build/debug/stats/useRTCStatistics.js.map +0 -1
- package/build/hooks/internal/useFishjamEvent.d.ts +0 -4
- package/build/hooks/internal/useFishjamEvent.d.ts.map +0 -1
- package/build/hooks/internal/useFishjamEvent.js +0 -38
- package/build/hooks/internal/useFishjamEvent.js.map +0 -1
- package/build/hooks/internal/useFishjamEventState.d.ts +0 -3
- package/build/hooks/internal/useFishjamEventState.d.ts.map +0 -1
- package/build/hooks/internal/useFishjamEventState.js +0 -18
- package/build/hooks/internal/useFishjamEventState.js.map +0 -1
- package/build/hooks/useAppScreenShare.d.ts +0 -18
- package/build/hooks/useAppScreenShare.d.ts.map +0 -1
- package/build/hooks/useAppScreenShare.js +0 -46
- package/build/hooks/useAppScreenShare.js.map +0 -1
- package/build/hooks/useAudioSettings.d.ts +0 -49
- package/build/hooks/useAudioSettings.d.ts.map +0 -1
- package/build/hooks/useAudioSettings.js +0 -70
- package/build/hooks/useAudioSettings.js.map +0 -1
- package/build/hooks/useBandwidthEstimation.d.ts +0 -14
- package/build/hooks/useBandwidthEstimation.d.ts.map +0 -1
- package/build/hooks/useBandwidthEstimation.js +0 -19
- package/build/hooks/useBandwidthEstimation.js.map +0 -1
- package/build/hooks/useCallKit.d.ts +0 -121
- package/build/hooks/useCallKit.d.ts.map +0 -1
- package/build/hooks/useCallKit.js +0 -142
- package/build/hooks/useCallKit.js.map +0 -1
- package/build/hooks/useCamera.d.ts +0 -113
- package/build/hooks/useCamera.d.ts.map +0 -1
- package/build/hooks/useCamera.js +0 -93
- package/build/hooks/useCamera.js.map +0 -1
- package/build/hooks/useConnection.d.ts +0 -73
- package/build/hooks/useConnection.d.ts.map +0 -1
- package/build/hooks/useConnection.js +0 -46
- package/build/hooks/useConnection.js.map +0 -1
- package/build/hooks/useForegroundService.d.ts.map +0 -1
- package/build/hooks/useForegroundService.js +0 -66
- package/build/hooks/useForegroundService.js.map +0 -1
- package/build/hooks/useMicrophone.d.ts +0 -16
- package/build/hooks/useMicrophone.d.ts.map +0 -1
- package/build/hooks/useMicrophone.js +0 -31
- package/build/hooks/useMicrophone.js.map +0 -1
- package/build/hooks/usePeerStatus.d.ts +0 -10
- package/build/hooks/usePeerStatus.d.ts.map +0 -1
- package/build/hooks/usePeerStatus.js +0 -13
- package/build/hooks/usePeerStatus.js.map +0 -1
- package/build/hooks/usePeers.d.ts +0 -98
- package/build/hooks/usePeers.d.ts.map +0 -1
- package/build/hooks/usePeers.js +0 -81
- package/build/hooks/usePeers.js.map +0 -1
- package/build/hooks/usePermissions.d.ts +0 -24
- package/build/hooks/usePermissions.d.ts.map +0 -1
- package/build/hooks/usePermissions.js +0 -61
- package/build/hooks/usePermissions.js.map +0 -1
- package/build/hooks/useReconnection.d.ts +0 -11
- package/build/hooks/useReconnection.d.ts.map +0 -1
- package/build/hooks/useReconnection.js +0 -14
- package/build/hooks/useReconnection.js.map +0 -1
- package/build/hooks/useSandbox.d.ts +0 -20
- package/build/hooks/useSandbox.d.ts.map +0 -1
- package/build/hooks/useSandbox.js +0 -54
- package/build/hooks/useSandbox.js.map +0 -1
- package/build/hooks/useScreenShare.d.ts +0 -36
- package/build/hooks/useScreenShare.d.ts.map +0 -1
- package/build/hooks/useScreenShare.js +0 -45
- package/build/hooks/useScreenShare.js.map +0 -1
- package/build/hooks/useUpdatePeerMetadata.d.ts +0 -15
- package/build/hooks/useUpdatePeerMetadata.d.ts.map +0 -1
- package/build/hooks/useUpdatePeerMetadata.js +0 -21
- package/build/hooks/useUpdatePeerMetadata.js.map +0 -1
- package/build/index.d.ts +0 -36
- package/build/index.d.ts.map +0 -1
- package/build/index.js +0 -30
- package/build/index.js.map +0 -1
- package/build/livestream/components/LivestreamStreamer.d.ts +0 -24
- package/build/livestream/components/LivestreamStreamer.d.ts.map +0 -1
- package/build/livestream/components/LivestreamStreamer.js +0 -12
- package/build/livestream/components/LivestreamStreamer.js.map +0 -1
- package/build/livestream/components/LivestreamViewer.d.ts +0 -46
- package/build/livestream/components/LivestreamViewer.d.ts.map +0 -1
- package/build/livestream/components/LivestreamViewer.js +0 -10
- package/build/livestream/components/LivestreamViewer.js.map +0 -1
- package/build/livestream/hooks/useLivestreamScreenSharingStreamer.d.ts +0 -49
- package/build/livestream/hooks/useLivestreamScreenSharingStreamer.d.ts.map +0 -1
- package/build/livestream/hooks/useLivestreamScreenSharingStreamer.js +0 -58
- package/build/livestream/hooks/useLivestreamScreenSharingStreamer.js.map +0 -1
- package/build/livestream/hooks/useLivestreamStreamer.d.ts +0 -65
- package/build/livestream/hooks/useLivestreamStreamer.d.ts.map +0 -1
- package/build/livestream/hooks/useLivestreamStreamer.js +0 -71
- package/build/livestream/hooks/useLivestreamStreamer.js.map +0 -1
- package/build/livestream/hooks/useLivestreamViewer.d.ts +0 -36
- package/build/livestream/hooks/useLivestreamViewer.d.ts.map +0 -1
- package/build/livestream/hooks/useLivestreamViewer.js +0 -73
- package/build/livestream/hooks/useLivestreamViewer.js.map +0 -1
- package/build/livestream/index.d.ts +0 -12
- package/build/livestream/index.d.ts.map +0 -1
- package/build/livestream/index.js +0 -7
- package/build/livestream/index.js.map +0 -1
- package/build/protos/fishjam/peer_notifications.d.ts +0 -63
- package/build/protos/fishjam/peer_notifications.d.ts.map +0 -1
- package/build/protos/fishjam/peer_notifications.js +0 -235
- package/build/protos/fishjam/peer_notifications.js.map +0 -1
- package/build/types.d.ts +0 -34
- package/build/types.d.ts.map +0 -1
- package/build/types.js +0 -2
- package/build/types.js.map +0 -1
- package/build/utils/config.d.ts +0 -6
- package/build/utils/config.d.ts.map +0 -1
- package/build/utils/config.js +0 -10
- package/build/utils/config.js.map +0 -1
- package/build/utils/errorListener.d.ts +0 -2
- package/build/utils/errorListener.d.ts.map +0 -1
- package/build/utils/errorListener.js +0 -15
- package/build/utils/errorListener.js.map +0 -1
- package/build/utils/eventPayloadValidator.d.ts +0 -3
- package/build/utils/eventPayloadValidator.d.ts.map +0 -1
- package/build/utils/eventPayloadValidator.js +0 -86
- package/build/utils/eventPayloadValidator.js.map +0 -1
- package/build/utils/getFishjamUrl.d.ts +0 -2
- package/build/utils/getFishjamUrl.d.ts.map +0 -1
- package/build/utils/getFishjamUrl.js +0 -10
- package/build/utils/getFishjamUrl.js.map +0 -1
- package/debug/package.json +0 -4
- package/expo-module.config.json +0 -19
- package/ios/CameraPermissionsRequester.swift +0 -117
- package/ios/Events.swift +0 -152
- package/ios/PictureInPictureManager.swift +0 -215
- package/ios/PipContainerView.swift +0 -56
- package/ios/PipContainerViewModule.swift +0 -48
- package/ios/RNFishjamClient.podspec +0 -30
- package/ios/RNFishjamClient.swift +0 -995
- package/ios/RNFishjamClientModule.swift +0 -289
- package/ios/RNFishjamProxy.swift +0 -12
- package/ios/Utils/PermissionUtils.swift +0 -16
- package/ios/Utils.swift +0 -23
- package/ios/VideoPreviewView.swift +0 -54
- package/ios/VideoPreviewViewModule.swift +0 -21
- package/ios/VideoRendererView.swift +0 -98
- package/ios/VideoRendererViewModule.swift +0 -23
- package/ios/extensions/AVCaptureDevice.swift +0 -20
- package/ios/managers/LocalCameraTracksChangedListenersManager.swift +0 -23
- package/ios/managers/TracksUpdateListenersManager.swift +0 -21
- package/livestream/package.json +0 -4
- package/plugin/broadcastExtensionFiles/FishjamBroadcastSampleHandler.swift +0 -50
- /package/plugin/broadcastExtensionFiles/{FishjamScreenBroadcastExtension.entitlements → ScreenBroadcastExtension.entitlements} +0 -0
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import { GenericMetadata } from '../types';
|
|
2
|
-
/**
|
|
3
|
-
* Represents the possible statuses of a peer while reconnecting to room
|
|
4
|
-
*
|
|
5
|
-
* - `idle` - No reconnection in progress. See {@link PeerStatus} for more details
|
|
6
|
-
* - `reconnecting` - Peer is in the process of reconnecting.
|
|
7
|
-
* - `error` - There was an error in the reconnection process.
|
|
8
|
-
*/
|
|
9
|
-
export type ReconnectionStatus = 'idle' | 'reconnecting' | 'error';
|
|
10
|
-
/**
|
|
11
|
-
* Represents the possible statuses of a peer connection to a room (websocket state).
|
|
12
|
-
*
|
|
13
|
-
* - `idle` - Peer is not connected, either never connected or successfully disconnected.
|
|
14
|
-
* - `connecting` - Peer is in the process of connecting.
|
|
15
|
-
* - `connected` - Peer has successfully connected.
|
|
16
|
-
* - `error` - There was an error in the connection process.
|
|
17
|
-
*/
|
|
18
|
-
export type PeerStatus = 'connecting' | 'connected' | 'error' | 'idle';
|
|
19
|
-
export type JoinRoomConfig<PeerMetadata extends GenericMetadata = GenericMetadata> = {
|
|
20
|
-
/**
|
|
21
|
-
* Fishjam ID, which is used to connect to the room.
|
|
22
|
-
* You can get it at https://fishjam.io/app
|
|
23
|
-
*/
|
|
24
|
-
fishjamId: string;
|
|
25
|
-
/**
|
|
26
|
-
* Token received from server (or Room Manager)
|
|
27
|
-
*/
|
|
28
|
-
peerToken: string;
|
|
29
|
-
/**
|
|
30
|
-
* String indexed record with metadata, that will be available to all other peers
|
|
31
|
-
*/
|
|
32
|
-
peerMetadata?: PeerMetadata;
|
|
33
|
-
/**
|
|
34
|
-
* Additional connection configuration
|
|
35
|
-
*/
|
|
36
|
-
config?: ConnectionConfig;
|
|
37
|
-
};
|
|
38
|
-
export type ConnectionConfig = {
|
|
39
|
-
/**
|
|
40
|
-
* Configuration for automatic reconnection
|
|
41
|
-
* sdk uses a linear backoff algorithm, that is the formula
|
|
42
|
-
* for the delay of the nth attempt is
|
|
43
|
-
* n * delayMs + initialDelayMs
|
|
44
|
-
*
|
|
45
|
-
* Pass 0 for maxAttempts to disable automatic reconnection
|
|
46
|
-
*/
|
|
47
|
-
reconnectConfig?: {
|
|
48
|
-
maxAttempts?: number;
|
|
49
|
-
initialDelayMs?: number;
|
|
50
|
-
delayMs?: number;
|
|
51
|
-
};
|
|
52
|
-
};
|
|
53
|
-
/**
|
|
54
|
-
* Connect/leave room. And get connection status.
|
|
55
|
-
* @group Hooks
|
|
56
|
-
* @category Connection
|
|
57
|
-
*/
|
|
58
|
-
export declare function useConnection(): {
|
|
59
|
-
/**
|
|
60
|
-
* Join room and start streaming camera and microphone
|
|
61
|
-
*
|
|
62
|
-
* See {@link JoinRoomConfig} for parameter list
|
|
63
|
-
*/
|
|
64
|
-
joinRoom: <PeerMetadata extends GenericMetadata = GenericMetadata>({ peerToken, peerMetadata, config, fishjamId, }: JoinRoomConfig<PeerMetadata>) => Promise<void>;
|
|
65
|
-
/**
|
|
66
|
-
* Leave room and stop streaming
|
|
67
|
-
* @type function
|
|
68
|
-
*/
|
|
69
|
-
leaveRoom: () => void;
|
|
70
|
-
peerStatus: PeerStatus;
|
|
71
|
-
reconnectionStatus: ReconnectionStatus;
|
|
72
|
-
};
|
|
73
|
-
//# sourceMappingURL=useConnection.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useConnection.d.ts","sourceRoot":"","sources":["../../src/hooks/useConnection.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAG3C;;;;;;GAMG;AACH,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,cAAc,GAAG,OAAO,CAAC;AAEnE;;;;;;;GAOG;AACH,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG,WAAW,GAAG,OAAO,GAAG,MAAM,CAAC;AAevE,MAAM,MAAM,cAAc,CACxB,YAAY,SAAS,eAAe,GAAG,eAAe,IACpD;IACF;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B;;OAEG;IACH,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH,CAAC;AAsBF;;;;GAIG;AACH,wBAAgB,aAAa;IAsBzB;;;;OAIG;eAtBI,YAAY,SAAS,eAAe,qEAKxC,cAAc,CAAC,YAAY,CAAC;IAmB/B;;;OAGG;;;;EAKN"}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { useCallback } from 'react';
|
|
2
|
-
import RNFishjamClientModule, { ReceivableEvents, } from '../RNFishjamClientModule';
|
|
3
|
-
import { useFishjamEventState } from './internal/useFishjamEventState';
|
|
4
|
-
import { getFishjamUrl } from '../utils/getFishjamUrl';
|
|
5
|
-
function useConnectionStatus() {
|
|
6
|
-
const peerStatus = useFishjamEventState(ReceivableEvents.PeerStatusChanged, RNFishjamClientModule.peerStatus);
|
|
7
|
-
const reconnectionStatus = useFishjamEventState(ReceivableEvents.ReconnectionStatusChanged, RNFishjamClientModule.reconnectionStatus);
|
|
8
|
-
return { peerStatus, reconnectionStatus };
|
|
9
|
-
}
|
|
10
|
-
async function joinRoomClient(url, peerToken, peerMetadata, config) {
|
|
11
|
-
await RNFishjamClientModule.joinRoom(url, peerToken, peerMetadata ?? {}, config ?? {});
|
|
12
|
-
}
|
|
13
|
-
async function leaveRoomClient() {
|
|
14
|
-
await RNFishjamClientModule.leaveRoom();
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Connect/leave room. And get connection status.
|
|
18
|
-
* @group Hooks
|
|
19
|
-
* @category Connection
|
|
20
|
-
*/
|
|
21
|
-
export function useConnection() {
|
|
22
|
-
const { peerStatus, reconnectionStatus } = useConnectionStatus();
|
|
23
|
-
const joinRoom = useCallback(async ({ peerToken, peerMetadata, config, fishjamId, }) => {
|
|
24
|
-
const connectUrl = getFishjamUrl(fishjamId);
|
|
25
|
-
await joinRoomClient(connectUrl, peerToken, peerMetadata, config);
|
|
26
|
-
}, []);
|
|
27
|
-
const leaveRoom = useCallback(() => {
|
|
28
|
-
leaveRoomClient();
|
|
29
|
-
}, []);
|
|
30
|
-
return {
|
|
31
|
-
/**
|
|
32
|
-
* Join room and start streaming camera and microphone
|
|
33
|
-
*
|
|
34
|
-
* See {@link JoinRoomConfig} for parameter list
|
|
35
|
-
*/
|
|
36
|
-
joinRoom,
|
|
37
|
-
/**
|
|
38
|
-
* Leave room and stop streaming
|
|
39
|
-
* @type function
|
|
40
|
-
*/
|
|
41
|
-
leaveRoom,
|
|
42
|
-
peerStatus,
|
|
43
|
-
reconnectionStatus,
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
//# sourceMappingURL=useConnection.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useConnection.js","sourceRoot":"","sources":["../../src/hooks/useConnection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,qBAAqB,EAAE,EAC5B,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAEvE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAqBvD,SAAS,mBAAmB;IAC1B,MAAM,UAAU,GAAG,oBAAoB,CACrC,gBAAgB,CAAC,iBAAiB,EAClC,qBAAqB,CAAC,UAAU,CACjC,CAAC;IAEF,MAAM,kBAAkB,GAAG,oBAAoB,CAC7C,gBAAgB,CAAC,yBAAyB,EAC1C,qBAAqB,CAAC,kBAAkB,CACzC,CAAC;IAEF,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,CAAC;AAC5C,CAAC;AAuCD,KAAK,UAAU,cAAc,CAG3B,GAAW,EACX,SAAiB,EACjB,YAA2B,EAC3B,MAAyB;IAEzB,MAAM,qBAAqB,CAAC,QAAQ,CAClC,GAAG,EACH,SAAS,EACT,YAAY,IAAI,EAAE,EAClB,MAAM,IAAI,EAAE,CACb,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,eAAe;IAC5B,MAAM,qBAAqB,CAAC,SAAS,EAAE,CAAC;AAC1C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,EAAE,UAAU,EAAE,kBAAkB,EAAE,GAAG,mBAAmB,EAAE,CAAC;IAEjE,MAAM,QAAQ,GAAG,WAAW,CAC1B,KAAK,EAA0D,EAC7D,SAAS,EACT,YAAY,EACZ,MAAM,EACN,SAAS,GACoB,EAAE,EAAE;QACjC,MAAM,UAAU,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;QAE5C,MAAM,cAAc,CAAC,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;IACpE,CAAC,EACD,EAAE,CACH,CAAC;IAEF,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE;QACjC,eAAe,EAAE,CAAC;IACpB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO;QACL;;;;WAIG;QACH,QAAQ;QACR;;;WAGG;QACH,SAAS;QACT,UAAU;QACV,kBAAkB;KACnB,CAAC;AACJ,CAAC","sourcesContent":["import { useCallback } from 'react';\nimport RNFishjamClientModule, {\n ReceivableEvents,\n} from '../RNFishjamClientModule';\nimport { useFishjamEventState } from './internal/useFishjamEventState';\nimport { GenericMetadata } from '../types';\nimport { getFishjamUrl } from '../utils/getFishjamUrl';\n\n/**\n * Represents the possible statuses of a peer while reconnecting to room\n *\n * - `idle` - No reconnection in progress. See {@link PeerStatus} for more details\n * - `reconnecting` - Peer is in the process of reconnecting.\n * - `error` - There was an error in the reconnection process.\n */\nexport type ReconnectionStatus = 'idle' | 'reconnecting' | 'error';\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\nfunction useConnectionStatus() {\n const peerStatus = useFishjamEventState(\n ReceivableEvents.PeerStatusChanged,\n RNFishjamClientModule.peerStatus,\n );\n\n const reconnectionStatus = useFishjamEventState(\n ReceivableEvents.ReconnectionStatusChanged,\n RNFishjamClientModule.reconnectionStatus,\n );\n\n return { peerStatus, reconnectionStatus };\n}\nexport type JoinRoomConfig<\n PeerMetadata extends GenericMetadata = GenericMetadata,\n> = {\n /**\n * Fishjam ID, which is used to connect to the room.\n * You can get it at https://fishjam.io/app\n */\n fishjamId: string;\n /**\n * Token received from server (or Room Manager)\n */\n peerToken: string;\n /**\n * String indexed record with metadata, that will be available to all other peers\n */\n peerMetadata?: PeerMetadata;\n /**\n * Additional connection configuration\n */\n config?: ConnectionConfig;\n};\n\nexport type ConnectionConfig = {\n /**\n * Configuration for automatic reconnection\n * sdk uses a linear backoff algorithm, that is the formula\n * for the delay of the nth attempt is\n * n * delayMs + initialDelayMs\n *\n * Pass 0 for maxAttempts to disable automatic reconnection\n */\n reconnectConfig?: {\n maxAttempts?: number;\n initialDelayMs?: number;\n delayMs?: number;\n };\n};\n\nasync function joinRoomClient<\n PeerMetadata extends GenericMetadata = GenericMetadata,\n>(\n url: string,\n peerToken: string,\n peerMetadata?: PeerMetadata,\n config?: ConnectionConfig,\n) {\n await RNFishjamClientModule.joinRoom(\n url,\n peerToken,\n peerMetadata ?? {},\n config ?? {},\n );\n}\n\nasync function leaveRoomClient() {\n await RNFishjamClientModule.leaveRoom();\n}\n\n/**\n * Connect/leave room. And get connection status.\n * @group Hooks\n * @category Connection\n */\nexport function useConnection() {\n const { peerStatus, reconnectionStatus } = useConnectionStatus();\n\n const joinRoom = useCallback(\n async <PeerMetadata extends GenericMetadata = GenericMetadata>({\n peerToken,\n peerMetadata,\n config,\n fishjamId,\n }: JoinRoomConfig<PeerMetadata>) => {\n const connectUrl = getFishjamUrl(fishjamId);\n\n await joinRoomClient(connectUrl, peerToken, peerMetadata, config);\n },\n [],\n );\n\n const leaveRoom = useCallback(() => {\n leaveRoomClient();\n }, []);\n\n return {\n /**\n * Join room and start streaming camera and microphone\n *\n * See {@link JoinRoomConfig} for parameter list\n */\n joinRoom,\n /**\n * Leave room and stop streaming\n * @type function\n */\n leaveRoom,\n peerStatus,\n reconnectionStatus,\n };\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useForegroundService.d.ts","sourceRoot":"","sources":["../../src/hooks/useForegroundService.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG;IACpC;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AA6DF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,oBAAoB,wGAnD9B,uBAAuB,SAsDxB,CAAC"}
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { useEffect, useState } from 'react';
|
|
2
|
-
import RNFishjamClientModule from '../RNFishjamClientModule';
|
|
3
|
-
import { PermissionsAndroid, Platform } from 'react-native';
|
|
4
|
-
const requestNotificationsPermission = async () => {
|
|
5
|
-
try {
|
|
6
|
-
const result = await PermissionsAndroid.request(PermissionsAndroid.PERMISSIONS.POST_NOTIFICATIONS);
|
|
7
|
-
if (result !== PermissionsAndroid.RESULTS.GRANTED) {
|
|
8
|
-
console.warn("Notifications permission not granted. User won't be able to see a the app is in background.");
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
catch (err) {
|
|
12
|
-
console.warn(err);
|
|
13
|
-
}
|
|
14
|
-
};
|
|
15
|
-
const useForegroundServiceAndroid = ({ enableCamera, enableMicrophone, channelId, channelName, notificationContent, notificationTitle, }) => {
|
|
16
|
-
const [isConfigured, setIsConfigured] = useState(false);
|
|
17
|
-
useEffect(() => {
|
|
18
|
-
if (!isConfigured) {
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
RNFishjamClientModule.startForegroundService({
|
|
22
|
-
enableCamera,
|
|
23
|
-
enableMicrophone,
|
|
24
|
-
channelId,
|
|
25
|
-
channelName,
|
|
26
|
-
notificationContent,
|
|
27
|
-
notificationTitle,
|
|
28
|
-
});
|
|
29
|
-
}, [
|
|
30
|
-
channelId,
|
|
31
|
-
channelName,
|
|
32
|
-
enableCamera,
|
|
33
|
-
enableMicrophone,
|
|
34
|
-
isConfigured,
|
|
35
|
-
notificationContent,
|
|
36
|
-
notificationTitle,
|
|
37
|
-
]);
|
|
38
|
-
useEffect(() => {
|
|
39
|
-
const runConfiguration = async () => {
|
|
40
|
-
await requestNotificationsPermission();
|
|
41
|
-
setIsConfigured(true);
|
|
42
|
-
};
|
|
43
|
-
runConfiguration();
|
|
44
|
-
return () => RNFishjamClientModule.stopForegroundService();
|
|
45
|
-
}, []);
|
|
46
|
-
};
|
|
47
|
-
const emptyFunction = () => { };
|
|
48
|
-
/**
|
|
49
|
-
* A hook for managing a foreground service on Android. Does nothing on other platforms.
|
|
50
|
-
* You can use this hook to keep your app running in the background. You're also required to run a foreground service when screen sharing.
|
|
51
|
-
*
|
|
52
|
-
* @param {Object} config - Configuration options for the foreground service.
|
|
53
|
-
* @param {boolean} config.enableCamera - Flag to enable or disable camera usage in the foreground service. Only enable after the user has granted the necessary permissions.
|
|
54
|
-
* @param {boolean} config.enableMicrophone - Flag to enable or disable microphone usage in the foreground service. Only enable after the user has granted the necessary permissions.
|
|
55
|
-
* @param {Object} config.channelId - The id of the channel. Must be unique per package.
|
|
56
|
-
* @param {Object} config.channelName - The user visible name of the channel.
|
|
57
|
-
* @param {Object} config.notificationTitle - The title (first row) of the notification, in a standard notification.
|
|
58
|
-
* @param {Object} config.notificationContent - The text (second row) of the notification, in a standard notification.
|
|
59
|
-
* @group Hooks
|
|
60
|
-
* @category Connection
|
|
61
|
-
*/
|
|
62
|
-
export const useForegroundService = Platform.select({
|
|
63
|
-
android: useForegroundServiceAndroid,
|
|
64
|
-
default: emptyFunction,
|
|
65
|
-
});
|
|
66
|
-
//# sourceMappingURL=useForegroundService.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useForegroundService.js","sourceRoot":"","sources":["../../src/hooks/useForegroundService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,qBAAqB,MAAM,0BAA0B,CAAC;AAE7D,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAgC5D,MAAM,8BAA8B,GAAG,KAAK,IAAI,EAAE;IAChD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAC7C,kBAAkB,CAAC,WAAW,CAAC,kBAAkB,CAClD,CAAC;QACF,IAAI,MAAM,KAAK,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAClD,OAAO,CAAC,IAAI,CACV,6FAA6F,CAC9F,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,2BAA2B,GAAG,CAAC,EACnC,YAAY,EACZ,gBAAgB,EAChB,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,iBAAiB,GACO,EAAE,EAAE;IAC5B,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAExD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QACD,qBAAqB,CAAC,sBAAsB,CAAC;YAC3C,YAAY;YACZ,gBAAgB;YAChB,SAAS;YACT,WAAW;YACX,mBAAmB;YACnB,iBAAiB;SAClB,CAAC,CAAC;IACL,CAAC,EAAE;QACD,SAAS;QACT,WAAW;QACX,YAAY;QACZ,gBAAgB;QAChB,YAAY;QACZ,mBAAmB;QACnB,iBAAiB;KAClB,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,gBAAgB,GAAG,KAAK,IAAI,EAAE;YAClC,MAAM,8BAA8B,EAAE,CAAC;YACvC,eAAe,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC,CAAC;QACF,gBAAgB,EAAE,CAAC;QACnB,OAAO,GAAG,EAAE,CAAC,qBAAqB,CAAC,qBAAqB,EAAE,CAAC;IAC7D,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;AAE/B;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,QAAQ,CAAC,MAAM,CAAC;IAClD,OAAO,EAAE,2BAA2B;IACpC,OAAO,EAAE,aAAa;CACvB,CAAC,CAAC","sourcesContent":["import { useEffect, useState } from 'react';\nimport RNFishjamClientModule from '../RNFishjamClientModule';\n\nimport { PermissionsAndroid, Platform } from 'react-native';\n\n/**\n * A type representing the configuration for foreground service permissions.\n */\nexport type ForegroundServiceConfig = {\n /**\n * Indicates whether the camera is enabled for the foreground service.\n */\n enableCamera?: boolean;\n /**\n * Indicates whether the microphone is enabled for the foreground service.\n */\n enableMicrophone?: boolean;\n /**\n * The id of the channel. Must be unique per package.\n */\n channelId?: string;\n /**\n * The user visible name of the channel.\n */\n channelName?: string;\n /**\n * The title (first row) of the notification, in a standard notification.\n */\n notificationTitle?: string;\n /**\n * The text (second row) of the notification, in a standard notification.\n */\n notificationContent?: string;\n};\n\nconst requestNotificationsPermission = async () => {\n try {\n const result = await PermissionsAndroid.request(\n PermissionsAndroid.PERMISSIONS.POST_NOTIFICATIONS,\n );\n if (result !== PermissionsAndroid.RESULTS.GRANTED) {\n console.warn(\n \"Notifications permission not granted. User won't be able to see a the app is in background.\",\n );\n }\n } catch (err) {\n console.warn(err);\n }\n};\n\nconst useForegroundServiceAndroid = ({\n enableCamera,\n enableMicrophone,\n channelId,\n channelName,\n notificationContent,\n notificationTitle,\n}: ForegroundServiceConfig) => {\n const [isConfigured, setIsConfigured] = useState(false);\n\n useEffect(() => {\n if (!isConfigured) {\n return;\n }\n RNFishjamClientModule.startForegroundService({\n enableCamera,\n enableMicrophone,\n channelId,\n channelName,\n notificationContent,\n notificationTitle,\n });\n }, [\n channelId,\n channelName,\n enableCamera,\n enableMicrophone,\n isConfigured,\n notificationContent,\n notificationTitle,\n ]);\n\n useEffect(() => {\n const runConfiguration = async () => {\n await requestNotificationsPermission();\n setIsConfigured(true);\n };\n runConfiguration();\n return () => RNFishjamClientModule.stopForegroundService();\n }, []);\n};\n\nconst emptyFunction = () => {};\n\n/**\n * A hook for managing a foreground service on Android. Does nothing on other platforms.\n * You can use this hook to keep your app running in the background. You're also required to run a foreground service when screen sharing.\n *\n * @param {Object} config - Configuration options for the foreground service.\n * @param {boolean} config.enableCamera - Flag to enable or disable camera usage in the foreground service. Only enable after the user has granted the necessary permissions.\n * @param {boolean} config.enableMicrophone - Flag to enable or disable microphone usage in the foreground service. Only enable after the user has granted the necessary permissions.\n * @param {Object} config.channelId - The id of the channel. Must be unique per package.\n * @param {Object} config.channelName - The user visible name of the channel.\n * @param {Object} config.notificationTitle - The title (first row) of the notification, in a standard notification.\n * @param {Object} config.notificationContent - The text (second row) of the notification, in a standard notification.\n * @group Hooks\n * @category Connection\n */\nexport const useForegroundService = Platform.select({\n android: useForegroundServiceAndroid,\n default: emptyFunction,\n});\n"]}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* This hook can toggle microphone on/off and provides current microphone state.
|
|
3
|
-
* @category Devices
|
|
4
|
-
* @group Hooks
|
|
5
|
-
*/
|
|
6
|
-
export declare function useMicrophone(): {
|
|
7
|
-
/** Informs if microphone audio track is active */
|
|
8
|
-
isMicrophoneOn: boolean;
|
|
9
|
-
/** Toggles microphone on/off based on the value of `isMicrophoneOn` */
|
|
10
|
-
toggleMicrophone: () => Promise<void>;
|
|
11
|
-
/** Starts microphone and requests permission if needed */
|
|
12
|
-
startMicrophone: () => Promise<void>;
|
|
13
|
-
/** Stops microphone (mutes the track without removing it) */
|
|
14
|
-
stopMicrophone: () => Promise<void>;
|
|
15
|
-
};
|
|
16
|
-
//# sourceMappingURL=useMicrophone.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useMicrophone.d.ts","sourceRoot":"","sources":["../../src/hooks/useMicrophone.ts"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,wBAAgB,aAAa;IAmBzB,kDAAkD;;IAElD,uEAAuE;;IAEvE,0DAA0D;;IAE1D,6DAA6D;;EAGhE"}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { useCallback } from 'react';
|
|
2
|
-
import RNFishjamClientModule, { ReceivableEvents, } from '../RNFishjamClientModule';
|
|
3
|
-
import { useFishjamEventState } from './internal/useFishjamEventState';
|
|
4
|
-
/**
|
|
5
|
-
* This hook can toggle microphone on/off and provides current microphone state.
|
|
6
|
-
* @category Devices
|
|
7
|
-
* @group Hooks
|
|
8
|
-
*/
|
|
9
|
-
export function useMicrophone() {
|
|
10
|
-
const isMicrophoneOn = useFishjamEventState(ReceivableEvents.IsMicrophoneOn, RNFishjamClientModule.isMicrophoneOn);
|
|
11
|
-
const toggleMicrophone = useCallback(async () => {
|
|
12
|
-
await RNFishjamClientModule.toggleMicrophone();
|
|
13
|
-
}, []);
|
|
14
|
-
const startMicrophone = useCallback(async () => {
|
|
15
|
-
await RNFishjamClientModule.startMicrophone();
|
|
16
|
-
}, []);
|
|
17
|
-
const stopMicrophone = useCallback(async () => {
|
|
18
|
-
await RNFishjamClientModule.stopMicrophone();
|
|
19
|
-
}, []);
|
|
20
|
-
return {
|
|
21
|
-
/** Informs if microphone audio track is active */
|
|
22
|
-
isMicrophoneOn,
|
|
23
|
-
/** Toggles microphone on/off based on the value of `isMicrophoneOn` */
|
|
24
|
-
toggleMicrophone,
|
|
25
|
-
/** Starts microphone and requests permission if needed */
|
|
26
|
-
startMicrophone,
|
|
27
|
-
/** Stops microphone (mutes the track without removing it) */
|
|
28
|
-
stopMicrophone,
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
//# sourceMappingURL=useMicrophone.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useMicrophone.js","sourceRoot":"","sources":["../../src/hooks/useMicrophone.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,qBAAqB,EAAE,EAC5B,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAEvE;;;;GAIG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,cAAc,GAAG,oBAAoB,CACzC,gBAAgB,CAAC,cAAc,EAC/B,qBAAqB,CAAC,cAAc,CACrC,CAAC;IAEF,MAAM,gBAAgB,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAC9C,MAAM,qBAAqB,CAAC,gBAAgB,EAAE,CAAC;IACjD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,eAAe,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAC7C,MAAM,qBAAqB,CAAC,eAAe,EAAE,CAAC;IAChD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,cAAc,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAC5C,MAAM,qBAAqB,CAAC,cAAc,EAAE,CAAC;IAC/C,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO;QACL,kDAAkD;QAClD,cAAc;QACd,uEAAuE;QACvE,gBAAgB;QAChB,0DAA0D;QAC1D,eAAe;QACf,6DAA6D;QAC7D,cAAc;KACf,CAAC;AACJ,CAAC","sourcesContent":["import { useCallback } from 'react';\nimport RNFishjamClientModule, {\n ReceivableEvents,\n} from '../RNFishjamClientModule';\nimport { useFishjamEventState } from './internal/useFishjamEventState';\n\n/**\n * This hook can toggle microphone on/off and provides current microphone state.\n * @category Devices\n * @group Hooks\n */\nexport function useMicrophone() {\n const isMicrophoneOn = useFishjamEventState(\n ReceivableEvents.IsMicrophoneOn,\n RNFishjamClientModule.isMicrophoneOn,\n );\n\n const toggleMicrophone = useCallback(async () => {\n await RNFishjamClientModule.toggleMicrophone();\n }, []);\n\n const startMicrophone = useCallback(async () => {\n await RNFishjamClientModule.startMicrophone();\n }, []);\n\n const stopMicrophone = useCallback(async () => {\n await RNFishjamClientModule.stopMicrophone();\n }, []);\n\n return {\n /** Informs if microphone audio track is active */\n isMicrophoneOn,\n /** Toggles microphone on/off based on the value of `isMicrophoneOn` */\n toggleMicrophone,\n /** Starts microphone and requests permission if needed */\n startMicrophone,\n /** Stops microphone (mutes the track without removing it) */\n stopMicrophone,\n };\n}\n"]}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* This hook provides live updates of current connection state of the local peer to a room (websocket state)
|
|
3
|
-
* @returns Current peer status.
|
|
4
|
-
* @deprecated
|
|
5
|
-
* @ignore
|
|
6
|
-
*/
|
|
7
|
-
export declare const usePeerStatus: () => {
|
|
8
|
-
peerStatus: import("./useConnection").PeerStatus;
|
|
9
|
-
};
|
|
10
|
-
//# sourceMappingURL=usePeerStatus.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"usePeerStatus.d.ts","sourceRoot":"","sources":["../../src/hooks/usePeerStatus.ts"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,eAAO,MAAM,aAAa;;CAOzB,CAAC"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import RNFishjamClientModule, { ReceivableEvents, } from '../RNFishjamClientModule';
|
|
2
|
-
import { useFishjamEventState } from './internal/useFishjamEventState';
|
|
3
|
-
/**
|
|
4
|
-
* This hook provides live updates of current connection state of the local peer to a room (websocket state)
|
|
5
|
-
* @returns Current peer status.
|
|
6
|
-
* @deprecated
|
|
7
|
-
* @ignore
|
|
8
|
-
*/
|
|
9
|
-
export const usePeerStatus = () => {
|
|
10
|
-
const peerStatus = useFishjamEventState(ReceivableEvents.PeerStatusChanged, RNFishjamClientModule.peerStatus);
|
|
11
|
-
return { peerStatus };
|
|
12
|
-
};
|
|
13
|
-
//# sourceMappingURL=usePeerStatus.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"usePeerStatus.js","sourceRoot":"","sources":["../../src/hooks/usePeerStatus.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,EAAE,EAC5B,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAEvE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,EAAE;IAChC,MAAM,UAAU,GAAG,oBAAoB,CACrC,gBAAgB,CAAC,iBAAiB,EAClC,qBAAqB,CAAC,UAAU,CACjC,CAAC;IAEF,OAAO,EAAE,UAAU,EAAE,CAAC;AACxB,CAAC,CAAC","sourcesContent":["import RNFishjamClientModule, {\n ReceivableEvents,\n} from '../RNFishjamClientModule';\nimport { useFishjamEventState } from './internal/useFishjamEventState';\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 * @deprecated\n * @ignore\n */\nexport const usePeerStatus = () => {\n const peerStatus = useFishjamEventState(\n ReceivableEvents.PeerStatusChanged,\n RNFishjamClientModule.peerStatus,\n );\n\n return { peerStatus };\n};\n"]}
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
import { Brand, GenericMetadata, TrackMetadata } from '../types';
|
|
2
|
-
export type PeerId = Brand<string, 'PeerId'>;
|
|
3
|
-
export type TrackId = Brand<string, 'TrackId'>;
|
|
4
|
-
export type TrackType = 'Audio' | 'Video';
|
|
5
|
-
/**
|
|
6
|
-
* Type describing Voice Activity Detection statuses.
|
|
7
|
-
*
|
|
8
|
-
* - `speech` voice activity has been detected
|
|
9
|
-
* - `silence` - lack of voice activity has been detected
|
|
10
|
-
*/
|
|
11
|
-
export type VadStatus = 'silence' | 'speech';
|
|
12
|
-
export type PeerTrackMetadata<PeerMetadata, ServerMetadata> = {
|
|
13
|
-
peer: PeerMetadata;
|
|
14
|
-
server: ServerMetadata;
|
|
15
|
-
};
|
|
16
|
-
export type TrackBase = {
|
|
17
|
-
id: TrackId;
|
|
18
|
-
type: TrackType;
|
|
19
|
-
isActive: boolean;
|
|
20
|
-
metadata?: TrackMetadata;
|
|
21
|
-
};
|
|
22
|
-
export type AudioTrack = TrackBase & {
|
|
23
|
-
type: 'Audio';
|
|
24
|
-
vadStatus: VadStatus | undefined;
|
|
25
|
-
};
|
|
26
|
-
export type VideoTrack = TrackBase & {
|
|
27
|
-
type: 'Video';
|
|
28
|
-
aspectRatio: number;
|
|
29
|
-
};
|
|
30
|
-
export type Track = VideoTrack | AudioTrack;
|
|
31
|
-
/**
|
|
32
|
-
* Type describing possible reasons of currently selected encoding.
|
|
33
|
-
*
|
|
34
|
-
* - other - the exact reason couldn't be determined
|
|
35
|
-
* - encoding_inactive - previously selected encoding became inactive
|
|
36
|
-
* - low_bandwidth - there is no longer enough bandwidth to maintain previously selected encoding
|
|
37
|
-
*/
|
|
38
|
-
export type EncodingReason = 'other' | 'encoding_inactive' | 'low_bandwidth';
|
|
39
|
-
export type DistinguishedTracks = {
|
|
40
|
-
cameraTrack?: VideoTrack;
|
|
41
|
-
microphoneTrack?: AudioTrack;
|
|
42
|
-
screenShareVideoTrack?: VideoTrack;
|
|
43
|
-
screenShareAudioTrack?: AudioTrack;
|
|
44
|
-
};
|
|
45
|
-
export type PeerWithTracks<PeerMetadata extends GenericMetadata = GenericMetadata, ServerMetadata extends GenericMetadata = GenericMetadata> = Peer<PeerMetadata, ServerMetadata> & DistinguishedTracks;
|
|
46
|
-
export type Peer<PeerMetadata extends GenericMetadata = GenericMetadata, ServerMetadata extends GenericMetadata = GenericMetadata> = {
|
|
47
|
-
/**
|
|
48
|
-
* id used to identify a peer
|
|
49
|
-
*/
|
|
50
|
-
id: PeerId;
|
|
51
|
-
/**
|
|
52
|
-
* whether the peer is local or remote
|
|
53
|
-
*/
|
|
54
|
-
isLocal: boolean;
|
|
55
|
-
/**
|
|
56
|
-
* a type containing peer and server metadata
|
|
57
|
-
*/
|
|
58
|
-
metadata: PeerTrackMetadata<PeerMetadata, ServerMetadata>;
|
|
59
|
-
/**
|
|
60
|
-
* a list of peer's video and audio tracks
|
|
61
|
-
*/
|
|
62
|
-
tracks: Track[];
|
|
63
|
-
};
|
|
64
|
-
/**
|
|
65
|
-
* Result type for the usePeers hook.
|
|
66
|
-
* @template PeerMetadata - Type for peer-specific metadata
|
|
67
|
-
* @template ServerMetadata - Type for server-specific metadata
|
|
68
|
-
*/
|
|
69
|
-
export type UsePeersResult<PeerMetadata extends GenericMetadata = GenericMetadata, ServerMetadata extends GenericMetadata = GenericMetadata> = {
|
|
70
|
-
localPeer: PeerWithTracks<PeerMetadata, ServerMetadata> | null;
|
|
71
|
-
remotePeers: PeerWithTracks<PeerMetadata, ServerMetadata>[];
|
|
72
|
-
peers: Peer<PeerMetadata, ServerMetadata>[];
|
|
73
|
-
};
|
|
74
|
-
/**
|
|
75
|
-
* Hook that provides live updates of room peers.
|
|
76
|
-
* @template PeerMetadata - Type for peer-specific metadata
|
|
77
|
-
* @template ServerMetadata - Type for server-specific metadata
|
|
78
|
-
* @category Connection
|
|
79
|
-
* @group Hooks
|
|
80
|
-
*/
|
|
81
|
-
export declare function usePeers<PeerMetadata extends GenericMetadata = GenericMetadata, ServerMetadata extends GenericMetadata = GenericMetadata>(): {
|
|
82
|
-
/**
|
|
83
|
-
* The local peer with distinguished tracks (camera, microphone, screen share).
|
|
84
|
-
* Will be null if the local peer is not found.
|
|
85
|
-
*/
|
|
86
|
-
localPeer: PeerWithTracks<PeerMetadata, ServerMetadata> | null;
|
|
87
|
-
/**
|
|
88
|
-
* Array of remote peers with distinguished tracks (camera, microphone, screen share).
|
|
89
|
-
*/
|
|
90
|
-
remotePeers: PeerWithTracks<PeerMetadata, ServerMetadata>[];
|
|
91
|
-
/**
|
|
92
|
-
* @deprecated Use localPeer and remotePeers instead
|
|
93
|
-
* Legacy array containing all peers (both local and remote) without distinguished tracks.
|
|
94
|
-
* This property will be removed in future versions.
|
|
95
|
-
*/
|
|
96
|
-
peers: Peer<PeerMetadata, ServerMetadata>[];
|
|
97
|
-
};
|
|
98
|
-
//# sourceMappingURL=usePeers.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"usePeers.d.ts","sourceRoot":"","sources":["../../src/hooks/usePeers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAMjE,MAAM,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAC7C,MAAM,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAE/C,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;AAE1C;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE7C,MAAM,MAAM,iBAAiB,CAAC,YAAY,EAAE,cAAc,IAAI;IAC5D,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,cAAc,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B,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;IACd,WAAW,EAAE,MAAM,CAAC;CACrB,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,mBAAmB,GAAG;IAChC,WAAW,CAAC,EAAE,UAAU,CAAC;IACzB,eAAe,CAAC,EAAE,UAAU,CAAC;IAC7B,qBAAqB,CAAC,EAAE,UAAU,CAAC;IACnC,qBAAqB,CAAC,EAAE,UAAU,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,cAAc,CACxB,YAAY,SAAS,eAAe,GAAG,eAAe,EACtD,cAAc,SAAS,eAAe,GAAG,eAAe,IACtD,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC,GAAG,mBAAmB,CAAC;AAE7D,MAAM,MAAM,IAAI,CACd,YAAY,SAAS,eAAe,GAAG,eAAe,EACtD,cAAc,SAAS,eAAe,GAAG,eAAe,IACtD;IACF;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IACX;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,QAAQ,EAAE,iBAAiB,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IAC1D;;OAEG;IACH,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB,CAAC;AA6EF;;;;GAIG;AACH,MAAM,MAAM,cAAc,CACxB,YAAY,SAAS,eAAe,GAAG,eAAe,EACtD,cAAc,SAAS,eAAe,GAAG,eAAe,IACtD;IACF,SAAS,EAAE,cAAc,CAAC,YAAY,EAAE,cAAc,CAAC,GAAG,IAAI,CAAC;IAE/D,WAAW,EAAE,cAAc,CAAC,YAAY,EAAE,cAAc,CAAC,EAAE,CAAC;IAE5D,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC,EAAE,CAAC;CAC7C,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,QAAQ,CACtB,YAAY,SAAS,eAAe,GAAG,eAAe,EACtD,cAAc,SAAS,eAAe,GAAG,eAAe;IAgBtD;;;OAGG;;IAEH;;OAEG;;IAEH;;;;OAIG;;EAGN"}
|
package/build/hooks/usePeers.js
DELETED
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
import { useCallback, useMemo, useState } from 'react';
|
|
2
|
-
import RNFishjamClientModule, { ReceivableEvents, } from '../RNFishjamClientModule';
|
|
3
|
-
import { useFishjamEvent } from './internal/useFishjamEvent';
|
|
4
|
-
// TODO: This should return a different metadata type if it's requiring it to have a certain field.
|
|
5
|
-
function addIsActiveToTracks(peers) {
|
|
6
|
-
return peers.map((peer) => ({
|
|
7
|
-
...peer,
|
|
8
|
-
tracks: peer.tracks.map((track) => ({
|
|
9
|
-
...track,
|
|
10
|
-
isActive: track?.metadata?.active ?? true,
|
|
11
|
-
})),
|
|
12
|
-
}));
|
|
13
|
-
}
|
|
14
|
-
function getPeerWithDistinguishedTracks(peer) {
|
|
15
|
-
const { tracks: peerTracks } = peer;
|
|
16
|
-
const distinguishedTracks = {};
|
|
17
|
-
for (const track of peerTracks) {
|
|
18
|
-
const trackType = track.metadata?.type;
|
|
19
|
-
switch (trackType) {
|
|
20
|
-
case 'camera':
|
|
21
|
-
distinguishedTracks.cameraTrack = track;
|
|
22
|
-
break;
|
|
23
|
-
case 'microphone':
|
|
24
|
-
distinguishedTracks.microphoneTrack = track;
|
|
25
|
-
break;
|
|
26
|
-
case 'screenShareVideo':
|
|
27
|
-
distinguishedTracks.screenShareVideoTrack = track;
|
|
28
|
-
break;
|
|
29
|
-
case 'screenShareAudio':
|
|
30
|
-
distinguishedTracks.screenShareAudioTrack = track;
|
|
31
|
-
break;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
return {
|
|
35
|
-
...peer,
|
|
36
|
-
...distinguishedTracks,
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
const usePeersEventState = () => {
|
|
40
|
-
const getTransformedPeers = useCallback(() => addIsActiveToTracks(RNFishjamClientModule.getPeers()), []);
|
|
41
|
-
const [value, setValue] = useState(getTransformedPeers());
|
|
42
|
-
const onEvent = useCallback(() => {
|
|
43
|
-
setValue(getTransformedPeers());
|
|
44
|
-
}, [getTransformedPeers]);
|
|
45
|
-
useFishjamEvent(ReceivableEvents.PeersUpdate, onEvent);
|
|
46
|
-
useFishjamEvent(ReceivableEvents.TrackAspectRatioUpdated, onEvent);
|
|
47
|
-
return value;
|
|
48
|
-
};
|
|
49
|
-
/**
|
|
50
|
-
* Hook that provides live updates of room peers.
|
|
51
|
-
* @template PeerMetadata - Type for peer-specific metadata
|
|
52
|
-
* @template ServerMetadata - Type for server-specific metadata
|
|
53
|
-
* @category Connection
|
|
54
|
-
* @group Hooks
|
|
55
|
-
*/
|
|
56
|
-
export function usePeers() {
|
|
57
|
-
const peers = usePeersEventState();
|
|
58
|
-
const localPeer = useMemo(() => {
|
|
59
|
-
const localPeerData = peers.find((peer) => peer.isLocal);
|
|
60
|
-
return localPeerData ? getPeerWithDistinguishedTracks(localPeerData) : null;
|
|
61
|
-
}, [peers]);
|
|
62
|
-
const remotePeers = useMemo(() => peers.filter((peer) => !peer.isLocal).map(getPeerWithDistinguishedTracks), [peers]);
|
|
63
|
-
return {
|
|
64
|
-
/**
|
|
65
|
-
* The local peer with distinguished tracks (camera, microphone, screen share).
|
|
66
|
-
* Will be null if the local peer is not found.
|
|
67
|
-
*/
|
|
68
|
-
localPeer,
|
|
69
|
-
/**
|
|
70
|
-
* Array of remote peers with distinguished tracks (camera, microphone, screen share).
|
|
71
|
-
*/
|
|
72
|
-
remotePeers,
|
|
73
|
-
/**
|
|
74
|
-
* @deprecated Use localPeer and remotePeers instead
|
|
75
|
-
* Legacy array containing all peers (both local and remote) without distinguished tracks.
|
|
76
|
-
* This property will be removed in future versions.
|
|
77
|
-
*/
|
|
78
|
-
peers,
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
//# sourceMappingURL=usePeers.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"usePeers.js","sourceRoot":"","sources":["../../src/hooks/usePeers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAGvD,OAAO,qBAAqB,EAAE,EAC5B,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAiF7D,mGAAmG;AACnG,SAAS,mBAAmB,CAI1B,KAAoD;IAEpD,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;AAED,SAAS,8BAA8B,CAIrC,IAAwC;IAExC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IAEpC,MAAM,mBAAmB,GAAwB,EAAE,CAAC;IAEpD,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC;QAEvC,QAAQ,SAAS,EAAE,CAAC;YAClB,KAAK,QAAQ;gBACX,mBAAmB,CAAC,WAAW,GAAG,KAAmB,CAAC;gBACtD,MAAM;YACR,KAAK,YAAY;gBACf,mBAAmB,CAAC,eAAe,GAAG,KAAmB,CAAC;gBAC1D,MAAM;YACR,KAAK,kBAAkB;gBACrB,mBAAmB,CAAC,qBAAqB,GAAG,KAAmB,CAAC;gBAChE,MAAM;YACR,KAAK,kBAAkB;gBACrB,mBAAmB,CAAC,qBAAqB,GAAG,KAAmB,CAAC;gBAChE,MAAM;QACV,CAAC;IACH,CAAC;IAED,OAAO;QACL,GAAG,IAAI;QACP,GAAG,mBAAmB;KACvB,CAAC;AACJ,CAAC;AAED,MAAM,kBAAkB,GAAG,GAGvB,EAAE;IACJ,MAAM,mBAAmB,GAAG,WAAW,CACrC,GAAG,EAAE,CACH,mBAAmB,CACjB,qBAAqB,CAAC,QAAQ,EAAgC,CAC/D,EACH,EAAE,CACH,CAAC;IAEF,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAE1D,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE;QAC/B,QAAQ,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAClC,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAE1B,eAAe,CAAC,gBAAgB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACvD,eAAe,CAAC,gBAAgB,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAC;IACnE,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAkBF;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ;IAItB,MAAM,KAAK,GAAG,kBAAkB,EAAgC,CAAC;IAEjE,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE;QAC7B,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzD,OAAO,aAAa,CAAC,CAAC,CAAC,8BAA8B,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9E,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,MAAM,WAAW,GAAG,OAAO,CACzB,GAAG,EAAE,CACH,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,8BAA8B,CAAC,EAC3E,CAAC,KAAK,CAAC,CACR,CAAC;IAEF,OAAO;QACL;;;WAGG;QACH,SAAS;QACT;;WAEG;QACH,WAAW;QACX;;;;WAIG;QACH,KAAK;KACN,CAAC;AACJ,CAAC","sourcesContent":["import { useCallback, useMemo, useState } from 'react';\n\nimport { Brand, GenericMetadata, TrackMetadata } from '../types';\nimport RNFishjamClientModule, {\n ReceivableEvents,\n} from '../RNFishjamClientModule';\nimport { useFishjamEvent } from './internal/useFishjamEvent';\n\nexport type PeerId = Brand<string, 'PeerId'>;\nexport type TrackId = Brand<string, 'TrackId'>;\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\nexport type PeerTrackMetadata<PeerMetadata, ServerMetadata> = {\n peer: PeerMetadata;\n server: ServerMetadata;\n};\n\nexport type TrackBase = {\n id: TrackId;\n type: TrackType;\n isActive: boolean;\n metadata?: TrackMetadata;\n};\n\nexport type AudioTrack = TrackBase & {\n type: 'Audio';\n vadStatus: VadStatus | undefined;\n};\n\nexport type VideoTrack = TrackBase & {\n type: 'Video';\n aspectRatio: number;\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 DistinguishedTracks = {\n cameraTrack?: VideoTrack;\n microphoneTrack?: AudioTrack;\n screenShareVideoTrack?: VideoTrack;\n screenShareAudioTrack?: AudioTrack;\n};\n\nexport type PeerWithTracks<\n PeerMetadata extends GenericMetadata = GenericMetadata,\n ServerMetadata extends GenericMetadata = GenericMetadata,\n> = Peer<PeerMetadata, ServerMetadata> & DistinguishedTracks;\n\nexport type Peer<\n PeerMetadata extends GenericMetadata = GenericMetadata,\n ServerMetadata extends GenericMetadata = GenericMetadata,\n> = {\n /**\n * id used to identify a peer\n */\n id: PeerId;\n /**\n * whether the peer is local or remote\n */\n isLocal: boolean;\n /**\n * a type containing peer and server metadata\n */\n metadata: PeerTrackMetadata<PeerMetadata, ServerMetadata>;\n /**\n * a list of peer's video and audio tracks\n */\n tracks: Track[];\n};\n\n// TODO: This should return a different metadata type if it's requiring it to have a certain field.\nfunction addIsActiveToTracks<\n PeerMetadata extends GenericMetadata = GenericMetadata,\n ServerMetadata extends GenericMetadata = GenericMetadata,\n>(\n peers: readonly Peer<PeerMetadata, ServerMetadata>[],\n): Peer<PeerMetadata, ServerMetadata>[] {\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\nfunction getPeerWithDistinguishedTracks<\n PeerMetadata extends GenericMetadata = GenericMetadata,\n ServerMetadata extends GenericMetadata = GenericMetadata,\n>(\n peer: Peer<PeerMetadata, ServerMetadata>,\n): PeerWithTracks<PeerMetadata, ServerMetadata> {\n const { tracks: peerTracks } = peer;\n\n const distinguishedTracks: DistinguishedTracks = {};\n\n for (const track of peerTracks) {\n const trackType = track.metadata?.type;\n\n switch (trackType) {\n case 'camera':\n distinguishedTracks.cameraTrack = track as VideoTrack;\n break;\n case 'microphone':\n distinguishedTracks.microphoneTrack = track as AudioTrack;\n break;\n case 'screenShareVideo':\n distinguishedTracks.screenShareVideoTrack = track as VideoTrack;\n break;\n case 'screenShareAudio':\n distinguishedTracks.screenShareAudioTrack = track as AudioTrack;\n break;\n }\n }\n\n return {\n ...peer,\n ...distinguishedTracks,\n };\n}\n\nconst usePeersEventState = <\n PeerMetadata extends GenericMetadata = GenericMetadata,\n ServerMetadata extends GenericMetadata = GenericMetadata,\n>() => {\n const getTransformedPeers = useCallback(\n () =>\n addIsActiveToTracks(\n RNFishjamClientModule.getPeers<PeerMetadata, ServerMetadata>(),\n ),\n [],\n );\n\n const [value, setValue] = useState(getTransformedPeers());\n\n const onEvent = useCallback(() => {\n setValue(getTransformedPeers());\n }, [getTransformedPeers]);\n\n useFishjamEvent(ReceivableEvents.PeersUpdate, onEvent);\n useFishjamEvent(ReceivableEvents.TrackAspectRatioUpdated, onEvent);\n return value;\n};\n\n/**\n * Result type for the usePeers hook.\n * @template PeerMetadata - Type for peer-specific metadata\n * @template ServerMetadata - Type for server-specific metadata\n */\nexport type UsePeersResult<\n PeerMetadata extends GenericMetadata = GenericMetadata,\n ServerMetadata extends GenericMetadata = GenericMetadata,\n> = {\n localPeer: PeerWithTracks<PeerMetadata, ServerMetadata> | null;\n\n remotePeers: PeerWithTracks<PeerMetadata, ServerMetadata>[];\n\n peers: Peer<PeerMetadata, ServerMetadata>[];\n};\n\n/**\n * Hook that provides live updates of room peers.\n * @template PeerMetadata - Type for peer-specific metadata\n * @template ServerMetadata - Type for server-specific metadata\n * @category Connection\n * @group Hooks\n */\nexport function usePeers<\n PeerMetadata extends GenericMetadata = GenericMetadata,\n ServerMetadata extends GenericMetadata = GenericMetadata,\n>() {\n const peers = usePeersEventState<PeerMetadata, ServerMetadata>();\n\n const localPeer = useMemo(() => {\n const localPeerData = peers.find((peer) => peer.isLocal);\n return localPeerData ? getPeerWithDistinguishedTracks(localPeerData) : null;\n }, [peers]);\n\n const remotePeers = useMemo(\n () =>\n peers.filter((peer) => !peer.isLocal).map(getPeerWithDistinguishedTracks),\n [peers],\n );\n\n return {\n /**\n * The local peer with distinguished tracks (camera, microphone, screen share).\n * Will be null if the local peer is not found.\n */\n localPeer,\n /**\n * Array of remote peers with distinguished tracks (camera, microphone, screen share).\n */\n remotePeers,\n /**\n * @deprecated Use localPeer and remotePeers instead\n * Legacy array containing all peers (both local and remote) without distinguished tracks.\n * This property will be removed in future versions.\n */\n peers,\n };\n}\n"]}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { PermissionResponse } from 'expo-modules-core';
|
|
2
|
-
/**
|
|
3
|
-
* Check or request permissions to access the camera.
|
|
4
|
-
* This uses both `requestCameraPermissionsAsync` and `getCameraPermissionsAsync` to interact with the permissions.
|
|
5
|
-
*
|
|
6
|
-
* @example
|
|
7
|
-
* ```ts
|
|
8
|
-
* import { useCameraPermissions } from '@fishjam-cloud/react-native-client';
|
|
9
|
-
* const [status, requestPermission] = useCameraPermissions();
|
|
10
|
-
* ```
|
|
11
|
-
*/
|
|
12
|
-
export declare const useCameraPermissions: (options?: import("expo-modules-core").PermissionHookOptions<object> | undefined) => [PermissionResponse | null, () => Promise<PermissionResponse>, () => Promise<PermissionResponse>];
|
|
13
|
-
/**
|
|
14
|
-
* Check or request permissions to access the microphone.
|
|
15
|
-
* This uses both `requestMicrophonePermissionsAsync` and `getMicrophonePermissionsAsync` to interact with the permissions.
|
|
16
|
-
*
|
|
17
|
-
* @example
|
|
18
|
-
* ```ts
|
|
19
|
-
* import { useMicrophonePermissions } from '@fishjam-cloud/react-native-client';
|
|
20
|
-
* const [status, requestPermission] = useMicrophonePermissions();
|
|
21
|
-
* ```
|
|
22
|
-
*/
|
|
23
|
-
export declare const useMicrophonePermissions: (options?: import("expo-modules-core").PermissionHookOptions<object> | undefined) => [PermissionResponse | null, () => Promise<PermissionResponse>, () => Promise<PermissionResponse>];
|
|
24
|
-
//# sourceMappingURL=usePermissions.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"usePermissions.d.ts","sourceRoot":"","sources":["../../src/hooks/usePermissions.ts"],"names":[],"mappings":"AACA,OAAO,EAAwB,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAmB7E;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB,wLAG/B,CAAC;AAmBH;;;;;;;;;GASG;AACH,eAAO,MAAM,wBAAwB,wLAGnC,CAAC"}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import RNFishjamClient from '../RNFishjamClientModule';
|
|
2
|
-
import { createPermissionHook } from 'expo-modules-core';
|
|
3
|
-
/**
|
|
4
|
-
* Checks user's permissions for accessing camera.
|
|
5
|
-
* @return A promise that resolves to an object of type [PermissionResponse](#permissionresponse).
|
|
6
|
-
*/
|
|
7
|
-
async function getCameraPermissionsAsync() {
|
|
8
|
-
return RNFishjamClient.getCameraPermissionsAsync();
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Asks the user to grant permissions for accessing camera.
|
|
12
|
-
* On iOS this will require apps to specify an `NSCameraUsageDescription` entry in the **Info.plist**.
|
|
13
|
-
* @return A promise that resolves to an object of type [PermissionResponse](#permissionresponse).
|
|
14
|
-
*/
|
|
15
|
-
async function requestCameraPermissionsAsync() {
|
|
16
|
-
return RNFishjamClient.requestCameraPermissionsAsync();
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Check or request permissions to access the camera.
|
|
20
|
-
* This uses both `requestCameraPermissionsAsync` and `getCameraPermissionsAsync` to interact with the permissions.
|
|
21
|
-
*
|
|
22
|
-
* @example
|
|
23
|
-
* ```ts
|
|
24
|
-
* import { useCameraPermissions } from '@fishjam-cloud/react-native-client';
|
|
25
|
-
* const [status, requestPermission] = useCameraPermissions();
|
|
26
|
-
* ```
|
|
27
|
-
*/
|
|
28
|
-
export const useCameraPermissions = createPermissionHook({
|
|
29
|
-
getMethod: getCameraPermissionsAsync,
|
|
30
|
-
requestMethod: requestCameraPermissionsAsync,
|
|
31
|
-
});
|
|
32
|
-
/**
|
|
33
|
-
* Checks user's permissions for accessing microphone.
|
|
34
|
-
* @return A promise that resolves to an object of type [PermissionResponse](#permissionresponse).
|
|
35
|
-
*/
|
|
36
|
-
async function getMicrophonePermissionsAsync() {
|
|
37
|
-
return RNFishjamClient.getMicrophonePermissionsAsync();
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Asks the user to grant permissions for accessing the microphone.
|
|
41
|
-
* On iOS this will require apps to specify an `NSMicrophoneUsageDescription` entry in the **Info.plist**.
|
|
42
|
-
* @return A promise that resolves to an object of type [PermissionResponse](#permissionresponse).
|
|
43
|
-
*/
|
|
44
|
-
async function requestMicrophonePermissionsAsync() {
|
|
45
|
-
return RNFishjamClient.requestMicrophonePermissionsAsync();
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Check or request permissions to access the microphone.
|
|
49
|
-
* This uses both `requestMicrophonePermissionsAsync` and `getMicrophonePermissionsAsync` to interact with the permissions.
|
|
50
|
-
*
|
|
51
|
-
* @example
|
|
52
|
-
* ```ts
|
|
53
|
-
* import { useMicrophonePermissions } from '@fishjam-cloud/react-native-client';
|
|
54
|
-
* const [status, requestPermission] = useMicrophonePermissions();
|
|
55
|
-
* ```
|
|
56
|
-
*/
|
|
57
|
-
export const useMicrophonePermissions = createPermissionHook({
|
|
58
|
-
getMethod: getMicrophonePermissionsAsync,
|
|
59
|
-
requestMethod: requestMicrophonePermissionsAsync,
|
|
60
|
-
});
|
|
61
|
-
//# sourceMappingURL=usePermissions.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"usePermissions.js","sourceRoot":"","sources":["../../src/hooks/usePermissions.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAsB,MAAM,mBAAmB,CAAC;AAE7E;;;GAGG;AACH,KAAK,UAAU,yBAAyB;IACtC,OAAO,eAAe,CAAC,yBAAyB,EAAE,CAAC;AACrD,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,6BAA6B;IAC1C,OAAO,eAAe,CAAC,6BAA6B,EAAE,CAAC;AACzD,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,oBAAoB,CAAC;IACvD,SAAS,EAAE,yBAAyB;IACpC,aAAa,EAAE,6BAA6B;CAC7C,CAAC,CAAC;AAEH;;;GAGG;AACH,KAAK,UAAU,6BAA6B;IAC1C,OAAO,eAAe,CAAC,6BAA6B,EAAE,CAAC;AACzD,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,iCAAiC;IAC9C,OAAO,eAAe,CAAC,iCAAiC,EAAE,CAAC;AAC7D,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,oBAAoB,CAAC;IAC3D,SAAS,EAAE,6BAA6B;IACxC,aAAa,EAAE,iCAAiC;CACjD,CAAC,CAAC","sourcesContent":["import RNFishjamClient from '../RNFishjamClientModule';\nimport { createPermissionHook, PermissionResponse } from 'expo-modules-core';\n\n/**\n * Checks user's permissions for accessing camera.\n * @return A promise that resolves to an object of type [PermissionResponse](#permissionresponse).\n */\nasync function getCameraPermissionsAsync(): Promise<PermissionResponse> {\n return RNFishjamClient.getCameraPermissionsAsync();\n}\n\n/**\n * Asks the user to grant permissions for accessing camera.\n * On iOS this will require apps to specify an `NSCameraUsageDescription` entry in the **Info.plist**.\n * @return A promise that resolves to an object of type [PermissionResponse](#permissionresponse).\n */\nasync function requestCameraPermissionsAsync(): Promise<PermissionResponse> {\n return RNFishjamClient.requestCameraPermissionsAsync();\n}\n\n/**\n * Check or request permissions to access the camera.\n * This uses both `requestCameraPermissionsAsync` and `getCameraPermissionsAsync` to interact with the permissions.\n *\n * @example\n * ```ts\n * import { useCameraPermissions } from '@fishjam-cloud/react-native-client';\n * const [status, requestPermission] = useCameraPermissions();\n * ```\n */\nexport const useCameraPermissions = createPermissionHook({\n getMethod: getCameraPermissionsAsync,\n requestMethod: requestCameraPermissionsAsync,\n});\n\n/**\n * Checks user's permissions for accessing microphone.\n * @return A promise that resolves to an object of type [PermissionResponse](#permissionresponse).\n */\nasync function getMicrophonePermissionsAsync(): Promise<PermissionResponse> {\n return RNFishjamClient.getMicrophonePermissionsAsync();\n}\n\n/**\n * Asks the user to grant permissions for accessing the microphone.\n * On iOS this will require apps to specify an `NSMicrophoneUsageDescription` entry in the **Info.plist**.\n * @return A promise that resolves to an object of type [PermissionResponse](#permissionresponse).\n */\nasync function requestMicrophonePermissionsAsync(): Promise<PermissionResponse> {\n return RNFishjamClient.requestMicrophonePermissionsAsync();\n}\n\n/**\n * Check or request permissions to access the microphone.\n * This uses both `requestMicrophonePermissionsAsync` and `getMicrophonePermissionsAsync` to interact with the permissions.\n *\n * @example\n * ```ts\n * import { useMicrophonePermissions } from '@fishjam-cloud/react-native-client';\n * const [status, requestPermission] = useMicrophonePermissions();\n * ```\n */\nexport const useMicrophonePermissions = createPermissionHook({\n getMethod: getMicrophonePermissionsAsync,\n requestMethod: requestMicrophonePermissionsAsync,\n});\n"]}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Information about reconnection status.
|
|
3
|
-
* Could be used to retrieve connection status, once user will be disconnected
|
|
4
|
-
* @group Hooks
|
|
5
|
-
* @deprecated
|
|
6
|
-
* @ignore
|
|
7
|
-
*/
|
|
8
|
-
export declare function useReconnection(): {
|
|
9
|
-
reconnectionStatus: import("./useConnection").ReconnectionStatus;
|
|
10
|
-
};
|
|
11
|
-
//# sourceMappingURL=useReconnection.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useReconnection.d.ts","sourceRoot":"","sources":["../../src/hooks/useReconnection.ts"],"names":[],"mappings":"AAKA;;;;;;GAMG;AACH,wBAAgB,eAAe;;EAO9B"}
|