@fishjam-cloud/react-native-client 0.2.4 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +9 -8
  3. package/android/build.gradle +4 -4
  4. package/android/src/main/java/io/fishjam/reactnative/EmitableEvents.kt +25 -12
  5. package/android/src/main/java/io/fishjam/reactnative/Errors.kt +1 -2
  6. package/android/src/main/java/io/fishjam/reactnative/RNFishjamClient.kt +94 -52
  7. package/android/src/main/java/io/fishjam/reactnative/RNFishjamClientModule.kt +42 -90
  8. package/android/src/main/java/io/fishjam/reactnative/VideoPreviewView.kt +14 -3
  9. package/android/src/main/java/io/fishjam/reactnative/VideoPreviewViewModule.kt +5 -0
  10. package/android/src/main/java/io/fishjam/reactnative/VideoRendererView.kt +4 -3
  11. package/android/src/main/java/io/fishjam/reactnative/VideoRendererViewModule.kt +2 -0
  12. package/android/src/main/java/io/fishjam/reactnative/VideoView.kt +3 -2
  13. package/android/src/main/java/io/fishjam/reactnative/{FishjamForegroundService.kt → foregroundService/FishjamForegroundService.kt} +7 -2
  14. package/android/src/main/java/io/fishjam/reactnative/foregroundService/ForegroundServiceManager.kt +147 -0
  15. package/android/src/main/java/io/fishjam/reactnative/managers/LocalCameraTracksChangedListenersManager.kt +21 -0
  16. package/android/src/main/java/io/fishjam/reactnative/managers/LocalTracksSwitchListenersManager.kt +27 -0
  17. package/android/src/main/java/io/fishjam/reactnative/managers/TracksUpdateListenersManager.kt +21 -0
  18. package/android/src/main/java/io/fishjam/reactnative/utils/PermissionUtils.kt +45 -0
  19. package/build/RNFishjamClientModule.d.ts +16 -10
  20. package/build/RNFishjamClientModule.d.ts.map +1 -1
  21. package/build/RNFishjamClientModule.js.map +1 -1
  22. package/build/common/client.d.ts +3 -3
  23. package/build/common/client.d.ts.map +1 -1
  24. package/build/common/client.js +4 -4
  25. package/build/common/client.js.map +1 -1
  26. package/build/common/metadata.d.ts +3 -3
  27. package/build/common/metadata.d.ts.map +1 -1
  28. package/build/common/metadata.js +4 -4
  29. package/build/common/metadata.js.map +1 -1
  30. package/build/common/webRTC.d.ts +0 -8
  31. package/build/common/webRTC.d.ts.map +1 -1
  32. package/build/common/webRTC.js +0 -9
  33. package/build/common/webRTC.js.map +1 -1
  34. package/build/components/VideoRendererView.d.ts +1 -1
  35. package/build/components/VideoRendererView.js +1 -1
  36. package/build/components/VideoRendererView.js.map +1 -1
  37. package/build/debug/common/webRTC.d.ts +9 -0
  38. package/build/debug/common/webRTC.d.ts.map +1 -0
  39. package/build/debug/common/webRTC.js +11 -0
  40. package/build/debug/common/webRTC.js.map +1 -0
  41. package/build/debug/index.d.ts +4 -0
  42. package/build/debug/index.d.ts.map +1 -0
  43. package/build/debug/index.js +3 -0
  44. package/build/debug/index.js.map +1 -0
  45. package/build/debug/stats/types.d.ts.map +1 -0
  46. package/build/debug/stats/types.js.map +1 -0
  47. package/build/debug/stats/useRTCStatistics.d.ts.map +1 -0
  48. package/build/{stats → debug/stats}/useRTCStatistics.js +1 -1
  49. package/build/debug/stats/useRTCStatistics.js.map +1 -0
  50. package/build/hooks/useAppScreenShare.d.ts +11 -0
  51. package/build/hooks/useAppScreenShare.d.ts.map +1 -0
  52. package/build/hooks/useAppScreenShare.js +54 -0
  53. package/build/hooks/useAppScreenShare.js.map +1 -0
  54. package/build/hooks/useFishjamEvent.d.ts +2 -0
  55. package/build/hooks/useFishjamEvent.d.ts.map +1 -1
  56. package/build/hooks/useFishjamEvent.js +2 -0
  57. package/build/hooks/useFishjamEvent.js.map +1 -1
  58. package/build/hooks/useForegroundService.d.ts +44 -0
  59. package/build/hooks/useForegroundService.d.ts.map +1 -0
  60. package/build/hooks/useForegroundService.js +57 -0
  61. package/build/hooks/useForegroundService.js.map +1 -0
  62. package/build/hooks/useMicrophone.d.ts +1 -1
  63. package/build/hooks/useMicrophone.js +1 -1
  64. package/build/hooks/useMicrophone.js.map +1 -1
  65. package/build/hooks/usePeerStatus.d.ts +19 -0
  66. package/build/hooks/usePeerStatus.d.ts.map +1 -0
  67. package/build/hooks/usePeerStatus.js +18 -0
  68. package/build/hooks/usePeerStatus.js.map +1 -0
  69. package/build/hooks/{useParticipants.d.ts → usePeers.d.ts} +11 -11
  70. package/build/hooks/usePeers.d.ts.map +1 -0
  71. package/build/hooks/usePeers.js +34 -0
  72. package/build/hooks/usePeers.js.map +1 -0
  73. package/build/hooks/useScreenShare.d.ts +1 -0
  74. package/build/hooks/useScreenShare.d.ts.map +1 -1
  75. package/build/hooks/useScreenShare.js +20 -13
  76. package/build/hooks/useScreenShare.js.map +1 -1
  77. package/build/index.d.ts +8 -7
  78. package/build/index.d.ts.map +1 -1
  79. package/build/index.js +5 -5
  80. package/build/index.js.map +1 -1
  81. package/build/types.d.ts +0 -25
  82. package/build/types.d.ts.map +1 -1
  83. package/build/types.js +1 -10
  84. package/build/types.js.map +1 -1
  85. package/debug/package.json +4 -0
  86. package/ios/Events.swift +30 -13
  87. package/ios/RNFishjamClient.podspec +1 -1
  88. package/ios/RNFishjamClient.swift +196 -106
  89. package/ios/RNFishjamClientModule.swift +34 -34
  90. package/ios/VideoPreviewView.swift +26 -12
  91. package/ios/VideoRendererView.swift +5 -14
  92. package/package.json +7 -6
  93. package/plugin/build/withFishjamAndroid.js +1 -1
  94. package/plugin/build/withFishjamIos.js +2 -2
  95. package/build/hooks/useParticipants.d.ts.map +0 -1
  96. package/build/hooks/useParticipants.js +0 -34
  97. package/build/hooks/useParticipants.js.map +0 -1
  98. package/build/stats/types.d.ts.map +0 -1
  99. package/build/stats/types.js.map +0 -1
  100. package/build/stats/useRTCStatistics.d.ts.map +0 -1
  101. package/build/stats/useRTCStatistics.js.map +0 -1
  102. package/build/utils/foregroundService.d.ts +0 -32
  103. package/build/utils/foregroundService.d.ts.map +0 -1
  104. package/build/utils/foregroundService.js +0 -43
  105. package/build/utils/foregroundService.js.map +0 -1
  106. /package/build/{stats → debug/stats}/types.d.ts +0 -0
  107. /package/build/{stats → debug/stats}/types.js +0 -0
  108. /package/build/{stats → debug/stats}/useRTCStatistics.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"useMicrophone.js","sourceRoot":"","sources":["../../src/hooks/useMicrophone.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE9C,OAAO,qBAAqB,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEtE;;;;GAIG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAClD,qBAAqB,CAAC,cAAc,CACrC,CAAC;IAEF,eAAe,CAAC,gBAAgB,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;IAEpE,MAAM,gBAAgB,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAC9C,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,gBAAgB,EAAE,CAAC;QAC9D,MAAM,qBAAqB,CAAC,wBAAwB,CAAC;YACnD,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,OAAO;SACd,CAAC,CAAC;QACH,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO;QACL,+CAA+C;QAC/C,cAAc;QACd,2CAA2C;QAC3C,gBAAgB;KACjB,CAAC;AACJ,CAAC","sourcesContent":["import { useCallback, useState } from 'react';\n\nimport RNFishjamClientModule from '../RNFishjamClientModule';\nimport { ReceivableEvents, useFishjamEvent } from './useFishjamEvent';\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, setIsMicrophoneOn] = useState<boolean>(\n RNFishjamClientModule.isMicrophoneOn,\n );\n\n useFishjamEvent(ReceivableEvents.IsMicrophoneOn, setIsMicrophoneOn);\n\n const toggleMicrophone = useCallback(async () => {\n const status = await RNFishjamClientModule.toggleMicrophone();\n await RNFishjamClientModule.updateAudioTrackMetadata({\n active: status,\n type: 'audio',\n });\n setIsMicrophoneOn(status);\n }, []);\n\n return {\n /** Informs if microhpone is streaming audio */\n isMicrophoneOn,\n /** Function to toggle microphone on/off */\n toggleMicrophone,\n };\n}\n"]}
1
+ {"version":3,"file":"useMicrophone.js","sourceRoot":"","sources":["../../src/hooks/useMicrophone.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE9C,OAAO,qBAAqB,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEtE;;;;GAIG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAClD,qBAAqB,CAAC,cAAc,CACrC,CAAC;IAEF,eAAe,CAAC,gBAAgB,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;IAEpE,MAAM,gBAAgB,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAC9C,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,gBAAgB,EAAE,CAAC;QAC9D,MAAM,qBAAqB,CAAC,wBAAwB,CAAC;YACnD,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,OAAO;SACd,CAAC,CAAC;QACH,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO;QACL,+CAA+C;QAC/C,cAAc;QACd,2CAA2C;QAC3C,gBAAgB;KACjB,CAAC;AACJ,CAAC","sourcesContent":["import { useCallback, useState } from 'react';\n\nimport RNFishjamClientModule from '../RNFishjamClientModule';\nimport { ReceivableEvents, useFishjamEvent } from './useFishjamEvent';\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, setIsMicrophoneOn] = useState<boolean>(\n RNFishjamClientModule.isMicrophoneOn,\n );\n\n useFishjamEvent(ReceivableEvents.IsMicrophoneOn, setIsMicrophoneOn);\n\n const toggleMicrophone = useCallback(async () => {\n const status = await RNFishjamClientModule.toggleMicrophone();\n await RNFishjamClientModule.updateAudioTrackMetadata({\n active: status,\n type: 'audio',\n });\n setIsMicrophoneOn(status);\n }, []);\n\n return {\n /** Informs if microphone is streaming audio */\n isMicrophoneOn,\n /** Function to toggle microphone on/off */\n toggleMicrophone,\n };\n}\n"]}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Represents the possible statuses of a peer connection to a room (websocket state).
3
+ *
4
+ * idle - Peer is not connected, either never connected or successfully disconnected.
5
+ * connecting - Peer is in the process of connecting.
6
+ * connected - Peer has successfully connected.
7
+ * error - There was an error in the connection process.
8
+ */
9
+ export type PeerStatus = 'connecting' | 'connected' | 'error' | 'idle';
10
+ /**
11
+ * This hook provides live updates of current connection state of the local peer to a room (websocket state)
12
+ * @returns Current peer status.
13
+ * @category Connection
14
+ * @group Hooks
15
+ */
16
+ export declare const usePeerStatus: () => {
17
+ peerStatus: "connecting" | "connected" | "error" | "idle";
18
+ };
19
+ //# sourceMappingURL=usePeerStatus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePeerStatus.d.ts","sourceRoot":"","sources":["../../src/hooks/usePeerStatus.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AACH,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG,WAAW,GAAG,OAAO,GAAG,MAAM,CAAC;AAEvE;;;;;GAKG;AACH,eAAO,MAAM,aAAa;;CAYzB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { useCallback, useState } from 'react';
2
+ import { ReceivableEvents, useFishjamEvent } from './useFishjamEvent';
3
+ import RNFishjamClientModule from '../RNFishjamClientModule';
4
+ /**
5
+ * This hook provides live updates of current connection state of the local peer to a room (websocket state)
6
+ * @returns Current peer status.
7
+ * @category Connection
8
+ * @group Hooks
9
+ */
10
+ export const usePeerStatus = () => {
11
+ const [peerStatus, setPeerStatus] = useState(RNFishjamClientModule.peerStatus);
12
+ const onPeerStatusChanged = useCallback((status) => {
13
+ status && setPeerStatus(status);
14
+ }, []);
15
+ useFishjamEvent(ReceivableEvents.PeerStatusChanged, onPeerStatusChanged);
16
+ return { peerStatus };
17
+ };
18
+ //# sourceMappingURL=usePeerStatus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePeerStatus.js","sourceRoot":"","sources":["../../src/hooks/usePeerStatus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,qBAAqB,MAAM,0BAA0B,CAAC;AAY7D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,EAAE;IAChC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAC1C,qBAAqB,CAAC,UAAU,CACjC,CAAC;IAEF,MAAM,mBAAmB,GAAG,WAAW,CAAC,CAAC,MAAmB,EAAE,EAAE;QAC9D,MAAM,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,eAAe,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,mBAAmB,CAAC,CAAC;IAEzE,OAAO,EAAE,UAAU,EAAE,CAAC;AACxB,CAAC,CAAC","sourcesContent":["import { useCallback, useState } from 'react';\nimport { ReceivableEvents, useFishjamEvent } from './useFishjamEvent';\nimport RNFishjamClientModule from '../RNFishjamClientModule';\n\n/**\n * Represents the possible statuses of a peer connection to a room (websocket state).\n *\n * idle - Peer is not connected, either never connected or successfully disconnected.\n * connecting - Peer is in the process of connecting.\n * connected - Peer has successfully connected.\n * error - There was an error in the connection process.\n */\nexport type PeerStatus = 'connecting' | 'connected' | 'error' | 'idle';\n\n/**\n * This hook provides live updates of current connection state of the local peer to a room (websocket state)\n * @returns Current peer status.\n * @category Connection\n * @group Hooks\n */\nexport const usePeerStatus = () => {\n const [peerStatus, setPeerStatus] = useState(\n RNFishjamClientModule.peerStatus,\n );\n\n const onPeerStatusChanged = useCallback((status?: PeerStatus) => {\n status && setPeerStatus(status);\n }, []);\n\n useFishjamEvent(ReceivableEvents.PeerStatusChanged, onPeerStatusChanged);\n\n return { peerStatus };\n};\n"]}
@@ -30,32 +30,32 @@ export type Track = VideoTrack | AudioTrack;
30
30
  * - low_bandwidth - there is no longer enough bandwidth to maintain previously selected encoding
31
31
  */
32
32
  export type EncodingReason = 'other' | 'encoding_inactive' | 'low_bandwidth';
33
- export type Participant<ParticipantMetadata extends GenericMetadata = GenericMetadata> = {
33
+ export type Peer<PeerMetadata extends GenericMetadata = GenericMetadata> = {
34
34
  /**
35
- * id used to identify a participant
35
+ * id used to identify a peer
36
36
  */
37
37
  id: string;
38
38
  /**
39
- * whether the participant is local or remote
39
+ * whether the peer is local or remote
40
40
  */
41
41
  isLocal: boolean;
42
42
  /**
43
- * a map indexed by strings, containing participant metadata from the server
43
+ * a map indexed by strings, containing peer metadata from the server
44
44
  */
45
- metadata: ParticipantMetadata;
45
+ metadata: PeerMetadata;
46
46
  /**
47
- * a list of participants's video and audio tracks
47
+ * a list of peer's video and audio tracks
48
48
  */
49
49
  tracks: Track[];
50
50
  };
51
51
  /**
52
- * This hook provides live updates of room participants.
53
- * @returns An array of room participants.
52
+ * This hook provides live updates of room peers.
53
+ * @returns An array of room peers.
54
54
  * @category Connection
55
55
  * @group Hooks
56
56
  */
57
- export declare function useParticipants<ParticipantMetadata extends GenericMetadata = GenericMetadata>(): {
58
- participants: Participant<ParticipantMetadata>[];
57
+ export declare function usePeers<PeerMetadata extends GenericMetadata = GenericMetadata>(): {
58
+ peers: Peer<PeerMetadata>[];
59
59
  };
60
60
  export {};
61
- //# sourceMappingURL=useParticipants.d.ts.map
61
+ //# sourceMappingURL=usePeers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePeers.d.ts","sourceRoot":"","sources":["../../src/hooks/usePeers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,aAAa,EAAiB,MAAM,UAAU,CAAC;AAIzE,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;AAE1C;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE7C,KAAK,SAAS,GAAG;IACf,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG;IACnC,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,SAAS,GAAG,SAAS,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG;IACnC,IAAI,EAAE,OAAO,CAAC;IAEd,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IAE/B,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,KAAK,GAAG,UAAU,GAAG,UAAU,CAAC;AAC5C;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,mBAAmB,GAAG,eAAe,CAAC;AAE7E,MAAM,MAAM,IAAI,CAAC,YAAY,SAAS,eAAe,GAAG,eAAe,IAAI;IACzE;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IACX;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,QAAQ,EAAE,YAAY,CAAC;IACvB;;OAEG;IACH,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB,CAAC;AAcF;;;;;GAKG;AACH,wBAAgB,QAAQ,CACtB,YAAY,SAAS,eAAe,GAAG,eAAe;;EAoBvD"}
@@ -0,0 +1,34 @@
1
+ import { useCallback, useEffect, useState } from 'react';
2
+ import RNFishjamClientModule from '../RNFishjamClientModule';
3
+ import { ReceivableEvents, useFishjamEvent } from './useFishjamEvent';
4
+ function addIsActiveToTracks(peers) {
5
+ return peers.map((peer) => ({
6
+ ...peer,
7
+ tracks: peer.tracks.map((track) => ({
8
+ ...track,
9
+ isActive: track?.metadata?.active ?? true,
10
+ })),
11
+ }));
12
+ }
13
+ /**
14
+ * This hook provides live updates of room peers.
15
+ * @returns An array of room peers.
16
+ * @category Connection
17
+ * @group Hooks
18
+ */
19
+ export function usePeers() {
20
+ const [peers, setPeers] = useState([]);
21
+ const updateActivePeers = useCallback((peers) => {
22
+ setPeers(addIsActiveToTracks(peers));
23
+ }, []);
24
+ useFishjamEvent(ReceivableEvents.PeersUpdate, updateActivePeers);
25
+ useEffect(() => {
26
+ async function updatePeers() {
27
+ const peers = await RNFishjamClientModule.getPeers();
28
+ setPeers(addIsActiveToTracks(peers));
29
+ }
30
+ updatePeers();
31
+ }, []);
32
+ return { peers };
33
+ }
34
+ //# sourceMappingURL=usePeers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePeers.js","sourceRoot":"","sources":["../../src/hooks/usePeers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAGzD,OAAO,qBAAqB,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AA4DtE,SAAS,mBAAmB,CAE1B,KAAwC;IACxC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC1B,GAAG,IAAI;QACP,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAClC,GAAG,KAAK;YACR,QAAQ,EACL,KAAsC,EAAE,QAAQ,EAAE,MAAM,IAAI,IAAI;SACpE,CAAC,CAAC;KACJ,CAAC,CAAC,CAAC;AACN,CAAC;AACD;;;;;GAKG;AACH,MAAM,UAAU,QAAQ;IAGtB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAuB,EAAE,CAAC,CAAC;IAE7D,MAAM,iBAAiB,GAAG,WAAW,CAAC,CAAC,KAA2B,EAAE,EAAE;QACpE,QAAQ,CAAC,mBAAmB,CAAe,KAAK,CAAC,CAAC,CAAC;IACrD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,eAAe,CAAC,gBAAgB,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;IAEjE,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,UAAU,WAAW;YACxB,MAAM,KAAK,GAAG,MAAM,qBAAqB,CAAC,QAAQ,EAAgB,CAAC;YACnE,QAAQ,CAAC,mBAAmB,CAAe,KAAK,CAAC,CAAC,CAAC;QACrD,CAAC;QAED,WAAW,EAAE,CAAC;IAChB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC","sourcesContent":["import { useCallback, useEffect, useState } from 'react';\n\nimport { GenericMetadata, TrackEncoding, TrackMetadata } from '../types';\nimport RNFishjamClientModule from '../RNFishjamClientModule';\nimport { ReceivableEvents, useFishjamEvent } from './useFishjamEvent';\n\nexport type TrackType = 'Audio' | 'Video';\n\n/**\n * Type describing Voice Activity Detection statuses.\n *\n * speech - voice activity has been detected\n * silence - lack of voice activity has been detected\n */\nexport type VadStatus = 'silence' | 'speech';\n\ntype TrackBase = {\n id: string;\n type: TrackType;\n isActive: boolean;\n};\n\nexport type AudioTrack = TrackBase & {\n type: 'Audio';\n vadStatus: VadStatus | undefined;\n};\n\nexport type VideoTrack = TrackBase & {\n type: 'Video';\n // Encoding that is currently received. Only present for remote tracks.\n encoding: TrackEncoding | null;\n // The reason of currently selected encoding. Only present for remote tracks.\n encodingReason: EncodingReason | null;\n};\n\nexport type Track = VideoTrack | AudioTrack;\n/**\n * Type describing possible reasons of currently selected encoding.\n *\n * - other - the exact reason couldn't be determined\n * - encoding_inactive - previously selected encoding became inactive\n * - low_bandwidth - there is no longer enough bandwidth to maintain previously selected encoding\n */\nexport type EncodingReason = 'other' | 'encoding_inactive' | 'low_bandwidth';\n\nexport type Peer<PeerMetadata extends GenericMetadata = GenericMetadata> = {\n /**\n * id used to identify a peer\n */\n id: string;\n /**\n * whether the peer is local or remote\n */\n isLocal: boolean;\n /**\n * a map indexed by strings, containing peer metadata from the server\n */\n metadata: PeerMetadata;\n /**\n * a list of peer's video and audio tracks\n */\n tracks: Track[];\n};\n\nfunction addIsActiveToTracks<\n PeerMetadata extends GenericMetadata = GenericMetadata,\n>(peers: ReadonlyArray<Peer<PeerMetadata>>): Peer<PeerMetadata>[] {\n return peers.map((peer) => ({\n ...peer,\n tracks: peer.tracks.map((track) => ({\n ...track,\n isActive:\n (track as { metadata?: TrackMetadata })?.metadata?.active ?? true,\n })),\n }));\n}\n/**\n * This hook provides live updates of room peers.\n * @returns An array of room peers.\n * @category Connection\n * @group Hooks\n */\nexport function usePeers<\n PeerMetadata extends GenericMetadata = GenericMetadata,\n>() {\n const [peers, setPeers] = useState<Peer<PeerMetadata>[]>([]);\n\n const updateActivePeers = useCallback((peers: Peer<PeerMetadata>[]) => {\n setPeers(addIsActiveToTracks<PeerMetadata>(peers));\n }, []);\n\n useFishjamEvent(ReceivableEvents.PeersUpdate, updateActivePeers);\n\n useEffect(() => {\n async function updatePeers() {\n const peers = await RNFishjamClientModule.getPeers<PeerMetadata>();\n setPeers(addIsActiveToTracks<PeerMetadata>(peers));\n }\n\n updatePeers();\n }, []);\n\n return { peers };\n}\n"]}
@@ -33,6 +33,7 @@ export declare function useScreenShare(): {
33
33
  simulcastConfig: SimulcastConfig;
34
34
  /**
35
35
  * Toggles the screen share on/off
36
+ * Emits warning on ios when user is screensharing app screen.
36
37
  */
37
38
  toggleScreenShare: (screenShareOptions?: Partial<ScreenShareOptions>) => Promise<void>;
38
39
  handleScreenSharePermission: () => Promise<"granted" | "denied">;
@@ -1 +1 @@
1
- {"version":3,"file":"useScreenShare.d.ts","sourceRoot":"","sources":["../../src/hooks/useScreenShare.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,aAAa,EACb,aAAa,EACd,MAAM,UAAU,CAAC;AAKlB,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAE5E,MAAM,MAAM,kBAAkB,GAAG;IAC/B;;;;;OAKG;IACH,OAAO,EAAE,kBAAkB,CAAC;IAC5B;;OAEG;IACH,YAAY,EAAE,mBAAmB,CAAC;CACnC,CAAC;AACF,MAAM,MAAM,0BAA0B,GAAG;IACvC,mBAAmB,EAAE,aAAa,GAAG;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9D;;OAEG;IACH,eAAe,EAAE,eAAe,CAAC;CAClC,CAAC;AASF;;;;;GAKG;AACH,wBAAgB,cAAc;;;IAiE1B;;OAEG;6CAvDwB,OAAO,CAAC,kBAAkB,CAAC;;IA2DtD;;OAEG;8CAzBe,cAAc;IA2BhC;;;;OAIG;+CAlDc,aAAa;IAoD9B;;;;;OAKG;qDAhDc,aAAa,aAAa,cAAc;EA2D5D"}
1
+ {"version":3,"file":"useScreenShare.d.ts","sourceRoot":"","sources":["../../src/hooks/useScreenShare.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,aAAa,EACb,aAAa,EACd,MAAM,UAAU,CAAC;AAKlB,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAE5E,MAAM,MAAM,kBAAkB,GAAG;IAC/B;;;;;OAKG;IACH,OAAO,EAAE,kBAAkB,CAAC;IAC5B;;OAEG;IACH,YAAY,EAAE,mBAAmB,CAAC;CACnC,CAAC;AACF,MAAM,MAAM,0BAA0B,GAAG;IACvC,mBAAmB,EAAE,aAAa,GAAG;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9D;;OAEG;IACH,eAAe,EAAE,eAAe,CAAC;CAClC,CAAC;AASF;;;;;GAKG;AACH,wBAAgB,cAAc;;;IAuE1B;;;OAGG;6CA7BwB,OAAO,CAAC,kBAAkB,CAAC;;IAiCtD;;OAEG;8CAjDe,cAAc;IAmDhC;;;;OAIG;+CA1Ec,aAAa;IA4E9B;;;;;OAKG;qDAxEc,aAAa,aAAa,cAAc;EAmF5D"}
@@ -17,19 +17,6 @@ export function useScreenShare() {
17
17
  const [isScreenShareOn, setIsScreenShareOn] = useState(RNFishjamClientModule.isScreenShareOn);
18
18
  const [simulcastConfig, setSimulcastConfig] = useState(screenShareSimulcastConfig);
19
19
  useFishjamEvent(ReceivableEvents.IsScreenShareOn, setIsScreenShareOn);
20
- const toggleScreenShare = useCallback(async (screenShareOptions = {}) => {
21
- const options = {
22
- ...screenShareOptions,
23
- screenShareMetadata: {
24
- displayName: 'presenting',
25
- type: 'screensharing',
26
- active: !isScreenShareOn,
27
- },
28
- };
29
- await RNFishjamClientModule.toggleScreenShare(options);
30
- screenShareSimulcastConfig = defaultSimulcastConfig(); //to do: sync with camera settings
31
- setSimulcastConfig(screenShareSimulcastConfig);
32
- }, [isScreenShareOn]);
33
20
  const toggleScreenShareTrackEncoding = useCallback(async (encoding) => {
34
21
  screenShareSimulcastConfig =
35
22
  await RNFishjamClientModule.toggleScreenShareTrackEncoding(encoding);
@@ -47,11 +34,31 @@ export function useScreenShare() {
47
34
  }
48
35
  return 'denied';
49
36
  }, []);
37
+ const toggleScreenShare = useCallback(async (screenShareOptions = {}) => {
38
+ if (Platform.OS === 'android' && !isScreenShareOn) {
39
+ (await handleScreenSharePermission()) == 'granted' &&
40
+ (await RNFishjamClientModule.startForegroundService({
41
+ enableScreenSharing: true,
42
+ }));
43
+ }
44
+ const options = {
45
+ ...screenShareOptions,
46
+ screenShareMetadata: {
47
+ displayName: 'presenting',
48
+ type: 'screensharing',
49
+ active: !isScreenShareOn,
50
+ },
51
+ };
52
+ await RNFishjamClientModule.toggleScreenShare(options);
53
+ screenShareSimulcastConfig = defaultSimulcastConfig(); //to do: sync with camera settings
54
+ setSimulcastConfig(screenShareSimulcastConfig);
55
+ }, [isScreenShareOn, handleScreenSharePermission]);
50
56
  return {
51
57
  isScreenShareOn,
52
58
  simulcastConfig,
53
59
  /**
54
60
  * Toggles the screen share on/off
61
+ * Emits warning on ios when user is screensharing app screen.
55
62
  */
56
63
  toggleScreenShare,
57
64
  handleScreenSharePermission,
@@ -1 +1 @@
1
- {"version":3,"file":"useScreenShare.js","sourceRoot":"","sources":["../../src/hooks/useScreenShare.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAS9C,OAAO,qBAAqB,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAyBtE,MAAM,sBAAsB,GAAG,GAAG,EAAE,CAAC,CAAC;IACpC,OAAO,EAAE,KAAK;IACd,eAAe,EAAE,EAAE;CACpB,CAAC,CAAC;AAEH,IAAI,0BAA0B,GAAoB,sBAAsB,EAAE,CAAC;AAE3E;;;;;GAKG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CACpD,qBAAqB,CAAC,eAAe,CACtC,CAAC;IAEF,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CACpD,0BAA0B,CAC3B,CAAC;IAEF,eAAe,CAAC,gBAAgB,CAAC,eAAe,EAAE,kBAAkB,CAAC,CAAC;IAEtE,MAAM,iBAAiB,GAAG,WAAW,CACnC,KAAK,EAAE,qBAAkD,EAAE,EAAE,EAAE;QAC7D,MAAM,OAAO,GAAG;YACd,GAAG,kBAAkB;YACrB,mBAAmB,EAAE;gBACnB,WAAW,EAAE,YAAY;gBACzB,IAAI,EAAE,eAAwB;gBAC9B,MAAM,EAAE,CAAC,eAAe;aACzB;SACF,CAAC;QACF,MAAM,qBAAqB,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACvD,0BAA0B,GAAG,sBAAsB,EAAE,CAAC,CAAC,kCAAkC;QACzF,kBAAkB,CAAC,0BAA0B,CAAC,CAAC;IACjD,CAAC,EACD,CAAC,eAAe,CAAC,CAClB,CAAC;IAEF,MAAM,8BAA8B,GAAG,WAAW,CAChD,KAAK,EAAE,QAAuB,EAAE,EAAE;QAChC,0BAA0B;YACxB,MAAM,qBAAqB,CAAC,8BAA8B,CAAC,QAAQ,CAAC,CAAC;QACvE,kBAAkB,CAAC,0BAA0B,CAAC,CAAC;IACjD,CAAC,EACD,EAAE,CACH,CAAC;IAEF,MAAM,oCAAoC,GAAG,WAAW,CACtD,KAAK,EAAE,QAAuB,EAAE,SAAyB,EAAE,EAAE;QAC3D,MAAM,qBAAqB,CAAC,oCAAoC,CAC9D,QAAQ,EACR,SAAS,CACV,CAAC;IACJ,CAAC,EACD,EAAE,CACH,CAAC;IAEF,MAAM,4BAA4B,GAAG,WAAW,CAC9C,KAAK,EAAE,SAAyB,EAAE,EAAE;QAClC,MAAM,qBAAqB,CAAC,4BAA4B,CAAC,SAAS,CAAC,CAAC;IACtE,CAAC,EACD,EAAE,CACH,CAAC;IAEF,MAAM,2BAA2B,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACzD,IAAI,QAAQ,CAAC,EAAE,IAAI,SAAS,EAAE,CAAC;YAC7B,OAAO,MAAM,qBAAqB,CAAC,2BAA2B,EAAE,CAAC;QACnE,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO;QACL,eAAe;QACf,eAAe;QAEf;;WAEG;QACH,iBAAiB;QACjB,2BAA2B;QAE3B;;WAEG;QACH,4BAA4B;QAC5B;;;;WAIG;QACH,8BAA8B;QAC9B;;;;;WAKG;QACH,oCAAoC;QACpC;;;;;;;WAOG;KACJ,CAAC;AACJ,CAAC","sourcesContent":["import { useCallback, useState } from 'react';\n\nimport {\n BandwidthLimit,\n SimulcastConfig,\n TrackBandwidthLimit,\n TrackEncoding,\n TrackMetadata,\n} from '../types';\nimport RNFishjamClientModule from '../RNFishjamClientModule';\nimport { Platform } from 'react-native';\nimport { ReceivableEvents, useFishjamEvent } from './useFishjamEvent';\n\nexport type ScreenShareQuality = 'VGA' | 'HD5' | 'HD15' | 'FHD15' | 'FHD30';\n\nexport type ScreenShareOptions = {\n /**\n * Resolution + fps of screen share track, one of: `VGA`, `HD5`, `HD15`, `FHD15`, `FHD30`.\n * Note that quality might be worse than specified due to device capabilities, internet\n * connection etc.\n * @default `HD15``\n */\n quality: ScreenShareQuality;\n /**\n * bandwidth limit of a screen share track. By default there is no bandwidth limit.\n */\n maxBandwidth: TrackBandwidthLimit;\n};\nexport type ScreenShareOptionsInternal = {\n screenShareMetadata: TrackMetadata & { displayName?: string };\n /**\n * SimulcastConfig of a screen share track. By default simulcast is disabled.\n */\n simulcastConfig: SimulcastConfig;\n};\n\nconst defaultSimulcastConfig = () => ({\n enabled: false,\n activeEncodings: [],\n});\n\nlet screenShareSimulcastConfig: SimulcastConfig = defaultSimulcastConfig();\n\n/**\n * This hook can toggle screen sharing on/off and provides current screen share state.\n * @returns An object with functions to manage screen share.\n * @category Screenshare\n * @group Hooks\n */\nexport function useScreenShare() {\n const [isScreenShareOn, setIsScreenShareOn] = useState(\n RNFishjamClientModule.isScreenShareOn,\n );\n\n const [simulcastConfig, setSimulcastConfig] = useState<SimulcastConfig>(\n screenShareSimulcastConfig,\n );\n\n useFishjamEvent(ReceivableEvents.IsScreenShareOn, setIsScreenShareOn);\n\n const toggleScreenShare = useCallback(\n async (screenShareOptions: Partial<ScreenShareOptions> = {}) => {\n const options = {\n ...screenShareOptions,\n screenShareMetadata: {\n displayName: 'presenting',\n type: 'screensharing' as const,\n active: !isScreenShareOn,\n },\n };\n await RNFishjamClientModule.toggleScreenShare(options);\n screenShareSimulcastConfig = defaultSimulcastConfig(); //to do: sync with camera settings\n setSimulcastConfig(screenShareSimulcastConfig);\n },\n [isScreenShareOn],\n );\n\n const toggleScreenShareTrackEncoding = useCallback(\n async (encoding: TrackEncoding) => {\n screenShareSimulcastConfig =\n await RNFishjamClientModule.toggleScreenShareTrackEncoding(encoding);\n setSimulcastConfig(screenShareSimulcastConfig);\n },\n [],\n );\n\n const setScreenShareTrackEncodingBandwidth = useCallback(\n async (encoding: TrackEncoding, bandwidth: BandwidthLimit) => {\n await RNFishjamClientModule.setScreenShareTrackEncodingBandwidth(\n encoding,\n bandwidth,\n );\n },\n [],\n );\n\n const setScreenShareTrackBandwidth = useCallback(\n async (bandwidth: BandwidthLimit) => {\n await RNFishjamClientModule.setScreenShareTrackBandwidth(bandwidth);\n },\n [],\n );\n\n const handleScreenSharePermission = useCallback(async () => {\n if (Platform.OS == 'android') {\n return await RNFishjamClientModule.handleScreenSharePermission();\n }\n return 'denied';\n }, []);\n\n return {\n isScreenShareOn,\n simulcastConfig,\n\n /**\n * Toggles the screen share on/off\n */\n toggleScreenShare,\n handleScreenSharePermission,\n\n /**\n * @deprecated\n */\n setScreenShareTrackBandwidth,\n /**\n * Toggles simulcast encoding of a screen share track on/off\n * @param encoding encoding to toggle\n * @deprecated\n */\n toggleScreenShareTrackEncoding,\n /**\n * updates maximum bandwidth for the given simulcast encoding of the screen share track\n * @param encoding encoding to update\n * @param bandwidth BandwidthLimit to set\n * @deprecated\n */\n setScreenShareTrackEncodingBandwidth,\n /**\n * updates maximum bandwidth for the screen share track. This value directly translates\n * to quality of the stream and the amount of RTP packets being sent. In case simulcast\n * is enabled bandwidth is split between all of the variant streams proportionally to\n * their resolution\n * @param bandwidth BandwidthLimit to set\n * @deprecated\n */\n };\n}\n"]}
1
+ {"version":3,"file":"useScreenShare.js","sourceRoot":"","sources":["../../src/hooks/useScreenShare.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAS9C,OAAO,qBAAqB,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAyBtE,MAAM,sBAAsB,GAAG,GAAG,EAAE,CAAC,CAAC;IACpC,OAAO,EAAE,KAAK;IACd,eAAe,EAAE,EAAE;CACpB,CAAC,CAAC;AAEH,IAAI,0BAA0B,GAAoB,sBAAsB,EAAE,CAAC;AAE3E;;;;;GAKG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CACpD,qBAAqB,CAAC,eAAe,CACtC,CAAC;IAEF,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CACpD,0BAA0B,CAC3B,CAAC;IAEF,eAAe,CAAC,gBAAgB,CAAC,eAAe,EAAE,kBAAkB,CAAC,CAAC;IAEtE,MAAM,8BAA8B,GAAG,WAAW,CAChD,KAAK,EAAE,QAAuB,EAAE,EAAE;QAChC,0BAA0B;YACxB,MAAM,qBAAqB,CAAC,8BAA8B,CAAC,QAAQ,CAAC,CAAC;QACvE,kBAAkB,CAAC,0BAA0B,CAAC,CAAC;IACjD,CAAC,EACD,EAAE,CACH,CAAC;IAEF,MAAM,oCAAoC,GAAG,WAAW,CACtD,KAAK,EAAE,QAAuB,EAAE,SAAyB,EAAE,EAAE;QAC3D,MAAM,qBAAqB,CAAC,oCAAoC,CAC9D,QAAQ,EACR,SAAS,CACV,CAAC;IACJ,CAAC,EACD,EAAE,CACH,CAAC;IAEF,MAAM,4BAA4B,GAAG,WAAW,CAC9C,KAAK,EAAE,SAAyB,EAAE,EAAE;QAClC,MAAM,qBAAqB,CAAC,4BAA4B,CAAC,SAAS,CAAC,CAAC;IACtE,CAAC,EACD,EAAE,CACH,CAAC;IAEF,MAAM,2BAA2B,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACzD,IAAI,QAAQ,CAAC,EAAE,IAAI,SAAS,EAAE,CAAC;YAC7B,OAAO,MAAM,qBAAqB,CAAC,2BAA2B,EAAE,CAAC;QACnE,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,iBAAiB,GAAG,WAAW,CACnC,KAAK,EAAE,qBAAkD,EAAE,EAAE,EAAE;QAC7D,IAAI,QAAQ,CAAC,EAAE,KAAK,SAAS,IAAI,CAAC,eAAe,EAAE,CAAC;YAClD,CAAC,MAAM,2BAA2B,EAAE,CAAC,IAAI,SAAS;gBAChD,CAAC,MAAM,qBAAqB,CAAC,sBAAsB,CAAC;oBAClD,mBAAmB,EAAE,IAAI;iBAC1B,CAAC,CAAC,CAAC;QACR,CAAC;QACD,MAAM,OAAO,GAAG;YACd,GAAG,kBAAkB;YACrB,mBAAmB,EAAE;gBACnB,WAAW,EAAE,YAAY;gBACzB,IAAI,EAAE,eAAwB;gBAC9B,MAAM,EAAE,CAAC,eAAe;aACzB;SACF,CAAC;QACF,MAAM,qBAAqB,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACvD,0BAA0B,GAAG,sBAAsB,EAAE,CAAC,CAAC,kCAAkC;QACzF,kBAAkB,CAAC,0BAA0B,CAAC,CAAC;IACjD,CAAC,EACD,CAAC,eAAe,EAAE,2BAA2B,CAAC,CAC/C,CAAC;IAEF,OAAO;QACL,eAAe;QACf,eAAe;QAEf;;;WAGG;QACH,iBAAiB;QACjB,2BAA2B;QAE3B;;WAEG;QACH,4BAA4B;QAC5B;;;;WAIG;QACH,8BAA8B;QAC9B;;;;;WAKG;QACH,oCAAoC;QACpC;;;;;;;WAOG;KACJ,CAAC;AACJ,CAAC","sourcesContent":["import { useCallback, useState } from 'react';\n\nimport {\n BandwidthLimit,\n SimulcastConfig,\n TrackBandwidthLimit,\n TrackEncoding,\n TrackMetadata,\n} from '../types';\nimport RNFishjamClientModule from '../RNFishjamClientModule';\nimport { Platform } from 'react-native';\nimport { ReceivableEvents, useFishjamEvent } from './useFishjamEvent';\n\nexport type ScreenShareQuality = 'VGA' | 'HD5' | 'HD15' | 'FHD15' | 'FHD30';\n\nexport type ScreenShareOptions = {\n /**\n * Resolution + fps of screen share track, one of: `VGA`, `HD5`, `HD15`, `FHD15`, `FHD30`.\n * Note that quality might be worse than specified due to device capabilities, internet\n * connection etc.\n * @default `HD15``\n */\n quality: ScreenShareQuality;\n /**\n * bandwidth limit of a screen share track. By default there is no bandwidth limit.\n */\n maxBandwidth: TrackBandwidthLimit;\n};\nexport type ScreenShareOptionsInternal = {\n screenShareMetadata: TrackMetadata & { displayName?: string };\n /**\n * SimulcastConfig of a screen share track. By default simulcast is disabled.\n */\n simulcastConfig: SimulcastConfig;\n};\n\nconst defaultSimulcastConfig = () => ({\n enabled: false,\n activeEncodings: [],\n});\n\nlet screenShareSimulcastConfig: SimulcastConfig = defaultSimulcastConfig();\n\n/**\n * This hook can toggle screen sharing on/off and provides current screen share state.\n * @returns An object with functions to manage screen share.\n * @category Screenshare\n * @group Hooks\n */\nexport function useScreenShare() {\n const [isScreenShareOn, setIsScreenShareOn] = useState(\n RNFishjamClientModule.isScreenShareOn,\n );\n\n const [simulcastConfig, setSimulcastConfig] = useState<SimulcastConfig>(\n screenShareSimulcastConfig,\n );\n\n useFishjamEvent(ReceivableEvents.IsScreenShareOn, setIsScreenShareOn);\n\n const toggleScreenShareTrackEncoding = useCallback(\n async (encoding: TrackEncoding) => {\n screenShareSimulcastConfig =\n await RNFishjamClientModule.toggleScreenShareTrackEncoding(encoding);\n setSimulcastConfig(screenShareSimulcastConfig);\n },\n [],\n );\n\n const setScreenShareTrackEncodingBandwidth = useCallback(\n async (encoding: TrackEncoding, bandwidth: BandwidthLimit) => {\n await RNFishjamClientModule.setScreenShareTrackEncodingBandwidth(\n encoding,\n bandwidth,\n );\n },\n [],\n );\n\n const setScreenShareTrackBandwidth = useCallback(\n async (bandwidth: BandwidthLimit) => {\n await RNFishjamClientModule.setScreenShareTrackBandwidth(bandwidth);\n },\n [],\n );\n\n const handleScreenSharePermission = useCallback(async () => {\n if (Platform.OS == 'android') {\n return await RNFishjamClientModule.handleScreenSharePermission();\n }\n return 'denied';\n }, []);\n\n const toggleScreenShare = useCallback(\n async (screenShareOptions: Partial<ScreenShareOptions> = {}) => {\n if (Platform.OS === 'android' && !isScreenShareOn) {\n (await handleScreenSharePermission()) == 'granted' &&\n (await RNFishjamClientModule.startForegroundService({\n enableScreenSharing: true,\n }));\n }\n const options = {\n ...screenShareOptions,\n screenShareMetadata: {\n displayName: 'presenting',\n type: 'screensharing' as const,\n active: !isScreenShareOn,\n },\n };\n await RNFishjamClientModule.toggleScreenShare(options);\n screenShareSimulcastConfig = defaultSimulcastConfig(); //to do: sync with camera settings\n setSimulcastConfig(screenShareSimulcastConfig);\n },\n [isScreenShareOn, handleScreenSharePermission],\n );\n\n return {\n isScreenShareOn,\n simulcastConfig,\n\n /**\n * Toggles the screen share on/off\n * Emits warning on ios when user is screensharing app screen.\n */\n toggleScreenShare,\n handleScreenSharePermission,\n\n /**\n * @deprecated\n */\n setScreenShareTrackBandwidth,\n /**\n * Toggles simulcast encoding of a screen share track on/off\n * @param encoding encoding to toggle\n * @deprecated\n */\n toggleScreenShareTrackEncoding,\n /**\n * updates maximum bandwidth for the given simulcast encoding of the screen share track\n * @param encoding encoding to update\n * @param bandwidth BandwidthLimit to set\n * @deprecated\n */\n setScreenShareTrackEncodingBandwidth,\n /**\n * updates maximum bandwidth for the screen share track. This value directly translates\n * to quality of the stream and the amount of RTP packets being sent. In case simulcast\n * is enabled bandwidth is split between all of the variant streams proportionally to\n * their resolution\n * @param bandwidth BandwidthLimit to set\n * @deprecated\n */\n };\n}\n"]}
package/build/index.d.ts CHANGED
@@ -1,26 +1,27 @@
1
- export type { Participant, Track, TrackType, VadStatus, EncodingReason, } from './hooks/useParticipants';
2
- export { useParticipants } from './hooks/useParticipants';
1
+ export type { Peer, Track, TrackType, VadStatus, EncodingReason, AudioTrack, VideoTrack, } from './hooks/usePeers';
2
+ export { usePeers } from './hooks/usePeers';
3
3
  export type { AudioOutputDevice, AudioOutputDeviceType, AudioSessionMode, } from './hooks/useAudioSettings';
4
4
  export { useAudioSettings } from './hooks/useAudioSettings';
5
5
  export { useBandwidthEstimation } from './hooks/useBandwidthEstimation';
6
6
  export type { CameraId, Camera, CameraConfig, VideoQuality, CameraFacingDirection, } from './hooks/useCamera';
7
7
  export { useCamera } from './hooks/useCamera';
8
8
  export { useMicrophone } from './hooks/useMicrophone';
9
- export { useRTCStatistics } from './stats/useRTCStatistics';
10
9
  export type { ScreenShareOptions, ScreenShareQuality, } from './hooks/useScreenShare';
11
10
  export { useScreenShare } from './hooks/useScreenShare';
11
+ export { useAppScreenShare } from './hooks/useAppScreenShare';
12
12
  export type { ReconnectionStatus } from './hooks/useReconnection';
13
13
  export { useReconnection } from './hooks/useReconnection';
14
14
  export { updatePeerMetadata } from './common/metadata';
15
- export type { LoggingSeverity } from './common/webRTC';
16
- export { changeWebRTCLoggingSeverity, setTargetTrackEncoding, } from './common/webRTC';
15
+ export { setTargetTrackEncoding } from './common/webRTC';
17
16
  export type { ConnectionConfig } from './common/client';
18
17
  export { joinRoom, leaveRoom } from './common/client';
19
18
  export type { VideoPreviewViewProps } from './components/VideoPreviewView';
20
19
  export { VideoPreviewView } from './components/VideoPreviewView';
21
20
  export type { VideoRendererProps } from './components/VideoRendererView';
22
21
  export { VideoRendererView } from './components/VideoRendererView';
23
- export { AndroidForegroundServiceType } from './types';
24
- export { startForegroundService, stopForegroundService, } from './utils/foregroundService';
22
+ export type { PeerStatus } from './hooks/usePeerStatus';
23
+ export { usePeerStatus } from './hooks/usePeerStatus';
24
+ export type { ForegroundServiceNotificationConfig, ForegroundServicePermissionsConfig, } from './hooks/useForegroundService';
25
+ export { useForegroundService } from './hooks/useForegroundService';
25
26
  export type { TrackBandwidthLimit, TrackEncoding, SimulcastBandwidthLimit, BandwidthLimit, SimulcastConfig, VideoLayout, } from './types';
26
27
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAEA,YAAY,EACV,WAAW,EACX,KAAK,EACL,SAAS,EACT,SAAS,EACT,cAAc,GACf,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,YAAY,EACV,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAExE,YAAY,EACV,QAAQ,EACR,MAAM,EACN,YAAY,EACZ,YAAY,EACZ,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,YAAY,EACV,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,YAAY,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EACL,2BAA2B,EAC3B,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEtD,YAAY,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEjE,YAAY,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,OAAO,EAAE,4BAA4B,EAAE,MAAM,SAAS,CAAC;AACvD,OAAO,EACL,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,2BAA2B,CAAC;AAEnC,YAAY,EACV,mBAAmB,EACnB,aAAa,EACb,uBAAuB,EACvB,cAAc,EACd,eAAe,EACf,WAAW,GACZ,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAEA,YAAY,EACV,IAAI,EACJ,KAAK,EACL,SAAS,EACT,SAAS,EACT,cAAc,EACd,UAAU,EACV,UAAU,GACX,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,YAAY,EACV,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAExE,YAAY,EACV,QAAQ,EACR,MAAM,EACN,YAAY,EACZ,YAAY,EACZ,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,YAAY,EACV,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,YAAY,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEtD,YAAY,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEjE,YAAY,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,YAAY,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,YAAY,EACV,mCAAmC,EACnC,kCAAkC,GACnC,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEpE,YAAY,EACV,mBAAmB,EACnB,aAAa,EACb,uBAAuB,EACvB,cAAc,EACd,eAAe,EACf,WAAW,GACZ,MAAM,SAAS,CAAC"}
package/build/index.js CHANGED
@@ -1,18 +1,18 @@
1
1
  import { initializeWarningListener } from './utils/errorListener';
2
- export { useParticipants } from './hooks/useParticipants';
2
+ export { usePeers } from './hooks/usePeers';
3
3
  export { useAudioSettings } from './hooks/useAudioSettings';
4
4
  export { useBandwidthEstimation } from './hooks/useBandwidthEstimation';
5
5
  export { useCamera } from './hooks/useCamera';
6
6
  export { useMicrophone } from './hooks/useMicrophone';
7
- export { useRTCStatistics } from './stats/useRTCStatistics';
8
7
  export { useScreenShare } from './hooks/useScreenShare';
8
+ export { useAppScreenShare } from './hooks/useAppScreenShare';
9
9
  export { useReconnection } from './hooks/useReconnection';
10
10
  export { updatePeerMetadata } from './common/metadata';
11
- export { changeWebRTCLoggingSeverity, setTargetTrackEncoding, } from './common/webRTC';
11
+ export { setTargetTrackEncoding } from './common/webRTC';
12
12
  export { joinRoom, leaveRoom } from './common/client';
13
13
  export { VideoPreviewView } from './components/VideoPreviewView';
14
14
  export { VideoRendererView } from './components/VideoRendererView';
15
- export { AndroidForegroundServiceType } from './types';
16
- export { startForegroundService, stopForegroundService, } from './utils/foregroundService';
15
+ export { usePeerStatus } from './hooks/usePeerStatus';
16
+ export { useForegroundService } from './hooks/useForegroundService';
17
17
  initializeWarningListener();
18
18
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AASlE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAO1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AASxE,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAM5D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAGvD,OAAO,EACL,2BAA2B,EAC3B,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,OAAO,EAAE,4BAA4B,EAAE,MAAM,SAAS,CAAC;AACvD,OAAO,EACL,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,2BAA2B,CAAC;AAWnC,yBAAyB,EAAE,CAAC","sourcesContent":["import { initializeWarningListener } from './utils/errorListener';\n\nexport type {\n Participant,\n Track,\n TrackType,\n VadStatus,\n EncodingReason,\n} from './hooks/useParticipants';\nexport { useParticipants } from './hooks/useParticipants';\n\nexport type {\n AudioOutputDevice,\n AudioOutputDeviceType,\n AudioSessionMode,\n} from './hooks/useAudioSettings';\nexport { useAudioSettings } from './hooks/useAudioSettings';\n\nexport { useBandwidthEstimation } from './hooks/useBandwidthEstimation';\n\nexport type {\n CameraId,\n Camera,\n CameraConfig,\n VideoQuality,\n CameraFacingDirection,\n} from './hooks/useCamera';\nexport { useCamera } from './hooks/useCamera';\n\nexport { useMicrophone } from './hooks/useMicrophone';\n\nexport { useRTCStatistics } from './stats/useRTCStatistics';\n\nexport type {\n ScreenShareOptions,\n ScreenShareQuality,\n} from './hooks/useScreenShare';\nexport { useScreenShare } from './hooks/useScreenShare';\n\nexport type { ReconnectionStatus } from './hooks/useReconnection';\nexport { useReconnection } from './hooks/useReconnection';\n\nexport { updatePeerMetadata } from './common/metadata';\n\nexport type { LoggingSeverity } from './common/webRTC';\nexport {\n changeWebRTCLoggingSeverity,\n setTargetTrackEncoding,\n} from './common/webRTC';\n\nexport type { ConnectionConfig } from './common/client';\nexport { joinRoom, leaveRoom } from './common/client';\n\nexport type { VideoPreviewViewProps } from './components/VideoPreviewView';\nexport { VideoPreviewView } from './components/VideoPreviewView';\n\nexport type { VideoRendererProps } from './components/VideoRendererView';\nexport { VideoRendererView } from './components/VideoRendererView';\n\nexport { AndroidForegroundServiceType } from './types';\nexport {\n startForegroundService,\n stopForegroundService,\n} from './utils/foregroundService';\n\nexport type {\n TrackBandwidthLimit,\n TrackEncoding,\n SimulcastBandwidthLimit,\n BandwidthLimit,\n SimulcastConfig,\n VideoLayout,\n} from './types';\n\ninitializeWarningListener();\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAYlE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAO5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AASxE,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAMtD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAG9D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAGzD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAGnE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAMtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAWpE,yBAAyB,EAAE,CAAC","sourcesContent":["import { initializeWarningListener } from './utils/errorListener';\n\nexport type {\n Peer,\n Track,\n TrackType,\n VadStatus,\n EncodingReason,\n AudioTrack,\n VideoTrack,\n} from './hooks/usePeers';\n\nexport { usePeers } from './hooks/usePeers';\n\nexport type {\n AudioOutputDevice,\n AudioOutputDeviceType,\n AudioSessionMode,\n} from './hooks/useAudioSettings';\nexport { useAudioSettings } from './hooks/useAudioSettings';\n\nexport { useBandwidthEstimation } from './hooks/useBandwidthEstimation';\n\nexport type {\n CameraId,\n Camera,\n CameraConfig,\n VideoQuality,\n CameraFacingDirection,\n} from './hooks/useCamera';\nexport { useCamera } from './hooks/useCamera';\n\nexport { useMicrophone } from './hooks/useMicrophone';\n\nexport type {\n ScreenShareOptions,\n ScreenShareQuality,\n} from './hooks/useScreenShare';\nexport { useScreenShare } from './hooks/useScreenShare';\n\nexport { useAppScreenShare } from './hooks/useAppScreenShare';\n\nexport type { ReconnectionStatus } from './hooks/useReconnection';\nexport { useReconnection } from './hooks/useReconnection';\n\nexport { updatePeerMetadata } from './common/metadata';\n\nexport { setTargetTrackEncoding } from './common/webRTC';\n\nexport type { ConnectionConfig } from './common/client';\nexport { joinRoom, leaveRoom } from './common/client';\n\nexport type { VideoPreviewViewProps } from './components/VideoPreviewView';\nexport { VideoPreviewView } from './components/VideoPreviewView';\n\nexport type { VideoRendererProps } from './components/VideoRendererView';\nexport { VideoRendererView } from './components/VideoRendererView';\n\nexport type { PeerStatus } from './hooks/usePeerStatus';\nexport { usePeerStatus } from './hooks/usePeerStatus';\n\nexport type {\n ForegroundServiceNotificationConfig,\n ForegroundServicePermissionsConfig,\n} from './hooks/useForegroundService';\nexport { useForegroundService } from './hooks/useForegroundService';\n\nexport type {\n TrackBandwidthLimit,\n TrackEncoding,\n SimulcastBandwidthLimit,\n BandwidthLimit,\n SimulcastConfig,\n VideoLayout,\n} from './types';\n\ninitializeWarningListener();\n"]}
package/build/types.d.ts CHANGED
@@ -45,30 +45,5 @@ declare const brand: unique symbol;
45
45
  export type Brand<T, TBrand extends string> = T & {
46
46
  [brand]: TBrand;
47
47
  };
48
- /**
49
- * Enum used to set the foreground service types identifying the work done by the service.
50
- * See Android's [foreground service types](https://developer.android.com/develop/background-work/services/fg-service-types) documentation.
51
- */
52
- export declare enum AndroidForegroundServiceType {
53
- FOREGROUND_SERVICE_TYPE_CAMERA = 64,
54
- FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION = 32,
55
- FOREGROUND_SERVICE_TYPE_MICROPHONE = 128
56
- }
57
- /**
58
- * A type representing the options required for configuring the foreground service.
59
- *
60
- * @param channelId The id of the channel. Must be unique per package.
61
- * @param channelName The user visible name of the channel.
62
- * @param notificationTitle The title (first row) of the notification, in a standard notification.
63
- * @param notificationContent The text (second row) of the notification, in a standard notification.
64
- * @param foregroundServiceTypes The type of foreground service to launch.
65
- */
66
- export type ForegroundServiceOptions = {
67
- channelId: string;
68
- channelName: string;
69
- notificationTitle: string;
70
- notificationContent: string;
71
- foregroundServiceTypes: AndroidForegroundServiceType[];
72
- };
73
48
  export {};
74
49
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,KAAK,CAAC;AAEzC,MAAM,MAAM,aAAa,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAE5C;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,eAAe,EAAE,aAAa,EAAE,CAAC;CAClC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC;AAEpC;;;GAGG;AACH,MAAM,MAAM,uBAAuB,GAAG,MAAM,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;AAE5E;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,cAAc,GAAG,uBAAuB,CAAC;AAE3E,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,eAAe,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAGtD,OAAO,CAAC,MAAM,KAAK,EAAE,OAAO,MAAM,CAAC;AACnC,MAAM,MAAM,KAAK,CAAC,CAAC,EAAE,MAAM,SAAS,MAAM,IAAI,CAAC,GAAG;IAAE,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtE;;;GAGG;AACH,oBAAY,4BAA4B;IACtC,8BAA8B,KAAK;IACnC,wCAAwC,KAAK;IAC7C,kCAAkC,MAAM;CACzC;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,sBAAsB,EAAE,4BAA4B,EAAE,CAAC;CACxD,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,KAAK,CAAC;AAEzC,MAAM,MAAM,aAAa,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAE5C;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,eAAe,EAAE,aAAa,EAAE,CAAC;CAClC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC;AAEpC;;;GAGG;AACH,MAAM,MAAM,uBAAuB,GAAG,MAAM,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;AAE5E;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,cAAc,GAAG,uBAAuB,CAAC;AAE3E,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,eAAe,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAGtD,OAAO,CAAC,MAAM,KAAK,EAAE,OAAO,MAAM,CAAC;AACnC,MAAM,MAAM,KAAK,CAAC,CAAC,EAAE,MAAM,SAAS,MAAM,IAAI,CAAC,GAAG;IAAE,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC"}
package/build/types.js CHANGED
@@ -1,11 +1,2 @@
1
- /**
2
- * Enum used to set the foreground service types identifying the work done by the service.
3
- * See Android's [foreground service types](https://developer.android.com/develop/background-work/services/fg-service-types) documentation.
4
- */
5
- export var AndroidForegroundServiceType;
6
- (function (AndroidForegroundServiceType) {
7
- AndroidForegroundServiceType[AndroidForegroundServiceType["FOREGROUND_SERVICE_TYPE_CAMERA"] = 64] = "FOREGROUND_SERVICE_TYPE_CAMERA";
8
- AndroidForegroundServiceType[AndroidForegroundServiceType["FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION"] = 32] = "FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION";
9
- AndroidForegroundServiceType[AndroidForegroundServiceType["FOREGROUND_SERVICE_TYPE_MICROPHONE"] = 128] = "FOREGROUND_SERVICE_TYPE_MICROPHONE";
10
- })(AndroidForegroundServiceType || (AndroidForegroundServiceType = {}));
1
+ export {};
11
2
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAuDA;;;GAGG;AACH,MAAM,CAAN,IAAY,4BAIX;AAJD,WAAY,4BAA4B;IACtC,oIAAmC,CAAA;IACnC,wJAA6C,CAAA;IAC7C,6IAAwC,CAAA;AAC1C,CAAC,EAJW,4BAA4B,KAA5B,4BAA4B,QAIvC","sourcesContent":["/**\n * `FILL` or `FIT` - it works just like RN Image component. `FILL` fills the whole view\n * with video and it may cut some parts of the video. `FIT` scales the video so the whole\n * video is visible, but it may leave some empty space in the view.\n * @category Components\n */\nexport type VideoLayout = 'FILL' | 'FIT';\n\nexport type TrackEncoding = 'l' | 'm' | 'h';\n\n/**\n * A type describing simulcast configuration.\n *\n * At the moment, simulcast track is initialized in three versions - low, medium and high.\n * High resolution is the original track resolution, while medium and low resolutions are\n * the original track resolution scaled down by 2 and 4 respectively.\n */\nexport type SimulcastConfig = {\n /**\n * whether to simulcast track or not. By default simulcast is disabled.\n */\n enabled: boolean;\n /**\n * list of active encodings. Encoding can be one of `\"h\"` (original encoding), `\"m\"` (scaled down x2), `\"l\"` (scaled down x4).\n */\n activeEncodings: TrackEncoding[];\n};\n\n/**\n * Type describing maximal bandwidth that can be used, in kbps. 0 is interpreted as unlimited bandwidth.\n */\nexport type BandwidthLimit = number;\n\n/**\n * Type describing bandwidth limit for simulcast track. It is a mapping `encoding -> BandwidthLimit`. If encoding isn't present in this mapping,\n * it will be assumed that this particular encoding shouldn't have any bandwidth limit.\n */\nexport type SimulcastBandwidthLimit = Record<TrackEncoding, BandwidthLimit>;\n\n/**\n * A type describing bandwidth limitation of a track, including simulcast and non-simulcast tracks. Can be `BandwidthLimit` or `SimulcastBandwidthLimit`.\n */\nexport type TrackBandwidthLimit = BandwidthLimit | SimulcastBandwidthLimit;\n\nexport type TrackMetadata = {\n active: boolean;\n type: 'audio' | 'camera' | 'screensharing';\n};\n\nexport type GenericMetadata = Record<string, unknown>;\n\n// branded types are useful for restricting where given value can be passed\ndeclare const brand: unique symbol;\nexport type Brand<T, TBrand extends string> = T & { [brand]: TBrand };\n\n/**\n * Enum used to set the foreground service types identifying the work done by the service.\n * See Android's [foreground service types](https://developer.android.com/develop/background-work/services/fg-service-types) documentation.\n */\nexport enum AndroidForegroundServiceType {\n FOREGROUND_SERVICE_TYPE_CAMERA = 64,\n FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION = 32,\n FOREGROUND_SERVICE_TYPE_MICROPHONE = 128,\n}\n\n/**\n * A type representing the options required for configuring the foreground service.\n *\n * @param channelId The id of the channel. Must be unique per package.\n * @param channelName The user visible name of the channel.\n * @param notificationTitle The title (first row) of the notification, in a standard notification.\n * @param notificationContent The text (second row) of the notification, in a standard notification.\n * @param foregroundServiceTypes The type of foreground service to launch.\n */\nexport type ForegroundServiceOptions = {\n channelId: string;\n channelName: string;\n notificationTitle: string;\n notificationContent: string;\n foregroundServiceTypes: AndroidForegroundServiceType[];\n};\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * `FILL` or `FIT` - it works just like RN Image component. `FILL` fills the whole view\n * with video and it may cut some parts of the video. `FIT` scales the video so the whole\n * video is visible, but it may leave some empty space in the view.\n * @category Components\n */\nexport type VideoLayout = 'FILL' | 'FIT';\n\nexport type TrackEncoding = 'l' | 'm' | 'h';\n\n/**\n * A type describing simulcast configuration.\n *\n * At the moment, simulcast track is initialized in three versions - low, medium and high.\n * High resolution is the original track resolution, while medium and low resolutions are\n * the original track resolution scaled down by 2 and 4 respectively.\n */\nexport type SimulcastConfig = {\n /**\n * whether to simulcast track or not. By default simulcast is disabled.\n */\n enabled: boolean;\n /**\n * list of active encodings. Encoding can be one of `\"h\"` (original encoding), `\"m\"` (scaled down x2), `\"l\"` (scaled down x4).\n */\n activeEncodings: TrackEncoding[];\n};\n\n/**\n * Type describing maximal bandwidth that can be used, in kbps. 0 is interpreted as unlimited bandwidth.\n */\nexport type BandwidthLimit = number;\n\n/**\n * Type describing bandwidth limit for simulcast track. It is a mapping `encoding -> BandwidthLimit`. If encoding isn't present in this mapping,\n * it will be assumed that this particular encoding shouldn't have any bandwidth limit.\n */\nexport type SimulcastBandwidthLimit = Record<TrackEncoding, BandwidthLimit>;\n\n/**\n * A type describing bandwidth limitation of a track, including simulcast and non-simulcast tracks. Can be `BandwidthLimit` or `SimulcastBandwidthLimit`.\n */\nexport type TrackBandwidthLimit = BandwidthLimit | SimulcastBandwidthLimit;\n\nexport type TrackMetadata = {\n active: boolean;\n type: 'audio' | 'camera' | 'screensharing';\n};\n\nexport type GenericMetadata = Record<string, unknown>;\n\n// branded types are useful for restricting where given value can be passed\ndeclare const brand: unique symbol;\nexport type Brand<T, TBrand extends string> = T & { [brand]: TBrand };\n"]}
@@ -0,0 +1,4 @@
1
+ {
2
+ "main": "../build/debug/index.js",
3
+ "types": "../build/debug/index.d.ts"
4
+ }
package/ios/Events.swift CHANGED
@@ -1,14 +1,31 @@
1
- struct EmitableEvents {
2
- static let IsCameraOn = "IsCameraOn"
3
- static let IsMicrophoneOn = "IsMicrophoneOn"
4
- static let IsScreenShareOn = "IsScreenShareOn"
5
- static let SimulcastConfigUpdate = "SimulcastConfigUpdate"
6
- static let PeersUpdate = "PeersUpdate"
7
- static let AudioDeviceUpdate = "AudioDeviceUpdate"
8
- static let SendMediaEvent = "SendMediaEvent"
9
- static let BandwidthEstimation = "BandwidthEstimation"
10
- static let ReconnectionRetriesLimitReached = "ReconnectionRetriesLimitReached"
11
- static let ReconnectionStarted = "ReconnectionStarted"
12
- static let Reconnected = "Reconnected"
13
- static let Warning = "Warning"
1
+ enum PeerStatus: String {
2
+ case connecting
3
+ case connected
4
+ case error
5
+ case idle
6
+ }
7
+
8
+ enum EmitableEvents: String, CaseIterable {
9
+ case IsCameraOn
10
+ case IsMicrophoneOn
11
+ case IsScreenShareOn
12
+ case IsAppScreenShareOn
13
+ case SimulcastConfigUpdate
14
+ case PeersUpdate
15
+ case AudioDeviceUpdate
16
+ case SendMediaEvent
17
+ case BandwidthEstimation
18
+ case ReconnectionRetriesLimitReached
19
+ case ReconnectionStarted
20
+ case Reconnected
21
+ case Warning
22
+ case PeerStatusChanged
23
+
24
+ var name: String {
25
+ rawValue
26
+ }
27
+
28
+ static var allEvents: [String] {
29
+ EmitableEvents.allCases.map(\.name)
30
+ }
14
31
  }
@@ -25,6 +25,6 @@ Pod::Spec.new do |s|
25
25
 
26
26
  s.source_files = '**/*.{h,m,swift}'
27
27
 
28
- s.dependency 'FishjamCloudClient', '0.2.4'
28
+ s.dependency 'FishjamCloudClient', '0.4.0'
29
29
 
30
30
  end