@fishjam-cloud/react-native-client 0.5.0 → 0.7.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 (124) hide show
  1. package/README.md +6 -6
  2. package/android/build.gradle +6 -2
  3. package/android/src/main/java/io/fishjam/reactnative/EmitableEvents.kt +17 -16
  4. package/android/src/main/java/io/fishjam/reactnative/RNFishjamClient.kt +64 -49
  5. package/android/src/main/java/io/fishjam/reactnative/RNFishjamClientModule.kt +16 -24
  6. package/build/RNFishjamClientModule.d.ts +44 -11
  7. package/build/RNFishjamClientModule.d.ts.map +1 -1
  8. package/build/RNFishjamClientModule.js +18 -4
  9. package/build/RNFishjamClientModule.js.map +1 -1
  10. package/build/common/client.d.ts +3 -8
  11. package/build/common/client.d.ts.map +1 -1
  12. package/build/common/client.js +2 -6
  13. package/build/common/client.js.map +1 -1
  14. package/build/common/metadata.d.ts +2 -1
  15. package/build/common/metadata.d.ts.map +1 -1
  16. package/build/common/metadata.js +2 -1
  17. package/build/common/metadata.js.map +1 -1
  18. package/build/components/FishjamRoom/index.d.ts +21 -0
  19. package/build/components/FishjamRoom/index.d.ts.map +1 -1
  20. package/build/components/FishjamRoom/index.js +16 -1
  21. package/build/components/FishjamRoom/index.js.map +1 -1
  22. package/build/components/FishjamRoom/parsePeersToTracks.d.ts.map +1 -1
  23. package/build/components/FishjamRoom/parsePeersToTracks.js +4 -6
  24. package/build/components/FishjamRoom/parsePeersToTracks.js.map +1 -1
  25. package/build/components/VideoPreviewView.d.ts +7 -3
  26. package/build/components/VideoPreviewView.d.ts.map +1 -1
  27. package/build/components/VideoPreviewView.js +5 -1
  28. package/build/components/VideoPreviewView.js.map +1 -1
  29. package/build/components/VideoRendererView.d.ts +13 -0
  30. package/build/components/VideoRendererView.d.ts.map +1 -1
  31. package/build/components/VideoRendererView.js +13 -0
  32. package/build/components/VideoRendererView.js.map +1 -1
  33. package/build/debug/stats/useRTCStatistics.d.ts.map +1 -1
  34. package/build/debug/stats/useRTCStatistics.js +13 -13
  35. package/build/debug/stats/useRTCStatistics.js.map +1 -1
  36. package/build/hooks/internal/useFishjamEvent.d.ts +4 -0
  37. package/build/hooks/internal/useFishjamEvent.d.ts.map +1 -0
  38. package/build/hooks/internal/useFishjamEvent.js +35 -0
  39. package/build/hooks/internal/useFishjamEvent.js.map +1 -0
  40. package/build/hooks/internal/useFishjamEventState.d.ts +3 -0
  41. package/build/hooks/internal/useFishjamEventState.d.ts.map +1 -0
  42. package/build/hooks/{useFishjamEventState.js → internal/useFishjamEventState.js} +3 -1
  43. package/build/hooks/internal/useFishjamEventState.js.map +1 -0
  44. package/build/hooks/useAppScreenShare.d.ts +9 -0
  45. package/build/hooks/useAppScreenShare.d.ts.map +1 -1
  46. package/build/hooks/useAppScreenShare.js +14 -14
  47. package/build/hooks/useAppScreenShare.js.map +1 -1
  48. package/build/hooks/useAudioSettings.d.ts +4 -0
  49. package/build/hooks/useAudioSettings.d.ts.map +1 -1
  50. package/build/hooks/useAudioSettings.js +8 -11
  51. package/build/hooks/useAudioSettings.js.map +1 -1
  52. package/build/hooks/useBandwidthEstimation.d.ts +3 -0
  53. package/build/hooks/useBandwidthEstimation.d.ts.map +1 -1
  54. package/build/hooks/useBandwidthEstimation.js +9 -5
  55. package/build/hooks/useBandwidthEstimation.js.map +1 -1
  56. package/build/hooks/useCamera.d.ts +11 -33
  57. package/build/hooks/useCamera.d.ts.map +1 -1
  58. package/build/hooks/useCamera.js +18 -68
  59. package/build/hooks/useCamera.js.map +1 -1
  60. package/build/hooks/useConnection.d.ts +58 -0
  61. package/build/hooks/useConnection.d.ts.map +1 -0
  62. package/build/hooks/useConnection.js +39 -0
  63. package/build/hooks/useConnection.js.map +1 -0
  64. package/build/hooks/useForegroundService.d.ts +20 -11
  65. package/build/hooks/useForegroundService.d.ts.map +1 -1
  66. package/build/hooks/useForegroundService.js +2 -3
  67. package/build/hooks/useForegroundService.js.map +1 -1
  68. package/build/hooks/useMicrophone.d.ts.map +1 -1
  69. package/build/hooks/useMicrophone.js +2 -3
  70. package/build/hooks/useMicrophone.js.map +1 -1
  71. package/build/hooks/usePeerStatus.d.ts +3 -12
  72. package/build/hooks/usePeerStatus.d.ts.map +1 -1
  73. package/build/hooks/usePeerStatus.js +5 -10
  74. package/build/hooks/usePeerStatus.js.map +1 -1
  75. package/build/hooks/usePeers.d.ts +19 -22
  76. package/build/hooks/usePeers.d.ts.map +1 -1
  77. package/build/hooks/usePeers.js +21 -20
  78. package/build/hooks/usePeers.js.map +1 -1
  79. package/build/hooks/useReconnection.d.ts +3 -3
  80. package/build/hooks/useReconnection.d.ts.map +1 -1
  81. package/build/hooks/useReconnection.js +5 -10
  82. package/build/hooks/useReconnection.js.map +1 -1
  83. package/build/hooks/useScreenShare.d.ts +2 -23
  84. package/build/hooks/useScreenShare.d.ts.map +1 -1
  85. package/build/hooks/useScreenShare.js +6 -45
  86. package/build/hooks/useScreenShare.js.map +1 -1
  87. package/build/hooks/useUpdatePeerMetadata.d.ts +15 -0
  88. package/build/hooks/useUpdatePeerMetadata.d.ts.map +1 -0
  89. package/build/hooks/useUpdatePeerMetadata.js +21 -0
  90. package/build/hooks/useUpdatePeerMetadata.js.map +1 -0
  91. package/build/index.d.ts +21 -16
  92. package/build/index.d.ts.map +1 -1
  93. package/build/index.js +15 -6
  94. package/build/index.js.map +1 -1
  95. package/build/types.d.ts +0 -19
  96. package/build/types.d.ts.map +1 -1
  97. package/build/types.js.map +1 -1
  98. package/build/utils/errorListener.d.ts.map +1 -1
  99. package/build/utils/errorListener.js +2 -3
  100. package/build/utils/errorListener.js.map +1 -1
  101. package/build/utils/eventPayloadValidator.d.ts +3 -0
  102. package/build/utils/eventPayloadValidator.d.ts.map +1 -0
  103. package/build/utils/eventPayloadValidator.js +94 -0
  104. package/build/utils/eventPayloadValidator.js.map +1 -0
  105. package/ios/Events.swift +8 -8
  106. package/ios/RNFishjamClient.podspec +1 -1
  107. package/ios/RNFishjamClient.swift +45 -48
  108. package/ios/RNFishjamClientModule.swift +13 -14
  109. package/ios/Utils.swift +0 -20
  110. package/package.json +21 -13
  111. package/plugin/build/withFishjamAndroid.js +18 -20
  112. package/plugin/build/withFishjamIos.js +116 -110
  113. package/build/common/webRTC.d.ts +0 -14
  114. package/build/common/webRTC.d.ts.map +0 -1
  115. package/build/common/webRTC.js +0 -15
  116. package/build/common/webRTC.js.map +0 -1
  117. package/build/hooks/useFishjamEvent.d.ts +0 -18
  118. package/build/hooks/useFishjamEvent.d.ts.map +0 -1
  119. package/build/hooks/useFishjamEvent.js +0 -27
  120. package/build/hooks/useFishjamEvent.js.map +0 -1
  121. package/build/hooks/useFishjamEventState.d.ts +0 -3
  122. package/build/hooks/useFishjamEventState.d.ts.map +0 -1
  123. package/build/hooks/useFishjamEventState.js.map +0 -1
  124. /package/{LICENSE → LICENSE.txt} +0 -0
package/build/index.d.ts CHANGED
@@ -1,28 +1,33 @@
1
- export type { Peer, PeerId, Track, TrackId, TrackType, VadStatus, EncodingReason, AudioTrack, VideoTrack, UsePeersResult, PeerWithTracks, } from './hooks/usePeers';
2
- export { usePeers } from './hooks/usePeers';
1
+ export type { SimulcastConfig, VideoLayout } from './types';
2
+ export type { ConnectionConfig } from './common/client';
3
+ export { updatePeerMetadata } from './common/metadata';
4
+ export {
5
+ /** @deprecated */
6
+ joinRoom,
7
+ /** @deprecated */
8
+ leaveRoom, } from './common/client';
9
+ export type { VideoPreviewViewProps } from './components/VideoPreviewView';
10
+ export type { VideoRendererProps } from './components/VideoRendererView';
11
+ export { VideoPreviewView } from './components/VideoPreviewView';
12
+ export { VideoRendererView } from './components/VideoRendererView';
13
+ export type { Peer, PeerId, Track, TrackId, TrackType, VadStatus, EncodingReason, TrackBase, AudioTrack, VideoTrack, UsePeersResult, PeerWithTracks, PeerTrackMetadata, } from './hooks/usePeers';
3
14
  export type { AudioOutputDevice, AudioOutputDeviceType, AudioSessionMode, } from './hooks/useAudioSettings';
15
+ export type { CameraId, Camera, CameraConfig, VideoQuality, CameraFacingDirection, } from './hooks/useCamera';
16
+ export type { ScreenShareOptions, ScreenShareQuality, } from './hooks/useScreenShare';
17
+ export type { ForegroundServiceConfig } from './hooks/useForegroundService';
18
+ export type { JoinRoomConfig, ReconnectionStatus, PeerStatus, } from './hooks/useConnection';
4
19
  export { useAudioSettings } from './hooks/useAudioSettings';
5
20
  export { useBandwidthEstimation } from './hooks/useBandwidthEstimation';
6
- export type { CameraId, Camera, CameraConfig, VideoQuality, CameraFacingDirection, } from './hooks/useCamera';
7
21
  export { useCamera } from './hooks/useCamera';
8
22
  export { useMicrophone } from './hooks/useMicrophone';
9
- export type { ScreenShareOptions, ScreenShareQuality, } from './hooks/useScreenShare';
10
23
  export { useScreenShare } from './hooks/useScreenShare';
11
24
  export { useAppScreenShare } from './hooks/useAppScreenShare';
12
- export type { ReconnectionStatus } from './hooks/useReconnection';
13
25
  export { useReconnection } from './hooks/useReconnection';
14
- export { updatePeerMetadata } from './common/metadata';
15
- export { setTargetTrackEncoding } from './common/webRTC';
16
- export type { ConnectionConfig } from './common/client';
17
- export { joinRoom, leaveRoom } from './common/client';
18
- export type { VideoPreviewViewProps } from './components/VideoPreviewView';
19
- export { VideoPreviewView } from './components/VideoPreviewView';
20
- export type { VideoRendererProps } from './components/VideoRendererView';
21
- export { VideoRendererView } from './components/VideoRendererView';
22
- export type { PeerStatus } from './hooks/usePeerStatus';
23
26
  export { usePeerStatus } from './hooks/usePeerStatus';
24
- export type { ForegroundServiceConfig } from './hooks/useForegroundService';
27
+ export { usePeers } from './hooks/usePeers';
25
28
  export { useForegroundService } from './hooks/useForegroundService';
29
+ export { useConnection } from './hooks/useConnection';
30
+ export { useUpdatePeerMetadata } from './hooks/useUpdatePeerMetadata';
31
+ export type { FishjamRoomProps } from './components/FishjamRoom';
26
32
  export { FishjamRoom } from './components/FishjamRoom';
27
- export type { TrackBandwidthLimit, TrackEncoding, SimulcastBandwidthLimit, BandwidthLimit, SimulcastConfig, VideoLayout, } from './types';
28
33
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAEA,YAAY,EACV,IAAI,EACJ,MAAM,EACN,KAAK,EACL,OAAO,EACP,SAAS,EACT,SAAS,EACT,cAAc,EACd,UAAU,EACV,UAAU,EACV,cAAc,EACd,cAAc,GACf,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,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEpE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,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":"AAGA,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC5D,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAIxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO;AACL,kBAAkB;AAClB,QAAQ;AACR,kBAAkB;AAClB,SAAS,GACV,MAAM,iBAAiB,CAAC;AAIzB,YAAY,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAC3E,YAAY,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAInE,YAAY,EACV,IAAI,EACJ,MAAM,EACN,KAAK,EACL,OAAO,EACP,SAAS,EACT,SAAS,EACT,cAAc,EACd,SAAS,EACT,UAAU,EACV,UAAU,EACV,cAAc,EACd,cAAc,EACd,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EACV,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAElC,YAAY,EACV,QAAQ,EACR,MAAM,EACN,YAAY,EACZ,YAAY,EACZ,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAC5E,YAAY,EACV,cAAc,EACd,kBAAkB,EAClB,UAAU,GACX,MAAM,uBAAuB,CAAC;AAI/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAGtE,YAAY,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC"}
package/build/index.js CHANGED
@@ -1,5 +1,16 @@
1
1
  import { initializeWarningListener } from './utils/errorListener';
2
- export { usePeers } from './hooks/usePeers';
2
+ // #endregion
3
+ // #region methods
4
+ export { updatePeerMetadata } from './common/metadata';
5
+ export {
6
+ /** @deprecated */
7
+ joinRoom,
8
+ /** @deprecated */
9
+ leaveRoom, } from './common/client';
10
+ export { VideoPreviewView } from './components/VideoPreviewView';
11
+ export { VideoRendererView } from './components/VideoRendererView';
12
+ // #endregion
13
+ // #region hooks
3
14
  export { useAudioSettings } from './hooks/useAudioSettings';
4
15
  export { useBandwidthEstimation } from './hooks/useBandwidthEstimation';
5
16
  export { useCamera } from './hooks/useCamera';
@@ -7,13 +18,11 @@ export { useMicrophone } from './hooks/useMicrophone';
7
18
  export { useScreenShare } from './hooks/useScreenShare';
8
19
  export { useAppScreenShare } from './hooks/useAppScreenShare';
9
20
  export { useReconnection } from './hooks/useReconnection';
10
- export { updatePeerMetadata } from './common/metadata';
11
- export { setTargetTrackEncoding } from './common/webRTC';
12
- export { joinRoom, leaveRoom } from './common/client';
13
- export { VideoPreviewView } from './components/VideoPreviewView';
14
- export { VideoRendererView } from './components/VideoRendererView';
15
21
  export { usePeerStatus } from './hooks/usePeerStatus';
22
+ export { usePeers } from './hooks/usePeers';
16
23
  export { useForegroundService } from './hooks/useForegroundService';
24
+ export { useConnection } from './hooks/useConnection';
25
+ export { useUpdatePeerMetadata } from './hooks/useUpdatePeerMetadata';
17
26
  export { FishjamRoom } from './components/FishjamRoom';
18
27
  initializeWarningListener();
19
28
  //# 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;AAgBlE,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;AAGtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEpE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAWvD,yBAAyB,EAAE,CAAC","sourcesContent":["import { initializeWarningListener } from './utils/errorListener';\n\nexport type {\n Peer,\n PeerId,\n Track,\n TrackId,\n TrackType,\n VadStatus,\n EncodingReason,\n AudioTrack,\n VideoTrack,\n UsePeersResult,\n PeerWithTracks,\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 { ForegroundServiceConfig } from './hooks/useForegroundService';\nexport { useForegroundService } from './hooks/useForegroundService';\n\nexport { FishjamRoom } from './components/FishjamRoom';\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;AAKlE,aAAa;AAEb,kBAAkB;AAClB,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO;AACL,kBAAkB;AAClB,QAAQ;AACR,kBAAkB;AAClB,SAAS,GACV,MAAM,iBAAiB,CAAC;AAOzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AA4CnE,aAAa;AAEb,gBAAgB;AAChB,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAItE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,yBAAyB,EAAE,CAAC","sourcesContent":["import { initializeWarningListener } from './utils/errorListener';\n\n// #region types\nexport type { SimulcastConfig, VideoLayout } from './types';\nexport type { ConnectionConfig } from './common/client';\n// #endregion\n\n// #region methods\nexport { updatePeerMetadata } from './common/metadata';\nexport {\n /** @deprecated */\n joinRoom,\n /** @deprecated */\n leaveRoom,\n} from './common/client';\n// #endregion\n\n// #region components\nexport type { VideoPreviewViewProps } from './components/VideoPreviewView';\nexport type { VideoRendererProps } from './components/VideoRendererView';\n\nexport { VideoPreviewView } from './components/VideoPreviewView';\nexport { VideoRendererView } from './components/VideoRendererView';\n// #endregion\n\n// #region types for hooks\nexport type {\n Peer,\n PeerId,\n Track,\n TrackId,\n TrackType,\n VadStatus,\n EncodingReason,\n TrackBase,\n AudioTrack,\n VideoTrack,\n UsePeersResult,\n PeerWithTracks,\n PeerTrackMetadata,\n} from './hooks/usePeers';\n\nexport type {\n AudioOutputDevice,\n AudioOutputDeviceType,\n AudioSessionMode,\n} from './hooks/useAudioSettings';\n\nexport type {\n CameraId,\n Camera,\n CameraConfig,\n VideoQuality,\n CameraFacingDirection,\n} from './hooks/useCamera';\n\nexport type {\n ScreenShareOptions,\n ScreenShareQuality,\n} from './hooks/useScreenShare';\nexport type { ForegroundServiceConfig } from './hooks/useForegroundService';\nexport type {\n JoinRoomConfig,\n ReconnectionStatus,\n PeerStatus,\n} from './hooks/useConnection';\n// #endregion\n\n// #region hooks\nexport { useAudioSettings } from './hooks/useAudioSettings';\nexport { useBandwidthEstimation } from './hooks/useBandwidthEstimation';\nexport { useCamera } from './hooks/useCamera';\nexport { useMicrophone } from './hooks/useMicrophone';\nexport { useScreenShare } from './hooks/useScreenShare';\nexport { useAppScreenShare } from './hooks/useAppScreenShare';\nexport { useReconnection } from './hooks/useReconnection';\nexport { usePeerStatus } from './hooks/usePeerStatus';\nexport { usePeers } from './hooks/usePeers';\nexport { useForegroundService } from './hooks/useForegroundService';\nexport { useConnection } from './hooks/useConnection';\nexport { useUpdatePeerMetadata } from './hooks/useUpdatePeerMetadata';\n// #endregion\n\nexport type { FishjamRoomProps } from './components/FishjamRoom';\nexport { FishjamRoom } from './components/FishjamRoom';\n\ninitializeWarningListener();\n"]}
package/build/types.d.ts CHANGED
@@ -2,10 +2,8 @@
2
2
  * `FILL` or `FIT` - it works just like RN Image component. `FILL` fills the whole view
3
3
  * with video and it may cut some parts of the video. `FIT` scales the video so the whole
4
4
  * video is visible, but it may leave some empty space in the view.
5
- * @category Components
6
5
  */
7
6
  export type VideoLayout = 'FILL' | 'FIT';
8
- export type TrackEncoding = 'l' | 'm' | 'h';
9
7
  /**
10
8
  * A type describing simulcast configuration.
11
9
  *
@@ -18,24 +16,7 @@ export type SimulcastConfig = {
18
16
  * whether to simulcast track or not. By default simulcast is disabled.
19
17
  */
20
18
  enabled: boolean;
21
- /**
22
- * list of active encodings. Encoding can be one of `"h"` (original encoding), `"m"` (scaled down x2), `"l"` (scaled down x4).
23
- */
24
- activeEncodings: TrackEncoding[];
25
19
  };
26
- /**
27
- * Type describing maximal bandwidth that can be used, in kbps. 0 is interpreted as unlimited bandwidth.
28
- */
29
- export type BandwidthLimit = number;
30
- /**
31
- * Type describing bandwidth limit for simulcast track. It is a mapping `encoding -> BandwidthLimit`. If encoding isn't present in this mapping,
32
- * it will be assumed that this particular encoding shouldn't have any bandwidth limit.
33
- */
34
- export type SimulcastBandwidthLimit = Record<TrackEncoding, BandwidthLimit>;
35
- /**
36
- * A type describing bandwidth limitation of a track, including simulcast and non-simulcast tracks. Can be `BandwidthLimit` or `SimulcastBandwidthLimit`.
37
- */
38
- export type TrackBandwidthLimit = BandwidthLimit | SimulcastBandwidthLimit;
39
20
  export type TrackMetadata = {
40
21
  active: boolean;
41
22
  type: 'microphone' | 'camera' | 'screenShareVideo' | 'screenShareAudio';
@@ -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,YAAY,GAAG,QAAQ,GAAG,kBAAkB,GAAG,kBAAkB,CAAC;CACzE,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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,KAAK,CAAC;AAEzC;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,YAAY,GAAG,QAAQ,GAAG,kBAAkB,GAAG,kBAAkB,CAAC;CACzE,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"}
@@ -1 +1 @@
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: 'microphone' | 'camera' | 'screenShareVideo' | 'screenShareAudio';\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"]}
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 */\nexport type VideoLayout = 'FILL' | 'FIT';\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\nexport type TrackMetadata = {\n active: boolean;\n type: 'microphone' | 'camera' | 'screenShareVideo' | 'screenShareAudio';\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"]}
@@ -1 +1 @@
1
- {"version":3,"file":"errorListener.d.ts","sourceRoot":"","sources":["../../src/utils/errorListener.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,yBAAyB,YAcrC,CAAC"}
1
+ {"version":3,"file":"errorListener.d.ts","sourceRoot":"","sources":["../../src/utils/errorListener.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,yBAAyB,YAWrC,CAAC"}
@@ -1,11 +1,10 @@
1
- import { ReceivableEvents } from '../hooks/useFishjamEvent';
2
- import { nativeModuleEventEmitter } from '../RNFishjamClientModule';
1
+ import nativeModule, { ReceivableEvents } from '../RNFishjamClientModule';
3
2
  export const initializeWarningListener = () => {
4
3
  if (!__DEV__) {
5
4
  return;
6
5
  }
7
6
  try {
8
- nativeModuleEventEmitter.addListener(ReceivableEvents.Warning, (event) => {
7
+ nativeModule.addListener(ReceivableEvents.Warning, (event) => {
9
8
  console.warn(event[ReceivableEvents.Warning]);
10
9
  });
11
10
  }
@@ -1 +1 @@
1
- {"version":3,"file":"errorListener.js","sourceRoot":"","sources":["../../src/utils/errorListener.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,EAAE;IAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;IACT,CAAC;IACD,IAAI,CAAC;QACH,wBAAwB,CAAC,WAAW,CAClC,gBAAgB,CAAC,OAAO,EACxB,CAAC,KAA6C,EAAE,EAAE;YAChD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;QAChD,CAAC,CACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,qCAAqC,KAAK,EAAE,OAAO,IAAI,EAAE,EAAE,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC,CAAC","sourcesContent":["import { ReceivableEvents } from '../hooks/useFishjamEvent';\nimport { nativeModuleEventEmitter } from '../RNFishjamClientModule';\n\nexport const initializeWarningListener = () => {\n if (!__DEV__) {\n return;\n }\n try {\n nativeModuleEventEmitter.addListener(\n ReceivableEvents.Warning,\n (event: { [ReceivableEvents.Warning]: string }) => {\n console.warn(event[ReceivableEvents.Warning]);\n },\n );\n } catch (error) {\n console.error(`Failed to start warning listener: ${error?.message ?? ''}`);\n }\n};\n"]}
1
+ {"version":3,"file":"errorListener.js","sourceRoot":"","sources":["../../src/utils/errorListener.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,EAAE,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE1E,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,EAAE;IAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;IACT,CAAC;IACD,IAAI,CAAC;QACH,YAAY,CAAC,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC3D,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,qCAAqC,KAAK,EAAE,OAAO,IAAI,EAAE,EAAE,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC,CAAC","sourcesContent":["import nativeModule, { ReceivableEvents } from '../RNFishjamClientModule';\n\nexport const initializeWarningListener = () => {\n if (!__DEV__) {\n return;\n }\n try {\n nativeModule.addListener(ReceivableEvents.Warning, (event) => {\n console.warn(event[ReceivableEvents.Warning]);\n });\n } catch (error) {\n console.error(`Failed to start warning listener: ${error?.message ?? ''}`);\n }\n};\n"]}
@@ -0,0 +1,3 @@
1
+ import { ReceivableEventPayloads, ReceivableEvents } from '../RNFishjamClientModule';
2
+ export declare function validateNativeEventPayload<T extends keyof typeof ReceivableEvents>(eventName: T, payload: ReceivableEventPayloads[T]): void;
3
+ //# sourceMappingURL=eventPayloadValidator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventPayloadValidator.d.ts","sourceRoot":"","sources":["../../src/utils/eventPayloadValidator.ts"],"names":[],"mappings":"AACA,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EACjB,MAAM,0BAA0B,CAAC;AAgElC,wBAAgB,0BAA0B,CACxC,CAAC,SAAS,MAAM,OAAO,gBAAgB,EACvC,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,uBAAuB,CAAC,CAAC,CAAC,GAAG,IAAI,CAiDzD"}
@@ -0,0 +1,94 @@
1
+ import { z } from 'zod';
2
+ import { ReceivableEvents, } from '../RNFishjamClientModule';
3
+ const TrackMetadataSchema = z.object({
4
+ active: z.boolean(),
5
+ type: z.enum([
6
+ 'microphone',
7
+ 'camera',
8
+ 'screenShareVideo',
9
+ 'screenShareAudio',
10
+ ]),
11
+ });
12
+ const BaseTrackSchema = z.object({
13
+ id: z.string(),
14
+ metadata: TrackMetadataSchema.optional(),
15
+ });
16
+ const AudioTrackSchema = BaseTrackSchema.extend({
17
+ type: z.literal('Audio'),
18
+ vadStatus: z.enum(['silence', 'speech']).optional(),
19
+ });
20
+ const VideoTrackSchema = BaseTrackSchema.extend({
21
+ type: z.literal('Video'),
22
+ });
23
+ const TrackSchema = z.discriminatedUnion('type', [
24
+ AudioTrackSchema,
25
+ VideoTrackSchema,
26
+ ]);
27
+ const PeerSchema = z.object({
28
+ id: z.string(),
29
+ isLocal: z.boolean(),
30
+ tracks: z.array(TrackSchema),
31
+ metadata: z.record(z.any()),
32
+ });
33
+ const SimulcastConfigSchema = z.object({
34
+ enabled: z.boolean(),
35
+ activeEncodings: z.array(z.enum(['l', 'm', 'h'])),
36
+ });
37
+ const AudioOutputDeviceSchema = z.object({
38
+ name: z.string(),
39
+ type: z.enum(['bluetooth', 'headset', 'speaker', 'earpiece']),
40
+ });
41
+ const AudioDeviceEventSchema = z.object({
42
+ availableDevices: z.array(AudioOutputDeviceSchema),
43
+ selectedDevice: AudioOutputDeviceSchema.nullable(),
44
+ });
45
+ const CameraSchema = z.object({
46
+ id: z.string(),
47
+ name: z.string(),
48
+ facingDirection: z.enum(['front', 'back', 'unspecified']),
49
+ });
50
+ const CameraChangedEventSchema = z.object({
51
+ isCameraOn: z.boolean(),
52
+ currentCamera: CameraSchema.nullable(),
53
+ });
54
+ export function validateNativeEventPayload(eventName, payload) {
55
+ switch (eventName) {
56
+ case ReceivableEvents.IsMicrophoneOn:
57
+ case ReceivableEvents.IsScreenShareOn:
58
+ case ReceivableEvents.IsAppScreenShareOn:
59
+ z.boolean().parse(payload);
60
+ break;
61
+ case ReceivableEvents.SimulcastConfigUpdate:
62
+ SimulcastConfigSchema.parse(payload);
63
+ break;
64
+ case ReceivableEvents.PeersUpdate:
65
+ z.array(PeerSchema).parse(payload);
66
+ break;
67
+ case ReceivableEvents.AudioDeviceUpdate:
68
+ AudioDeviceEventSchema.parse(payload);
69
+ break;
70
+ case ReceivableEvents.BandwidthEstimation:
71
+ z.number().nullable().parse(payload);
72
+ break;
73
+ case ReceivableEvents.ReconnectionRetriesLimitReached:
74
+ case ReceivableEvents.ReconnectionStarted:
75
+ case ReceivableEvents.Reconnected:
76
+ z.undefined().parse(payload);
77
+ break;
78
+ case ReceivableEvents.Warning:
79
+ z.string().parse(payload);
80
+ break;
81
+ case ReceivableEvents.PeerStatusChanged:
82
+ z.enum(['connecting', 'connected', 'error', 'idle']).parse(payload);
83
+ break;
84
+ case ReceivableEvents.ReconnectionStatusChanged:
85
+ z.enum(['connecting', 'connected', 'error']).parse(payload);
86
+ break;
87
+ case ReceivableEvents.CurrentCameraChanged:
88
+ CameraChangedEventSchema.parse(payload);
89
+ break;
90
+ default:
91
+ throw new Error(`Unknown event: ${eventName}`);
92
+ }
93
+ }
94
+ //# sourceMappingURL=eventPayloadValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventPayloadValidator.js","sourceRoot":"","sources":["../../src/utils/eventPayloadValidator.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod';\nimport {\n ReceivableEventPayloads,\n ReceivableEvents,\n} from '../RNFishjamClientModule';\n\nconst TrackMetadataSchema = z.object({\n active: z.boolean(),\n type: z.enum([\n 'microphone',\n 'camera',\n 'screenShareVideo',\n 'screenShareAudio',\n ]),\n});\n\nconst BaseTrackSchema = z.object({\n id: z.string(),\n metadata: TrackMetadataSchema.optional(),\n});\n\nconst AudioTrackSchema = BaseTrackSchema.extend({\n type: z.literal('Audio'),\n vadStatus: z.enum(['silence', 'speech']).optional(),\n});\n\nconst VideoTrackSchema = BaseTrackSchema.extend({\n type: z.literal('Video'),\n});\n\nconst TrackSchema = z.discriminatedUnion('type', [\n AudioTrackSchema,\n VideoTrackSchema,\n]);\n\nconst PeerSchema = z.object({\n id: z.string(),\n isLocal: z.boolean(),\n tracks: z.array(TrackSchema),\n metadata: z.record(z.any()),\n});\n\nconst SimulcastConfigSchema = z.object({\n enabled: z.boolean(),\n activeEncodings: z.array(z.enum(['l', 'm', 'h'])),\n});\n\nconst AudioOutputDeviceSchema = z.object({\n name: z.string(),\n type: z.enum(['bluetooth', 'headset', 'speaker', 'earpiece']),\n});\n\nconst AudioDeviceEventSchema = z.object({\n availableDevices: z.array(AudioOutputDeviceSchema),\n selectedDevice: AudioOutputDeviceSchema.nullable(),\n});\n\nconst CameraSchema = z.object({\n id: z.string(),\n name: z.string(),\n facingDirection: z.enum(['front', 'back', 'unspecified']),\n});\n\nconst CameraChangedEventSchema = z.object({\n isCameraOn: z.boolean(),\n currentCamera: CameraSchema.nullable(),\n});\n\nexport function validateNativeEventPayload<\n T extends keyof typeof ReceivableEvents,\n>(eventName: T, payload: ReceivableEventPayloads[T]): void {\n switch (eventName) {\n case ReceivableEvents.IsMicrophoneOn:\n case ReceivableEvents.IsScreenShareOn:\n case ReceivableEvents.IsAppScreenShareOn:\n z.boolean().parse(payload);\n break;\n\n case ReceivableEvents.SimulcastConfigUpdate:\n SimulcastConfigSchema.parse(payload);\n break;\n\n case ReceivableEvents.PeersUpdate:\n z.array(PeerSchema).parse(payload);\n break;\n\n case ReceivableEvents.AudioDeviceUpdate:\n AudioDeviceEventSchema.parse(payload);\n break;\n\n case ReceivableEvents.BandwidthEstimation:\n z.number().nullable().parse(payload);\n break;\n\n case ReceivableEvents.ReconnectionRetriesLimitReached:\n case ReceivableEvents.ReconnectionStarted:\n case ReceivableEvents.Reconnected:\n z.undefined().parse(payload);\n break;\n\n case ReceivableEvents.Warning:\n z.string().parse(payload);\n break;\n\n case ReceivableEvents.PeerStatusChanged:\n z.enum(['connecting', 'connected', 'error', 'idle']).parse(payload);\n break;\n\n case ReceivableEvents.ReconnectionStatusChanged:\n z.enum(['connecting', 'connected', 'error']).parse(payload);\n break;\n\n case ReceivableEvents.CurrentCameraChanged:\n CameraChangedEventSchema.parse(payload);\n break;\n\n default:\n throw new Error(`Unknown event: ${eventName}`);\n }\n}\n"]}
package/ios/Events.swift CHANGED
@@ -17,11 +17,9 @@ class EmitableEvent {
17
17
  case PeersUpdate
18
18
  case AudioDeviceUpdate
19
19
  case BandwidthEstimation
20
- case ReconnectionRetriesLimitReached
21
- case ReconnectionStarted
22
- case Reconnected
23
20
  case Warning
24
21
  case PeerStatusChanged
22
+ case ReconnectionStatusChanged
25
23
  case CurrentCameraChanged
26
24
 
27
25
  var name: String {
@@ -41,10 +39,6 @@ class EmitableEvent {
41
39
  self.eventContent = eventContent
42
40
  }
43
41
 
44
- static var reconnectionRetriesLimitReached: EmitableEvent { .init(event: .ReconnectionRetriesLimitReached) }
45
- static var reconnectionStarted: EmitableEvent { .init(event: .ReconnectionStarted) }
46
- static var reconnected: EmitableEvent { .init(event: .Reconnected) }
47
-
48
42
  static func isMicrophoneOn(enabled: Bool) -> EmitableEvent { .init(event: .IsMicrophoneOn, eventContent: enabled) }
49
43
  static func isScreenShareOn(enabled: Bool) -> EmitableEvent {
50
44
  .init(event: .IsScreenShareOn, eventContent: enabled)
@@ -59,13 +53,19 @@ class EmitableEvent {
59
53
  static func peerStatusChanged(peerStatus: PeerStatus) -> EmitableEvent {
60
54
  .init(event: .PeerStatusChanged, eventContent: peerStatus.rawValue)
61
55
  }
56
+ static func reconnectionStatusChanged(reconnectionStatus: ReconnectionStatus) -> EmitableEvent {
57
+ .init(event: .ReconnectionStatusChanged, eventContent: reconnectionStatus.rawValue)
58
+ }
62
59
 
63
- static func currentCameraChanged(localCamera: LocalCamera?, isCameraOn: Bool) -> EmitableEvent {
60
+ static func currentCameraChanged(localCamera: LocalCamera?, isCameraOn: Bool, isCameraInitialized: Bool)
61
+ -> EmitableEvent
62
+ {
64
63
  return .init(
65
64
  event: .CurrentCameraChanged,
66
65
  eventContent: [
67
66
  "currentCamera": localCamera as Any,
68
67
  "isCameraOn": isCameraOn,
68
+ "isCameraInitialized": isCameraInitialized,
69
69
  ])
70
70
  }
71
71
 
@@ -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.5.0'
28
+ s.dependency 'FishjamCloudClient', package['version']
29
29
 
30
30
  end
@@ -14,15 +14,19 @@ class RNFishjamClient: FishjamClientListener {
14
14
  var isAppScreenShareOn = false
15
15
  var isConnected = false
16
16
 
17
- private var isCameraInitialized = false
17
+ private(set) var isCameraInitialized = false {
18
+ didSet {
19
+ emit(
20
+ event: .currentCameraChanged(
21
+ localCamera: currentCamera, isCameraOn: isCameraOn, isCameraInitialized: isCameraInitialized))
22
+ }
23
+ }
18
24
 
19
25
  var connectPromise: Promise? = nil
20
26
 
21
27
  var videoSimulcastConfig: SimulcastConfig = SimulcastConfig()
22
- var localUserMetadata: Metadata = .init()
23
28
 
24
29
  var screenShareSimulcastConfig: SimulcastConfig = SimulcastConfig()
25
- var screenShareMaxBandwidth: TrackBandwidthLimit = .BandwidthLimit(0)
26
30
 
27
31
  var cameraId: String? = nil
28
32
 
@@ -37,6 +41,12 @@ class RNFishjamClient: FishjamClientListener {
37
41
  }
38
42
  }
39
43
 
44
+ private(set) var reconnectionStatus: ReconnectionStatus = .idle {
45
+ didSet {
46
+ emit(event: .reconnectionStatusChanged(reconnectionStatus: reconnectionStatus))
47
+ }
48
+ }
49
+
40
50
  let sendEvent: (_ eventName: String, _ data: [String: Any?]) -> Void
41
51
 
42
52
  static var tracksUpdateListenersManager = TracksUpdateListenersManager()
@@ -53,13 +63,10 @@ class RNFishjamClient: FishjamClientListener {
53
63
  }
54
64
 
55
65
  private func getSimulcastConfigFromOptions(simulcastConfig: RNSimulcastConfig) throws -> SimulcastConfig {
56
- var activeEncodings: [TrackEncoding] = []
57
-
58
- for encoding in simulcastConfig.activeEncodings {
59
- if let fishjamEncoding = try? TrackEncoding(encoding) {
60
- activeEncodings.append(fishjamEncoding)
61
- }
62
- }
66
+ // iOS has a limit of 3 hardware encoders
67
+ // 3 simulcast layers + 1 screen share layer = 4, which is too much
68
+ // so we limit simulcast layers to 2
69
+ let activeEncodings: [TrackEncoding] = [.l, .h]
63
70
 
64
71
  return SimulcastConfig(
65
72
  enabled: simulcastConfig.enabled,
@@ -67,15 +74,6 @@ class RNFishjamClient: FishjamClientListener {
67
74
  )
68
75
  }
69
76
 
70
- private func getMaxBandwidthFromOptions(maxBandwidth: RNTrackBandwidthLimit) -> TrackBandwidthLimit {
71
- if let maxBandwidth: Int = maxBandwidth.get() {
72
- return .BandwidthLimit(maxBandwidth)
73
- } else if let maxBandwidth: [String: Int] = maxBandwidth.get() {
74
- return .SimulcastBandwidthLimit(maxBandwidth)
75
- }
76
- return .BandwidthLimit(0)
77
- }
78
-
79
77
  func create() {
80
78
  RNFishjamClient.fishjamClient = FishjamClient(listener: self)
81
79
  }
@@ -83,7 +81,6 @@ class RNFishjamClient: FishjamClientListener {
83
81
  func getVideoParametersFromOptions(connectionOptions: CameraConfig) throws -> VideoParameters {
84
82
  let videoQuality = connectionOptions.quality
85
83
  let flipDimensions = connectionOptions.flipDimensions
86
- let videoBandwidthLimit = getMaxBandwidthFromOptions(maxBandwidth: connectionOptions.maxBandwidth)
87
84
  let simulcastConfig = try getSimulcastConfigFromOptions(simulcastConfig: connectionOptions.simulcastConfig)
88
85
 
89
86
  let preset: VideoParameters = {
@@ -114,7 +111,7 @@ class RNFishjamClient: FishjamClientListener {
114
111
  }()
115
112
  let videoParameters = VideoParameters(
116
113
  dimensions: flipDimensions ? preset.dimensions.flipped : preset.dimensions,
117
- maxBandwidth: videoBandwidthLimit,
114
+ maxBandwidth: preset.maxBandwidth,
118
115
  simulcastConfig: simulcastConfig
119
116
  )
120
117
  return videoParameters
@@ -207,7 +204,6 @@ class RNFishjamClient: FishjamClientListener {
207
204
  ) {
208
205
  peerStatus = .connecting
209
206
  connectPromise = promise
210
- localUserMetadata = ["server": [:], "peer": peerMetadata].toMetadata()
211
207
 
212
208
  let reconnectConfig = FishjamCloudClient.ReconnectConfig(
213
209
  maxAttempts: config.reconnectConfig.maxAttempts, initialDelayMs: config.reconnectConfig.initialDelayMs,
@@ -250,11 +246,6 @@ class RNFishjamClient: FishjamClientListener {
250
246
  try ensureCreated()
251
247
 
252
248
  guard !isCameraInitialized else {
253
- emit(
254
- event: .warning(
255
- message:
256
- "Camera already started. You may only call startCamera once before leaveRoom is called."))
257
-
258
249
  return true
259
250
  }
260
251
 
@@ -288,7 +279,8 @@ class RNFishjamClient: FishjamClientListener {
288
279
  isCameraOn = enabled
289
280
  emit(
290
281
  event: .currentCameraChanged(
291
- localCamera: cameraTrack.currentCaptureDevice?.toLocalCamera(), isCameraOn: enabled))
282
+ localCamera: cameraTrack.currentCaptureDevice?.toLocalCamera(), isCameraOn: enabled,
283
+ isCameraInitialized: isCameraInitialized))
292
284
  RNFishjamClient.localCameraTracksChangedListenersManager.notifyListeners()
293
285
  }
294
286
 
@@ -316,11 +308,7 @@ class RNFishjamClient: FishjamClientListener {
316
308
  try await startMicrophone()
317
309
  }
318
310
 
319
- try updateLocalAudioTrackMetadata(metadata: [
320
- "active": isMicrophoneOn,
321
- "paused": !isMicrophoneOn, //TODO: FCE-711
322
- "type": "microphone",
323
- ])
311
+ try updateLocalAudioTrackMetadata(metadata: getMicrophoneTrackMetadata())
324
312
 
325
313
  return isMicrophoneOn
326
314
  }
@@ -330,12 +318,21 @@ class RNFishjamClient: FishjamClientListener {
330
318
  emit(event: .warning(message: "Microphone permission not granted."))
331
319
  return
332
320
  }
333
- let microphoneTrack = RNFishjamClient.fishjamClient!.createAudioTrack(metadata: Metadata())
321
+ let microphoneTrack = RNFishjamClient.fishjamClient!.createAudioTrack(
322
+ metadata: getMicrophoneTrackMetadata().toMetadata())
334
323
  setAudioSessionMode()
335
324
  setMicrophoneTrackState(microphoneTrack, enabled: true)
336
325
  emitEndpoints()
337
326
  }
338
327
 
328
+ private func getMicrophoneTrackMetadata() -> [String: Any] {
329
+ return [
330
+ "active": isMicrophoneOn,
331
+ "paused": !isMicrophoneOn, //TODO: FCE-711
332
+ "type": "microphone",
333
+ ]
334
+ }
335
+
339
336
  private func setMicrophoneTrackState(_ microphoneTrack: LocalAudioTrack, enabled: Bool) {
340
337
  microphoneTrack.enabled = enabled
341
338
  isMicrophoneOn = enabled
@@ -392,8 +389,6 @@ class RNFishjamClient: FishjamClientListener {
392
389
  let simulcastConfig = try getSimulcastConfigFromOptions(simulcastConfig: screenShareOptions.simulcastConfig)
393
390
 
394
391
  screenShareSimulcastConfig = simulcastConfig
395
- screenShareMaxBandwidth = getMaxBandwidthFromOptions(
396
- maxBandwidth: screenShareOptions.maxBandwidth)
397
392
  let screenShareMetadata = screenShareOptions.screenShareMetadata.toMetadata()
398
393
  let videoParameters = getScreenShareVideoParameters(options: screenShareOptions)
399
394
  RNFishjamClient.fishjamClient!.prepareForScreenBroadcast(
@@ -447,7 +442,6 @@ class RNFishjamClient: FishjamClientListener {
447
442
  let simulcastConfig = try getSimulcastConfigFromOptions(simulcastConfig: screenShareOptions.simulcastConfig)
448
443
 
449
444
  screenShareSimulcastConfig = simulcastConfig
450
- screenShareMaxBandwidth = getMaxBandwidthFromOptions(maxBandwidth: screenShareOptions.maxBandwidth)
451
445
  let metadata = screenShareOptions.screenShareMetadata.toMetadata()
452
446
  let videoParameters = getScreenShareVideoParameters(options: screenShareOptions)
453
447
  let screenAppTrack = RNFishjamClient.fishjamClient!.createScreenAppTrack(
@@ -489,7 +483,7 @@ class RNFishjamClient: FishjamClientListener {
489
483
  return [localEndpoint] + remoteEndpoints
490
484
  }
491
485
 
492
- func getPeers() throws -> [[String: Any?]] {
486
+ func getPeers() -> [[String: Any?]] {
493
487
  let endpoints = RNFishjamClient.getLocalAndRemoteEndpoints()
494
488
  return endpoints.compactMap { endpoint in
495
489
  [
@@ -512,7 +506,7 @@ class RNFishjamClient: FishjamClientListener {
512
506
  "id": track.id,
513
507
  "type": "Audio",
514
508
  "metadata": track.metadata.toDict(),
515
- "vadStatus": track.vadStatus.rawValue,
509
+ "vadStatus": track.vadStatus == .speech ? "speech" : "silence",
516
510
  ]
517
511
 
518
512
  case let track as LocalCameraTrack:
@@ -722,10 +716,11 @@ class RNFishjamClient: FishjamClientListener {
722
716
  return res
723
717
  }
724
718
 
725
- func getStatistics() throws -> [String: Any] {
719
+ func getStatistics() async throws -> [String: Any] {
726
720
  try ensureCreated()
727
721
 
728
- let stats = RNFishjamClient.fishjamClient!.getStats()
722
+ let stats = await RNFishjamClient.fishjamClient!.getStats()
723
+
729
724
  let pairs = stats.map { (key, value) in
730
725
  let rnValue =
731
726
  value is RTCOutboundStats
@@ -755,7 +750,6 @@ class RNFishjamClient: FishjamClientListener {
755
750
  }
756
751
  return VideoParameters(
757
752
  dimensions: preset.dimensions.flipped,
758
- maxBandwidth: screenShareMaxBandwidth,
759
753
  maxFps: preset.maxFps,
760
754
  simulcastConfig: screenShareSimulcastConfig
761
755
  )
@@ -768,7 +762,7 @@ class RNFishjamClient: FishjamClientListener {
768
762
  }
769
763
 
770
764
  func emitEndpoints() {
771
- emit(event: .peersUpdate(peersData: (try? getPeers()) ?? []))
765
+ emit(event: .peersUpdate(peersData: getPeers()))
772
766
  }
773
767
 
774
768
  func onJoined(peerID: String, peersInRoom: [String: Endpoint]) {
@@ -836,7 +830,7 @@ class RNFishjamClient: FishjamClientListener {
836
830
  "E_MEMBRANE_CONNECT", "Failed to connect: socket close, code: \(code), reason: \(reason)")
837
831
  }
838
832
  connectPromise = nil
839
- peerStatus = .error
833
+ peerStatus = .idle
840
834
  }
841
835
 
842
836
  func onSocketError() {
@@ -844,6 +838,7 @@ class RNFishjamClient: FishjamClientListener {
844
838
  connectPromise.reject("E_MEMBRANE_CONNECT", "Failed to connect: socket error")
845
839
  }
846
840
  connectPromise = nil
841
+ peerStatus = .error
847
842
  }
848
843
 
849
844
  func onSocketOpen() {}
@@ -892,21 +887,23 @@ class RNFishjamClient: FishjamClientListener {
892
887
  }
893
888
 
894
889
  func onReconnectionStarted() {
895
- emit(event: .reconnectionStarted)
890
+ reconnectionStatus = .reconnecting
896
891
  }
897
892
 
898
893
  func onReconnected() {
899
- emit(event: .reconnected)
894
+ reconnectionStatus = .idle
900
895
  }
901
896
 
902
897
  func onReconnectionRetriesLimitReached() {
903
- emit(event: .reconnectionRetriesLimitReached)
898
+ reconnectionStatus = .error
904
899
  }
905
900
 
906
901
  }
907
902
 
908
903
  extension RNFishjamClient: CameraCapturerDeviceChangedListener {
909
904
  func onCaptureDeviceChanged(_ device: AVCaptureDevice?) {
910
- emit(event: .currentCameraChanged(localCamera: device?.toLocalCamera(), isCameraOn: isCameraOn))
905
+ emit(
906
+ event: .currentCameraChanged(
907
+ localCamera: device?.toLocalCamera(), isCameraOn: isCameraOn, isCameraInitialized: isCameraInitialized))
911
908
  }
912
909
  }