@wix/legends-platform-sdk 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +186 -0
- package/components/package.json +5 -0
- package/dist/cjs/components/Audio/Audio.js +31 -0
- package/dist/cjs/components/Audio/Audio.js.map +1 -0
- package/dist/cjs/components/Audio/index.js +10 -0
- package/dist/cjs/components/Audio/index.js.map +1 -0
- package/dist/cjs/components/ChromaKey/ChromaKey.js +127 -0
- package/dist/cjs/components/ChromaKey/ChromaKey.js.map +1 -0
- package/dist/cjs/components/ChromaKey/chroma-key.js +99 -0
- package/dist/cjs/components/ChromaKey/chroma-key.js.map +1 -0
- package/dist/cjs/components/ChromaKey/index.js +10 -0
- package/dist/cjs/components/ChromaKey/index.js.map +1 -0
- package/dist/cjs/components/ChromaKey/shaders/chroma-key.shader.js +44 -0
- package/dist/cjs/components/ChromaKey/shaders/chroma-key.shader.js.map +1 -0
- package/dist/cjs/components/ChromaKey/shaders/index.js +10 -0
- package/dist/cjs/components/ChromaKey/shaders/index.js.map +1 -0
- package/dist/cjs/components/ChromaKey/shaders/vertex-align.shader.js +12 -0
- package/dist/cjs/components/ChromaKey/shaders/vertex-align.shader.js.map +1 -0
- package/dist/cjs/components/ChromaKey/types.js +4 -0
- package/dist/cjs/components/ChromaKey/types.js.map +1 -0
- package/dist/cjs/components/LegendsPlatform/LegendsPlatform.js +91 -0
- package/dist/cjs/components/LegendsPlatform/LegendsPlatform.js.map +1 -0
- package/dist/cjs/components/LegendsPlatform/index.js +10 -0
- package/dist/cjs/components/LegendsPlatform/index.js.map +1 -0
- package/dist/cjs/components/LegendsPlatformQLess/LegendsPlatform.js +69 -0
- package/dist/cjs/components/LegendsPlatformQLess/LegendsPlatform.js.map +1 -0
- package/dist/cjs/components/LegendsPlatformQLess/index.js +10 -0
- package/dist/cjs/components/LegendsPlatformQLess/index.js.map +1 -0
- package/dist/cjs/components/Video/Video.js +88 -0
- package/dist/cjs/components/Video/Video.js.map +1 -0
- package/dist/cjs/components/Video/index.js +16 -0
- package/dist/cjs/components/Video/index.js.map +1 -0
- package/dist/cjs/components/Video/types.js +4 -0
- package/dist/cjs/components/Video/types.js.map +1 -0
- package/dist/cjs/components/Video/useAttachVideo.js +33 -0
- package/dist/cjs/components/Video/useAttachVideo.js.map +1 -0
- package/dist/cjs/components/VideoPostProcessor/VideoPostProcessor.js +61 -0
- package/dist/cjs/components/VideoPostProcessor/VideoPostProcessor.js.map +1 -0
- package/dist/cjs/components/VideoPostProcessor/effects.js +30 -0
- package/dist/cjs/components/VideoPostProcessor/effects.js.map +1 -0
- package/dist/cjs/components/VideoPostProcessor/index.js +10 -0
- package/dist/cjs/components/VideoPostProcessor/index.js.map +1 -0
- package/dist/cjs/components/VideoPreview/VideoPreview.js +68 -0
- package/dist/cjs/components/VideoPreview/VideoPreview.js.map +1 -0
- package/dist/cjs/components/VideoPreview/index.js +16 -0
- package/dist/cjs/components/VideoPreview/index.js.map +1 -0
- package/dist/cjs/components/VideoPreview/types.js +4 -0
- package/dist/cjs/components/VideoPreview/types.js.map +1 -0
- package/dist/cjs/components/VideoPreview/useVideoPreviewStream.js +85 -0
- package/dist/cjs/components/VideoPreview/useVideoPreviewStream.js.map +1 -0
- package/dist/cjs/components.js +34 -0
- package/dist/cjs/components.js.map +1 -0
- package/dist/cjs/conversation/index.js +18 -0
- package/dist/cjs/conversation/index.js.map +1 -0
- package/dist/cjs/conversation/state.js +24 -0
- package/dist/cjs/conversation/state.js.map +1 -0
- package/dist/cjs/conversation/types.js +4 -0
- package/dist/cjs/conversation/types.js.map +1 -0
- package/dist/cjs/conversation/utils.js +25 -0
- package/dist/cjs/conversation/utils.js.map +1 -0
- package/dist/cjs/external-types.d.js +2 -0
- package/dist/cjs/external-types.d.js.map +1 -0
- package/dist/cjs/hooks/index.js +58 -0
- package/dist/cjs/hooks/index.js.map +1 -0
- package/dist/cjs/hooks/useActivityState/index.js +10 -0
- package/dist/cjs/hooks/useActivityState/index.js.map +1 -0
- package/dist/cjs/hooks/useActivityState/useActivityState.js +15 -0
- package/dist/cjs/hooks/useActivityState/useActivityState.js.map +1 -0
- package/dist/cjs/hooks/useAudio/index.js +10 -0
- package/dist/cjs/hooks/useAudio/index.js.map +1 -0
- package/dist/cjs/hooks/useAudio/useAudio.js +28 -0
- package/dist/cjs/hooks/useAudio/useAudio.js.map +1 -0
- package/dist/cjs/hooks/useAudioLevel/helpers.js +28 -0
- package/dist/cjs/hooks/useAudioLevel/helpers.js.map +1 -0
- package/dist/cjs/hooks/useAudioLevel/index.js +10 -0
- package/dist/cjs/hooks/useAudioLevel/index.js.map +1 -0
- package/dist/cjs/hooks/useAudioLevel/types.js +4 -0
- package/dist/cjs/hooks/useAudioLevel/types.js.map +1 -0
- package/dist/cjs/hooks/useAudioLevel/useAudioLevel.js +49 -0
- package/dist/cjs/hooks/useAudioLevel/useAudioLevel.js.map +1 -0
- package/dist/cjs/hooks/useCamera/index.js +10 -0
- package/dist/cjs/hooks/useCamera/index.js.map +1 -0
- package/dist/cjs/hooks/useCamera/useCamera.js +32 -0
- package/dist/cjs/hooks/useCamera/useCamera.js.map +1 -0
- package/dist/cjs/hooks/useConnectionState/index.js +10 -0
- package/dist/cjs/hooks/useConnectionState/index.js.map +1 -0
- package/dist/cjs/hooks/useConnectionState/useConnectionState.js +15 -0
- package/dist/cjs/hooks/useConnectionState/useConnectionState.js.map +1 -0
- package/dist/cjs/hooks/useConversation/index.js +16 -0
- package/dist/cjs/hooks/useConversation/index.js.map +1 -0
- package/dist/cjs/hooks/useConversation/livekit/constants.js +15 -0
- package/dist/cjs/hooks/useConversation/livekit/constants.js.map +1 -0
- package/dist/cjs/hooks/useConversation/livekit/types.js +4 -0
- package/dist/cjs/hooks/useConversation/livekit/types.js.map +1 -0
- package/dist/cjs/hooks/useConversation/livekit/useConversation.js +371 -0
- package/dist/cjs/hooks/useConversation/livekit/useConversation.js.map +1 -0
- package/dist/cjs/hooks/useConversation/livekit/utils/dataChannel.js +25 -0
- package/dist/cjs/hooks/useConversation/livekit/utils/dataChannel.js.map +1 -0
- package/dist/cjs/hooks/useConversation/livekit/utils/index.js +40 -0
- package/dist/cjs/hooks/useConversation/livekit/utils/index.js.map +1 -0
- package/dist/cjs/hooks/useConversation/livekit/utils/messaging.js +11 -0
- package/dist/cjs/hooks/useConversation/livekit/utils/messaging.js.map +1 -0
- package/dist/cjs/hooks/useConversation/livekit/utils/participants.js +34 -0
- package/dist/cjs/hooks/useConversation/livekit/utils/participants.js.map +1 -0
- package/dist/cjs/hooks/useConversation/livekit/utils/serialization.js +13 -0
- package/dist/cjs/hooks/useConversation/livekit/utils/serialization.js.map +1 -0
- package/dist/cjs/hooks/useConversation/livekit/utils/toolAdapter.js +18 -0
- package/dist/cjs/hooks/useConversation/livekit/utils/toolAdapter.js.map +1 -0
- package/dist/cjs/hooks/useConversation/livekit/utils/transcriptions.js +15 -0
- package/dist/cjs/hooks/useConversation/livekit/utils/transcriptions.js.map +1 -0
- package/dist/cjs/hooks/useConversation/types.js +4 -0
- package/dist/cjs/hooks/useConversation/types.js.map +1 -0
- package/dist/cjs/hooks/useConversation/useConversation.js +99 -0
- package/dist/cjs/hooks/useConversation/useConversation.js.map +1 -0
- package/dist/cjs/hooks/useConversationEvents/index.js +22 -0
- package/dist/cjs/hooks/useConversationEvents/index.js.map +1 -0
- package/dist/cjs/hooks/useConversationEvents/types.js +4 -0
- package/dist/cjs/hooks/useConversationEvents/types.js.map +1 -0
- package/dist/cjs/hooks/useConversationEvents/useConversationEvent.js +11 -0
- package/dist/cjs/hooks/useConversationEvents/useConversationEvent.js.map +1 -0
- package/dist/cjs/hooks/useConversationEvents/useConversationEvents.js +20 -0
- package/dist/cjs/hooks/useConversationEvents/useConversationEvents.js.map +1 -0
- package/dist/cjs/hooks/useConversationEvents/useEmitConversationEvent.js +13 -0
- package/dist/cjs/hooks/useConversationEvents/useEmitConversationEvent.js.map +1 -0
- package/dist/cjs/hooks/useConversationStatus/index.js +10 -0
- package/dist/cjs/hooks/useConversationStatus/index.js.map +1 -0
- package/dist/cjs/hooks/useConversationStatus/useConversationStatus.js +10 -0
- package/dist/cjs/hooks/useConversationStatus/useConversationStatus.js.map +1 -0
- package/dist/cjs/hooks/useConversationTimer/index.js +10 -0
- package/dist/cjs/hooks/useConversationTimer/index.js.map +1 -0
- package/dist/cjs/hooks/useConversationTimer/useConversationTimer.js +45 -0
- package/dist/cjs/hooks/useConversationTimer/useConversationTimer.js.map +1 -0
- package/dist/cjs/hooks/useCreateConversation/helpers.js +8 -0
- package/dist/cjs/hooks/useCreateConversation/helpers.js.map +1 -0
- package/dist/cjs/hooks/useCreateConversation/index.js +10 -0
- package/dist/cjs/hooks/useCreateConversation/index.js.map +1 -0
- package/dist/cjs/hooks/useCreateConversation/useCreateConversation.js +104 -0
- package/dist/cjs/hooks/useCreateConversation/useCreateConversation.js.map +1 -0
- package/dist/cjs/hooks/useDeviceSwitcher/index.js +10 -0
- package/dist/cjs/hooks/useDeviceSwitcher/index.js.map +1 -0
- package/dist/cjs/hooks/useDeviceSwitcher/useDeviceSwitcher.js +31 -0
- package/dist/cjs/hooks/useDeviceSwitcher/useDeviceSwitcher.js.map +1 -0
- package/dist/cjs/hooks/useDevices/index.js +10 -0
- package/dist/cjs/hooks/useDevices/index.js.map +1 -0
- package/dist/cjs/hooks/useDevices/useDevices.js +49 -0
- package/dist/cjs/hooks/useDevices/useDevices.js.map +1 -0
- package/dist/cjs/hooks/useMediaPermissions/index.js +10 -0
- package/dist/cjs/hooks/useMediaPermissions/index.js.map +1 -0
- package/dist/cjs/hooks/useMediaPermissions/types.js +4 -0
- package/dist/cjs/hooks/useMediaPermissions/types.js.map +1 -0
- package/dist/cjs/hooks/useMediaPermissions/useMediaPermissions.js +46 -0
- package/dist/cjs/hooks/useMediaPermissions/useMediaPermissions.js.map +1 -0
- package/dist/cjs/hooks/useMediaRecorder/index.js +10 -0
- package/dist/cjs/hooks/useMediaRecorder/index.js.map +1 -0
- package/dist/cjs/hooks/useMediaRecorder/useMediaRecorder.js +229 -0
- package/dist/cjs/hooks/useMediaRecorder/useMediaRecorder.js.map +1 -0
- package/dist/cjs/hooks/useMediaRecorder/useReactRecorder.js +298 -0
- package/dist/cjs/hooks/useMediaRecorder/useReactRecorder.js.map +1 -0
- package/dist/cjs/hooks/useMicrophone/index.js +10 -0
- package/dist/cjs/hooks/useMicrophone/index.js.map +1 -0
- package/dist/cjs/hooks/useMicrophone/useMicrophone.js +38 -0
- package/dist/cjs/hooks/useMicrophone/useMicrophone.js.map +1 -0
- package/dist/cjs/hooks/useParticipantTrack/index.js +10 -0
- package/dist/cjs/hooks/useParticipantTrack/index.js.map +1 -0
- package/dist/cjs/hooks/useParticipantTrack/useParticipantTrack.js +32 -0
- package/dist/cjs/hooks/useParticipantTrack/useParticipantTrack.js.map +1 -0
- package/dist/cjs/hooks/usePictureInPicture/index.js +13 -0
- package/dist/cjs/hooks/usePictureInPicture/index.js.map +1 -0
- package/dist/cjs/hooks/usePictureInPicture/state.js +14 -0
- package/dist/cjs/hooks/usePictureInPicture/state.js.map +1 -0
- package/dist/cjs/hooks/usePictureInPicture/types.js +4 -0
- package/dist/cjs/hooks/usePictureInPicture/types.js.map +1 -0
- package/dist/cjs/hooks/usePictureInPicture/usePictureInPicture.js +45 -0
- package/dist/cjs/hooks/usePictureInPicture/usePictureInPicture.js.map +1 -0
- package/dist/cjs/hooks/usePictureInPicture/usePictureInPictureAuto.js +116 -0
- package/dist/cjs/hooks/usePictureInPicture/usePictureInPictureAuto.js.map +1 -0
- package/dist/cjs/hooks/useScreenShare/index.js +10 -0
- package/dist/cjs/hooks/useScreenShare/index.js.map +1 -0
- package/dist/cjs/hooks/useScreenShare/useScreenShare.js +45 -0
- package/dist/cjs/hooks/useScreenShare/useScreenShare.js.map +1 -0
- package/dist/cjs/hooks/useSpeaker/index.js +10 -0
- package/dist/cjs/hooks/useSpeaker/index.js.map +1 -0
- package/dist/cjs/hooks/useSpeaker/useSpeaker.js +31 -0
- package/dist/cjs/hooks/useSpeaker/useSpeaker.js.map +1 -0
- package/dist/cjs/hooks/useTextChat/index.js +10 -0
- package/dist/cjs/hooks/useTextChat/index.js.map +1 -0
- package/dist/cjs/hooks/useTextChat/usePendingMessages.js +23 -0
- package/dist/cjs/hooks/useTextChat/usePendingMessages.js.map +1 -0
- package/dist/cjs/hooks/useTextChat/useTextChat.js +62 -0
- package/dist/cjs/hooks/useTextChat/useTextChat.js.map +1 -0
- package/dist/cjs/hooks/useTextChat/useToolAwareSend.js +33 -0
- package/dist/cjs/hooks/useTextChat/useToolAwareSend.js.map +1 -0
- package/dist/cjs/hooks/useTools/index.js +9 -0
- package/dist/cjs/hooks/useTools/index.js.map +1 -0
- package/dist/cjs/hooks/useTools/model/errors.js +12 -0
- package/dist/cjs/hooks/useTools/model/errors.js.map +1 -0
- package/dist/cjs/hooks/useTools/model/types.js +4 -0
- package/dist/cjs/hooks/useTools/model/types.js.map +1 -0
- package/dist/cjs/hooks/useTools/public/useTools.js +11 -0
- package/dist/cjs/hooks/useTools/public/useTools.js.map +1 -0
- package/dist/cjs/hooks/useTools/runtime/createToolRuntimeSession.js +74 -0
- package/dist/cjs/hooks/useTools/runtime/createToolRuntimeSession.js.map +1 -0
- package/dist/cjs/hooks/useTools/runtime/executeToolCall.js +33 -0
- package/dist/cjs/hooks/useTools/runtime/executeToolCall.js.map +1 -0
- package/dist/cjs/hooks/useTools/runtime/executeToolCallBatch.js +41 -0
- package/dist/cjs/hooks/useTools/runtime/executeToolCallBatch.js.map +1 -0
- package/dist/cjs/hooks/useTools/runtime/types.js +4 -0
- package/dist/cjs/hooks/useTools/runtime/types.js.map +1 -0
- package/dist/cjs/hooks/useTools/runtime/useToolCallingRuntime.js +59 -0
- package/dist/cjs/hooks/useTools/runtime/useToolCallingRuntime.js.map +1 -0
- package/dist/cjs/hooks/useTools/store/state.js +30 -0
- package/dist/cjs/hooks/useTools/store/state.js.map +1 -0
- package/dist/cjs/hooks/useTools/utils/normalizeFunctionCall.js +22 -0
- package/dist/cjs/hooks/useTools/utils/normalizeFunctionCall.js.map +1 -0
- package/dist/cjs/hooks/useTools/utils/serialize.js +28 -0
- package/dist/cjs/hooks/useTools/utils/serialize.js.map +1 -0
- package/dist/cjs/hooks/useTranscriptions/index.js +16 -0
- package/dist/cjs/hooks/useTranscriptions/index.js.map +1 -0
- package/dist/cjs/hooks/useTranscriptions/types.js +4 -0
- package/dist/cjs/hooks/useTranscriptions/types.js.map +1 -0
- package/dist/cjs/hooks/useTranscriptions/useTranscription.js +16 -0
- package/dist/cjs/hooks/useTranscriptions/useTranscription.js.map +1 -0
- package/dist/cjs/hooks/useTranscriptions/useTranscriptions.js +18 -0
- package/dist/cjs/hooks/useTranscriptions/useTranscriptions.js.map +1 -0
- package/dist/cjs/hooks/useUserActivity/index.js +10 -0
- package/dist/cjs/hooks/useUserActivity/index.js.map +1 -0
- package/dist/cjs/hooks/useUserActivity/useUserActivity.js +23 -0
- package/dist/cjs/hooks/useUserActivity/useUserActivity.js.map +1 -0
- package/dist/cjs/livekit/components.js +10 -0
- package/dist/cjs/livekit/components.js.map +1 -0
- package/dist/cjs/livekit/sdk.js +10 -0
- package/dist/cjs/livekit/sdk.js.map +1 -0
- package/dist/cjs/sdk-consumer/context.js +15 -0
- package/dist/cjs/sdk-consumer/context.js.map +1 -0
- package/dist/cjs/sdk-consumer/index.js +10 -0
- package/dist/cjs/sdk-consumer/index.js.map +1 -0
- package/dist/cjs/sdk.js +148 -0
- package/dist/cjs/sdk.js.map +1 -0
- package/dist/cjs/services/FetchPersonaChatService.js +139 -0
- package/dist/cjs/services/FetchPersonaChatService.js.map +1 -0
- package/dist/cjs/test-types.d.js +2 -0
- package/dist/cjs/test-types.d.js.map +1 -0
- package/dist/cjs/types/http.js +14 -0
- package/dist/cjs/types/http.js.map +1 -0
- package/dist/cjs/types/index.js +7 -0
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/cjs/types/service.js +4 -0
- package/dist/cjs/types/service.js.map +1 -0
- package/dist/cjs/utils/captureImage/captureImage.js +29 -0
- package/dist/cjs/utils/captureImage/captureImage.js.map +1 -0
- package/dist/cjs/utils/captureImage/helpers.js +74 -0
- package/dist/cjs/utils/captureImage/helpers.js.map +1 -0
- package/dist/cjs/utils/captureImage/index.js +16 -0
- package/dist/cjs/utils/captureImage/index.js.map +1 -0
- package/dist/cjs/utils/captureImage/types.js +4 -0
- package/dist/cjs/utils/captureImage/types.js.map +1 -0
- package/dist/cjs/utils/compatibility/compatibility.js +17 -0
- package/dist/cjs/utils/compatibility/compatibility.js.map +1 -0
- package/dist/cjs/utils/compatibility/index.js +10 -0
- package/dist/cjs/utils/compatibility/index.js.map +1 -0
- package/dist/cjs/utils.js +10 -0
- package/dist/cjs/utils.js.map +1 -0
- package/dist/esm/components/Audio/Audio.js +18 -0
- package/dist/esm/components/Audio/Audio.js.map +1 -0
- package/dist/esm/components/Audio/index.js +2 -0
- package/dist/esm/components/Audio/index.js.map +1 -0
- package/dist/esm/components/ChromaKey/ChromaKey.js +115 -0
- package/dist/esm/components/ChromaKey/ChromaKey.js.map +1 -0
- package/dist/esm/components/ChromaKey/chroma-key.js +91 -0
- package/dist/esm/components/ChromaKey/chroma-key.js.map +1 -0
- package/dist/esm/components/ChromaKey/index.js +2 -0
- package/dist/esm/components/ChromaKey/index.js.map +1 -0
- package/dist/esm/components/ChromaKey/shaders/chroma-key.shader.js +40 -0
- package/dist/esm/components/ChromaKey/shaders/chroma-key.shader.js.map +1 -0
- package/dist/esm/components/ChromaKey/shaders/index.js +3 -0
- package/dist/esm/components/ChromaKey/shaders/index.js.map +1 -0
- package/dist/esm/components/ChromaKey/shaders/vertex-align.shader.js +8 -0
- package/dist/esm/components/ChromaKey/shaders/vertex-align.shader.js.map +1 -0
- package/dist/esm/components/ChromaKey/types.js +2 -0
- package/dist/esm/components/ChromaKey/types.js.map +1 -0
- package/dist/esm/components/LegendsPlatform/LegendsPlatform.js +53 -0
- package/dist/esm/components/LegendsPlatform/LegendsPlatform.js.map +1 -0
- package/dist/esm/components/LegendsPlatform/index.js +2 -0
- package/dist/esm/components/LegendsPlatform/index.js.map +1 -0
- package/dist/esm/components/LegendsPlatformQLess/LegendsPlatform.js +30 -0
- package/dist/esm/components/LegendsPlatformQLess/LegendsPlatform.js.map +1 -0
- package/dist/esm/components/LegendsPlatformQLess/index.js +2 -0
- package/dist/esm/components/LegendsPlatformQLess/index.js.map +1 -0
- package/dist/esm/components/Video/Video.js +73 -0
- package/dist/esm/components/Video/Video.js.map +1 -0
- package/dist/esm/components/Video/index.js +3 -0
- package/dist/esm/components/Video/index.js.map +1 -0
- package/dist/esm/components/Video/types.js +2 -0
- package/dist/esm/components/Video/types.js.map +1 -0
- package/dist/esm/components/Video/useAttachVideo.js +27 -0
- package/dist/esm/components/Video/useAttachVideo.js.map +1 -0
- package/dist/esm/components/VideoPostProcessor/VideoPostProcessor.js +47 -0
- package/dist/esm/components/VideoPostProcessor/VideoPostProcessor.js.map +1 -0
- package/dist/esm/components/VideoPostProcessor/effects.js +25 -0
- package/dist/esm/components/VideoPostProcessor/effects.js.map +1 -0
- package/dist/esm/components/VideoPostProcessor/index.js +2 -0
- package/dist/esm/components/VideoPostProcessor/index.js.map +1 -0
- package/dist/esm/components/VideoPreview/VideoPreview.js +48 -0
- package/dist/esm/components/VideoPreview/VideoPreview.js.map +1 -0
- package/dist/esm/components/VideoPreview/index.js +3 -0
- package/dist/esm/components/VideoPreview/index.js.map +1 -0
- package/dist/esm/components/VideoPreview/types.js +2 -0
- package/dist/esm/components/VideoPreview/types.js.map +1 -0
- package/dist/esm/components/VideoPreview/useVideoPreviewStream.js +85 -0
- package/dist/esm/components/VideoPreview/useVideoPreviewStream.js.map +1 -0
- package/dist/esm/components.js +6 -0
- package/dist/esm/components.js.map +1 -0
- package/dist/esm/conversation/index.js +4 -0
- package/dist/esm/conversation/index.js.map +1 -0
- package/dist/esm/conversation/state.js +20 -0
- package/dist/esm/conversation/state.js.map +1 -0
- package/dist/esm/conversation/types.js +2 -0
- package/dist/esm/conversation/types.js.map +1 -0
- package/dist/esm/conversation/utils.js +21 -0
- package/dist/esm/conversation/utils.js.map +1 -0
- package/dist/esm/external-types.d.js +2 -0
- package/dist/esm/external-types.d.js.map +1 -0
- package/dist/esm/hooks/index.js +10 -0
- package/dist/esm/hooks/index.js.map +1 -0
- package/dist/esm/hooks/useActivityState/index.js +2 -0
- package/dist/esm/hooks/useActivityState/index.js.map +1 -0
- package/dist/esm/hooks/useActivityState/useActivityState.js +11 -0
- package/dist/esm/hooks/useActivityState/useActivityState.js.map +1 -0
- package/dist/esm/hooks/useAudio/index.js +2 -0
- package/dist/esm/hooks/useAudio/index.js.map +1 -0
- package/dist/esm/hooks/useAudio/useAudio.js +26 -0
- package/dist/esm/hooks/useAudio/useAudio.js.map +1 -0
- package/dist/esm/hooks/useAudioLevel/helpers.js +23 -0
- package/dist/esm/hooks/useAudioLevel/helpers.js.map +1 -0
- package/dist/esm/hooks/useAudioLevel/index.js +2 -0
- package/dist/esm/hooks/useAudioLevel/index.js.map +1 -0
- package/dist/esm/hooks/useAudioLevel/types.js +2 -0
- package/dist/esm/hooks/useAudioLevel/types.js.map +1 -0
- package/dist/esm/hooks/useAudioLevel/useAudioLevel.js +43 -0
- package/dist/esm/hooks/useAudioLevel/useAudioLevel.js.map +1 -0
- package/dist/esm/hooks/useCamera/index.js +2 -0
- package/dist/esm/hooks/useCamera/index.js.map +1 -0
- package/dist/esm/hooks/useCamera/useCamera.js +29 -0
- package/dist/esm/hooks/useCamera/useCamera.js.map +1 -0
- package/dist/esm/hooks/useConnectionState/index.js +2 -0
- package/dist/esm/hooks/useConnectionState/index.js.map +1 -0
- package/dist/esm/hooks/useConnectionState/useConnectionState.js +11 -0
- package/dist/esm/hooks/useConnectionState/useConnectionState.js.map +1 -0
- package/dist/esm/hooks/useConversation/index.js +3 -0
- package/dist/esm/hooks/useConversation/index.js.map +1 -0
- package/dist/esm/hooks/useConversation/livekit/constants.js +11 -0
- package/dist/esm/hooks/useConversation/livekit/constants.js.map +1 -0
- package/dist/esm/hooks/useConversation/livekit/types.js +2 -0
- package/dist/esm/hooks/useConversation/livekit/types.js.map +1 -0
- package/dist/esm/hooks/useConversation/livekit/useConversation.js +377 -0
- package/dist/esm/hooks/useConversation/livekit/useConversation.js.map +1 -0
- package/dist/esm/hooks/useConversation/livekit/utils/dataChannel.js +18 -0
- package/dist/esm/hooks/useConversation/livekit/utils/dataChannel.js.map +1 -0
- package/dist/esm/hooks/useConversation/livekit/utils/index.js +7 -0
- package/dist/esm/hooks/useConversation/livekit/utils/index.js.map +1 -0
- package/dist/esm/hooks/useConversation/livekit/utils/messaging.js +7 -0
- package/dist/esm/hooks/useConversation/livekit/utils/messaging.js.map +1 -0
- package/dist/esm/hooks/useConversation/livekit/utils/participants.js +28 -0
- package/dist/esm/hooks/useConversation/livekit/utils/participants.js.map +1 -0
- package/dist/esm/hooks/useConversation/livekit/utils/serialization.js +9 -0
- package/dist/esm/hooks/useConversation/livekit/utils/serialization.js.map +1 -0
- package/dist/esm/hooks/useConversation/livekit/utils/toolAdapter.js +14 -0
- package/dist/esm/hooks/useConversation/livekit/utils/toolAdapter.js.map +1 -0
- package/dist/esm/hooks/useConversation/livekit/utils/transcriptions.js +11 -0
- package/dist/esm/hooks/useConversation/livekit/utils/transcriptions.js.map +1 -0
- package/dist/esm/hooks/useConversation/types.js +2 -0
- package/dist/esm/hooks/useConversation/types.js.map +1 -0
- package/dist/esm/hooks/useConversation/useConversation.js +93 -0
- package/dist/esm/hooks/useConversation/useConversation.js.map +1 -0
- package/dist/esm/hooks/useConversationEvents/index.js +4 -0
- package/dist/esm/hooks/useConversationEvents/index.js.map +1 -0
- package/dist/esm/hooks/useConversationEvents/types.js +2 -0
- package/dist/esm/hooks/useConversationEvents/types.js.map +1 -0
- package/dist/esm/hooks/useConversationEvents/useConversationEvent.js +7 -0
- package/dist/esm/hooks/useConversationEvents/useConversationEvent.js.map +1 -0
- package/dist/esm/hooks/useConversationEvents/useConversationEvents.js +20 -0
- package/dist/esm/hooks/useConversationEvents/useConversationEvents.js.map +1 -0
- package/dist/esm/hooks/useConversationEvents/useEmitConversationEvent.js +9 -0
- package/dist/esm/hooks/useConversationEvents/useEmitConversationEvent.js.map +1 -0
- package/dist/esm/hooks/useConversationStatus/index.js +2 -0
- package/dist/esm/hooks/useConversationStatus/index.js.map +1 -0
- package/dist/esm/hooks/useConversationStatus/useConversationStatus.js +6 -0
- package/dist/esm/hooks/useConversationStatus/useConversationStatus.js.map +1 -0
- package/dist/esm/hooks/useConversationTimer/index.js +2 -0
- package/dist/esm/hooks/useConversationTimer/index.js.map +1 -0
- package/dist/esm/hooks/useConversationTimer/useConversationTimer.js +44 -0
- package/dist/esm/hooks/useConversationTimer/useConversationTimer.js.map +1 -0
- package/dist/esm/hooks/useCreateConversation/helpers.js +4 -0
- package/dist/esm/hooks/useCreateConversation/helpers.js.map +1 -0
- package/dist/esm/hooks/useCreateConversation/index.js +2 -0
- package/dist/esm/hooks/useCreateConversation/index.js.map +1 -0
- package/dist/esm/hooks/useCreateConversation/useCreateConversation.js +98 -0
- package/dist/esm/hooks/useCreateConversation/useCreateConversation.js.map +1 -0
- package/dist/esm/hooks/useDeviceSwitcher/index.js +2 -0
- package/dist/esm/hooks/useDeviceSwitcher/index.js.map +1 -0
- package/dist/esm/hooks/useDeviceSwitcher/useDeviceSwitcher.js +26 -0
- package/dist/esm/hooks/useDeviceSwitcher/useDeviceSwitcher.js.map +1 -0
- package/dist/esm/hooks/useDevices/index.js +2 -0
- package/dist/esm/hooks/useDevices/index.js.map +1 -0
- package/dist/esm/hooks/useDevices/useDevices.js +45 -0
- package/dist/esm/hooks/useDevices/useDevices.js.map +1 -0
- package/dist/esm/hooks/useMediaPermissions/index.js +3 -0
- package/dist/esm/hooks/useMediaPermissions/index.js.map +1 -0
- package/dist/esm/hooks/useMediaPermissions/types.js +2 -0
- package/dist/esm/hooks/useMediaPermissions/types.js.map +1 -0
- package/dist/esm/hooks/useMediaPermissions/useMediaPermissions.js +42 -0
- package/dist/esm/hooks/useMediaPermissions/useMediaPermissions.js.map +1 -0
- package/dist/esm/hooks/useMediaRecorder/index.js +2 -0
- package/dist/esm/hooks/useMediaRecorder/index.js.map +1 -0
- package/dist/esm/hooks/useMediaRecorder/useMediaRecorder.js +227 -0
- package/dist/esm/hooks/useMediaRecorder/useMediaRecorder.js.map +1 -0
- package/dist/esm/hooks/useMediaRecorder/useReactRecorder.js +315 -0
- package/dist/esm/hooks/useMediaRecorder/useReactRecorder.js.map +1 -0
- package/dist/esm/hooks/useMicrophone/index.js +2 -0
- package/dist/esm/hooks/useMicrophone/index.js.map +1 -0
- package/dist/esm/hooks/useMicrophone/useMicrophone.js +35 -0
- package/dist/esm/hooks/useMicrophone/useMicrophone.js.map +1 -0
- package/dist/esm/hooks/useParticipantTrack/index.js +2 -0
- package/dist/esm/hooks/useParticipantTrack/index.js.map +1 -0
- package/dist/esm/hooks/useParticipantTrack/useParticipantTrack.js +26 -0
- package/dist/esm/hooks/useParticipantTrack/useParticipantTrack.js.map +1 -0
- package/dist/esm/hooks/usePictureInPicture/index.js +5 -0
- package/dist/esm/hooks/usePictureInPicture/index.js.map +1 -0
- package/dist/esm/hooks/usePictureInPicture/state.js +10 -0
- package/dist/esm/hooks/usePictureInPicture/state.js.map +1 -0
- package/dist/esm/hooks/usePictureInPicture/types.js +2 -0
- package/dist/esm/hooks/usePictureInPicture/types.js.map +1 -0
- package/dist/esm/hooks/usePictureInPicture/usePictureInPicture.js +41 -0
- package/dist/esm/hooks/usePictureInPicture/usePictureInPicture.js.map +1 -0
- package/dist/esm/hooks/usePictureInPicture/usePictureInPictureAuto.js +111 -0
- package/dist/esm/hooks/usePictureInPicture/usePictureInPictureAuto.js.map +1 -0
- package/dist/esm/hooks/useScreenShare/index.js +2 -0
- package/dist/esm/hooks/useScreenShare/index.js.map +1 -0
- package/dist/esm/hooks/useScreenShare/useScreenShare.js +42 -0
- package/dist/esm/hooks/useScreenShare/useScreenShare.js.map +1 -0
- package/dist/esm/hooks/useSpeaker/index.js +2 -0
- package/dist/esm/hooks/useSpeaker/index.js.map +1 -0
- package/dist/esm/hooks/useSpeaker/useSpeaker.js +28 -0
- package/dist/esm/hooks/useSpeaker/useSpeaker.js.map +1 -0
- package/dist/esm/hooks/useTextChat/index.js +2 -0
- package/dist/esm/hooks/useTextChat/index.js.map +1 -0
- package/dist/esm/hooks/useTextChat/usePendingMessages.js +19 -0
- package/dist/esm/hooks/useTextChat/usePendingMessages.js.map +1 -0
- package/dist/esm/hooks/useTextChat/useTextChat.js +59 -0
- package/dist/esm/hooks/useTextChat/useTextChat.js.map +1 -0
- package/dist/esm/hooks/useTextChat/useToolAwareSend.js +28 -0
- package/dist/esm/hooks/useTextChat/useToolAwareSend.js.map +1 -0
- package/dist/esm/hooks/useTools/index.js +3 -0
- package/dist/esm/hooks/useTools/index.js.map +1 -0
- package/dist/esm/hooks/useTools/model/errors.js +7 -0
- package/dist/esm/hooks/useTools/model/errors.js.map +1 -0
- package/dist/esm/hooks/useTools/model/types.js +2 -0
- package/dist/esm/hooks/useTools/model/types.js.map +1 -0
- package/dist/esm/hooks/useTools/public/useTools.js +7 -0
- package/dist/esm/hooks/useTools/public/useTools.js.map +1 -0
- package/dist/esm/hooks/useTools/runtime/createToolRuntimeSession.js +66 -0
- package/dist/esm/hooks/useTools/runtime/createToolRuntimeSession.js.map +1 -0
- package/dist/esm/hooks/useTools/runtime/executeToolCall.js +29 -0
- package/dist/esm/hooks/useTools/runtime/executeToolCall.js.map +1 -0
- package/dist/esm/hooks/useTools/runtime/executeToolCallBatch.js +36 -0
- package/dist/esm/hooks/useTools/runtime/executeToolCallBatch.js.map +1 -0
- package/dist/esm/hooks/useTools/runtime/types.js +2 -0
- package/dist/esm/hooks/useTools/runtime/types.js.map +1 -0
- package/dist/esm/hooks/useTools/runtime/useToolCallingRuntime.js +58 -0
- package/dist/esm/hooks/useTools/runtime/useToolCallingRuntime.js.map +1 -0
- package/dist/esm/hooks/useTools/store/state.js +26 -0
- package/dist/esm/hooks/useTools/store/state.js.map +1 -0
- package/dist/esm/hooks/useTools/utils/normalizeFunctionCall.js +18 -0
- package/dist/esm/hooks/useTools/utils/normalizeFunctionCall.js.map +1 -0
- package/dist/esm/hooks/useTools/utils/serialize.js +23 -0
- package/dist/esm/hooks/useTools/utils/serialize.js.map +1 -0
- package/dist/esm/hooks/useTranscriptions/index.js +3 -0
- package/dist/esm/hooks/useTranscriptions/index.js.map +1 -0
- package/dist/esm/hooks/useTranscriptions/types.js +2 -0
- package/dist/esm/hooks/useTranscriptions/types.js.map +1 -0
- package/dist/esm/hooks/useTranscriptions/useTranscription.js +15 -0
- package/dist/esm/hooks/useTranscriptions/useTranscription.js.map +1 -0
- package/dist/esm/hooks/useTranscriptions/useTranscriptions.js +15 -0
- package/dist/esm/hooks/useTranscriptions/useTranscriptions.js.map +1 -0
- package/dist/esm/hooks/useUserActivity/index.js +2 -0
- package/dist/esm/hooks/useUserActivity/index.js.map +1 -0
- package/dist/esm/hooks/useUserActivity/useUserActivity.js +22 -0
- package/dist/esm/hooks/useUserActivity/useUserActivity.js.map +1 -0
- package/dist/esm/livekit/components.js +2 -0
- package/dist/esm/livekit/components.js.map +1 -0
- package/dist/esm/livekit/sdk.js +2 -0
- package/dist/esm/livekit/sdk.js.map +1 -0
- package/dist/esm/sdk-consumer/context.js +10 -0
- package/dist/esm/sdk-consumer/context.js.map +1 -0
- package/dist/esm/sdk-consumer/index.js +2 -0
- package/dist/esm/sdk-consumer/index.js.map +1 -0
- package/dist/esm/sdk.js +25 -0
- package/dist/esm/sdk.js.map +1 -0
- package/dist/esm/services/FetchPersonaChatService.js +124 -0
- package/dist/esm/services/FetchPersonaChatService.js.map +1 -0
- package/dist/esm/test-types.d.js +2 -0
- package/dist/esm/test-types.d.js.map +1 -0
- package/dist/esm/types/http.js +9 -0
- package/dist/esm/types/http.js.map +1 -0
- package/dist/esm/types/index.js +2 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/esm/types/service.js +2 -0
- package/dist/esm/types/service.js.map +1 -0
- package/dist/esm/utils/captureImage/captureImage.js +29 -0
- package/dist/esm/utils/captureImage/captureImage.js.map +1 -0
- package/dist/esm/utils/captureImage/helpers.js +69 -0
- package/dist/esm/utils/captureImage/helpers.js.map +1 -0
- package/dist/esm/utils/captureImage/index.js +3 -0
- package/dist/esm/utils/captureImage/index.js.map +1 -0
- package/dist/esm/utils/captureImage/types.js +2 -0
- package/dist/esm/utils/captureImage/types.js.map +1 -0
- package/dist/esm/utils/compatibility/compatibility.js +12 -0
- package/dist/esm/utils/compatibility/compatibility.js.map +1 -0
- package/dist/esm/utils/compatibility/index.js +2 -0
- package/dist/esm/utils/compatibility/index.js.map +1 -0
- package/dist/esm/utils.js +2 -0
- package/dist/esm/utils.js.map +1 -0
- package/dist/types/components/Audio/Audio.d.ts +3 -0
- package/dist/types/components/Audio/Audio.d.ts.map +1 -0
- package/dist/types/components/Audio/index.d.ts +2 -0
- package/dist/types/components/Audio/index.d.ts.map +1 -0
- package/dist/types/components/ChromaKey/ChromaKey.d.ts +20 -0
- package/dist/types/components/ChromaKey/ChromaKey.d.ts.map +1 -0
- package/dist/types/components/ChromaKey/chroma-key.d.ts +9 -0
- package/dist/types/components/ChromaKey/chroma-key.d.ts.map +1 -0
- package/dist/types/components/ChromaKey/index.d.ts +2 -0
- package/dist/types/components/ChromaKey/index.d.ts.map +1 -0
- package/dist/types/components/ChromaKey/shaders/chroma-key.shader.d.ts +3 -0
- package/dist/types/components/ChromaKey/shaders/chroma-key.shader.d.ts.map +1 -0
- package/dist/types/components/ChromaKey/shaders/index.d.ts +3 -0
- package/dist/types/components/ChromaKey/shaders/index.d.ts.map +1 -0
- package/dist/types/components/ChromaKey/shaders/vertex-align.shader.d.ts +3 -0
- package/dist/types/components/ChromaKey/shaders/vertex-align.shader.d.ts.map +1 -0
- package/dist/types/components/ChromaKey/types.d.ts +3 -0
- package/dist/types/components/ChromaKey/types.d.ts.map +1 -0
- package/dist/types/components/LegendsPlatform/LegendsPlatform.d.ts +18 -0
- package/dist/types/components/LegendsPlatform/LegendsPlatform.d.ts.map +1 -0
- package/dist/types/components/LegendsPlatform/index.d.ts +2 -0
- package/dist/types/components/LegendsPlatform/index.d.ts.map +1 -0
- package/dist/types/components/LegendsPlatformQLess/LegendsPlatform.d.ts +15 -0
- package/dist/types/components/LegendsPlatformQLess/LegendsPlatform.d.ts.map +1 -0
- package/dist/types/components/LegendsPlatformQLess/index.d.ts +2 -0
- package/dist/types/components/LegendsPlatformQLess/index.d.ts.map +1 -0
- package/dist/types/components/Video/Video.d.ts +14 -0
- package/dist/types/components/Video/Video.d.ts.map +1 -0
- package/dist/types/components/Video/index.d.ts +3 -0
- package/dist/types/components/Video/index.d.ts.map +1 -0
- package/dist/types/components/Video/types.d.ts +22 -0
- package/dist/types/components/Video/types.d.ts.map +1 -0
- package/dist/types/components/Video/useAttachVideo.d.ts +10 -0
- package/dist/types/components/Video/useAttachVideo.d.ts.map +1 -0
- package/dist/types/components/VideoPostProcessor/VideoPostProcessor.d.ts +11 -0
- package/dist/types/components/VideoPostProcessor/VideoPostProcessor.d.ts.map +1 -0
- package/dist/types/components/VideoPostProcessor/effects.d.ts +3 -0
- package/dist/types/components/VideoPostProcessor/effects.d.ts.map +1 -0
- package/dist/types/components/VideoPostProcessor/index.d.ts +2 -0
- package/dist/types/components/VideoPostProcessor/index.d.ts.map +1 -0
- package/dist/types/components/VideoPreview/VideoPreview.d.ts +4 -0
- package/dist/types/components/VideoPreview/VideoPreview.d.ts.map +1 -0
- package/dist/types/components/VideoPreview/index.d.ts +3 -0
- package/dist/types/components/VideoPreview/index.d.ts.map +1 -0
- package/dist/types/components/VideoPreview/types.d.ts +11 -0
- package/dist/types/components/VideoPreview/types.d.ts.map +1 -0
- package/dist/types/components/VideoPreview/useVideoPreviewStream.d.ts +13 -0
- package/dist/types/components/VideoPreview/useVideoPreviewStream.d.ts.map +1 -0
- package/dist/types/components.d.ts +6 -0
- package/dist/types/components.d.ts.map +1 -0
- package/dist/types/conversation/index.d.ts +3 -0
- package/dist/types/conversation/index.d.ts.map +1 -0
- package/dist/types/conversation/state.d.ts +47 -0
- package/dist/types/conversation/state.d.ts.map +1 -0
- package/dist/types/conversation/types.d.ts +27 -0
- package/dist/types/conversation/types.d.ts.map +1 -0
- package/dist/types/conversation/utils.d.ts +6 -0
- package/dist/types/conversation/utils.d.ts.map +1 -0
- package/dist/types/hooks/index.d.ts +10 -0
- package/dist/types/hooks/index.d.ts.map +1 -0
- package/dist/types/hooks/useActivityState/index.d.ts +2 -0
- package/dist/types/hooks/useActivityState/index.d.ts.map +1 -0
- package/dist/types/hooks/useActivityState/useActivityState.d.ts +2 -0
- package/dist/types/hooks/useActivityState/useActivityState.d.ts.map +1 -0
- package/dist/types/hooks/useAudio/index.d.ts +2 -0
- package/dist/types/hooks/useAudio/index.d.ts.map +1 -0
- package/dist/types/hooks/useAudio/useAudio.d.ts +7 -0
- package/dist/types/hooks/useAudio/useAudio.d.ts.map +1 -0
- package/dist/types/hooks/useAudioLevel/helpers.d.ts +11 -0
- package/dist/types/hooks/useAudioLevel/helpers.d.ts.map +1 -0
- package/dist/types/hooks/useAudioLevel/index.d.ts +2 -0
- package/dist/types/hooks/useAudioLevel/index.d.ts.map +1 -0
- package/dist/types/hooks/useAudioLevel/types.d.ts +8 -0
- package/dist/types/hooks/useAudioLevel/types.d.ts.map +1 -0
- package/dist/types/hooks/useAudioLevel/useAudioLevel.d.ts +3 -0
- package/dist/types/hooks/useAudioLevel/useAudioLevel.d.ts.map +1 -0
- package/dist/types/hooks/useCamera/index.d.ts +2 -0
- package/dist/types/hooks/useCamera/index.d.ts.map +1 -0
- package/dist/types/hooks/useCamera/useCamera.d.ts +8 -0
- package/dist/types/hooks/useCamera/useCamera.d.ts.map +1 -0
- package/dist/types/hooks/useConnectionState/index.d.ts +2 -0
- package/dist/types/hooks/useConnectionState/index.d.ts.map +1 -0
- package/dist/types/hooks/useConnectionState/useConnectionState.d.ts +2 -0
- package/dist/types/hooks/useConnectionState/useConnectionState.d.ts.map +1 -0
- package/dist/types/hooks/useConversation/index.d.ts +3 -0
- package/dist/types/hooks/useConversation/index.d.ts.map +1 -0
- package/dist/types/hooks/useConversation/livekit/constants.d.ts +4 -0
- package/dist/types/hooks/useConversation/livekit/constants.d.ts.map +1 -0
- package/dist/types/hooks/useConversation/livekit/types.d.ts +32 -0
- package/dist/types/hooks/useConversation/livekit/types.d.ts.map +1 -0
- package/dist/types/hooks/useConversation/livekit/useConversation.d.ts +3 -0
- package/dist/types/hooks/useConversation/livekit/useConversation.d.ts.map +1 -0
- package/dist/types/hooks/useConversation/livekit/utils/dataChannel.d.ts +6 -0
- package/dist/types/hooks/useConversation/livekit/utils/dataChannel.d.ts.map +1 -0
- package/dist/types/hooks/useConversation/livekit/utils/index.d.ts +7 -0
- package/dist/types/hooks/useConversation/livekit/utils/index.d.ts.map +1 -0
- package/dist/types/hooks/useConversation/livekit/utils/messaging.d.ts +3 -0
- package/dist/types/hooks/useConversation/livekit/utils/messaging.d.ts.map +1 -0
- package/dist/types/hooks/useConversation/livekit/utils/participants.d.ts +6 -0
- package/dist/types/hooks/useConversation/livekit/utils/participants.d.ts.map +1 -0
- package/dist/types/hooks/useConversation/livekit/utils/serialization.d.ts +2 -0
- package/dist/types/hooks/useConversation/livekit/utils/serialization.d.ts.map +1 -0
- package/dist/types/hooks/useConversation/livekit/utils/toolAdapter.d.ts +4 -0
- package/dist/types/hooks/useConversation/livekit/utils/toolAdapter.d.ts.map +1 -0
- package/dist/types/hooks/useConversation/livekit/utils/transcriptions.d.ts +3 -0
- package/dist/types/hooks/useConversation/livekit/utils/transcriptions.d.ts.map +1 -0
- package/dist/types/hooks/useConversation/types.d.ts +23 -0
- package/dist/types/hooks/useConversation/types.d.ts.map +1 -0
- package/dist/types/hooks/useConversation/useConversation.d.ts +3 -0
- package/dist/types/hooks/useConversation/useConversation.d.ts.map +1 -0
- package/dist/types/hooks/useConversationEvents/index.d.ts +4 -0
- package/dist/types/hooks/useConversationEvents/index.d.ts.map +1 -0
- package/dist/types/hooks/useConversationEvents/types.d.ts +72 -0
- package/dist/types/hooks/useConversationEvents/types.d.ts.map +1 -0
- package/dist/types/hooks/useConversationEvents/useConversationEvent.d.ts +3 -0
- package/dist/types/hooks/useConversationEvents/useConversationEvent.d.ts.map +1 -0
- package/dist/types/hooks/useConversationEvents/useConversationEvents.d.ts +5 -0
- package/dist/types/hooks/useConversationEvents/useConversationEvents.d.ts.map +1 -0
- package/dist/types/hooks/useConversationEvents/useEmitConversationEvent.d.ts +3 -0
- package/dist/types/hooks/useConversationEvents/useEmitConversationEvent.d.ts.map +1 -0
- package/dist/types/hooks/useConversationStatus/index.d.ts +2 -0
- package/dist/types/hooks/useConversationStatus/index.d.ts.map +1 -0
- package/dist/types/hooks/useConversationStatus/useConversationStatus.d.ts +2 -0
- package/dist/types/hooks/useConversationStatus/useConversationStatus.d.ts.map +1 -0
- package/dist/types/hooks/useConversationTimer/index.d.ts +2 -0
- package/dist/types/hooks/useConversationTimer/index.d.ts.map +1 -0
- package/dist/types/hooks/useConversationTimer/useConversationTimer.d.ts +17 -0
- package/dist/types/hooks/useConversationTimer/useConversationTimer.d.ts.map +1 -0
- package/dist/types/hooks/useCreateConversation/helpers.d.ts +8 -0
- package/dist/types/hooks/useCreateConversation/helpers.d.ts.map +1 -0
- package/dist/types/hooks/useCreateConversation/index.d.ts +2 -0
- package/dist/types/hooks/useCreateConversation/index.d.ts.map +1 -0
- package/dist/types/hooks/useCreateConversation/useCreateConversation.d.ts +11 -0
- package/dist/types/hooks/useCreateConversation/useCreateConversation.d.ts.map +1 -0
- package/dist/types/hooks/useDeviceSwitcher/index.d.ts +2 -0
- package/dist/types/hooks/useDeviceSwitcher/index.d.ts.map +1 -0
- package/dist/types/hooks/useDeviceSwitcher/useDeviceSwitcher.d.ts +9 -0
- package/dist/types/hooks/useDeviceSwitcher/useDeviceSwitcher.d.ts.map +1 -0
- package/dist/types/hooks/useDevices/index.d.ts +2 -0
- package/dist/types/hooks/useDevices/index.d.ts.map +1 -0
- package/dist/types/hooks/useDevices/useDevices.d.ts +6 -0
- package/dist/types/hooks/useDevices/useDevices.d.ts.map +1 -0
- package/dist/types/hooks/useMediaPermissions/index.d.ts +3 -0
- package/dist/types/hooks/useMediaPermissions/index.d.ts.map +1 -0
- package/dist/types/hooks/useMediaPermissions/types.d.ts +3 -0
- package/dist/types/hooks/useMediaPermissions/types.d.ts.map +1 -0
- package/dist/types/hooks/useMediaPermissions/useMediaPermissions.d.ts +7 -0
- package/dist/types/hooks/useMediaPermissions/useMediaPermissions.d.ts.map +1 -0
- package/dist/types/hooks/useMediaRecorder/index.d.ts +2 -0
- package/dist/types/hooks/useMediaRecorder/index.d.ts.map +1 -0
- package/dist/types/hooks/useMediaRecorder/useMediaRecorder.d.ts +39 -0
- package/dist/types/hooks/useMediaRecorder/useMediaRecorder.d.ts.map +1 -0
- package/dist/types/hooks/useMediaRecorder/useReactRecorder.d.ts +70 -0
- package/dist/types/hooks/useMediaRecorder/useReactRecorder.d.ts.map +1 -0
- package/dist/types/hooks/useMicrophone/index.d.ts +2 -0
- package/dist/types/hooks/useMicrophone/index.d.ts.map +1 -0
- package/dist/types/hooks/useMicrophone/useMicrophone.d.ts +8 -0
- package/dist/types/hooks/useMicrophone/useMicrophone.d.ts.map +1 -0
- package/dist/types/hooks/useParticipantTrack/index.d.ts +2 -0
- package/dist/types/hooks/useParticipantTrack/index.d.ts.map +1 -0
- package/dist/types/hooks/useParticipantTrack/useParticipantTrack.d.ts +11 -0
- package/dist/types/hooks/useParticipantTrack/useParticipantTrack.d.ts.map +1 -0
- package/dist/types/hooks/usePictureInPicture/index.d.ts +6 -0
- package/dist/types/hooks/usePictureInPicture/index.d.ts.map +1 -0
- package/dist/types/hooks/usePictureInPicture/state.d.ts +8 -0
- package/dist/types/hooks/usePictureInPicture/state.d.ts.map +1 -0
- package/dist/types/hooks/usePictureInPicture/types.d.ts +25 -0
- package/dist/types/hooks/usePictureInPicture/types.d.ts.map +1 -0
- package/dist/types/hooks/usePictureInPicture/usePictureInPicture.d.ts +3 -0
- package/dist/types/hooks/usePictureInPicture/usePictureInPicture.d.ts.map +1 -0
- package/dist/types/hooks/usePictureInPicture/usePictureInPictureAuto.d.ts +3 -0
- package/dist/types/hooks/usePictureInPicture/usePictureInPictureAuto.d.ts.map +1 -0
- package/dist/types/hooks/useScreenShare/index.d.ts +2 -0
- package/dist/types/hooks/useScreenShare/index.d.ts.map +1 -0
- package/dist/types/hooks/useScreenShare/useScreenShare.d.ts +13 -0
- package/dist/types/hooks/useScreenShare/useScreenShare.d.ts.map +1 -0
- package/dist/types/hooks/useSpeaker/index.d.ts +2 -0
- package/dist/types/hooks/useSpeaker/index.d.ts.map +1 -0
- package/dist/types/hooks/useSpeaker/useSpeaker.d.ts +6 -0
- package/dist/types/hooks/useSpeaker/useSpeaker.d.ts.map +1 -0
- package/dist/types/hooks/useTextChat/index.d.ts +2 -0
- package/dist/types/hooks/useTextChat/index.d.ts.map +1 -0
- package/dist/types/hooks/useTextChat/usePendingMessages.d.ts +11 -0
- package/dist/types/hooks/useTextChat/usePendingMessages.d.ts.map +1 -0
- package/dist/types/hooks/useTextChat/useTextChat.d.ts +21 -0
- package/dist/types/hooks/useTextChat/useTextChat.d.ts.map +1 -0
- package/dist/types/hooks/useTextChat/useToolAwareSend.d.ts +8 -0
- package/dist/types/hooks/useTextChat/useToolAwareSend.d.ts.map +1 -0
- package/dist/types/hooks/useTools/index.d.ts +4 -0
- package/dist/types/hooks/useTools/index.d.ts.map +1 -0
- package/dist/types/hooks/useTools/model/errors.d.ts +4 -0
- package/dist/types/hooks/useTools/model/errors.d.ts.map +1 -0
- package/dist/types/hooks/useTools/model/types.d.ts +27 -0
- package/dist/types/hooks/useTools/model/types.d.ts.map +1 -0
- package/dist/types/hooks/useTools/public/useTools.d.ts +2 -0
- package/dist/types/hooks/useTools/public/useTools.d.ts.map +1 -0
- package/dist/types/hooks/useTools/runtime/createToolRuntimeSession.d.ts +9 -0
- package/dist/types/hooks/useTools/runtime/createToolRuntimeSession.d.ts.map +1 -0
- package/dist/types/hooks/useTools/runtime/executeToolCall.d.ts +3 -0
- package/dist/types/hooks/useTools/runtime/executeToolCall.d.ts.map +1 -0
- package/dist/types/hooks/useTools/runtime/executeToolCallBatch.d.ts +11 -0
- package/dist/types/hooks/useTools/runtime/executeToolCallBatch.d.ts.map +1 -0
- package/dist/types/hooks/useTools/runtime/types.d.ts +35 -0
- package/dist/types/hooks/useTools/runtime/types.d.ts.map +1 -0
- package/dist/types/hooks/useTools/runtime/useToolCallingRuntime.d.ts +9 -0
- package/dist/types/hooks/useTools/runtime/useToolCallingRuntime.d.ts.map +1 -0
- package/dist/types/hooks/useTools/store/state.d.ts +17 -0
- package/dist/types/hooks/useTools/store/state.d.ts.map +1 -0
- package/dist/types/hooks/useTools/utils/normalizeFunctionCall.d.ts +4 -0
- package/dist/types/hooks/useTools/utils/normalizeFunctionCall.d.ts.map +1 -0
- package/dist/types/hooks/useTools/utils/serialize.d.ts +3 -0
- package/dist/types/hooks/useTools/utils/serialize.d.ts.map +1 -0
- package/dist/types/hooks/useTranscriptions/index.d.ts +3 -0
- package/dist/types/hooks/useTranscriptions/index.d.ts.map +1 -0
- package/dist/types/hooks/useTranscriptions/types.d.ts +5 -0
- package/dist/types/hooks/useTranscriptions/types.d.ts.map +1 -0
- package/dist/types/hooks/useTranscriptions/useTranscription.d.ts +3 -0
- package/dist/types/hooks/useTranscriptions/useTranscription.d.ts.map +1 -0
- package/dist/types/hooks/useTranscriptions/useTranscriptions.d.ts +3 -0
- package/dist/types/hooks/useTranscriptions/useTranscriptions.d.ts.map +1 -0
- package/dist/types/hooks/useUserActivity/index.d.ts +2 -0
- package/dist/types/hooks/useUserActivity/index.d.ts.map +1 -0
- package/dist/types/hooks/useUserActivity/useUserActivity.d.ts +8 -0
- package/dist/types/hooks/useUserActivity/useUserActivity.d.ts.map +1 -0
- package/dist/types/livekit/components.d.ts +2 -0
- package/dist/types/livekit/components.d.ts.map +1 -0
- package/dist/types/livekit/sdk.d.ts +2 -0
- package/dist/types/livekit/sdk.d.ts.map +1 -0
- package/dist/types/sdk-consumer/context.d.ts +12 -0
- package/dist/types/sdk-consumer/context.d.ts.map +1 -0
- package/dist/types/sdk-consumer/index.d.ts +2 -0
- package/dist/types/sdk-consumer/index.d.ts.map +1 -0
- package/dist/types/sdk.d.ts +25 -0
- package/dist/types/sdk.d.ts.map +1 -0
- package/dist/types/services/FetchPersonaChatService.d.ts +15 -0
- package/dist/types/services/FetchPersonaChatService.d.ts.map +1 -0
- package/dist/types/types/http.d.ts +15 -0
- package/dist/types/types/http.d.ts.map +1 -0
- package/dist/types/types/index.d.ts +4 -0
- package/dist/types/types/index.d.ts.map +1 -0
- package/dist/types/types/service.d.ts +62 -0
- package/dist/types/types/service.d.ts.map +1 -0
- package/dist/types/utils/captureImage/captureImage.d.ts +3 -0
- package/dist/types/utils/captureImage/captureImage.d.ts.map +1 -0
- package/dist/types/utils/captureImage/helpers.d.ts +4 -0
- package/dist/types/utils/captureImage/helpers.d.ts.map +1 -0
- package/dist/types/utils/captureImage/index.d.ts +3 -0
- package/dist/types/utils/captureImage/index.d.ts.map +1 -0
- package/dist/types/utils/captureImage/types.d.ts +9 -0
- package/dist/types/utils/captureImage/types.d.ts.map +1 -0
- package/dist/types/utils/compatibility/compatibility.d.ts +3 -0
- package/dist/types/utils/compatibility/compatibility.d.ts.map +1 -0
- package/dist/types/utils/compatibility/index.d.ts +2 -0
- package/dist/types/utils/compatibility/index.d.ts.map +1 -0
- package/dist/types/utils.d.ts +2 -0
- package/dist/types/utils.d.ts.map +1 -0
- package/livekit/components/package.json +5 -0
- package/livekit/sdk/package.json +5 -0
- package/livekit-client.patch +19 -0
- package/package.json +108 -0
- package/sdk/package.json +5 -0
- package/tpa/package.json +5 -0
- package/utils/package.json +5 -0
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/objectWithoutPropertiesLoose";
|
|
2
|
+
const _excluded = ["enabled", "duration", "threshold", "autoStart", "onSample", "type", "audioConstraints", "systemAudioConstraints", "videoConstraints"];
|
|
3
|
+
import { useEffect, useMemo, useState, useRef } from 'react';
|
|
4
|
+
import { useReactMediaRecorder } from './useReactRecorder';
|
|
5
|
+
import { useUnmount } from 'react-use';
|
|
6
|
+
import { useMicrophone } from '../useMicrophone';
|
|
7
|
+
import { useCamera } from '../useCamera';
|
|
8
|
+
import { useStopwatch } from 'react-timer-hook';
|
|
9
|
+
import invariant from 'invariant';
|
|
10
|
+
import { isIosDevice } from '../../utils/compatibility';
|
|
11
|
+
export function useMediaRecorder(options) {
|
|
12
|
+
const _options$enabled = options.enabled,
|
|
13
|
+
enabled = _options$enabled === void 0 ? true : _options$enabled,
|
|
14
|
+
_options$duration = options.duration,
|
|
15
|
+
duration = _options$duration === void 0 ? 10000 : _options$duration,
|
|
16
|
+
_options$threshold = options.threshold,
|
|
17
|
+
threshold = _options$threshold === void 0 ? 1000 : _options$threshold,
|
|
18
|
+
_options$autoStart = options.autoStart,
|
|
19
|
+
autoStart = _options$autoStart === void 0 ? true : _options$autoStart,
|
|
20
|
+
onSample = options.onSample,
|
|
21
|
+
type = options.type,
|
|
22
|
+
audioConstraints = options.audioConstraints,
|
|
23
|
+
systemAudioConstraints = options.systemAudioConstraints,
|
|
24
|
+
_options$videoConstra = options.videoConstraints,
|
|
25
|
+
videoConstraints = _options$videoConstra === void 0 ? {
|
|
26
|
+
width: {
|
|
27
|
+
ideal: 1920
|
|
28
|
+
},
|
|
29
|
+
height: {
|
|
30
|
+
ideal: 1080
|
|
31
|
+
}
|
|
32
|
+
} : _options$videoConstra,
|
|
33
|
+
reactMediaRecorderHookProps = _objectWithoutPropertiesLoose(options, _excluded);
|
|
34
|
+
const elapsedTimeRef = useRef({
|
|
35
|
+
totalMilliseconds: 0,
|
|
36
|
+
milliseconds: 0,
|
|
37
|
+
seconds: 0,
|
|
38
|
+
minutes: 0,
|
|
39
|
+
hours: 0
|
|
40
|
+
});
|
|
41
|
+
const _useMicrophone = useMicrophone(),
|
|
42
|
+
microphoneDeviceId = _useMicrophone.deviceId;
|
|
43
|
+
const _useCamera = useCamera(),
|
|
44
|
+
cameraDeviceId = _useCamera.deviceId;
|
|
45
|
+
const _useState = useState('inactive'),
|
|
46
|
+
state = _useState[0],
|
|
47
|
+
setState = _useState[1];
|
|
48
|
+
|
|
49
|
+
// eslint-disable-next-line no-undef
|
|
50
|
+
const audioConstraint = useMemo(() => {
|
|
51
|
+
if (!enabled) {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
if (microphoneDeviceId === 'default') {
|
|
55
|
+
return audioConstraints || true;
|
|
56
|
+
}
|
|
57
|
+
if (audioConstraints) {
|
|
58
|
+
return {
|
|
59
|
+
deviceId: isIosDevice() ? {
|
|
60
|
+
ideal: microphoneDeviceId
|
|
61
|
+
} : {
|
|
62
|
+
exact: microphoneDeviceId
|
|
63
|
+
},
|
|
64
|
+
...audioConstraints
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
deviceId: isIosDevice() ? {
|
|
69
|
+
ideal: microphoneDeviceId
|
|
70
|
+
} : {
|
|
71
|
+
exact: microphoneDeviceId
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
}, [microphoneDeviceId, enabled, audioConstraints]);
|
|
75
|
+
|
|
76
|
+
// eslint-disable-next-line no-undef
|
|
77
|
+
const videoConstraint = useMemo(() => {
|
|
78
|
+
if (!enabled || type !== 'video') {
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
if (cameraDeviceId === 'default') {
|
|
82
|
+
return videoConstraints || true;
|
|
83
|
+
}
|
|
84
|
+
if (videoConstraints) {
|
|
85
|
+
return {
|
|
86
|
+
deviceId: isIosDevice() ? {
|
|
87
|
+
ideal: cameraDeviceId
|
|
88
|
+
} : {
|
|
89
|
+
exact: cameraDeviceId
|
|
90
|
+
},
|
|
91
|
+
...videoConstraints
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
return {
|
|
95
|
+
deviceId: isIosDevice() ? {
|
|
96
|
+
ideal: cameraDeviceId
|
|
97
|
+
} : {
|
|
98
|
+
exact: cameraDeviceId
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
}, [cameraDeviceId, enabled, type, videoConstraints]);
|
|
102
|
+
const _useReactMediaRecorde = useReactMediaRecorder({
|
|
103
|
+
screen: type === 'screen',
|
|
104
|
+
audio: audioConstraint,
|
|
105
|
+
video: videoConstraint,
|
|
106
|
+
systemAudio: systemAudioConstraints,
|
|
107
|
+
onStop: (blobUrl, blob) => {
|
|
108
|
+
onSample(blobUrl, blob, elapsedTimeRef.current);
|
|
109
|
+
},
|
|
110
|
+
askPermissionOnMount: enabled && typeof window !== 'undefined',
|
|
111
|
+
...reactMediaRecorderHookProps
|
|
112
|
+
}),
|
|
113
|
+
startRecording = _useReactMediaRecorde.startRecording,
|
|
114
|
+
stopRecording = _useReactMediaRecorde.stopRecording,
|
|
115
|
+
pauseRecording = _useReactMediaRecorde.pauseRecording,
|
|
116
|
+
resumeRecording = _useReactMediaRecorde.resumeRecording,
|
|
117
|
+
previewStream = _useReactMediaRecorde.previewStream,
|
|
118
|
+
previewAudioStream = _useReactMediaRecorde.previewAudioStream,
|
|
119
|
+
mediaBlobUrl = _useReactMediaRecorde.mediaBlobUrl,
|
|
120
|
+
releaseStream = _useReactMediaRecorde.releaseStream;
|
|
121
|
+
const _useStopwatch = useStopwatch({
|
|
122
|
+
autoStart: false,
|
|
123
|
+
interval: 1000
|
|
124
|
+
}),
|
|
125
|
+
startTimer = _useStopwatch.start,
|
|
126
|
+
pauseTimer = _useStopwatch.pause,
|
|
127
|
+
resetTimer = _useStopwatch.reset,
|
|
128
|
+
totalMilliseconds = _useStopwatch.totalMilliseconds,
|
|
129
|
+
milliseconds = _useStopwatch.milliseconds,
|
|
130
|
+
seconds = _useStopwatch.seconds,
|
|
131
|
+
minutes = _useStopwatch.minutes,
|
|
132
|
+
hours = _useStopwatch.hours,
|
|
133
|
+
days = _useStopwatch.days;
|
|
134
|
+
useEffect(() => {
|
|
135
|
+
if (state === 'recording') {
|
|
136
|
+
elapsedTimeRef.current = {
|
|
137
|
+
totalMilliseconds,
|
|
138
|
+
milliseconds,
|
|
139
|
+
seconds,
|
|
140
|
+
minutes,
|
|
141
|
+
hours
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
}, [totalMilliseconds, milliseconds, seconds, minutes, hours, state]);
|
|
145
|
+
useEffect(() => {
|
|
146
|
+
if (autoStart && enabled) {
|
|
147
|
+
start();
|
|
148
|
+
}
|
|
149
|
+
}, [autoStart, enabled]);
|
|
150
|
+
useEffect(() => {
|
|
151
|
+
if (totalMilliseconds >= duration - threshold) {
|
|
152
|
+
stop();
|
|
153
|
+
}
|
|
154
|
+
}, [totalMilliseconds, duration, threshold]);
|
|
155
|
+
useUnmount(cleanup);
|
|
156
|
+
return {
|
|
157
|
+
start,
|
|
158
|
+
stop,
|
|
159
|
+
pause,
|
|
160
|
+
resume,
|
|
161
|
+
releaseStream,
|
|
162
|
+
state,
|
|
163
|
+
previewStream,
|
|
164
|
+
previewAudioStream,
|
|
165
|
+
mediaBlobUrl,
|
|
166
|
+
elapsed: {
|
|
167
|
+
totalMilliseconds,
|
|
168
|
+
milliseconds,
|
|
169
|
+
seconds,
|
|
170
|
+
minutes,
|
|
171
|
+
hours,
|
|
172
|
+
days
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
function cleanup() {
|
|
176
|
+
resetTimer(undefined, false);
|
|
177
|
+
elapsedTimeRef.current = {
|
|
178
|
+
totalMilliseconds: 0,
|
|
179
|
+
milliseconds: 0,
|
|
180
|
+
seconds: 0,
|
|
181
|
+
minutes: 0,
|
|
182
|
+
hours: 0
|
|
183
|
+
};
|
|
184
|
+
setState('inactive');
|
|
185
|
+
releaseStream();
|
|
186
|
+
}
|
|
187
|
+
function start() {
|
|
188
|
+
invariant(enabled, 'Recorder is not enabled');
|
|
189
|
+
if (state === 'inactive') {
|
|
190
|
+
setState('recording');
|
|
191
|
+
startRecording();
|
|
192
|
+
startTimer();
|
|
193
|
+
} else {
|
|
194
|
+
console.warn('Recorder is already started');
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
function stop() {
|
|
198
|
+
if (state === 'recording' || state === 'paused') {
|
|
199
|
+
setState('inactive');
|
|
200
|
+
stopRecording();
|
|
201
|
+
resetTimer(undefined, false);
|
|
202
|
+
} else {
|
|
203
|
+
console.warn('Recorder is not recording. To stop the recorder, call the start method first.');
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
function pause() {
|
|
207
|
+
invariant(enabled, 'Recorder is not enabled');
|
|
208
|
+
if (state === 'recording') {
|
|
209
|
+
setState('paused');
|
|
210
|
+
pauseRecording();
|
|
211
|
+
pauseTimer();
|
|
212
|
+
} else {
|
|
213
|
+
console.warn('Recorder is not recording. To pause the recorder, call the start method first.');
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
function resume() {
|
|
217
|
+
invariant(enabled, 'Recorder is not enabled');
|
|
218
|
+
if (state === 'paused') {
|
|
219
|
+
setState('recording');
|
|
220
|
+
resumeRecording();
|
|
221
|
+
startTimer();
|
|
222
|
+
} else {
|
|
223
|
+
console.warn('Recorder is not paused. To resume the recorder, call the pause method first.');
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
//# sourceMappingURL=useMediaRecorder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useEffect","useMemo","useState","useRef","useReactMediaRecorder","useUnmount","useMicrophone","useCamera","useStopwatch","invariant","isIosDevice","useMediaRecorder","options","_options$enabled","enabled","_options$duration","duration","_options$threshold","threshold","_options$autoStart","autoStart","onSample","type","audioConstraints","systemAudioConstraints","_options$videoConstra","videoConstraints","width","ideal","height","reactMediaRecorderHookProps","_objectWithoutPropertiesLoose","_excluded","elapsedTimeRef","totalMilliseconds","milliseconds","seconds","minutes","hours","_useMicrophone","microphoneDeviceId","deviceId","_useCamera","cameraDeviceId","_useState","state","setState","audioConstraint","exact","videoConstraint","_useReactMediaRecorde","screen","audio","video","systemAudio","onStop","blobUrl","blob","current","askPermissionOnMount","window","startRecording","stopRecording","pauseRecording","resumeRecording","previewStream","previewAudioStream","mediaBlobUrl","releaseStream","_useStopwatch","interval","startTimer","start","pauseTimer","pause","resetTimer","reset","days","stop","cleanup","resume","elapsed","undefined","console","warn"],"sources":["../../../../src/hooks/useMediaRecorder/useMediaRecorder.tsx"],"sourcesContent":["import { useEffect, useMemo, useState, useRef } from 'react';\nimport {\n useReactMediaRecorder,\n ReactMediaRecorderHookProps,\n} from './useReactRecorder';\nimport { useUnmount } from 'react-use';\nimport { useMicrophone } from '../useMicrophone';\nimport { useCamera } from '../useCamera';\nimport { useStopwatch } from 'react-timer-hook';\nimport invariant from 'invariant';\nimport { isIosDevice } from '../../utils/compatibility';\n\nexport type ElapsedTime = {\n totalMilliseconds: number;\n milliseconds: number;\n seconds: number;\n minutes: number;\n hours: number;\n};\n\nexport type UseMediaRecorderOptions = {\n enabled?: boolean;\n duration?: number;\n threshold?: number;\n // eslint-disable-next-line no-undef\n audioConstraints?: Omit<MediaTrackConstraints, 'deviceId'>;\n // eslint-disable-next-line no-undef\n systemAudioConstraints?: MediaTrackConstraints;\n // eslint-disable-next-line no-undef\n videoConstraints?: Omit<MediaTrackConstraints, 'deviceId'>;\n type: 'audio' | 'video' | 'screen';\n autoStart?: boolean;\n onSample(blobUrl: string, sample: Blob, elapsedTime: ElapsedTime): void;\n} & Omit<ReactMediaRecorderHookProps, 'audio' | 'video' | 'onStop'>;\n\nexport function useMediaRecorder(options: UseMediaRecorderOptions) {\n const {\n enabled = true,\n duration = 10000,\n threshold = 1000,\n autoStart = true,\n onSample,\n type,\n audioConstraints,\n systemAudioConstraints,\n videoConstraints = { width: { ideal: 1920 }, height: { ideal: 1080 } },\n ...reactMediaRecorderHookProps\n } = options;\n const elapsedTimeRef = useRef<ElapsedTime>({\n totalMilliseconds: 0,\n milliseconds: 0,\n seconds: 0,\n minutes: 0,\n hours: 0,\n });\n\n const { deviceId: microphoneDeviceId } = useMicrophone();\n const { deviceId: cameraDeviceId } = useCamera();\n\n const [state, setState] = useState<'inactive' | 'paused' | 'recording'>(\n 'inactive',\n );\n\n // eslint-disable-next-line no-undef\n const audioConstraint = useMemo<boolean | MediaTrackConstraints>(() => {\n if (!enabled) {\n return false;\n }\n\n if (microphoneDeviceId === 'default') {\n return audioConstraints || true;\n }\n\n if (audioConstraints) {\n return {\n deviceId: isIosDevice()\n ? { ideal: microphoneDeviceId }\n : { exact: microphoneDeviceId },\n ...audioConstraints,\n };\n }\n return {\n deviceId: isIosDevice()\n ? { ideal: microphoneDeviceId }\n : { exact: microphoneDeviceId },\n };\n }, [microphoneDeviceId, enabled, audioConstraints]);\n\n // eslint-disable-next-line no-undef\n const videoConstraint = useMemo<boolean | MediaTrackConstraints>(() => {\n if (!enabled || type !== 'video') {\n return false;\n }\n\n if (cameraDeviceId === 'default') {\n return videoConstraints || true;\n }\n\n if (videoConstraints) {\n return {\n deviceId: isIosDevice()\n ? { ideal: cameraDeviceId }\n : { exact: cameraDeviceId },\n ...videoConstraints,\n };\n }\n return {\n deviceId: isIosDevice()\n ? { ideal: cameraDeviceId }\n : { exact: cameraDeviceId },\n };\n }, [cameraDeviceId, enabled, type, videoConstraints]);\n\n const {\n startRecording,\n stopRecording,\n pauseRecording,\n resumeRecording,\n previewStream,\n previewAudioStream,\n mediaBlobUrl,\n releaseStream,\n } = useReactMediaRecorder({\n screen: type === 'screen',\n audio: audioConstraint,\n video: videoConstraint,\n systemAudio: systemAudioConstraints,\n onStop: (blobUrl, blob) => {\n onSample(blobUrl, blob, elapsedTimeRef.current);\n },\n askPermissionOnMount: enabled && typeof window !== 'undefined',\n ...reactMediaRecorderHookProps,\n });\n\n const {\n start: startTimer,\n pause: pauseTimer,\n reset: resetTimer,\n totalMilliseconds,\n milliseconds,\n seconds,\n minutes,\n hours,\n days,\n } = useStopwatch({\n autoStart: false,\n interval: 1000,\n });\n\n useEffect(() => {\n if (state === 'recording') {\n elapsedTimeRef.current = {\n totalMilliseconds,\n milliseconds,\n seconds,\n minutes,\n hours,\n };\n }\n }, [totalMilliseconds, milliseconds, seconds, minutes, hours, state]);\n\n useEffect(() => {\n if (autoStart && enabled) {\n start();\n }\n }, [autoStart, enabled]);\n\n useEffect(() => {\n if (totalMilliseconds >= duration - threshold) {\n stop();\n }\n }, [totalMilliseconds, duration, threshold]);\n\n useUnmount(cleanup);\n\n return {\n start,\n stop,\n pause,\n resume,\n releaseStream,\n state,\n previewStream,\n previewAudioStream,\n mediaBlobUrl,\n elapsed: {\n totalMilliseconds,\n milliseconds,\n seconds,\n minutes,\n hours,\n days,\n },\n };\n function cleanup() {\n resetTimer(undefined, false);\n elapsedTimeRef.current = {\n totalMilliseconds: 0,\n milliseconds: 0,\n seconds: 0,\n minutes: 0,\n hours: 0,\n };\n setState('inactive');\n releaseStream();\n }\n\n function start() {\n invariant(enabled, 'Recorder is not enabled');\n\n if (state === 'inactive') {\n setState('recording');\n startRecording();\n startTimer();\n } else {\n console.warn('Recorder is already started');\n }\n }\n\n function stop() {\n if (state === 'recording' || state === 'paused') {\n setState('inactive');\n stopRecording();\n resetTimer(undefined, false);\n } else {\n console.warn(\n 'Recorder is not recording. To stop the recorder, call the start method first.',\n );\n }\n }\n\n function pause() {\n invariant(enabled, 'Recorder is not enabled');\n\n if (state === 'recording') {\n setState('paused');\n pauseRecording();\n pauseTimer();\n } else {\n console.warn(\n 'Recorder is not recording. To pause the recorder, call the start method first.',\n );\n }\n }\n\n function resume() {\n invariant(enabled, 'Recorder is not enabled');\n\n if (state === 'paused') {\n setState('recording');\n resumeRecording();\n startTimer();\n } else {\n console.warn(\n 'Recorder is not paused. To resume the recorder, call the pause method first.',\n );\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
/* eslint-disable no-undef */
|
|
2
|
+
import { register, MediaRecorder as ExtendableMediaRecorder } from 'extendable-media-recorder';
|
|
3
|
+
import { useCallback, useEffect, useRef, useState, useMemo } from 'react';
|
|
4
|
+
import { connect } from 'extendable-media-recorder-wav-encoder';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Experimental (optional).
|
|
8
|
+
* An enumerated value specifying whether the browser should allow the user to select the current tab for capture.
|
|
9
|
+
* This helps to avoid the "infinite hall of mirrors" effect experienced when a video conferencing app inadvertently shares its own display.
|
|
10
|
+
* Possible values are include, which hints that the browser should include the current tab in the choices offered for capture,
|
|
11
|
+
* and exclude, which hints that it should be excluded.
|
|
12
|
+
* A default value is not mandated by the spec.
|
|
13
|
+
* See specs at: https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia#selfbrowsersurface
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Experimental (optional).
|
|
18
|
+
* A boolean; a value of true instructs the browser to offer the current tab as the most prominent capture source, i.e. as a separate "This Tab" option in the "Choose what to share" options presented to the user.
|
|
19
|
+
* This is useful as many app types generally just want to share the current tab.
|
|
20
|
+
* See specs at: https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia#prefercurrenttab
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
export let RecorderErrors = /*#__PURE__*/function (RecorderErrors) {
|
|
24
|
+
RecorderErrors["AbortError"] = "media_aborted";
|
|
25
|
+
RecorderErrors["NotAllowedError"] = "permission_denied";
|
|
26
|
+
RecorderErrors["NotFoundError"] = "no_specified_media_found";
|
|
27
|
+
RecorderErrors["NotReadableError"] = "media_in_use";
|
|
28
|
+
RecorderErrors["OverconstrainedError"] = "invalid_media_constraints";
|
|
29
|
+
RecorderErrors["TypeError"] = "no_constraints";
|
|
30
|
+
RecorderErrors["NONE"] = "";
|
|
31
|
+
RecorderErrors["NO_RECORDER"] = "recorder_error";
|
|
32
|
+
return RecorderErrors;
|
|
33
|
+
}({});
|
|
34
|
+
const stopMediaStream = stream => {
|
|
35
|
+
if (!stream) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
stream.getTracks().forEach(track => track.stop());
|
|
39
|
+
};
|
|
40
|
+
export function useReactMediaRecorder(_ref) {
|
|
41
|
+
let _ref$audio = _ref.audio,
|
|
42
|
+
audio = _ref$audio === void 0 ? true : _ref$audio,
|
|
43
|
+
_ref$video = _ref.video,
|
|
44
|
+
video = _ref$video === void 0 ? false : _ref$video,
|
|
45
|
+
_ref$selfBrowserSurfa = _ref.selfBrowserSurface,
|
|
46
|
+
selfBrowserSurface = _ref$selfBrowserSurfa === void 0 ? undefined : _ref$selfBrowserSurfa,
|
|
47
|
+
_ref$preferCurrentTab = _ref.preferCurrentTab,
|
|
48
|
+
preferCurrentTab = _ref$preferCurrentTab === void 0 ? false : _ref$preferCurrentTab,
|
|
49
|
+
_ref$onStop = _ref.onStop,
|
|
50
|
+
onStop = _ref$onStop === void 0 ? () => null : _ref$onStop,
|
|
51
|
+
_ref$onStart = _ref.onStart,
|
|
52
|
+
onStart = _ref$onStart === void 0 ? () => null : _ref$onStart,
|
|
53
|
+
blobPropertyBag = _ref.blobPropertyBag,
|
|
54
|
+
_ref$screen = _ref.screen,
|
|
55
|
+
screen = _ref$screen === void 0 ? false : _ref$screen,
|
|
56
|
+
_ref$systemAudio = _ref.systemAudio,
|
|
57
|
+
systemAudio = _ref$systemAudio === void 0 ? false : _ref$systemAudio,
|
|
58
|
+
_ref$mediaRecorderOpt = _ref.mediaRecorderOptions,
|
|
59
|
+
mediaRecorderOptions = _ref$mediaRecorderOpt === void 0 ? undefined : _ref$mediaRecorderOpt,
|
|
60
|
+
_ref$customMediaStrea = _ref.customMediaStream,
|
|
61
|
+
customMediaStream = _ref$customMediaStrea === void 0 ? null : _ref$customMediaStrea,
|
|
62
|
+
_ref$stopStreamsOnSto = _ref.stopStreamsOnStop,
|
|
63
|
+
stopStreamsOnStop = _ref$stopStreamsOnSto === void 0 ? true : _ref$stopStreamsOnSto,
|
|
64
|
+
_ref$askPermissionOnM = _ref.askPermissionOnMount,
|
|
65
|
+
askPermissionOnMount = _ref$askPermissionOnM === void 0 ? false : _ref$askPermissionOnM;
|
|
66
|
+
const mediaRecorder = useRef(null);
|
|
67
|
+
const mediaChunks = useRef([]);
|
|
68
|
+
const mediaStream = useRef(null);
|
|
69
|
+
const mediaStreamRequestId = useRef(0);
|
|
70
|
+
const shouldReleaseMediaStream = useRef(false);
|
|
71
|
+
const _useState = useState('idle'),
|
|
72
|
+
status = _useState[0],
|
|
73
|
+
setStatus = _useState[1];
|
|
74
|
+
const _useState2 = useState(false),
|
|
75
|
+
isAudioMuted = _useState2[0],
|
|
76
|
+
setIsAudioMuted = _useState2[1];
|
|
77
|
+
const _useState3 = useState(undefined),
|
|
78
|
+
mediaBlobUrl = _useState3[0],
|
|
79
|
+
setMediaBlobUrl = _useState3[1];
|
|
80
|
+
const _useState4 = useState('NONE'),
|
|
81
|
+
error = _useState4[0],
|
|
82
|
+
setError = _useState4[1];
|
|
83
|
+
const _useState5 = useState(false),
|
|
84
|
+
init = _useState5[0],
|
|
85
|
+
setInit = _useState5[1];
|
|
86
|
+
useEffect(() => {
|
|
87
|
+
if (init) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
const setup = async () => {
|
|
91
|
+
try {
|
|
92
|
+
await register(await connect());
|
|
93
|
+
} catch (e) {
|
|
94
|
+
//
|
|
95
|
+
}
|
|
96
|
+
setInit(true); // now runs only AFTER the encoder is registered
|
|
97
|
+
};
|
|
98
|
+
setup();
|
|
99
|
+
}, []);
|
|
100
|
+
const getMediaStream = useCallback(async () => {
|
|
101
|
+
shouldReleaseMediaStream.current = false;
|
|
102
|
+
const requestId = ++mediaStreamRequestId.current;
|
|
103
|
+
setStatus('acquiring_media');
|
|
104
|
+
const requiredMedia = {
|
|
105
|
+
audio: typeof audio === 'boolean' ? !!audio : audio,
|
|
106
|
+
video: typeof video === 'boolean' ? !!video : video
|
|
107
|
+
};
|
|
108
|
+
try {
|
|
109
|
+
let stream;
|
|
110
|
+
if (customMediaStream) {
|
|
111
|
+
stream = customMediaStream;
|
|
112
|
+
} else if (screen) {
|
|
113
|
+
stream = await window.navigator.mediaDevices.getDisplayMedia({
|
|
114
|
+
video: video || true,
|
|
115
|
+
audio: systemAudio,
|
|
116
|
+
// @ts-expect-error
|
|
117
|
+
selfBrowserSurface,
|
|
118
|
+
preferCurrentTab,
|
|
119
|
+
suppressLocalAudioPlayback: false
|
|
120
|
+
});
|
|
121
|
+
stream.getVideoTracks()[0].addEventListener('ended', () => {
|
|
122
|
+
stopRecording();
|
|
123
|
+
});
|
|
124
|
+
// Add microphone audio if requested (and not using system audio only)
|
|
125
|
+
if (audio && !systemAudio) {
|
|
126
|
+
const audioStream = await window.navigator.mediaDevices.getUserMedia({
|
|
127
|
+
audio
|
|
128
|
+
});
|
|
129
|
+
audioStream.getAudioTracks().forEach(audioTrack => stream.addTrack(audioTrack));
|
|
130
|
+
}
|
|
131
|
+
} else {
|
|
132
|
+
stream = await window.navigator.mediaDevices.getUserMedia(requiredMedia);
|
|
133
|
+
}
|
|
134
|
+
if (shouldReleaseMediaStream.current || requestId !== mediaStreamRequestId.current) {
|
|
135
|
+
stopMediaStream(stream);
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
mediaStream.current = stream;
|
|
139
|
+
setStatus('idle');
|
|
140
|
+
} catch (error) {
|
|
141
|
+
setError(error.name);
|
|
142
|
+
setStatus('idle');
|
|
143
|
+
}
|
|
144
|
+
}, [audio, video, screen, systemAudio]);
|
|
145
|
+
useEffect(() => {
|
|
146
|
+
if (!window.MediaRecorder) {
|
|
147
|
+
throw new Error('Unsupported Browser');
|
|
148
|
+
}
|
|
149
|
+
if (screen) {
|
|
150
|
+
if (!window.navigator.mediaDevices.getDisplayMedia) {
|
|
151
|
+
throw new Error("This browser doesn't support screen capturing");
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
const checkConstraints = mediaType => {
|
|
155
|
+
const supportedMediaConstraints = navigator.mediaDevices.getSupportedConstraints();
|
|
156
|
+
const unSupportedConstraints = Object.keys(mediaType).filter(constraint => !supportedMediaConstraints[constraint]);
|
|
157
|
+
if (unSupportedConstraints.length > 0) {
|
|
158
|
+
console.error(`The constraints ${unSupportedConstraints.join(',')} doesn't support on this browser. Please check your ReactMediaRecorder component.`);
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
if (typeof audio === 'object') {
|
|
162
|
+
checkConstraints(audio);
|
|
163
|
+
}
|
|
164
|
+
if (typeof video === 'object') {
|
|
165
|
+
checkConstraints(video);
|
|
166
|
+
}
|
|
167
|
+
if (init && mediaRecorderOptions && mediaRecorderOptions.mimeType) {
|
|
168
|
+
if (!ExtendableMediaRecorder.isTypeSupported(mediaRecorderOptions.mimeType)) {
|
|
169
|
+
console.error(`The specified MIME type you supplied for MediaRecorder doesn't support this browser`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
if (!mediaStream.current && askPermissionOnMount) {
|
|
173
|
+
getMediaStream();
|
|
174
|
+
}
|
|
175
|
+
return () => {
|
|
176
|
+
shouldReleaseMediaStream.current = true;
|
|
177
|
+
mediaStreamRequestId.current += 1;
|
|
178
|
+
stopMediaStream(mediaStream.current);
|
|
179
|
+
mediaStream.current = null;
|
|
180
|
+
};
|
|
181
|
+
}, [audio, screen, video, getMediaStream, mediaRecorderOptions, askPermissionOnMount, init]);
|
|
182
|
+
|
|
183
|
+
// Media Recorder Handlers
|
|
184
|
+
|
|
185
|
+
const startRecording = async () => {
|
|
186
|
+
setError('NONE');
|
|
187
|
+
if (!mediaStream.current) {
|
|
188
|
+
await getMediaStream();
|
|
189
|
+
}
|
|
190
|
+
if (mediaStream.current) {
|
|
191
|
+
const isStreamEnded = mediaStream.current.getTracks().some(track => track.readyState === 'ended');
|
|
192
|
+
if (isStreamEnded) {
|
|
193
|
+
await getMediaStream();
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// User blocked the permissions (getMediaStream errored out)
|
|
197
|
+
if (!mediaStream.current.active) {
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
mediaRecorder.current = new ExtendableMediaRecorder(mediaStream.current, mediaRecorderOptions || undefined);
|
|
201
|
+
mediaRecorder.current.ondataavailable = onRecordingActive;
|
|
202
|
+
mediaRecorder.current.onstop = onRecordingStop;
|
|
203
|
+
mediaRecorder.current.onstart = onRecordingStart;
|
|
204
|
+
mediaRecorder.current.onerror = () => {
|
|
205
|
+
setError('NO_RECORDER');
|
|
206
|
+
setStatus('idle');
|
|
207
|
+
};
|
|
208
|
+
mediaRecorder.current.start(1000);
|
|
209
|
+
setStatus('recording');
|
|
210
|
+
}
|
|
211
|
+
};
|
|
212
|
+
const onRecordingActive = _ref2 => {
|
|
213
|
+
let data = _ref2.data;
|
|
214
|
+
mediaChunks.current.push(data);
|
|
215
|
+
};
|
|
216
|
+
const onRecordingStart = () => {
|
|
217
|
+
onStart();
|
|
218
|
+
};
|
|
219
|
+
const onRecordingStop = () => {
|
|
220
|
+
const chunks = mediaChunks.current;
|
|
221
|
+
if (chunks.length === 0) {
|
|
222
|
+
setStatus('stopped');
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
const firstChunk = chunks[0];
|
|
226
|
+
const blobProperty = {
|
|
227
|
+
type: firstChunk.type,
|
|
228
|
+
...(blobPropertyBag || (video ? {
|
|
229
|
+
type: 'video/mp4'
|
|
230
|
+
} : {
|
|
231
|
+
type: 'audio/wav'
|
|
232
|
+
}))
|
|
233
|
+
};
|
|
234
|
+
const blob = new Blob(chunks, blobProperty);
|
|
235
|
+
const url = URL.createObjectURL(blob);
|
|
236
|
+
setStatus('stopped');
|
|
237
|
+
setMediaBlobUrl(url);
|
|
238
|
+
onStop(url, blob);
|
|
239
|
+
// Clear chunks after processing
|
|
240
|
+
mediaChunks.current = [];
|
|
241
|
+
};
|
|
242
|
+
const muteAudio = mute => {
|
|
243
|
+
setIsAudioMuted(mute);
|
|
244
|
+
if (mediaStream.current) {
|
|
245
|
+
mediaStream.current.getAudioTracks().forEach(audioTrack => audioTrack.enabled = !mute);
|
|
246
|
+
}
|
|
247
|
+
};
|
|
248
|
+
const pauseRecording = () => {
|
|
249
|
+
if (mediaRecorder.current && mediaRecorder.current.state === 'recording') {
|
|
250
|
+
setStatus('paused');
|
|
251
|
+
mediaRecorder.current.pause();
|
|
252
|
+
}
|
|
253
|
+
};
|
|
254
|
+
const resumeRecording = () => {
|
|
255
|
+
if (mediaRecorder.current && mediaRecorder.current.state === 'paused') {
|
|
256
|
+
setStatus('recording');
|
|
257
|
+
mediaRecorder.current.resume();
|
|
258
|
+
}
|
|
259
|
+
};
|
|
260
|
+
const stopRecording = () => {
|
|
261
|
+
if (mediaRecorder.current) {
|
|
262
|
+
if (mediaRecorder.current.state !== 'inactive') {
|
|
263
|
+
setStatus('stopping');
|
|
264
|
+
mediaRecorder.current.stop();
|
|
265
|
+
if (stopStreamsOnStop) {
|
|
266
|
+
stopMediaStream(mediaStream.current);
|
|
267
|
+
}
|
|
268
|
+
// Note: chunks are cleared in onRecordingStop after blob is created
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
};
|
|
272
|
+
|
|
273
|
+
// use this to release the stream when the component is unmounted
|
|
274
|
+
const releaseStream = () => {
|
|
275
|
+
shouldReleaseMediaStream.current = true;
|
|
276
|
+
mediaStreamRequestId.current += 1;
|
|
277
|
+
if (mediaRecorder.current && mediaRecorder.current.state !== 'inactive') {
|
|
278
|
+
mediaRecorder.current.stop();
|
|
279
|
+
}
|
|
280
|
+
stopMediaStream(mediaStream.current);
|
|
281
|
+
mediaStream.current = null;
|
|
282
|
+
setStatus('idle');
|
|
283
|
+
setIsAudioMuted(false);
|
|
284
|
+
};
|
|
285
|
+
const previewStream = useMemo(() => {
|
|
286
|
+
return mediaStream.current ? new MediaStream(mediaStream.current.getVideoTracks()) : null;
|
|
287
|
+
}, [status]);
|
|
288
|
+
const previewAudioStream = useMemo(() => {
|
|
289
|
+
return mediaStream.current ? new MediaStream(mediaStream.current.getAudioTracks()) : null;
|
|
290
|
+
}, [status]);
|
|
291
|
+
return {
|
|
292
|
+
error: RecorderErrors[error],
|
|
293
|
+
muteAudio: () => muteAudio(true),
|
|
294
|
+
unMuteAudio: () => muteAudio(false),
|
|
295
|
+
startRecording,
|
|
296
|
+
pauseRecording,
|
|
297
|
+
resumeRecording,
|
|
298
|
+
stopRecording,
|
|
299
|
+
releaseStream,
|
|
300
|
+
mediaBlobUrl,
|
|
301
|
+
status,
|
|
302
|
+
isAudioMuted,
|
|
303
|
+
previewStream,
|
|
304
|
+
previewAudioStream,
|
|
305
|
+
clearBlobUrl: () => {
|
|
306
|
+
if (mediaBlobUrl) {
|
|
307
|
+
URL.revokeObjectURL(mediaBlobUrl);
|
|
308
|
+
}
|
|
309
|
+
setMediaBlobUrl(undefined);
|
|
310
|
+
setStatus('idle');
|
|
311
|
+
}
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
export const ReactMediaRecorder = props => props.render(useReactMediaRecorder(props));
|
|
315
|
+
//# sourceMappingURL=useReactRecorder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["register","MediaRecorder","ExtendableMediaRecorder","useCallback","useEffect","useRef","useState","useMemo","connect","RecorderErrors","stopMediaStream","stream","getTracks","forEach","track","stop","useReactMediaRecorder","_ref","_ref$audio","audio","_ref$video","video","_ref$selfBrowserSurfa","selfBrowserSurface","undefined","_ref$preferCurrentTab","preferCurrentTab","_ref$onStop","onStop","_ref$onStart","onStart","blobPropertyBag","_ref$screen","screen","_ref$systemAudio","systemAudio","_ref$mediaRecorderOpt","mediaRecorderOptions","_ref$customMediaStrea","customMediaStream","_ref$stopStreamsOnSto","stopStreamsOnStop","_ref$askPermissionOnM","askPermissionOnMount","mediaRecorder","mediaChunks","mediaStream","mediaStreamRequestId","shouldReleaseMediaStream","_useState","status","setStatus","_useState2","isAudioMuted","setIsAudioMuted","_useState3","mediaBlobUrl","setMediaBlobUrl","_useState4","error","setError","_useState5","init","setInit","setup","e","getMediaStream","current","requestId","requiredMedia","window","navigator","mediaDevices","getDisplayMedia","suppressLocalAudioPlayback","getVideoTracks","addEventListener","stopRecording","audioStream","getUserMedia","getAudioTracks","audioTrack","addTrack","name","Error","checkConstraints","mediaType","supportedMediaConstraints","getSupportedConstraints","unSupportedConstraints","Object","keys","filter","constraint","length","console","join","mimeType","isTypeSupported","startRecording","isStreamEnded","some","readyState","active","ondataavailable","onRecordingActive","onstop","onRecordingStop","onstart","onRecordingStart","onerror","start","_ref2","data","push","chunks","firstChunk","blobProperty","type","blob","Blob","url","URL","createObjectURL","muteAudio","mute","enabled","pauseRecording","state","pause","resumeRecording","resume","releaseStream","previewStream","MediaStream","previewAudioStream","unMuteAudio","clearBlobUrl","revokeObjectURL","ReactMediaRecorder","props","render"],"sources":["../../../../src/hooks/useMediaRecorder/useReactRecorder.tsx"],"sourcesContent":["/* eslint-disable no-undef */\nimport {\n register,\n MediaRecorder as ExtendableMediaRecorder,\n IMediaRecorder,\n} from 'extendable-media-recorder';\nimport {\n ReactElement,\n useCallback,\n useEffect,\n useRef,\n useState,\n useMemo,\n} from 'react';\nimport { connect } from 'extendable-media-recorder-wav-encoder';\n\nexport type ReactMediaRecorderRenderProps = {\n error: string;\n muteAudio: () => void;\n unMuteAudio: () => void;\n startRecording: () => void;\n pauseRecording: () => void;\n resumeRecording: () => void;\n stopRecording: () => void;\n mediaBlobUrl: undefined | string;\n status: StatusMessages;\n isAudioMuted: boolean;\n previewStream: MediaStream | null;\n previewAudioStream: MediaStream | null;\n clearBlobUrl: () => void;\n releaseStream: () => void;\n};\n\nexport type ReactMediaRecorderHookProps = {\n audio?: boolean | MediaTrackConstraints;\n video?: boolean | MediaTrackConstraints;\n screen?: boolean;\n /**\n * When true, captures system audio from the tab/screen being shared\n * instead of microphone audio. Only works when screen=true.\n */\n systemAudio?: boolean | MediaTrackConstraints;\n selfBrowserSurface?: SelfBrowserSurface;\n preferCurrentTab?: PreferCurrentTab;\n onStop?: (blobUrl: string, blob: Blob) => void;\n onStart?: () => void;\n blobPropertyBag?: BlobPropertyBag;\n mediaRecorderOptions?: MediaRecorderOptions | undefined;\n customMediaStream?: MediaStream | null;\n stopStreamsOnStop?: boolean;\n askPermissionOnMount?: boolean;\n};\nexport type ReactMediaRecorderProps = ReactMediaRecorderHookProps & {\n render: (props: ReactMediaRecorderRenderProps) => ReactElement;\n};\n\n/**\n * Experimental (optional).\n * An enumerated value specifying whether the browser should allow the user to select the current tab for capture.\n * This helps to avoid the \"infinite hall of mirrors\" effect experienced when a video conferencing app inadvertently shares its own display.\n * Possible values are include, which hints that the browser should include the current tab in the choices offered for capture,\n * and exclude, which hints that it should be excluded.\n * A default value is not mandated by the spec.\n * See specs at: https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia#selfbrowsersurface\n */\nexport type SelfBrowserSurface = undefined | 'include' | 'exclude';\n\n/**\n * Experimental (optional).\n * A boolean; a value of true instructs the browser to offer the current tab as the most prominent capture source, i.e. as a separate \"This Tab\" option in the \"Choose what to share\" options presented to the user.\n * This is useful as many app types generally just want to share the current tab.\n * See specs at: https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia#prefercurrenttab\n */\nexport type PreferCurrentTab = true | false;\n\nexport type StatusMessages =\n | 'media_aborted'\n | 'permission_denied'\n | 'no_specified_media_found'\n | 'media_in_use'\n | 'invalid_media_constraints'\n | 'no_constraints'\n | 'recorder_error'\n | 'idle'\n | 'acquiring_media'\n | 'delayed_start'\n | 'recording'\n | 'stopping'\n | 'stopped'\n | 'paused';\n\nexport enum RecorderErrors {\n AbortError = 'media_aborted',\n NotAllowedError = 'permission_denied',\n NotFoundError = 'no_specified_media_found',\n NotReadableError = 'media_in_use',\n OverconstrainedError = 'invalid_media_constraints',\n TypeError = 'no_constraints',\n NONE = '',\n NO_RECORDER = 'recorder_error',\n}\n\nconst stopMediaStream = (stream: MediaStream | null) => {\n if (!stream) {\n return;\n }\n\n stream.getTracks().forEach((track) => track.stop());\n};\n\nexport function useReactMediaRecorder({\n audio = true,\n video = false,\n selfBrowserSurface = undefined,\n preferCurrentTab = false,\n onStop = () => null,\n onStart = () => null,\n blobPropertyBag,\n screen = false,\n systemAudio = false,\n mediaRecorderOptions = undefined,\n customMediaStream = null,\n stopStreamsOnStop = true,\n askPermissionOnMount = false,\n}: ReactMediaRecorderHookProps): ReactMediaRecorderRenderProps {\n const mediaRecorder = useRef<IMediaRecorder | null>(null);\n const mediaChunks = useRef<Blob[]>([]);\n const mediaStream = useRef<MediaStream | null>(null);\n const mediaStreamRequestId = useRef(0);\n const shouldReleaseMediaStream = useRef(false);\n const [status, setStatus] = useState<StatusMessages>('idle');\n const [isAudioMuted, setIsAudioMuted] = useState<boolean>(false);\n const [mediaBlobUrl, setMediaBlobUrl] = useState<string | undefined>(\n undefined,\n );\n const [error, setError] = useState<keyof typeof RecorderErrors>('NONE');\n const [init, setInit] = useState(false);\n\n useEffect(() => {\n if (init) {\n return;\n }\n\n const setup = async () => {\n try {\n await register(await connect());\n } catch (e) {\n //\n }\n setInit(true); // now runs only AFTER the encoder is registered\n };\n\n setup();\n }, []);\n\n const getMediaStream = useCallback(async () => {\n shouldReleaseMediaStream.current = false;\n const requestId = ++mediaStreamRequestId.current;\n setStatus('acquiring_media');\n const requiredMedia: MediaStreamConstraints = {\n audio: typeof audio === 'boolean' ? !!audio : audio,\n video: typeof video === 'boolean' ? !!video : video,\n };\n try {\n let stream: MediaStream;\n\n if (customMediaStream) {\n stream = customMediaStream;\n } else if (screen) {\n stream = (await window.navigator.mediaDevices.getDisplayMedia({\n video: video || true,\n audio: systemAudio,\n // @ts-expect-error\n selfBrowserSurface,\n preferCurrentTab,\n suppressLocalAudioPlayback: false,\n })) as MediaStream;\n stream.getVideoTracks()[0].addEventListener('ended', () => {\n stopRecording();\n });\n // Add microphone audio if requested (and not using system audio only)\n if (audio && !systemAudio) {\n const audioStream = await window.navigator.mediaDevices.getUserMedia({\n audio,\n });\n\n audioStream\n .getAudioTracks()\n .forEach((audioTrack) => stream.addTrack(audioTrack));\n }\n } else {\n stream = await window.navigator.mediaDevices.getUserMedia(\n requiredMedia,\n );\n }\n\n if (\n shouldReleaseMediaStream.current ||\n requestId !== mediaStreamRequestId.current\n ) {\n stopMediaStream(stream);\n return;\n }\n\n mediaStream.current = stream;\n setStatus('idle');\n } catch (error: any) {\n setError(error.name);\n setStatus('idle');\n }\n }, [audio, video, screen, systemAudio]);\n\n useEffect(() => {\n if (!window.MediaRecorder) {\n throw new Error('Unsupported Browser');\n }\n\n if (screen) {\n if (!window.navigator.mediaDevices.getDisplayMedia) {\n throw new Error(\"This browser doesn't support screen capturing\");\n }\n }\n\n const checkConstraints = (mediaType: MediaTrackConstraints) => {\n const supportedMediaConstraints =\n navigator.mediaDevices.getSupportedConstraints();\n const unSupportedConstraints = Object.keys(mediaType).filter(\n (constraint) =>\n !(supportedMediaConstraints as { [key: string]: any })[constraint],\n );\n\n if (unSupportedConstraints.length > 0) {\n console.error(\n `The constraints ${unSupportedConstraints.join(\n ',',\n )} doesn't support on this browser. Please check your ReactMediaRecorder component.`,\n );\n }\n };\n\n if (typeof audio === 'object') {\n checkConstraints(audio);\n }\n if (typeof video === 'object') {\n checkConstraints(video);\n }\n\n if (init && mediaRecorderOptions && mediaRecorderOptions.mimeType) {\n if (\n !ExtendableMediaRecorder.isTypeSupported(mediaRecorderOptions.mimeType)\n ) {\n console.error(\n `The specified MIME type you supplied for MediaRecorder doesn't support this browser`,\n );\n }\n }\n\n if (!mediaStream.current && askPermissionOnMount) {\n getMediaStream();\n }\n\n return () => {\n shouldReleaseMediaStream.current = true;\n mediaStreamRequestId.current += 1;\n stopMediaStream(mediaStream.current);\n mediaStream.current = null;\n };\n }, [\n audio,\n screen,\n video,\n getMediaStream,\n mediaRecorderOptions,\n askPermissionOnMount,\n init,\n ]);\n\n // Media Recorder Handlers\n\n const startRecording = async () => {\n setError('NONE');\n if (!mediaStream.current) {\n await getMediaStream();\n }\n if (mediaStream.current) {\n const isStreamEnded = mediaStream.current\n .getTracks()\n .some((track) => track.readyState === 'ended');\n if (isStreamEnded) {\n await getMediaStream();\n }\n\n // User blocked the permissions (getMediaStream errored out)\n if (!mediaStream.current.active) {\n return;\n }\n mediaRecorder.current = new ExtendableMediaRecorder(\n mediaStream.current,\n mediaRecorderOptions || undefined,\n );\n mediaRecorder.current.ondataavailable = onRecordingActive;\n mediaRecorder.current.onstop = onRecordingStop;\n mediaRecorder.current.onstart = onRecordingStart;\n mediaRecorder.current.onerror = () => {\n setError('NO_RECORDER');\n setStatus('idle');\n };\n mediaRecorder.current.start(1000);\n setStatus('recording');\n }\n };\n\n const onRecordingActive = ({ data }: BlobEvent) => {\n mediaChunks.current.push(data);\n };\n\n const onRecordingStart = () => {\n onStart();\n };\n\n const onRecordingStop = () => {\n const chunks = mediaChunks.current;\n if (chunks.length === 0) {\n setStatus('stopped');\n return;\n }\n const [firstChunk] = chunks;\n const blobProperty: BlobPropertyBag = {\n type: firstChunk.type,\n ...(blobPropertyBag ||\n (video ? { type: 'video/mp4' } : { type: 'audio/wav' })),\n };\n const blob = new Blob(chunks, blobProperty);\n const url = URL.createObjectURL(blob);\n setStatus('stopped');\n setMediaBlobUrl(url);\n onStop(url, blob);\n // Clear chunks after processing\n mediaChunks.current = [];\n };\n\n const muteAudio = (mute: boolean) => {\n setIsAudioMuted(mute);\n if (mediaStream.current) {\n mediaStream.current\n .getAudioTracks()\n .forEach((audioTrack) => (audioTrack.enabled = !mute));\n }\n };\n\n const pauseRecording = () => {\n if (mediaRecorder.current && mediaRecorder.current.state === 'recording') {\n setStatus('paused');\n mediaRecorder.current.pause();\n }\n };\n const resumeRecording = () => {\n if (mediaRecorder.current && mediaRecorder.current.state === 'paused') {\n setStatus('recording');\n mediaRecorder.current.resume();\n }\n };\n\n const stopRecording = () => {\n if (mediaRecorder.current) {\n if (mediaRecorder.current.state !== 'inactive') {\n setStatus('stopping');\n mediaRecorder.current.stop();\n if (stopStreamsOnStop) {\n stopMediaStream(mediaStream.current);\n }\n // Note: chunks are cleared in onRecordingStop after blob is created\n }\n }\n };\n\n // use this to release the stream when the component is unmounted\n const releaseStream = () => {\n shouldReleaseMediaStream.current = true;\n mediaStreamRequestId.current += 1;\n\n if (mediaRecorder.current && mediaRecorder.current.state !== 'inactive') {\n mediaRecorder.current.stop();\n }\n\n stopMediaStream(mediaStream.current);\n mediaStream.current = null;\n setStatus('idle');\n setIsAudioMuted(false);\n };\n\n const previewStream = useMemo(() => {\n return mediaStream.current\n ? new MediaStream(mediaStream.current.getVideoTracks())\n : null;\n }, [status]);\n\n const previewAudioStream = useMemo(() => {\n return mediaStream.current\n ? new MediaStream(mediaStream.current.getAudioTracks())\n : null;\n }, [status]);\n\n return {\n error: RecorderErrors[error],\n muteAudio: () => muteAudio(true),\n unMuteAudio: () => muteAudio(false),\n startRecording,\n pauseRecording,\n resumeRecording,\n stopRecording,\n releaseStream,\n mediaBlobUrl,\n status,\n isAudioMuted,\n previewStream,\n previewAudioStream,\n clearBlobUrl: () => {\n if (mediaBlobUrl) {\n URL.revokeObjectURL(mediaBlobUrl);\n }\n setMediaBlobUrl(undefined);\n setStatus('idle');\n },\n };\n}\n\nexport const ReactMediaRecorder = (props: ReactMediaRecorderProps) =>\n props.render(useReactMediaRecorder(props));\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["../../../../src/hooks/useMicrophone/index.ts"],"sourcesContent":["export * from './useMicrophone';\n"],"mappings":"AAAA,cAAc,iBAAiB","ignoreList":[]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { useAtom } from 'jotai';
|
|
2
|
+
import * as state from '../../conversation/state';
|
|
3
|
+
import { useDevices } from '../useDevices';
|
|
4
|
+
import { useDeviceSwitcher } from '../useDeviceSwitcher';
|
|
5
|
+
export function useMicrophone() {
|
|
6
|
+
const devices = useDevices({
|
|
7
|
+
type: 'audioinput'
|
|
8
|
+
});
|
|
9
|
+
const _useAtom = useAtom(state.microphone),
|
|
10
|
+
microphone = _useAtom[0],
|
|
11
|
+
setMicrophone = _useAtom[1];
|
|
12
|
+
useDeviceSwitcher({
|
|
13
|
+
device: microphone,
|
|
14
|
+
devices,
|
|
15
|
+
onChange: setMicrophone
|
|
16
|
+
});
|
|
17
|
+
return {
|
|
18
|
+
devices,
|
|
19
|
+
enabled: microphone.enabled,
|
|
20
|
+
deviceId: microphone.deviceId,
|
|
21
|
+
setEnabled(enabled) {
|
|
22
|
+
setMicrophone({
|
|
23
|
+
...microphone,
|
|
24
|
+
enabled
|
|
25
|
+
});
|
|
26
|
+
},
|
|
27
|
+
setDeviceId(deviceId) {
|
|
28
|
+
setMicrophone({
|
|
29
|
+
...microphone,
|
|
30
|
+
deviceId
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=useMicrophone.js.map
|