@werxt/livekit-components-react 2.9.20

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 (488) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +36 -0
  3. package/dist/assets/icons/CameraDisabledIcon.d.ts +11 -0
  4. package/dist/assets/icons/CameraDisabledIcon.d.ts.map +1 -0
  5. package/dist/assets/icons/CameraIcon.d.ts +11 -0
  6. package/dist/assets/icons/CameraIcon.d.ts.map +1 -0
  7. package/dist/assets/icons/ChatCloseIcon.d.ts +11 -0
  8. package/dist/assets/icons/ChatCloseIcon.d.ts.map +1 -0
  9. package/dist/assets/icons/ChatIcon.d.ts +11 -0
  10. package/dist/assets/icons/ChatIcon.d.ts.map +1 -0
  11. package/dist/assets/icons/Chevron.d.ts +11 -0
  12. package/dist/assets/icons/Chevron.d.ts.map +1 -0
  13. package/dist/assets/icons/FocusToggleIcon.d.ts +11 -0
  14. package/dist/assets/icons/FocusToggleIcon.d.ts.map +1 -0
  15. package/dist/assets/icons/GearIcon.d.ts +11 -0
  16. package/dist/assets/icons/GearIcon.d.ts.map +1 -0
  17. package/dist/assets/icons/LeaveIcon.d.ts +11 -0
  18. package/dist/assets/icons/LeaveIcon.d.ts.map +1 -0
  19. package/dist/assets/icons/LockLockedIcon.d.ts +11 -0
  20. package/dist/assets/icons/LockLockedIcon.d.ts.map +1 -0
  21. package/dist/assets/icons/MicDisabledIcon.d.ts +11 -0
  22. package/dist/assets/icons/MicDisabledIcon.d.ts.map +1 -0
  23. package/dist/assets/icons/MicIcon.d.ts +11 -0
  24. package/dist/assets/icons/MicIcon.d.ts.map +1 -0
  25. package/dist/assets/icons/QualityExcellentIcon.d.ts +11 -0
  26. package/dist/assets/icons/QualityExcellentIcon.d.ts.map +1 -0
  27. package/dist/assets/icons/QualityGoodIcon.d.ts +11 -0
  28. package/dist/assets/icons/QualityGoodIcon.d.ts.map +1 -0
  29. package/dist/assets/icons/QualityPoorIcon.d.ts +11 -0
  30. package/dist/assets/icons/QualityPoorIcon.d.ts.map +1 -0
  31. package/dist/assets/icons/QualityUnknownIcon.d.ts +11 -0
  32. package/dist/assets/icons/QualityUnknownIcon.d.ts.map +1 -0
  33. package/dist/assets/icons/ScreenShareIcon.d.ts +11 -0
  34. package/dist/assets/icons/ScreenShareIcon.d.ts.map +1 -0
  35. package/dist/assets/icons/ScreenShareStopIcon.d.ts +11 -0
  36. package/dist/assets/icons/ScreenShareStopIcon.d.ts.map +1 -0
  37. package/dist/assets/icons/SpinnerIcon.d.ts +11 -0
  38. package/dist/assets/icons/SpinnerIcon.d.ts.map +1 -0
  39. package/dist/assets/icons/UnfocusToggleIcon.d.ts +11 -0
  40. package/dist/assets/icons/UnfocusToggleIcon.d.ts.map +1 -0
  41. package/dist/assets/icons/index.d.ts +20 -0
  42. package/dist/assets/icons/index.d.ts.map +1 -0
  43. package/dist/assets/icons/util.d.ts +11 -0
  44. package/dist/assets/icons/util.d.ts.map +1 -0
  45. package/dist/assets/images/ParticipantPlaceholder.d.ts +11 -0
  46. package/dist/assets/images/ParticipantPlaceholder.d.ts.map +1 -0
  47. package/dist/assets/images/index.d.ts +2 -0
  48. package/dist/assets/images/index.d.ts.map +1 -0
  49. package/dist/components/ChatEntry.d.ts +35 -0
  50. package/dist/components/ChatEntry.d.ts.map +1 -0
  51. package/dist/components/ConnectionState.d.ts +23 -0
  52. package/dist/components/ConnectionState.d.ts.map +1 -0
  53. package/dist/components/ConnectionStateToast.d.ts +13 -0
  54. package/dist/components/ConnectionStateToast.d.ts.map +1 -0
  55. package/dist/components/LiveKitRoom.d.ts +92 -0
  56. package/dist/components/LiveKitRoom.d.ts.map +1 -0
  57. package/dist/components/ParticipantLoop.d.ts +28 -0
  58. package/dist/components/ParticipantLoop.d.ts.map +1 -0
  59. package/dist/components/RoomAudioRenderer.d.ts +29 -0
  60. package/dist/components/RoomAudioRenderer.d.ts.map +1 -0
  61. package/dist/components/RoomName.d.ts +20 -0
  62. package/dist/components/RoomName.d.ts.map +1 -0
  63. package/dist/components/SessionProvider.d.ts +13 -0
  64. package/dist/components/SessionProvider.d.ts.map +1 -0
  65. package/dist/components/Toast.d.ts +14 -0
  66. package/dist/components/Toast.d.ts.map +1 -0
  67. package/dist/components/TrackLoop.d.ts +26 -0
  68. package/dist/components/TrackLoop.d.ts.map +1 -0
  69. package/dist/components/controls/ChatToggle.d.ts +19 -0
  70. package/dist/components/controls/ChatToggle.d.ts.map +1 -0
  71. package/dist/components/controls/ClearPinButton.d.ts +20 -0
  72. package/dist/components/controls/ClearPinButton.d.ts.map +1 -0
  73. package/dist/components/controls/DisconnectButton.d.ts +19 -0
  74. package/dist/components/controls/DisconnectButton.d.ts.map +1 -0
  75. package/dist/components/controls/FocusToggle.d.ts +21 -0
  76. package/dist/components/controls/FocusToggle.d.ts.map +1 -0
  77. package/dist/components/controls/MediaDeviceSelect.d.ts +40 -0
  78. package/dist/components/controls/MediaDeviceSelect.d.ts.map +1 -0
  79. package/dist/components/controls/PaginationControl.d.ts +9 -0
  80. package/dist/components/controls/PaginationControl.d.ts.map +1 -0
  81. package/dist/components/controls/PaginationIndicator.d.ts +7 -0
  82. package/dist/components/controls/PaginationIndicator.d.ts.map +1 -0
  83. package/dist/components/controls/SettingsMenuToggle.d.ts +13 -0
  84. package/dist/components/controls/SettingsMenuToggle.d.ts.map +1 -0
  85. package/dist/components/controls/StartAudio.d.ts +24 -0
  86. package/dist/components/controls/StartAudio.d.ts.map +1 -0
  87. package/dist/components/controls/StartMediaButton.d.ts +22 -0
  88. package/dist/components/controls/StartMediaButton.d.ts.map +1 -0
  89. package/dist/components/controls/TrackToggle.d.ts +32 -0
  90. package/dist/components/controls/TrackToggle.d.ts.map +1 -0
  91. package/dist/components/index.d.ts +30 -0
  92. package/dist/components/index.d.ts.map +1 -0
  93. package/dist/components/layout/CarouselLayout.d.ts +27 -0
  94. package/dist/components/layout/CarouselLayout.d.ts.map +1 -0
  95. package/dist/components/layout/FocusLayout.d.ts +25 -0
  96. package/dist/components/layout/FocusLayout.d.ts.map +1 -0
  97. package/dist/components/layout/GridLayout.d.ts +26 -0
  98. package/dist/components/layout/GridLayout.d.ts.map +1 -0
  99. package/dist/components/layout/LayoutContextProvider.d.ts +12 -0
  100. package/dist/components/layout/LayoutContextProvider.d.ts.map +1 -0
  101. package/dist/components/layout/index.d.ts +4 -0
  102. package/dist/components/layout/index.d.ts.map +1 -0
  103. package/dist/components/participant/AudioTrack.d.ts +33 -0
  104. package/dist/components/participant/AudioTrack.d.ts.map +1 -0
  105. package/dist/components/participant/AudioVisualizer.d.ts +22 -0
  106. package/dist/components/participant/AudioVisualizer.d.ts.map +1 -0
  107. package/dist/components/participant/BarVisualizer.d.ts +77 -0
  108. package/dist/components/participant/BarVisualizer.d.ts.map +1 -0
  109. package/dist/components/participant/ConnectionQualityIndicator.d.ts +16 -0
  110. package/dist/components/participant/ConnectionQualityIndicator.d.ts.map +1 -0
  111. package/dist/components/participant/ParticipantAudioTile.d.ts +14 -0
  112. package/dist/components/participant/ParticipantAudioTile.d.ts.map +1 -0
  113. package/dist/components/participant/ParticipantName.d.ts +17 -0
  114. package/dist/components/participant/ParticipantName.d.ts.map +1 -0
  115. package/dist/components/participant/ParticipantTile.d.ts +49 -0
  116. package/dist/components/participant/ParticipantTile.d.ts.map +1 -0
  117. package/dist/components/participant/TrackMutedIndicator.d.ts +19 -0
  118. package/dist/components/participant/TrackMutedIndicator.d.ts.map +1 -0
  119. package/dist/components/participant/VideoTrack.d.ts +23 -0
  120. package/dist/components/participant/VideoTrack.d.ts.map +1 -0
  121. package/dist/components/participant/animationSequences/connectingSequence.d.ts +2 -0
  122. package/dist/components/participant/animationSequences/connectingSequence.d.ts.map +1 -0
  123. package/dist/components/participant/animationSequences/listeningSequence.d.ts +2 -0
  124. package/dist/components/participant/animationSequences/listeningSequence.d.ts.map +1 -0
  125. package/dist/components/participant/animationSequences/thinkingSequence.d.ts +2 -0
  126. package/dist/components/participant/animationSequences/thinkingSequence.d.ts.map +1 -0
  127. package/dist/components/participant/animators/useBarAnimator.d.ts +3 -0
  128. package/dist/components/participant/animators/useBarAnimator.d.ts.map +1 -0
  129. package/dist/components-lNrIMTWQ.mjs +1051 -0
  130. package/dist/components-lNrIMTWQ.mjs.map +1 -0
  131. package/dist/context/chat-context.d.ts +23 -0
  132. package/dist/context/chat-context.d.ts.map +1 -0
  133. package/dist/context/feature-context.d.ts +14 -0
  134. package/dist/context/feature-context.d.ts.map +1 -0
  135. package/dist/context/index.d.ts +10 -0
  136. package/dist/context/index.d.ts.map +1 -0
  137. package/dist/context/layout-context.d.ts +32 -0
  138. package/dist/context/layout-context.d.ts.map +1 -0
  139. package/dist/context/participant-context.d.ts +22 -0
  140. package/dist/context/participant-context.d.ts.map +1 -0
  141. package/dist/context/pin-context.d.ts +17 -0
  142. package/dist/context/pin-context.d.ts.map +1 -0
  143. package/dist/context/room-context.d.ts +22 -0
  144. package/dist/context/room-context.d.ts.map +1 -0
  145. package/dist/context/session-context.d.ts +22 -0
  146. package/dist/context/session-context.d.ts.map +1 -0
  147. package/dist/context/track-reference-context.d.ts +25 -0
  148. package/dist/context/track-reference-context.d.ts.map +1 -0
  149. package/dist/contexts-D4V9wQRc.mjs +4026 -0
  150. package/dist/contexts-D4V9wQRc.mjs.map +1 -0
  151. package/dist/hooks/cloud/krisp/useKrispNoiseFilter.d.ts +42 -0
  152. package/dist/hooks/cloud/krisp/useKrispNoiseFilter.d.ts.map +1 -0
  153. package/dist/hooks/index.d.ts +54 -0
  154. package/dist/hooks/index.d.ts.map +1 -0
  155. package/dist/hooks/internal/index.d.ts +10 -0
  156. package/dist/hooks/internal/index.d.ts.map +1 -0
  157. package/dist/hooks/internal/useMediaQuery.d.ts +7 -0
  158. package/dist/hooks/internal/useMediaQuery.d.ts.map +1 -0
  159. package/dist/hooks/internal/useObservableState.d.ts +6 -0
  160. package/dist/hooks/internal/useObservableState.d.ts.map +1 -0
  161. package/dist/hooks/internal/useResizeObserver.d.ts +14 -0
  162. package/dist/hooks/internal/useResizeObserver.d.ts.map +1 -0
  163. package/dist/hooks/useAgent.d.ts +219 -0
  164. package/dist/hooks/useAgent.d.ts.map +1 -0
  165. package/dist/hooks/useAudioPlayback.d.ts +15 -0
  166. package/dist/hooks/useAudioPlayback.d.ts.map +1 -0
  167. package/dist/hooks/useChat.d.ts +43 -0
  168. package/dist/hooks/useChat.d.ts.map +1 -0
  169. package/dist/hooks/useChatToggle.d.ts +21 -0
  170. package/dist/hooks/useChatToggle.d.ts.map +1 -0
  171. package/dist/hooks/useClearPinButton.d.ts +15 -0
  172. package/dist/hooks/useClearPinButton.d.ts.map +1 -0
  173. package/dist/hooks/useConnectionQualityIndicator.d.ts +20 -0
  174. package/dist/hooks/useConnectionQualityIndicator.d.ts.map +1 -0
  175. package/dist/hooks/useConnectionStatus.d.ts +12 -0
  176. package/dist/hooks/useConnectionStatus.d.ts.map +1 -0
  177. package/dist/hooks/useDataChannel.d.ts +38 -0
  178. package/dist/hooks/useDataChannel.d.ts.map +1 -0
  179. package/dist/hooks/useDisconnectButton.d.ts +21 -0
  180. package/dist/hooks/useDisconnectButton.d.ts.map +1 -0
  181. package/dist/hooks/useEvents.d.ts +9 -0
  182. package/dist/hooks/useEvents.d.ts.map +1 -0
  183. package/dist/hooks/useFacingMode.d.ts +10 -0
  184. package/dist/hooks/useFacingMode.d.ts.map +1 -0
  185. package/dist/hooks/useFocusToggle.d.ts +26 -0
  186. package/dist/hooks/useFocusToggle.d.ts.map +1 -0
  187. package/dist/hooks/useGridLayout.d.ts +27 -0
  188. package/dist/hooks/useGridLayout.d.ts.map +1 -0
  189. package/dist/hooks/useIsEncrypted.d.ts +12 -0
  190. package/dist/hooks/useIsEncrypted.d.ts.map +1 -0
  191. package/dist/hooks/useIsMuted.d.ts +22 -0
  192. package/dist/hooks/useIsMuted.d.ts.map +1 -0
  193. package/dist/hooks/useIsRecording.d.ts +11 -0
  194. package/dist/hooks/useIsRecording.d.ts.map +1 -0
  195. package/dist/hooks/useIsSpeaking.d.ts +11 -0
  196. package/dist/hooks/useIsSpeaking.d.ts.map +1 -0
  197. package/dist/hooks/useLiveKitRoom.d.ts +19 -0
  198. package/dist/hooks/useLiveKitRoom.d.ts.map +1 -0
  199. package/dist/hooks/useLocalParticipant.d.ts +29 -0
  200. package/dist/hooks/useLocalParticipant.d.ts.map +1 -0
  201. package/dist/hooks/useLocalParticipantPermissions.d.ts +12 -0
  202. package/dist/hooks/useLocalParticipantPermissions.d.ts.map +1 -0
  203. package/dist/hooks/useMediaDeviceSelect.d.ts +41 -0
  204. package/dist/hooks/useMediaDeviceSelect.d.ts.map +1 -0
  205. package/dist/hooks/useMediaDevices.d.ts +15 -0
  206. package/dist/hooks/useMediaDevices.d.ts.map +1 -0
  207. package/dist/hooks/useMediaTrackBySourceOrName.d.ts +18 -0
  208. package/dist/hooks/useMediaTrackBySourceOrName.d.ts.map +1 -0
  209. package/dist/hooks/usePagination.d.ts +24 -0
  210. package/dist/hooks/usePagination.d.ts.map +1 -0
  211. package/dist/hooks/useParticipantAttributes.d.ts +30 -0
  212. package/dist/hooks/useParticipantAttributes.d.ts.map +1 -0
  213. package/dist/hooks/useParticipantInfo.d.ts +21 -0
  214. package/dist/hooks/useParticipantInfo.d.ts.map +1 -0
  215. package/dist/hooks/useParticipantPermissions.d.ts +17 -0
  216. package/dist/hooks/useParticipantPermissions.d.ts.map +1 -0
  217. package/dist/hooks/useParticipantTile.d.ts +22 -0
  218. package/dist/hooks/useParticipantTile.d.ts.map +1 -0
  219. package/dist/hooks/useParticipantTracks.d.ts +14 -0
  220. package/dist/hooks/useParticipantTracks.d.ts.map +1 -0
  221. package/dist/hooks/useParticipants.d.ts +30 -0
  222. package/dist/hooks/useParticipants.d.ts.map +1 -0
  223. package/dist/hooks/usePersistentUserChoices.d.ts +35 -0
  224. package/dist/hooks/usePersistentUserChoices.d.ts.map +1 -0
  225. package/dist/hooks/usePinnedTracks.d.ts +14 -0
  226. package/dist/hooks/usePinnedTracks.d.ts.map +1 -0
  227. package/dist/hooks/useRemoteParticipant.d.ts +35 -0
  228. package/dist/hooks/useRemoteParticipant.d.ts.map +1 -0
  229. package/dist/hooks/useRemoteParticipants.d.ts +30 -0
  230. package/dist/hooks/useRemoteParticipants.d.ts.map +1 -0
  231. package/dist/hooks/useRoomInfo.d.ts +21 -0
  232. package/dist/hooks/useRoomInfo.d.ts.map +1 -0
  233. package/dist/hooks/useSequentialRoomConnectDisconnect.d.ts +27 -0
  234. package/dist/hooks/useSequentialRoomConnectDisconnect.d.ts.map +1 -0
  235. package/dist/hooks/useSession.d.ts +130 -0
  236. package/dist/hooks/useSession.d.ts.map +1 -0
  237. package/dist/hooks/useSessionMessages.d.ts +29 -0
  238. package/dist/hooks/useSessionMessages.d.ts.map +1 -0
  239. package/dist/hooks/useSettingsToggle.d.ts +20 -0
  240. package/dist/hooks/useSettingsToggle.d.ts.map +1 -0
  241. package/dist/hooks/useSortedParticipants.d.ts +7 -0
  242. package/dist/hooks/useSortedParticipants.d.ts.map +1 -0
  243. package/dist/hooks/useSpeakingParticipants.d.ts +16 -0
  244. package/dist/hooks/useSpeakingParticipants.d.ts.map +1 -0
  245. package/dist/hooks/useStartAudio.d.ts +27 -0
  246. package/dist/hooks/useStartAudio.d.ts.map +1 -0
  247. package/dist/hooks/useStartVideo.d.ts +26 -0
  248. package/dist/hooks/useStartVideo.d.ts.map +1 -0
  249. package/dist/hooks/useSwipe.d.ts +24 -0
  250. package/dist/hooks/useSwipe.d.ts.map +1 -0
  251. package/dist/hooks/useTextStream.d.ts +20 -0
  252. package/dist/hooks/useTextStream.d.ts.map +1 -0
  253. package/dist/hooks/useToken.d.ts +20 -0
  254. package/dist/hooks/useToken.d.ts.map +1 -0
  255. package/dist/hooks/useTrack.d.ts +4 -0
  256. package/dist/hooks/useTrack.d.ts.map +1 -0
  257. package/dist/hooks/useTrackByName.d.ts +10 -0
  258. package/dist/hooks/useTrackByName.d.ts.map +1 -0
  259. package/dist/hooks/useTrackMutedIndicator.d.ts +18 -0
  260. package/dist/hooks/useTrackMutedIndicator.d.ts.map +1 -0
  261. package/dist/hooks/useTrackRefBySourceOrName.d.ts +7 -0
  262. package/dist/hooks/useTrackRefBySourceOrName.d.ts.map +1 -0
  263. package/dist/hooks/useTrackSyncTime.d.ts +10 -0
  264. package/dist/hooks/useTrackSyncTime.d.ts.map +1 -0
  265. package/dist/hooks/useTrackToggle.d.ts +27 -0
  266. package/dist/hooks/useTrackToggle.d.ts.map +1 -0
  267. package/dist/hooks/useTrackTranscription.d.ts +26 -0
  268. package/dist/hooks/useTrackTranscription.d.ts.map +1 -0
  269. package/dist/hooks/useTrackVolume.d.ts +49 -0
  270. package/dist/hooks/useTrackVolume.d.ts.map +1 -0
  271. package/dist/hooks/useTracks.d.ts +29 -0
  272. package/dist/hooks/useTracks.d.ts.map +1 -0
  273. package/dist/hooks/useTranscriptions.d.ts +21 -0
  274. package/dist/hooks/useTranscriptions.d.ts.map +1 -0
  275. package/dist/hooks/useVisualStableUpdate.d.ts +27 -0
  276. package/dist/hooks/useVisualStableUpdate.d.ts.map +1 -0
  277. package/dist/hooks/useVoiceAssistant.d.ts +43 -0
  278. package/dist/hooks/useVoiceAssistant.d.ts.map +1 -0
  279. package/dist/hooks/useWarnAboutMissingStyles.d.ts +5 -0
  280. package/dist/hooks/useWarnAboutMissingStyles.d.ts.map +1 -0
  281. package/dist/hooks-hQJmeINB.mjs +1992 -0
  282. package/dist/hooks-hQJmeINB.mjs.map +1 -0
  283. package/dist/hooks.d.ts +2 -0
  284. package/dist/hooks.js +2 -0
  285. package/dist/hooks.js.map +1 -0
  286. package/dist/hooks.mjs +64 -0
  287. package/dist/hooks.mjs.map +1 -0
  288. package/dist/index.d.ts +9 -0
  289. package/dist/index.d.ts.map +1 -0
  290. package/dist/index.docs.d.ts +6 -0
  291. package/dist/index.docs.d.ts.map +1 -0
  292. package/dist/index.js +2 -0
  293. package/dist/index.js.map +1 -0
  294. package/dist/index.mjs +157 -0
  295. package/dist/index.mjs.map +1 -0
  296. package/dist/krisp.d.ts +2 -0
  297. package/dist/krisp.js +2 -0
  298. package/dist/krisp.js.map +1 -0
  299. package/dist/krisp.mjs +45 -0
  300. package/dist/krisp.mjs.map +1 -0
  301. package/dist/mergeProps.d.ts +25 -0
  302. package/dist/mergeProps.d.ts.map +1 -0
  303. package/dist/prefabs/AudioConference.d.ts +22 -0
  304. package/dist/prefabs/AudioConference.d.ts.map +1 -0
  305. package/dist/prefabs/Chat.d.ts +35 -0
  306. package/dist/prefabs/Chat.d.ts.map +1 -0
  307. package/dist/prefabs/ControlBar.d.ts +45 -0
  308. package/dist/prefabs/ControlBar.d.ts.map +1 -0
  309. package/dist/prefabs/MediaDeviceMenu.d.ts +36 -0
  310. package/dist/prefabs/MediaDeviceMenu.d.ts.map +1 -0
  311. package/dist/prefabs/PreJoin.d.ts +59 -0
  312. package/dist/prefabs/PreJoin.d.ts.map +1 -0
  313. package/dist/prefabs/VideoConference.d.ts +35 -0
  314. package/dist/prefabs/VideoConference.d.ts.map +1 -0
  315. package/dist/prefabs/VoiceAssistantControlBar.d.ts +32 -0
  316. package/dist/prefabs/VoiceAssistantControlBar.d.ts.map +1 -0
  317. package/dist/prefabs/index.d.ts +8 -0
  318. package/dist/prefabs/index.d.ts.map +1 -0
  319. package/dist/prefabs.d.ts +2 -0
  320. package/dist/prefabs.js +2 -0
  321. package/dist/prefabs.js.map +1 -0
  322. package/dist/prefabs.mjs +579 -0
  323. package/dist/prefabs.mjs.map +1 -0
  324. package/dist/room-BP3SCCCd.mjs +191 -0
  325. package/dist/room-BP3SCCCd.mjs.map +1 -0
  326. package/dist/shared-88J2fzv7.js +2 -0
  327. package/dist/shared-88J2fzv7.js.map +1 -0
  328. package/dist/shared-BDr0qLg4.js +4 -0
  329. package/dist/shared-BDr0qLg4.js.map +1 -0
  330. package/dist/shared-CjI_UuOX.js +2 -0
  331. package/dist/shared-CjI_UuOX.js.map +1 -0
  332. package/dist/shared-DTHOl3uJ.js +2 -0
  333. package/dist/shared-DTHOl3uJ.js.map +1 -0
  334. package/dist/utils.d.ts +19 -0
  335. package/dist/utils.d.ts.map +1 -0
  336. package/package.json +104 -0
  337. package/src/assets/icons/CameraDisabledIcon.tsx +15 -0
  338. package/src/assets/icons/CameraIcon.tsx +14 -0
  339. package/src/assets/icons/ChatCloseIcon.tsx +17 -0
  340. package/src/assets/icons/ChatIcon.tsx +25 -0
  341. package/src/assets/icons/Chevron.tsx +19 -0
  342. package/src/assets/icons/FocusToggleIcon.tsx +16 -0
  343. package/src/assets/icons/GearIcon.tsx +19 -0
  344. package/src/assets/icons/LeaveIcon.tsx +25 -0
  345. package/src/assets/icons/LockLockedIcon.tsx +19 -0
  346. package/src/assets/icons/MicDisabledIcon.tsx +15 -0
  347. package/src/assets/icons/MicIcon.tsx +19 -0
  348. package/src/assets/icons/QualityExcellentIcon.tsx +15 -0
  349. package/src/assets/icons/QualityGoodIcon.tsx +19 -0
  350. package/src/assets/icons/QualityPoorIcon.tsx +20 -0
  351. package/src/assets/icons/QualityUnknownIcon.tsx +17 -0
  352. package/src/assets/icons/ScreenShareIcon.tsx +25 -0
  353. package/src/assets/icons/ScreenShareStopIcon.tsx +21 -0
  354. package/src/assets/icons/SpinnerIcon.tsx +93 -0
  355. package/src/assets/icons/UnfocusToggleIcon.tsx +16 -0
  356. package/src/assets/icons/index.ts +19 -0
  357. package/src/assets/icons/util.tsx +47 -0
  358. package/src/assets/images/ParticipantPlaceholder.tsx +31 -0
  359. package/src/assets/images/index.ts +1 -0
  360. package/src/assets/template.js +21 -0
  361. package/src/components/ChatEntry.tsx +112 -0
  362. package/src/components/ConnectionState.tsx +36 -0
  363. package/src/components/ConnectionStateToast.tsx +47 -0
  364. package/src/components/LiveKitRoom.tsx +122 -0
  365. package/src/components/ParticipantLoop.tsx +41 -0
  366. package/src/components/RoomAudioRenderer.tsx +57 -0
  367. package/src/components/RoomName.tsx +36 -0
  368. package/src/components/SessionProvider.tsx +22 -0
  369. package/src/components/Toast.tsx +18 -0
  370. package/src/components/TrackLoop.tsx +45 -0
  371. package/src/components/controls/ChatToggle.tsx +32 -0
  372. package/src/components/controls/ClearPinButton.tsx +32 -0
  373. package/src/components/controls/DisconnectButton.tsx +32 -0
  374. package/src/components/controls/FocusToggle.tsx +54 -0
  375. package/src/components/controls/MediaDeviceSelect.tsx +144 -0
  376. package/src/components/controls/PaginationControl.tsx +51 -0
  377. package/src/components/controls/PaginationIndicator.tsx +26 -0
  378. package/src/components/controls/SettingsMenuToggle.tsx +26 -0
  379. package/src/components/controls/StartAudio.tsx +40 -0
  380. package/src/components/controls/StartMediaButton.tsx +41 -0
  381. package/src/components/controls/TrackToggle.tsx +54 -0
  382. package/src/components/index.ts +34 -0
  383. package/src/components/layout/CarouselLayout.tsx +80 -0
  384. package/src/components/layout/FocusLayout.tsx +37 -0
  385. package/src/components/layout/GridLayout.tsx +63 -0
  386. package/src/components/layout/LayoutContextProvider.tsx +36 -0
  387. package/src/components/layout/index.ts +3 -0
  388. package/src/components/participant/AudioTrack.tsx +89 -0
  389. package/src/components/participant/AudioVisualizer.tsx +67 -0
  390. package/src/components/participant/BarVisualizer.tsx +164 -0
  391. package/src/components/participant/ConnectionQualityIndicator.tsx +36 -0
  392. package/src/components/participant/ParticipantAudioTile.tsx +67 -0
  393. package/src/components/participant/ParticipantName.tsx +50 -0
  394. package/src/components/participant/ParticipantTile.tsx +192 -0
  395. package/src/components/participant/TrackMutedIndicator.tsx +53 -0
  396. package/src/components/participant/VideoTrack.tsx +92 -0
  397. package/src/components/participant/animationSequences/connectingSequence.ts +9 -0
  398. package/src/components/participant/animationSequences/listeningSequence.ts +6 -0
  399. package/src/components/participant/animationSequences/thinkingSequence.ts +12 -0
  400. package/src/components/participant/animators/useBarAnimator.ts +55 -0
  401. package/src/context/chat-context.ts +37 -0
  402. package/src/context/feature-context.ts +28 -0
  403. package/src/context/index.ts +27 -0
  404. package/src/context/layout-context.ts +72 -0
  405. package/src/context/participant-context.ts +44 -0
  406. package/src/context/pin-context.ts +27 -0
  407. package/src/context/room-context.ts +42 -0
  408. package/src/context/session-context.ts +43 -0
  409. package/src/context/track-reference-context.ts +47 -0
  410. package/src/hooks/cloud/krisp/useKrispNoiseFilter.ts +110 -0
  411. package/src/hooks/index.ts +72 -0
  412. package/src/hooks/internal/index.ts +10 -0
  413. package/src/hooks/internal/useMediaQuery.ts +46 -0
  414. package/src/hooks/internal/useObservableState.ts +24 -0
  415. package/src/hooks/internal/useResizeObserver.ts +124 -0
  416. package/src/hooks/useAgent.ts +945 -0
  417. package/src/hooks/useAudioPlayback.ts +34 -0
  418. package/src/hooks/useChat.ts +57 -0
  419. package/src/hooks/useChatToggle.ts +38 -0
  420. package/src/hooks/useClearPinButton.ts +29 -0
  421. package/src/hooks/useConnectionQualityIndicator.ts +33 -0
  422. package/src/hooks/useConnectionStatus.ts +22 -0
  423. package/src/hooks/useDataChannel.ts +73 -0
  424. package/src/hooks/useDisconnectButton.ts +36 -0
  425. package/src/hooks/useEvents.ts +39 -0
  426. package/src/hooks/useFacingMode.ts +22 -0
  427. package/src/hooks/useFocusToggle.ts +59 -0
  428. package/src/hooks/useGridLayout.ts +44 -0
  429. package/src/hooks/useIsEncrypted.ts +29 -0
  430. package/src/hooks/useIsMuted.ts +51 -0
  431. package/src/hooks/useIsRecording.ts +23 -0
  432. package/src/hooks/useIsSpeaking.ts +21 -0
  433. package/src/hooks/useLiveKitRoom.ts +186 -0
  434. package/src/hooks/useLocalParticipant.ts +73 -0
  435. package/src/hooks/useLocalParticipantPermissions.ts +24 -0
  436. package/src/hooks/useMediaDeviceSelect.ts +81 -0
  437. package/src/hooks/useMediaDevices.ts +28 -0
  438. package/src/hooks/useMediaTrackBySourceOrName.ts +97 -0
  439. package/src/hooks/usePagination.test.ts +77 -0
  440. package/src/hooks/usePagination.ts +67 -0
  441. package/src/hooks/useParticipantAttributes.ts +69 -0
  442. package/src/hooks/useParticipantInfo.ts +35 -0
  443. package/src/hooks/useParticipantPermissions.ts +29 -0
  444. package/src/hooks/useParticipantTile.ts +81 -0
  445. package/src/hooks/useParticipantTracks.ts +54 -0
  446. package/src/hooks/useParticipants.ts +42 -0
  447. package/src/hooks/usePersistentUserChoices.ts +64 -0
  448. package/src/hooks/usePinnedTracks.ts +24 -0
  449. package/src/hooks/useRemoteParticipant.ts +79 -0
  450. package/src/hooks/useRemoteParticipants.ts +45 -0
  451. package/src/hooks/useRoomInfo.ts +32 -0
  452. package/src/hooks/useSequentialRoomConnectDisconnect.ts +171 -0
  453. package/src/hooks/useSession.ts +642 -0
  454. package/src/hooks/useSessionMessages.ts +158 -0
  455. package/src/hooks/useSettingsToggle.ts +32 -0
  456. package/src/hooks/useSortedParticipants.ts +20 -0
  457. package/src/hooks/useSpeakingParticipants.ts +27 -0
  458. package/src/hooks/useStartAudio.ts +50 -0
  459. package/src/hooks/useStartVideo.ts +49 -0
  460. package/src/hooks/useSwipe.ts +68 -0
  461. package/src/hooks/useTextStream.ts +35 -0
  462. package/src/hooks/useToken.ts +54 -0
  463. package/src/hooks/useTrack.ts +11 -0
  464. package/src/hooks/useTrackByName.ts +15 -0
  465. package/src/hooks/useTrackMutedIndicator.ts +44 -0
  466. package/src/hooks/useTrackRefBySourceOrName.ts +30 -0
  467. package/src/hooks/useTrackSyncTime.ts +18 -0
  468. package/src/hooks/useTrackToggle.ts +93 -0
  469. package/src/hooks/useTrackTranscription.ts +75 -0
  470. package/src/hooks/useTrackVolume.ts +283 -0
  471. package/src/hooks/useTracks.test.ts +60 -0
  472. package/src/hooks/useTracks.ts +154 -0
  473. package/src/hooks/useTranscriptions.ts +48 -0
  474. package/src/hooks/useVisualStableUpdate.ts +63 -0
  475. package/src/hooks/useVoiceAssistant.ts +109 -0
  476. package/src/hooks/useWarnAboutMissingStyles.ts +11 -0
  477. package/src/index.docs.ts +12 -0
  478. package/src/index.ts +32 -0
  479. package/src/mergeProps.ts +87 -0
  480. package/src/prefabs/AudioConference.tsx +57 -0
  481. package/src/prefabs/Chat.tsx +153 -0
  482. package/src/prefabs/ControlBar.tsx +227 -0
  483. package/src/prefabs/MediaDeviceMenu.tsx +159 -0
  484. package/src/prefabs/PreJoin.tsx +439 -0
  485. package/src/prefabs/VideoConference.tsx +184 -0
  486. package/src/prefabs/VoiceAssistantControlBar.tsx +109 -0
  487. package/src/prefabs/index.ts +11 -0
  488. package/src/utils.ts +78 -0
@@ -0,0 +1,642 @@
1
+ import * as React from 'react';
2
+ import type TypedEventEmitter from 'typed-emitter';
3
+ import {
4
+ Room,
5
+ RoomEvent,
6
+ ConnectionState,
7
+ TrackPublishOptions,
8
+ Track,
9
+ TokenSourceConfigurable,
10
+ TokenSourceFixed,
11
+ TokenSourceFetchOptions,
12
+ RoomConnectOptions,
13
+ decodeTokenPayload,
14
+ } from 'livekit-client';
15
+ import { EventEmitter } from 'events';
16
+
17
+ import { useMaybeRoomContext } from '../context';
18
+ import { AgentState, useAgent, useAgentTimeoutIdStore } from './useAgent';
19
+ import { TrackReference } from '@livekit/components-core';
20
+ import { useLocalParticipant } from './useLocalParticipant';
21
+
22
+ /** @beta */
23
+ export enum SessionEvent {
24
+ ConnectionStateChanged = 'connectionStateChanged',
25
+ /**
26
+ * Emits when an error is encountered while attempting to create a track.
27
+ * Use MediaDeviceFailure.getFailure(error) to get the reason of failure.
28
+ * args: (error: Error, kind: MediaDeviceKind)
29
+ */
30
+ MediaDevicesError = 'mediaDevicesError',
31
+ /**
32
+ * Emits when an error is received while decrypting frame received frame information.
33
+ * args: (error: Error)
34
+ */
35
+ EncryptionError = 'encryptionError',
36
+ }
37
+
38
+ /** @beta */
39
+ export type SessionCallbacks = {
40
+ [SessionEvent.ConnectionStateChanged]: (newAgentConnectionState: ConnectionState) => void;
41
+ [SessionEvent.MediaDevicesError]: (error: Error) => void;
42
+ [SessionEvent.EncryptionError]: (error: Error) => void;
43
+ };
44
+
45
+ /** @beta */
46
+ export type SessionConnectOptions = {
47
+ /** Optional abort signal which if triggered will terminate connecting even if it isn't complete */
48
+ signal?: AbortSignal;
49
+
50
+ tracks?: {
51
+ microphone?: {
52
+ enabled?: boolean;
53
+ publishOptions?: TrackPublishOptions;
54
+ };
55
+ camera?: {
56
+ enabled?: boolean;
57
+ publishOptions?: TrackPublishOptions;
58
+ };
59
+ screenShare?: {
60
+ enabled?: boolean;
61
+ publishOptions?: TrackPublishOptions;
62
+ };
63
+ };
64
+
65
+ /** Options for Room.connect(.., .., opts) */
66
+ roomConnectOptions?: RoomConnectOptions;
67
+ };
68
+
69
+ /** @beta */
70
+ export type SwitchActiveDeviceOptions = {
71
+ /**
72
+ * If true, adds an `exact` constraint to the getUserMedia request.
73
+ * The request will fail if this option is true and the device specified is not actually available
74
+ */
75
+ exact?: boolean;
76
+ };
77
+
78
+ type SessionStateCommon = {
79
+ room: Room;
80
+ internal: {
81
+ emitter: TypedEventEmitter<SessionCallbacks>;
82
+ tokenSource: TokenSourceConfigurable | TokenSourceFixed;
83
+ agentConnectTimeoutMilliseconds?: number;
84
+
85
+ agentTimeoutFailureReason: string | null;
86
+ startAgentTimeout: (agentConnectTimeoutMilliseconds?: number) => void;
87
+ clearAgentTimeout: () => void;
88
+ clearAgentTimeoutFailureReason: () => void;
89
+ updateAgentTimeoutState: (agentState: AgentState) => void;
90
+ updateAgentTimeoutParticipantExists: (agentParticipantExists: boolean) => void;
91
+ };
92
+ };
93
+
94
+ type SessionStateConnecting = SessionStateCommon & {
95
+ connectionState: ConnectionState.Connecting;
96
+ isConnected: false;
97
+
98
+ local: {
99
+ cameraTrack: undefined;
100
+ microphoneTrack: undefined;
101
+ screenShareTrack: undefined;
102
+ };
103
+ };
104
+
105
+ type SessionStateConnected = SessionStateCommon & {
106
+ connectionState:
107
+ | ConnectionState.Connected
108
+ | ConnectionState.Reconnecting
109
+ | ConnectionState.SignalReconnecting;
110
+ isConnected: true;
111
+
112
+ local: {
113
+ cameraTrack?: TrackReference;
114
+ microphoneTrack?: TrackReference;
115
+ screenShareTrack?: TrackReference;
116
+ };
117
+ };
118
+
119
+ type SessionStateDisconnected = SessionStateCommon & {
120
+ connectionState: ConnectionState.Disconnected;
121
+ isConnected: false;
122
+
123
+ local: {
124
+ cameraTrack: undefined;
125
+ microphoneTrack: undefined;
126
+ screenShareTrack: undefined;
127
+ };
128
+ };
129
+
130
+ type SessionActions = {
131
+ /** Returns a promise that resolves once the room connects. */
132
+ waitUntilConnected: (signal?: AbortSignal) => void;
133
+ /** Returns a promise that resolves once the room disconnects */
134
+ waitUntilDisconnected: (signal?: AbortSignal) => void;
135
+
136
+ prepareConnection: () => Promise<void>;
137
+
138
+ /** Connect to the underlying room and dispatch any agents */
139
+ start: (options?: SessionConnectOptions) => Promise<void>;
140
+
141
+ /** Disconnect from the underlying room */
142
+ end: () => Promise<void>;
143
+ };
144
+
145
+ /** @beta */
146
+ export type UseSessionReturn = (
147
+ | SessionStateConnecting
148
+ | SessionStateConnected
149
+ | SessionStateDisconnected
150
+ ) &
151
+ SessionActions;
152
+
153
+ type UseSessionCommonOptions = {
154
+ room?: Room;
155
+
156
+ /**
157
+ * Amount of time in milliseonds the system will wait for an agent to join the room, before
158
+ * transitioning to the "failure" state.
159
+ */
160
+ agentConnectTimeoutMilliseconds?: number;
161
+ };
162
+
163
+ type UseSessionConfigurableOptions = UseSessionCommonOptions & TokenSourceFetchOptions;
164
+ type UseSessionFixedOptions = UseSessionCommonOptions;
165
+
166
+ /**
167
+ * Given two TokenSourceFetchOptions values, check to see if they are deep equal.
168
+ *
169
+ * FIXME: swap this for an import from livekit-client once
170
+ * https://github.com/livekit/client-sdk-js/pull/1733 is merged and published!
171
+ * */
172
+ function areTokenSourceFetchOptionsEqual(a: TokenSourceFetchOptions, b: TokenSourceFetchOptions) {
173
+ const allKeysSet = new Set([...Object.keys(a), ...Object.keys(b)]) as Set<
174
+ keyof TokenSourceFetchOptions
175
+ >;
176
+
177
+ for (const key of allKeysSet) {
178
+ switch (key) {
179
+ case 'roomName':
180
+ case 'participantName':
181
+ case 'participantIdentity':
182
+ case 'participantMetadata':
183
+ case 'participantAttributes':
184
+ case 'agentName':
185
+ case 'agentMetadata':
186
+ if (a[key] !== b[key]) {
187
+ return false;
188
+ }
189
+ break;
190
+ default:
191
+ // ref: https://stackoverflow.com/a/58009992
192
+ const exhaustiveCheckedKey: never = key;
193
+ throw new Error(`Options key ${exhaustiveCheckedKey} not being checked for equality!`);
194
+ }
195
+ }
196
+
197
+ return true;
198
+ }
199
+
200
+ /** Internal hook used by useSession to manage creating a function which can be used to wait
201
+ * until the session is in a given state before resolving. */
202
+ function useSessionWaitUntilConnectionState(
203
+ emitter: TypedEventEmitter<SessionCallbacks>,
204
+ connectionState: UseSessionReturn['connectionState'],
205
+ ) {
206
+ const connectionStateRef = React.useRef(connectionState);
207
+ React.useEffect(() => {
208
+ connectionStateRef.current = connectionState;
209
+ }, [connectionState]);
210
+
211
+ const waitUntilConnectionState = React.useCallback(
212
+ async (state: UseSessionReturn['connectionState'], signal?: AbortSignal) => {
213
+ if (connectionStateRef.current === state) {
214
+ return;
215
+ }
216
+
217
+ return new Promise<void>((resolve, reject) => {
218
+ const onceEventOccurred = (newState: UseSessionReturn['connectionState']) => {
219
+ if (newState !== state) {
220
+ return;
221
+ }
222
+ cleanup();
223
+ resolve();
224
+ };
225
+ const abortHandler = () => {
226
+ cleanup();
227
+ reject(
228
+ new Error(
229
+ `useSession(/* ... */).waitUntilConnectionState(${state}, /* signal */) - signal aborted`,
230
+ ),
231
+ );
232
+ };
233
+
234
+ const cleanup = () => {
235
+ emitter.off(SessionEvent.ConnectionStateChanged, onceEventOccurred);
236
+ signal?.removeEventListener('abort', abortHandler);
237
+ };
238
+
239
+ emitter.on(SessionEvent.ConnectionStateChanged, onceEventOccurred);
240
+ signal?.addEventListener('abort', abortHandler);
241
+ });
242
+ },
243
+ [emitter],
244
+ );
245
+
246
+ return waitUntilConnectionState;
247
+ }
248
+
249
+ /** Internal hook used by useSession to manage creating a function that properly invokes
250
+ * tokenSource.fetch(...) with any fetch options */
251
+ function useSessionTokenSourceFetch(
252
+ tokenSource: TokenSourceConfigurable | TokenSourceFixed,
253
+ unstableRestOptions: Exclude<UseSessionConfigurableOptions, keyof UseSessionCommonOptions>,
254
+ ) {
255
+ const isConfigurable = tokenSource instanceof TokenSourceConfigurable;
256
+
257
+ const memoizedTokenFetchOptionsRef = React.useRef<TokenSourceFetchOptions | null>(
258
+ isConfigurable ? unstableRestOptions : null,
259
+ );
260
+
261
+ React.useEffect(() => {
262
+ if (!isConfigurable) {
263
+ memoizedTokenFetchOptionsRef.current = null;
264
+ return;
265
+ }
266
+
267
+ if (
268
+ memoizedTokenFetchOptionsRef.current !== null &&
269
+ areTokenSourceFetchOptionsEqual(memoizedTokenFetchOptionsRef.current, unstableRestOptions)
270
+ ) {
271
+ return;
272
+ }
273
+
274
+ memoizedTokenFetchOptionsRef.current = unstableRestOptions;
275
+ }, [isConfigurable, unstableRestOptions]);
276
+
277
+ const tokenSourceFetch = React.useCallback(async () => {
278
+ if (isConfigurable) {
279
+ if (!memoizedTokenFetchOptionsRef.current) {
280
+ throw new Error(
281
+ `AgentSession - memoized token fetch options are not set, but the passed tokenSource was an instance of TokenSourceConfigurable. If you are seeing this please make a new GitHub issue!`,
282
+ );
283
+ }
284
+ return tokenSource.fetch(memoizedTokenFetchOptionsRef.current);
285
+ } else {
286
+ return tokenSource.fetch();
287
+ }
288
+ }, [isConfigurable, tokenSource]);
289
+
290
+ return tokenSourceFetch;
291
+ }
292
+
293
+ /**
294
+ * A Session represents a managed connection to a Room which can contain Agents.
295
+ * @beta
296
+ */
297
+ export function useSession(
298
+ tokenSource: TokenSourceConfigurable,
299
+ options?: UseSessionConfigurableOptions,
300
+ ): UseSessionReturn;
301
+ /**
302
+ * A Session represents a managed connection to a Room which can contain Agents.
303
+ * @beta
304
+ */
305
+ export function useSession(
306
+ tokenSource: TokenSourceFixed,
307
+ options?: UseSessionFixedOptions,
308
+ ): UseSessionReturn;
309
+ export function useSession(
310
+ tokenSource: TokenSourceConfigurable | TokenSourceFixed,
311
+ options: UseSessionConfigurableOptions | UseSessionFixedOptions = {},
312
+ ): UseSessionReturn {
313
+ const { room: optionsRoom, agentConnectTimeoutMilliseconds, ...restOptions } = options;
314
+
315
+ const roomFromContext = useMaybeRoomContext();
316
+ const room = React.useMemo(
317
+ () => roomFromContext ?? optionsRoom ?? new Room(),
318
+ [roomFromContext, optionsRoom],
319
+ );
320
+
321
+ const emitter = React.useMemo(
322
+ () => new EventEmitter() as TypedEventEmitter<SessionCallbacks>,
323
+ [],
324
+ );
325
+
326
+ const generateDerivedConnectionStateValues = React.useCallback(
327
+ <State extends UseSessionReturn['connectionState']>(connectionState: State) =>
328
+ ({
329
+ isConnected:
330
+ connectionState === ConnectionState.Connected ||
331
+ connectionState === ConnectionState.Reconnecting ||
332
+ connectionState === ConnectionState.SignalReconnecting,
333
+ }) as {
334
+ isConnected: State extends
335
+ | ConnectionState.Connected
336
+ | ConnectionState.Reconnecting
337
+ | ConnectionState.SignalReconnecting
338
+ ? true
339
+ : false;
340
+ },
341
+ [],
342
+ );
343
+
344
+ const [roomConnectionState, setRoomConnectionState] = React.useState(room.state);
345
+ React.useEffect(() => {
346
+ const handleConnectionStateChanged = (connectionState: ConnectionState) => {
347
+ setRoomConnectionState(connectionState);
348
+ };
349
+
350
+ room.on(RoomEvent.ConnectionStateChanged, handleConnectionStateChanged);
351
+ return () => {
352
+ room.off(RoomEvent.ConnectionStateChanged, handleConnectionStateChanged);
353
+ };
354
+ }, [room]);
355
+
356
+ React.useEffect(() => {
357
+ const handleMediaDevicesError = async (error: Error) => {
358
+ emitter.emit(SessionEvent.MediaDevicesError, error);
359
+ };
360
+
361
+ room.on(RoomEvent.MediaDevicesError, handleMediaDevicesError);
362
+ return () => {
363
+ room.off(RoomEvent.MediaDevicesError, handleMediaDevicesError);
364
+ };
365
+ }, [room, emitter]);
366
+
367
+ React.useEffect(() => {
368
+ const handleEncryptionError = async (error: Error) => {
369
+ emitter.emit(SessionEvent.EncryptionError, error);
370
+ };
371
+
372
+ room.on(RoomEvent.EncryptionError, handleEncryptionError);
373
+ return () => {
374
+ room.off(RoomEvent.EncryptionError, handleEncryptionError);
375
+ };
376
+ }, [room, emitter]);
377
+
378
+ const { localParticipant } = useLocalParticipant({ room });
379
+ const cameraPublication = localParticipant.getTrackPublication(Track.Source.Camera);
380
+ const localCamera = React.useMemo(() => {
381
+ if (!cameraPublication) {
382
+ return undefined;
383
+ }
384
+ return {
385
+ source: Track.Source.Camera,
386
+ participant: localParticipant,
387
+ publication: cameraPublication,
388
+ };
389
+ }, [localParticipant, cameraPublication]);
390
+ const microphonePublication = localParticipant.getTrackPublication(Track.Source.Microphone);
391
+ const localMicrophone = React.useMemo(() => {
392
+ if (!microphonePublication) {
393
+ return undefined;
394
+ }
395
+ return {
396
+ source: Track.Source.Microphone,
397
+ participant: localParticipant,
398
+ publication: microphonePublication,
399
+ };
400
+ }, [localParticipant, microphonePublication]);
401
+ const screenSharePublication = localParticipant.getTrackPublication(Track.Source.ScreenShare);
402
+ const localScreenShare = React.useMemo(() => {
403
+ if (!screenSharePublication) {
404
+ return undefined;
405
+ }
406
+ return {
407
+ source: Track.Source.ScreenShare,
408
+ participant: localParticipant,
409
+ publication: screenSharePublication,
410
+ };
411
+ }, [localParticipant, screenSharePublication]);
412
+
413
+ const {
414
+ agentTimeoutFailureReason,
415
+ startAgentTimeout,
416
+ clearAgentTimeout,
417
+ clearAgentTimeoutFailureReason,
418
+ updateAgentTimeoutState,
419
+ updateAgentTimeoutParticipantExists,
420
+ } = useAgentTimeoutIdStore();
421
+
422
+ const sessionInternal: UseSessionReturn['internal'] = React.useMemo(
423
+ () => ({
424
+ emitter,
425
+ tokenSource,
426
+ agentConnectTimeoutMilliseconds,
427
+
428
+ agentTimeoutFailureReason,
429
+ startAgentTimeout,
430
+ clearAgentTimeout,
431
+ clearAgentTimeoutFailureReason,
432
+ updateAgentTimeoutState,
433
+ updateAgentTimeoutParticipantExists,
434
+ }),
435
+ [
436
+ emitter,
437
+ agentConnectTimeoutMilliseconds,
438
+ tokenSource,
439
+ agentTimeoutFailureReason,
440
+ startAgentTimeout,
441
+ clearAgentTimeout,
442
+ clearAgentTimeoutFailureReason,
443
+ updateAgentTimeoutState,
444
+ updateAgentTimeoutParticipantExists,
445
+ ],
446
+ );
447
+
448
+ const conversationState = React.useMemo(():
449
+ | SessionStateConnecting
450
+ | SessionStateConnected
451
+ | SessionStateDisconnected => {
452
+ const common: SessionStateCommon = {
453
+ room,
454
+ internal: sessionInternal,
455
+ };
456
+
457
+ switch (roomConnectionState) {
458
+ case ConnectionState.Connecting:
459
+ return {
460
+ ...common,
461
+
462
+ connectionState: ConnectionState.Connecting,
463
+ ...generateDerivedConnectionStateValues(ConnectionState.Connecting),
464
+
465
+ local: {
466
+ cameraTrack: undefined,
467
+ microphoneTrack: undefined,
468
+ screenShareTrack: undefined,
469
+ },
470
+ };
471
+
472
+ case ConnectionState.Connected:
473
+ case ConnectionState.Reconnecting:
474
+ case ConnectionState.SignalReconnecting:
475
+ return {
476
+ ...common,
477
+
478
+ connectionState: roomConnectionState,
479
+ ...generateDerivedConnectionStateValues(roomConnectionState),
480
+
481
+ local: {
482
+ cameraTrack: localCamera,
483
+ microphoneTrack: localMicrophone,
484
+ screenShareTrack: localScreenShare,
485
+ },
486
+ };
487
+
488
+ case ConnectionState.Disconnected:
489
+ return {
490
+ ...common,
491
+
492
+ connectionState: ConnectionState.Disconnected,
493
+ ...generateDerivedConnectionStateValues(ConnectionState.Disconnected),
494
+
495
+ local: {
496
+ cameraTrack: undefined,
497
+ microphoneTrack: undefined,
498
+ screenShareTrack: undefined,
499
+ },
500
+ };
501
+ }
502
+ }, [
503
+ sessionInternal,
504
+ room,
505
+ roomConnectionState,
506
+ localCamera,
507
+ localMicrophone,
508
+ generateDerivedConnectionStateValues,
509
+ ]);
510
+ React.useEffect(() => {
511
+ emitter.emit(SessionEvent.ConnectionStateChanged, conversationState.connectionState);
512
+ }, [emitter, conversationState.connectionState]);
513
+
514
+ const waitUntilConnectionState = useSessionWaitUntilConnectionState(
515
+ emitter,
516
+ conversationState.connectionState,
517
+ );
518
+
519
+ const waitUntilConnected = React.useCallback(
520
+ async (signal?: AbortSignal) => {
521
+ return waitUntilConnectionState(
522
+ ConnectionState.Connected /* FIXME: should I check for other states too? */,
523
+ signal,
524
+ );
525
+ },
526
+ [waitUntilConnectionState],
527
+ );
528
+
529
+ const waitUntilDisconnected = React.useCallback(
530
+ async (signal?: AbortSignal) => {
531
+ return waitUntilConnectionState(ConnectionState.Disconnected, signal);
532
+ },
533
+ [waitUntilConnectionState],
534
+ );
535
+
536
+ const agent = useAgent(
537
+ React.useMemo(
538
+ () => ({
539
+ connectionState: conversationState.connectionState,
540
+ room,
541
+ internal: sessionInternal,
542
+ }),
543
+ [conversationState, room, sessionInternal],
544
+ ),
545
+ );
546
+
547
+ const tokenSourceFetch = useSessionTokenSourceFetch(tokenSource, restOptions);
548
+
549
+ const start = React.useCallback(
550
+ async (connectOptions: SessionConnectOptions = {}) => {
551
+ const {
552
+ signal,
553
+ tracks = { microphone: { enabled: true, publishOptions: { preConnectBuffer: true } } },
554
+ roomConnectOptions,
555
+ } = connectOptions;
556
+
557
+ await waitUntilDisconnected(signal);
558
+
559
+ const onSignalAbort = () => {
560
+ room.disconnect();
561
+ };
562
+ signal?.addEventListener('abort', onSignalAbort);
563
+
564
+ let tokenDispatchesAgent = false;
565
+ await Promise.all([
566
+ tokenSourceFetch().then(({ serverUrl, participantToken }) => {
567
+ const participantTokenPayload = decodeTokenPayload(participantToken);
568
+ const participantTokenAgentDispatchCount =
569
+ participantTokenPayload.roomConfig?.agents?.length ?? 0;
570
+ tokenDispatchesAgent = participantTokenAgentDispatchCount > 0;
571
+
572
+ return room.connect(serverUrl, participantToken, roomConnectOptions);
573
+ }),
574
+
575
+ // Start microphone (with preconnect buffer) by default
576
+ tracks.microphone?.enabled
577
+ ? room.localParticipant.setMicrophoneEnabled(
578
+ true,
579
+ undefined,
580
+ tracks.microphone?.publishOptions ?? {},
581
+ )
582
+ : Promise.resolve(),
583
+ tracks.camera?.enabled
584
+ ? room.localParticipant.setCameraEnabled(
585
+ true,
586
+ undefined,
587
+ tracks.camera?.publishOptions ?? {},
588
+ )
589
+ : Promise.resolve(),
590
+ tracks.screenShare?.enabled
591
+ ? room.localParticipant.setScreenShareEnabled(
592
+ true,
593
+ undefined,
594
+ tracks.screenShare?.publishOptions ?? {},
595
+ )
596
+ : Promise.resolve(),
597
+ ]);
598
+
599
+ await waitUntilConnected(signal);
600
+ if (tokenDispatchesAgent) {
601
+ await agent.waitUntilConnected(signal);
602
+ }
603
+
604
+ signal?.removeEventListener('abort', onSignalAbort);
605
+ },
606
+ [room, waitUntilDisconnected, tokenSourceFetch, waitUntilConnected, agent.waitUntilConnected],
607
+ );
608
+
609
+ const end = React.useCallback(async () => {
610
+ await room.disconnect();
611
+ }, [room]);
612
+
613
+ const prepareConnection = React.useCallback(async () => {
614
+ const credentials = await tokenSourceFetch();
615
+ await room.prepareConnection(credentials.serverUrl, credentials.participantToken);
616
+ }, [tokenSourceFetch, room]);
617
+ React.useEffect(
618
+ () => {
619
+ prepareConnection().catch((err) => {
620
+ // FIXME: figure out a better logging solution?
621
+ console.warn('WARNING: Room.prepareConnection failed:', err);
622
+ });
623
+ },
624
+ [
625
+ /* note: no prepareConnection here, this effect should only ever run once! */
626
+ ],
627
+ );
628
+
629
+ return React.useMemo(
630
+ () => ({
631
+ ...conversationState,
632
+
633
+ waitUntilConnected,
634
+ waitUntilDisconnected,
635
+
636
+ prepareConnection,
637
+ start,
638
+ end,
639
+ }),
640
+ [conversationState, waitUntilConnected, waitUntilDisconnected, prepareConnection, start, end],
641
+ );
642
+ }