@fishjam-cloud/react-native-client 0.20.0 → 0.22.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.
- package/android/src/main/java/io/fishjam/reactnative/RNFishjamClient.kt +8 -0
- package/build/RNFishjamClientModule.d.ts +1 -2
- package/build/RNFishjamClientModule.d.ts.map +1 -1
- package/build/RNFishjamClientModule.js.map +1 -1
- package/build/components/FishjamRoom/index.d.ts +6 -6
- package/build/components/FishjamRoom/index.d.ts.map +1 -1
- package/build/components/FishjamRoom/index.js +8 -10
- package/build/components/FishjamRoom/index.js.map +1 -1
- package/build/hooks/internal/useFishjamEvent.d.ts.map +1 -1
- package/build/hooks/internal/useFishjamEvent.js +3 -0
- package/build/hooks/internal/useFishjamEvent.js.map +1 -1
- package/build/hooks/useAudioSettings.d.ts +7 -0
- package/build/hooks/useAudioSettings.d.ts.map +1 -1
- package/build/hooks/useAudioSettings.js.map +1 -1
- package/build/hooks/useConnection.d.ts +20 -16
- package/build/hooks/useConnection.d.ts.map +1 -1
- package/build/hooks/useConnection.js +10 -11
- package/build/hooks/useConnection.js.map +1 -1
- package/build/hooks/useSandbox.d.ts +3 -3
- package/build/hooks/useSandbox.d.ts.map +1 -1
- package/build/hooks/useSandbox.js +10 -12
- package/build/hooks/useSandbox.js.map +1 -1
- package/build/index.d.ts +2 -17
- package/build/index.d.ts.map +1 -1
- package/build/index.js +2 -10
- package/build/index.js.map +1 -1
- package/build/livestream/components/LivestreamStreamer.d.ts +51 -0
- package/build/livestream/components/LivestreamStreamer.d.ts.map +1 -0
- package/build/livestream/components/LivestreamStreamer.js +36 -0
- package/build/livestream/components/LivestreamStreamer.js.map +1 -0
- package/build/livestream/components/LivestreamViewer.d.ts.map +1 -0
- package/build/{components → livestream/components}/LivestreamViewer.js +1 -1
- package/build/livestream/components/LivestreamViewer.js.map +1 -0
- package/build/{hooks → livestream/hooks}/useLivestreamStreamer.d.ts +9 -5
- package/build/livestream/hooks/useLivestreamStreamer.d.ts.map +1 -0
- package/build/livestream/hooks/useLivestreamStreamer.js +30 -0
- package/build/livestream/hooks/useLivestreamStreamer.js.map +1 -0
- package/build/{hooks → livestream/hooks}/useLivestreamViewer.d.ts +3 -1
- package/build/livestream/hooks/useLivestreamViewer.d.ts.map +1 -0
- package/build/livestream/hooks/useLivestreamViewer.js +45 -0
- package/build/livestream/hooks/useLivestreamViewer.js.map +1 -0
- package/build/livestream/index.d.ts +11 -0
- package/build/livestream/index.d.ts.map +1 -0
- package/build/livestream/index.js +6 -0
- package/build/livestream/index.js.map +1 -0
- package/build/utils/config.d.ts +6 -0
- package/build/utils/config.d.ts.map +1 -0
- package/build/utils/config.js +10 -0
- package/build/utils/config.js.map +1 -0
- package/build/utils/getFishjamUrl.d.ts +2 -0
- package/build/utils/getFishjamUrl.d.ts.map +1 -0
- package/build/utils/getFishjamUrl.js +10 -0
- package/build/utils/getFishjamUrl.js.map +1 -0
- package/ios/Events.swift +8 -1
- package/ios/RNFishjamClient.podspec +1 -1
- package/ios/RNFishjamClient.swift +9 -4
- package/ios/VideoPreviewView.swift +1 -0
- package/livestream/package.json +4 -0
- package/package.json +3 -2
- package/build/common/client.d.ts +0 -25
- package/build/common/client.d.ts.map +0 -1
- package/build/common/client.js +0 -14
- package/build/common/client.js.map +0 -1
- package/build/components/LivestreamStreamer.d.ts +0 -19
- package/build/components/LivestreamStreamer.d.ts.map +0 -1
- package/build/components/LivestreamStreamer.js +0 -10
- package/build/components/LivestreamStreamer.js.map +0 -1
- package/build/components/LivestreamViewer.d.ts.map +0 -1
- package/build/components/LivestreamViewer.js.map +0 -1
- package/build/hooks/useLivestreamStreamer.d.ts.map +0 -1
- package/build/hooks/useLivestreamStreamer.js +0 -31
- package/build/hooks/useLivestreamStreamer.js.map +0 -1
- package/build/hooks/useLivestreamViewer.d.ts.map +0 -1
- package/build/hooks/useLivestreamViewer.js +0 -31
- package/build/hooks/useLivestreamViewer.js.map +0 -1
- /package/build/{components → livestream/components}/LivestreamViewer.d.ts +0 -0
|
@@ -298,6 +298,11 @@ class RNFishjamClient(
|
|
|
298
298
|
config: ConnectConfig,
|
|
299
299
|
promise: Promise
|
|
300
300
|
) {
|
|
301
|
+
if (connectPromise != null || peerStatus == PeerStatus.Connected) {
|
|
302
|
+
promise.reject(JoinError("Room already joined or it's connecting. You must call leaveRoom() before calling joinRoom() again."))
|
|
303
|
+
return
|
|
304
|
+
}
|
|
305
|
+
|
|
301
306
|
peerStatus = PeerStatus.Connecting
|
|
302
307
|
connectPromise = promise
|
|
303
308
|
localUserMetadata = mapOf("server" to emptyMap(), "peer" to peerMetadata)
|
|
@@ -316,6 +321,9 @@ class RNFishjamClient(
|
|
|
316
321
|
}
|
|
317
322
|
|
|
318
323
|
fun leaveRoom() {
|
|
324
|
+
connectPromise?.reject(JoinError("leaveRoom called before connected"))
|
|
325
|
+
connectPromise = null
|
|
326
|
+
|
|
319
327
|
if (isScreenShareOn) {
|
|
320
328
|
stopScreenShare()
|
|
321
329
|
}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { PermissionResponse } from 'expo-modules-core';
|
|
2
2
|
import type { NativeModule } from 'expo-modules-core/types';
|
|
3
|
-
import type { ConnectionConfig } from './common/client';
|
|
4
3
|
import type { RTCStats } from './debug/stats/types';
|
|
5
4
|
import type { OnAudioDeviceEvent } from './hooks/useAudioSettings';
|
|
6
5
|
import type { Camera, CameraConfigInternal, CurrentCameraChangedType } from './hooks/useCamera';
|
|
7
|
-
import type { PeerStatus, ReconnectionStatus } from './hooks/useConnection';
|
|
6
|
+
import type { PeerStatus, ReconnectionStatus, ConnectionConfig } from './hooks/useConnection';
|
|
8
7
|
import type { ForegroundServiceConfig } from './hooks/useForegroundService';
|
|
9
8
|
import type { Peer } from './hooks/usePeers';
|
|
10
9
|
import type { ScreenShareOptionsInternal } from './hooks/useScreenShare';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RNFishjamClientModule.d.ts","sourceRoot":"","sources":["../src/RNFishjamClientModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAuB,MAAM,mBAAmB,CAAC;AAE5E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"RNFishjamClientModule.d.ts","sourceRoot":"","sources":["../src/RNFishjamClientModule.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RNFishjamClientModule.js","sourceRoot":"","sources":["../src/RNFishjamClientModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"RNFishjamClientModule.js","sourceRoot":"","sources":["../src/RNFishjamClientModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAgG5E,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,cAAc,EAAE,gBAAgB;IAChC,eAAe,EAAE,iBAAiB;IAClC,kBAAkB,EAAE,oBAAoB,EAAE,eAAe;IACzD,qBAAqB,EAAE,uBAAuB;IAC9C,WAAW,EAAE,aAAa;IAC1B,iBAAiB,EAAE,mBAAmB;IACtC,mBAAmB,EAAE,qBAAqB;IAC1C,+BAA+B,EAAE,iCAAiC;IAClE,mBAAmB,EAAE,qBAAqB;IAC1C,WAAW,EAAE,aAAa;IAC1B,OAAO,EAAE,SAAS;IAClB,iBAAiB,EAAE,mBAAmB;IACtC,yBAAyB,EAAE,2BAA2B;IACtD,oBAAoB,EAAE,sBAAsB;IAC5C,uBAAuB,EAAE,yBAAyB;CAC1C,CAAC;AAuBX,eAAe,mBAAmB,CAAC,iBAAiB,CAMjD,CAAC","sourcesContent":["import { PermissionResponse, requireNativeModule } from 'expo-modules-core';\n\nimport type { NativeModule } from 'expo-modules-core/types';\nimport type { RTCStats } from './debug/stats/types';\nimport type { OnAudioDeviceEvent } from './hooks/useAudioSettings';\nimport type {\n Camera,\n CameraConfigInternal,\n CurrentCameraChangedType,\n} from './hooks/useCamera';\nimport type {\n PeerStatus,\n ReconnectionStatus,\n ConnectionConfig,\n} from './hooks/useConnection';\nimport type { ForegroundServiceConfig } from './hooks/useForegroundService';\nimport type { Peer } from './hooks/usePeers';\nimport type { ScreenShareOptionsInternal } from './hooks/useScreenShare';\nimport type { GenericMetadata, SimulcastConfig } from './types';\n\ntype Metadata = { [key: string]: unknown };\n\ntype RNFishjamClient = {\n isMicrophoneOn: boolean;\n isCameraOn: boolean;\n isScreenShareOn: boolean;\n isAppScreenShareOn: boolean; // only available on ios\n cameras: readonly Camera[];\n currentCamera: Camera | null;\n peerStatus: PeerStatus;\n reconnectionStatus: ReconnectionStatus;\n isCameraInitialized: boolean;\n\n getPeers: <\n PeerMetadataType extends Metadata,\n ServerMetadata extends Metadata = GenericMetadata,\n >() => Peer<PeerMetadataType, ServerMetadata>[];\n\n joinRoom: (\n url: string,\n peerToken: string,\n peerMetadata: Metadata,\n config: ConnectionConfig,\n ) => Promise<void>;\n leaveRoom: () => Promise<void>;\n startCamera: (config: CameraConfigInternal) => Promise<boolean>;\n toggleMicrophone: () => Promise<boolean>;\n toggleCamera: () => Promise<boolean>;\n flipCamera: () => Promise<void>;\n switchCamera: (cameraId: string) => Promise<void>;\n handleScreenSharePermission: () => Promise<'granted' | 'denied'>;\n toggleScreenShare: (\n screenShareOptions: Partial<ScreenShareOptionsInternal>,\n ) => Promise<void>;\n toggleAppScreenShare: (\n screenShareOptions: Partial<ScreenShareOptionsInternal>,\n ) => Promise<void>;\n updatePeerMetadata: <MetadataType extends Metadata>(\n metadata: MetadataType,\n ) => Promise<void>;\n updateVideoTrackMetadata: <MetadataType extends Metadata>(\n metadata: MetadataType,\n ) => Promise<void>;\n updateScreenShareTrackMetadata: <MetadataType extends Metadata>(\n metadata: MetadataType,\n ) => Promise<void>;\n setOutputAudioDevice: (audioDevice: string) => Promise<void>;\n startAudioSwitcher: () => Promise<void>;\n stopAudioSwitcher: () => Promise<void>;\n selectAudioSessionMode: (sessionMode: string) => Promise<void>;\n showAudioRoutePicker: () => Promise<void>;\n toggleScreenShareTrackEncoding: (\n encoding: string,\n ) => Promise<SimulcastConfig>;\n setScreenShareTrackBandwidth: (bandwidth: number) => Promise<void>;\n setScreenShareTrackEncodingBandwidth: (\n encoding: string,\n bandwidth: number,\n ) => Promise<void>;\n setTargetTrackEncoding: (trackId: string, encoding: string) => Promise<void>;\n toggleVideoTrackEncoding: (encoding: string) => Promise<SimulcastConfig>;\n setVideoTrackEncodingBandwidth: (\n encoding: string,\n bandwidth: number,\n ) => Promise<void>;\n setVideoTrackBandwidth: (bandwidth: number) => Promise<void>;\n changeWebRTCLoggingSeverity: (severity: string) => Promise<void>;\n getStatistics: () => Promise<RTCStats>;\n startForegroundService: (config: ForegroundServiceConfig) => Promise<void>;\n stopForegroundService: () => void;\n getCameraPermissionsAsync: () => Promise<PermissionResponse>;\n requestCameraPermissionsAsync: () => Promise<PermissionResponse>;\n getMicrophonePermissionsAsync: () => Promise<PermissionResponse>;\n requestMicrophonePermissionsAsync: () => Promise<PermissionResponse>;\n};\n\nexport const ReceivableEvents = {\n IsMicrophoneOn: 'IsMicrophoneOn',\n IsScreenShareOn: 'IsScreenShareOn',\n IsAppScreenShareOn: 'IsAppScreenShareOn', // only for iOS\n SimulcastConfigUpdate: 'SimulcastConfigUpdate',\n PeersUpdate: 'PeersUpdate',\n AudioDeviceUpdate: 'AudioDeviceUpdate',\n BandwidthEstimation: 'BandwidthEstimation',\n ReconnectionRetriesLimitReached: 'ReconnectionRetriesLimitReached',\n ReconnectionStarted: 'ReconnectionStarted',\n Reconnected: 'Reconnected',\n Warning: 'Warning',\n PeerStatusChanged: 'PeerStatusChanged',\n ReconnectionStatusChanged: 'ReconnectionStatusChanged',\n CurrentCameraChanged: 'CurrentCameraChanged',\n TrackAspectRatioUpdated: 'TrackAspectRatioUpdated',\n} as const;\n\nexport type ReceivableEventPayloads = {\n [ReceivableEvents.IsMicrophoneOn]: boolean;\n [ReceivableEvents.IsScreenShareOn]: boolean;\n [ReceivableEvents.IsAppScreenShareOn]: boolean;\n [ReceivableEvents.SimulcastConfigUpdate]: SimulcastConfig;\n [ReceivableEvents.PeersUpdate]: void;\n [ReceivableEvents.AudioDeviceUpdate]: OnAudioDeviceEvent;\n [ReceivableEvents.BandwidthEstimation]: number | null;\n [ReceivableEvents.ReconnectionRetriesLimitReached]: void;\n [ReceivableEvents.ReconnectionStarted]: void;\n [ReceivableEvents.Reconnected]: void;\n [ReceivableEvents.Warning]: string;\n [ReceivableEvents.PeerStatusChanged]: PeerStatus;\n [ReceivableEvents.ReconnectionStatusChanged]: ReconnectionStatus;\n [ReceivableEvents.CurrentCameraChanged]: CurrentCameraChangedType;\n [ReceivableEvents.TrackAspectRatioUpdated]: {\n trackId: string;\n aspectRatio: number | null;\n };\n};\n\nexport default requireNativeModule('RNFishjamClient') as RNFishjamClient &\n NativeModule<\n Record<\n keyof typeof ReceivableEvents,\n (payload: ReceivableEventPayloads) => void\n >\n >;\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export type FishjamRoomProps = {
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* ID of your fishjam instance
|
|
4
4
|
*/
|
|
5
|
-
|
|
5
|
+
fishjamId: string;
|
|
6
6
|
/**
|
|
7
7
|
* Peer Token
|
|
8
8
|
*/
|
|
@@ -16,18 +16,18 @@ export type FishjamRoomProps = {
|
|
|
16
16
|
* import { FishjamRoom } from '@fishjam-cloud/react-native-client';
|
|
17
17
|
* import React from 'react';
|
|
18
18
|
*
|
|
19
|
-
* const
|
|
19
|
+
* const FISHJAM_ID = 'your-fishjam_id';
|
|
20
20
|
* const PEER_TOKEN = 'your-peer-token';
|
|
21
21
|
*
|
|
22
22
|
* <FishjamRoom
|
|
23
|
-
*
|
|
23
|
+
* fishjamId={FISHJAM_ID}
|
|
24
24
|
* peerToken={PEER_TOKEN}
|
|
25
25
|
* />
|
|
26
26
|
* ```
|
|
27
27
|
* @category Components
|
|
28
28
|
* @param {object} props
|
|
29
|
-
* @param {string} props.
|
|
29
|
+
* @param {string} props.fishjamId
|
|
30
30
|
* @param {string} props.peerToken
|
|
31
31
|
*/
|
|
32
|
-
export declare const FishjamRoom: ({
|
|
32
|
+
export declare const FishjamRoom: ({ fishjamId, peerToken }: FishjamRoomProps) => import("react").JSX.Element;
|
|
33
33
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/FishjamRoom/index.tsx"],"names":[],"mappings":"AAMA,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;OAEG;IACH,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/FishjamRoom/index.tsx"],"names":[],"mappings":"AAMA,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,WAAW,GAAI,0BAA0B,gBAAgB,gCA4BrE,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useEffect } from 'react';
|
|
2
|
-
import { joinRoom, leaveRoom } from '../../common/client';
|
|
3
2
|
import { useCamera } from '../../hooks/useCamera';
|
|
3
|
+
import { useConnection } from '../../hooks/useConnection';
|
|
4
4
|
import { VideosGrid } from './VideosGrid';
|
|
5
5
|
import { SafeAreaView } from 'react-native';
|
|
6
6
|
/**
|
|
@@ -11,21 +11,22 @@ import { SafeAreaView } from 'react-native';
|
|
|
11
11
|
* import { FishjamRoom } from '@fishjam-cloud/react-native-client';
|
|
12
12
|
* import React from 'react';
|
|
13
13
|
*
|
|
14
|
-
* const
|
|
14
|
+
* const FISHJAM_ID = 'your-fishjam_id';
|
|
15
15
|
* const PEER_TOKEN = 'your-peer-token';
|
|
16
16
|
*
|
|
17
17
|
* <FishjamRoom
|
|
18
|
-
*
|
|
18
|
+
* fishjamId={FISHJAM_ID}
|
|
19
19
|
* peerToken={PEER_TOKEN}
|
|
20
20
|
* />
|
|
21
21
|
* ```
|
|
22
22
|
* @category Components
|
|
23
23
|
* @param {object} props
|
|
24
|
-
* @param {string} props.
|
|
24
|
+
* @param {string} props.fishjamId
|
|
25
25
|
* @param {string} props.peerToken
|
|
26
26
|
*/
|
|
27
|
-
export const FishjamRoom = ({
|
|
27
|
+
export const FishjamRoom = ({ fishjamId, peerToken }) => {
|
|
28
28
|
const { prepareCamera } = useCamera();
|
|
29
|
+
const { leaveRoom, joinRoom } = useConnection();
|
|
29
30
|
useEffect(() => {
|
|
30
31
|
const join = async () => {
|
|
31
32
|
try {
|
|
@@ -34,10 +35,7 @@ export const FishjamRoom = ({ fishjamUrl, peerToken }) => {
|
|
|
34
35
|
quality: 'HD169',
|
|
35
36
|
cameraEnabled: true,
|
|
36
37
|
});
|
|
37
|
-
await joinRoom(
|
|
38
|
-
peer: {},
|
|
39
|
-
server: {},
|
|
40
|
-
});
|
|
38
|
+
await joinRoom({ fishjamId, peerToken });
|
|
41
39
|
}
|
|
42
40
|
catch (e) {
|
|
43
41
|
console.warn(e);
|
|
@@ -47,7 +45,7 @@ export const FishjamRoom = ({ fishjamUrl, peerToken }) => {
|
|
|
47
45
|
return () => {
|
|
48
46
|
leaveRoom();
|
|
49
47
|
};
|
|
50
|
-
}, [
|
|
48
|
+
}, [fishjamId, peerToken, prepareCamera, joinRoom, leaveRoom]);
|
|
51
49
|
return (<SafeAreaView>
|
|
52
50
|
<VideosGrid />
|
|
53
51
|
</SafeAreaView>);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/FishjamRoom/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/FishjamRoom/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAa5C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,EAAE,SAAS,EAAE,SAAS,EAAoB,EAAE,EAAE;IACxE,MAAM,EAAE,aAAa,EAAE,GAAG,SAAS,EAAE,CAAC;IACtC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,aAAa,EAAE,CAAC;IAEhD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;YACtB,IAAI,CAAC;gBACH,MAAM,aAAa,CAAC;oBAClB,gBAAgB,EAAE,IAAI;oBACtB,OAAO,EAAE,OAAO;oBAChB,aAAa,EAAE,IAAI;iBACpB,CAAC,CAAC;gBACH,MAAM,QAAQ,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;YAC3C,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC,CAAC;QACF,IAAI,EAAE,CAAC;QACP,OAAO,GAAG,EAAE;YACV,SAAS,EAAE,CAAC;QACd,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;IAE/D,OAAO,CACL,CAAC,YAAY,CACX;MAAA,CAAC,UAAU,CAAC,AAAD,EACb;IAAA,EAAE,YAAY,CAAC,CAChB,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { useEffect } from 'react';\nimport { useCamera } from '../../hooks/useCamera';\nimport { useConnection } from '../../hooks/useConnection';\nimport { VideosGrid } from './VideosGrid';\nimport { SafeAreaView } from 'react-native';\n\nexport type FishjamRoomProps = {\n /**\n * ID of your fishjam instance\n */\n fishjamId: string;\n /**\n * Peer Token\n */\n peerToken: string;\n};\n\n/**\n * Simple component that enables your camera and show all tracks\n *\n * Example usage:\n * ```tsx\n * import { FishjamRoom } from '@fishjam-cloud/react-native-client';\n * import React from 'react';\n *\n * const FISHJAM_ID = 'your-fishjam_id';\n * const PEER_TOKEN = 'your-peer-token';\n *\n * <FishjamRoom\n * fishjamId={FISHJAM_ID}\n * peerToken={PEER_TOKEN}\n * />\n * ```\n * @category Components\n * @param {object} props\n * @param {string} props.fishjamId\n * @param {string} props.peerToken\n */\nexport const FishjamRoom = ({ fishjamId, peerToken }: FishjamRoomProps) => {\n const { prepareCamera } = useCamera();\n const { leaveRoom, joinRoom } = useConnection();\n\n useEffect(() => {\n const join = async () => {\n try {\n await prepareCamera({\n simulcastEnabled: true,\n quality: 'HD169',\n cameraEnabled: true,\n });\n await joinRoom({ fishjamId, peerToken });\n } catch (e) {\n console.warn(e);\n }\n };\n join();\n return () => {\n leaveRoom();\n };\n }, [fishjamId, peerToken, prepareCamera, joinRoom, leaveRoom]);\n\n return (\n <SafeAreaView>\n <VideosGrid />\n </SafeAreaView>\n );\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFishjamEvent.d.ts","sourceRoot":"","sources":["../../../src/hooks/internal/useFishjamEvent.ts"],"names":[],"mappings":"AAEA,OAAqB,EACnB,gBAAgB,EAChB,uBAAuB,EACxB,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"useFishjamEvent.d.ts","sourceRoot":"","sources":["../../../src/hooks/internal/useFishjamEvent.ts"],"names":[],"mappings":"AAEA,OAAqB,EACnB,gBAAgB,EAChB,uBAAuB,EACxB,MAAM,6BAA6B,CAAC;AAIrC,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,OAAO,gBAAgB,EACrE,SAAS,EAAE,CAAC,EACZ,QAAQ,EAAE,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC,CAAC,KAAK,IAAI,QActD;AAED,wBAAgB,0BAA0B,CACxC,CAAC,SAAS,MAAM,OAAO,gBAAgB,EACvC,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,uBAAuB,CAAC,CAAC,CAAC,GAAG,IAAI,CAwBzD"}
|
|
@@ -2,6 +2,7 @@ import { ZodError } from 'zod';
|
|
|
2
2
|
import { useEffect } from 'react';
|
|
3
3
|
import nativeModule from '../../RNFishjamClientModule';
|
|
4
4
|
import { validateNativeEventPayload } from '../../utils/eventPayloadValidator';
|
|
5
|
+
import { getDebugConfig } from '../../utils/config';
|
|
5
6
|
export function useFishjamEvent(eventName, callback) {
|
|
6
7
|
useEffect(() => {
|
|
7
8
|
const eventListener = nativeModule.addListener(eventName, (event) => {
|
|
@@ -18,6 +19,8 @@ export function validateAndLogEventPayload(eventName, payload) {
|
|
|
18
19
|
// Double check just to make sure
|
|
19
20
|
if (!__DEV__)
|
|
20
21
|
return;
|
|
22
|
+
if (!getDebugConfig().validateEventPayloads)
|
|
23
|
+
return;
|
|
21
24
|
try {
|
|
22
25
|
validateNativeEventPayload(eventName, payload);
|
|
23
26
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFishjamEvent.js","sourceRoot":"","sources":["../../../src/hooks/internal/useFishjamEvent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,YAGN,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"useFishjamEvent.js","sourceRoot":"","sources":["../../../src/hooks/internal/useFishjamEvent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,YAGN,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,MAAM,UAAU,eAAe,CAC7B,SAAY,EACZ,QAAqD;IAErD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,aAAa,GAAG,YAAY,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;YAClE,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;YAEjC,IAAI,OAAO,EAAE,CAAC;gBACZ,0BAA0B,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACjD,CAAC;YAED,QAAQ,CAAC,OAAO,CAAC,CAAC;QACpB,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;AAED,MAAM,UAAU,0BAA0B,CAExC,SAAY,EAAE,OAAmC;IACjD,iCAAiC;IACjC,IAAI,CAAC,OAAO;QAAE,OAAO;IAErB,IAAI,CAAC,cAAc,EAAE,CAAC,qBAAqB;QAAE,OAAO;IAEpD,IAAI,CAAC;QACH,0BAA0B,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;YAC9B,OAAO,CAAC,KAAK,CACX,sCAAsC,SAAS,KAAK,EACpD,KAAK,CAAC,MAAM;iBACT,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC;iBACvD,IAAI,CAAC,IAAI,CAAC,EACb,iBAAiB,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CACxD,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CACX,iDAAiD,SAAS,GAAG,EAC7D,KAAK,CACN,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC","sourcesContent":["import { ZodError } from 'zod';\nimport { useEffect } from 'react';\nimport nativeModule, {\n ReceivableEvents,\n ReceivableEventPayloads,\n} from '../../RNFishjamClientModule';\nimport { validateNativeEventPayload } from '../../utils/eventPayloadValidator';\nimport { getDebugConfig } from '../../utils/config';\n\nexport function useFishjamEvent<T extends keyof typeof ReceivableEvents>(\n eventName: T,\n callback: (event: ReceivableEventPayloads[T]) => void,\n) {\n useEffect(() => {\n const eventListener = nativeModule.addListener(eventName, (event) => {\n const payload = event[eventName];\n\n if (__DEV__) {\n validateAndLogEventPayload(eventName, payload);\n }\n\n callback(payload);\n });\n return () => eventListener.remove();\n }, [callback, eventName]);\n}\n\nexport function validateAndLogEventPayload<\n T extends keyof typeof ReceivableEvents,\n>(eventName: T, payload: ReceivableEventPayloads[T]): void {\n // Double check just to make sure\n if (!__DEV__) return;\n\n if (!getDebugConfig().validateEventPayloads) return;\n\n try {\n validateNativeEventPayload(eventName, payload);\n } catch (error) {\n if (error instanceof ZodError) {\n console.error(\n `Invalid payload received for event ${eventName}:\\n`,\n error.errors\n .map((err) => `- ${err.path.join('.')}: ${err.message}`)\n .join('\\n'),\n `\\n Received:\\n${JSON.stringify(payload, null, 2)}\\n\\n`,\n );\n } else {\n console.error(\n `Unexpected error validating payload for event ${eventName}:`,\n error,\n );\n }\n }\n}\n"]}
|
|
@@ -5,7 +5,14 @@ export type AudioOutputDevice = {
|
|
|
5
5
|
name: string;
|
|
6
6
|
};
|
|
7
7
|
export type OnAudioDeviceEvent = {
|
|
8
|
+
/**
|
|
9
|
+
* Currently selected output audio device.
|
|
10
|
+
* On iOS this property can briefly become null, even if it was previously initialized, when AVAudioSession's .currentRoute is empty.
|
|
11
|
+
*/
|
|
8
12
|
selectedDevice: AudioOutputDevice | null;
|
|
13
|
+
/**
|
|
14
|
+
* [Android only] available audio output devices to be set
|
|
15
|
+
*/
|
|
9
16
|
availableDevices: AudioOutputDevice[];
|
|
10
17
|
};
|
|
11
18
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAudioSettings.d.ts","sourceRoot":"","sources":["../../src/hooks/useAudioSettings.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,qBAAqB,GAC7B,WAAW,GACX,SAAS,GACT,SAAS,GACT,UAAU,CAAC;AAEf,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,WAAW,CAAC;AAEzD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,qBAAqB,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,cAAc,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACzC,gBAAgB,EAAE,iBAAiB,EAAE,CAAC;CACvC,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,gBAAgB;IAkD5B;;OAEG;;IAEH;;OAEG;;IAEH;;;OAGG;sCA5CY,qBAAqB;IA8CpC;;;;OAIG;+CArCsB,gBAAgB;IAuCzC;;;OAGG;;EAGN"}
|
|
1
|
+
{"version":3,"file":"useAudioSettings.d.ts","sourceRoot":"","sources":["../../src/hooks/useAudioSettings.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,qBAAqB,GAC7B,WAAW,GACX,SAAS,GACT,SAAS,GACT,UAAU,CAAC;AAEf,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,WAAW,CAAC;AAEzD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,qBAAqB,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B;;;OAGG;IACH,cAAc,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACzC;;OAEG;IACH,gBAAgB,EAAE,iBAAiB,EAAE,CAAC;CACvC,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,gBAAgB;IAkD5B;;OAEG;;IAEH;;OAEG;;IAEH;;;OAGG;sCA5CY,qBAAqB;IA8CpC;;;;OAIG;+CArCsB,gBAAgB;IAuCzC;;;OAGG;;EAGN"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAudioSettings.js","sourceRoot":"","sources":["../../src/hooks/useAudioSettings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,OAAO,qBAAqB,EAAE,EAC5B,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"useAudioSettings.js","sourceRoot":"","sources":["../../src/hooks/useAudioSettings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,OAAO,qBAAqB,EAAE,EAC5B,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AA2BvE;;;;GAIG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,EAAE,cAAc,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,GACnE,oBAAoB,CAAC,gBAAgB,CAAC,iBAAiB,EAAE;QACvD,cAAc,EAAE,IAAI;QACpB,gBAAgB,EAAE,EAAE;KACrB,CAAC,CAAC;IAEL,SAAS,CAAC,GAAG,EAAE;QACb,qBAAqB,CAAC,kBAAkB,EAAE,CAAC;QAC3C,OAAO,GAAG,EAAE;YACV,IAAI,QAAQ,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;gBAC9B,qBAAqB,CAAC,iBAAiB,EAAE,CAAC;YAC5C,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,uBAAuB,GAAG,WAAW,CACzC,KAAK,EAAE,MAA6B,EAAE,EAAE;QACtC,IAAI,QAAQ,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;YAC1B,MAAM,KAAK,CACT,iEAAiE;gBAC/D,sGAAsG,CACzG,CAAC;QACJ,CAAC;QACD,MAAM,qBAAqB,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC3D,CAAC,EACD,EAAE,CACH,CAAC;IAEF,MAAM,sBAAsB,GAAG,WAAW,CACxC,KAAK,EAAE,gBAAkC,EAAE,EAAE;QAC3C,IAAI,QAAQ,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAC1E,CAAC;QACD,MAAM,qBAAqB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;IACvE,CAAC,EACD,EAAE,CACH,CAAC;IAEF,MAAM,oBAAoB,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAClD,IAAI,QAAQ,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,KAAK,CACT,0DAA0D;gBACxD,kFAAkF,CACrF,CAAC;QACJ,CAAC;QACD,MAAM,qBAAqB,CAAC,oBAAoB,EAAE,CAAC;IACrD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO;QACL;;WAEG;QACH,yBAAyB;QACzB;;WAEG;QACH,gBAAgB;QAChB;;;WAGG;QACH,uBAAuB;QACvB;;;;WAIG;QACH,sBAAsB;QACtB;;;WAGG;QACH,oBAAoB;KACrB,CAAC;AACJ,CAAC","sourcesContent":["import { useCallback, useEffect } from 'react';\nimport { Platform } from 'react-native';\n\nimport RNFishjamClientModule, {\n ReceivableEvents,\n} from '../RNFishjamClientModule';\nimport { useFishjamEventState } from './internal/useFishjamEventState';\n\nexport type AudioOutputDeviceType =\n | 'bluetooth'\n | 'headset'\n | 'speaker'\n | 'earpiece';\n\nexport type AudioSessionMode = 'voiceChat' | 'videoChat';\n\nexport type AudioOutputDevice = {\n type: AudioOutputDeviceType;\n name: string;\n};\n\nexport type OnAudioDeviceEvent = {\n /**\n * Currently selected output audio device.\n * On iOS this property can briefly become null, even if it was previously initialized, when AVAudioSession's .currentRoute is empty.\n */\n selectedDevice: AudioOutputDevice | null;\n /**\n * [Android only] available audio output devices to be set\n */\n availableDevices: AudioOutputDevice[];\n};\n\n/**\n * This hook manages audio settings.\n * @category Devices\n * @group Hooks\n */\nexport function useAudioSettings() {\n const { selectedDevice: selectedAudioOutputDevice, availableDevices } =\n useFishjamEventState(ReceivableEvents.AudioDeviceUpdate, {\n selectedDevice: null,\n availableDevices: [],\n });\n\n useEffect(() => {\n RNFishjamClientModule.startAudioSwitcher();\n return () => {\n if (Platform.OS === 'android') {\n RNFishjamClientModule.stopAudioSwitcher();\n }\n };\n }, []);\n\n const selectOutputAudioDevice = useCallback(\n async (device: AudioOutputDeviceType) => {\n if (Platform.OS === 'ios') {\n throw Error(\n 'selectOutputAudioDevice function is supported only on Android. ' +\n 'To select an output audio device on iOS use selectAudioSessionMode or showAudioRoutePicker functions',\n );\n }\n await RNFishjamClientModule.setOutputAudioDevice(device);\n },\n [],\n );\n\n const selectAudioSessionMode = useCallback(\n async (audioSessionMode: AudioSessionMode) => {\n if (Platform.OS === 'android') {\n throw Error('selectAudioSessionMode function is supported only on iOS');\n }\n await RNFishjamClientModule.selectAudioSessionMode(audioSessionMode);\n },\n [],\n );\n\n const showAudioRoutePicker = useCallback(async () => {\n if (Platform.OS === 'android') {\n throw Error(\n 'showAudioRoutePicker function is supported only on iOS. ' +\n 'To select an output audio device on Android use selectOutputAudioDevice function',\n );\n }\n await RNFishjamClientModule.showAudioRoutePicker();\n }, []);\n\n return {\n /**\n * currently selected output audio device\n */\n selectedAudioOutputDevice,\n /**\n * [Android only] available audio output devices to be set\n */\n availableDevices,\n /**\n * [Android only] selects output audio device.\n * For detecting and selecting bluettoth devices make sure you have the BLUETOOTH_CONNECT permission.\n */\n selectOutputAudioDevice,\n /**\n * [iOS only] selects audio session mode. For more information refer to Apple's documentation:\n * https://developer.apple.com/documentation/avfaudio/avaudiosession/mode/\n *\n */\n selectAudioSessionMode,\n /**\n * [iOS only] Shows a picker modal that allows user to select output audio device. For more\n * information refer to Apple's documentation: https://developer.apple.com/documentation/avkit/avroutepickerview\n */\n showAudioRoutePicker,\n };\n}\n"]}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { ConnectionConfig } from '../common/client';
|
|
2
1
|
import { GenericMetadata } from '../types';
|
|
3
2
|
/**
|
|
4
3
|
* Represents the possible statuses of a peer while reconnecting to room
|
|
@@ -18,6 +17,11 @@ export type ReconnectionStatus = 'idle' | 'reconnecting' | 'error';
|
|
|
18
17
|
*/
|
|
19
18
|
export type PeerStatus = 'connecting' | 'connected' | 'error' | 'idle';
|
|
20
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;
|
|
21
25
|
/**
|
|
22
26
|
* Token received from server (or Room Manager)
|
|
23
27
|
*/
|
|
@@ -30,22 +34,22 @@ export type JoinRoomConfig<PeerMetadata extends GenericMetadata = GenericMetadat
|
|
|
30
34
|
* Additional connection configuration
|
|
31
35
|
*/
|
|
32
36
|
config?: ConnectionConfig;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
* Fishjam ID, which is used to connect to the room.
|
|
36
|
-
* Only use in sandbox.
|
|
37
|
-
* If provided, `url` must not be set.
|
|
38
|
-
*/
|
|
39
|
-
fishjamId: string;
|
|
40
|
-
url?: never;
|
|
41
|
-
} | {
|
|
37
|
+
};
|
|
38
|
+
export type ConnectionConfig = {
|
|
42
39
|
/**
|
|
43
|
-
*
|
|
44
|
-
*
|
|
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
|
|
45
46
|
*/
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
47
|
+
reconnectConfig?: {
|
|
48
|
+
maxAttempts?: number;
|
|
49
|
+
initialDelayMs?: number;
|
|
50
|
+
delayMs?: number;
|
|
51
|
+
};
|
|
52
|
+
};
|
|
49
53
|
/**
|
|
50
54
|
* Connect/leave room. And get connection status.
|
|
51
55
|
* @group Hooks
|
|
@@ -57,7 +61,7 @@ export declare function useConnection(): {
|
|
|
57
61
|
*
|
|
58
62
|
* See {@link JoinRoomConfig} for parameter list
|
|
59
63
|
*/
|
|
60
|
-
joinRoom: <PeerMetadata extends GenericMetadata = GenericMetadata>({
|
|
64
|
+
joinRoom: <PeerMetadata extends GenericMetadata = GenericMetadata>({ peerToken, peerMetadata, config, fishjamId, }: JoinRoomConfig<PeerMetadata>) => Promise<void>;
|
|
61
65
|
/**
|
|
62
66
|
* Leave room and stop streaming
|
|
63
67
|
* @type function
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useConnection.d.ts","sourceRoot":"","sources":["../../src/hooks/useConnection.ts"],"names":[],"mappings":"
|
|
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,13 +1,18 @@
|
|
|
1
1
|
import { useCallback } from 'react';
|
|
2
|
-
import { joinRoom as joinRoomClient, leaveRoom as leaveRoomClient, } from '../common/client';
|
|
3
2
|
import RNFishjamClientModule, { ReceivableEvents, } from '../RNFishjamClientModule';
|
|
4
3
|
import { useFishjamEventState } from './internal/useFishjamEventState';
|
|
5
|
-
import {
|
|
4
|
+
import { getFishjamUrl } from '../utils/getFishjamUrl';
|
|
6
5
|
function useConnectionStatus() {
|
|
7
6
|
const peerStatus = useFishjamEventState(ReceivableEvents.PeerStatusChanged, RNFishjamClientModule.peerStatus);
|
|
8
7
|
const reconnectionStatus = useFishjamEventState(ReceivableEvents.ReconnectionStatusChanged, RNFishjamClientModule.reconnectionStatus);
|
|
9
8
|
return { peerStatus, reconnectionStatus };
|
|
10
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
|
+
}
|
|
11
16
|
/**
|
|
12
17
|
* Connect/leave room. And get connection status.
|
|
13
18
|
* @group Hooks
|
|
@@ -15,15 +20,9 @@ function useConnectionStatus() {
|
|
|
15
20
|
*/
|
|
16
21
|
export function useConnection() {
|
|
17
22
|
const { peerStatus, reconnectionStatus } = useConnectionStatus();
|
|
18
|
-
const joinRoom = useCallback(async ({
|
|
19
|
-
const connectUrl = fishjamId
|
|
20
|
-
|
|
21
|
-
: undefined;
|
|
22
|
-
const fishjamUrl = fishjamId ? connectUrl : url;
|
|
23
|
-
if (!fishjamUrl) {
|
|
24
|
-
throw new Error('Either fishjamId or url must be provided to join the room.');
|
|
25
|
-
}
|
|
26
|
-
await joinRoomClient(fishjamUrl, peerToken, peerMetadata, config);
|
|
23
|
+
const joinRoom = useCallback(async ({ peerToken, peerMetadata, config, fishjamId, }) => {
|
|
24
|
+
const connectUrl = getFishjamUrl(fishjamId);
|
|
25
|
+
await joinRoomClient(connectUrl, peerToken, peerMetadata, config);
|
|
27
26
|
}, []);
|
|
28
27
|
const leaveRoom = useCallback(() => {
|
|
29
28
|
leaveRoomClient();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useConnection.js","sourceRoot":"","sources":["../../src/hooks/useConnection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,
|
|
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,12 +1,12 @@
|
|
|
1
1
|
import { RoomType } from '../types';
|
|
2
2
|
export type UseSandboxProps = {
|
|
3
3
|
fishjamId: string;
|
|
4
|
-
|
|
4
|
+
sandboxApiUrl?: never;
|
|
5
5
|
} | {
|
|
6
6
|
fishjamId?: never;
|
|
7
|
-
|
|
7
|
+
sandboxApiUrl: string;
|
|
8
8
|
};
|
|
9
|
-
export declare const useSandbox: ({ fishjamId,
|
|
9
|
+
export declare const useSandbox: ({ fishjamId, sandboxApiUrl }: UseSandboxProps) => {
|
|
10
10
|
getSandboxPeerToken: (roomName: string, peerName: string, roomType?: RoomType) => Promise<string>;
|
|
11
11
|
getSandboxViewerToken: (roomName: string) => Promise<string>;
|
|
12
12
|
getSandboxLivestream: (roomName: string, isPublic?: boolean) => Promise<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSandbox.d.ts","sourceRoot":"","sources":["../../src/hooks/useSandbox.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"useSandbox.d.ts","sourceRoot":"","sources":["../../src/hooks/useSandbox.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAWpC,MAAM,MAAM,eAAe,GACvB;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,KAAK,CAAA;CAAE,GAC5C;IAAE,SAAS,CAAC,EAAE,KAAK,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjD,eAAO,MAAM,UAAU,GAAI,8BAA8B,eAAe;oCAMxD,MAAM,YACN,MAAM,aACN,QAAQ;sCA6BH,MAAM;qCA4BN,MAAM,aAAY,OAAO;uBAevB,MAAM;cACf;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE;;CAWzC,CAAC"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const getSandboxPeerToken = async (roomName, peerName, roomType = 'conference') => {
|
|
1
|
+
import { useCallback } from 'react';
|
|
2
|
+
import { getFishjamUrl } from '../utils/getFishjamUrl';
|
|
3
|
+
export const useSandbox = ({ fishjamId, sandboxApiUrl }) => {
|
|
4
|
+
const managerUrl = sandboxApiUrl ?? `${getFishjamUrl(fishjamId)}/room-manager`;
|
|
5
|
+
const getSandboxPeerToken = useCallback(async (roomName, peerName, roomType = 'conference') => {
|
|
7
6
|
try {
|
|
8
7
|
const url = new URL(managerUrl);
|
|
9
8
|
url.searchParams.set('roomName', roomName);
|
|
@@ -19,8 +18,8 @@ export const useSandbox = ({ fishjamId, fishjamUrl }) => {
|
|
|
19
18
|
catch (error) {
|
|
20
19
|
throw new Error(`Failed to get peer token for room '${roomName}', peer '${peerName}': ${error instanceof Error ? error.message : String(error)}`);
|
|
21
20
|
}
|
|
22
|
-
};
|
|
23
|
-
const getSandboxViewerToken = async (roomName) => {
|
|
21
|
+
}, [managerUrl]);
|
|
22
|
+
const getSandboxViewerToken = useCallback(async (roomName) => {
|
|
24
23
|
try {
|
|
25
24
|
const url = new URL(`${managerUrl}/${roomName}/livestream-viewer-token`);
|
|
26
25
|
const res = await fetch(url);
|
|
@@ -33,12 +32,11 @@ export const useSandbox = ({ fishjamId, fishjamUrl }) => {
|
|
|
33
32
|
catch (error) {
|
|
34
33
|
throw new Error(`Failed to get viewer token for room '${roomName}': ${error instanceof Error ? error.message : String(error)}`);
|
|
35
34
|
}
|
|
36
|
-
};
|
|
37
|
-
const getSandboxLivestream = async (roomName, isPublic = false) => {
|
|
35
|
+
}, [managerUrl]);
|
|
36
|
+
const getSandboxLivestream = useCallback(async (roomName, isPublic = false) => {
|
|
38
37
|
const url = new URL(`${managerUrl}/livestream`);
|
|
39
38
|
url.searchParams.set('roomName', roomName);
|
|
40
39
|
url.searchParams.set('public', isPublic.toString());
|
|
41
|
-
console.log({ sanurl: url.toString() });
|
|
42
40
|
const res = await fetch(url);
|
|
43
41
|
if (!res.ok) {
|
|
44
42
|
console.log(await res.json());
|
|
@@ -46,7 +44,7 @@ export const useSandbox = ({ fishjamId, fishjamUrl }) => {
|
|
|
46
44
|
}
|
|
47
45
|
const data = await res.json();
|
|
48
46
|
return data;
|
|
49
|
-
};
|
|
47
|
+
}, [managerUrl]);
|
|
50
48
|
return {
|
|
51
49
|
getSandboxPeerToken,
|
|
52
50
|
getSandboxViewerToken,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSandbox.js","sourceRoot":"","sources":["../../src/hooks/useSandbox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"useSandbox.js","sourceRoot":"","sources":["../../src/hooks/useSandbox.ts"],"names":[],"mappings":"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","sourcesContent":["import { useCallback } from 'react';\nimport { RoomType } from '../types';\nimport { getFishjamUrl } from '../utils/getFishjamUrl';\n\ntype BasicInfo = { id: string; name: string };\ntype RoomManagerResponse = {\n peerToken: string;\n url: string;\n room: BasicInfo;\n peer: BasicInfo;\n};\n\nexport type UseSandboxProps =\n | { fishjamId: string; sandboxApiUrl?: never }\n | { fishjamId?: never; sandboxApiUrl: string };\n\nexport const useSandbox = ({ fishjamId, sandboxApiUrl }: UseSandboxProps) => {\n const managerUrl =\n sandboxApiUrl ?? `${getFishjamUrl(fishjamId)}/room-manager`;\n\n const getSandboxPeerToken = useCallback(\n async (\n roomName: string,\n peerName: string,\n roomType: RoomType = 'conference',\n ) => {\n try {\n const url = new URL(managerUrl);\n url.searchParams.set('roomName', roomName);\n url.searchParams.set('peerName', peerName);\n url.searchParams.set('roomType', roomType);\n\n const res = await fetch(url.toString());\n\n if (!res.ok) {\n throw new Error(\n `Room '${roomName}' or peer '${peerName}' does not exist or cannot retrieve peer token.`,\n );\n }\n const data: RoomManagerResponse = await res.json();\n return data.peerToken;\n } catch (error) {\n throw new Error(\n `Failed to get peer token for room '${roomName}', peer '${peerName}': ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n },\n [managerUrl],\n );\n\n const getSandboxViewerToken = useCallback(\n async (roomName: string) => {\n try {\n const url = new URL(\n `${managerUrl}/${roomName}/livestream-viewer-token`,\n );\n const res = await fetch(url);\n\n if (!res.ok) {\n throw new Error(\n `Room '${roomName}' does not exist or cannot retrieve viewer token.`,\n );\n }\n\n const data: { token: string } = await res.json();\n\n return data.token;\n } catch (error) {\n throw new Error(\n `Failed to get viewer token for room '${roomName}': ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n },\n [managerUrl],\n );\n\n const getSandboxLivestream = useCallback(\n async (roomName: string, isPublic: boolean = false) => {\n const url = new URL(`${managerUrl}/livestream`);\n url.searchParams.set('roomName', roomName);\n url.searchParams.set('public', isPublic.toString());\n\n const res = await fetch(url);\n if (!res.ok) {\n console.log(await res.json());\n throw new Error(\n `Failed to retrieve streamer token for '${roomName}' livestream room.`,\n );\n }\n\n const data = await res.json();\n return data as {\n streamerToken: string;\n room: { id: string; name: string };\n };\n },\n [managerUrl],\n );\n\n return {\n getSandboxPeerToken,\n getSandboxViewerToken,\n getSandboxLivestream,\n };\n};\n"]}
|
package/build/index.d.ts
CHANGED
|
@@ -1,30 +1,17 @@
|
|
|
1
1
|
export type { SimulcastConfig, VideoLayout, GenericMetadata, TrackMetadata, Brand, RoomType, } from './types';
|
|
2
|
-
export type { ConnectionConfig } from './common/client';
|
|
3
2
|
export { updatePeerMetadata } from './common/metadata';
|
|
4
|
-
export {
|
|
5
|
-
/** @deprecated */
|
|
6
|
-
joinRoom,
|
|
7
|
-
/** @deprecated */
|
|
8
|
-
leaveRoom, } from './common/client';
|
|
9
3
|
export type { VideoPreviewViewProps } from './components/VideoPreviewView';
|
|
10
4
|
export type { VideoRendererProps } from './components/VideoRendererView';
|
|
11
|
-
export type { LivestreamViewerProps, LivestreamViewerRef, } from './components/LivestreamViewer';
|
|
12
5
|
export { VideoPreviewView } from './components/VideoPreviewView';
|
|
13
6
|
export { VideoRendererView } from './components/VideoRendererView';
|
|
14
|
-
export { LivestreamViewer } from './components/LivestreamViewer';
|
|
15
|
-
export { LivestreamStreamer } from './components/LivestreamStreamer';
|
|
16
7
|
export type { Peer, PeerId, Track, TrackId, TrackType, VadStatus, EncodingReason, TrackBase, AudioTrack, VideoTrack, UsePeersResult, PeerWithTracks, PeerTrackMetadata, DistinguishedTracks, } from './hooks/usePeers';
|
|
17
8
|
export type { AudioOutputDevice, AudioOutputDeviceType, AudioSessionMode, } from './hooks/useAudioSettings';
|
|
18
9
|
export type { CameraId, Camera, CameraConfig, VideoQuality, CameraFacingDirection, CameraConfigBase, } from './hooks/useCamera';
|
|
19
10
|
export type { ScreenShareOptions, ScreenShareQuality, } from './hooks/useScreenShare';
|
|
20
11
|
export type { ForegroundServiceConfig } from './hooks/useForegroundService';
|
|
21
|
-
export type { JoinRoomConfig, ReconnectionStatus, PeerStatus, } from './hooks/useConnection';
|
|
12
|
+
export type { JoinRoomConfig, ReconnectionStatus, PeerStatus, ConnectionConfig, } from './hooks/useConnection';
|
|
22
13
|
export type { AppScreenShareData } from './hooks/useAppScreenShare';
|
|
23
|
-
export type { useLivestreamViewerResult } from './hooks/useLivestreamViewer';
|
|
24
|
-
export type { useLivestreamStreamerResult } from './hooks/useLivestreamStreamer';
|
|
25
14
|
export type { UseSandboxProps } from './hooks/useSandbox';
|
|
26
|
-
export type { LivestreamStreamerProps } from './components/LivestreamStreamer';
|
|
27
|
-
export type { ConnectViewerConfig } from './hooks/useLivestreamViewer';
|
|
28
15
|
export { useAudioSettings } from './hooks/useAudioSettings';
|
|
29
16
|
export { useBandwidthEstimation } from './hooks/useBandwidthEstimation';
|
|
30
17
|
export { useCamera } from './hooks/useCamera';
|
|
@@ -37,11 +24,9 @@ export { usePeers } from './hooks/usePeers';
|
|
|
37
24
|
export { useForegroundService } from './hooks/useForegroundService';
|
|
38
25
|
export { useConnection } from './hooks/useConnection';
|
|
39
26
|
export { useUpdatePeerMetadata } from './hooks/useUpdatePeerMetadata';
|
|
40
|
-
export { useLivestreamViewer } from './hooks/useLivestreamViewer';
|
|
41
|
-
export { useLivestreamStreamer } from './hooks/useLivestreamStreamer';
|
|
42
27
|
export { useSandbox } from './hooks/useSandbox';
|
|
43
|
-
export { cameras } from 'react-native-whip-whep';
|
|
44
28
|
export { useCameraPermissions, useMicrophonePermissions, } from './hooks/usePermissions';
|
|
45
29
|
export type { FishjamRoomProps } from './components/FishjamRoom';
|
|
46
30
|
export { FishjamRoom } from './components/FishjamRoom';
|
|
31
|
+
export { setOverwriteDebugConfig, DebugConfig } from './utils/config';
|
|
47
32
|
//# sourceMappingURL=index.d.ts.map
|