{"version":3,"sources":["../node_modules/object-assign/index.js","../node_modules/react/cjs/react.production.min.js","../node_modules/react/index.js","../node_modules/scheduler/cjs/scheduler.production.min.js","../node_modules/scheduler/index.js","../node_modules/react-dom/cjs/react-dom.production.min.js","../node_modules/react-dom/index.js","../node_modules/regenerator-runtime/runtime.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/index.js","../node_modules/invariant/browser.js","../node_modules/gud/index.js","../node_modules/warning/warning.js","../node_modules/create-react-context/lib/implementation.js","../node_modules/create-react-context/lib/index.js","../node_modules/react-lifecycles-compat/react-lifecycles-compat.es.js","../node_modules/@reach/router/es/lib/utils.js","../node_modules/@reach/router/es/lib/history.js","../node_modules/@reach/router/es/index.js","../node_modules/react-redux/es/components/Context.js","../node_modules/react-redux/es/utils/batch.js","../node_modules/react-redux/es/utils/Subscription.js","../node_modules/react-redux/es/utils/useIsomorphicLayoutEffect.js","../node_modules/react-redux/es/components/Provider.js","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../node_modules/react-is/cjs/react-is.production.min.js","../node_modules/react-is/index.js","../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","../node_modules/react-redux/node_modules/react-is/cjs/react-is.production.min.js","../node_modules/react-redux/node_modules/react-is/index.js","../node_modules/react-redux/es/components/connectAdvanced.js","../node_modules/react-redux/es/utils/shallowEqual.js","../node_modules/react-redux/es/utils/bindActionCreators.js","../node_modules/react-redux/es/utils/isPlainObject.js","../node_modules/react-redux/es/utils/warning.js","../node_modules/react-redux/es/utils/verifyPlainObject.js","../node_modules/react-redux/es/connect/wrapMapToProps.js","../node_modules/react-redux/es/connect/mapDispatchToProps.js","../node_modules/react-redux/es/connect/mapStateToProps.js","../node_modules/react-redux/es/connect/mergeProps.js","../node_modules/react-redux/es/connect/verifySubselectors.js","../node_modules/react-redux/es/connect/selectorFactory.js","../node_modules/react-redux/es/connect/connect.js","../node_modules/react-redux/es/hooks/useReduxContext.js","../node_modules/react-redux/es/hooks/useStore.js","../node_modules/react-redux/es/hooks/useDispatch.js","../node_modules/react-redux/es/hooks/useSelector.js","../node_modules/react-redux/es/exports.js","../node_modules/react-redux/es/utils/reactBatchedUpdates.js","../node_modules/react-redux/es/index.js","../../src/internal/build-action-creators.ts","../../src/internal/get-next-id.ts","../src/build-combined-reducers.ts","../../../src/internal/create-meta-reducer/get-state-slice.ts","../../src/internal/are-slices-the-same.ts","../../src/internal/build-wrapped-selector.ts","../../src/internal/build-selector-hook.ts","../src/build-combined-selectors.ts","../../src/internal/create-shared-state.ts","../src/build-shared-state.ts","../node_modules/@babel/runtime/helpers/esm/typeof.js","../node_modules/@babel/runtime/helpers/esm/toPrimitive.js","../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../node_modules/@babel/runtime/helpers/esm/objectSpread2.js","../node_modules/redux/es/redux.js","../../src/internal/get-slice-key.ts","../../../src/internal/create-meta-reducer/initialize-state.ts","../../../src/internal/create-meta-reducer/merge-next-slice.ts","../../../src/internal/create-meta-reducer/create-meta-reducer.ts","../../../src/internal/store/build-accessors.ts","../../../src/internal/store/add-shared-state.ts","../../../src/internal/store/build-combined-accessor-dependencies.ts","../../../src/internal/store/add-combined-selectors.ts","../../../src/internal/store/add-combined-reducers.ts","../../src/internal/get-store-enhancers.ts","../src/create-store.ts","../src/use-dispatch.ts","../src/with-shared-states.ts","../src/index.ts","app/store.ts","utils/dateTime.ts","types/alerts.ts","types/auth.ts","types/generic.ts","types/hardware.ts","types/imageCapture.ts","utils/windowGlobals.ts","utils/browser.ts","utils/os.ts","types/layout.ts","types/localTracks.ts","types/messaging.ts","types/room.ts","types/user.ts","types/webRTCStats.ts","types/index.ts","app/routes.ts","utils/general.ts","state/alerts.ts","state/auth.ts","types/backgrounds.ts","state/backgroundProcessors.ts","state/branding.ts","utils/userIdHash.ts","state/chatUsers.ts","state/messages.ts","state/ui.ts","state/combined/chat.ts","../../lib/util/dynamicimport.js","../../lib/vendor/loglevel.js","../node_modules/twilio-video/package.json","../../lib/util/constants.js","../../lib/util/log.js","../lib/noisecancellationadapter.ts","../../../lib/media/track/noisecancellationimpl.ts","../../../lib/webrtc/util/index.js","../../lib/util/sid.js","../../lib/util/twiliowarning.js","../../lib/util/index.js","../../../lib/webrtc/util/sdp.js","../../lib/webrtc/getstats.js","../../lib/webrtc/getusermedia.js","../../lib/webrtc/mediastream.js","../../lib/webrtc/mediastreamtrack.js","../../lib/webrtc/rtcicecandidate.js","../../../lib/webrtc/rtcsessiondescription/chrome.js","../node_modules/events/events.js","../lib/eventtarget.js","../../../lib/webrtc/util/latch.js","../../lib/webrtc/rtcrtpsender.js","../../../lib/webrtc/rtcpeerconnection/chrome.js","../../../lib/webrtc/rtcsessiondescription/firefox.js","../../../lib/webrtc/rtcpeerconnection/firefox.js","../../../lib/webrtc/rtcpeerconnection/safari.js","../../../lib/webrtc/rtcpeerconnection/index.js","../../../lib/webrtc/rtcsessiondescription/index.js","../../lib/webrtc/index.js","../../lib/vendor/inherits.js","../../lib/util/browserdetection.js","../../lib/webaudio/detectsilence.js","../../lib/webaudio/audiocontext.js","../../lib/util/detectsilentaudio.js","../../lib/util/localmediarestartdeferreds.js","../lib/eventemitter.js","../../../lib/media/track/index.js","../../../lib/media/track/mediatrack.js","../../../lib/media/track/audiotrack.js","../../lib/util/detectsilentvideo.js","../../lib/util/documentvisibilitymonitor.js","../../lib/webaudio/workaround180748.js","../lib/queueingeventemitter.js","../lib/transceiver.js","../../../lib/media/track/transceiver.js","../../../lib/media/track/sender.js","../../../lib/media/track/localmediatrack.js","../../../lib/media/track/localaudiotrack.js","../../../../lib/media/track/es5/localaudiotrack.js","../../../lib/media/track/videoprocessoreventobserver.js","../node_modules/process/browser.js","../../../lib/media/track/videotrack.js","../../../lib/media/track/localvideotrack.js","../../../../lib/media/track/es5/localvideotrack.js","../../lib/data/transceiver.js","../../lib/data/sender.js","../../../lib/media/track/localdatatrack.js","../../../../lib/media/track/es5/localdatatrack.js","../../../../lib/media/track/es5/index.js","../lib/createlocaltracks.ts","../../lib/preflight/timer.ts","../../lib/preflight/mos.ts","../../lib/preflight/getCombinedConnectionStats.ts","../lib/statemachine.js","../../lib/util/networkmonitor.js","../../lib/util/timeout.js","../node_modules/twilio-video/src/ws.js","../lib/twilioconnection.js","../../lib/util/twilioerror.js","../../lib/util/twilio-video-errors.js","../../lib/preflight/getturncredentials.ts","../../lib/preflight/makestat.ts","../../lib/preflight/syntheticaudio.ts","../../lib/preflight/syntheticvideo.ts","../../lib/util/movingaveragedelta.js","../../lib/util/eventobserver.js","../../../lib/util/insightspublisher/index.js","../../lib/preflight/preflighttest.ts","../../lib/util/cancelablepromise.js","../lib/cancelableroompromise.js","../lib/encodingparameters.js","../../lib/util/validate.js","../../../lib/media/track/trackpublication.js","../../../lib/media/track/localtrackpublication.js","../../../lib/media/track/localaudiotrackpublication.js","../../../lib/media/track/localdatatrackpublication.js","../../../lib/media/track/localvideotrackpublication.js","../../../lib/media/track/remotemediatrack.js","../../../lib/media/track/remoteaudiotrack.js","../../../lib/media/track/remotetrackpublication.js","../../../lib/media/track/remoteaudiotrackpublication.js","../../../lib/media/track/remotedatatrack.js","../../../lib/media/track/remotedatatrackpublication.js","../../lib/util/nullobserver.js","../../../lib/media/track/remotevideotrack.js","../../../lib/media/track/remotevideotrackpublication.js","../lib/participant.js","../lib/localparticipant.js","../../../lib/util/insightspublisher/null.js","../lib/networkqualityconfiguration.js","../lib/remoteparticipant.js","../../lib/stats/trackstats.js","../../lib/stats/localtrackstats.js","../../lib/stats/localaudiotrackstats.js","../../lib/stats/localvideotrackstats.js","../../lib/stats/remotetrackstats.js","../../lib/stats/remoteaudiotrackstats.js","../../lib/stats/remotevideotrackstats.js","../../lib/stats/statsreport.js","../lib/room.js","../../lib/util/backoff.js","../../../lib/util/sdp/simulcast.js","../../../lib/util/sdp/index.js","../../lib/util/filter.js","../../../lib/signaling/v2/icebox.js","../../../lib/signaling/v2/iceconnectionmonitor.js","../../lib/data/transport.js","../../lib/data/receiver.js","../../../lib/media/track/receiver.js","../../../lib/util/sdp/trackmatcher.js","../../../lib/util/sdp/issue8329.js","../../../lib/signaling/v2/peerconnection.js","../../../lib/signaling/v2/peerconnectionmanager.js","../../../lib/signaling/v2/mediasignaling.js","../../../lib/signaling/v2/dominantspeakersignaling.js","../../lib/stats/icereport.js","../../lib/stats/icereportfactory.js","../../lib/stats/average.js","../../lib/stats/senderorreceiverreport.js","../../lib/stats/sum.js","../../lib/stats/receiverreport.js","../../lib/stats/senderreport.js","../../lib/stats/peerconnectionreport.js","../../lib/stats/senderorreceiverreportfactory.js","../../lib/stats/receiverreportfactory.js","../../lib/stats/senderreportfactory.js","../../lib/stats/peerconnectionreportfactory.js","../../../lib/signaling/v2/networkqualitymonitor.js","../../lib/util/asyncvar.js","../../../lib/signaling/v2/networkqualitysignaling.js","../../lib/signaling/recording.js","../../../lib/signaling/v2/recording.js","../../lib/signaling/room.js","../../lib/stats/networkqualitybandwidthstats.js","../../lib/stats/networkqualityfractionloststats.js","../../lib/stats/networkqualitylatencystats.js","../../lib/stats/networkqualitysendorrecvstats.js","../../lib/stats/networkqualitysendstats.js","../../lib/stats/networkqualityrecvstats.js","../../lib/stats/networkqualitymediastats.js","../../lib/stats/networkqualityaudiostats.js","../../lib/stats/networkqualityvideostats.js","../../lib/stats/networkqualitystats.js","../../lib/signaling/participant.js","../../lib/signaling/remoteparticipant.js","../../lib/signaling/track.js","../../lib/signaling/remotetrackpublication.js","../../../lib/signaling/v2/remotetrackpublication.js","../../../lib/signaling/v2/remoteparticipant.js","../../../lib/signaling/v2/trackprioritysignaling.js","../../../lib/signaling/v2/trackswitchoffsignaling.js","../../../lib/signaling/v2/renderhintssignaling.js","../../../lib/signaling/v2/publisherhintsignaling.js","../../../lib/signaling/v2/room.js","../../../lib/signaling/v2/twilioconnectiontransport.js","../../../lib/signaling/v2/cancelableroomsignalingpromise.js","../../lib/signaling/localparticipant.js","../../lib/signaling/localtrackpublication.js","../../../lib/signaling/v2/localtrackpublication.js","../../../lib/signaling/v2/localparticipant.js","../../lib/signaling/index.js","../../../lib/signaling/v2/index.js","../lib/connect.js","../lib/createlocaltrack.js","../../lib/util/support.js","../lib/index.ts","utils/backgroundEffects.ts","web-core/types/connectOptions.ts","web-core/types/session.ts","web-core/types/stream.ts","web-core/types/index.ts","state/chat.ts","types/survey.ts","state/feedbackSurvey.ts","utils/text.ts","state/room.ts","utils/cookies.ts","utils/logging.ts","utils/request.ts","utils/imageCapture.ts","state/imageCapture.ts","state/moderation.ts","utils/userPreferences.ts","state/user.ts","state/combined/configuration.ts","state/combined/connection.ts","state/errorPage.ts","state/hardwareTest.ts","state/localTracks.ts","utils/i18n/locales/strings.json","utils/i18n/i18nUtils.ts","state/settings.ts","state/speakers.ts","state/combined/disconnect.ts","state/combined/hardware.ts","state/combined/imageCapture.ts","state/combined/locale.ts","state/combined/screenSharing.ts","state/combined/participant.ts","state/combined/survey.ts","state/combined/index.ts","state/pictureInPicture.ts","state/index.ts","types/branding.ts","utils/color.ts","utils/branding.ts","components/Branding/BrandingStyleSheet.tsx","hooks/auditing/useAuditFeatureUse.ts","hooks/auditing/useClientLogging.ts","hooks/auditing/index.ts","utils/className.ts","components/Utilities/BackgroundStyleContext.tsx","components/Cards/Card.tsx","components/Cards/CardContainer.tsx","components/Cards/SimpleCard.tsx","components/Cards/ErrorCard.tsx","components/Utilities/KeyboardShortcutText.tsx","components/Utilities/KeyboardShortcut.tsx","types/locale.ts","components/Utilities/Tooltip.tsx","components/Utilities/BaseButton.tsx","utils/copyright.ts","components/Alerts/FocusTrap.tsx","components/Utilities/ActionButton.tsx","components/Utilities/GenericPopup.tsx","components/Copyright/CopyrightLinkButton.tsx","utils/i18n/i18n.ts","utils/i18n/index.ts","utils/strings.ts","components/Alerts/AccessibilityAlert.tsx","components/Loading/SpinnerIcon.tsx","components/LanguageSelector/LanguageOption.tsx","components/LanguageSelector/LanguageSelector.tsx","hooks/useStrings.ts","hooks/useGetFormattedHotkeyString.ts","icons/globe.tsx","icons/chevron.tsx","components/Header/Buttons/ControlButton.tsx","components/Header/Buttons/LanguageSelectorButton.tsx","icons/epicLogo.tsx","components/Branding/BrandedLogo.tsx","components/Utilities/ClickOutsideSection.tsx","components/Utilities/Collapse.tsx","utils/messaging.ts","utils/sendMessage.ts","hooks/messaging/moderation/useBroadcastMediaAccessRequest.ts","hooks/messaging/moderation/useSendModeratorAction.ts","hooks/messaging/moderation/useSendVisitAccessMessage.ts","../node_modules/@daily-co/daily-js/dist/daily-esm.js","web-core/hooks/useIsVideoSupported.ts","web-core/hooks/useIsScreenShareSupported.ts","hooks/messaging/useBroadcastParticipantInfo.ts","components/ImageCapture/hooks/useImageCapturedHandler.ts","hooks/useHandleAudioContext.ts","components/VideoCall/MobileBackgroundingHandler.tsx","icons/camera.tsx","icons/disabledCamera.tsx","icons/disabledMic.tsx","icons/disabledSpeaker.tsx","icons/enterPiP.tsx","icons/exitPiP.tsx","icons/lockedCamera.tsx","icons/lockedMicrophone.tsx","icons/lockedScreenShare.tsx","icons/mic.tsx","icons/screenShareStart.tsx","icons/screenShareStop.tsx","icons/speaker.tsx","utils/device.ts","web-core/functions/detectIPadCameraBug.ts","web-core/interfaces/session.ts","web-core/interfaces/localUser.ts","web-core/interfaces/remoteUser.ts","web-core/interfaces/user.ts","web-core/interfaces/localStream.ts","web-core/interfaces/remoteStream.ts","web-core/interfaces/stream.ts","web-core/interfaces/vendorError.ts","web-core/interfaces/index.ts","web-core/functions/errors.ts","web-core/functions/determineCallLayout.ts","web-core/functions/utils.ts","web-core/functions/index.ts","web-core/events/helperEvents.ts","web-core/events/implementations/evcEmitter.ts","web-core/events/interfaces/evcEmitter.ts","web-core/events/sessionEvents.ts","web-core/events/streamEvents.ts","web-core/events/userEvents.ts","web-core/events/index.ts","web-core/functions/session.ts","web-core/vendor/daily/functions/dailyErrorUtils.ts","web-core/vendor/daily/functions/utils.ts","web-core/helpers/virtualBackgroundLoader.ts","web-core/vendor/daily/helpers/dailyBackgroundManager.ts","web-core/vendor/daily/implementations/dailyEventHandlers.ts","web-core/vendor/daily/implementations/dailyRemoteStream.ts","web-core/vendor/daily/implementations/dailyRemoteUser.ts","web-core/vendor/daily/implementations/dailySession.ts","web-core/vendor/daily/implementations/dailyLocalStream.ts","web-core/vendor/daily/implementations/dailyLocalUser.ts","web-core/vendor/daily/implementations/index.ts","web-core/vendor/daily/functions/initializeDailyAsVendor.ts","web-core/vendor/twilio/twilioValues.ts","web-core/vendor/twilio/functions/processTwilioError.ts","../../lib/processors/Processor.ts","../../lib/utils/Benchmark.ts","../../lib/utils/version.ts","../lib/types.ts","../../../../lib/processors/webgl2/helpers/segmentationHelper.ts","../../../../lib/processors/webgl2/helpers/webglHelper.ts","../../../../lib/processors/webgl2/pipelines/backgroundBlurStage.ts","../../../../lib/processors/webgl2/pipelines/backgroundImageStage.ts","../../../../lib/processors/webgl2/pipelines/jointBilateralFilterStage.ts","../../../../lib/processors/webgl2/pipelines/loadSegmentationStage.ts","../../../../lib/processors/webgl2/pipelines/resizingStage.ts","../../../../lib/processors/webgl2/pipelines/webgl2Pipeline.ts","../../../lib/processors/webgl2/index.ts","../lib/constants.ts","../../../lib/processors/background/BackgroundProcessor.ts","../../../lib/processors/background/GaussianBlurBackgroundProcessor.ts","../../../lib/processors/background/VirtualBackgroundProcessor.ts","../../lib/utils/support.ts","web-core/vendor/twilio/twilioSettings.ts","web-core/vendor/twilio/implementations/twilioLocalStream.ts","utils/screenSharing.ts","web-core/vendor/twilio/implementations/twilioRemoteStream.ts","web-core/vendor/twilio/implementations/twilioRemoteUser.ts","web-core/vendor/twilio/implementations/twilioSession.ts","web-core/vendor/twilio/helpers/twilioBackgroundManager.ts","web-core/vendor/twilio/implementations/twilioLocalUser.ts","web-core/vendor/twilio/implementations/index.ts","web-core/vendor/twilio/functions/initializeTwilioAsVendor.ts","web-core/functions/initializeVendor.ts","web-core/hooks/useStoreError.ts","web-core/hooks/useStream.ts","web-core/components/DevicePermissionWarningOverlay.tsx","web-core/components/VideoSessionProvider.tsx","components/VideoCall/hooks/useDeviceList.ts","components/VideoCall/hooks/useIsDocumentVisible.ts","hooks/localTracks/useAudioTrackActions.ts","hooks/localTracks/useLocalAudioRecovery.ts","utils/timer.ts","utils/pictureInPicture.ts","hooks/localTracks/useScreenShareTrackActions.ts","hooks/localTracks/useVideoTrackActions.ts","hooks/localTracks/workarounds/useIOSMutedWorkaround.ts","hooks/localTracks/workarounds/useLocalAudioRestartInterval.ts","hooks/localTracks/workarounds/useRestartContextWhenTrackStarts.ts","hooks/localTracks/index.ts","utils/audio.ts","components/VideoCall/hooks/useSingletonAudioContext.ts","components/VideoCall/DeviceContext.tsx","components/WebSocket/helpers/webSocketHelpers.ts","components/WebSocket/WebSocketConnection.tsx","utils/frameMessager.ts","utils/jwt.ts","hooks/useDisconnect.ts","hooks/messaging/moderation/useJoinVisitHandler.ts","components/VideoCall/hooks/useModeratorAlert.ts","web-core/hooks/useIsStreamEnabled.ts","hooks/useLocalAudioToggle.ts","hooks/useDevices.ts","hooks/useLocalVideoToggle.ts","components/ScreenShareContext.tsx","hooks/useScreenShareToggle.ts","hooks/messaging/moderation/useModeratedMessageHandler.ts","hooks/messaging/useReceivedDataTrackMessage.ts","hooks/messaging/useRequestParticipantInfo.ts","hooks/messaging/useSynchronizeNamelessParticipantData.ts","hooks/messaging/index.ts","components/VideoCall/hooks/useNamelessParticipantData.ts","web-core/helpers/bucketWaitingParticipants.ts","web-core/hooks/useRemoteUsers.ts","web-core/vendor/twilio/hooks/usePeerConnectionStats.ts","web-core/hooks/useRequestPeerInfoInterval.ts","components/VideoCall/DataTracks/DataTrackListener.tsx","components/VideoCall/DataTracks/DataTracksListener.tsx","web-core/components/RemoteUserSignalHandler.tsx","web-core/components/PeerSignaler.tsx","web-core/components/ParticipantDataProvider.tsx","components/VideoCall/hooks/useDominantSpeaker.ts","components/VideoCall/hooks/usePinnedParticipant.ts","hooks/useConnectionStatus.ts","components/VideoCall/hooks/useScreenShareParticipant.ts","web-core/hooks/useMainParticipant.ts","web-core/components/ParticipantStatusProvider.tsx","hooks/trackUtilities/useVideoStreamDimensions.ts","utils/video.ts","web-core/hooks/useMediaTrack.ts","web-core/components/VideoStream.tsx","web-core/components/index.ts","components/Loading/Spinner.tsx","hooks/backgroundEffects/useBackgroundToggle.ts","hooks/backgroundEffects/useLoadBackgroundProcessors.ts","hooks/backgroundEffects/index.ts","components/BackgroundSelector/BackgroundGalleryToggleRow.tsx","utils/userGuardOptions.ts","components/Utilities/SelectionChoice.tsx","components/HardwareTest/SkipHardwareTestSection.tsx","icons/warning.tsx","icons/error.tsx","icons/success.tsx","components/HardwareSetup/HardwareSetupStatusIcon.tsx","components/HardwareSetup/HardwareSetupRow.tsx","components/HardwareSetup/WarningBanner.tsx","components/HardwareSetup/AudioWarningBanner.tsx","components/HardwareSetup/hooks/useCameraDeviceMessage.ts","components/Utilities/MenuContext.tsx","components/HardwareSetup/Devices/NoDevicesMessage.tsx","components/HardwareSetup/Devices/SingleDeviceMessage.tsx","components/HardwareSetup/Devices/DeviceSelector.tsx","components/HardwareSetup/Devices/CameraSelector.tsx","components/HardwareSetup/Devices/DeviceSetupRow.tsx","components/HardwareSetup/Devices/CameraSetup.tsx","hooks/useVolumeLevels.ts","components/HardwareSetup/hooks/useAudioDeviceMessage.ts","components/HardwareSetup/Devices/MicSelector.tsx","components/HardwareSetup/Devices/VolumeIndicator.tsx","components/HardwareSetup/Devices/MicSetup.tsx","components/HardwareSetup/hooks/useSpeakerDeviceMessage.ts","components/HardwareSetup/Devices/SpeakerSelector.tsx","components/HardwareSetup/Devices/TestSpeakerButton.tsx","components/HardwareSetup/Devices/SpeakerSetup.tsx","components/HardwareSetup/hooks/useKeepInputInView.ts","components/Utilities/TextInput.tsx","components/HardwareSetup/DisplayNameInput.tsx","components/HardwareSetup/HardwareSetup.tsx","components/Utilities/Carousel/PageArrowButton.tsx","icons/circle.tsx","components/Utilities/Carousel/PageSelector.tsx","components/Utilities/Carousel/Carousel.tsx","components/BackgroundSelector/BackgroundGalleryNoneOption.tsx","components/BackgroundSelector/BackgroundGalleryOption.tsx","components/BackgroundSelector/BackgroundGallery.tsx","components/Participants/Video/DisabledCameraIndicator.tsx","components/BackgroundSelector/BackgroundPreview.tsx","components/BackgroundSelector/BackgroundSelector.tsx","components/Copyright/AboutEvc.tsx","components/Utilities/ToggleSwitchButton.tsx","components/Participants/Moderation/AdmitOptionsMenu.tsx","components/Header/Buttons/PictureInPictureButton.tsx","icons/bell.tsx","components/Participants/Moderation/ModerationButtons/UnlockDeviceRequestIndicator.tsx","components/Participants/Moderation/ModerationButtons/LockParticipantCameraButton.tsx","components/Participants/Moderation/ModerationButtons/LockParticipantMicrophoneButton.tsx","components/Participants/Moderation/ModerationButtons/LockParticipantScreenShareButton.tsx","components/Participants/Moderation/ModerationButtons/PinButton.tsx","components/Participants/Moderation/ModerationButtons/RemoveParticipantButton.tsx","components/Participants/Moderation/ParticipantControlMenu.tsx","components/Participants/hooks/useParticipantsOfType.ts","components/Participants/hooks/useParticipantName.ts","components/Participants/ParticipantList/ParticipantActionHeader.tsx","icons/pin.tsx","components/Participants/ParticipantList/ParticipantIcons.tsx","components/Participants/ParticipantList/ParticipantRow.tsx","components/Participants/ParticipantList/ParticipantSectionHeader.tsx","components/Participants/ParticipantList/ParticipantMenuSection.tsx","components/Participants/ParticipantList/AdmitParticipantsButton.tsx","components/Participants/ParticipantList/WaitingParticipantRow.tsx","components/Participants/ParticipantList/WaitingParticipantMenuSection.tsx","components/Participants/ParticipantList/ParticipantList.tsx","icons/informationCircle.tsx","components/Header/Buttons/AboutEvcButton.tsx","icons/leave.tsx","components/Header/Buttons/AdmitOptionsButton.tsx","icons/blurryBackground.tsx","components/Header/Buttons/ChangeBackgroundButton.tsx","icons/gear.tsx","components/Header/Buttons/ManageDevicesButton.tsx","icons/participants.tsx","components/Header/hooks/useShowParticipantNotification.ts","components/Header/Buttons/ParticipantsButton.tsx","icons/changeCamera.tsx","components/Header/hooks/useChangeCamera.ts","components/Header/Buttons/ChangeCameraButton.tsx","icons/collaborative.tsx","icons/grid.tsx","components/Header/Buttons/DisplayModeButton.tsx","icons/exitFullscreen.tsx","icons/fullscreen.tsx","components/Header/Buttons/FullscreenButton.tsx","components/Header/Buttons/ScreenShareButton.tsx","components/Header/hooks/useHeaderDisplayMode.ts","components/Header/hooks/useShowParticipantButtonInHeader.ts","components/Header/Menu/BaseMenu.tsx","components/Header/hooks/useMenuPages.tsx","icons/threeDots.tsx","components/Header/Buttons/MoreMenuButton.tsx","components/Header/hooks/useMaxMenuPageHeight.ts","components/Header/Menu/MenuPage.tsx","components/Header/Menu/DropDownMenus.tsx","components/Header/HeaderBar.tsx","components/Header/Menu/GenericMenuPage.tsx","components/Header/Menu/SinglePageMenu.tsx","icons/loadingEllipsis.tsx","components/Header/Toasts/LanguageLoadingToast.tsx","components/Header/Toasts/Buttons/ToastDismissButton.tsx","components/Header/Toasts/Buttons/ChatToastButtonGroup.tsx","components/Header/Toasts/Buttons/OpenMenuButton.tsx","components/Header/Toasts/Buttons/HandleAdmissionButtonGroup.tsx","components/Header/Toasts/Buttons/HandleMultipleRequestButtonGroup.tsx","components/Header/Toasts/Buttons/HandleSingleDeviceRequestButtonGroup.tsx","components/Header/Toasts/Buttons/RequestAccessButtonGroup.tsx","components/Header/Toasts/ToastButtons.tsx","components/Header/Toasts/Toast.tsx","components/Header/Toasts/Toasts.tsx","components/Header/SimpleHeader.tsx","components/Alerts/ChoiceAlertBase.tsx","components/Alerts/ConcurrentSessionChoiceAlert.tsx","components/Alerts/DiscardAlert.tsx","components/Alerts/DisconnectionChoiceAlert.tsx","components/Alerts/EndVisitAlert.tsx","components/Alerts/EndVisitConfirmationAlert.tsx","components/Alerts/GenericAlert.tsx","components/Alerts/AlertLocalTimer.tsx","components/Alerts/GenericCountdownAlert.tsx","components/ImageCapture/hooks/useSaveImageToChart.ts","components/Alerts/ImageCaptureRetryAlert.tsx","components/Alerts/InactivityChoiceAlert.tsx","components/Alerts/RemoveParticipantChoiceAlert.tsx","components/Alerts/Buttons/ScreenShareWarningAlertButtons.tsx","components/Alerts/ScreenShareWarningAlert.tsx","utils/skipHardwareTestGuardrails.ts","hooks/useJoinRoom.ts","components/Alerts/TimeoutChoiceAlert.tsx","components/Alerts/Alerts.tsx","components/StandardLayout/FeatureWrapper.tsx","features/generic-error/GenericError.tsx","utils/queryParameters.ts","hooks/auth/useHardwareTestAuthentication.ts","hooks/auth/useRebuildSessionFromCookies.ts","hooks/auth/useVideoCallAuthRequestParams.ts","hooks/auth/useVideoCallAuthentication.ts","hooks/auth/index.ts","hooks/trackUtilities/useIsTrackEnabled.ts","hooks/trackUtilities/useTrack.ts","hooks/trackUtilities/index.ts","hooks/useActiveSession.ts","hooks/useSelectedCamera.ts","hooks/useSelectedMic.ts","hooks/useAutomaticDeviceSelection.ts","hooks/useBucketedParticipants.ts","hooks/useLeavePageHandler.ts","hooks/useDisconnectHandler.ts","hooks/useDocumentTitle.ts","hooks/useHardwareTestActions.ts","utils/hardwareTest.ts","hooks/useHardwareTestResult.ts","hooks/useInterval.ts","hooks/useIsStreamBandwidthAffected.ts","hooks/useKeyboardShortcut.ts","hooks/useMediaStreamTrack.ts","hooks/useParticipantNetworkQuality.ts","hooks/usePictureInPicture.ts","hooks/usePublications.ts","hooks/useSearchParams.ts","hooks/useStoreHardwareTest.ts","hooks/useWindowSize.ts","hooks/index.ts","components/Branding/BrandedBackground.tsx","components/StandardLayout/Background.tsx","components/StandardLayout/StandardLayout.tsx","features/not-found/NotFound.tsx","models/browsers/supportedBrowsers.ts","components/BrowserList/BrowserLink.tsx","components/BrowserList/BrowserList.tsx","components/Utilities/ListWithDescription.tsx","features/browser-compatibility-error/BrowserCompatibilityError.tsx","features/browser-compatibility-error/BrowserCompatibilityError.routes.ts","icons/happySmiley.tsx","icons/sadSmiley.tsx","components/Utilities/CardButton.tsx","components/FeedbackSurvey/hooks/useFeedbackTimeoutWarning.ts","components/FeedbackSurvey/hooks/useSaveUserReaction.ts","components/FeedbackSurvey/FeedbackIntroQuestion.tsx","components/FeedbackSurvey/OptionalFeedbackButton.tsx","hooks/useCheckUserPermissions.ts","components/Utilities/Survey/QuestionIcon.tsx","components/Utilities/Survey/Question.tsx","components/Utilities/Survey/QuestionGroup.tsx","components/Utilities/Survey/hooks/useSurveyStrings.ts","components/Utilities/Survey/QuestionsPage.tsx","components/FeedbackSurvey/SurveyWorkflow.tsx","components/FeedbackSurvey/hooks/useSaveFeedbackSurvey.ts","components/FeedbackSurvey/SurveyCard.tsx","features/disconnection-page/DisconnectionPage.tsx","features/disconnection-page/DisconnectionPage.routes.ts","features/generic-error/GenericError.routes.ts","features/home/Home.tsx","features/home/Home.routes.ts","components/HardwareTest/hooks/useIsAndroid12.tsx","components/HardwareTest/hooks/useDeviceSpecificBanner.tsx","components/HardwareTest/hooks/useGetStatusBannerInfo.ts","icons/warningYield.tsx","icons/warningYieldLight.tsx","components/Utilities/BubbleBanner.tsx","components/HardwareTest/Banners/Android12VideoWarning.tsx","components/HardwareTest/Banners/BrowserSupportWarning.tsx","components/HardwareTest/Banners/DeviceStatusBanner.tsx","components/HardwareTest/Banners/HeadphoneAudioWarning.tsx","components/HardwareTest/Banners/IPadVideoBugWarning.tsx","components/HardwareTest/Banners/HardwareStatusBanner.tsx","components/HardwareTest/HardwarePreviewJoinOptions.tsx","components/HardwareTest/InlineVideoPreview.tsx","components/HardwareSetup/Devices/ToggleSwitch.tsx","components/HardwareTest/ToggleRow.tsx","components/HardwareTest/HardwarePreviewPanel.tsx","components/HardwareTest/HardwareTestMenu.tsx","components/HardwareTest/SettingsPanel.tsx","components/HardwareTest/WelcomeHeading.tsx","components/HardwareTest/HardwareCardContents.tsx","components/HardwareTest/HardwareTest.tsx","components/HardwareTest/StandaloneHardwareTest.tsx","components/Loading/Loading.tsx","features/test-mode/TestMode.tsx","features/test-mode/TestMode.routes.ts","../node_modules/recoil/es/index.js","../node_modules/lodash.throttle/index.js","../node_modules/fast-deep-equal/index.js","../src/hooks/useWaitingParticipants.ts","../src/DailyContext.tsx","../src/hooks/useDaily.ts","../src/DailyEventContext.tsx","../src/hooks/useDailyEvent.ts","../src/lib/constants.ts","../src/hooks/useParticipantProperty.ts","../src/hooks/useThrottledDailyEvent.ts","../src/lib/customDeepEqual.ts","../src/lib/recoil-custom.ts","../src/utils/getParticipantPaths.ts","../src/utils/resolveParticipantPaths.ts","../src/DailyParticipants.tsx","../src/hooks/useLocalSessionId.ts","../src/hooks/useActiveSpeakerId.ts","../src/utils/isTrackOff.ts","../src/hooks/useParticipantIds.ts","../src/hooks/useScreenShare.ts","../src/hooks/useMediaTrack.ts","../src/hooks/useMergedRef.ts","../src/components/DailyAudioTrack.tsx","../src/components/DailyAudio.tsx","../src/components/DailyVideo.tsx","../src/DailyDevicesContext.tsx","../src/DailyDevices.tsx","../src/DailyLiveStreaming.tsx","../src/DailyMeeting.tsx","../src/DailyNetwork.tsx","../src/DailyRecordings.tsx","../src/hooks/useMeetingState.ts","../src/DailyRoom.tsx","../src/DailyTranscriptions.tsx","../src/hooks/useCallInstance.ts","../src/hooks/useCallObject.ts","../src/DailyProvider.tsx","../src/hooks/useParticipant.ts","../src/hooks/useActiveParticipant.ts","../src/hooks/useAppMessage.ts","../src/lib/inlineAudioWorklet.ts","../src/hooks/useAudioLevel.ts","../src/hooks/useAudioTrack.ts","../src/hooks/useCallFrame.ts","../src/hooks/useCPULoad.ts","../src/hooks/useDailyError.ts","../src/hooks/useDevices.ts","../src/hooks/useInputSettings.ts","../src/hooks/useLiveStreaming.ts","../src/hooks/useLocalParticipant.ts","../src/hooks/useMeetingSessionState.ts","../src/hooks/useNetwork.ts","../src/hooks/useParticipantCounts.ts","../src/hooks/usePermissions.ts","../src/hooks/useReceiveSettings.ts","../src/hooks/useRecording.ts","../src/hooks/useRoom.ts","../src/hooks/useRoomExp.ts","../src/hooks/useScreenAudioTrack.ts","../src/hooks/useScreenVideoTrack.ts","../src/hooks/useSendSettings.ts","../src/hooks/useTranscription.ts","../src/hooks/useVideoTrack.ts","features/test-network/DataTable.tsx","features/test-network/FormattedConnectionState.tsx","features/test-network/FormattedWebsocketConnectivity.tsx","features/test-network/NetworkTester.ts","features/test-network/TestPage.tsx","features/test-network/TestNetwork.tsx","features/test-network/TestNetwork.routes.ts","components/FeedbackSurvey/hooks/useLoadFeedbackSurveyQuestionnaire.ts","types/chat.ts","components/Chat/hooks/useCanGetToken.ts","../node_modules/@epic/chat/dist/epic-chat.js","components/Chat/hooks/useChatSocketMessageHandler.ts","components/Chat/ConnectionManagement.tsx","components/HardwareTest/SkipHardwareTestLoadingScreen.tsx","components/HardwareTest/LobbyHardwareTest.tsx","hooks/useParticipantCountIframeMessage.ts","components/CallDurationTimer/CallDurationTimerDestination.tsx","components/CallDurationTimer/CallDurationTimer.tsx","utils/networkQualityIcon.ts","icons/networkQuality.tsx","components/NetworkQualityIndicator/NetworkQualityIndicator.tsx","icons/chat.tsx","components/Header/Buttons/ChatButton.tsx","components/Header/Buttons/DisableCameraButton.tsx","components/Header/Buttons/LeaveCallButton.tsx","components/Header/Buttons/MuteButton.tsx","components/Participants/Moderation/SimpleRequestMenu.tsx","components/Header/Buttons/OpenRequestDeviceMenuButton.tsx","components/Header/Buttons/ToggleButtonTrayButton.tsx","components/Header/InHeaderControls.tsx","hooks/useLocalScreenShareAudioToggle.ts","components/Header/Banner/BannerBase.tsx","components/Header/Banner/ScreenShareBanner.tsx","components/Header/Banner/Banner.tsx","components/Header/ButtonTray.tsx","components/Header/Trays.tsx","components/Header/ControlsHeader.tsx","components/ImageCapture/Controls/DescriptionInput.tsx","icons/trash.tsx","components/ImageCapture/Controls/DiscardButton.tsx","components/ImageCapture/Controls/DocumentTypeSelector.tsx","components/ImageCapture/Controls/ExitButton.tsx","components/ImageCapture/Controls/RetakeButton.tsx","components/ImageCapture/Controls/SaveButton.tsx","components/ImageCapture/ImageCapturePreview.tsx","components/ImageCapture/ImagePreviewPane.tsx","web-core/components/AudioStream.tsx","web-core/components/UserAudio.tsx","components/Participants/Audio/AudioOutput.tsx","components/Participants/Audio/WebAudioOutput.tsx","components/Participants/Audio/hooks/useShouldMuteHTML.ts","components/Participants/Audio/RemoteParticipantAudio.tsx","components/Participants/InactivityTimer.tsx","components/VideoCall/ModeratorAlerts.tsx","components/Chat/ChatDisclaimer.tsx","components/Chat/ChatWarning.tsx","components/Chat/ChatWrapper.tsx","components/Chat/hooks/useChatConnectionStatus.ts","components/Chat/hooks/useChatHeartbeat.ts","components/Chat/hooks/useChatMessageHandling.ts","components/Chat/hooks/useChatSendMessagesCallbacks.ts","components/Chat/ChatView.tsx","components/VideoCall/Sidebar.tsx","components/VideoCall/hooks/useMaxVisibleRemoteParticipants.ts","hooks/useHiddenUsers.ts","icons/imageCapture.tsx","components/ImageCapture/ImageCaptureButton.tsx","components/Participants/Audio/AudioAnalyzer.tsx","components/Participants/Moderation/ShowMoreButton.tsx","components/Participants/ScreenShareAudioIndicator.tsx","components/Participants/ParticipantNameBar.tsx","components/Participants/Video/TrackSwitchedOffOverlay.tsx","components/Participants/Video/VideoPlaceholder.tsx","components/Participants/UserVideo.tsx","components/Participants/MainParticipant.tsx","components/Participants/CallParticipant.tsx","icons/growShrinkArrow.tsx","components/Utilities/VideoPreview.tsx","components/Participants/FloatingParticipant.tsx","components/Participants/MoreParticipantsIndicator.tsx","components/Participants/VideoStrip.tsx","components/Participants/ParticipantSection.tsx","components/VideoCall/EmbeddedWaitingRoom.tsx","components/VideoCall/WaitingCard.tsx","components/VideoCall/WaitingRoom.tsx","components/VideoCall/grid/DominantSpeakerAlert.tsx","components/VideoCall/grid/hooks/useGridPageInformation.ts","components/VideoCall/grid/hooks/useScaleVideoGrid.ts","components/VideoCall/grid/hooks/useStaticVideoFeeds.ts","components/VideoCall/grid/hooks/useVisibleGridParticipants.ts","components/VideoCall/grid/hooks/index.ts","components/VideoCall/grid/VideoGrid.tsx","components/VideoCall/grid/GridWrapper.tsx","components/VideoCall/grid/PagingSection.tsx","components/VideoCall/grid/GridSection.tsx","components/VideoCall/VideoSection.tsx","components/VideoCall/WaitingParticipantAlert.tsx","components/VideoCall/hooks/usePictureInPictureRoom.ts","components/VideoCall/VideoRoom.tsx","features/video-call/InnerCall.tsx","features/video-call/VideoCall.tsx","features/video-call/VideoCall.routes.ts","app/registerRoutes.codegen","app/App.tsx","index.tsx"],"names":["getOwnPropertySymbols","Object","hasOwnProperty","prototype","propIsEnumerable","propertyIsEnumerable","toObject","val","TypeError","shouldUseNative","assign","test1","String","getOwnPropertyNames","test2","i","fromCharCode","map","n","join","test3","split","forEach","letter","keys","err","module","exports","target","source","from","symbols","to","s","arguments","length","key","call","l","require","Symbol","for","p","q","r","t","u","v","w","x","y","z","A","B","iterator","C","a","b","c","encodeURIComponent","D","isMounted","enqueueForceUpdate","enqueueReplaceState","enqueueSetState","E","F","props","context","refs","updater","G","H","isReactComponent","setState","Error","forceUpdate","I","constructor","isPureReactComponent","J","current","K","L","ref","__self","__source","M","e","d","g","k","f","children","h","Array","m","defaultProps","$$typeof","type","_owner","N","O","escape","replace","P","Q","R","pop","result","keyPrefix","func","count","S","push","T","U","isArray","next","done","value","V","toString","W","aa","X","Y","Z","ba","ReactCurrentDispatcher","ReactCurrentBatchConfig","suspense","ReactCurrentOwner","IsSomeRendererActing","Children","toArray","only","Component","Fragment","Profiler","PureComponent","StrictMode","Suspense","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","cloneElement","createContext","_calculateChangedBits","_currentValue","_currentValue2","_threadCount","Provider","Consumer","_context","createElement","createFactory","bind","createRef","forwardRef","render","isValidElement","lazy","_ctor","_status","_result","memo","compare","useCallback","useContext","useDebugValue","useEffect","useImperativeHandle","useLayoutEffect","useMemo","useReducer","useRef","useState","version","checkDCE","__REACT_DEVTOOLS_GLOBAL_HOOK__","console","error","ReactIs","throwOnDirectAccess","invariant","condition","format","undefined","args","argIndex","name","framesToPop","global","__DEV__","warning","printWarning","len","message","apply","concat","__esModule","_react","_react2","_interopRequireDefault","_propTypes","_propTypes2","_gud","_gud2","_warning","_warning2","obj","default","_classCallCheck","instance","Constructor","_possibleConstructorReturn","self","ReferenceError","_inherits","subClass","superClass","create","enumerable","writable","configurable","setPrototypeOf","__proto__","MAX_SIGNED_31_BIT_INT","objectIs","createEventEmitter","handlers","on","handler","off","filter","get","set","newValue","changedBits","onlyChild","createReactContext","defaultValue","calculateChangedBits","_Provider$childContex","_Consumer$contextType","contextProp","_Component","_temp","_this","_len","_key","emitter","getChildContext","_ref","componentWillReceiveProps","nextProps","oldValue","childContextTypes","object","isRequired","_Component2","_temp2","_this2","_len2","_key2","state","getValue","onUpdate","observedBits","componentDidMount","componentWillUnmount","contextTypes","componentWillMount","getDerivedStateFromProps","prevState","componentWillUpdate","nextState","prevProps","__reactInternalSnapshotFlag","__reactInternalSnapshot","getSnapshotBeforeUpdate","polyfill","foundWillMountName","foundWillReceivePropsName","foundWillUpdateName","UNSAFE_componentWillMount","UNSAFE_componentWillReceiveProps","UNSAFE_componentWillUpdate","componentName","displayName","newApiName","componentDidUpdate","maybeSnapshot","snapshot","__suppressDeprecationWarning","_invariant","startsWith","string","search","substr","pick","routes","uri","match","default_","uriPathname","uriSegments","segmentize","isRootUri","ranked","rankRoutes","missed","route","params","routeSegments","path","max","Math","index","routeSegment","uriSegment","isSplat","slice","decodeURIComponent","dynamicMatch","paramRe","exec","reservedNames","indexOf","resolve","base","_to$split","toPathname","toQuery","basePathname","toSegments","baseSegments","addQuery","pathname","allSegments","segments","segment","insertParams","_path$split","pathBase","_path$split$","query","constructedPath","_params$location","location","_params$location$sear","searchSplit","validateRedirect","isDynamic","sort","SEGMENT_POINTS","STATIC_POINTS","DYNAMIC_POINTS","SPLAT_PENALTY","ROOT_POINTS","isRootSegment","test","rankRoute","score","reduce","shallowCompare","obj1","obj2","obj1Keys","every","_extends","getLocation","_source$location","hash","href","origin","protocol","host","hostname","port","canUseDOM","URL","encodeURI","decodeURI","history","createHistory","options","listeners","transitioning","resolveTransition","_onTransitionComplete","listen","listener","popstateListener","action","addEventListener","removeEventListener","fn","navigate","_ref$replace","go","Date","now","replaceState","pushState","transition","Promise","res","createMemorySource","initialPath","searchIndex","initialLocation","stack","states","_","_uri$split","_uri$split$","_uri$split2","_uri$split2$","newIndex","window","document","getSource","globalHistory","_interopRequireWildcard","_createReactContext","_reactLifecyclesCompat","_utils","_history","_getRequireWildcardCache","WeakMap","has","defineProperty","getOwnPropertyDescriptor","_objectWithoutProperties","createNamedContext","Ctx","LocationContext","Location","React","LocationProvider","_React$Component","getContext","unlisten","_props$history","componentDidCatch","info","isRedirect","_navigate","then","requestAnimationFrame","unmounted","ServerLocation","_ref2","url","substring","BaseContext","baseuri","basepath","Router","baseContext","locationContext","RouterImpl","_React$PureComponent","_props","_navigate2","primary","_props$component","component","domProps","array","child","createRoute","element","clone","FocusWrapper","FocusHandler","wrapperProps","FocusContext","_ref3","requestFocus","FocusHandlerImpl","initialRender","focusHandlerCount","_React$Component2","_this4","node","shouldFocus","focus","myURIChanged","navigatedUpToMe","contains","activeElement","_this5","_props2","style","_props2$component","Comp","outline","tabIndex","Link","_ref4","innerRef","_ref5","_ref6","_props$getProps","getProps","anchorProps","encodedHref","isCurrent","isPartiallyCurrent","onClick","event","shouldNavigate","preventDefault","shouldReplace","_location$state","restState","RedirectRequest","o","redirectTo","RedirectImpl","_React$Component3","_props3","_props3$replace","noThrow","resolvedTo","_props4","Redirect","_ref7","Match","_ref8","_ref9","_ref10","resolvedPath","useLocation","useNavigate","useParams","results","useMatch","stripSlashes","str","elementPath","defaultPrevented","button","metaKey","altKey","ctrlKey","shiftKey","ReactReduxContext","_default","defaultNoopBatch","callback","batch","setBatch","newBatch","getBatch","_batch","createListenerCollection","first","last","clear","notify","subscribe","isSubscribed","prev","nullListeners","createSubscription","store","parentSub","unsubscribe","handleChangeWrapper","subscription","onStateChange","trySubscribe","addNestedSub","notifyNestedSubs","Boolean","tryUnsubscribe","getListeners","useIsomorphicLayoutEffect","_Context","_Subscription","_useIsomorphicLayoutEffect","contextValue","previousState","getState","Context","_objectWithoutPropertiesLoose","excluded","sourceKeys","_extends2","_objectWithoutPropertiesLoose2","_hoistNonReactStatics","_reactIs","_excluded","_excluded2","EMPTY_ARRAY","NO_SUBSCRIPTION_ARRAY","stringifyComponent","JSON","stringify","storeStateUpdatesReducer","updateCount","payload","useIsomorphicLayoutEffectWithArgs","effectFunc","effectArgs","dependencies","captureWrapperProps","lastWrapperProps","lastChildProps","renderIsScheduled","actualChildProps","childPropsFromStoreUpdate","subscribeUpdates","shouldHandleStateChanges","childPropsSelector","forceComponentUpdateDispatch","didUnsubscribe","lastThrownError","checkForUpdates","newChildProps","latestStoreState","initStateUpdates","connectAdvanced","selectorFactory","_ref2$getDisplayName","getDisplayName","_ref2$methodName","methodName","_ref2$renderCountProp","renderCountProp","_ref2$shouldHandleSta","_ref2$storeKey","storeKey","_ref2$forwardRef","withRef","_ref2$context","connectOptions","WrappedComponent","wrappedComponentName","selectorFactoryOptions","pure","usePureOnlyMemo","ConnectFunction","_useMemo","reactReduxForwardedRef","propsContext","ContextToUse","isContextConsumer","didStoreComeFromProps","dispatch","createChildSelector","_useMemo2","overriddenContextValue","_useReducer","previousStateUpdateResult","renderedWrappedComponent","Connect","forwarded","hoistStatics","is","shallowEqual","objA","objB","keysA","keysB","bindActionCreators","actionCreators","boundActionCreators","_loop","actionCreator","isPlainObject","proto","getPrototypeOf","baseProto","_isPlainObject","verifyPlainObject","_verifyPlainObject","wrapMapToPropsConstant","getConstant","constant","constantSelector","dependsOnOwnProps","getDependsOnOwnProps","mapToProps","wrapMapToPropsFunc","proxy","stateOrDispatch","ownProps","_bindActionCreators","_wrapMapToProps","whenMapDispatchToPropsIsFunction","mapDispatchToProps","whenMapDispatchToPropsIsMissing","whenMapDispatchToPropsIsObject","whenMapStateToPropsIsFunction","mapStateToProps","whenMapStateToPropsIsMissing","defaultMergeProps","stateProps","dispatchProps","wrapMergePropsFunc","mergeProps","mergedProps","areMergedPropsEqual","hasRunOnce","nextMergedProps","whenMergePropsIsFunction","whenMergePropsIsOmitted","verify","selector","verifySubselectors","_verifySubselectors","impureFinalPropsSelectorFactory","pureFinalPropsSelectorFactory","areStatesEqual","areOwnPropsEqual","areStatePropsEqual","hasRunAtLeastOnce","handleSubsequentCalls","nextOwnProps","nextStateProps","statePropsChanged","propsChanged","stateChanged","finalPropsSelectorFactory","initMapStateToProps","initMapDispatchToProps","initMergeProps","_connectAdvanced","_shallowEqual","_mapDispatchToProps","_mapStateToProps","_mergeProps","_selectorFactory","arg","factories","strictEqual","createConnect","_ref$connectHOC","connectHOC","_ref$mapStateToPropsF","mapStateToPropsFactories","defaultMapStateToPropsFactories","_ref$mapDispatchToPro","mapDispatchToPropsFactories","defaultMapDispatchToPropsFactories","_ref$mergePropsFactor","mergePropsFactories","defaultMergePropsFactories","_ref$selectorFactory","defaultSelectorFactory","_ref3$pure","_ref3$areStatesEqual","_ref3$areOwnPropsEqua","_ref3$areStatePropsEq","_ref3$areMergedPropsE","extraOptions","useReduxContext","_useReduxContext2","createStoreHook","useDefaultReduxContext","useStore","_useStore","createDispatchHook","useDefaultStore","useDispatch","refEquality","useSelectorWithStoreAndSubscription","equalityFn","contextSub","selectedState","forceRender","latestSubscriptionCallbackError","latestSelector","latestSelectedState","storeState","newSelectedState","newStoreState","_newSelectedState","createSelectorHook","_useReduxContext","useSelector","_Provider","_connect","_useDispatch","_useSelector","_reactDom","_exports","_exportNames","_reactBatchedUpdates","_typeof","_typeof2","toPrimitive","Number","_toPrimitive","toPropertyKey","_toPropertyKey","_defineProperty","ownKeys","_objectSpread2","getOwnPropertyDescriptors","defineProperties","formatProdErrorMessage","code","$$observable","observable","randomString","random","ActionTypes","__DO_NOT_USE__ActionTypes","INIT","REPLACE","PROBE_UNKNOWN_ACTION","miniKindOf","isDate","isError","constructorName","ctorName","toLowerCase","stackTraceLimit","toDateString","getDate","setDate","kindOf","typeOfVal","createStore","reducer","preloadedState","enhancer","currentReducer","currentState","currentListeners","nextListeners","isDispatching","ensureCanMutateNextListeners","splice","replaceReducer","nextReducer","outerSubscribe","observer","observeState","legacy_createStore","getUnexpectedStateShapeWarningMessage","inputState","reducers","unexpectedKeyCache","reducerKeys","argumentName","unexpectedKeys","assertReducerShape","combineReducers","finalReducers","shapeAssertionError","finalReducerKeys","hasChanged","_i","previousStateForKey","nextStateForKey","bindActionCreator","compose","funcs","applyMiddleware","middlewares","_dispatch","middlewareAPI","chain","middleware","_objectSpread","title","description","homepage","author","contributors","keywords","repository","devDependencies","browserify","cheerio","cors","electron","envify","eslint","express","glob","inquirer","jsdoc","karma","mocha","ncp","nyc","requirejs","rimraf","sinon","tslint","twilio","typescript","watchify","engines","license","main","types","scripts","lint","printVersion","build","docs","watch","clean","events","util","ws","xmlhttprequest","browser","ReflectOwnKeys","Reflect","ReflectApply","receiver","Function","ProcessEmitWarning","warn","NumberIsNaN","isNaN","EventEmitter","init","once","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","_getMaxListeners","that","_addListener","prepend","existing","newListener","emit","unshift","warned","onceWrapper","fired","removeListener","wrapFn","_onceWrap","wrapped","_listeners","unwrap","evlistener","unwrapListeners","arrayClone","listenerCount","arr","copy","spliceOne","list","ret","reject","errorListener","resolver","eventTargetAgnosticAddListener","addErrorHandlerIfEventEmitter","flags","wrapListener","RangeError","setMaxListeners","getMaxListeners","doError","er","addListener","prependListener","prependOnceListener","position","originalListener","shift","removeAllListeners","rawListeners","eventNames","cachedSetTimeout","cachedClearTimeout","process","defaultSetTimout","defaultClearTimeout","runTimeout","fun","setTimeout","runClearTimeout","marker","clearTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","timeout","run","Item","noop","nextTick","env","argv","versions","binding","cwd","chdir","dir","umask","WebSocket","LanguageSelectorButton_AriaLabel","GenericError_TooEarlyBody","LanguageSelectorButton_Tooltip","Shared_ConnectingToOrganization","LanguageSelectorButton_LabelNoHotkey","useVideoCallAuthentication_AlreadyConnectedAlert","Troubleshooting_Android12Step1","GenericError_SomethingWentWrong","BrowserCompatibilityError_ThisBrowserNotRecommended","Troubleshooting_Android12Header","useVideoCallAuthentication_AlreadyConnectedConfirm","GenericError_ReturnToOngoingCallHeader","DisconnectionPage_BodyText","NotFound_Header","GenericError_AuthRemovedBody","LoadingLanguageToast_LoadingLanguage","GenericError_VisitExpiredHeader","GenericError_AuthRemovedHeader","BrowserCompatibilityError_UseSupportedBrowser","DisconnectionPage_Title","GenericError_ReturnToOngoingCallMessage","GenericError_RelaunchTheTest","Troubleshooting_Android12Step3","BrowserCompatibilityError_IOSChangeDefaultStep2","Troubleshooting_Android12BodyText","GenericError_VisitExpiredBody","BrowserCompatibilityError_BrowserNotSupported","Alerts_ExistingConnectionAlertLabel","BrowserCompatibilityError_IOSChangeDefaultStep3","BrowserCompatibilityError_LegacyError","NotFound_PageNotFound","Shared_DefaultPageTitle","Spinner_Loading","BrowserCompatibilityError_IOSChangeDefaultStep1","useVideoCallAuthentication_AlreadyConnectedCancel","BrowserCompatibilityError_BrowserNotRecommended","BrowserCompatibilityError_IOSError","NotFound_BodyText","GenericError_RelaunchTheCall","BrowserCompatibilityError_BrowserDoesNotSupportVideo","GenericError_FailedToConnect","LanguageSelectorButton_ButtonLabel","GenericError_TooEarlyHeader","Troubleshooting_Android12Step2","ChatView_NewMessage","AccessibilityAlert_AdmittanceAlert","ToggleButtonTrayButton_AriaLabel","WaitingParticipantRow_Decline","WaitingCard_EstimatedAppointmentDateAndTime","DisableCameraButton_EnableCamera","LobbyHardwareTest_TestFailed","useSaveImageToChart_Retry","Toasts_UnreadMessagesText","Survey_OthersNotSeeMe","BackgroundGalleryNoneOption_BackgroundNoneOption","ChoiceAlertBase_ChoiceWithHotkey","ToggleRow_KeyboardShortcut","AlertLocalTimer_TimerSecondsAriaLabel","ToggleRow_SettingsAriaLabel","useMenuPages_ParticipantListBackButtonLabel","BackgroundGallery_Space","Android12VideoWarning_Title","ScreenShareWarning_MacInstructionMessage","AdmitOptionsMenu_AllowAudio","useVideoTrackActions_DefaultError","ToggleRow_OpenBackgroundsNoHotkey","Survey_OtherGroup","BackgroundGalleryToggleRow_BlurOnlyLabel","ConfirmScreenSharing_ContinueHeader","ParticipantControlMenu_RemoveAlertText","MuteButton_MicrophoneDisabled","Alerts_RemoveParticipantAlertLabel","InlineVideoPreview_UnnamedCameraDetected","Toasts_RemoteScreenShare","Toasts_VideoAndAudioModerated","DevicePermissionWarning_Connecting","ToggleRow_OpenBackgrounds","SurveyWorkflow_Back","ToggleRow_OpenSettings","PictureInPictureButton_LeavePiPWithHotkey","ParticipantNameBar_PinAnotherVideo","ScreenShareButton_NotEnabled","SurveyWorkflow_Submit","ParticipantMenuSection_AllowAllAriaLabel","ToggleRow_CloseSettingsNoHotkey","LockParticipantScreenShareButton_AllowShare","Toasts_AdmitButton","DisableCameraButton_DisableCameraWithHotkey","HardwareTest_DefaultHeader","ApplyBackgroundButton_BackgroundNoCamera","ParticipantRow_CamLocked","ParticipantRow_CamDisabled","MicSetup_RecentAudio","InactivityChoiceAlert_LeaveCall","VideoPreview_ButtonTitle","LobbyHardwareTest_Close","IntroQuestion_FeedbackLinkText","BackgroundGallery_Dark","ParticipantsButton_NotificationText","WaitingCard_AppointmentDateAndTime","Toasts_ImageCaptureFailure","TrackSwitchedOffOverlay_IconText","Toasts_UserWaiting","VideoOutput_Loading","WaitingCard_AdmitContextMessage","ParticipantRow_ParticipantRequested","Survey_IsAudioLowQuality","HardwareTest_DefaultError_Call","BackgroundGallery_None","RetakeButton_RetakeButton","HardwareTest_PermissionsErrorContent_Call","ScreenShareWarning_CautionHeader","InactivityChoiceAlert_TimeoutWarningMessage","AccessibilityAlert_BackgroundSet","HardwareTest_Welcome","ChatView_SendingMessageStatus","LobbyHardwareTest_JoinWithoutCamera","HardwareTest_MicrophoneError_Test","Survey_AudioGroup","ParticipantNameBar_ScreenOfAnotherPersonWithName","AccessibilityAlert_BackgroundCleared","MoreMenuButton_AriaLabel","SkipHardwareTestLoadingScreen_Joining","useAudioTrackActions_NotAllowedError","ManageDevicesButton_Devices","FullscreenButton_StopLabel","Android12VideoWarning_MessageChrome","HardwareSetupRow_Warning","ParticipantRow_MicDisabled","ScreenShareWarning_DismissTime","SettingsButton_SettingsHotkey","ChoiceAlertBase_Yes","LeaveCallButton_StayConnected","DisableCameraButton_CameraDisabled","SaveButton_AccessibleLabelNoPatient","ConfirmScreenSharing_StartButtonLabel","CameraSetup_NoCameraDetected","DisplayModeButton_ToggleBase","RemoveParticipantChoiceAlert_ErrorMessage","Alerts_ImageCaptureAlertLabel","useMenuPages_AdmitOptionsBackButtonLabel","HardwareTest_MicrophoneErrorContent_Test","DisableCameraButton_DisableCamera","SpeakerSetup_Speaker","HardwareTest_SuccessMessage","Toasts_ImageCaptured_DefaultName","Toasts_ImageCaptureSuccess","MicSelector_Microphone","ToggleRow_CloseSettings","SaveButton_LabelNoPatient","VideoPreview_ButtonTitleGrowAltZ","BrowserSupportWarning_ButtonLabel","ImagePreviewPane_Title","CameraSetup_DisableCamera","ToggleRow_AudioToggle","ParticipantNameBar_YouAreMuted","SkipHardwareTestSection_StartMessage","CopyrightLinkButton_ClosePopup","useMenuPages_BackgroundBackButtonLabel","ToggleRow_AudioToggleTooltip","EndVisitAlert_Stay","SurveyWorkflow_LeaveSurveyWarning","InlineVideoPreview_NoCamera","ParticipantNameBar_PinAnotherVideoWithName","ParticipantControlMenu_Remove","BrowserSupportWarning_Title","InHeaderControls_NetworkWarning","ParticipantRow_MicLocked","MicSetup_MicrophoneQuiet","EmbeddedWaitingRoom_Title","HeadphoneAudioWarning_Message","DevicePermissionWarning_AllowSentence","EndVisitAlert_Leave","Toasts_AudioAndVideoRequest","LobbyHardwareTest_JoinCall","MicSetup_NoRecentAudio","ParticipantMenuSection_PatientsHeader","BackgroundPreview_Preview","IntroQuestion_NegativeLabel","InlineVideoPreview_CameraDetected","Toasts_DenyAll","ChatButton_ChatEnabledHoverText","CameraSelector_Camera","MicSetup_CouldNotConnect","Toasts_MultipleModerated","Shared_FormatLabelWithHotkey","LockParticipantMicrophoneButton_AudioAriaLabel","GenericError_FailedToReconnect","Toasts_VideoRequest","RequestOptions_LabelGeneric","PageSelector_CurrentPage","ScreenShareButton_StopSharingScreenWithHotkey","SurveyPage_Title","LockParticipantScreenShareButton_TurnOffShare","ParticipantNameBar_PinAnotherScreenWithName","ParticipantControlMenu_AudioAriaLabel","DevicePermissionWarning_Allow","EndVisitAlert_Message","ParticipantMenuSection_DisableAllAriaLabel","ParticipantRow_ScreenEnabled","Toasts_MultipleRequests","ParticipantNameBar_CallerIsMutedWithName","ExitButton_CloseWindowTooltip","Survey_WasDisconnected","BackgroundGalleryToggleRow_FailedLoad","AboutEvcButton_Label","DevicePermissionWarning_WeNeedDevices","Toasts_CameraSwitchFailed_Browser","ChatView_MultipleUsersAreTyping","Shared_LocalParticipantIndicator","ScreenShareWarning_Continue","LockParticipantScreenShareButton_DeviceCannotShare","Android12VideoWarning_MessageNonChrome","BackgroundGallery_BackgroundEffectAltText","RequestOptions_TooltipTextGeneric","MuteButton_UnmuteMicrophoneHotkey","DocumentTypeSelector_ImageType","HardwareSetupRow_Success","AdmitOptionsMenu_AllowVideo","ImageCaptureButton_TakeCapture","ParticipantsButton_Tooltip","GenericError_LaunchCallAgainMessage","Alerts_LeaveCallAlertLabel","ChatView_UnknownSenderName","SaveButton_Label","useMenuPages_AboutEvcTitle","SettingsPanel_BackgroundsLabel","CameraSetup_NoPermissions","ParticipantNameBar_ClickToPinScreen","NetworkQualityIndicator_QualityLevel","EndVisitAlert_Confirmation","BackgroundGallery_Summer","EndVisitAlert_End","ChatToastButtonGroup_OpenChatButtonText","ScreenShareAudioIndicator_LocalSharedAudioLabel","ApplyBackgroundButton_ApplyBackground","useSaveImageToChart_FailedToSaveAfterRetry","LobbyHardwareTest_JoinWithoutMicrophone","ScreenShareBanner_MuteButtonLabel","ToggleRow_VideoToggleTooltipAltR","GenericError_CallEndedBody","BackgroundGallery_BackgroundEffectAltTextDefault","SpeakerSetup_NoSpeakerDetected","LockParticipantCameraButton_VideoAriaLabel","GenericError_ParticipantRemovedBody","GenericError_CallEndedHeader","ScreenShareBanner_UnmuteButtonLabel","DevicePermissionWarning_Continue","SpeakerSetup_IssueResolution","PageSelector_SwitchToPage","ConfirmScreenSharing_ChangeScreenButtonLabel","LockParticipantCameraButton_AllowCamera","ParticipantMenuSection_AllowAll","HardwareTest_GeneralError_Call","ParticipantNameBar_ClickToUnpinVideo","HardwareTest_CameraErrorContent_Test","useScreenShareTrackActions_ProblemSharingScreen","ExitButton_Cancel","IPadVideoBugWarning_Title","HardwareTest_MicrophoneErrorContent_Call","ScreenShareWarning_InstructionMessage","HardwareTest_StandaloneTestSuccessTip","Toasts_CameraSwitchFailed","useParticipantName_DefaultName_Generic","HardwareTest_SuccessHeader","ChatButton_ChatEnabledTooltip","useSendVisitAccessMessage_AdmitFailed","SurveyWorkflow_Exit","ChangeBackgroundButton_Backgrounds","MoreParticipantsIndicator_ButtonLabel","Toasts_ScreenShareModerated","ScreenShareButton_Locked","ScreenShareBanner_ChangeButtonLabel","RetakeButton_RetakeButtonAria","InlineVideoPreview_RecentAudio","MuteButton_MuteMicrophoneHotkey","Toasts_RemoteScreenShare_DefaultName","AccessibilityAlert_WaitingRoomAlert","Alerts_ScreenSharingAlertLabel","BrowserSuggestion_HelpText","ToggleRow_EnableVideo","Toasts_Deny","VideoPreview_ButtonTitleGrow","HardwareTest_ReadyMessageWithTime","Shared_WarningIconAriaLabel","VideoPreview_AriaLabelWithName","Alerts_GenericAlertLabel","WaitingCard_ConnectionStrength","WaitingCard_Header","HardwareTest_OutdatedOSFailure","ParticipantControlMenu_Cancel","DisabledCameraIndicator_UserCameraLocked","ParticipantNameBar_VideoOfAnotherPersonWithName","ChatView_SelfSenderName","ConfirmScreenSharing_CancelButtonLabel","PictureInPictureButton_LeavePiPHeader","Toasts_GridBandwidthMessage","WaitingCard_WaitingContextMessage","GenericError_ParticipantRemovedHeader","ParticipantRow_ClickToPin","LeaveCallButton_LeaveCallHotkey","ToggleRow_VideoToggleTooltip","VideoPreview_ButtonTitleNoHotkey","RequestOptions_AudioRequest","ScreenShareAudioIndicator_RemoteSharedAudio","ChangeBackgroundButton_ChangeBackground","EndVisitAlert_ErrorMessage","ToggleRow_CloseBackgroundsNoHotkey","SaveButton_AccessibleLabel","ParticipantRow_ClickToUnPin","useStringsTest_TestString1","Survey_CanNotShareScreen","ParticipantNameBar_ClickToUnpinScreen","ScreenShareWarning_HideForever","GenericError_CallFullBody","PictureInPictureButton_EnterPiPHeader","ParticipantNameBar_SharingAudio","DisplayModeButton_GridViewShown","DiscardButton_DiscardButtonTooltip","Toasts_UsersWaiting","ParticipantRow_ModeratorAction","ParticipantMenuSection_DisableAll","IntroQuestion_PositiveLabel","WaitingParticipantRow_Prevent","Toasts_SingleParticipantMultiRequest","HardwareTest_CameraErrorTitle","ScreenShareButton_StopSharingScreen","BackgroundGallery_Fall","SpeakerSetup_IssueResolution_Mobile","ParticipantControlMenu_Mute","ChatWarning_ChatWarningBannerText","DisabledCameraIndicator_UserDisabledTheirCamera","useAudioTrackActions_DefaultError","DiscardButton_Tooltip","HardwareTest_CameraError_Test","HeadphoneAudioWarning_Title","HardwareTest_GeneralErrorContent_Test","LockParticipantScreenShareButton_ShareBlocked","ParticipantNameBar_ClickToPinVideo","CameraSetup_Camera","MicSetup_NoAudioDetected","ImageCaptureButton_CancelButton","useVideoTrackActions_NotAllowedError","useParticipantName_DefaultName_Numbered","Toasts_LowBandwidthWarning","IPadVideoBugWarning_WarningMessage","BackgroundSelector_PreviewFailed","HardwareTest_FailureHeader","ParticipantNameBar_PinAnotherScreen","ToggleRow_BackgroundsLabel","ConfirmScreenSharing_StopButtonLabel","InlineVideoPreview_NoRecentAudio","WaitingParticipantRow_Cancel","DisconnectionPage_PostSurveyMessage","Shared_SystemDefault","AdmitOptionsMenu_AllowScreenShare","HardwareTest_EstimatedReadyMessageWithTime","LobbyHardwareTest_Joining","Toasts_AudioRequest","DiscardButton_DiscardButtonAria","WaitingParticipantRow_ConfirmationMessage","MuteButton_MuteMicrophone","FullscreenButton_AriaLabel","WaitingCard_AdmitHeader","ParticipantMenuSection_CareTeamHeader","RequestOptions_AriaLabel","ParticipantControlMenu_UnMute","Alerts_ScreenSharingWarningLabel","Alerts_SessionTimeoutAlertLabel","ParticipantControlMenu_PinParticipant","ScreenShareWarning_Cancel","Toasts_RequestAccess","ExitButton_Discard","AudioWarningBanner_Header","ParticipantNameBar_YourVideoFeed","InlineVideoPreview_AudioIndicatorLabel","ParticipantNameBar_Muted","AccessibilityAlert_EmptyCall","HardwareTest_MicrophoneErrorTitle","ChatView_RetryMessageStatus","Survey_OthersNotHearMe","useMenuPages_LanguagesTitle","BackgroundGallery_Office","LockParticipantMicrophoneButton_AllowMicrophone","ChatView_OverLimitCharacterCounter","Toasts_ActiveSpeaker","ConfirmScreenSharing_ConfirmHeader","HardwareTest_GeneralErrorTitle","Survey_OtherIssue","SkipHardwareTestSection_StopMessage","Toasts_IPadCameraBug","SettingsButton_Settings","MoreMenuButton_Tooltip","ToggleRow_EnableAudio","ApplyBackgroundButton_BackgroundCameraOff","Survey_CanNotHearOthers","HeadphoneAudioWarning_UpgradeMessage","VideoPreview_AriaLabel","SurveyPage_Heading","DescriptionInput_DescriptionHelpText","AudioWarningBanner_HardwareTestText","ChatView_UnderLimitCharacterCounter","StandaloneHardwareTest_CheckingYourHardware","RequestOptions_VideoRequest","ParticipantsButton_Label","LeaveCallButton_Message","DescriptionInput_AllowedCharactersWarning","Toasts_AudioModerated","ScreenShareBanner_PauseButtonLabel","GenericError_CallFullHeader","DocumentTypeSelector_DocumentType","useMenuPages_DevicesTitle","GenericAlert_OK","HardwareTest_IOSWarningMessage","ParticipantsButton_TooltipNoHotkey","HardwareTest_MultipleErrorsWarningMessage","useStringsTest_TestString2","BackgroundGalleryToggleRow_ToggleRowLabel","Toasts_ImageCaptureReady","Toasts_Dismiss","Alerts_EndVisitAlertLabel","MoreParticipantsIndicator_AriaLabel","ChatView_BlankMessageError","MoreMenuButton_Label","DisplayModeButton_SpeakerViewShown","DescriptionInput_DescriptionLength","LeaveCallButton_LeaveCall","SurveyWorkflow_Next","HardwareTest_MicrophoneError_Call","ImagePreviewPane_CapturePreviewNoPtName","LobbyHardwareTest_TimeoutAlert","Alerts_EndCallConfirmationAlertLabel","ParticipantControlMenu_Requested","DisplayNameInput_Label","PictureInPictureButton_EnterPiPWithHotkey","SkipHardwareTestLoadingScreen_Devices","HardwareTest_ReadyMessage","PictureInPictureButton_EnterPiPParticipant","SpeakerSelector_Speaker","ChatButton_ChatNotEnabledHoverText","AccessibilityAlert_LanguageChanged","ParticipantNameBar_PinYourVideo","GenericError_ConnectionClosed","ShowMoreButton_AriaLabel","ChatDisclaimer_DisclaimerText","ParticipantControlMenu_RemoveParticipant","ExitButton_CloseWindowTooltipNoHotkey","useDisconnectHandler_DisconnectWarning","DisconnectionPage_FeedbackHeading","ImageCaptureButton_CaptureImageTooltipNoHotkey","BackgroundGallery_Winter","ParticipantRow_ScreenLocked","GenericError_LaunchCallAgainHeader","HardwareTest_CameraErrorContent_Call","LobbyHardwareTest_JoinWithAudioIssue","ParticipantControlMenu_DisableCamera","ChatButton_NewMessageAriaAlertText","ParticipantsButton_AriaLabel","AudioWarningBanner_LobbyText","WaitingParticipantMenuSection_WaitingHeader","HardwareTest_CameraError_Call","useMenuPages_DevicesBackButtonLabel","ImageCaptureButton_CaptureMode","ToggleRow_VideoToggle","RequestOptions_TooltipText","WaitingParticipantRow_Admit","useSaveImageToChart_Discard","GenericError_ReturnToOtherOpenCall","BackgroundGalleryToggleRow_EnableBackgroundEffects","ApplyBackgroundButton_ApplyBackgroundCamera","ShowMoreButton_Title","Toasts_ScreenShareRequest","ManageDevicesButton_ManageDevices","SettingsPanel_SettingsLabel","ApplyBackgroundButton_BackgroundNotApplied","HardwareSetupRow_Error","ParticipantControlMenu_UnPinParticipant","ScreenShareButton_StartSharingScreenWithHotkey","DisconnectionPage_FeedbackPrompt","MicSetup_MuteMicrophone","WaitingParticipantMenuSection_AdmitAll","useMenuPages_AdmitOptionsTitle","ImageCaptureButton_CaptureImageTooltip","ScreenShareWarning_InterruptParticipantWithName","InlineVideoPreview_FrontCamera","AccessibilityAlert_BackgroundSetDefault","Toasts_DismissText","LockParticipantMicrophoneButton_TurnOffMicrophone","Shared_LocalScreenShareIndicator","ChangeCameraButton_Label","BackgroundGallery_Planks","GenericError_ParticipantRemovedBodyRejoin","InactivityChoiceAlert_Extend","ParticipantNameBar_CallerIsMuted","useMenuPages_ParticipantOptionsBackButtonLabel","HardwareTest_PermissionsErrorTitle","HardwareTest_ReadyMessageStandaloneTest","Toasts_ImageCaptured","VideoPreview_ButtonTitleAltZ","DevicePermissionWarning_AccessibleInstruction","ChatButton_ChatEnabledHoverNoHotkeyText","WaitingCard_WaitingHeader","MuteButton_UnmuteMicrophone","BackgroundGallery_NoneAriaLabel","ImagePreviewPane_CapturePreview","RequestOptions_Label","ChatView_SentMessageStatus","HardwareTest_DefaultMessage","HardwareTest_DefaultError_Test","BackgroundGallery_Spring","FullscreenButton_StartLabel","Toasts_UnreadMessageText","ChatView_PlaceholderMessage","ScreenShareWarning_InterruptParticipant","ScreenShareButton_StartSharingScreen","HardwareTest_PermissionsErrorContent_Test","ParticipantRow_MutedParticipant","ChoiceAlertBase_No","AudioWarningBanner_AriaLabel","ScreenShareAudioIndicator_RemoteSharedAudioWithName","ChangeCameraButton_LabelWithHotkey","useMenuPages_AboutEvcBackButtonLabel","AdmitOptionsButton_Label","BrowserSupportWarning_Message","StandaloneHardwareTest_TestAgain","ParticipantControlMenu_EnableCamera","ParticipantNameBar_ScreenOfAnotherPerson","BaseMenu_OptionLabel","LockParticipantCameraButton_TurnOffCamera","DisableCameraButton_EnableCameraWithHotkey","ExitButton_CloseWindowAria","useMenuPages_BackgroundTitle","MenuPage_BackLabel","ScreenShareButton_Label","useFeedbackTimeoutWarning_TimeoutWarningMessage","Alerts_InactivityAlertLabel","RequestOptions_AriaLabelGeneric","BackgroundGallery_Blur","Survey_IsVideoLowQuality","MicSetup_NoPermissions","ParticipantNameBar_VideoOfAnotherPerson","CameraSetup_CouldNotConnect","ParticipantControlMenu_VideoAriaLabel","Toasts_VideoModerated","VideoPreview_AriaLabelOthers","WaitingCard_AppointmentTime","MicSetup_Microphone","MicSetup_NoMicrophoneDetected","HardwareTest_GeneralError_Test","ScreenShareBanner_StopButtonLabel","useMenuPages_ParticipantListTitle","HardwareTest_PermissionsError_Test","AboutEvc_Subtitle","TestSpeakerButton_ButtonLabel","HardwareTest_WarningHeader","DisplayModeButton_ToggleGrid","PagingSection_NextPage","HardwareTest_PermissionsError_Call","HardwareTest_GeneralErrorContent_Call","Toasts_ActiveSpeaker_DefaultName","ExitButton_DiscardConfirm","useMenuPages_LanguagesBackButtonLabel","Survey_CanNotSeeOthers","DevicePermissionWarning_AllowDevices","ChatView_SingleUserIsTyping","PictureInPictureButton_PiPDisabled","Toasts_Enable","TextInput_InvalidCharactersMessage","WaitingCard_PatientName","ToggleRow_OpenSettingsNoHotkey","ConfirmScreenSharing_ContinueButtonLabel","RequestOptions_ScreenShareRequest","useSaveImageToChart_FailedToSave","ParticipantControlMenu_RemoveAlertTextCareTeam","LobbyHardwareTest_CheckingHardware","Toasts_GrantAccess","VideoPreview_ButtonTitleGrowNoTooltip","Toasts_OpenMenu","ChatView_SystemSenderName","Survey_VideoGroup","ChatView_SendButtonText","ScreenShareBanner_Header","PagingSection_PreviousPage","return","j","getTime","RegExp","Set","size","Map","ArrayBuffer","Uint8Array","DataView","byteLength","getInt8","isView","Bada","BlackBerry","Chrome","Chromium","Electron","Epiphany","Firefox","Focus","Generic","Googlebot","Maxthon","Opera","PhantomJS","Puffin","QupZilla","QQ","QQLite","Safari","Sailfish","SeaMonkey","Sleipnir","Swing","Tizen","Vivaldi","WeChat","Roku","amazon_silk","android","bada","blackberry","chrome","chromium","epiphany","firefox","generic","googlebot","google_search","ie","k_meleon","maxthon","edge","mz","naver","opera","opera_coast","phantomjs","puffin","qupzilla","qq","qqlite","safari","sailfish","samsung_internet","seamonkey","sleipnir","swing","tizen","uc","vivaldi","webos","wechat","yandex","tablet","mobile","desktop","tv","WindowsPhone","Windows","MacOS","iOS","Android","WebOS","Linux","ChromeOS","PlayStation4","EdgeHTML","Blink","Trident","Presto","Gecko","WebKit","parseInt","getVersionPrecision","reverse","min","find","$","describe","getFirstMatch","getSecondMatch","getWindowsVersionName","versionName","getMacOSVersionName","getAndroidVersionName","vendor","model","getBrowserName","getOSVersion","getOSName","_ua","parsedResult","parse","getUA","parseBrowser","some","getBrowser","getBrowserVersion","getOS","os","parseOS","getPlatform","platform","parsePlatform","getPlatformType","getEngine","engine","parseEngine","getEngineName","getResult","satisfies","isOS","isPlatform","isBrowser","compareVersion","getBrowserTypeByAlias","compareVersions","isEngine","proxyUrl","callObjectBundleUrlOverride","ee","te","ue","ne","re","oe","ae","se","ce","Event","le","de","he","pe","includes","fe","ge","exception","values","originalException","ve","me","ye","errors","mechanism","handled","is_exception_group","exception_id","parent_id","_e","be","globalThis","we","Se","__SENTRY__","ke","Ee","Ce","keyAttrs","maxStringLength","Me","parentNode","tagName","getAttribute","id","className","Te","Oe","__sentry_original__","Pe","enable","disable","__SENTRY_DEBUG__","Ae","De","je","pass","projectId","publicKey","xe","Le","Ie","logLevel","Ne","Be","Re","Fe","Ue","Je","Ve","currentTarget","CustomEvent","detail","Element","$e","Ge","qe","Ye","ze","We","He","Headers","Request","Response","fetch","hidden","head","appendChild","contentWindow","removeChild","Qe","Ke","Xe","Ze","et","tt","rt","level","ut","__sentry_instrumentation_handlers__","refCount","XMLHttpRequest","method","toUpperCase","request_headers","__sentry_own_request__","readyState","status_code","status","endTimestamp","startTimestamp","xhr","onreadystatechange","body","ot","it","fetchData","response","app","runtime","onpopstate","at","dt","onerror","column","line","msg","__SENTRY_LOADER__","__SENTRY_INSTRUMENTED__","ht","onunhandledrejection","nt","st","ct","lt","isContentEditable","pt","crypto","msCrypto","randomUUID","getRandomValues","ft","gt","event_id","vt","mt","data","yt","__sentry_captured__","_t","wt","ERROR","bt","WeakSet","add","delete","__sentry_skip_normalization__","__sentry_override_normalization_depth__","toJSON","St","kt","Ct","Et","PENDING","RESOLVED","REJECTED","__init","_state","__init2","_handlers","__init3","__init4","__init5","__init6","_resolve","_reject","_executeHandlers","catch","finally","_setResult","_value","Mt","drain","Tt","relative","Ot","Pt","At","nowSeconds","Dt","__SENTRY_BROWSER_BUNDLE__","performance","timeOrigin","jt","xt","Lt","It","Nt","Rt","Bt","TextEncoder","encode","Ft","Ut","filename","content_type","contentType","attachment_type","attachmentType","abs","timing","navigationStart","Vt","session","sessions","attachment","transaction","client_report","user_report","profile","replay_event","replay_recording","check_in","Jt","$t","sdk","Gt","qt","statusCode","headers","trim","all","Yt","zt","sid","timestamp","started","duration","ignoreDuration","toISOString","did","attrs","release","environment","ip_address","ipAddress","user_agent","userAgent","Wt","user","email","username","Ht","_notifyingListeners","_scopeListeners","_eventProcessors","_breadcrumbs","_attachments","_user","_tags","_extra","_contexts","_sdkProcessingMetadata","_propagationContext","Xt","_level","_span","_session","_transactionName","_fingerprint","_requestSession","addScopeListener","addEventProcessor","setUser","_notifyScopeListeners","getUser","getRequestSession","setRequestSession","setTags","setTag","setExtras","setExtra","setFingerprint","setLevel","setTransactionName","setContext","setSpan","getSpan","getTransaction","setSession","getSession","update","tags","extra","contexts","fingerprint","requestSession","propagationContext","addBreadcrumb","getLastBreadcrumb","clearBreadcrumbs","addAttachment","getAttachments","clearAttachments","applyToEvent","trace","getTraceContext","sdkProcessingMetadata","dynamicSamplingContext","getDynamicSamplingContext","_applyFingerprint","breadcrumbs","_notifyEventProcessors","Qt","setSDKProcessingMetadata","setPropagationContext","getPropagationContext","log","Kt","traceId","spanId","sampled","Zt","en","tn","_version","_stack","scope","bindClient","isOlderThan","getStackTop","client","setupIntegrations","pushScope","getScope","getStack","getClient","popScope","withScope","captureException","_lastEventId","_withClient","syntheticException","captureMessage","captureEvent","lastEventId","beforeBreadcrumb","maxBreadcrumbs","getOptions","configureScope","rn","getIntegration","startTransaction","_callExtensionMethod","traceHeaders","captureSession","endSession","_sendSessionUpdate","startSession","navigator","shouldSendDefaultPii","sendDefaultPii","nn","extensions","hub","an","sn","acs","getCurrentHub","cn","ln","sentry_key","sentry_version","sentry_client","un","integrations","packages","sent_at","dsn","dn","hn","setupOnce","pn","normalizeDepth","normalizeMaxBreadth","dist","maxValueLength","request","_sentryDebugIds","stacktrace","frames","debug_id","stackParser","captureContext","attachments","abs_path","debug_meta","images","code_file","spans","gn","vn","_integrations","_integrationsInitialized","_numProcessing","_outcomes","_hooks","_options","_dsn","tunnel","_metadata","_transport","transport","recordDroppedEvent","transportOptions","_process","eventFromException","_captureEvent","eventFromMessage","_isEnabled","sendSession","getDsn","getSdkMetadata","getTransport","flush","_isClientDoneProcessing","close","enabled","getIntegrationById","addIntegration","sendEvent","textEncoder","_sendEnvelope","sendClientReports","_updateSessionFromEvent","setInterval","clearInterval","_prepareEvent","parentSpanId","dsc","trace_id","span_id","parent_span_id","user_segment","public_key","_processEvent","sampleRate","yn","mn","__sentry__","beforeSend","beforeSendTransaction","transaction_info","send","_clearOutcomes","reason","category","quantity","_n","bn","bufferSize","wn","__sentry__baseTransport__","Sn","kn","En","__initStatic","Cn","Mn","Tn","ignoreInternal","ignoreErrors","ignoreTransactions","On","denyUrls","allowUrls","disableErrorDefaults","disableTransactionDefaults","Pn","freeze","FunctionToString","InboundFilters","An","Dn","jn","xn","__sentry_wrapped__","Ln","Nn","Bn","In","Rn","Fn","Un","Vn","isUnhandledRejection","__serialized__","synthetic","Jn","$n","Gn","dom","sentry","qn","serializeAttribute","Yn","zn","Wn","addSentryBreadcrumb","logger","input","Hn","SENTRY_SDK_SOURCE","visibilityState","_flushOutcomes","attachStacktrace","captureUserFeedback","metadata","discarded_events","Qn","Kn","referrerPolicy","keepalive","fetchOptions","Xn","_installFunc","Zn","rr","tr","nr","colno","function","in_app","lineno","ir","or","eventTarget","ar","sr","cr","lr","handleEvent","ur","_limit","limit","dr","referrer","Referer","hr","fr","pr","gr","_previousEvent","vr","mr","Breadcrumbs","Dedupe","GlobalHandlers","HttpContext","LinkedErrors","TryCatch","yr","Sentry","Integrations","_r","br","DAILY_STATE_NEW","wr","Sr","kr","DAILY_STATE_JOINING","Er","DAILY_STATE_JOINED","Cr","DAILY_STATE_LEFT","Mr","DAILY_STATE_ERROR","Tr","DAILY_TRACK_STATE_BLOCKED","Or","DAILY_TRACK_STATE_OFF","Pr","DAILY_TRACK_STATE_SENDABLE","Ar","DAILY_TRACK_STATE_LOADING","Dr","DAILY_TRACK_STATE_INTERRUPTED","jr","DAILY_TRACK_STATE_PLAYABLE","xr","DAILY_ACCESS_UNKNOWN","Lr","DAILY_ACCESS_LEVEL_FULL","Ir","DAILY_ACCESS_LEVEL_LOBBY","Nr","DAILY_ACCESS_LEVEL_NONE","Rr","DAILY_RECEIVE_SETTINGS_BASE_KEY","Br","DAILY_RECEIVE_SETTINGS_ALL_PARTICIPANTS_KEY","Fr","DAILY_FATAL_ERROR_EJECTED","Ur","DAILY_FATAL_ERROR_NBF_ROOM","Vr","DAILY_FATAL_ERROR_NBF_TOKEN","Jr","DAILY_FATAL_ERROR_EXP_ROOM","$r","DAILY_FATAL_ERROR_EXP_TOKEN","Gr","DAILY_FATAL_ERROR_NO_ROOM","qr","DAILY_FATAL_ERROR_MEETING_FULL","Yr","DAILY_FATAL_ERROR_EOL","zr","DAILY_FATAL_ERROR_NOT_ALLOWED","Wr","DAILY_FATAL_ERROR_CONNECTION","Hr","DAILY_CAMERA_ERROR_CAM_IN_USE","Qr","DAILY_CAMERA_ERROR_MIC_IN_USE","Kr","DAILY_CAMERA_ERROR_CAM_AND_MIC_IN_USE","Xr","DAILY_CAMERA_ERROR_PERMISSIONS","Zr","DAILY_CAMERA_ERROR_UNDEF_MEDIADEVICES","ei","DAILY_CAMERA_ERROR_NOT_FOUND","ti","DAILY_CAMERA_ERROR_CONSTRAINTS","ni","DAILY_CAMERA_ERROR_UNKNOWN","ri","DAILY_EVENT_IFRAME_READY_FOR_LAUNCH_CONFIG","ii","DAILY_EVENT_IFRAME_LAUNCH_CONFIG","oi","DAILY_EVENT_THEME_UPDATED","ai","DAILY_EVENT_LOADING","si","DAILY_EVENT_LOAD_ATTEMPT_FAILED","ci","DAILY_EVENT_LOADED","li","DAILY_EVENT_STARTED_CAMERA","ui","DAILY_EVENT_CAMERA_ERROR","di","DAILY_EVENT_JOINING_MEETING","hi","DAILY_EVENT_JOINED_MEETING","pi","DAILY_EVENT_LEFT_MEETING","fi","DAILY_EVENT_PARTICIPANT_JOINED","gi","DAILY_EVENT_PARTICIPANT_UPDATED","vi","DAILY_EVENT_PARTICIPANT_LEFT","mi","DAILY_EVENT_PARTICIPANT_COUNTS_UPDATED","yi","DAILY_EVENT_ACCESS_STATE_UPDATED","DAILY_EVENT_MEETING_SESSION_SUMMARY_UPDATED","bi","DAILY_EVENT_MEETING_SESSION_STATE_UPDATED","wi","DAILY_EVENT_MEETING_SESSION_DATA_ERROR","Si","DAILY_EVENT_WAITING_PARTICIPANT_ADDED","ki","DAILY_EVENT_WAITING_PARTICIPANT_UPDATED","Ei","DAILY_EVENT_WAITING_PARTICIPANT_REMOVED","Ci","DAILY_EVENT_TRACK_STARTED","Mi","DAILY_EVENT_TRACK_STOPPED","Ti","DAILY_EVENT_TRANSCRIPTION_STARTED","Oi","DAILY_EVENT_TRANSCRIPTION_STOPPED","Pi","DAILY_EVENT_TRANSCRIPTION_ERROR","Ai","DAILY_EVENT_RECORDING_STARTED","Di","DAILY_EVENT_RECORDING_STOPPED","ji","DAILY_EVENT_RECORDING_STATS","xi","DAILY_EVENT_RECORDING_ERROR","Li","DAILY_EVENT_RECORDING_UPLOAD_COMPLETED","Ii","DAILY_EVENT_RECORDING_DATA","Ni","DAILY_EVENT_APP_MSG","Ri","DAILY_EVENT_TRANSCRIPTION_MSG","Bi","DAILY_EVENT_REMOTE_MEDIA_PLAYER_STARTED","Fi","DAILY_EVENT_REMOTE_MEDIA_PLAYER_UPDATED","Ui","DAILY_EVENT_REMOTE_MEDIA_PLAYER_STOPPED","Vi","DAILY_EVENT_LOCAL_SCREEN_SHARE_STARTED","Ji","DAILY_EVENT_LOCAL_SCREEN_SHARE_STOPPED","$i","DAILY_EVENT_LOCAL_SCREEN_SHARE_CANCELED","Gi","DAILY_EVENT_ACTIVE_SPEAKER_CHANGE","qi","DAILY_EVENT_ACTIVE_SPEAKER_MODE_CHANGE","Yi","DAILY_EVENT_NETWORK_QUALITY_CHANGE","zi","DAILY_EVENT_NETWORK_CONNECTION","Wi","DAILY_EVENT_CPU_LOAD_CHANGE","Hi","DAILY_EVENT_FACE_COUNTS_UPDATED","Qi","DAILY_EVENT_FULLSCREEN","Ki","DAILY_EVENT_EXIT_FULLSCREEN","Xi","DAILY_EVENT_LIVE_STREAMING_STARTED","Zi","DAILY_EVENT_LIVE_STREAMING_UPDATED","eo","DAILY_EVENT_LIVE_STREAMING_STOPPED","DAILY_EVENT_LIVE_STREAMING_ERROR","no","DAILY_EVENT_LANG_UPDATED","ro","DAILY_EVENT_RECEIVE_SETTINGS_UPDATED","io","DAILY_EVENT_INPUT_SETTINGS_UPDATED","oo","DAILY_EVENT_NONFATAL_ERROR","ao","DAILY_EVENT_ERROR","so","co","lo","uo","ho","po","fo","NONE","BGBLUR","BGIMAGE","FACE_DETECTION","vo","NOISE_CANCELLATION","mo","PLAY","PAUSE","yo","_o","bo","wo","So","ko","Eo","product","Co","mediaDevices","getUserMedia","Mo","getDisplayMedia","major","RTCRtpTransceiver","minor","point","Lo","Io","To","requestFullscreen","webkitRequestFullscreen","Oo","remove","Po","xo","Fo","No","Uo","Ao","jo","AudioWorkletNode","Do","maxTouchPoints","Ro","Bo","patch","Vo","Jo","$o","Go","construct","sham","Proxy","valueOf","qo","_wrappedListeners","_messageCallbacks","what","callClientId","callbackStamp","callFrameId","_callMachineTargetOrigin","postMessage","_targetOriginFromWindowLocation","src","Yo","zo","Wo","callMachineToDailyJsEmitter","dailyJsToCallMachineEmitter","_sendMessage","Ho","Qo","Ko","Xo","mergeStrategy","_validateMergeStrategy","_validateData","isNoOpUpdate","Zo","ea","ta","na","_daily","pendings","ra","_currentLoad","_callClientId","loaded","instances","callMachine","reset","cancel","ia","start","succeeded","_attemptsRemaining","_currentAttempt","_dailyConfig","_successCallback","_failureCallback","sa","cancelled","oa","_loadAttemptImpl","avoidEval","ca","la","_networkTimedOut","_networkTimeout","_iosCache","iOSCallObjectBundleCache","_refetchHeaders","_tryLoadFromIOSCache","_loadFromNetwork","refetchHeaders","_getBundleCodeFromResponse","ok","text","renew","_attemptId","_scriptElement","_dailyCallMachineLoadWaitlist","_startLoading","_stopLoading","_signUpForCallMachineLoadWaitlist","getElementsByTagName","onload","_withdrawFromCallMachineLoadWaitlist","ua","pa","local","da","streams","stream","ha","fa","pendingTrack","public","subscribedTracks","custom","ALL","participantId","kind","starttime","ga","customTracks","track","va","charAt","tracks","session_id","persistentTrack","ma","ya","_a","audio","audioTrack","cam","getAudioTracks","video","videoTrack","getVideoTracks","screen","screenVideoTrack","screenAudioTrack","participants","rtcType","impl","private","peeringState","screenTrack","muted","wa","Sa","ka","Ea","Ca","Ma","Ta","Oa","Pa","Da","enumerateDevices","lastDevicesString","Aa","ondevicechange","ja","xa","isLocalScreenVideo","La","Ia","Na","Ra","Ba","Fa","Ua","Va","Ja","$a","Ga","topology","qa","present","Ya","maxBitrate","maxFramerate","scaleResolutionDownBy","za","Wa","Ha","androidInCallNotification","subtitle","iconName","disableForCustomOverride","disableAutoDeviceManagement","Qa","iconPath","iconPathDarkMode","label","tooltip","Ka","allow","controlledBy","csp","iconURL","loading","sandbox","srcdoc","shared","Xa","customIntegrations","validate","_s","help","ms","customTrayButtons","ys","baseUrl","token","queryString","dailyConfig","validateDailyConfig","reactNativeConfig","bs","lang","userName","userData","ds","startVideoOff","startAudioOff","activeSpeakerMode","showLeaveButton","showLocalVideo","showParticipantsBar","showFullscreenButton","showUserNameChangeUI","iframeStyle","customLayout","cssFile","cssText","bodyClass","videoSource","MediaStreamTrack","_sharedTracks","videoDeviceId","_preloadCache","audioSource","audioDeviceId","subscribeToTracksAutomatically","theme","light","dark","colors","layoutConfig","grid","isInteger","maxTilesPerPage","minTilesPerPage","receiveSettings","hs","allowAllParticipantsKey","vs","sendSettings","validateUpdateSendSettings","inputSettings","ps","fs","properties","gs","layout","emb","embHref","dailyJsVersion","strictMode","allowMultipleCallInstances","Za","styles","setSubscribedTracks","setAudio","setVideo","setScreenShare","eject","updatePermissions","entries","canSend","canAdmin","any","es","handleDeviceChange","emitDailyJSEvent","availableDevices","destroy","disableReactNativeAutoDeviceManagement","camUnmutedBeforeLosingNativeActiveState","setLocalVideo","localVideo","_hasNativeAudioFocus","toggleParticipantAudioBasedOnNativeAudioFocus","micUnmutedBeforeLosingNativeAudioFocus","setLocalAudio","localAudio","stopScreenShare","_logDuplicateInstanceAttempt","_iframe","_callObjectMode","outputDeviceId","videoTrackForNetworkConnectivityTest","videoTrackForConnectionQualityTest","_showLocalVideo","_showParticipantsBar","_customIntegrations","_customTrayButtons","_activeSpeakerMode","_receiveSettings","validateProperties","_callObjectLoader","_callState","_isPreparingToJoin","_accessState","access","_meetingSessionSummary","_finalSummaryOfPrevSession","_meetingSessionState","Es","_nativeInCallAudioMode","_participants","_isScreenSharing","_participantCounts","_rmpPlayerState","_waitingParticipants","_network","threshold","quality","_activeSpeaker","_localAudioLevel","_isLocalAudioLevelObserverRunning","_remoteParticipantsAudioLevel","_isRemoteParticipantsAudioLevelObserverRunning","_maxAppMessageSize","_messageChannel","fullscreenElement","sendMessageToCallMachine","webkitFullscreenElement","nativeUtils","addAudioFocusChangeListener","removeAudioFocusChangeListener","addAppStateChangeListener","removeAppStateChangeListener","addSystemScreenCaptureStopListener","removeSystemScreenCaptureStopListener","handleNativeAudioFocusChange","handleNativeAppStateChange","handleNativeSystemScreenCaptureStop","startListeningForDeviceChanges","addListenerForMessagesFromCallMachine","handleMessageFromCallMachine","leave","parentElement","stopListeningForDeviceChanges","resetMeetingDependentVars","_destroyed","ls","absoluteUrl","ss","validateParticipantProperties","ns","updates","updatesById","ids","granted","screenAudio","screenVideo","showInheritedValues","_callMachineInitialized","processor","_isDefaultWhenNone","_getInputSettings","_inputSettings","_prepInputSettingsToPresentToUser","kbs","trackConstraints","iceConfig","thisMeetingOnly","validateAudioLevelInterval","interval","localAudioLevelObserver","remoteParticipantsAudioLevelObserver","needsLoad","load","_didPreAuth","ts","preloadCache","mode","trackName","validateCustomTrack","customTrack","mediaTag","us","cameraDeviceId","device","setAudioDevice","deviceId","getAudioDevice","facingMode","camera","mic","speaker","returnPreloadCache","rs","setAudioMode","_logUseAfterDestroy","_updateCallState","_bundleLoadTime","errorMsg","details","sourceError","bundleUrl","_maybeSendToSentry","assembleMeetingUrl","_loadedCallback","loadCss","_testCallInProgress","stopTestCallQuality","updateIsPreparingToJoin","_joinedCallback","_callMachine","_resolveLeave","screenVideoSendSettings","_validateVideoSendSettings","mediaStream","screenMediaStream","DailyNativeUtils","isIOS","isScreenBeingCaptured","setSystemScreenCaptureStartCallback","captureOptions","presentSystemScreenCapturePrompt","preset","instanceId","endpoints","endpointsOp","camSimulcastEncodings","validateSimulcastEncodings","screenSimulcastEncodings","noAutoDefaultDeviceChange","ks","_validateEncodingLayerHasValidProperties","settings","Ss","simulcastEncodings","remoteMediaPlayerState","sipUri","phoneNumber","codecs","callerId","userId","useSipRefer","sessionId","tones","stats","latest","as","_testCallAlreadyInProgress","duringTest","testPeerToPeerCallQuality","testCallQuality","secondsElapsed","maxRTT","maxRoundTripTime","packetLoss","avgRecvPacketLoss","_validateVideoTrackForNetworkTests","stopTestPeerToPeerCallQuality","cpuStats","cpuLoadState","cpuLoadStateReason","maxQuality","encodings","allowAdaptiveLayers","low","medium","high","_sendSettings","devices","getCapabilities","facing","cs","show","btns","exitFullscreen","webkitExitFullscreen","view","includeRoomConfigDefaults","roomUrlPendingJoin","json","geo","opts","workerId","forwardPackagedMessageToCallMachine","addListenerForPackagedMessagesFromCallMachine","removeListenerForPackagedMessagesFromCallMachine","time","preLoaded","_delayDuplicateInstanceLog","internal","participant","maybeParticipantTracksStopped","maybeParticipantTracksStarted","maybeEventRecordingStopped","maybeEventRecordingStarted","compareEqualForParticipantUpdateEvent","participantCounts","awaitingAccess","meetingSession","preserveIframe","faceCounts","activeSpeaker","peerId","allWaitingParticipants","audioLevel","participantsAudioLevel","playerState","compareEqualForRMPUpdateEvent","meetingSessionState","maybeEventTrackStopped","maybeEventTrackStarted","volume","updateKeepDeviceAwake","updateDeviceAudioMode","updateShowAndroidOngoingMeetingNotification","updateNoOpRecordingEnsuringBackgroundContinuity","setKeepDeviceAwake","setShowOngoingMeetingNotification","enableNoOpRecordingEnsuringBackgroundContinuity","searchParams","workerGroup","geoGroup","callMode","supported","supportsScreenShare","supportsSfu","supportsVideoProcessing","supportsAudioProcessing","getParser","supportsFullscreen","append","border","backgroundColor","width","height","right","bottom","visibility","wrap","modifyLocalSdpHook","customCallbacks","modifyRemoteSdpHook","layer","config","strength","useLegacyVideoProcessor","toEndPoint","err_1","Recoil_err","isPromise","Recoil_isPromise","nullthrows","Recoil_nullthrows","BaseLoadable","toPromise","valueMaybe","valueOrThrow","promiseMaybe","promiseOrThrow","errorMaybe","errorOrThrow","other","contents","_map","ValueLoadable","loadableWithPromise","isLoadable","loadableWithValue","loadableWithError","ErrorLoadable","LoadingLoadable","promise","nextLoadable","loadableLoading","loadableAllArray","inputs","loadableAll","output","outputs","out","idx","LoadableStaticInterface","of","Recoil_Loadable","RecoilLoadable","Recoil_Loadable_1","Recoil_Loadable_2","Recoil_Loadable_3","Recoil_Loadable_4","Recoil_Loadable_5","Recoil_Loadable_6","Recoil_Loadable_7","Recoil_Loadable$1","RECOIL_DUPLICATE_ATOM_KEY_CHECKING_ENABLED","RECOIL_GKS_ENABLED","readProcessEnvBooleanFlag","_process$env$name","_process$env$name$toL","sanitizedValue","readProcessEnvStringArrayFlag","_process$env$name2","applyProcessEnvFlagOverrides","gk","Recoil_RecoilEnv","Recoil_gkx_OSS","setPass","setFail","Recoil_gkx","recoverableViolation","_projectName","_createMutableSource","_useMutableSource","_useSyncExternalStore","recoverableViolation_1","Recoil_recoverableViolation","createMutableSource","react","unstable_createMutableSource","useMutableSource","unstable_useMutableSource","useSyncExternalStore","unstable_useSyncExternalStore","ReactRendererVersionMismatchWarnOnce","currentRendererSupportsUseSyncExternalStore","_ReactCurrentDispatch","isUseSyncExternalStoreSupported","currentDispatcher","reactMode","early","concurrent","$disableRecoilValueMutableSource_TEMP_HACK_DO_NOT_USE","isFastRefreshEnabled","Recoil_ReactMode","AbstractRecoilValue","newKey","RecoilState","RecoilValueReadOnly","isRecoilValue","Recoil_RecoilValue","Recoil_RecoilValue_1","Recoil_RecoilValue_2","Recoil_RecoilValue_3","Recoil_RecoilValue_4","Recoil_RecoilValue$1","sprintf","sprintf_1","expectationViolation","expectationViolation_1","Recoil_expectationViolation","mapIterable","iterable","Recoil_mapIterable","isFastRefreshEnabled$1","DefaultValue","DEFAULT_VALUE","nodes","recoilValues","recoilValuesForKeys","checkForDuplicateAtomKey","registerNode","recoilValue","NodeMissingError","getNode","getNodeMaybe","configDeletionHandlers","deleteNodeConfigIfPossible","_node$shouldDeleteCon","_getConfigDeletionHan","shouldDeleteConfigOnRelease","getConfigDeletionHandler","setConfigDeletionHandler","Recoil_Node","enqueueExecution","Recoil_Queue","createCommonjsModule","hamt_1","hamt","BUCKET_SIZE","pow","MASK","MAX_INDEX_NODE","MIN_ARRAY_NODE","nothing","charCodeAt","hashFragment","toBitmap","fromBitmap","bitmap","bit","arrayUpdate","mutate","arraySpliceOut","newLen","empty","__hamt_isEmpty","isEmptyNode","Leaf","edit","_modify","Leaf__modify","Collision","Collision__modify","IndexedNode","mask","IndexedNode__modify","ArrayNode","ArrayNode__modify","mergeLeaves","h1","n1","h2","n2","subH1","subH2","canEditNode","keyEq","_v","_newValue","updateCollisionList","frag","indx","exists","canEdit","newChildren","subNodes","expand","arraySpliceIn","newChild","removed","elements","elem","pack","editable","root","_editable","_edit","_config","_root","_size","setTree","newRoot","newSize","tryGetHash","alt","tryGet","getHash","hasHash","defKeyCompare","make","isEmpty","modifyHash","NaN","modify","setHash","del","removeHash","deleteHash","beginMutation","endMutation","transient","appk","lazyVisitChildren","lazyVisit","rest","DONE","MapIterator","v0","visit","buildPairs","buildKeys","buildValues","fold","toVisit","BuiltInMap","persistentMap","toMap","HashArrayMappedTrieMap","_hamt","Recoil_PersistentMap","Recoil_PersistentMap_1","Recoil_PersistentMap$1","differenceSets","setsWithValuesToRemove","FIRST","otherSet","Recoil_differenceSets","mapMap","Recoil_mapMap","makeGraph","nodeDeps","nodeToNodeSubscriptions","cloneGraph","graph","mergeDepsIntoGraph","newDeps","olderGraph","oldDeps","addedDeps","dep","removedDeps","saveDepsToStore","deps","_storeState$nextTree","_storeState$previousT","_storeState$previousT2","_storeState$previousT3","currentTree","nextTree","previousTree","getGraph","_storeState$nextTree2","nextVersion","Recoil_Graph","nextTreeStateVersion","getNextTreeStateVersion","nextStoreID","getNextStoreID","nextComponentID","getNextComponentID","Recoil_Keys","persistentMap$1","getNextTreeStateVersion$1","makeEmptyTreeState","stateID","transactionMetadata","dirtyAtoms","atomValues","nonvalidatedAtoms","makeEmptyStoreState","commitDepth","knownAtoms","knownSelectors","transactionSubscriptions","nodeTransactionSubscriptions","nodeToComponentSubscriptions","queuedComponentCallbacks_DEPRECATED","suspendedComponentResolvers","graphsByVersion","retention","referenceCounts","nodesRetainedByZone","retainablesToCheckForRelease","nodeCleanupFunctions","Recoil_State","RetentionZone","retentionZone","Recoil_RetentionZone","setByAddingToSet","setByDeletingFromSet","mapBySettingInMap","mapByUpdatingInMap","mapByDeletingFromMap","mapByDeletingMultipleFromMap","Recoil_CopyOnWrite","filterIterable","predicate","Recoil_filterIterable","lazyProxy","prop","Recoil_lazyProxy","getNode$1","getNodeMaybe$1","recoilValuesForKeys$1","RetentionZone$1","setByAddingToSet$1","emptySet","ReadOnlyRecoilValueError","initializeRetentionForNode","nodeKey","retainedBy","addToZone","zone","deleteFromZone","initializeNodeIfNewToStore","treeState","trigger","retentionCleanup","nodeCleanup","initializeNode","cleanUpNode","_state$nodeCleanupFun","getNodeLoadable","peekNodeLoadable","peek","setUnvalidatedAtomValue_DEPRECATED","_node$invalidate","invalidate","setNodeValue","peekNodeInfo","nodeType","loadable","isActive","isSet","isModified","_graph$nodeDeps$get","subscribers","_storeState$nodeToCom","_storeState$nodeToCom2","getDownstreamNodes","components","visitedNodes","visitingNodes","_graph$nodeToNodeSubs","subscribedNodes","downstreamNode","Recoil_FunctionalCore","_invalidateMemoizedSnapshot","setInvalidateMemoizedSnapshot","invalidateMemoizedSnapshot","_invalidateMemoizedSn","Recoil_SnapshotCache","getDownstreamNodes$1","getNodeLoadable$1","setNodeValue$1","getNextComponentID$1","getNode$2","getNodeMaybe$2","DefaultValue$1","reactMode$1","AbstractRecoilValue$1","RecoilState$1","RecoilValueReadOnly$1","isRecoilValue$1","invalidateMemoizedSnapshot$1","getRecoilValueAsLoadable","applyAtomValueWrites","writes","valueFromValueOrUpdater","valueOrUpdater","applyAction","writeLoadableToTreeState","unvalidatedValue","applyActionsToStore","actions","newState","copyTreeState","invalidateDownstreams","queueOrPerformStateUpdate","batchStack","actionsByStore","batchStart","downstreams","_getNodeMaybe","_getNodeMaybe$invalid","setRecoilValue","setRecoilValueLoadable","markRecoilValueModified","setUnvalidatedRecoilValue","subscribeToRecoilValue","componentDebugName","subID","releaseStoreState","subs","refreshRecoilValue","_node$clearCache","clearCache","Recoil_RecoilValueInterface","someSet","entry","Recoil_someSet","cleanUpNode$1","deleteNodeConfigIfPossible$1","getNode$3","RetentionZone$2","SUSPENSE_TIMEOUT_MS","emptySet$1","releaseRetainablesNowOnCurrentTree","retainables","releasableNodes","findReleasableNodes","releaseNode","searchFromNodes","nonReleasableNodes","findReleasableNodesInner","releasableNodesFoundThisIteration","getDownstreamNodesInTopologicalOrder","_storeState$retention","zonesThatCouldRetainNode","nodeChildren","parents","parent","doNotDescendInto1","doNotDescendInto2","answer","visited","zones","_storeState$retention2","_storeState$retention3","scheduleOrPerformPossibleReleaseOfRetainable","retainable","updateRetainCount","delta","_map$get","newCount","updateRetainCountToZero","releaseScheduledRetainablesNow","retainedByOptionWithDefault","Recoil_Retention","unstable_batchedUpdates","reactDom","ReactBatchedUpdates","unstable_batchedUpdates$1","Recoil_ReactBatchedUpdates","batchStart$1","unstable_batchedUpdates$2","batcher","batchFn","setBatcher","newBatcher","getBatcher","batchUpdates","batchEnd","Recoil_Batching","concatIterables","iters","iter","Recoil_concatIterables","isSSR","Window","isWindow","isReactNative","Recoil_Environment","memoizeWithArgsHash","hashFunction","cache","memoizeOneWithArgsHash","lastKey","lastResult","memoizeOneWithArgsHashAndInvalidation","memoizedFn","Recoil_Memoize","batchUpdates$1","initializeNode$1","peekNodeInfo$1","graph$1","getNextStoreID$1","DEFAULT_VALUE$1","recoilValues$1","recoilValuesForKeys$2","AbstractRecoilValue$2","getRecoilValueAsLoadable$1","setRecoilValue$1","setUnvalidatedRecoilValue$1","updateRetainCount$1","setInvalidateMemoizedSnapshot$1","getNextTreeStateVersion$2","makeEmptyStoreState$1","isSSR$1","memoizeOneWithArgsHashAndInvalidation$1","retainWarning","Snapshot","parentStoreID","checkRefCount_INTERNAL","_store","getLoadable","opt","isInitialized","mapper","mutableSnapshot","MutableSnapshot","retain","autoRelease_INTERNAL","storeID","replacer","graphs","newGraph","subscribeToTransactions","addTransactionMetadata","_refCount","released","_release","cleanup","isRetained","getStore_INTERNAL","getID","getStoreID","cloneStoreState","bumpVersion","freshSnapshot","initializeState","memoizedCloneSnapshot","invalidateMemoizedSnapshot$2","_store$getState$nextT","_store$getState$previ","cloneSnapshot","recoilState","newValueOrUpdater","Recoil_Snapshot","Recoil_Snapshot_1","Recoil_Snapshot_2","Recoil_Snapshot_3","Recoil_Snapshot_4","Recoil_Snapshot$1","unionSets","sets","Recoil_unionSets","useRefInitOnce","initialValue","Recoil_useRefInitOnce","getNextTreeStateVersion$3","makeEmptyStoreState$2","cleanUpNode$2","getDownstreamNodes$2","initializeNode$2","setNodeValue$2","setUnvalidatedAtomValue_DEPRECATED$1","graph$2","cloneGraph$1","getNextStoreID$2","createMutableSource$1","reactMode$2","applyAtomValueWrites$1","releaseScheduledRetainablesNow$1","freshSnapshot$1","useRef$1","notInAContext","defaultStore","stateReplacerIsBeingExecuted","startNextTreeIfNeeded","AppContext","useStoreRef","MutableSourceContext","useRecoilMutableSource","mutableSource","notifyComponents","dependentNodes","comps","_subID","_debugName","sendEndOfBatchNotifications","subscriptions","cb","endBatch","Batcher","setNotifyBatcherOfChange","storeRef","initialStoreState_DEPRECATED","initial","atom","writtenNodes","setUnvalidatedAtomValues","initialStoreState","nextID","RecoilRoot_INTERNAL","initializeState_DEPRECATED","store_INTERNAL","storeProp","storeStateRef","replaced","notifyBatcherOfChange","atomKey","RecoilRoot","override","propsExceptOverride","ancestorStoreRef","useRecoilStoreID","Recoil_RecoilRoot","notifyComponents_FOR_TESTING","sendEndOfBatchNotifications_FOR_TESTING","shallowArrayEqual","Recoil_shallowArrayEqual","useEffect$1","useRef$2","usePrevious","Recoil_usePrevious","useStoreRef$1","SUSPENSE_TIMEOUT_MS$1","updateRetainCount$2","RetentionZone$3","useEffect$2","useRef$3","isSSR$2","useRetain","toRetain","useRetain_ACTUAL","timeoutID","previousRetainables","Recoil_useRetain","useComponentName","Recoil_useComponentName","batchUpdates$2","DEFAULT_VALUE$2","currentRendererSupportsUseSyncExternalStore$1","reactMode$3","useMutableSource$1","useSyncExternalStore$1","useRecoilMutableSource$1","useStoreRef$2","isRecoilValue$2","AbstractRecoilValue$3","getRecoilValueAsLoadable$2","setRecoilValue$2","setUnvalidatedRecoilValue$2","subscribeToRecoilValue$1","useCallback$1","useEffect$3","useMemo$1","useRef$4","useState$1","setByAddingToSet$2","isSSR$3","handleLoadable","validateRecoilValue","hookName","useRecoilInterface_DEPRECATED","recoilValuesUsed","previousSubscriptions","unsubscribeFrom","sub","updateState","currentSubscriptions","useSetRecoilState","useRecoilValueLoadable","useRecoilValue","getRecoilValue","getRecoilValueLoadable","getRecoilState","getRecoilStateLoadable","getSetRecoilState","getResetRecoilState","recoilComponentGetRecoilValueCount_FOR_TESTING","useRecoilValueLoadable_SYNC_EXTERNAL_STORE","getSnapshot","memoizePreviousSnapshot","_prevState","_prevState2","getMemoizedSnapshot","useRecoilValueLoadable_MUTABLE_SOURCE","_storeState$nextTree3","getLoadableWithTesting","_storeState","newLoadable","prevLoadableRef","useRecoilValueLoadable_TRANSITION_SUPPORT","_storeState$nextTree4","useRecoilValueLoadable_LEGACY","_storeState$nextTree5","_prevLoadableRef$curr","_prevLoadableRef$curr2","TRANSITION_SUPPORT","SYNC_EXTERNAL_STORE","MUTABLE_SOURCE","LEGACY","useResetRecoilState","useRecoilState","useRecoilStateLoadable","useSetUnvalidatedAtomValues","useRecoilValueLoadable_TRANSITION_SUPPORT_UNSTABLE","useRecoilValue_TRANSITION_SUPPORT_UNSTABLE","useRecoilState_TRANSITION_SUPPORT_UNSTABLE","Recoil_Hooks","useRecoilInterface","filterMap","Recoil_filterMap","filterSet","Recoil_filterSet","mergeMaps","maps","nextKey","Recoil_mergeMaps","batchUpdates$3","DEFAULT_VALUE$3","getNode$4","nodes$1","useStoreRef$3","AbstractRecoilValue$4","setRecoilValueLoadable$1","SUSPENSE_TIMEOUT_MS$2","cloneSnapshot$1","useCallback$2","useEffect$4","useRef$5","useState$2","isSSR$4","useTransactionSubscription","externallyVisibleAtomValuesInState","persistedAtomContentsValues","persistence","persistence_UNSTABLE","useTransactionObservation_DEPRECATED","previousAtomValues","atomInfo","_node$persistence_UNS","_node$persistence_UNS2","_node$persistence_UNS3","_node$persistence_UNS4","backButton","modifiedAtoms","useRecoilTransactionObserver","previousSnapshot","useRecoilSnapshot","setSnapshot","releaseRef","_releaseRef$current","_releaseRef$current2","_releaseRef$current3","gotoSnapshot","keysToUpdate","_prev$atomValues$get","_next$atomValues$get","shouldRestoreFromSnapshots","useGotoRecoilSnapshot","Recoil_SnapshotHooks","useTransactionSubscription_DEPRECATED","peekNodeInfo$2","useStoreRef$4","useGetRecoilValueInfo","Recoil_useGetRecoilValueInfo","reactMode$4","RecoilRoot$1","useStoreRef$5","useMemo$2","useRecoilBridgeAcrossReactRoots","Recoil_useRecoilBridgeAcrossReactRoots","loadableWithValue$1","initializeNode$3","DEFAULT_VALUE$4","getNode$5","copyTreeState$1","getRecoilValueAsLoadable$3","invalidateDownstreams$1","writeLoadableToTreeState$1","isAtom","TransactionInterfaceImpl","_changes","_treeState","newTreeState_INTERNAL","atomicUpdater","changeset","Recoil_AtomicUpdates","Recoil_AtomicUpdates_1","Recoil_AtomicUpdates$1","invariant_1","Recoil_invariant","atomicUpdater$1","batchUpdates$4","DEFAULT_VALUE$5","useStoreRef$6","refreshRecoilValue$1","setRecoilValue$3","cloneSnapshot$2","gotoSnapshot$1","useCallback$3","Sentinel","SENTINEL","recoilCallback","extraInterface","releaseSnapshot","_releaseSnapshot2","errMsg","callbackInterface","refresh","transact_UNSTABLE","_releaseSnapshot","useRecoilCallback","Recoil_useRecoilCallback","useStoreRef$7","refreshRecoilValue$2","useCallback$4","useRecoilRefresher","Recoil_useRecoilRefresher","atomicUpdater$2","useStoreRef$8","useMemo$3","useRecoilTransaction","atomicUpdate","transactionInterface","Recoil_useRecoilTransaction","WrappedValue","Recoil_Wrapper","Recoil_Wrapper_1","Recoil_Wrapper$1","isFastRefreshEnabled$2","ChangedPathError","TreeCache","_options$onHit","_options$onSet","_options$mapNodeValue","_name","_numLeafs","_onHit","onHit","_onSet","onSet","_mapNodeValue","mapNodeValue","getNodeValue","_this$getLeafNode","getLeafNode","onNodeVisit","nodeValue","branches","addLeaf","_node2","_node3","_this$_root2","_handlers$onNodeVisit2","branchKey","_node","_handlers$onNodeVisit","_this$_root","invalidCacheError","oldLeaf","leafNode","leaf","_node4","CHANGED_PATH_ERROR_MESSAGE","Recoil_TreeCache","Recoil_TreeCache_1","Recoil_TreeCache$1","LRUCache","_options$mapKey","_maxSize","maxSize","_head","_tail","_keyMapper","mapKey","tail","mappedKey","left","_maybeDeleteLRU","deleteLru","Recoil_LRUCache","Recoil_LRUCache_1","Recoil_LRUCache$1","LRUCache$1","TreeCache$1","treeCacheLRU","lruCache","lruNode","Recoil_treeCacheLRU","TIME_WARNING_THRESHOLD_MS","allowFunctions","_JSON$stringify","localeCompare","stableStringify","Recoil_stableStringify","TreeCache$2","defaultPolicy","equality","eviction","Infinity","treeCacheFromPolicy","getTreeCache","getValueMapper","Recoil_treeCacheFromPolicy","isNode","_ownerDocument","_doc$defaultView","defaultView","ownerDocument","Node","nodeName","Recoil_isNode","isReactNative$1","isWindow$1","shouldNotBeFrozen","deepFreezeValue","isFrozen","seal","Recoil_deepFreezeValue","startPerfBlock","_id","Recoil_PerformanceTimings","isLoadable$1","loadableWithError$1","loadableWithPromise$1","loadableWithValue$2","WrappedValue$1","getNodeLoadable$2","peekNodeLoadable$1","setNodeValue$3","saveDepsToStore$1","DEFAULT_VALUE$6","getConfigDeletionHandler$1","getNode$6","registerNode$1","isRecoilValue$3","markRecoilValueModified$1","retainedByOptionWithDefault$1","recoilCallback$1","startPerfBlock$1","Canceled","CANCELED","dependencyStack","waitingStores","getNewExecutionID","executionID","cachePolicy_UNSTABLE","cachePolicy","discoveredDependencyNodeKeys","retainedBy_UNSTABLE","executionInfoMap","liveStoresCount","selectorIsLive","selectorInit","selectorShouldDeleteConfigOnRelease","resolveAsync","depValues","setCache","notifyStoresOfResolvedAsync","isLatestExecution","clearExecutionInfo","notifyWaitingStores","clearWaitlist","stores","waitingStore","markStoreWaitingForResolvedAsync","wrapPendingDependencyPromise","existingDeps","loadingDepsState","resolvedDep","loadingDepKey","loadingDepPromise","cachedLoadable","getLoadableFromCacheAndUpdateDeps","getExecutionInfo","executionInfo","getInProgressExecutionInfo","loadingLoadable","evaluateSelectorGetter","updateDeps","_store$getState","_store$getState$curre","_store$getState2","_store$getState2$next","_store$getState3","_store$getState3$next","endPerfBlock","duringSynchronousExecution","duringAsynchronousExecution","finishEvaluation","resultIsError","depKey","depLoadable","stateVersions","notifyStoresOfNewAsyncDep","getCallback","errorOrPromise","wrapResultPromise","errorOrDepPromise","depValuesDiscoveredSoFarDuringAsyncWork","updateExecutionInfoDepValues","depsAfterCacheLookup","_getExecutionInfo","getSelectorLoadableAndUpdateDeps","cachedVal","inProgressExecutionInfo","_inProgressExecutionI","newExecutionID","newDepValues","setExecutionInfo","pendingExecutions","execInfo","anyDepChanged","execDepValues","execLoadable","_getExecutionInfo2","valLoadable","depValuesToDepRoute","selectorPeek","_peekNodeLoadable","selectorGet","detectCircularDependencies","invalidateSelector","clearSelectorCache","selectorSet","syncSelectorSetFinished","setRecoilState","setValue","dangerouslyAllowMutability","Recoil_selector","isLoadable$2","loadableWithError$2","loadableWithPromise$2","loadableWithValue$3","WrappedValue$2","peekNodeInfo$3","DEFAULT_VALUE$7","DefaultValue$2","getConfigDeletionHandler$2","registerNode$2","setConfigDeletionHandler$1","isRecoilValue$4","getRecoilValueAsLoadable$4","markRecoilValueModified$2","setRecoilValue$4","setRecoilValueLoadable$2","retainedByOptionWithDefault$2","baseAtom","unwrapPromise","defaultLoadable","maybeFreezeValueOrPromise","cachedAnswerForUnvalidatedValue","cleanupEffectsByStore","valueOrPromise","peekAtom","_state$atomValues$get3","nonvalidatedValue","validatorResult","validator","validatedValueLoadable","initState","_options$effects","notifyDefaultSubscribers","_store$getState$nextT3","effects","effects_UNSTABLE","initValue","isDuringInit","isInitError","pendingSetSelf","retValue","getPromise","getInfo_UNSTABLE","_store$getState$nextT4","setSelf","effect","currentLoadable","currentValue","resetSelf","_cleanupEffectsByStor2","currentStore","_currentTree$atomValu","_previousTree$atomVal","_pendingSetSelf","_pendingSetSelf2","_pendingSetSelf3","oldLoadable","parentStoreID_UNSTABLE","_cleanupEffectsByStor3","_store$getState$nextT5","initLoadable","wrappedPromise","_state$atomValues$get","_store$getState$nextT2","_state$atomValues$get2","wrapPendingPromise","cleanupAtom","_cleanupEffectsByStor","restOptions","optionsDefault","atomWithFallback","storedValue","sel","baseValue","Recoil_atom","MapCache","Recoil_MapCache","Recoil_MapCache_1","Recoil_MapCache$1","LRUCache$2","MapCache$1","defaultPolicy$1","cacheFromPolicy","getCache","getValueMapper$1","Recoil_cacheFromPolicy","setConfigDeletionHandler$2","atomFamily","_options$cachePolicyF","_options$cachePolicyF2","atomCache","cachePolicyForParams_UNSTABLE","_stableStringify","cachedAtom","atomOptions","newAtom","Recoil_atomFamily","setConfigDeletionHandler$3","nextIndex","selectorFamily","selectorCache","cachedSelector","myKey","myGet","callbacks","myCachePolicy","newSelector","mySet","Recoil_selectorFamily","constSelector","Recoil_constSelector","throwingSelector","errorSelector","Recoil_errorSelector","readOnlySelector","Recoil_readOnlySelector","loadableWithError$3","loadableWithPromise$3","loadableWithValue$4","concurrentRequests","fill","exceptions","exp","unwrapDependencies","wrapResults","wrapLoadables","combineAsyncResultsWithSyncResults","syncResults","asyncResults","waitForNone","waitForAny","waitForAll","exceptionResults","waitForAllSettled","noWait","dependency","Recoil_WaitFor","DefaultValue$3","RecoilRoot$2","useRecoilStoreID$1","isRecoilValue$5","retentionZone$1","freshSnapshot$2","useRecoilState$1","useRecoilState_TRANSITION_SUPPORT_UNSTABLE$1","useRecoilStateLoadable$1","useRecoilValue$1","useRecoilValue_TRANSITION_SUPPORT_UNSTABLE$1","useRecoilValueLoadable$1","useRecoilValueLoadable_TRANSITION_SUPPORT_UNSTABLE$1","useResetRecoilState$1","useSetRecoilState$1","useGotoRecoilSnapshot$1","useRecoilSnapshot$1","useRecoilTransactionObserver$1","useRecoilCallback$1","noWait$1","waitForAll$1","waitForAllSettled$1","waitForAny$1","waitForNone$1","Recoil_index","RecoilEnv","useRecoilBridgeAcrossReactRoots_UNSTABLE","useGetRecoilValueInfo_UNSTABLE","useRecoilRefresher_UNSTABLE","useRecoilTransaction_UNSTABLE","useRecoilTransactionObserver_UNSTABLE","snapshot_UNSTABLE","Recoil_index_1","Recoil_index_2","Recoil_index_3","Recoil_index_4","Recoil_index_5","Recoil_index_6","Recoil_index_7","Recoil_index_8","Recoil_index_9","Recoil_index_10","Recoil_index_11","Recoil_index_12","Recoil_index_13","Recoil_index_14","Recoil_index_15","Recoil_index_16","Recoil_index_17","Recoil_index_18","Recoil_index_19","Recoil_index_20","Recoil_index_21","Recoil_index_22","Recoil_index_23","Recoil_index_24","Recoil_index_25","Recoil_index_26","Recoil_index_27","Recoil_index_28","Recoil_index_29","Recoil_index_30","Recoil_index_31","Recoil_index_32","Recoil_index_33","Recoil_index_34","Recoil_index_35","Recoil_index_36","Recoil_index_37","Recoil_index_38","DailyContext","useDaily","daily","DailyEventContext","uniqueCounter","getUnique","useDailyEvent","ev","_useContext","_useState","isBlocked","setIsBlocked","reassignCount","eventId","RECOIL_PREFIX","participantPropertyPathsState","participantPropertyState","participantPropertiesState","property","useParticipantProperty","propertyPaths","useThrottledDailyEvent","throttleTimeout","throttledEvents","emitEvents","throttle","trailing","addEvent","customDeepEqual","MediaStream","active","getTracks","_step","_iterator","_createForOfIteratorHelperLoose","_step2","_iterator2","_step2$value","_keysA","equalSelector","prior","inner","equals","equalSelectorFamily","priorValues","param","getPaths","currentPath","paths","newPath","getParticipantPaths","resolvePath","resolveParticipantPaths","activeIdState","localIdState","localJoinDateState","participantIdsState","participantState","waitingParticipantsState","waitingParticipantState","allWaitingParticipantsSelector","DailyParticipants","initialized","setInitialized","initParticipants","participantsArray","handleInitEvent","evts","last_active","prevIds","prevId","oldPaths","wps","wp","useLocalSessionId","localId","noopFilter","useActiveSpeakerId","_ref$filter","_ref$ignoreLocal","ignoreLocal","localSessionId","recentActiveId","isIgnoredLocalId","isFilteredOut","isRecentIdRelevant","activeId","setActiveId","isTrackOff","trackState","participantIdsFilteredAndSortedState","_get","screenAudioState","screenVideoState","idA","idB","aSort","bSort","useParticipantIds","onActiveSpeakerChange","onParticipantJoined","onParticipantLeft","onParticipantUpdated","preFilteredSortedIds","shouldUseCustomIds","getCustomFilteredIds","customIds","setCustomIds","newIds","maybeUpdateCustomIds","screenSharesState","screenId","useScreenShare","onError","onLocalScreenShareStarted","onLocalScreenShareStopped","startScreenShare","screens","isSharingScreen","useMediaTrack","isOff","subscribed","useMergedRef","DailyAudioTrack","onPlayFailed","_ref$type","audioEl","audioRef","subscribedState","audioTag","handleCanPlay","play","handlePlay","playTimeout","srcObject","autoPlay","DailyAudio","autoSubscribeActiveSpeaker","_ref$autoSubscribeAct","_ref$maxSpeakers","maxSpeakers","_ref$playLocalScreenA","playLocalScreenAudio","speakers","setSpeakers","activeSpeakerId","containerRef","getActiveSpeakerAudio","_containerRef$current","_containerRef$current2","querySelector","getAllAudio","_containerRef$current3","_containerRef$current4","querySelectorAll","getAudioBySessionId","_containerRef$current5","_containerRef$current6","getRmpAudio","_containerRef$current7","_containerRef$current8","getScreenAudio","_containerRef$current9","_containerRef$current10","getRmpAudioBySessionId","_containerRef$current11","_containerRef$current12","getScreenAudioBySessionId","_containerRef$current13","_containerRef$current14","assignSpeaker","_asyncToGenerator","subscribedParticipants","_daily$participants","isDestroyed","updateParticipant","prevSpeakers","freeSlotCheck","findIndex","mutedIdx","speakerObjects","lastActiveA","_snapshot$getLoadable","lastActiveB","_snapshot$getLoadable2","replaceIdx","_speakerObjects$","_x","removeSpeaker","newSpeakers","rmpAudioIds","_p$tracks","rmpAudio","DailyVideo","automirror","_ref$fit","fit","mirror","onResize","_ref$playableStyle","playableStyle","_ref$style","isLocal","isScreen","isLocalCam","videoEl","videoRef","videoState","isPlayable","isMirrored","videoTrackSettings","getSettings","playVideo","controls","paused","handleEnterPIP","transform","handleLeavePIP","handleVisibilityChange","frame","handleResize","cancelAnimationFrame","videoWidth","videoHeight","aspectRatio","playsInline","objectFit","DailyDevicesContext","refreshDevices","generalCameraState","generalMicrophoneState","cameraDevicesState","microphoneDevicesState","speakerDevicesState","lastCameraErrorState","DailyDevices","_navigator","_navigator$mediaDevic","_navigator2","_navigator2$mediaDevi","cams","mics","_yield$daily$getInput","getInputDevices","mapDevice","prevDevices","_prevDevices$find$sta","_prevDevices$find","selected","sortDeviceByLabel","prevCams","prevMics","updateDeviceStates","currentCamState","currentMicState","camPermissionState","micPermissionState","permissions","_unused","awaitingCamAccess","initialCamOff","_tracks$video$off","byUser","awaitingMicAccess","initialMicOff","_tracks$audio$off","_tracks$audio","_tracks$audio$blocked","blocked","byDeviceInUse","_tracks$audio2","_tracks$audio2$blocke","byDeviceMissing","_tracks$audio3","_tracks$audio3$blocke","byPermissions","_tracks$video","_tracks$video$blocked","_ref11","_tracks$video2","_tracks$video2$blocke","_tracks$video3","_tracks$video3$blocke","_ref12","_ref13","_ref14","_ev$error","_ev$error2","missingMedia","_ev$error3","_ev$error4","blockedMedia","_ev$error5","_ev$error6","_ev$error7","_ref15","_ref16","liveStreamingState","isLiveStreaming","DailyLiveStreaming","meetingStateState","meetingErrorState","nonFatalErrorState","meetingSessionDataState","DailyMeeting","updateMeetingState","meetingState","initMeetingSessionState","topologyState","networkQualityState","networkThresholdState","DailyNetwork","initTopology","getNetworkTopology","prevQuality","prevThreshold","recordingState","isLocalParticipantRecorded","isRecording","DailyRecordings","recordingParticipantIds","hasRecordingParticipants","isLocalParticipantRecording","_ev$layout","recordingId","recordingStartedDate","startedBy","useMeetingState","roomState","DailyRoom","updateRoom","room","transcriptionState","isTranscribing","language","transcriptions","DailyTranscriptions","transcriptionStartDate","updatedBy","fromId","defaultOptions","defaultShouldCreateInstance","shouldCreateInstance","useCallInstance","parentElRef","_ref$options","_ref$shouldCreateInst","callInstance","setCallInstance","lastUsedOptions","handleDestroyedInstance","Daily","getCallInstance","_destroyCallInstance","destroyCallInstance","createFrame","createCallObject","useCallObject","DailyProvider","_ref$recoilRootProps","recoilRootProps","eventsMap","_eventsMap$current$ev","_eventsMap$current","_eventsMap$current$ev2","initEventHandlers","externalCallObject","callObject","memoizedOptions","internalCallObject","_eventsMap$current$ev4","_eventsMap$current$ev3","_eventsMap$current$ev5","_eventsMap$current$ev6","useParticipant","filteredEvts","useActiveParticipant","activeParticipant","useAppMessage","onAppMessage","sendAppMessage","handleAppMessage","audioLevelProcessor","inlineAudioWorklet","useAudioLevel","mediaTrack","onVolumeChange","audioCtx","AudioCtx","AudioContext","webkitAudioContext","audioContext","gainNode","mediaStreamSource","createMediaStreamSource","createGain","audioWorklet","addModule","onmessage","gain","connect","destination","startProcessing","disconnect","useAudioTrack","useCallFrame","CPULoadState","useCPULoad","onCPULoadChange","cpu","updateCPULoadState","deepEqual","mounted","getCpuLoadStats","useDailyError","meetingError","nonFatalError","useDevices","camState","micState","camDevices","micDevices","speakerDevices","cameraError","setCamera","setInputDevicesAsync","setMicrophone","_x2","setSpeaker","setOutputDeviceAsync","_x3","errorStates","cameras","currentCam","currentMic","currentSpeaker","hasCamError","hasMicError","microphones","inputSettingsState","useInputSettings","onInputSettingsUpdated","updateInputSettingsState","getInputSettings","updateInputSettings","useLiveStreaming","onLiveStreamingError","onLiveStreamingStarted","onLiveStreamingStopped","onLiveStreamingUpdated","onLiveStreamingWarning","startLiveStreaming","stopLiveStreaming","updateLiveStreaming","useLocalParticipant","localParticipant","useMeetingSessionState","useNetwork","onNetworkConnection","onNetworkQualityChange","getStats","newStats","getNetworkStats","participantCountsState","useParticipantCounts","onParticipantCountsUpdated","updateCounts","counts","usePermissions","canSendAudio","_permissions$canSend","canSendVideo","_permissions$canSend2","canSendCustomAudio","_permissions$canSend3","canSendCustomVideo","_permissions$canSend4","canSendScreenAudio","_permissions$canSend5","canSendScreenVideo","_permissions$canSend6","canAdminParticipants","_permissions$canAdmin","canAdminStreaming","_permissions$canAdmin2","canAdminTranscription","_permissions$canAdmin3","hasPresence","participantReceiveSettingsState","useReceiveSettings","_ref$id","onReceiveSettingsUpdated","baseSettings","updateReceiveSettingsState","_Object$entries","_Object$entries$_i","getReceiveSettings","updateReceiveSettings","useRecording","onRecordingData","onRecordingError","onRecordingStarted","onRecordingStopped","startRecording","stopRecording","updateRecording","useRoom","useRoomExp","onCountdown","localJoinDate","ejectDate","setEjectDate","ejectAfterElapsed","_room$tokenConfig$eje","_room$tokenConfig","tokenConfig","eject_after_elapsed","_room$config","expUTCTimeStamp","_room$tokenConfig$exp","_room$tokenConfig2","_room$config2","ejectAtExp","_room$tokenConfig$eje2","_room$tokenConfig3","eject_at_token_exp","_room$config3","eject_at_room_exp","newEjectDate","expDate","oldEjectDate","_room$config4","_room$config5","_room$config6","_room$tokenConfig4","_room$tokenConfig5","_room$tokenConfig6","diff","_ejectDate$getTime","hours","floor","minutes","seconds","useScreenAudioTrack","useScreenVideoTrack","sendSettingsState","useSendSettings","onSendSettingsUpdated","storeSendSettings","getSendSettings","updateSendSettings","newSendSettings","useTranscription","onTranscriptionAppData","onTranscriptionError","onTranscriptionMessage","onTranscriptionStarted","onTranscriptionStopped","startTranscription","stopTranscription","useVideoTrack","useWaitingParticipants","onWaitingParticipantAdded","onWaitingParticipantRemoved","onWaitingParticipantUpdated","waitingParticipants","updateWaitingParticipantAccess","grantRequestedAccess","updateWaitingParticipant","updateWaitingParticipants","grantAccess","denyAccess","createTextNode","inst","useSyncExternalStoreWithSelector","hasValue","stabilityCheck","noopCheck","getServerState","AsyncMode","ConcurrentMode","ContextConsumer","ContextProvider","ForwardRef","Lazy","Memo","Portal","isAsyncMode","isConcurrentMode","isContextProvider","isElement","isForwardRef","isFragment","isLazy","isMemo","isPortal","isProfiler","isStrictMode","isSuspense","isValidElementType","typeOf","propTypes","SuspenseList","isSuspenseList","getModuleId","Ts","Ms","Cs","Is","As","Os","jsx","jsxs","Ns","serverState","Rs","Ds","qs","xs","js","Vs","Ls","Ps","Bs","revocable","revoke","Us","Fs","Hs","deleteProperty","zs","produce","produceWithPatches","useProxies","setUseProxies","autoFreeze","setAutoFreeze","createDraft","finishDraft","applyPatches","op","Ws","$s","Gs","Ys","Js","Qs","Ks","Xs","Zs","withExtraArgument","__extends","__generator","sent","trys","ops","throw","__spreadArray","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","meta","measureTime","warnIfExceeded","species","detectMutations","wasMutated","keyPath","thunk","immutableCheck","serializableCheck","actionCreatorCheck","extraArgument","devTools","enhancers","addCase","addMatcher","matcher","addDefaultCase","getInitialState","initialState","extraReducers","prepare","caseReducers","rejectedWithValue","requestId","requestStatus","serializeError","aborted","AbortController","signal","dispatchEvent","onabort","throwIfAborted","abort","idGenerator","getPendingMeta","race","rejectWithValue","fulfillWithValue","dispatchConditionRejection","pending","rejected","fulfilled","typePrefix","withTypes","queueMicrotask","setAttribute","sessionStorage","getItem","removeItem","setItem","mychartWidget","renderWidget","ec","tc","nc","rc","oc","ac","sc","ic","cc","lc","dc","fc","hc","gc","mc","pc","yc","vc","Sc","bc","hour","minute","Intl","DateTimeFormat","toLocaleTimeString","timeStyle","Ec","messages","dateTimeISOString","messageBody","botOptions","optionLabel","optionStyle","displayTime","sentDateTime","isMe","messageDeliveryStatus","botMessageInfo","senderId","hideSuggestions","nodeHistory","queueSession","wc","Tc","queueId","chatIdentifier","queueIdentifier","Mc","content","isEncrypted","isBot","sentISOTimestamp","botInteractionSettings","dialogId","botSession","negotiateEndpoint","botEndpoint","configInitializeEndpoint","apiKey","botHistoryEndpoint","resetBotInteraction","messageToBotFailed","addUserResponse","newMsg","isHistory","addBotResponse","incomingBotMessage","talkToAgent","markMessageSent","retryFailedBotMessage","verificationSubmissionSuccess","setBotInteractionSettings","Cc","Ic","Ac","Oc","_c","Nc","primaryColor","secondaryColor","fontFamily","minimizedChatTitle","liveChatTitle","organizationImageURL","organizationImageDescriptor","Option","color","Rc","setProperty","queueDepth","kc","negotiateToken","Dc","xc","isMinimized","chatStage","shrinkComposer","showIdleTimeoutWarning","hasInitializedChat","overlayType","allowSound","branding","hasInitializedBot","isLoadingBotHistory","retryAttempts","resetChatApp","updateMinimizeStatus","setShouldFocus","setShrinkComposer","setShowIdleTimeoutWarning","setChatStage","setBranding","setOverlayType","updateQueueDepth","updateNegotiateToken","decrementQueueDepth","creationTime","setHasInitializedChat","setHasInitializedBot","setIsLoadingBotHistory","setCreationTime","setAllowSound","updateRetryAttempts","Lc","Uf","Pc","Bc","Uc","Fc","jc","Vc","Hc","qc","messageId","sentTimeISOString","subjectId","messageType","systemMessageType","sequentialId","outgoingMessageType","messageAwaitingAck","messageMap","queuedMessages","sortedMessageArray","zc","highestGaplessSequentialId","Wc","$c","Gc","Yc","mostRecentUserMessageId","highestSequentialId","heartbeatStatus","Kc","Qc","Jc","Xc","messageSource","hasNewMessageNotification","Zc","onArrive","onDepart","onFocus","onBlur","onMouseEnter","onMouseLeave","eu","tu","nu","xmlns","viewBox","ru","rx","ry","cx","cy","cssClass","ou","au","strings","a11yDescription","role","poweredBy","points","strokeWidth","su","imageURL","iu","cu","uu","lu","onRetry","du","ChatScrollingSection","numberOfMessages","isChatOpen","isLastMessageFromSelf","shouldNotDisplayNewMessage","onScrolledToTheEnd","shouldLoadFromBottom","scrollIntoView","block","behavior","Hl","onTouchStart","onTouchEnd","newMessage","fu","displayStyle","chatApp","hu","immediate","puny","short","long","gu","delay","roleOverride","hide","isLabel","mu","pu","priority","tone","yu","HTMLElement","hasAttribute","vu","Su","bu","Eu","wu","Tu","Mu","Cu","getComputedStyle","overflowY","scrollHeight","clientHeight","ThemeProvider","Iu","display","disabled","childNodes","Au","accessibleDescription","cssClasses","Ou","announce","commands","headerText","defaultCallback","hideAssistiveAnnouncement","detailElement","headingLabel","closeLabel","forwardedRef","_u","hideFromAssistiveTech","removeAttribute","Nu","elementId","Ru","overlayContents","showOverlay","ku","dismissOverlay","heading","onClose","offerCancel","onCancel","updateOverlayState","buttonTextOverride","acknowledgeText","cancelText","Du","charactersUsed","charactersAllowed","characterCounterElementId","overLimit","underLimit","xu","errorsToDisplayArray","Lu","throttled","blankMessage","Pu","showEmptyMessageError","isThrottled","Bu","dynamicString","placeholderString","Uu","onEnter","onChange","errorElementId","setMsg","setShowEmptyMsgError","placeHolderString","scrollTo","onKeyDown","placeholder","spellCheck","autoComplete","Fu","onNewMessageTextChange","onUserTrySendNewMessage","isNewMessageValidToSend","onMouseDown","ju","MessageComposer","messageCharacterLimit","validateMessage","shouldSendBeEnabled","Vu","chatBot","typing","multiple","Hu","usersTypingDisplayString","qu","CurrentlyTypingUsers","usersTyping","bot","zu","showName","senderName","showTime","Wu","a11ySummary","horizontalAlignment","$u","Gu","Yu","Ku","Qu","unknown","system","Ju","Xu","Zu","el","shouldShowRetryIcon","retryButtonText","isMostRecentUserMessage","retryStatus","sending","tl","nl","rl","codePointAt","fromCodePoint","ol","participantName","userIconColor","al","messagePlacement","hasMetadataAbove","shouldRenderAllLinks","shouldRenderSenderIcon","shouldForceLinksOpenInNewTab","shouldBeTabbable","shouldRenderRetryIcon","shouldOverrideRenderNoLinks","dangerouslySetInnerHTML","__html","sl","il","displayText","cl","onMessageRetry","allowRetry","ul","UserInteractionMessages","sortedMessages","chatUsers","shouldNotDisplayMessages","locale","shouldLastMessageBeTabbable","ll","dl","commandOverrideStrings","imagePath","fl","ackId","hl","isTyping","gl","ml","onopen","onclose","pl","connectionStatus","isWebSocket","verification","verificationProps","phone","yl","resume","currentTime","createOscillator","setValueAtTime","exponentialRampToValueAtTime","onended","frequency","stop","vl","Sl","bl","El","wl","hd","retryFailedMessageData","getElementById","Tl","enqueueMessageData","messageQueueData","MessageBody","messageFullData","Ml","Cl","Il","scrollTop","Al","formApiKey","formURL","resetVerification","setVerificationStatus","setVerificationProps","Ol","_l","Nl","endpoint","Authorization","serviceAddress","Rl","chatUserStartupDataArray","clientAction","kl","specversion","ack","datacontenttype","bufferedAmount","OPEN","Dl","tokens","xl","Ll","botHistory","errorMessage","botResponse","botHistoryTokens","Pl","Demographics","FollowUp","ChatEnded","InternalServerError","Forbidden","Bl","botInteraction","addReceivedAndLoadedMessagesData","endChatData","Id","SentTimeISOString","SenderId","Type","UpdateType","Participant","SequentialId","Ul","Name","IsActive","isInChat","Fl","Agents","ChatHistory","jl","ChatCreationTime","Vl","Od","Code","ParticipantId","gd","acknowledgeMessageData","AckId","NewDBEventResponse","Status","Reason","offsetHeight","IntersectionObserver","isIntersecting","observe","passive","overflow","ql","zl","Wl","returnValue","$l","vd","Gl","Yl","formKey","formUrl","Kl","Ql","Jl","Xl","Zl","ed","chatMessages","td","nd","rd","od","ad","sd","socketSendSlackTime","newDeliveryStatus","cd","ud","numUnreadMessages","resetChatMessages","setDeliveryStatus","setDeliveryStatusData","heartbeatFailure","addReceivedAndLoadedMessages","sendQueuedMessage","skipSendingMessage","enqueueMessage","retryFailedMessage","acknowledgeMessage","setHeartbeat","heartbeatData","endChatMessage","addNotification","clearNotifications","clearSocketSlackTime","setUserId","setWaitTimeMessage","ld","dd","fd","md","pd","yd","Sd","bd","ChatBot","resetChatUsers","updateChatUsers","Ed","wd","failedConnectionCount","reconnectAttemptCount","hasDisconnectedAtLeastOnce","socketDisconnectedAndMayNeedRestart","tokenStatus","resetConnectionStatus","socketOpened","socketClosed","socketError","setTokenStatus","setConnectionStatus","setConnectionURL","negotiateFailure","messageReceived","endChat","disconnected","clearDisconnectedAndMayNeedRestart","messageFailedToSend","Td","Md","Cd","Ff","Ad","_d","Nd","Rd","resetMessageComposer","updateThrottling","kd","Dd","xd","messageComposer","Ld","Pd","CLOSED","Bd","Ud","Fd","jd","Vd","Hd","round","qd","zd","Wd","$d","Gd","Yd","Kd","classList","Qd","innerWidth","Jd","Xd","Zd","ef","tf","nebulaURL","nf","rf","af","sf","cf","uf","lf","chatTitle","df","ff","onChoose","isBack","setFocusedIndex","hasOverlay","hf","onUserChooseOption","gf","onRetrySendMessage","isLastMessage","mf","hasUserChatMessages","shape","pf","paddingTop","yf","defer","vf","widgetType","additionalParams","hasChildNodes","containerId","Sf","verificationStatus","onSubmit","success","formType","queueid","bf","formattedPhoneNumber","Ef","wf","chatId","messageResponseDelayTimeoutRef","chatid","Tf","Mf","Cf","If","Af","Of","_f","Nf","IsTyping","buttonFunctionalityExplanation","IconSVG","Rf","onMin","onHelp","kf","MessageList","Df","publicProps","onNewMessageNotification","onUpdateUnreadCount","xf","onLog","Lf","jf","_routes","addRoute"],"mappings":"AmQAA,AGAA,A8IAA,AEAA,ACAA,ACAA,ACAA,AdAA,AHAA,AIAA,AHAA,AFAA,AMAA,AHAA,A1GAA,a7BkBwC,AGDC,A8IjBzC,AEAA,ACAA,ACAA,ACAA,AdAA,AHAA,AIAA,AHAA,AFAA,AMAA,AHAA,A1GAA,I7BkBwC,AGDC,EHCD,AGDC,C8IjBzC,AEAA,ACAA,ACAA,ACAA,AdAA,AHAA,AIAA,AHAA,AFAA,AMAA,AHAA,A1GAA,K7BkBwC,AGDC,KHCD,AGDC,K8IjBzC,AEAA,ACAA,ACAA,ACAA,AdAA,AHAA,AIAA,AHAA,AFAA,AMAA,AHAA,A1GAA,M7BkBwC,AGDC,E8IjBzC,AEAA,ACAA,ACAA,ACAA,AdAA,AHAA,AIAA,AHAA,AFAA,AMAA,AHAA,A1GAA,S7BkBwC,AGDC,IHCD,AGDC,A8IjBzC,AEAA,ACAA,ACAA,ACAA,AdAA,AHAA,AIAA,AHAA,AFAA,AMAA,AHAA,A1GAA,CoHAA,AEAA,ACAA,ACAA,ACAA,AdAA,AHAA,AIAA,AHAA,AFAA,AMAA,AHAA,A1GAA,C7BkBwC,AGDC,M8IjBzC,AEAA,ACAA,ACAA,ACAA,AdAA,AHAA,AIAA,AHAA,AFAA,AMAA,AHAA,A1GAA,G7BkBwC,AGDC,EHCD,AGDC,GHCD,AGDC,OHCD,AGDC,EHCD,AGDC,OHCD,AGDC,gBHCD,AGDC,CHCD,AGDC,UHCD,AGDC,cHCD,AGDC,OHCD,AGDC,SHCD,AGDC,EHCD,AGDC,GHCD,AGDC,EHCD,AGDC,UHCD,AGDC,IHCD,AGDC,SHCD,AGDC,EHCD,AGDC,GHCD,AGDC,IHCD,AGDC,IHCD,AGDC,KHCD,AGDC,EHCD,AGDC,OHCD,AGDC,UHCD,AGDC,eHCD,AGDC,KHCD,AGDC,EHCD,AGDC,KHCD,AGDC,EHCD,AGDC,GHCD,AGDC,EHCD,AGDC,MHCD,AGDC,EHCD,AGDC,IHCD,AGDC,OHCD,AGDC,SHCD,AGDC,EHCD,AGDC,GHCD,AGDC,GHCD,AGDC,mBHCD,AGDC,GHCD,AGDC,OHCD,AGDC,EHCD,AGDC,MHCD,AGDC,IHCD,AGDC,UHCD,AGDC,uBHCD,AGDC,OHCD,AGDC,GHCD,AGDC,iCHCD,AGDC,SHCD,A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","file":"src.f69400ca.js","sourceRoot":"../../Video.App/src","sourcesContent":["/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","/** @license React v16.14.0\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var l=require(\"object-assign\"),n=\"function\"===typeof Symbol&&Symbol.for,p=n?Symbol.for(\"react.element\"):60103,q=n?Symbol.for(\"react.portal\"):60106,r=n?Symbol.for(\"react.fragment\"):60107,t=n?Symbol.for(\"react.strict_mode\"):60108,u=n?Symbol.for(\"react.profiler\"):60114,v=n?Symbol.for(\"react.provider\"):60109,w=n?Symbol.for(\"react.context\"):60110,x=n?Symbol.for(\"react.forward_ref\"):60112,y=n?Symbol.for(\"react.suspense\"):60113,z=n?Symbol.for(\"react.memo\"):60115,A=n?Symbol.for(\"react.lazy\"):\n60116,B=\"function\"===typeof Symbol&&Symbol.iterator;function C(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;cQ.length&&Q.push(a)}\nfunction T(a,b,c,e){var d=typeof a;if(\"undefined\"===d||\"boolean\"===d)a=null;var g=!1;if(null===a)g=!0;else switch(d){case \"string\":case \"number\":g=!0;break;case \"object\":switch(a.$$typeof){case p:case q:g=!0}}if(g)return c(e,a,\"\"===b?\".\"+U(a,0):b),1;g=0;b=\"\"===b?\".\":b+\":\";if(Array.isArray(a))for(var k=0;k=G};l=function(){};exports.unstable_forceFrameRate=function(a){0>a||125>>1,e=a[d];if(void 0!==e&&0K(n,c))void 0!==r&&0>K(r,n)?(a[d]=r,a[v]=c,d=v):(a[d]=n,a[m]=c,d=m);else if(void 0!==r&&0>K(r,c))a[d]=r,a[v]=c,d=v;else break a}}return b}return null}function K(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}var N=[],O=[],P=1,Q=null,R=3,S=!1,T=!1,U=!1;\nfunction V(a){for(var b=L(O);null!==b;){if(null===b.callback)M(O);else if(b.startTime<=a)M(O),b.sortIndex=b.expirationTime,J(N,b);else break;b=L(O)}}function W(a){U=!1;V(a);if(!T)if(null!==L(N))T=!0,f(X);else{var b=L(O);null!==b&&g(W,b.startTime-a)}}\nfunction X(a,b){T=!1;U&&(U=!1,h());S=!0;var c=R;try{V(b);for(Q=L(N);null!==Q&&(!(Q.expirationTime>b)||a&&!k());){var d=Q.callback;if(null!==d){Q.callback=null;R=Q.priorityLevel;var e=d(Q.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?Q.callback=e:Q===L(N)&&M(N);V(b)}else M(N);Q=L(N)}if(null!==Q)var m=!0;else{var n=L(O);null!==n&&g(W,n.startTime-b);m=!1}return m}finally{Q=null,R=c,S=!1}}\nfunction Y(a){switch(a){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1E4;default:return 5E3}}var Z=l;exports.unstable_IdlePriority=5;exports.unstable_ImmediatePriority=1;exports.unstable_LowPriority=4;exports.unstable_NormalPriority=3;exports.unstable_Profiling=null;exports.unstable_UserBlockingPriority=2;exports.unstable_cancelCallback=function(a){a.callback=null};exports.unstable_continueExecution=function(){T||S||(T=!0,f(X))};\nexports.unstable_getCurrentPriorityLevel=function(){return R};exports.unstable_getFirstCallbackNode=function(){return L(N)};exports.unstable_next=function(a){switch(R){case 1:case 2:case 3:var b=3;break;default:b=R}var c=R;R=b;try{return a()}finally{R=c}};exports.unstable_pauseExecution=function(){};exports.unstable_requestPaint=Z;exports.unstable_runWithPriority=function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var c=R;R=a;try{return b()}finally{R=c}};\nexports.unstable_scheduleCallback=function(a,b,c){var d=exports.unstable_now();if(\"object\"===typeof c&&null!==c){var e=c.delay;e=\"number\"===typeof e&&0d?(a.sortIndex=e,J(O,a),null===L(N)&&a===L(O)&&(U?h():U=!0,g(W,e-d))):(a.sortIndex=c,J(N,a),T||S||(T=!0,f(X)));return a};\nexports.unstable_shouldYield=function(){var a=exports.unstable_now();V(a);var b=L(N);return b!==Q&&null!==Q&&null!==b&&null!==b.callback&&b.startTime<=a&&b.expirationTimeb}return!1}function v(a,b,c,d,e,f){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f}var C={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){C[a]=new v(a,0,!1,a,null,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];C[b]=new v(b,1,!1,a[1],null,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){C[a]=new v(a,2,!1,a.toLowerCase(),null,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){C[a]=new v(a,2,!1,a,null,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){C[a]=new v(a,3,!1,a.toLowerCase(),null,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){C[a]=new v(a,3,!0,a,null,!1)});[\"capture\",\"download\"].forEach(function(a){C[a]=new v(a,4,!1,a,null,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){C[a]=new v(a,6,!1,a,null,!1)});[\"rowSpan\",\"start\"].forEach(function(a){C[a]=new v(a,5,!1,a.toLowerCase(),null,!1)});var Ua=/[\\-:]([a-z])/g;function Va(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(Ua,\nVa);C[b]=new v(b,1,!1,a,null,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(Ua,Va);C[b]=new v(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(Ua,Va);C[b]=new v(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){C[a]=new v(a,1,!1,a.toLowerCase(),null,!1)});\nC.xlinkHref=new v(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){C[a]=new v(a,1,!1,a.toLowerCase(),null,!0)});var Wa=aa.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;Wa.hasOwnProperty(\"ReactCurrentDispatcher\")||(Wa.ReactCurrentDispatcher={current:null});Wa.hasOwnProperty(\"ReactCurrentBatchConfig\")||(Wa.ReactCurrentBatchConfig={suspense:null});\nfunction Xa(a,b,c,d){var e=C.hasOwnProperty(b)?C[b]:null;var f=null!==e?0===e.type:d?!1:!(2=c.length))throw Error(u(93));c=c[0]}b=c}null==b&&(b=\"\");c=b}a._wrapperState={initialValue:rb(c)}}\nfunction Kb(a,b){var c=rb(b.value),d=rb(b.defaultValue);null!=c&&(c=\"\"+c,c!==a.value&&(a.value=c),null==b.defaultValue&&a.defaultValue!==c&&(a.defaultValue=c));null!=d&&(a.defaultValue=\"\"+d)}function Lb(a){var b=a.textContent;b===a._wrapperState.initialValue&&\"\"!==b&&null!==b&&(a.value=b)}var Mb={html:\"http://www.w3.org/1999/xhtml\",mathml:\"http://www.w3.org/1998/Math/MathML\",svg:\"http://www.w3.org/2000/svg\"};\nfunction Nb(a){switch(a){case \"svg\":return\"http://www.w3.org/2000/svg\";case \"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}function Ob(a,b){return null==a||\"http://www.w3.org/1999/xhtml\"===a?Nb(b):\"http://www.w3.org/2000/svg\"===a&&\"foreignObject\"===b?\"http://www.w3.org/1999/xhtml\":a}\nvar Pb,Qb=function(a){return\"undefined\"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)})}:a}(function(a,b){if(a.namespaceURI!==Mb.svg||\"innerHTML\"in a)a.innerHTML=b;else{Pb=Pb||document.createElement(\"div\");Pb.innerHTML=\"\"+b.valueOf().toString()+\"\";for(b=Pb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction Rb(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}function Sb(a,b){var c={};c[a.toLowerCase()]=b.toLowerCase();c[\"Webkit\"+a]=\"webkit\"+b;c[\"Moz\"+a]=\"moz\"+b;return c}var Tb={animationend:Sb(\"Animation\",\"AnimationEnd\"),animationiteration:Sb(\"Animation\",\"AnimationIteration\"),animationstart:Sb(\"Animation\",\"AnimationStart\"),transitionend:Sb(\"Transition\",\"TransitionEnd\")},Ub={},Vb={};\nya&&(Vb=document.createElement(\"div\").style,\"AnimationEvent\"in window||(delete Tb.animationend.animation,delete Tb.animationiteration.animation,delete Tb.animationstart.animation),\"TransitionEvent\"in window||delete Tb.transitionend.transition);function Wb(a){if(Ub[a])return Ub[a];if(!Tb[a])return a;var b=Tb[a],c;for(c in b)if(b.hasOwnProperty(c)&&c in Vb)return Ub[a]=b[c];return a}\nvar Xb=Wb(\"animationend\"),Yb=Wb(\"animationiteration\"),Zb=Wb(\"animationstart\"),$b=Wb(\"transitionend\"),ac=\"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting\".split(\" \"),bc=new (\"function\"===typeof WeakMap?WeakMap:Map);function cc(a){var b=bc.get(a);void 0===b&&(b=new Map,bc.set(a,b));return b}\nfunction dc(a){var b=a,c=a;if(a.alternate)for(;b.return;)b=b.return;else{a=b;do b=a,0!==(b.effectTag&1026)&&(c=b.return),a=b.return;while(a)}return 3===b.tag?c:null}function ec(a){if(13===a.tag){var b=a.memoizedState;null===b&&(a=a.alternate,null!==a&&(b=a.memoizedState));if(null!==b)return b.dehydrated}return null}function fc(a){if(dc(a)!==a)throw Error(u(188));}\nfunction gc(a){var b=a.alternate;if(!b){b=dc(a);if(null===b)throw Error(u(188));return b!==a?null:a}for(var c=a,d=b;;){var e=c.return;if(null===e)break;var f=e.alternate;if(null===f){d=e.return;if(null!==d){c=d;continue}break}if(e.child===f.child){for(f=e.child;f;){if(f===c)return fc(e),a;if(f===d)return fc(e),b;f=f.sibling}throw Error(u(188));}if(c.return!==d.return)c=e,d=f;else{for(var g=!1,h=e.child;h;){if(h===c){g=!0;c=e;d=f;break}if(h===d){g=!0;d=e;c=f;break}h=h.sibling}if(!g){for(h=f.child;h;){if(h===\nc){g=!0;c=f;d=e;break}if(h===d){g=!0;d=f;c=e;break}h=h.sibling}if(!g)throw Error(u(189));}}if(c.alternate!==d)throw Error(u(190));}if(3!==c.tag)throw Error(u(188));return c.stateNode.current===c?a:b}function hc(a){a=gc(a);if(!a)return null;for(var b=a;;){if(5===b.tag||6===b.tag)return b;if(b.child)b.child.return=b,b=b.child;else{if(b===a)break;for(;!b.sibling;){if(!b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}}return null}\nfunction ic(a,b){if(null==b)throw Error(u(30));if(null==a)return b;if(Array.isArray(a)){if(Array.isArray(b))return a.push.apply(a,b),a;a.push(b);return a}return Array.isArray(b)?[a].concat(b):[a,b]}function jc(a,b,c){Array.isArray(a)?a.forEach(b,c):a&&b.call(c,a)}var kc=null;\nfunction lc(a){if(a){var b=a._dispatchListeners,c=a._dispatchInstances;if(Array.isArray(b))for(var d=0;dpc.length&&pc.push(a)}\nfunction rc(a,b,c,d){if(pc.length){var e=pc.pop();e.topLevelType=a;e.eventSystemFlags=d;e.nativeEvent=b;e.targetInst=c;return e}return{topLevelType:a,eventSystemFlags:d,nativeEvent:b,targetInst:c,ancestors:[]}}\nfunction sc(a){var b=a.targetInst,c=b;do{if(!c){a.ancestors.push(c);break}var d=c;if(3===d.tag)d=d.stateNode.containerInfo;else{for(;d.return;)d=d.return;d=3!==d.tag?null:d.stateNode.containerInfo}if(!d)break;b=c.tag;5!==b&&6!==b||a.ancestors.push(c);c=tc(d)}while(c);for(c=0;c=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=ud(c)}}\nfunction wd(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?wd(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}function xd(){for(var a=window,b=td();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=td(a.document)}return b}\nfunction yd(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}var zd=\"$\",Ad=\"/$\",Bd=\"$?\",Cd=\"$!\",Dd=null,Ed=null;function Fd(a,b){switch(a){case \"button\":case \"input\":case \"select\":case \"textarea\":return!!b.autoFocus}return!1}\nfunction Gd(a,b){return\"textarea\"===a||\"option\"===a||\"noscript\"===a||\"string\"===typeof b.children||\"number\"===typeof b.children||\"object\"===typeof b.dangerouslySetInnerHTML&&null!==b.dangerouslySetInnerHTML&&null!=b.dangerouslySetInnerHTML.__html}var Hd=\"function\"===typeof setTimeout?setTimeout:void 0,Id=\"function\"===typeof clearTimeout?clearTimeout:void 0;function Jd(a){for(;null!=a;a=a.nextSibling){var b=a.nodeType;if(1===b||3===b)break}return a}\nfunction Kd(a){a=a.previousSibling;for(var b=0;a;){if(8===a.nodeType){var c=a.data;if(c===zd||c===Cd||c===Bd){if(0===b)return a;b--}else c===Ad&&b++}a=a.previousSibling}return null}var Ld=Math.random().toString(36).slice(2),Md=\"__reactInternalInstance$\"+Ld,Nd=\"__reactEventHandlers$\"+Ld,Od=\"__reactContainere$\"+Ld;\nfunction tc(a){var b=a[Md];if(b)return b;for(var c=a.parentNode;c;){if(b=c[Od]||c[Md]){c=b.alternate;if(null!==b.child||null!==c&&null!==c.child)for(a=Kd(a);null!==a;){if(c=a[Md])return c;a=Kd(a)}return b}a=c;c=a.parentNode}return null}function Nc(a){a=a[Md]||a[Od];return!a||5!==a.tag&&6!==a.tag&&13!==a.tag&&3!==a.tag?null:a}function Pd(a){if(5===a.tag||6===a.tag)return a.stateNode;throw Error(u(33));}function Qd(a){return a[Nd]||null}\nfunction Rd(a){do a=a.return;while(a&&5!==a.tag);return a?a:null}\nfunction Sd(a,b){var c=a.stateNode;if(!c)return null;var d=la(c);if(!d)return null;c=d[b];a:switch(b){case \"onClick\":case \"onClickCapture\":case \"onDoubleClick\":case \"onDoubleClickCapture\":case \"onMouseDown\":case \"onMouseDownCapture\":case \"onMouseMove\":case \"onMouseMoveCapture\":case \"onMouseUp\":case \"onMouseUpCapture\":case \"onMouseEnter\":(d=!d.disabled)||(a=a.type,d=!(\"button\"===a||\"input\"===a||\"select\"===a||\"textarea\"===a));a=!d;break a;default:a=!1}if(a)return null;if(c&&\"function\"!==typeof c)throw Error(u(231,\nb,typeof c));return c}function Td(a,b,c){if(b=Sd(a,c.dispatchConfig.phasedRegistrationNames[b]))c._dispatchListeners=ic(c._dispatchListeners,b),c._dispatchInstances=ic(c._dispatchInstances,a)}function Ud(a){if(a&&a.dispatchConfig.phasedRegistrationNames){for(var b=a._targetInst,c=[];b;)c.push(b),b=Rd(b);for(b=c.length;0this.eventPool.length&&this.eventPool.push(a)}function de(a){a.eventPool=[];a.getPooled=ee;a.release=fe}var ge=G.extend({data:null}),he=G.extend({data:null}),ie=[9,13,27,32],je=ya&&\"CompositionEvent\"in window,ke=null;ya&&\"documentMode\"in document&&(ke=document.documentMode);\nvar le=ya&&\"TextEvent\"in window&&!ke,me=ya&&(!je||ke&&8=ke),ne=String.fromCharCode(32),oe={beforeInput:{phasedRegistrationNames:{bubbled:\"onBeforeInput\",captured:\"onBeforeInputCapture\"},dependencies:[\"compositionend\",\"keypress\",\"textInput\",\"paste\"]},compositionEnd:{phasedRegistrationNames:{bubbled:\"onCompositionEnd\",captured:\"onCompositionEndCapture\"},dependencies:\"blur compositionend keydown keypress keyup mousedown\".split(\" \")},compositionStart:{phasedRegistrationNames:{bubbled:\"onCompositionStart\",\ncaptured:\"onCompositionStartCapture\"},dependencies:\"blur compositionstart keydown keypress keyup mousedown\".split(\" \")},compositionUpdate:{phasedRegistrationNames:{bubbled:\"onCompositionUpdate\",captured:\"onCompositionUpdateCapture\"},dependencies:\"blur compositionupdate keydown keypress keyup mousedown\".split(\" \")}},pe=!1;\nfunction qe(a,b){switch(a){case \"keyup\":return-1!==ie.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"blur\":return!0;default:return!1}}function re(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var se=!1;function te(a,b){switch(a){case \"compositionend\":return re(b);case \"keypress\":if(32!==b.which)return null;pe=!0;return ne;case \"textInput\":return a=b.data,a===ne&&pe?null:a;default:return null}}\nfunction ue(a,b){if(se)return\"compositionend\"===a||!je&&qe(a,b)?(a=ae(),$d=Zd=Yd=null,se=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1=document.documentMode,df={select:{phasedRegistrationNames:{bubbled:\"onSelect\",captured:\"onSelectCapture\"},dependencies:\"blur contextmenu dragend focus keydown keyup mousedown mouseup selectionchange\".split(\" \")}},ef=null,ff=null,gf=null,hf=!1;\nfunction jf(a,b){var c=b.window===b?b.document:9===b.nodeType?b:b.ownerDocument;if(hf||null==ef||ef!==td(c))return null;c=ef;\"selectionStart\"in c&&yd(c)?c={start:c.selectionStart,end:c.selectionEnd}:(c=(c.ownerDocument&&c.ownerDocument.defaultView||window).getSelection(),c={anchorNode:c.anchorNode,anchorOffset:c.anchorOffset,focusNode:c.focusNode,focusOffset:c.focusOffset});return gf&&bf(gf,c)?null:(gf=c,a=G.getPooled(df.select,ff,a,b),a.type=\"select\",a.target=ef,Xd(a),a)}\nvar kf={eventTypes:df,extractEvents:function(a,b,c,d,e,f){e=f||(d.window===d?d.document:9===d.nodeType?d:d.ownerDocument);if(!(f=!e)){a:{e=cc(e);f=wa.onSelect;for(var g=0;gzf||(a.current=yf[zf],yf[zf]=null,zf--)}\nfunction I(a,b){zf++;yf[zf]=a.current;a.current=b}var Af={},J={current:Af},K={current:!1},Bf=Af;function Cf(a,b){var c=a.type.contextTypes;if(!c)return Af;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}function L(a){a=a.childContextTypes;return null!==a&&void 0!==a}\nfunction Df(){H(K);H(J)}function Ef(a,b,c){if(J.current!==Af)throw Error(u(168));I(J,b);I(K,c)}function Ff(a,b,c){var d=a.stateNode;a=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in a))throw Error(u(108,pb(b)||\"Unknown\",e));return n({},c,{},d)}function Gf(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Af;Bf=J.current;I(J,a);I(K,K.current);return!0}\nfunction Hf(a,b,c){var d=a.stateNode;if(!d)throw Error(u(169));c?(a=Ff(a,b,Bf),d.__reactInternalMemoizedMergedChildContext=a,H(K),H(J),I(J,a)):H(K);I(K,c)}\nvar If=r.unstable_runWithPriority,Jf=r.unstable_scheduleCallback,Kf=r.unstable_cancelCallback,Lf=r.unstable_requestPaint,Mf=r.unstable_now,Nf=r.unstable_getCurrentPriorityLevel,Of=r.unstable_ImmediatePriority,Pf=r.unstable_UserBlockingPriority,Qf=r.unstable_NormalPriority,Rf=r.unstable_LowPriority,Sf=r.unstable_IdlePriority,Tf={},Uf=r.unstable_shouldYield,Vf=void 0!==Lf?Lf:function(){},Wf=null,Xf=null,Yf=!1,Zf=Mf(),$f=1E4>Zf?Mf:function(){return Mf()-Zf};\nfunction ag(){switch(Nf()){case Of:return 99;case Pf:return 98;case Qf:return 97;case Rf:return 96;case Sf:return 95;default:throw Error(u(332));}}function bg(a){switch(a){case 99:return Of;case 98:return Pf;case 97:return Qf;case 96:return Rf;case 95:return Sf;default:throw Error(u(332));}}function cg(a,b){a=bg(a);return If(a,b)}function dg(a,b,c){a=bg(a);return Jf(a,b,c)}function eg(a){null===Wf?(Wf=[a],Xf=Jf(Of,fg)):Wf.push(a);return Tf}function gg(){if(null!==Xf){var a=Xf;Xf=null;Kf(a)}fg()}\nfunction fg(){if(!Yf&&null!==Wf){Yf=!0;var a=0;try{var b=Wf;cg(99,function(){for(;a=b&&(rg=!0),a.firstContext=null)}\nfunction sg(a,b){if(mg!==a&&!1!==b&&0!==b){if(\"number\"!==typeof b||1073741823===b)mg=a,b=1073741823;b={context:a,observedBits:b,next:null};if(null===lg){if(null===kg)throw Error(u(308));lg=b;kg.dependencies={expirationTime:0,firstContext:b,responders:null}}else lg=lg.next=b}return a._currentValue}var tg=!1;function ug(a){a.updateQueue={baseState:a.memoizedState,baseQueue:null,shared:{pending:null},effects:null}}\nfunction vg(a,b){a=a.updateQueue;b.updateQueue===a&&(b.updateQueue={baseState:a.baseState,baseQueue:a.baseQueue,shared:a.shared,effects:a.effects})}function wg(a,b){a={expirationTime:a,suspenseConfig:b,tag:0,payload:null,callback:null,next:null};return a.next=a}function xg(a,b){a=a.updateQueue;if(null!==a){a=a.shared;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}}\nfunction yg(a,b){var c=a.alternate;null!==c&&vg(c,a);a=a.updateQueue;c=a.baseQueue;null===c?(a.baseQueue=b.next=b,b.next=b):(b.next=c.next,c.next=b)}\nfunction zg(a,b,c,d){var e=a.updateQueue;tg=!1;var f=e.baseQueue,g=e.shared.pending;if(null!==g){if(null!==f){var h=f.next;f.next=g.next;g.next=h}f=g;e.shared.pending=null;h=a.alternate;null!==h&&(h=h.updateQueue,null!==h&&(h.baseQueue=g))}if(null!==f){h=f.next;var k=e.baseState,l=0,m=null,p=null,x=null;if(null!==h){var z=h;do{g=z.expirationTime;if(gl&&(l=g)}else{null!==x&&(x=x.next={expirationTime:1073741823,suspenseConfig:z.suspenseConfig,tag:z.tag,payload:z.payload,callback:z.callback,next:null});Ag(g,z.suspenseConfig);a:{var D=a,t=z;g=b;ca=c;switch(t.tag){case 1:D=t.payload;if(\"function\"===typeof D){k=D.call(ca,k,g);break a}k=D;break a;case 3:D.effectTag=D.effectTag&-4097|64;case 0:D=t.payload;g=\"function\"===typeof D?D.call(ca,k,g):D;if(null===g||void 0===g)break a;k=n({},k,g);break a;case 2:tg=!0}}null!==z.callback&&\n(a.effectTag|=32,g=e.effects,null===g?e.effects=[z]:g.push(z))}z=z.next;if(null===z||z===h)if(g=e.shared.pending,null===g)break;else z=f.next=g.next,g.next=h,e.baseQueue=f=g,e.shared.pending=null}while(1)}null===x?m=k:x.next=p;e.baseState=m;e.baseQueue=x;Bg(l);a.expirationTime=l;a.memoizedState=k}}\nfunction Cg(a,b,c){a=b.effects;b.effects=null;if(null!==a)for(b=0;by?(A=m,m=null):A=m.sibling;var q=x(e,m,h[y],k);if(null===q){null===m&&(m=A);break}a&&\nm&&null===q.alternate&&b(e,m);g=f(q,g,y);null===t?l=q:t.sibling=q;t=q;m=A}if(y===h.length)return c(e,m),l;if(null===m){for(;yy?(A=t,t=null):A=t.sibling;var D=x(e,t,q.value,l);if(null===D){null===t&&(t=A);break}a&&t&&null===D.alternate&&b(e,t);g=f(D,g,y);null===m?k=D:m.sibling=D;m=D;t=A}if(q.done)return c(e,t),k;if(null===t){for(;!q.done;y++,q=h.next())q=p(e,q.value,l),null!==q&&(g=f(q,g,y),null===m?k=q:m.sibling=q,m=q);return k}for(t=d(e,t);!q.done;y++,q=h.next())q=z(t,e,y,q.value,l),null!==q&&(a&&null!==\nq.alternate&&t.delete(null===q.key?y:q.key),g=f(q,g,y),null===m?k=q:m.sibling=q,m=q);a&&t.forEach(function(a){return b(e,a)});return k}return function(a,d,f,h){var k=\"object\"===typeof f&&null!==f&&f.type===ab&&null===f.key;k&&(f=f.props.children);var l=\"object\"===typeof f&&null!==f;if(l)switch(f.$$typeof){case Za:a:{l=f.key;for(k=d;null!==k;){if(k.key===l){switch(k.tag){case 7:if(f.type===ab){c(a,k.sibling);d=e(k,f.props.children);d.return=a;a=d;break a}break;default:if(k.elementType===f.type){c(a,\nk.sibling);d=e(k,f.props);d.ref=Pg(a,k,f);d.return=a;a=d;break a}}c(a,k);break}else b(a,k);k=k.sibling}f.type===ab?(d=Wg(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=Ug(f.type,f.key,f.props,null,a.mode,h),h.ref=Pg(a,d,f),h.return=a,a=h)}return g(a);case $a:a:{for(k=f.key;null!==d;){if(d.key===k)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=\nd.sibling}d=Vg(f,a.mode,h);d.return=a;a=d}return g(a)}if(\"string\"===typeof f||\"number\"===typeof f)return f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):(c(a,d),d=Tg(f,a.mode,h),d.return=a,a=d),g(a);if(Og(f))return ca(a,d,f,h);if(nb(f))return D(a,d,f,h);l&&Qg(a,f);if(\"undefined\"===typeof f&&!k)switch(a.tag){case 1:case 0:throw a=a.type,Error(u(152,a.displayName||a.name||\"Component\"));}return c(a,d)}}var Xg=Rg(!0),Yg=Rg(!1),Zg={},$g={current:Zg},ah={current:Zg},bh={current:Zg};\nfunction ch(a){if(a===Zg)throw Error(u(174));return a}function dh(a,b){I(bh,b);I(ah,a);I($g,Zg);a=b.nodeType;switch(a){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:Ob(null,\"\");break;default:a=8===a?b.parentNode:b,b=a.namespaceURI||null,a=a.tagName,b=Ob(b,a)}H($g);I($g,b)}function eh(){H($g);H(ah);H(bh)}function fh(a){ch(bh.current);var b=ch($g.current);var c=Ob(b,a.type);b!==c&&(I(ah,a),I($g,c))}function gh(a){ah.current===a&&(H($g),H(ah))}var M={current:0};\nfunction hh(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||c.data===Bd||c.data===Cd))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.effectTag&64))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}function ih(a,b){return{responder:a,props:b}}\nvar jh=Wa.ReactCurrentDispatcher,kh=Wa.ReactCurrentBatchConfig,lh=0,N=null,O=null,P=null,mh=!1;function Q(){throw Error(u(321));}function nh(a,b){if(null===b)return!1;for(var c=0;cf))throw Error(u(301));f+=1;P=O=null;b.updateQueue=null;jh.current=rh;a=c(d,e)}while(b.expirationTime===lh)}jh.current=sh;b=null!==O&&null!==O.next;lh=0;P=O=N=null;mh=!1;if(b)throw Error(u(300));return a}\nfunction th(){var a={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};null===P?N.memoizedState=P=a:P=P.next=a;return P}function uh(){if(null===O){var a=N.alternate;a=null!==a?a.memoizedState:null}else a=O.next;var b=null===P?N.memoizedState:P.next;if(null!==b)P=b,O=a;else{if(null===a)throw Error(u(310));O=a;a={memoizedState:O.memoizedState,baseState:O.baseState,baseQueue:O.baseQueue,queue:O.queue,next:null};null===P?N.memoizedState=P=a:P=P.next=a}return P}\nfunction vh(a,b){return\"function\"===typeof b?b(a):b}\nfunction wh(a){var b=uh(),c=b.queue;if(null===c)throw Error(u(311));c.lastRenderedReducer=a;var d=O,e=d.baseQueue,f=c.pending;if(null!==f){if(null!==e){var g=e.next;e.next=f.next;f.next=g}d.baseQueue=e=f;c.pending=null}if(null!==e){e=e.next;d=d.baseState;var h=g=f=null,k=e;do{var l=k.expirationTime;if(lN.expirationTime&&\n(N.expirationTime=l,Bg(l))}else null!==h&&(h=h.next={expirationTime:1073741823,suspenseConfig:k.suspenseConfig,action:k.action,eagerReducer:k.eagerReducer,eagerState:k.eagerState,next:null}),Ag(l,k.suspenseConfig),d=k.eagerReducer===a?k.eagerState:a(d,k.action);k=k.next}while(null!==k&&k!==e);null===h?f=d:h.next=g;$e(d,b.memoizedState)||(rg=!0);b.memoizedState=d;b.baseState=f;b.baseQueue=h;c.lastRenderedState=d}return[b.memoizedState,c.dispatch]}\nfunction xh(a){var b=uh(),c=b.queue;if(null===c)throw Error(u(311));c.lastRenderedReducer=a;var d=c.dispatch,e=c.pending,f=b.memoizedState;if(null!==e){c.pending=null;var g=e=e.next;do f=a(f,g.action),g=g.next;while(g!==e);$e(f,b.memoizedState)||(rg=!0);b.memoizedState=f;null===b.baseQueue&&(b.baseState=f);c.lastRenderedState=f}return[f,d]}\nfunction yh(a){var b=th();\"function\"===typeof a&&(a=a());b.memoizedState=b.baseState=a;a=b.queue={pending:null,dispatch:null,lastRenderedReducer:vh,lastRenderedState:a};a=a.dispatch=zh.bind(null,N,a);return[b.memoizedState,a]}function Ah(a,b,c,d){a={tag:a,create:b,destroy:c,deps:d,next:null};b=N.updateQueue;null===b?(b={lastEffect:null},N.updateQueue=b,b.lastEffect=a.next=a):(c=b.lastEffect,null===c?b.lastEffect=a.next=a:(d=c.next,c.next=a,a.next=d,b.lastEffect=a));return a}\nfunction Bh(){return uh().memoizedState}function Ch(a,b,c,d){var e=th();N.effectTag|=a;e.memoizedState=Ah(1|b,c,void 0,void 0===d?null:d)}function Dh(a,b,c,d){var e=uh();d=void 0===d?null:d;var f=void 0;if(null!==O){var g=O.memoizedState;f=g.destroy;if(null!==d&&nh(d,g.deps)){Ah(b,c,f,d);return}}N.effectTag|=a;e.memoizedState=Ah(1|b,c,f,d)}function Eh(a,b){return Ch(516,4,a,b)}function Fh(a,b){return Dh(516,4,a,b)}function Gh(a,b){return Dh(4,2,a,b)}\nfunction Hh(a,b){if(\"function\"===typeof b)return a=a(),b(a),function(){b(null)};if(null!==b&&void 0!==b)return a=a(),b.current=a,function(){b.current=null}}function Ih(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return Dh(4,2,Hh.bind(null,b,a),c)}function Jh(){}function Kh(a,b){th().memoizedState=[a,void 0===b?null:b];return a}function Lh(a,b){var c=uh();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&nh(b,d[1]))return d[0];c.memoizedState=[a,b];return a}\nfunction Mh(a,b){var c=uh();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&nh(b,d[1]))return d[0];a=a();c.memoizedState=[a,b];return a}function Nh(a,b,c){var d=ag();cg(98>d?98:d,function(){a(!0)});cg(97\\x3c/script>\",a=a.removeChild(a.firstChild)):\"string\"===typeof d.is?a=g.createElement(e,{is:d.is}):(a=g.createElement(e),\"select\"===e&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,e);a[Md]=b;a[Nd]=d;ni(a,b,!1,!1);b.stateNode=a;g=pd(e,d);switch(e){case \"iframe\":case \"object\":case \"embed\":F(\"load\",\na);h=d;break;case \"video\":case \"audio\":for(h=0;hd.tailExpiration&&1b)&&tj.set(a,b)))}}\nfunction xj(a,b){a.expirationTimea?c:a;return 2>=a&&b!==a?0:a}\nfunction Z(a){if(0!==a.lastExpiredTime)a.callbackExpirationTime=1073741823,a.callbackPriority=99,a.callbackNode=eg(yj.bind(null,a));else{var b=zj(a),c=a.callbackNode;if(0===b)null!==c&&(a.callbackNode=null,a.callbackExpirationTime=0,a.callbackPriority=90);else{var d=Gg();1073741823===b?d=99:1===b||2===b?d=95:(d=10*(1073741821-b)-10*(1073741821-d),d=0>=d?99:250>=d?98:5250>=d?97:95);if(null!==c){var e=a.callbackPriority;if(a.callbackExpirationTime===b&&e>=d)return;c!==Tf&&Kf(c)}a.callbackExpirationTime=\nb;a.callbackPriority=d;b=1073741823===b?eg(yj.bind(null,a)):dg(d,Bj.bind(null,a),{timeout:10*(1073741821-b)-$f()});a.callbackNode=b}}}\nfunction Bj(a,b){wj=0;if(b)return b=Gg(),Cj(a,b),Z(a),null;var c=zj(a);if(0!==c){b=a.callbackNode;if((W&(fj|gj))!==V)throw Error(u(327));Dj();a===T&&c===U||Ej(a,c);if(null!==X){var d=W;W|=fj;var e=Fj();do try{Gj();break}catch(h){Hj(a,h)}while(1);ng();W=d;cj.current=e;if(S===hj)throw b=kj,Ej(a,c),xi(a,c),Z(a),b;if(null===X)switch(e=a.finishedWork=a.current.alternate,a.finishedExpirationTime=c,d=S,T=null,d){case ti:case hj:throw Error(u(345));case ij:Cj(a,2=c){a.lastPingedTime=c;Ej(a,c);break}}f=zj(a);if(0!==f&&f!==c)break;if(0!==d&&d!==c){a.lastPingedTime=d;break}a.timeoutHandle=Hd(Jj.bind(null,a),e);break}Jj(a);break;case vi:xi(a,c);d=a.lastSuspendedTime;c===d&&(a.nextKnownPendingLevel=Ij(e));if(oj&&(e=a.lastPingedTime,0===e||e>=c)){a.lastPingedTime=c;Ej(a,c);break}e=zj(a);if(0!==e&&e!==c)break;if(0!==d&&d!==c){a.lastPingedTime=\nd;break}1073741823!==mj?d=10*(1073741821-mj)-$f():1073741823===lj?d=0:(d=10*(1073741821-lj)-5E3,e=$f(),c=10*(1073741821-c)-e,d=e-d,0>d&&(d=0),d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*bj(d/1960))-d,c=d?d=0:(e=g.busyDelayMs|0,f=$f()-(10*(1073741821-f)-(g.timeoutMs|0||5E3)),d=f<=e?0:e+d-f);if(10 component higher in the tree to provide a loading indicator or placeholder to display.\"+qb(g))}S!==\njj&&(S=ij);h=Ai(h,g);p=f;do{switch(p.tag){case 3:k=h;p.effectTag|=4096;p.expirationTime=b;var B=Xi(p,k,b);yg(p,B);break a;case 1:k=h;var w=p.type,ub=p.stateNode;if(0===(p.effectTag&64)&&(\"function\"===typeof w.getDerivedStateFromError||null!==ub&&\"function\"===typeof ub.componentDidCatch&&(null===aj||!aj.has(ub)))){p.effectTag|=4096;p.expirationTime=b;var vb=$i(p,k,b);yg(p,vb);break a}}p=p.return}while(null!==p)}X=Pj(X)}catch(Xc){b=Xc;continue}break}while(1)}\nfunction Fj(){var a=cj.current;cj.current=sh;return null===a?sh:a}function Ag(a,b){awi&&(wi=a)}function Kj(){for(;null!==X;)X=Qj(X)}function Gj(){for(;null!==X&&!Uf();)X=Qj(X)}function Qj(a){var b=Rj(a.alternate,a,U);a.memoizedProps=a.pendingProps;null===b&&(b=Pj(a));dj.current=null;return b}\nfunction Pj(a){X=a;do{var b=X.alternate;a=X.return;if(0===(X.effectTag&2048)){b=si(b,X,U);if(1===U||1!==X.childExpirationTime){for(var c=0,d=X.child;null!==d;){var e=d.expirationTime,f=d.childExpirationTime;e>c&&(c=e);f>c&&(c=f);d=d.sibling}X.childExpirationTime=c}if(null!==b)return b;null!==a&&0===(a.effectTag&2048)&&(null===a.firstEffect&&(a.firstEffect=X.firstEffect),null!==X.lastEffect&&(null!==a.lastEffect&&(a.lastEffect.nextEffect=X.firstEffect),a.lastEffect=X.lastEffect),1a?b:a}function Jj(a){var b=ag();cg(99,Sj.bind(null,a,b));return null}\nfunction Sj(a,b){do Dj();while(null!==rj);if((W&(fj|gj))!==V)throw Error(u(327));var c=a.finishedWork,d=a.finishedExpirationTime;if(null===c)return null;a.finishedWork=null;a.finishedExpirationTime=0;if(c===a.current)throw Error(u(177));a.callbackNode=null;a.callbackExpirationTime=0;a.callbackPriority=90;a.nextKnownPendingLevel=0;var e=Ij(c);a.firstPendingTime=e;d<=a.lastSuspendedTime?a.firstSuspendedTime=a.lastSuspendedTime=a.nextKnownPendingLevel=0:d<=a.firstSuspendedTime&&(a.firstSuspendedTime=\nd-1);d<=a.lastPingedTime&&(a.lastPingedTime=0);d<=a.lastExpiredTime&&(a.lastExpiredTime=0);a===T&&(X=T=null,U=0);1h&&(l=h,h=g,g=l),l=vd(q,g),m=vd(q,h),l&&m&&(1!==w.rangeCount||w.anchorNode!==l.node||w.anchorOffset!==l.offset||w.focusNode!==m.node||w.focusOffset!==m.offset)&&(B=B.createRange(),B.setStart(l.node,l.offset),w.removeAllRanges(),g>h?(w.addRange(B),w.extend(m.node,m.offset)):(B.setEnd(m.node,m.offset),w.addRange(B))))));B=[];for(w=q;w=w.parentNode;)1===w.nodeType&&B.push({element:w,left:w.scrollLeft,\ntop:w.scrollTop});\"function\"===typeof q.focus&&q.focus();for(q=0;q=c)return ji(a,b,c);I(M,M.current&1);b=$h(a,b,c);return null!==b?b.sibling:null}I(M,M.current&1);break;case 19:d=b.childExpirationTime>=c;if(0!==(a.effectTag&64)){if(d)return mi(a,b,c);b.effectTag|=64}e=b.memoizedState;null!==e&&(e.rendering=null,e.tail=null);I(M,M.current);if(!d)return null}return $h(a,b,c)}rg=!1}}else rg=!1;b.expirationTime=0;switch(b.tag){case 2:d=b.type;null!==a&&(a.alternate=null,b.alternate=null,b.effectTag|=2);a=b.pendingProps;e=Cf(b,J.current);qg(b,c);e=oh(null,\nb,d,a,e,c);b.effectTag|=1;if(\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof){b.tag=1;b.memoizedState=null;b.updateQueue=null;if(L(d)){var f=!0;Gf(b)}else f=!1;b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null;ug(b);var g=d.getDerivedStateFromProps;\"function\"===typeof g&&Fg(b,d,g,a);e.updater=Jg;b.stateNode=e;e._reactInternalFiber=b;Ng(b,d,a,c);b=gi(null,b,d,!0,f,c)}else b.tag=0,R(null,b,e,c),b=b.child;return b;case 16:a:{e=b.elementType;null!==a&&(a.alternate=\nnull,b.alternate=null,b.effectTag|=2);a=b.pendingProps;ob(e);if(1!==e._status)throw e._result;e=e._result;b.type=e;f=b.tag=Xj(e);a=ig(e,a);switch(f){case 0:b=di(null,b,e,a,c);break a;case 1:b=fi(null,b,e,a,c);break a;case 11:b=Zh(null,b,e,a,c);break a;case 14:b=ai(null,b,e,ig(e.type,a),d,c);break a}throw Error(u(306,e,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),di(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),fi(a,b,d,e,c);\ncase 3:hi(b);d=b.updateQueue;if(null===a||null===d)throw Error(u(282));d=b.pendingProps;e=b.memoizedState;e=null!==e?e.element:null;vg(a,b);zg(b,d,null,c);d=b.memoizedState.element;if(d===e)Xh(),b=$h(a,b,c);else{if(e=b.stateNode.hydrate)Ph=Jd(b.stateNode.containerInfo.firstChild),Oh=b,e=Qh=!0;if(e)for(c=Yg(b,null,d,c),b.child=c;c;)c.effectTag=c.effectTag&-3|1024,c=c.sibling;else R(a,b,d,c),Xh();b=b.child}return b;case 5:return fh(b),null===a&&Uh(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:\nnull,g=e.children,Gd(d,e)?g=null:null!==f&&Gd(d,f)&&(b.effectTag|=16),ei(a,b),b.mode&4&&1!==c&&e.hidden?(b.expirationTime=b.childExpirationTime=1,b=null):(R(a,b,g,c),b=b.child),b;case 6:return null===a&&Uh(b),null;case 13:return ji(a,b,c);case 4:return dh(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Xg(b,null,d,c):R(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),Zh(a,b,d,e,c);case 7:return R(a,b,b.pendingProps,c),b.child;case 8:return R(a,\nb,b.pendingProps.children,c),b.child;case 12:return R(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;g=b.memoizedProps;f=e.value;var h=b.type._context;I(jg,h._currentValue);h._currentValue=f;if(null!==g)if(h=g.value,f=$e(h,f)?0:(\"function\"===typeof d._calculateChangedBits?d._calculateChangedBits(h,f):1073741823)|0,0===f){if(g.children===e.children&&!K.current){b=$h(a,b,c);break a}}else for(h=b.child,null!==h&&(h.return=b);null!==h;){var k=h.dependencies;if(null!==\nk){g=h.child;for(var l=k.firstContext;null!==l;){if(l.context===d&&0!==(l.observedBits&f)){1===h.tag&&(l=wg(c,null),l.tag=2,xg(h,l));h.expirationTime=b&&a<=b}function xi(a,b){var c=a.firstSuspendedTime,d=a.lastSuspendedTime;cb||0===c)a.lastSuspendedTime=b;b<=a.lastPingedTime&&(a.lastPingedTime=0);b<=a.lastExpiredTime&&(a.lastExpiredTime=0)}\nfunction yi(a,b){b>a.firstPendingTime&&(a.firstPendingTime=b);var c=a.firstSuspendedTime;0!==c&&(b>=c?a.firstSuspendedTime=a.lastSuspendedTime=a.nextKnownPendingLevel=0:b>=a.lastSuspendedTime&&(a.lastSuspendedTime=b+1),b>a.nextKnownPendingLevel&&(a.nextKnownPendingLevel=b))}function Cj(a,b){var c=a.lastExpiredTime;if(0===c||c>b)a.lastExpiredTime=b}\nfunction bk(a,b,c,d){var e=b.current,f=Gg(),g=Dg.suspense;f=Hg(f,e,g);a:if(c){c=c._reactInternalFiber;b:{if(dc(c)!==c||1!==c.tag)throw Error(u(170));var h=c;do{switch(h.tag){case 3:h=h.stateNode.context;break b;case 1:if(L(h.type)){h=h.stateNode.__reactInternalMemoizedMergedChildContext;break b}}h=h.return}while(null!==h);throw Error(u(171));}if(1===c.tag){var k=c.type;if(L(k)){c=Ff(c,k,h);break a}}c=h}else c=Af;null===b.context?b.context=c:b.pendingContext=c;b=wg(f,g);b.payload={element:a};d=void 0===\nd?null:d;null!==d&&(b.callback=d);xg(e,b);Ig(e,f);return f}function ck(a){a=a.current;if(!a.child)return null;switch(a.child.tag){case 5:return a.child.stateNode;default:return a.child.stateNode}}function dk(a,b){a=a.memoizedState;null!==a&&null!==a.dehydrated&&a.retryTime result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n defineProperty(this, \"_invoke\", { value: enqueue });\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per GeneratorResume behavior specified since ES2015:\n // ES2015 spec, step 3: https://262.ecma-international.org/6.0/#sec-generatorresume\n // Latest spec, step 2: https://tc39.es/ecma262/#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var methodName = context.method;\n var method = delegate.iterator[methodName];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method, or a missing .next method, always terminate the\n // yield* loop.\n context.delegate = null;\n\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (methodName === \"throw\" && delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n if (methodName !== \"return\") {\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a '\" + methodName + \"' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(val) {\n var object = Object(val);\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable != null) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n throw new TypeError(typeof iterable + \" is not iterable\");\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n if (process.env.NODE_ENV !== 'production') {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n }\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error(\n 'Minified exception occurred; use the non-minified dev environment ' +\n 'for the full error message and additional helpful warnings.'\n );\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(\n format.replace(/%s/g, function() { return args[argIndex++]; })\n );\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n};\n\nmodule.exports = invariant;\n","// @flow\n'use strict';\n\nvar key = '__global_unique_id__';\n\nmodule.exports = function() {\n return global[key] = (global[key] || 0) + 1;\n};\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar __DEV__ = process.env.NODE_ENV !== 'production';\n\nvar warning = function() {};\n\nif (__DEV__) {\n var printWarning = function printWarning(format, args) {\n var len = arguments.length;\n args = new Array(len > 1 ? len - 1 : 0);\n for (var key = 1; key < len; key++) {\n args[key - 1] = arguments[key];\n }\n var argIndex = 0;\n var message = 'Warning: ' +\n format.replace(/%s/g, function() {\n return args[argIndex++];\n });\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n }\n\n warning = function(condition, format, args) {\n var len = arguments.length;\n args = new Array(len > 2 ? len - 2 : 0);\n for (var key = 2; key < len; key++) {\n args[key - 2] = arguments[key];\n }\n if (format === undefined) {\n throw new Error(\n '`warning(condition, format, ...args)` requires a warning ' +\n 'message argument'\n );\n }\n if (!condition) {\n printWarning.apply(null, [format].concat(args));\n }\n };\n}\n\nmodule.exports = warning;\n","'use strict';\n\nexports.__esModule = true;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _gud = require('gud');\n\nvar _gud2 = _interopRequireDefault(_gud);\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar MAX_SIGNED_31_BIT_INT = 1073741823;\n\n// Inlined Object.is polyfill.\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\nfunction objectIs(x, y) {\n if (x === y) {\n return x !== 0 || 1 / x === 1 / y;\n } else {\n return x !== x && y !== y;\n }\n}\n\nfunction createEventEmitter(value) {\n var handlers = [];\n return {\n on: function on(handler) {\n handlers.push(handler);\n },\n off: function off(handler) {\n handlers = handlers.filter(function (h) {\n return h !== handler;\n });\n },\n get: function get() {\n return value;\n },\n set: function set(newValue, changedBits) {\n value = newValue;\n handlers.forEach(function (handler) {\n return handler(value, changedBits);\n });\n }\n };\n}\n\nfunction onlyChild(children) {\n return Array.isArray(children) ? children[0] : children;\n}\n\nfunction createReactContext(defaultValue, calculateChangedBits) {\n var _Provider$childContex, _Consumer$contextType;\n\n var contextProp = '__create-react-context-' + (0, _gud2.default)() + '__';\n\n var Provider = function (_Component) {\n _inherits(Provider, _Component);\n\n function Provider() {\n var _temp, _this, _ret;\n\n _classCallCheck(this, Provider);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, _Component.call.apply(_Component, [this].concat(args))), _this), _this.emitter = createEventEmitter(_this.props.value), _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n Provider.prototype.getChildContext = function getChildContext() {\n var _ref;\n\n return _ref = {}, _ref[contextProp] = this.emitter, _ref;\n };\n\n Provider.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n if (this.props.value !== nextProps.value) {\n var oldValue = this.props.value;\n var newValue = nextProps.value;\n var changedBits = void 0;\n\n if (objectIs(oldValue, newValue)) {\n changedBits = 0; // No change\n } else {\n changedBits = typeof calculateChangedBits === 'function' ? calculateChangedBits(oldValue, newValue) : MAX_SIGNED_31_BIT_INT;\n if (process.env.NODE_ENV !== 'production') {\n (0, _warning2.default)((changedBits & MAX_SIGNED_31_BIT_INT) === changedBits, 'calculateChangedBits: Expected the return value to be a ' + '31-bit integer. Instead received: %s', changedBits);\n }\n\n changedBits |= 0;\n\n if (changedBits !== 0) {\n this.emitter.set(nextProps.value, changedBits);\n }\n }\n }\n };\n\n Provider.prototype.render = function render() {\n return this.props.children;\n };\n\n return Provider;\n }(_react.Component);\n\n Provider.childContextTypes = (_Provider$childContex = {}, _Provider$childContex[contextProp] = _propTypes2.default.object.isRequired, _Provider$childContex);\n\n var Consumer = function (_Component2) {\n _inherits(Consumer, _Component2);\n\n function Consumer() {\n var _temp2, _this2, _ret2;\n\n _classCallCheck(this, Consumer);\n\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return _ret2 = (_temp2 = (_this2 = _possibleConstructorReturn(this, _Component2.call.apply(_Component2, [this].concat(args))), _this2), _this2.state = {\n value: _this2.getValue()\n }, _this2.onUpdate = function (newValue, changedBits) {\n var observedBits = _this2.observedBits | 0;\n if ((observedBits & changedBits) !== 0) {\n _this2.setState({ value: _this2.getValue() });\n }\n }, _temp2), _possibleConstructorReturn(_this2, _ret2);\n }\n\n Consumer.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n var observedBits = nextProps.observedBits;\n\n this.observedBits = observedBits === undefined || observedBits === null ? MAX_SIGNED_31_BIT_INT // Subscribe to all changes by default\n : observedBits;\n };\n\n Consumer.prototype.componentDidMount = function componentDidMount() {\n if (this.context[contextProp]) {\n this.context[contextProp].on(this.onUpdate);\n }\n var observedBits = this.props.observedBits;\n\n this.observedBits = observedBits === undefined || observedBits === null ? MAX_SIGNED_31_BIT_INT // Subscribe to all changes by default\n : observedBits;\n };\n\n Consumer.prototype.componentWillUnmount = function componentWillUnmount() {\n if (this.context[contextProp]) {\n this.context[contextProp].off(this.onUpdate);\n }\n };\n\n Consumer.prototype.getValue = function getValue() {\n if (this.context[contextProp]) {\n return this.context[contextProp].get();\n } else {\n return defaultValue;\n }\n };\n\n Consumer.prototype.render = function render() {\n return onlyChild(this.props.children)(this.state.value);\n };\n\n return Consumer;\n }(_react.Component);\n\n Consumer.contextTypes = (_Consumer$contextType = {}, _Consumer$contextType[contextProp] = _propTypes2.default.object, _Consumer$contextType);\n\n\n return {\n Provider: Provider,\n Consumer: Consumer\n };\n}\n\nexports.default = createReactContext;\nmodule.exports = exports['default'];","'use strict';\n\nexports.__esModule = true;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _implementation = require('./implementation');\n\nvar _implementation2 = _interopRequireDefault(_implementation);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _react2.default.createContext || _implementation2.default;\nmodule.exports = exports['default'];","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nfunction componentWillMount() {\n // Call this.constructor.gDSFP to support sub-classes.\n var state = this.constructor.getDerivedStateFromProps(this.props, this.state);\n if (state !== null && state !== undefined) {\n this.setState(state);\n }\n}\n\nfunction componentWillReceiveProps(nextProps) {\n // Call this.constructor.gDSFP to support sub-classes.\n // Use the setState() updater to ensure state isn't stale in certain edge cases.\n function updater(prevState) {\n var state = this.constructor.getDerivedStateFromProps(nextProps, prevState);\n return state !== null && state !== undefined ? state : null;\n }\n // Binding \"this\" is important for shallow renderer support.\n this.setState(updater.bind(this));\n}\n\nfunction componentWillUpdate(nextProps, nextState) {\n try {\n var prevProps = this.props;\n var prevState = this.state;\n this.props = nextProps;\n this.state = nextState;\n this.__reactInternalSnapshotFlag = true;\n this.__reactInternalSnapshot = this.getSnapshotBeforeUpdate(\n prevProps,\n prevState\n );\n } finally {\n this.props = prevProps;\n this.state = prevState;\n }\n}\n\n// React may warn about cWM/cWRP/cWU methods being deprecated.\n// Add a flag to suppress these warnings for this special case.\ncomponentWillMount.__suppressDeprecationWarning = true;\ncomponentWillReceiveProps.__suppressDeprecationWarning = true;\ncomponentWillUpdate.__suppressDeprecationWarning = true;\n\nfunction polyfill(Component) {\n var prototype = Component.prototype;\n\n if (!prototype || !prototype.isReactComponent) {\n throw new Error('Can only polyfill class components');\n }\n\n if (\n typeof Component.getDerivedStateFromProps !== 'function' &&\n typeof prototype.getSnapshotBeforeUpdate !== 'function'\n ) {\n return Component;\n }\n\n // If new component APIs are defined, \"unsafe\" lifecycles won't be called.\n // Error if any of these lifecycles are present,\n // Because they would work differently between older and newer (16.3+) versions of React.\n var foundWillMountName = null;\n var foundWillReceivePropsName = null;\n var foundWillUpdateName = null;\n if (typeof prototype.componentWillMount === 'function') {\n foundWillMountName = 'componentWillMount';\n } else if (typeof prototype.UNSAFE_componentWillMount === 'function') {\n foundWillMountName = 'UNSAFE_componentWillMount';\n }\n if (typeof prototype.componentWillReceiveProps === 'function') {\n foundWillReceivePropsName = 'componentWillReceiveProps';\n } else if (typeof prototype.UNSAFE_componentWillReceiveProps === 'function') {\n foundWillReceivePropsName = 'UNSAFE_componentWillReceiveProps';\n }\n if (typeof prototype.componentWillUpdate === 'function') {\n foundWillUpdateName = 'componentWillUpdate';\n } else if (typeof prototype.UNSAFE_componentWillUpdate === 'function') {\n foundWillUpdateName = 'UNSAFE_componentWillUpdate';\n }\n if (\n foundWillMountName !== null ||\n foundWillReceivePropsName !== null ||\n foundWillUpdateName !== null\n ) {\n var componentName = Component.displayName || Component.name;\n var newApiName =\n typeof Component.getDerivedStateFromProps === 'function'\n ? 'getDerivedStateFromProps()'\n : 'getSnapshotBeforeUpdate()';\n\n throw Error(\n 'Unsafe legacy lifecycles will not be called for components using new component APIs.\\n\\n' +\n componentName +\n ' uses ' +\n newApiName +\n ' but also contains the following legacy lifecycles:' +\n (foundWillMountName !== null ? '\\n ' + foundWillMountName : '') +\n (foundWillReceivePropsName !== null\n ? '\\n ' + foundWillReceivePropsName\n : '') +\n (foundWillUpdateName !== null ? '\\n ' + foundWillUpdateName : '') +\n '\\n\\nThe above lifecycles should be removed. Learn more about this warning here:\\n' +\n 'https://fb.me/react-async-component-lifecycle-hooks'\n );\n }\n\n // React <= 16.2 does not support static getDerivedStateFromProps.\n // As a workaround, use cWM and cWRP to invoke the new static lifecycle.\n // Newer versions of React will ignore these lifecycles if gDSFP exists.\n if (typeof Component.getDerivedStateFromProps === 'function') {\n prototype.componentWillMount = componentWillMount;\n prototype.componentWillReceiveProps = componentWillReceiveProps;\n }\n\n // React <= 16.2 does not support getSnapshotBeforeUpdate.\n // As a workaround, use cWU to invoke the new lifecycle.\n // Newer versions of React will ignore that lifecycle if gSBU exists.\n if (typeof prototype.getSnapshotBeforeUpdate === 'function') {\n if (typeof prototype.componentDidUpdate !== 'function') {\n throw new Error(\n 'Cannot polyfill getSnapshotBeforeUpdate() for components that do not define componentDidUpdate() on the prototype'\n );\n }\n\n prototype.componentWillUpdate = componentWillUpdate;\n\n var componentDidUpdate = prototype.componentDidUpdate;\n\n prototype.componentDidUpdate = function componentDidUpdatePolyfill(\n prevProps,\n prevState,\n maybeSnapshot\n ) {\n // 16.3+ will not execute our will-update method;\n // It will pass a snapshot value to did-update though.\n // Older versions will require our polyfilled will-update value.\n // We need to handle both cases, but can't just check for the presence of \"maybeSnapshot\",\n // Because for <= 15.x versions this might be a \"prevContext\" object.\n // We also can't just check \"__reactInternalSnapshot\",\n // Because get-snapshot might return a falsy value.\n // So check for the explicit __reactInternalSnapshotFlag flag to determine behavior.\n var snapshot = this.__reactInternalSnapshotFlag\n ? this.__reactInternalSnapshot\n : maybeSnapshot;\n\n componentDidUpdate.call(this, prevProps, prevState, snapshot);\n };\n }\n\n return Component;\n}\n\nexport { polyfill };\n","import invariant from \"invariant\";\n\n////////////////////////////////////////////////////////////////////////////////\n// startsWith(string, search) - Check if `string` starts with `search`\nvar startsWith = function startsWith(string, search) {\n return string.substr(0, search.length) === search;\n};\n\n////////////////////////////////////////////////////////////////////////////////\n// pick(routes, uri)\n//\n// Ranks and picks the best route to match. Each segment gets the highest\n// amount of points, then the type of segment gets an additional amount of\n// points where\n//\n// static > dynamic > splat > root\n//\n// This way we don't have to worry about the order of our routes, let the\n// computers do it.\n//\n// A route looks like this\n//\n// { path, default, value }\n//\n// And a returned match looks like:\n//\n// { route, params, uri }\n//\n// I know, I should use TypeScript not comments for these types.\nvar pick = function pick(routes, uri) {\n var match = void 0;\n var default_ = void 0;\n\n var _uri$split = uri.split(\"?\"),\n uriPathname = _uri$split[0];\n\n var uriSegments = segmentize(uriPathname);\n var isRootUri = uriSegments[0] === \"\";\n var ranked = rankRoutes(routes);\n\n for (var i = 0, l = ranked.length; i < l; i++) {\n var missed = false;\n var route = ranked[i].route;\n\n if (route.default) {\n default_ = {\n route: route,\n params: {},\n uri: uri\n };\n continue;\n }\n\n var routeSegments = segmentize(route.path);\n var params = {};\n var max = Math.max(uriSegments.length, routeSegments.length);\n var index = 0;\n\n for (; index < max; index++) {\n var routeSegment = routeSegments[index];\n var uriSegment = uriSegments[index];\n\n if (isSplat(routeSegment)) {\n // Hit a splat, just grab the rest, and return a match\n // uri: /files/documents/work\n // route: /files/*\n var param = routeSegment.slice(1) || \"*\";\n params[param] = uriSegments.slice(index).map(decodeURIComponent).join(\"/\");\n break;\n }\n\n if (uriSegment === undefined) {\n // URI is shorter than the route, no match\n // uri: /users\n // route: /users/:userId\n missed = true;\n break;\n }\n\n var dynamicMatch = paramRe.exec(routeSegment);\n\n if (dynamicMatch && !isRootUri) {\n var matchIsNotReserved = reservedNames.indexOf(dynamicMatch[1]) === -1;\n !matchIsNotReserved ? process.env.NODE_ENV !== \"production\" ? invariant(false, \" dynamic segment \\\"\" + dynamicMatch[1] + \"\\\" is a reserved name. Please use a different name in path \\\"\" + route.path + \"\\\".\") : invariant(false) : void 0;\n var value = decodeURIComponent(uriSegment);\n params[dynamicMatch[1]] = value;\n } else if (routeSegment !== uriSegment) {\n // Current segments don't match, not dynamic, not splat, so no match\n // uri: /users/123/settings\n // route: /users/:id/profile\n missed = true;\n break;\n }\n }\n\n if (!missed) {\n match = {\n route: route,\n params: params,\n uri: \"/\" + uriSegments.slice(0, index).join(\"/\")\n };\n break;\n }\n }\n\n return match || default_ || null;\n};\n\n////////////////////////////////////////////////////////////////////////////////\n// match(path, uri) - Matches just one path to a uri, also lol\nvar match = function match(path, uri) {\n return pick([{ path: path }], uri);\n};\n\n////////////////////////////////////////////////////////////////////////////////\n// resolve(to, basepath)\n//\n// Resolves URIs as though every path is a directory, no files. Relative URIs\n// in the browser can feel awkward because not only can you be \"in a directory\"\n// you can be \"at a file\", too. For example\n//\n// browserSpecResolve('foo', '/bar/') => /bar/foo\n// browserSpecResolve('foo', '/bar') => /foo\n//\n// But on the command line of a file system, it's not as complicated, you can't\n// `cd` from a file, only directories. This way, links have to know less about\n// their current path. To go deeper you can do this:\n//\n// \n// // instead of\n// \n//\n// Just like `cd`, if you want to go deeper from the command line, you do this:\n//\n// cd deeper\n// # not\n// cd $(pwd)/deeper\n//\n// By treating every path as a directory, linking to relative paths should\n// require less contextual information and (fingers crossed) be more intuitive.\nvar resolve = function resolve(to, base) {\n // /foo/bar, /baz/qux => /foo/bar\n if (startsWith(to, \"/\")) {\n return to;\n }\n\n var _to$split = to.split(\"?\"),\n toPathname = _to$split[0],\n toQuery = _to$split[1];\n\n var _base$split = base.split(\"?\"),\n basePathname = _base$split[0];\n\n var toSegments = segmentize(toPathname);\n var baseSegments = segmentize(basePathname);\n\n // ?a=b, /users?b=c => /users?a=b\n if (toSegments[0] === \"\") {\n return addQuery(basePathname, toQuery);\n }\n\n // profile, /users/789 => /users/789/profile\n if (!startsWith(toSegments[0], \".\")) {\n var pathname = baseSegments.concat(toSegments).join(\"/\");\n return addQuery((basePathname === \"/\" ? \"\" : \"/\") + pathname, toQuery);\n }\n\n // ./ /users/123 => /users/123\n // ../ /users/123 => /users\n // ../.. /users/123 => /\n // ../../one /a/b/c/d => /a/b/one\n // .././one /a/b/c/d => /a/b/c/one\n var allSegments = baseSegments.concat(toSegments);\n var segments = [];\n for (var i = 0, l = allSegments.length; i < l; i++) {\n var segment = allSegments[i];\n if (segment === \"..\") segments.pop();else if (segment !== \".\") segments.push(segment);\n }\n\n return addQuery(\"/\" + segments.join(\"/\"), toQuery);\n};\n\n////////////////////////////////////////////////////////////////////////////////\n// insertParams(path, params)\n\nvar insertParams = function insertParams(path, params) {\n var _path$split = path.split(\"?\"),\n pathBase = _path$split[0],\n _path$split$ = _path$split[1],\n query = _path$split$ === undefined ? \"\" : _path$split$;\n\n var segments = segmentize(pathBase);\n var constructedPath = \"/\" + segments.map(function (segment) {\n var match = paramRe.exec(segment);\n return match ? params[match[1]] : segment;\n }).join(\"/\");\n var _params$location = params.location;\n _params$location = _params$location === undefined ? {} : _params$location;\n var _params$location$sear = _params$location.search,\n search = _params$location$sear === undefined ? \"\" : _params$location$sear;\n\n var searchSplit = search.split(\"?\")[1] || \"\";\n constructedPath = addQuery(constructedPath, query, searchSplit);\n return constructedPath;\n};\n\nvar validateRedirect = function validateRedirect(from, to) {\n var filter = function filter(segment) {\n return isDynamic(segment);\n };\n var fromString = segmentize(from).filter(filter).sort().join(\"/\");\n var toString = segmentize(to).filter(filter).sort().join(\"/\");\n return fromString === toString;\n};\n\n////////////////////////////////////////////////////////////////////////////////\n// Junk\nvar paramRe = /^:(.+)/;\n\nvar SEGMENT_POINTS = 4;\nvar STATIC_POINTS = 3;\nvar DYNAMIC_POINTS = 2;\nvar SPLAT_PENALTY = 1;\nvar ROOT_POINTS = 1;\n\nvar isRootSegment = function isRootSegment(segment) {\n return segment === \"\";\n};\nvar isDynamic = function isDynamic(segment) {\n return paramRe.test(segment);\n};\nvar isSplat = function isSplat(segment) {\n return segment && segment[0] === \"*\";\n};\n\nvar rankRoute = function rankRoute(route, index) {\n var score = route.default ? 0 : segmentize(route.path).reduce(function (score, segment) {\n score += SEGMENT_POINTS;\n if (isRootSegment(segment)) score += ROOT_POINTS;else if (isDynamic(segment)) score += DYNAMIC_POINTS;else if (isSplat(segment)) score -= SEGMENT_POINTS + SPLAT_PENALTY;else score += STATIC_POINTS;\n return score;\n }, 0);\n return { route: route, score: score, index: index };\n};\n\nvar rankRoutes = function rankRoutes(routes) {\n return routes.map(rankRoute).sort(function (a, b) {\n return a.score < b.score ? 1 : a.score > b.score ? -1 : a.index - b.index;\n });\n};\n\nvar segmentize = function segmentize(uri) {\n return uri\n // strip starting/ending slashes\n .replace(/(^\\/+|\\/+$)/g, \"\").split(\"/\");\n};\n\nvar addQuery = function addQuery(pathname) {\n for (var _len = arguments.length, query = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n query[_key - 1] = arguments[_key];\n }\n\n query = query.filter(function (q) {\n return q && q.length > 0;\n });\n return pathname + (query && query.length > 0 ? \"?\" + query.join(\"&\") : \"\");\n};\n\nvar reservedNames = [\"uri\", \"path\"];\n\n/**\n * Shallow compares two objects.\n * @param {Object} obj1 The first object to compare.\n * @param {Object} obj2 The second object to compare.\n */\nvar shallowCompare = function shallowCompare(obj1, obj2) {\n var obj1Keys = Object.keys(obj1);\n return obj1Keys.length === Object.keys(obj2).length && obj1Keys.every(function (key) {\n return obj2.hasOwnProperty(key) && obj1[key] === obj2[key];\n });\n};\n\n////////////////////////////////////////////////////////////////////////////////\nexport { startsWith, pick, match, resolve, insertParams, validateRedirect, shallowCompare };","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar getLocation = function getLocation(source) {\n var _source$location = source.location,\n search = _source$location.search,\n hash = _source$location.hash,\n href = _source$location.href,\n origin = _source$location.origin,\n protocol = _source$location.protocol,\n host = _source$location.host,\n hostname = _source$location.hostname,\n port = _source$location.port;\n var pathname = source.location.pathname;\n\n\n if (!pathname && href && canUseDOM) {\n var url = new URL(href);\n pathname = url.pathname;\n }\n\n return {\n pathname: encodeURI(decodeURI(pathname)),\n search: search,\n hash: hash,\n href: href,\n origin: origin,\n protocol: protocol,\n host: host,\n hostname: hostname,\n port: port,\n state: source.history.state,\n key: source.history.state && source.history.state.key || \"initial\"\n };\n};\n\nvar createHistory = function createHistory(source, options) {\n var listeners = [];\n var location = getLocation(source);\n var transitioning = false;\n var resolveTransition = function resolveTransition() {};\n\n return {\n get location() {\n return location;\n },\n\n get transitioning() {\n return transitioning;\n },\n\n _onTransitionComplete: function _onTransitionComplete() {\n transitioning = false;\n resolveTransition();\n },\n listen: function listen(listener) {\n listeners.push(listener);\n\n var popstateListener = function popstateListener() {\n location = getLocation(source);\n listener({ location: location, action: \"POP\" });\n };\n\n source.addEventListener(\"popstate\", popstateListener);\n\n return function () {\n source.removeEventListener(\"popstate\", popstateListener);\n listeners = listeners.filter(function (fn) {\n return fn !== listener;\n });\n };\n },\n navigate: function navigate(to) {\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n state = _ref.state,\n _ref$replace = _ref.replace,\n replace = _ref$replace === undefined ? false : _ref$replace;\n\n if (typeof to === \"number\") {\n source.history.go(to);\n } else {\n state = _extends({}, state, { key: Date.now() + \"\" });\n // try...catch iOS Safari limits to 100 pushState calls\n try {\n if (transitioning || replace) {\n source.history.replaceState(state, null, to);\n } else {\n source.history.pushState(state, null, to);\n }\n } catch (e) {\n source.location[replace ? \"replace\" : \"assign\"](to);\n }\n }\n\n location = getLocation(source);\n transitioning = true;\n var transition = new Promise(function (res) {\n return resolveTransition = res;\n });\n listeners.forEach(function (listener) {\n return listener({ location: location, action: \"PUSH\" });\n });\n return transition;\n }\n };\n};\n\n////////////////////////////////////////////////////////////////////////////////\n// Stores history entries in memory for testing or other platforms like Native\nvar createMemorySource = function createMemorySource() {\n var initialPath = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"/\";\n\n var searchIndex = initialPath.indexOf(\"?\");\n var initialLocation = {\n pathname: searchIndex > -1 ? initialPath.substr(0, searchIndex) : initialPath,\n search: searchIndex > -1 ? initialPath.substr(searchIndex) : \"\"\n };\n var index = 0;\n var stack = [initialLocation];\n var states = [null];\n\n return {\n get location() {\n return stack[index];\n },\n addEventListener: function addEventListener(name, fn) {},\n removeEventListener: function removeEventListener(name, fn) {},\n\n history: {\n get entries() {\n return stack;\n },\n get index() {\n return index;\n },\n get state() {\n return states[index];\n },\n pushState: function pushState(state, _, uri) {\n var _uri$split = uri.split(\"?\"),\n pathname = _uri$split[0],\n _uri$split$ = _uri$split[1],\n search = _uri$split$ === undefined ? \"\" : _uri$split$;\n\n index++;\n stack.push({ pathname: pathname, search: search.length ? \"?\" + search : search });\n states.push(state);\n },\n replaceState: function replaceState(state, _, uri) {\n var _uri$split2 = uri.split(\"?\"),\n pathname = _uri$split2[0],\n _uri$split2$ = _uri$split2[1],\n search = _uri$split2$ === undefined ? \"\" : _uri$split2$;\n\n stack[index] = { pathname: pathname, search: search };\n states[index] = state;\n },\n go: function go(to) {\n var newIndex = index + to;\n\n if (newIndex < 0 || newIndex > states.length - 1) {\n return;\n }\n\n index = newIndex;\n }\n }\n };\n};\n\n////////////////////////////////////////////////////////////////////////////////\n// global history - uses window.history as the source if available, otherwise a\n// memory history\nvar canUseDOM = !!(typeof window !== \"undefined\" && window.document && window.document.createElement);\nvar getSource = function getSource() {\n return canUseDOM ? window : createMemorySource();\n};\n\nvar globalHistory = createHistory(getSource());\nvar navigate = globalHistory.navigate;\n\n////////////////////////////////////////////////////////////////////////////////\n\nexport { globalHistory, navigate, createHistory, createMemorySource };","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n/* eslint-disable jsx-a11y/anchor-has-content */\nimport React, { useContext } from \"react\";\nimport PropTypes from \"prop-types\";\nimport invariant from \"invariant\";\nimport createContext from \"create-react-context\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { startsWith, pick, resolve, match, insertParams, validateRedirect, shallowCompare } from \"./lib/utils\";\nimport { globalHistory, navigate, createHistory, createMemorySource } from \"./lib/history\";\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar createNamedContext = function createNamedContext(name, defaultValue) {\n var Ctx = createContext(defaultValue);\n Ctx.displayName = name;\n return Ctx;\n};\n\n////////////////////////////////////////////////////////////////////////////////\n// Location Context/Provider\nvar LocationContext = createNamedContext(\"Location\");\n\n// sets up a listener if there isn't one already so apps don't need to be\n// wrapped in some top level provider\nvar Location = function Location(_ref) {\n var children = _ref.children;\n return React.createElement(\n LocationContext.Consumer,\n null,\n function (context) {\n return context ? children(context) : React.createElement(\n LocationProvider,\n null,\n children\n );\n }\n );\n};\n\nvar LocationProvider = function (_React$Component) {\n _inherits(LocationProvider, _React$Component);\n\n function LocationProvider() {\n var _temp, _this, _ret;\n\n _classCallCheck(this, LocationProvider);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.state = {\n context: _this.getContext(),\n refs: { unlisten: null }\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n LocationProvider.prototype.getContext = function getContext() {\n var _props$history = this.props.history,\n navigate = _props$history.navigate,\n location = _props$history.location;\n\n return { navigate: navigate, location: location };\n };\n\n LocationProvider.prototype.componentDidCatch = function componentDidCatch(error, info) {\n if (isRedirect(error)) {\n var _navigate = this.props.history.navigate;\n\n _navigate(error.uri, { replace: true });\n } else {\n throw error;\n }\n };\n\n LocationProvider.prototype.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {\n if (prevState.context.location !== this.state.context.location) {\n this.props.history._onTransitionComplete();\n }\n };\n\n LocationProvider.prototype.componentDidMount = function componentDidMount() {\n var _this2 = this;\n\n var refs = this.state.refs,\n history = this.props.history;\n\n history._onTransitionComplete();\n refs.unlisten = history.listen(function () {\n Promise.resolve().then(function () {\n // TODO: replace rAF with react deferred update API when it's ready https://github.com/facebook/react/issues/13306\n requestAnimationFrame(function () {\n if (!_this2.unmounted) {\n _this2.setState(function () {\n return { context: _this2.getContext() };\n });\n }\n });\n });\n });\n };\n\n LocationProvider.prototype.componentWillUnmount = function componentWillUnmount() {\n var refs = this.state.refs;\n\n this.unmounted = true;\n refs.unlisten();\n };\n\n LocationProvider.prototype.render = function render() {\n var context = this.state.context,\n children = this.props.children;\n\n return React.createElement(\n LocationContext.Provider,\n { value: context },\n typeof children === \"function\" ? children(context) : children || null\n );\n };\n\n return LocationProvider;\n}(React.Component);\n\n////////////////////////////////////////////////////////////////////////////////\n\n\nLocationProvider.defaultProps = {\n history: globalHistory\n};\nprocess.env.NODE_ENV !== \"production\" ? LocationProvider.propTypes = {\n history: PropTypes.object.isRequired\n} : void 0;\nvar ServerLocation = function ServerLocation(_ref2) {\n var url = _ref2.url,\n children = _ref2.children;\n\n var searchIndex = url.indexOf(\"?\");\n var searchExists = searchIndex > -1;\n var pathname = void 0;\n var search = \"\";\n var hash = \"\";\n\n if (searchExists) {\n pathname = url.substring(0, searchIndex);\n search = url.substring(searchIndex);\n } else {\n pathname = url;\n }\n\n return React.createElement(\n LocationContext.Provider,\n {\n value: {\n location: {\n pathname: pathname,\n search: search,\n hash: hash\n },\n navigate: function navigate() {\n throw new Error(\"You can't call navigate on the server.\");\n }\n }\n },\n children\n );\n};\n////////////////////////////////////////////////////////////////////////////////\n// Sets baseuri and basepath for nested routers and links\nvar BaseContext = createNamedContext(\"Base\", { baseuri: \"/\", basepath: \"/\" });\n\n////////////////////////////////////////////////////////////////////////////////\n// The main event, welcome to the show everybody.\nvar Router = function Router(props) {\n return React.createElement(\n BaseContext.Consumer,\n null,\n function (baseContext) {\n return React.createElement(\n Location,\n null,\n function (locationContext) {\n return React.createElement(RouterImpl, _extends({}, baseContext, locationContext, props));\n }\n );\n }\n );\n};\n\nvar RouterImpl = function (_React$PureComponent) {\n _inherits(RouterImpl, _React$PureComponent);\n\n function RouterImpl() {\n _classCallCheck(this, RouterImpl);\n\n return _possibleConstructorReturn(this, _React$PureComponent.apply(this, arguments));\n }\n\n RouterImpl.prototype.render = function render() {\n var _props = this.props,\n location = _props.location,\n _navigate2 = _props.navigate,\n basepath = _props.basepath,\n primary = _props.primary,\n children = _props.children,\n baseuri = _props.baseuri,\n _props$component = _props.component,\n component = _props$component === undefined ? \"div\" : _props$component,\n domProps = _objectWithoutProperties(_props, [\"location\", \"navigate\", \"basepath\", \"primary\", \"children\", \"baseuri\", \"component\"]);\n\n var routes = React.Children.toArray(children).reduce(function (array, child) {\n var routes = createRoute(basepath)(child);\n return array.concat(routes);\n }, []);\n var pathname = location.pathname;\n\n\n var match = pick(routes, pathname);\n\n if (match) {\n var params = match.params,\n uri = match.uri,\n route = match.route,\n element = match.route.value;\n\n // remove the /* from the end for child routes relative paths\n\n basepath = route.default ? basepath : route.path.replace(/\\*$/, \"\");\n\n var props = _extends({}, params, {\n uri: uri,\n location: location,\n navigate: function navigate(to, options) {\n return _navigate2(resolve(to, uri), options);\n }\n });\n\n var clone = React.cloneElement(element, props, element.props.children ? React.createElement(\n Router,\n { location: location, primary: primary },\n element.props.children\n ) : undefined);\n\n // using 'div' for < 16.3 support\n var FocusWrapper = primary ? FocusHandler : component;\n // don't pass any props to 'div'\n var wrapperProps = primary ? _extends({ uri: uri, location: location, component: component }, domProps) : domProps;\n\n return React.createElement(\n BaseContext.Provider,\n { value: { baseuri: uri, basepath: basepath } },\n React.createElement(\n FocusWrapper,\n wrapperProps,\n clone\n )\n );\n } else {\n // Not sure if we want this, would require index routes at every level\n // warning(\n // false,\n // `\\n\\nNothing matched:\\n\\t${\n // location.pathname\n // }\\n\\nPaths checked: \\n\\t${routes\n // .map(route => route.path)\n // .join(\n // \"\\n\\t\"\n // )}\\n\\nTo get rid of this warning, add a default NotFound component as child of Router:\n // \\n\\tlet NotFound = () =>
Not Found!
\n // \\n\\t\\n\\t \\n\\t {/* ... */}\\n\\t`\n // );\n return null;\n }\n };\n\n return RouterImpl;\n}(React.PureComponent);\n\nRouterImpl.defaultProps = {\n primary: true\n};\n\n\nvar FocusContext = createNamedContext(\"Focus\");\n\nvar FocusHandler = function FocusHandler(_ref3) {\n var uri = _ref3.uri,\n location = _ref3.location,\n component = _ref3.component,\n domProps = _objectWithoutProperties(_ref3, [\"uri\", \"location\", \"component\"]);\n\n return React.createElement(\n FocusContext.Consumer,\n null,\n function (requestFocus) {\n return React.createElement(FocusHandlerImpl, _extends({}, domProps, {\n component: component,\n requestFocus: requestFocus,\n uri: uri,\n location: location\n }));\n }\n );\n};\n\n// don't focus on initial render\nvar initialRender = true;\nvar focusHandlerCount = 0;\n\nvar FocusHandlerImpl = function (_React$Component2) {\n _inherits(FocusHandlerImpl, _React$Component2);\n\n function FocusHandlerImpl() {\n var _temp2, _this4, _ret2;\n\n _classCallCheck(this, FocusHandlerImpl);\n\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return _ret2 = (_temp2 = (_this4 = _possibleConstructorReturn(this, _React$Component2.call.apply(_React$Component2, [this].concat(args))), _this4), _this4.state = {}, _this4.requestFocus = function (node) {\n if (!_this4.state.shouldFocus && node) {\n node.focus();\n }\n }, _temp2), _possibleConstructorReturn(_this4, _ret2);\n }\n\n FocusHandlerImpl.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, prevState) {\n var initial = prevState.uri == null;\n if (initial) {\n return _extends({\n shouldFocus: true\n }, nextProps);\n } else {\n var myURIChanged = nextProps.uri !== prevState.uri;\n var navigatedUpToMe = prevState.location.pathname !== nextProps.location.pathname && nextProps.location.pathname === nextProps.uri;\n return _extends({\n shouldFocus: myURIChanged || navigatedUpToMe\n }, nextProps);\n }\n };\n\n FocusHandlerImpl.prototype.componentDidMount = function componentDidMount() {\n focusHandlerCount++;\n this.focus();\n };\n\n FocusHandlerImpl.prototype.componentWillUnmount = function componentWillUnmount() {\n focusHandlerCount--;\n if (focusHandlerCount === 0) {\n initialRender = true;\n }\n };\n\n FocusHandlerImpl.prototype.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {\n if (prevProps.location !== this.props.location && this.state.shouldFocus) {\n this.focus();\n }\n };\n\n FocusHandlerImpl.prototype.focus = function focus() {\n if (process.env.NODE_ENV === \"test\") {\n // getting cannot read property focus of null in the tests\n // and that bit of global `initialRender` state causes problems\n // should probably figure it out!\n return;\n }\n\n var requestFocus = this.props.requestFocus;\n\n\n if (requestFocus) {\n requestFocus(this.node);\n } else {\n if (initialRender) {\n initialRender = false;\n } else if (this.node) {\n // React polyfills [autofocus] and it fires earlier than cDM,\n // so we were stealing focus away, this line prevents that.\n if (!this.node.contains(document.activeElement)) {\n this.node.focus();\n }\n }\n }\n };\n\n FocusHandlerImpl.prototype.render = function render() {\n var _this5 = this;\n\n var _props2 = this.props,\n children = _props2.children,\n style = _props2.style,\n requestFocus = _props2.requestFocus,\n _props2$component = _props2.component,\n Comp = _props2$component === undefined ? \"div\" : _props2$component,\n uri = _props2.uri,\n location = _props2.location,\n domProps = _objectWithoutProperties(_props2, [\"children\", \"style\", \"requestFocus\", \"component\", \"uri\", \"location\"]);\n\n return React.createElement(\n Comp,\n _extends({\n style: _extends({ outline: \"none\" }, style),\n tabIndex: \"-1\",\n ref: function ref(n) {\n return _this5.node = n;\n }\n }, domProps),\n React.createElement(\n FocusContext.Provider,\n { value: this.requestFocus },\n this.props.children\n )\n );\n };\n\n return FocusHandlerImpl;\n}(React.Component);\n\npolyfill(FocusHandlerImpl);\n\nvar k = function k() {};\n\n////////////////////////////////////////////////////////////////////////////////\nvar forwardRef = React.forwardRef;\n\nif (typeof forwardRef === \"undefined\") {\n forwardRef = function forwardRef(C) {\n return C;\n };\n}\n\nvar Link = forwardRef(function (_ref4, ref) {\n var innerRef = _ref4.innerRef,\n props = _objectWithoutProperties(_ref4, [\"innerRef\"]);\n\n return React.createElement(\n BaseContext.Consumer,\n null,\n function (_ref5) {\n var basepath = _ref5.basepath,\n baseuri = _ref5.baseuri;\n return React.createElement(\n Location,\n null,\n function (_ref6) {\n var location = _ref6.location,\n navigate = _ref6.navigate;\n\n var to = props.to,\n state = props.state,\n replace = props.replace,\n _props$getProps = props.getProps,\n getProps = _props$getProps === undefined ? k : _props$getProps,\n anchorProps = _objectWithoutProperties(props, [\"to\", \"state\", \"replace\", \"getProps\"]);\n\n var href = resolve(to, baseuri);\n var encodedHref = encodeURI(href);\n var isCurrent = location.pathname === encodedHref;\n var isPartiallyCurrent = startsWith(location.pathname, encodedHref);\n\n return React.createElement(\"a\", _extends({\n ref: ref || innerRef,\n \"aria-current\": isCurrent ? \"page\" : undefined\n }, anchorProps, getProps({ isCurrent: isCurrent, isPartiallyCurrent: isPartiallyCurrent, href: href, location: location }), {\n href: href,\n onClick: function onClick(event) {\n if (anchorProps.onClick) anchorProps.onClick(event);\n if (shouldNavigate(event)) {\n event.preventDefault();\n var shouldReplace = replace;\n if (typeof replace !== \"boolean\" && isCurrent) {\n var _location$state = _extends({}, location.state),\n key = _location$state.key,\n restState = _objectWithoutProperties(_location$state, [\"key\"]);\n\n shouldReplace = shallowCompare(_extends({}, state), restState);\n }\n navigate(href, {\n state: state,\n replace: shouldReplace\n });\n }\n }\n }));\n }\n );\n }\n );\n});\n\nLink.displayName = \"Link\";\n\nprocess.env.NODE_ENV !== \"production\" ? Link.propTypes = {\n to: PropTypes.string.isRequired\n} : void 0;\n\n////////////////////////////////////////////////////////////////////////////////\nfunction RedirectRequest(uri) {\n this.uri = uri;\n}\n\nvar isRedirect = function isRedirect(o) {\n return o instanceof RedirectRequest;\n};\n\nvar redirectTo = function redirectTo(to) {\n throw new RedirectRequest(to);\n};\n\nvar RedirectImpl = function (_React$Component3) {\n _inherits(RedirectImpl, _React$Component3);\n\n function RedirectImpl() {\n _classCallCheck(this, RedirectImpl);\n\n return _possibleConstructorReturn(this, _React$Component3.apply(this, arguments));\n }\n\n // Support React < 16 with this hook\n RedirectImpl.prototype.componentDidMount = function componentDidMount() {\n var _props3 = this.props,\n navigate = _props3.navigate,\n to = _props3.to,\n from = _props3.from,\n _props3$replace = _props3.replace,\n replace = _props3$replace === undefined ? true : _props3$replace,\n state = _props3.state,\n noThrow = _props3.noThrow,\n baseuri = _props3.baseuri,\n props = _objectWithoutProperties(_props3, [\"navigate\", \"to\", \"from\", \"replace\", \"state\", \"noThrow\", \"baseuri\"]);\n\n Promise.resolve().then(function () {\n var resolvedTo = resolve(to, baseuri);\n navigate(insertParams(resolvedTo, props), { replace: replace, state: state });\n });\n };\n\n RedirectImpl.prototype.render = function render() {\n var _props4 = this.props,\n navigate = _props4.navigate,\n to = _props4.to,\n from = _props4.from,\n replace = _props4.replace,\n state = _props4.state,\n noThrow = _props4.noThrow,\n baseuri = _props4.baseuri,\n props = _objectWithoutProperties(_props4, [\"navigate\", \"to\", \"from\", \"replace\", \"state\", \"noThrow\", \"baseuri\"]);\n\n var resolvedTo = resolve(to, baseuri);\n if (!noThrow) redirectTo(insertParams(resolvedTo, props));\n return null;\n };\n\n return RedirectImpl;\n}(React.Component);\n\nvar Redirect = function Redirect(props) {\n return React.createElement(\n BaseContext.Consumer,\n null,\n function (_ref7) {\n var baseuri = _ref7.baseuri;\n return React.createElement(\n Location,\n null,\n function (locationContext) {\n return React.createElement(RedirectImpl, _extends({}, locationContext, { baseuri: baseuri }, props));\n }\n );\n }\n );\n};\n\nprocess.env.NODE_ENV !== \"production\" ? Redirect.propTypes = {\n from: PropTypes.string,\n to: PropTypes.string.isRequired\n} : void 0;\n\n////////////////////////////////////////////////////////////////////////////////\nvar Match = function Match(_ref8) {\n var path = _ref8.path,\n children = _ref8.children;\n return React.createElement(\n BaseContext.Consumer,\n null,\n function (_ref9) {\n var baseuri = _ref9.baseuri;\n return React.createElement(\n Location,\n null,\n function (_ref10) {\n var navigate = _ref10.navigate,\n location = _ref10.location;\n\n var resolvedPath = resolve(path, baseuri);\n var result = match(resolvedPath, location.pathname);\n return children({\n navigate: navigate,\n location: location,\n match: result ? _extends({}, result.params, {\n uri: result.uri,\n path: path\n }) : null\n });\n }\n );\n }\n );\n};\n\n////////////////////////////////////////////////////////////////////////////////\n// Hooks\n\nvar useLocation = function useLocation() {\n var context = useContext(LocationContext);\n\n if (!context) {\n throw new Error(\"useLocation hook was used but a LocationContext.Provider was not found in the parent tree. Make sure this is used in a component that is a child of Router\");\n }\n\n return context.location;\n};\n\nvar useNavigate = function useNavigate() {\n var context = useContext(LocationContext);\n\n if (!context) {\n throw new Error(\"useNavigate hook was used but a LocationContext.Provider was not found in the parent tree. Make sure this is used in a component that is a child of Router\");\n }\n\n return context.navigate;\n};\n\nvar useParams = function useParams() {\n var context = useContext(BaseContext);\n\n if (!context) {\n throw new Error(\"useParams hook was used but a LocationContext.Provider was not found in the parent tree. Make sure this is used in a component that is a child of Router\");\n }\n\n var location = useLocation();\n\n var results = match(context.basepath, location.pathname);\n\n return results ? results.params : null;\n};\n\nvar useMatch = function useMatch(path) {\n if (!path) {\n throw new Error(\"useMatch(path: string) requires an argument of a string to match against\");\n }\n var context = useContext(BaseContext);\n\n if (!context) {\n throw new Error(\"useMatch hook was used but a LocationContext.Provider was not found in the parent tree. Make sure this is used in a component that is a child of Router\");\n }\n\n var location = useLocation();\n\n var resolvedPath = resolve(path, context.baseuri);\n var result = match(resolvedPath, location.pathname);\n return result ? _extends({}, result.params, {\n uri: result.uri,\n path: path\n }) : null;\n};\n\n////////////////////////////////////////////////////////////////////////////////\n// Junk\nvar stripSlashes = function stripSlashes(str) {\n return str.replace(/(^\\/+|\\/+$)/g, \"\");\n};\n\nvar createRoute = function createRoute(basepath) {\n return function (element) {\n if (!element) {\n return null;\n }\n\n if (element.type === React.Fragment && element.props.children) {\n return React.Children.map(element.props.children, createRoute(basepath));\n }\n !(element.props.path || element.props.default || element.type === Redirect) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \": Children of must have a `path` or `default` prop, or be a ``. None found on element type `\" + element.type + \"`\") : invariant(false) : void 0;\n\n !!(element.type === Redirect && (!element.props.from || !element.props.to)) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \" requires both \\\"from\\\" and \\\"to\\\" props when inside a .\") : invariant(false) : void 0;\n\n !!(element.type === Redirect && !validateRedirect(element.props.from, element.props.to)) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \" has mismatched dynamic segments, ensure both paths have the exact same dynamic segments.\") : invariant(false) : void 0;\n\n if (element.props.default) {\n return { value: element, default: true };\n }\n\n var elementPath = element.type === Redirect ? element.props.from : element.props.path;\n\n var path = elementPath === \"/\" ? basepath : stripSlashes(basepath) + \"/\" + stripSlashes(elementPath);\n\n return {\n value: element,\n default: element.props.default,\n path: element.props.children ? stripSlashes(path) + \"/*\" : path\n };\n };\n};\n\nvar shouldNavigate = function shouldNavigate(event) {\n return !event.defaultPrevented && event.button === 0 && !(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n};\n\n////////////////////////////////////////////////////////////////////////\nexport { Link, Location, LocationProvider, Match, Redirect, Router, ServerLocation, createHistory, createMemorySource, isRedirect, navigate, redirectTo, globalHistory, match as matchPath, useLocation, useNavigate, useParams, useMatch };","import React from 'react';\nexport var ReactReduxContext = /*#__PURE__*/React.createContext(null);\n\nif (process.env.NODE_ENV !== 'production') {\n ReactReduxContext.displayName = 'ReactRedux';\n}\n\nexport default ReactReduxContext;","// Default to a dummy \"batch\" implementation that just runs the callback\nfunction defaultNoopBatch(callback) {\n callback();\n}\n\nvar batch = defaultNoopBatch; // Allow injecting another batching function later\n\nexport var setBatch = function setBatch(newBatch) {\n return batch = newBatch;\n}; // Supply a getter just to skip dealing with ESM bindings\n\nexport var getBatch = function getBatch() {\n return batch;\n};","import { getBatch } from './batch'; // encapsulates the subscription logic for connecting a component to the redux store, as\n// well as nesting subscriptions of descendant components, so that we can ensure the\n// ancestor components re-render before descendants\n\nfunction createListenerCollection() {\n var batch = getBatch();\n var first = null;\n var last = null;\n return {\n clear: function clear() {\n first = null;\n last = null;\n },\n notify: function notify() {\n batch(function () {\n var listener = first;\n\n while (listener) {\n listener.callback();\n listener = listener.next;\n }\n });\n },\n get: function get() {\n var listeners = [];\n var listener = first;\n\n while (listener) {\n listeners.push(listener);\n listener = listener.next;\n }\n\n return listeners;\n },\n subscribe: function subscribe(callback) {\n var isSubscribed = true;\n var listener = last = {\n callback: callback,\n next: null,\n prev: last\n };\n\n if (listener.prev) {\n listener.prev.next = listener;\n } else {\n first = listener;\n }\n\n return function unsubscribe() {\n if (!isSubscribed || first === null) return;\n isSubscribed = false;\n\n if (listener.next) {\n listener.next.prev = listener.prev;\n } else {\n last = listener.prev;\n }\n\n if (listener.prev) {\n listener.prev.next = listener.next;\n } else {\n first = listener.next;\n }\n };\n }\n };\n}\n\nvar nullListeners = {\n notify: function notify() {},\n get: function get() {\n return [];\n }\n};\nexport function createSubscription(store, parentSub) {\n var unsubscribe;\n var listeners = nullListeners;\n\n function addNestedSub(listener) {\n trySubscribe();\n return listeners.subscribe(listener);\n }\n\n function notifyNestedSubs() {\n listeners.notify();\n }\n\n function handleChangeWrapper() {\n if (subscription.onStateChange) {\n subscription.onStateChange();\n }\n }\n\n function isSubscribed() {\n return Boolean(unsubscribe);\n }\n\n function trySubscribe() {\n if (!unsubscribe) {\n unsubscribe = parentSub ? parentSub.addNestedSub(handleChangeWrapper) : store.subscribe(handleChangeWrapper);\n listeners = createListenerCollection();\n }\n }\n\n function tryUnsubscribe() {\n if (unsubscribe) {\n unsubscribe();\n unsubscribe = undefined;\n listeners.clear();\n listeners = nullListeners;\n }\n }\n\n var subscription = {\n addNestedSub: addNestedSub,\n notifyNestedSubs: notifyNestedSubs,\n handleChangeWrapper: handleChangeWrapper,\n isSubscribed: isSubscribed,\n trySubscribe: trySubscribe,\n tryUnsubscribe: tryUnsubscribe,\n getListeners: function getListeners() {\n return listeners;\n }\n };\n return subscription;\n}","import { useEffect, useLayoutEffect } from 'react'; // React currently throws a warning when using useLayoutEffect on the server.\n// To get around it, we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser. We need useLayoutEffect to ensure the store\n// subscription callback always has the selector from the latest render commit\n// available, otherwise a store update may happen between render and the effect,\n// which may cause missed updates; we also must ensure the store subscription\n// is created synchronously, otherwise a store update may occur before the\n// subscription is created and an inconsistent state may be observed\n\nexport var useIsomorphicLayoutEffect = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined' ? useLayoutEffect : useEffect;","import React, { useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport { ReactReduxContext } from './Context';\nimport { createSubscription } from '../utils/Subscription';\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect';\n\nfunction Provider(_ref) {\n var store = _ref.store,\n context = _ref.context,\n children = _ref.children;\n var contextValue = useMemo(function () {\n var subscription = createSubscription(store);\n return {\n store: store,\n subscription: subscription\n };\n }, [store]);\n var previousState = useMemo(function () {\n return store.getState();\n }, [store]);\n useIsomorphicLayoutEffect(function () {\n var subscription = contextValue.subscription;\n subscription.onStateChange = subscription.notifyNestedSubs;\n subscription.trySubscribe();\n\n if (previousState !== store.getState()) {\n subscription.notifyNestedSubs();\n }\n\n return function () {\n subscription.tryUnsubscribe();\n subscription.onStateChange = null;\n };\n }, [contextValue, previousState]);\n var Context = context || ReactReduxContext;\n return /*#__PURE__*/React.createElement(Context.Provider, {\n value: contextValue\n }, children);\n}\n\nif (process.env.NODE_ENV !== 'production') {\n Provider.propTypes = {\n store: PropTypes.shape({\n subscribe: PropTypes.func.isRequired,\n dispatch: PropTypes.func.isRequired,\n getState: PropTypes.func.isRequired\n }),\n context: PropTypes.object,\n children: PropTypes.any\n };\n}\n\nexport default Provider;","export default function _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","'use strict';\n\nvar reactIs = require('react-is');\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n // React v16.11 and below\n if (reactIs.isMemo(component)) {\n return MEMO_STATICS;\n } // React v16.12 and above\n\n\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","/** @license React v17.0.2\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var b=60103,c=60106,d=60107,e=60108,f=60114,g=60109,h=60110,k=60112,l=60113,m=60120,n=60115,p=60116,q=60121,r=60122,u=60117,v=60129,w=60131;\nif(\"function\"===typeof Symbol&&Symbol.for){var x=Symbol.for;b=x(\"react.element\");c=x(\"react.portal\");d=x(\"react.fragment\");e=x(\"react.strict_mode\");f=x(\"react.profiler\");g=x(\"react.provider\");h=x(\"react.context\");k=x(\"react.forward_ref\");l=x(\"react.suspense\");m=x(\"react.suspense_list\");n=x(\"react.memo\");p=x(\"react.lazy\");q=x(\"react.block\");r=x(\"react.server.block\");u=x(\"react.fundamental\");v=x(\"react.debug_trace_mode\");w=x(\"react.legacy_hidden\")}\nfunction y(a){if(\"object\"===typeof a&&null!==a){var t=a.$$typeof;switch(t){case b:switch(a=a.type,a){case d:case f:case e:case l:case m:return a;default:switch(a=a&&a.$$typeof,a){case h:case k:case p:case n:case g:return a;default:return t}}case c:return t}}}var z=g,A=b,B=k,C=d,D=p,E=n,F=c,G=f,H=e,I=l;exports.ContextConsumer=h;exports.ContextProvider=z;exports.Element=A;exports.ForwardRef=B;exports.Fragment=C;exports.Lazy=D;exports.Memo=E;exports.Portal=F;exports.Profiler=G;exports.StrictMode=H;\nexports.Suspense=I;exports.isAsyncMode=function(){return!1};exports.isConcurrentMode=function(){return!1};exports.isContextConsumer=function(a){return y(a)===h};exports.isContextProvider=function(a){return y(a)===g};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===b};exports.isForwardRef=function(a){return y(a)===k};exports.isFragment=function(a){return y(a)===d};exports.isLazy=function(a){return y(a)===p};exports.isMemo=function(a){return y(a)===n};\nexports.isPortal=function(a){return y(a)===c};exports.isProfiler=function(a){return y(a)===f};exports.isStrictMode=function(a){return y(a)===e};exports.isSuspense=function(a){return y(a)===l};exports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===d||a===f||a===v||a===e||a===l||a===m||a===w||\"object\"===typeof a&&null!==a&&(a.$$typeof===p||a.$$typeof===n||a.$$typeof===g||a.$$typeof===h||a.$$typeof===k||a.$$typeof===u||a.$$typeof===q||a[0]===r)?!0:!1};\nexports.typeOf=y;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nvar _excluded = [\"getDisplayName\", \"methodName\", \"renderCountProp\", \"shouldHandleStateChanges\", \"storeKey\", \"withRef\", \"forwardRef\", \"context\"],\n _excluded2 = [\"reactReduxForwardedRef\"];\nimport hoistStatics from 'hoist-non-react-statics';\nimport React, { useContext, useMemo, useRef, useReducer } from 'react';\nimport { isValidElementType, isContextConsumer } from 'react-is';\nimport { createSubscription } from '../utils/Subscription';\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect';\nimport { ReactReduxContext } from './Context'; // Define some constant arrays just to avoid re-creating these\n\nvar EMPTY_ARRAY = [];\nvar NO_SUBSCRIPTION_ARRAY = [null, null];\n\nvar stringifyComponent = function stringifyComponent(Comp) {\n try {\n return JSON.stringify(Comp);\n } catch (err) {\n return String(Comp);\n }\n};\n\nfunction storeStateUpdatesReducer(state, action) {\n var updateCount = state[1];\n return [action.payload, updateCount + 1];\n}\n\nfunction useIsomorphicLayoutEffectWithArgs(effectFunc, effectArgs, dependencies) {\n useIsomorphicLayoutEffect(function () {\n return effectFunc.apply(void 0, effectArgs);\n }, dependencies);\n}\n\nfunction captureWrapperProps(lastWrapperProps, lastChildProps, renderIsScheduled, wrapperProps, actualChildProps, childPropsFromStoreUpdate, notifyNestedSubs) {\n // We want to capture the wrapper props and child props we used for later comparisons\n lastWrapperProps.current = wrapperProps;\n lastChildProps.current = actualChildProps;\n renderIsScheduled.current = false; // If the render was from a store update, clear out that reference and cascade the subscriber update\n\n if (childPropsFromStoreUpdate.current) {\n childPropsFromStoreUpdate.current = null;\n notifyNestedSubs();\n }\n}\n\nfunction subscribeUpdates(shouldHandleStateChanges, store, subscription, childPropsSelector, lastWrapperProps, lastChildProps, renderIsScheduled, childPropsFromStoreUpdate, notifyNestedSubs, forceComponentUpdateDispatch) {\n // If we're not subscribed to the store, nothing to do here\n if (!shouldHandleStateChanges) return; // Capture values for checking if and when this component unmounts\n\n var didUnsubscribe = false;\n var lastThrownError = null; // We'll run this callback every time a store subscription update propagates to this component\n\n var checkForUpdates = function checkForUpdates() {\n if (didUnsubscribe) {\n // Don't run stale listeners.\n // Redux doesn't guarantee unsubscriptions happen until next dispatch.\n return;\n }\n\n var latestStoreState = store.getState();\n var newChildProps, error;\n\n try {\n // Actually run the selector with the most recent store state and wrapper props\n // to determine what the child props should be\n newChildProps = childPropsSelector(latestStoreState, lastWrapperProps.current);\n } catch (e) {\n error = e;\n lastThrownError = e;\n }\n\n if (!error) {\n lastThrownError = null;\n } // If the child props haven't changed, nothing to do here - cascade the subscription update\n\n\n if (newChildProps === lastChildProps.current) {\n if (!renderIsScheduled.current) {\n notifyNestedSubs();\n }\n } else {\n // Save references to the new child props. Note that we track the \"child props from store update\"\n // as a ref instead of a useState/useReducer because we need a way to determine if that value has\n // been processed. If this went into useState/useReducer, we couldn't clear out the value without\n // forcing another re-render, which we don't want.\n lastChildProps.current = newChildProps;\n childPropsFromStoreUpdate.current = newChildProps;\n renderIsScheduled.current = true; // If the child props _did_ change (or we caught an error), this wrapper component needs to re-render\n\n forceComponentUpdateDispatch({\n type: 'STORE_UPDATED',\n payload: {\n error: error\n }\n });\n }\n }; // Actually subscribe to the nearest connected ancestor (or store)\n\n\n subscription.onStateChange = checkForUpdates;\n subscription.trySubscribe(); // Pull data from the store after first render in case the store has\n // changed since we began.\n\n checkForUpdates();\n\n var unsubscribeWrapper = function unsubscribeWrapper() {\n didUnsubscribe = true;\n subscription.tryUnsubscribe();\n subscription.onStateChange = null;\n\n if (lastThrownError) {\n // It's possible that we caught an error due to a bad mapState function, but the\n // parent re-rendered without this component and we're about to unmount.\n // This shouldn't happen as long as we do top-down subscriptions correctly, but\n // if we ever do those wrong, this throw will surface the error in our tests.\n // In that case, throw the error from here so it doesn't get lost.\n throw lastThrownError;\n }\n };\n\n return unsubscribeWrapper;\n}\n\nvar initStateUpdates = function initStateUpdates() {\n return [null, 0];\n};\n\nexport default function connectAdvanced(\n/*\r\n selectorFactory is a func that is responsible for returning the selector function used to\r\n compute new props from state, props, and dispatch. For example:\r\n export default connectAdvanced((dispatch, options) => (state, props) => ({\r\n thing: state.things[props.thingId],\r\n saveThing: fields => dispatch(actionCreators.saveThing(props.thingId, fields)),\r\n }))(YourComponent)\r\n Access to dispatch is provided to the factory so selectorFactories can bind actionCreators\r\n outside of their selector as an optimization. Options passed to connectAdvanced are passed to\r\n the selectorFactory, along with displayName and WrappedComponent, as the second argument.\r\n Note that selectorFactory is responsible for all caching/memoization of inbound and outbound\r\n props. Do not use connectAdvanced directly without memoizing results between calls to your\r\n selector, otherwise the Connect component will re-render on every state or props change.\r\n*/\nselectorFactory, // options object:\n_ref) {\n if (_ref === void 0) {\n _ref = {};\n }\n\n var _ref2 = _ref,\n _ref2$getDisplayName = _ref2.getDisplayName,\n getDisplayName = _ref2$getDisplayName === void 0 ? function (name) {\n return \"ConnectAdvanced(\" + name + \")\";\n } : _ref2$getDisplayName,\n _ref2$methodName = _ref2.methodName,\n methodName = _ref2$methodName === void 0 ? 'connectAdvanced' : _ref2$methodName,\n _ref2$renderCountProp = _ref2.renderCountProp,\n renderCountProp = _ref2$renderCountProp === void 0 ? undefined : _ref2$renderCountProp,\n _ref2$shouldHandleSta = _ref2.shouldHandleStateChanges,\n shouldHandleStateChanges = _ref2$shouldHandleSta === void 0 ? true : _ref2$shouldHandleSta,\n _ref2$storeKey = _ref2.storeKey,\n storeKey = _ref2$storeKey === void 0 ? 'store' : _ref2$storeKey,\n _ref2$withRef = _ref2.withRef,\n withRef = _ref2$withRef === void 0 ? false : _ref2$withRef,\n _ref2$forwardRef = _ref2.forwardRef,\n forwardRef = _ref2$forwardRef === void 0 ? false : _ref2$forwardRef,\n _ref2$context = _ref2.context,\n context = _ref2$context === void 0 ? ReactReduxContext : _ref2$context,\n connectOptions = _objectWithoutPropertiesLoose(_ref2, _excluded);\n\n if (process.env.NODE_ENV !== 'production') {\n if (renderCountProp !== undefined) {\n throw new Error(\"renderCountProp is removed. render counting is built into the latest React Dev Tools profiling extension\");\n }\n\n if (withRef) {\n throw new Error('withRef is removed. To access the wrapped instance, use a ref on the connected component');\n }\n\n var customStoreWarningMessage = 'To use a custom Redux store for specific components, create a custom React context with ' + \"React.createContext(), and pass the context object to React Redux's Provider and specific components\" + ' like: . ' + 'You may also pass a {context : MyContext} option to connect';\n\n if (storeKey !== 'store') {\n throw new Error('storeKey has been removed and does not do anything. ' + customStoreWarningMessage);\n }\n }\n\n var Context = context;\n return function wrapWithConnect(WrappedComponent) {\n if (process.env.NODE_ENV !== 'production' && !isValidElementType(WrappedComponent)) {\n throw new Error(\"You must pass a component to the function returned by \" + (methodName + \". Instead received \" + stringifyComponent(WrappedComponent)));\n }\n\n var wrappedComponentName = WrappedComponent.displayName || WrappedComponent.name || 'Component';\n var displayName = getDisplayName(wrappedComponentName);\n\n var selectorFactoryOptions = _extends({}, connectOptions, {\n getDisplayName: getDisplayName,\n methodName: methodName,\n renderCountProp: renderCountProp,\n shouldHandleStateChanges: shouldHandleStateChanges,\n storeKey: storeKey,\n displayName: displayName,\n wrappedComponentName: wrappedComponentName,\n WrappedComponent: WrappedComponent\n });\n\n var pure = connectOptions.pure;\n\n function createChildSelector(store) {\n return selectorFactory(store.dispatch, selectorFactoryOptions);\n } // If we aren't running in \"pure\" mode, we don't want to memoize values.\n // To avoid conditionally calling hooks, we fall back to a tiny wrapper\n // that just executes the given callback immediately.\n\n\n var usePureOnlyMemo = pure ? useMemo : function (callback) {\n return callback();\n };\n\n function ConnectFunction(props) {\n var _useMemo = useMemo(function () {\n // Distinguish between actual \"data\" props that were passed to the wrapper component,\n // and values needed to control behavior (forwarded refs, alternate context instances).\n // To maintain the wrapperProps object reference, memoize this destructuring.\n var reactReduxForwardedRef = props.reactReduxForwardedRef,\n wrapperProps = _objectWithoutPropertiesLoose(props, _excluded2);\n\n return [props.context, reactReduxForwardedRef, wrapperProps];\n }, [props]),\n propsContext = _useMemo[0],\n reactReduxForwardedRef = _useMemo[1],\n wrapperProps = _useMemo[2];\n\n var ContextToUse = useMemo(function () {\n // Users may optionally pass in a custom context instance to use instead of our ReactReduxContext.\n // Memoize the check that determines which context instance we should use.\n return propsContext && propsContext.Consumer && isContextConsumer( /*#__PURE__*/React.createElement(propsContext.Consumer, null)) ? propsContext : Context;\n }, [propsContext, Context]); // Retrieve the store and ancestor subscription via context, if available\n\n var contextValue = useContext(ContextToUse); // The store _must_ exist as either a prop or in context.\n // We'll check to see if it _looks_ like a Redux store first.\n // This allows us to pass through a `store` prop that is just a plain value.\n\n var didStoreComeFromProps = Boolean(props.store) && Boolean(props.store.getState) && Boolean(props.store.dispatch);\n var didStoreComeFromContext = Boolean(contextValue) && Boolean(contextValue.store);\n\n if (process.env.NODE_ENV !== 'production' && !didStoreComeFromProps && !didStoreComeFromContext) {\n throw new Error(\"Could not find \\\"store\\\" in the context of \" + (\"\\\"\" + displayName + \"\\\". Either wrap the root component in a , \") + \"or pass a custom React context provider to and the corresponding \" + (\"React context consumer to \" + displayName + \" in connect options.\"));\n } // Based on the previous check, one of these must be true\n\n\n var store = didStoreComeFromProps ? props.store : contextValue.store;\n var childPropsSelector = useMemo(function () {\n // The child props selector needs the store reference as an input.\n // Re-create this selector whenever the store changes.\n return createChildSelector(store);\n }, [store]);\n\n var _useMemo2 = useMemo(function () {\n if (!shouldHandleStateChanges) return NO_SUBSCRIPTION_ARRAY; // This Subscription's source should match where store came from: props vs. context. A component\n // connected to the store via props shouldn't use subscription from context, or vice versa.\n\n // This Subscription's source should match where store came from: props vs. context. A component\n // connected to the store via props shouldn't use subscription from context, or vice versa.\n var subscription = createSubscription(store, didStoreComeFromProps ? null : contextValue.subscription); // `notifyNestedSubs` is duplicated to handle the case where the component is unmounted in\n // the middle of the notification loop, where `subscription` will then be null. This can\n // probably be avoided if Subscription's listeners logic is changed to not call listeners\n // that have been unsubscribed in the middle of the notification loop.\n\n // `notifyNestedSubs` is duplicated to handle the case where the component is unmounted in\n // the middle of the notification loop, where `subscription` will then be null. This can\n // probably be avoided if Subscription's listeners logic is changed to not call listeners\n // that have been unsubscribed in the middle of the notification loop.\n var notifyNestedSubs = subscription.notifyNestedSubs.bind(subscription);\n return [subscription, notifyNestedSubs];\n }, [store, didStoreComeFromProps, contextValue]),\n subscription = _useMemo2[0],\n notifyNestedSubs = _useMemo2[1]; // Determine what {store, subscription} value should be put into nested context, if necessary,\n // and memoize that value to avoid unnecessary context updates.\n\n\n var overriddenContextValue = useMemo(function () {\n if (didStoreComeFromProps) {\n // This component is directly subscribed to a store from props.\n // We don't want descendants reading from this store - pass down whatever\n // the existing context value is from the nearest connected ancestor.\n return contextValue;\n } // Otherwise, put this component's subscription instance into context, so that\n // connected descendants won't update until after this component is done\n\n\n return _extends({}, contextValue, {\n subscription: subscription\n });\n }, [didStoreComeFromProps, contextValue, subscription]); // We need to force this wrapper component to re-render whenever a Redux store update\n // causes a change to the calculated child component props (or we caught an error in mapState)\n\n var _useReducer = useReducer(storeStateUpdatesReducer, EMPTY_ARRAY, initStateUpdates),\n _useReducer$ = _useReducer[0],\n previousStateUpdateResult = _useReducer$[0],\n forceComponentUpdateDispatch = _useReducer[1]; // Propagate any mapState/mapDispatch errors upwards\n\n\n if (previousStateUpdateResult && previousStateUpdateResult.error) {\n throw previousStateUpdateResult.error;\n } // Set up refs to coordinate values between the subscription effect and the render logic\n\n\n var lastChildProps = useRef();\n var lastWrapperProps = useRef(wrapperProps);\n var childPropsFromStoreUpdate = useRef();\n var renderIsScheduled = useRef(false);\n var actualChildProps = usePureOnlyMemo(function () {\n // Tricky logic here:\n // - This render may have been triggered by a Redux store update that produced new child props\n // - However, we may have gotten new wrapper props after that\n // If we have new child props, and the same wrapper props, we know we should use the new child props as-is.\n // But, if we have new wrapper props, those might change the child props, so we have to recalculate things.\n // So, we'll use the child props from store update only if the wrapper props are the same as last time.\n if (childPropsFromStoreUpdate.current && wrapperProps === lastWrapperProps.current) {\n return childPropsFromStoreUpdate.current;\n } // TODO We're reading the store directly in render() here. Bad idea?\n // This will likely cause Bad Things (TM) to happen in Concurrent Mode.\n // Note that we do this because on renders _not_ caused by store updates, we need the latest store state\n // to determine what the child props should be.\n\n\n return childPropsSelector(store.getState(), wrapperProps);\n }, [store, previousStateUpdateResult, wrapperProps]); // We need this to execute synchronously every time we re-render. However, React warns\n // about useLayoutEffect in SSR, so we try to detect environment and fall back to\n // just useEffect instead to avoid the warning, since neither will run anyway.\n\n useIsomorphicLayoutEffectWithArgs(captureWrapperProps, [lastWrapperProps, lastChildProps, renderIsScheduled, wrapperProps, actualChildProps, childPropsFromStoreUpdate, notifyNestedSubs]); // Our re-subscribe logic only runs when the store/subscription setup changes\n\n useIsomorphicLayoutEffectWithArgs(subscribeUpdates, [shouldHandleStateChanges, store, subscription, childPropsSelector, lastWrapperProps, lastChildProps, renderIsScheduled, childPropsFromStoreUpdate, notifyNestedSubs, forceComponentUpdateDispatch], [store, subscription, childPropsSelector]); // Now that all that's done, we can finally try to actually render the child component.\n // We memoize the elements for the rendered child component as an optimization.\n\n var renderedWrappedComponent = useMemo(function () {\n return /*#__PURE__*/React.createElement(WrappedComponent, _extends({}, actualChildProps, {\n ref: reactReduxForwardedRef\n }));\n }, [reactReduxForwardedRef, WrappedComponent, actualChildProps]); // If React sees the exact same element reference as last time, it bails out of re-rendering\n // that child, same as if it was wrapped in React.memo() or returned false from shouldComponentUpdate.\n\n var renderedChild = useMemo(function () {\n if (shouldHandleStateChanges) {\n // If this component is subscribed to store updates, we need to pass its own\n // subscription instance down to our descendants. That means rendering the same\n // Context instance, and putting a different value into the context.\n return /*#__PURE__*/React.createElement(ContextToUse.Provider, {\n value: overriddenContextValue\n }, renderedWrappedComponent);\n }\n\n return renderedWrappedComponent;\n }, [ContextToUse, renderedWrappedComponent, overriddenContextValue]);\n return renderedChild;\n } // If we're in \"pure\" mode, ensure our wrapper component only re-renders when incoming props have changed.\n\n\n var Connect = pure ? React.memo(ConnectFunction) : ConnectFunction;\n Connect.WrappedComponent = WrappedComponent;\n Connect.displayName = ConnectFunction.displayName = displayName;\n\n if (forwardRef) {\n var forwarded = React.forwardRef(function forwardConnectRef(props, ref) {\n return /*#__PURE__*/React.createElement(Connect, _extends({}, props, {\n reactReduxForwardedRef: ref\n }));\n });\n forwarded.displayName = displayName;\n forwarded.WrappedComponent = WrappedComponent;\n return hoistStatics(forwarded, WrappedComponent);\n }\n\n return hoistStatics(Connect, WrappedComponent);\n };\n}","function is(x, y) {\n if (x === y) {\n return x !== 0 || y !== 0 || 1 / x === 1 / y;\n } else {\n return x !== x && y !== y;\n }\n}\n\nexport default function shallowEqual(objA, objB) {\n if (is(objA, objB)) return true;\n\n if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\n return false;\n }\n\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n if (keysA.length !== keysB.length) return false;\n\n for (var i = 0; i < keysA.length; i++) {\n if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n return false;\n }\n }\n\n return true;\n}","export default function bindActionCreators(actionCreators, dispatch) {\n var boundActionCreators = {};\n\n var _loop = function _loop(key) {\n var actionCreator = actionCreators[key];\n\n if (typeof actionCreator === 'function') {\n boundActionCreators[key] = function () {\n return dispatch(actionCreator.apply(void 0, arguments));\n };\n }\n };\n\n for (var key in actionCreators) {\n _loop(key);\n }\n\n return boundActionCreators;\n}","/**\r\n * @param {any} obj The object to inspect.\r\n * @returns {boolean} True if the argument appears to be a plain object.\r\n */\nexport default function isPlainObject(obj) {\n if (typeof obj !== 'object' || obj === null) return false;\n var proto = Object.getPrototypeOf(obj);\n if (proto === null) return true;\n var baseProto = proto;\n\n while (Object.getPrototypeOf(baseProto) !== null) {\n baseProto = Object.getPrototypeOf(baseProto);\n }\n\n return proto === baseProto;\n}","/**\r\n * Prints a warning in the console if it exists.\r\n *\r\n * @param {String} message The warning message.\r\n * @returns {void}\r\n */\nexport default function warning(message) {\n /* eslint-disable no-console */\n if (typeof console !== 'undefined' && typeof console.error === 'function') {\n console.error(message);\n }\n /* eslint-enable no-console */\n\n\n try {\n // This error was thrown as a convenience so that if you enable\n // \"break on all exceptions\" in your console,\n // it would pause the execution at this line.\n throw new Error(message);\n /* eslint-disable no-empty */\n } catch (e) {}\n /* eslint-enable no-empty */\n\n}","import isPlainObject from './isPlainObject';\nimport warning from './warning';\nexport default function verifyPlainObject(value, displayName, methodName) {\n if (!isPlainObject(value)) {\n warning(methodName + \"() in \" + displayName + \" must return a plain object. Instead received \" + value + \".\");\n }\n}","import verifyPlainObject from '../utils/verifyPlainObject';\nexport function wrapMapToPropsConstant(getConstant) {\n return function initConstantSelector(dispatch, options) {\n var constant = getConstant(dispatch, options);\n\n function constantSelector() {\n return constant;\n }\n\n constantSelector.dependsOnOwnProps = false;\n return constantSelector;\n };\n} // dependsOnOwnProps is used by createMapToPropsProxy to determine whether to pass props as args\n// to the mapToProps function being wrapped. It is also used by makePurePropsSelector to determine\n// whether mapToProps needs to be invoked when props have changed.\n//\n// A length of one signals that mapToProps does not depend on props from the parent component.\n// A length of zero is assumed to mean mapToProps is getting args via arguments or ...args and\n// therefore not reporting its length accurately..\n\nexport function getDependsOnOwnProps(mapToProps) {\n return mapToProps.dependsOnOwnProps !== null && mapToProps.dependsOnOwnProps !== undefined ? Boolean(mapToProps.dependsOnOwnProps) : mapToProps.length !== 1;\n} // Used by whenMapStateToPropsIsFunction and whenMapDispatchToPropsIsFunction,\n// this function wraps mapToProps in a proxy function which does several things:\n//\n// * Detects whether the mapToProps function being called depends on props, which\n// is used by selectorFactory to decide if it should reinvoke on props changes.\n//\n// * On first call, handles mapToProps if returns another function, and treats that\n// new function as the true mapToProps for subsequent calls.\n//\n// * On first call, verifies the first result is a plain object, in order to warn\n// the developer that their mapToProps function is not returning a valid result.\n//\n\nexport function wrapMapToPropsFunc(mapToProps, methodName) {\n return function initProxySelector(dispatch, _ref) {\n var displayName = _ref.displayName;\n\n var proxy = function mapToPropsProxy(stateOrDispatch, ownProps) {\n return proxy.dependsOnOwnProps ? proxy.mapToProps(stateOrDispatch, ownProps) : proxy.mapToProps(stateOrDispatch);\n }; // allow detectFactoryAndVerify to get ownProps\n\n\n proxy.dependsOnOwnProps = true;\n\n proxy.mapToProps = function detectFactoryAndVerify(stateOrDispatch, ownProps) {\n proxy.mapToProps = mapToProps;\n proxy.dependsOnOwnProps = getDependsOnOwnProps(mapToProps);\n var props = proxy(stateOrDispatch, ownProps);\n\n if (typeof props === 'function') {\n proxy.mapToProps = props;\n proxy.dependsOnOwnProps = getDependsOnOwnProps(props);\n props = proxy(stateOrDispatch, ownProps);\n }\n\n if (process.env.NODE_ENV !== 'production') verifyPlainObject(props, displayName, methodName);\n return props;\n };\n\n return proxy;\n };\n}","import bindActionCreators from '../utils/bindActionCreators';\nimport { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps';\nexport function whenMapDispatchToPropsIsFunction(mapDispatchToProps) {\n return typeof mapDispatchToProps === 'function' ? wrapMapToPropsFunc(mapDispatchToProps, 'mapDispatchToProps') : undefined;\n}\nexport function whenMapDispatchToPropsIsMissing(mapDispatchToProps) {\n return !mapDispatchToProps ? wrapMapToPropsConstant(function (dispatch) {\n return {\n dispatch: dispatch\n };\n }) : undefined;\n}\nexport function whenMapDispatchToPropsIsObject(mapDispatchToProps) {\n return mapDispatchToProps && typeof mapDispatchToProps === 'object' ? wrapMapToPropsConstant(function (dispatch) {\n return bindActionCreators(mapDispatchToProps, dispatch);\n }) : undefined;\n}\nexport default [whenMapDispatchToPropsIsFunction, whenMapDispatchToPropsIsMissing, whenMapDispatchToPropsIsObject];","import { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps';\nexport function whenMapStateToPropsIsFunction(mapStateToProps) {\n return typeof mapStateToProps === 'function' ? wrapMapToPropsFunc(mapStateToProps, 'mapStateToProps') : undefined;\n}\nexport function whenMapStateToPropsIsMissing(mapStateToProps) {\n return !mapStateToProps ? wrapMapToPropsConstant(function () {\n return {};\n }) : undefined;\n}\nexport default [whenMapStateToPropsIsFunction, whenMapStateToPropsIsMissing];","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport verifyPlainObject from '../utils/verifyPlainObject';\nexport function defaultMergeProps(stateProps, dispatchProps, ownProps) {\n return _extends({}, ownProps, stateProps, dispatchProps);\n}\nexport function wrapMergePropsFunc(mergeProps) {\n return function initMergePropsProxy(dispatch, _ref) {\n var displayName = _ref.displayName,\n pure = _ref.pure,\n areMergedPropsEqual = _ref.areMergedPropsEqual;\n var hasRunOnce = false;\n var mergedProps;\n return function mergePropsProxy(stateProps, dispatchProps, ownProps) {\n var nextMergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n\n if (hasRunOnce) {\n if (!pure || !areMergedPropsEqual(nextMergedProps, mergedProps)) mergedProps = nextMergedProps;\n } else {\n hasRunOnce = true;\n mergedProps = nextMergedProps;\n if (process.env.NODE_ENV !== 'production') verifyPlainObject(mergedProps, displayName, 'mergeProps');\n }\n\n return mergedProps;\n };\n };\n}\nexport function whenMergePropsIsFunction(mergeProps) {\n return typeof mergeProps === 'function' ? wrapMergePropsFunc(mergeProps) : undefined;\n}\nexport function whenMergePropsIsOmitted(mergeProps) {\n return !mergeProps ? function () {\n return defaultMergeProps;\n } : undefined;\n}\nexport default [whenMergePropsIsFunction, whenMergePropsIsOmitted];","import warning from '../utils/warning';\n\nfunction verify(selector, methodName, displayName) {\n if (!selector) {\n throw new Error(\"Unexpected value for \" + methodName + \" in \" + displayName + \".\");\n } else if (methodName === 'mapStateToProps' || methodName === 'mapDispatchToProps') {\n if (!Object.prototype.hasOwnProperty.call(selector, 'dependsOnOwnProps')) {\n warning(\"The selector for \" + methodName + \" of \" + displayName + \" did not specify a value for dependsOnOwnProps.\");\n }\n }\n}\n\nexport default function verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps, displayName) {\n verify(mapStateToProps, 'mapStateToProps', displayName);\n verify(mapDispatchToProps, 'mapDispatchToProps', displayName);\n verify(mergeProps, 'mergeProps', displayName);\n}","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nvar _excluded = [\"initMapStateToProps\", \"initMapDispatchToProps\", \"initMergeProps\"];\nimport verifySubselectors from './verifySubselectors';\nexport function impureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch) {\n return function impureFinalPropsSelector(state, ownProps) {\n return mergeProps(mapStateToProps(state, ownProps), mapDispatchToProps(dispatch, ownProps), ownProps);\n };\n}\nexport function pureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, _ref) {\n var areStatesEqual = _ref.areStatesEqual,\n areOwnPropsEqual = _ref.areOwnPropsEqual,\n areStatePropsEqual = _ref.areStatePropsEqual;\n var hasRunAtLeastOnce = false;\n var state;\n var ownProps;\n var stateProps;\n var dispatchProps;\n var mergedProps;\n\n function handleFirstCall(firstState, firstOwnProps) {\n state = firstState;\n ownProps = firstOwnProps;\n stateProps = mapStateToProps(state, ownProps);\n dispatchProps = mapDispatchToProps(dispatch, ownProps);\n mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n hasRunAtLeastOnce = true;\n return mergedProps;\n }\n\n function handleNewPropsAndNewState() {\n stateProps = mapStateToProps(state, ownProps);\n if (mapDispatchToProps.dependsOnOwnProps) dispatchProps = mapDispatchToProps(dispatch, ownProps);\n mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n return mergedProps;\n }\n\n function handleNewProps() {\n if (mapStateToProps.dependsOnOwnProps) stateProps = mapStateToProps(state, ownProps);\n if (mapDispatchToProps.dependsOnOwnProps) dispatchProps = mapDispatchToProps(dispatch, ownProps);\n mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n return mergedProps;\n }\n\n function handleNewState() {\n var nextStateProps = mapStateToProps(state, ownProps);\n var statePropsChanged = !areStatePropsEqual(nextStateProps, stateProps);\n stateProps = nextStateProps;\n if (statePropsChanged) mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n return mergedProps;\n }\n\n function handleSubsequentCalls(nextState, nextOwnProps) {\n var propsChanged = !areOwnPropsEqual(nextOwnProps, ownProps);\n var stateChanged = !areStatesEqual(nextState, state, nextOwnProps, ownProps);\n state = nextState;\n ownProps = nextOwnProps;\n if (propsChanged && stateChanged) return handleNewPropsAndNewState();\n if (propsChanged) return handleNewProps();\n if (stateChanged) return handleNewState();\n return mergedProps;\n }\n\n return function pureFinalPropsSelector(nextState, nextOwnProps) {\n return hasRunAtLeastOnce ? handleSubsequentCalls(nextState, nextOwnProps) : handleFirstCall(nextState, nextOwnProps);\n };\n} // TODO: Add more comments\n// If pure is true, the selector returned by selectorFactory will memoize its results,\n// allowing connectAdvanced's shouldComponentUpdate to return false if final\n// props have not changed. If false, the selector will always return a new\n// object and shouldComponentUpdate will always return true.\n\nexport default function finalPropsSelectorFactory(dispatch, _ref2) {\n var initMapStateToProps = _ref2.initMapStateToProps,\n initMapDispatchToProps = _ref2.initMapDispatchToProps,\n initMergeProps = _ref2.initMergeProps,\n options = _objectWithoutPropertiesLoose(_ref2, _excluded);\n\n var mapStateToProps = initMapStateToProps(dispatch, options);\n var mapDispatchToProps = initMapDispatchToProps(dispatch, options);\n var mergeProps = initMergeProps(dispatch, options);\n\n if (process.env.NODE_ENV !== 'production') {\n verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps, options.displayName);\n }\n\n var selectorFactory = options.pure ? pureFinalPropsSelectorFactory : impureFinalPropsSelectorFactory;\n return selectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, options);\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nvar _excluded = [\"pure\", \"areStatesEqual\", \"areOwnPropsEqual\", \"areStatePropsEqual\", \"areMergedPropsEqual\"];\nimport connectAdvanced from '../components/connectAdvanced';\nimport shallowEqual from '../utils/shallowEqual';\nimport defaultMapDispatchToPropsFactories from './mapDispatchToProps';\nimport defaultMapStateToPropsFactories from './mapStateToProps';\nimport defaultMergePropsFactories from './mergeProps';\nimport defaultSelectorFactory from './selectorFactory';\n/*\r\n connect is a facade over connectAdvanced. It turns its args into a compatible\r\n selectorFactory, which has the signature:\r\n\r\n (dispatch, options) => (nextState, nextOwnProps) => nextFinalProps\r\n \r\n connect passes its args to connectAdvanced as options, which will in turn pass them to\r\n selectorFactory each time a Connect component instance is instantiated or hot reloaded.\r\n\r\n selectorFactory returns a final props selector from its mapStateToProps,\r\n mapStateToPropsFactories, mapDispatchToProps, mapDispatchToPropsFactories, mergeProps,\r\n mergePropsFactories, and pure args.\r\n\r\n The resulting final props selector is called by the Connect component instance whenever\r\n it receives new props or store state.\r\n */\n\nfunction match(arg, factories, name) {\n for (var i = factories.length - 1; i >= 0; i--) {\n var result = factories[i](arg);\n if (result) return result;\n }\n\n return function (dispatch, options) {\n throw new Error(\"Invalid value of type \" + typeof arg + \" for \" + name + \" argument when connecting component \" + options.wrappedComponentName + \".\");\n };\n}\n\nfunction strictEqual(a, b) {\n return a === b;\n} // createConnect with default args builds the 'official' connect behavior. Calling it with\n// different options opens up some testing and extensibility scenarios\n\n\nexport function createConnect(_temp) {\n var _ref = _temp === void 0 ? {} : _temp,\n _ref$connectHOC = _ref.connectHOC,\n connectHOC = _ref$connectHOC === void 0 ? connectAdvanced : _ref$connectHOC,\n _ref$mapStateToPropsF = _ref.mapStateToPropsFactories,\n mapStateToPropsFactories = _ref$mapStateToPropsF === void 0 ? defaultMapStateToPropsFactories : _ref$mapStateToPropsF,\n _ref$mapDispatchToPro = _ref.mapDispatchToPropsFactories,\n mapDispatchToPropsFactories = _ref$mapDispatchToPro === void 0 ? defaultMapDispatchToPropsFactories : _ref$mapDispatchToPro,\n _ref$mergePropsFactor = _ref.mergePropsFactories,\n mergePropsFactories = _ref$mergePropsFactor === void 0 ? defaultMergePropsFactories : _ref$mergePropsFactor,\n _ref$selectorFactory = _ref.selectorFactory,\n selectorFactory = _ref$selectorFactory === void 0 ? defaultSelectorFactory : _ref$selectorFactory;\n\n return function connect(mapStateToProps, mapDispatchToProps, mergeProps, _ref2) {\n if (_ref2 === void 0) {\n _ref2 = {};\n }\n\n var _ref3 = _ref2,\n _ref3$pure = _ref3.pure,\n pure = _ref3$pure === void 0 ? true : _ref3$pure,\n _ref3$areStatesEqual = _ref3.areStatesEqual,\n areStatesEqual = _ref3$areStatesEqual === void 0 ? strictEqual : _ref3$areStatesEqual,\n _ref3$areOwnPropsEqua = _ref3.areOwnPropsEqual,\n areOwnPropsEqual = _ref3$areOwnPropsEqua === void 0 ? shallowEqual : _ref3$areOwnPropsEqua,\n _ref3$areStatePropsEq = _ref3.areStatePropsEqual,\n areStatePropsEqual = _ref3$areStatePropsEq === void 0 ? shallowEqual : _ref3$areStatePropsEq,\n _ref3$areMergedPropsE = _ref3.areMergedPropsEqual,\n areMergedPropsEqual = _ref3$areMergedPropsE === void 0 ? shallowEqual : _ref3$areMergedPropsE,\n extraOptions = _objectWithoutPropertiesLoose(_ref3, _excluded);\n\n var initMapStateToProps = match(mapStateToProps, mapStateToPropsFactories, 'mapStateToProps');\n var initMapDispatchToProps = match(mapDispatchToProps, mapDispatchToPropsFactories, 'mapDispatchToProps');\n var initMergeProps = match(mergeProps, mergePropsFactories, 'mergeProps');\n return connectHOC(selectorFactory, _extends({\n // used in error messages\n methodName: 'connect',\n // used to compute Connect's displayName from the wrapped component's displayName.\n getDisplayName: function getDisplayName(name) {\n return \"Connect(\" + name + \")\";\n },\n // if mapStateToProps is falsy, the Connect component doesn't subscribe to store state changes\n shouldHandleStateChanges: Boolean(mapStateToProps),\n // passed through to selectorFactory\n initMapStateToProps: initMapStateToProps,\n initMapDispatchToProps: initMapDispatchToProps,\n initMergeProps: initMergeProps,\n pure: pure,\n areStatesEqual: areStatesEqual,\n areOwnPropsEqual: areOwnPropsEqual,\n areStatePropsEqual: areStatePropsEqual,\n areMergedPropsEqual: areMergedPropsEqual\n }, extraOptions));\n };\n}\nexport default /*#__PURE__*/createConnect();","import { useContext } from 'react';\nimport { ReactReduxContext } from '../components/Context';\n/**\r\n * A hook to access the value of the `ReactReduxContext`. This is a low-level\r\n * hook that you should usually not need to call directly.\r\n *\r\n * @returns {any} the value of the `ReactReduxContext`\r\n *\r\n * @example\r\n *\r\n * import React from 'react'\r\n * import { useReduxContext } from 'react-redux'\r\n *\r\n * export const CounterComponent = ({ value }) => {\r\n * const { store } = useReduxContext()\r\n * return
{store.getState()}
\r\n * }\r\n */\n\nexport function useReduxContext() {\n var contextValue = useContext(ReactReduxContext);\n\n if (process.env.NODE_ENV !== 'production' && !contextValue) {\n throw new Error('could not find react-redux context value; please ensure the component is wrapped in a ');\n }\n\n return contextValue;\n}","import { useContext } from 'react';\nimport { ReactReduxContext } from '../components/Context';\nimport { useReduxContext as useDefaultReduxContext } from './useReduxContext';\n/**\r\n * Hook factory, which creates a `useStore` hook bound to a given context.\r\n *\r\n * @param {React.Context} [context=ReactReduxContext] Context passed to your ``.\r\n * @returns {Function} A `useStore` hook bound to the specified context.\r\n */\n\nexport function createStoreHook(context) {\n if (context === void 0) {\n context = ReactReduxContext;\n }\n\n var useReduxContext = context === ReactReduxContext ? useDefaultReduxContext : function () {\n return useContext(context);\n };\n return function useStore() {\n var _useReduxContext = useReduxContext(),\n store = _useReduxContext.store;\n\n return store;\n };\n}\n/**\r\n * A hook to access the redux store.\r\n *\r\n * @returns {any} the redux store\r\n *\r\n * @example\r\n *\r\n * import React from 'react'\r\n * import { useStore } from 'react-redux'\r\n *\r\n * export const ExampleComponent = () => {\r\n * const store = useStore()\r\n * return
{store.getState()}
\r\n * }\r\n */\n\nexport var useStore = /*#__PURE__*/createStoreHook();","import { ReactReduxContext } from '../components/Context';\nimport { useStore as useDefaultStore, createStoreHook } from './useStore';\n/**\r\n * Hook factory, which creates a `useDispatch` hook bound to a given context.\r\n *\r\n * @param {React.Context} [context=ReactReduxContext] Context passed to your ``.\r\n * @returns {Function} A `useDispatch` hook bound to the specified context.\r\n */\n\nexport function createDispatchHook(context) {\n if (context === void 0) {\n context = ReactReduxContext;\n }\n\n var useStore = context === ReactReduxContext ? useDefaultStore : createStoreHook(context);\n return function useDispatch() {\n var store = useStore();\n return store.dispatch;\n };\n}\n/**\r\n * A hook to access the redux `dispatch` function.\r\n *\r\n * @returns {any|function} redux store's `dispatch` function\r\n *\r\n * @example\r\n *\r\n * import React, { useCallback } from 'react'\r\n * import { useDispatch } from 'react-redux'\r\n *\r\n * export const CounterComponent = ({ value }) => {\r\n * const dispatch = useDispatch()\r\n * const increaseCounter = useCallback(() => dispatch({ type: 'increase-counter' }), [])\r\n * return (\r\n *
\r\n * {value}\r\n * \r\n *
\r\n * )\r\n * }\r\n */\n\nexport var useDispatch = /*#__PURE__*/createDispatchHook();","import { useReducer, useRef, useMemo, useContext, useDebugValue } from 'react';\nimport { useReduxContext as useDefaultReduxContext } from './useReduxContext';\nimport { createSubscription } from '../utils/Subscription';\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect';\nimport { ReactReduxContext } from '../components/Context';\n\nvar refEquality = function refEquality(a, b) {\n return a === b;\n};\n\nfunction useSelectorWithStoreAndSubscription(selector, equalityFn, store, contextSub) {\n var _useReducer = useReducer(function (s) {\n return s + 1;\n }, 0),\n forceRender = _useReducer[1];\n\n var subscription = useMemo(function () {\n return createSubscription(store, contextSub);\n }, [store, contextSub]);\n var latestSubscriptionCallbackError = useRef();\n var latestSelector = useRef();\n var latestStoreState = useRef();\n var latestSelectedState = useRef();\n var storeState = store.getState();\n var selectedState;\n\n try {\n if (selector !== latestSelector.current || storeState !== latestStoreState.current || latestSubscriptionCallbackError.current) {\n var newSelectedState = selector(storeState); // ensure latest selected state is reused so that a custom equality function can result in identical references\n\n if (latestSelectedState.current === undefined || !equalityFn(newSelectedState, latestSelectedState.current)) {\n selectedState = newSelectedState;\n } else {\n selectedState = latestSelectedState.current;\n }\n } else {\n selectedState = latestSelectedState.current;\n }\n } catch (err) {\n if (latestSubscriptionCallbackError.current) {\n err.message += \"\\nThe error may be correlated with this previous error:\\n\" + latestSubscriptionCallbackError.current.stack + \"\\n\\n\";\n }\n\n throw err;\n }\n\n useIsomorphicLayoutEffect(function () {\n latestSelector.current = selector;\n latestStoreState.current = storeState;\n latestSelectedState.current = selectedState;\n latestSubscriptionCallbackError.current = undefined;\n });\n useIsomorphicLayoutEffect(function () {\n function checkForUpdates() {\n try {\n var newStoreState = store.getState(); // Avoid calling selector multiple times if the store's state has not changed\n\n if (newStoreState === latestStoreState.current) {\n return;\n }\n\n var _newSelectedState = latestSelector.current(newStoreState);\n\n if (equalityFn(_newSelectedState, latestSelectedState.current)) {\n return;\n }\n\n latestSelectedState.current = _newSelectedState;\n latestStoreState.current = newStoreState;\n } catch (err) {\n // we ignore all errors here, since when the component\n // is re-rendered, the selectors are called again, and\n // will throw again, if neither props nor store state\n // changed\n latestSubscriptionCallbackError.current = err;\n }\n\n forceRender();\n }\n\n subscription.onStateChange = checkForUpdates;\n subscription.trySubscribe();\n checkForUpdates();\n return function () {\n return subscription.tryUnsubscribe();\n };\n }, [store, subscription]);\n return selectedState;\n}\n/**\r\n * Hook factory, which creates a `useSelector` hook bound to a given context.\r\n *\r\n * @param {React.Context} [context=ReactReduxContext] Context passed to your ``.\r\n * @returns {Function} A `useSelector` hook bound to the specified context.\r\n */\n\n\nexport function createSelectorHook(context) {\n if (context === void 0) {\n context = ReactReduxContext;\n }\n\n var useReduxContext = context === ReactReduxContext ? useDefaultReduxContext : function () {\n return useContext(context);\n };\n return function useSelector(selector, equalityFn) {\n if (equalityFn === void 0) {\n equalityFn = refEquality;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (!selector) {\n throw new Error(\"You must pass a selector to useSelector\");\n }\n\n if (typeof selector !== 'function') {\n throw new Error(\"You must pass a function as a selector to useSelector\");\n }\n\n if (typeof equalityFn !== 'function') {\n throw new Error(\"You must pass a function as an equality function to useSelector\");\n }\n }\n\n var _useReduxContext = useReduxContext(),\n store = _useReduxContext.store,\n contextSub = _useReduxContext.subscription;\n\n var selectedState = useSelectorWithStoreAndSubscription(selector, equalityFn, store, contextSub);\n useDebugValue(selectedState);\n return selectedState;\n };\n}\n/**\r\n * A hook to access the redux store's state. This hook takes a selector function\r\n * as an argument. The selector is called with the store state.\r\n *\r\n * This hook takes an optional equality comparison function as the second parameter\r\n * that allows you to customize the way the selected state is compared to determine\r\n * whether the component needs to be re-rendered.\r\n *\r\n * @param {Function} selector the selector function\r\n * @param {Function=} equalityFn the function that will be used to determine equality\r\n *\r\n * @returns {any} the selected state\r\n *\r\n * @example\r\n *\r\n * import React from 'react'\r\n * import { useSelector } from 'react-redux'\r\n *\r\n * export const CounterComponent = () => {\r\n * const counter = useSelector(state => state.counter)\r\n * return
{counter}
\r\n * }\r\n */\n\nexport var useSelector = /*#__PURE__*/createSelectorHook();","import Provider from './components/Provider';\nimport connectAdvanced from './components/connectAdvanced';\nimport { ReactReduxContext } from './components/Context';\nimport connect from './connect/connect';\nimport { useDispatch, createDispatchHook } from './hooks/useDispatch';\nimport { useSelector, createSelectorHook } from './hooks/useSelector';\nimport { useStore, createStoreHook } from './hooks/useStore';\nimport shallowEqual from './utils/shallowEqual';\nexport { Provider, connectAdvanced, ReactReduxContext, connect, useDispatch, createDispatchHook, useSelector, createSelectorHook, useStore, createStoreHook, shallowEqual };","/* eslint-disable import/no-unresolved */\nexport { unstable_batchedUpdates } from 'react-dom';","export * from './exports';\nimport { unstable_batchedUpdates as batch } from './utils/reactBatchedUpdates';\nimport { setBatch } from './utils/batch'; // Enable batched updates in our subscriptions for use\n// with standard React renderers (ReactDOM, React Native)\n\nsetBatch(batch);\nexport { batch };","/**\n * @copyright Copyright 2019 Epic Systems Corporation\n * @file buildActionCreators function\n * @author Roland Scott\n * @module react-redux-booster\\src\\internal\\build-action-creators\n */\n\nimport { ActionCreator, InferActionCreatorsFromReducers, IReducerCollection } from \"../types\";\n\n/**\n * Given a set of reducers, build the corresponding action creators and return them.\n * @param sliceId The ID of the state slice used by these reducers\n * @param reducers The reducer functions to be used\n * @returns A collection of action creators for the given reducers\n */\nexport function buildActionCreators>(\n\tsliceId: number,\n\treducers?: TReducers,\n): InferActionCreatorsFromReducers {\n\tconst retVal: { [key: string]: ActionCreator } = {};\n\tif (reducers) {\n\t\tObject.keys(reducers).forEach(reducerName => {\n\t\t\tretVal[reducerName] = payload => ({\n\t\t\t\tpayload,\n\t\t\t\tsliceId,\n\t\t\t\ttype: reducerName,\n\t\t\t});\n\t\t});\n\t}\n\treturn retVal as any;\n}\n","/**\r\n * @copyright Copyright 2019 Epic Systems Corporation\r\n * @file getNextId function\r\n * @author Roland Scott\r\n * @module react-redux-booster\\src\\internal\\get-next-id\r\n */\r\n\r\nlet nextId = 1;\r\n\r\n/**\r\n * Get the next slice ID.\r\n * @returns A number to be used as the next slice ID.\r\n */\r\nexport function getNextId(): number {\r\n\treturn nextId++;\r\n}\r\n","/**\n * @copyright Copyright 2019 Epic Systems Corporation\n * @file buildCombinedReducers function\n * @author Roland Scott\n * @module react-redux-booster\\src\\build-combined-reducers\n */\n\nimport { buildActionCreators } from \"./internal/build-action-creators\";\nimport { InferActionCreatorsFromReducers, IReducerCollection } from \"./types\";\nimport { getNextId } from \"./internal/get-next-id\";\nimport { IHaveCombinedReducersMetadata } from \"./internal/types\";\n\n/**\n * Build an object containing a group of combined reducers (reducers which have access to multiple\n * pieces of shared state).\n *\n * This object also acts as the action creators for your store, so you use these to dispatch the combined\n * actions to your store.\n *\n * @param reducers The reducer functions to be included in this group\n * @returns an object containing actions creators whose results can be dispatched to the store\n */\nexport function buildCombinedReducers>(\n\treducers: TReducers,\n): InferActionCreatorsFromReducers {\n\tconst id = getNextId();\n\tconst retVal = buildActionCreators(id, reducers);\n\t((retVal as any) as IHaveCombinedReducersMetadata).__$$crmd = { id, reducers };\n\treturn retVal;\n}\n","/**\n * @copyright Copyright 2019 Epic Systems Corporation\n * @file getStateSlice function\n * @author Roland Scott\n * @module react-redux-booster\\src\\internal\\combine-reducers\\get-state-slice\n */\n\nimport { IWholeState, ISliceKeyCollection } from \"../types\";\n\n/**\n * Given the entire state object and either a slice ID or an array of slice IDs, return just those slices.\n * @param state The entire state object\n * @param sliceId The slice ID. Ignored if requiredSliceIds is set.\n * @param requiredSliceIds The array of slice IDs. If set, sliceId is ignored.\n * @returns A single slice if only sliceId is set. An array of slices if requiredSliceIds is set\n */\nexport function getStateSlice(\n\tstate: TState,\n\tsliceKeys: ISliceKeyCollection,\n\tsliceId: number,\n\trequiredSliceIds?: number[],\n): any {\n\treturn requiredSliceIds ? requiredSliceIds.map(id => state[sliceKeys[id]]) : state[sliceKeys[sliceId]];\n}\n","/**\n * @copyright Copyright 2019 Epic Systems Corporation\n * @file buildSelectorHook function\n * @author Roland Scott\n * @module react-redux-booster\\src\\internal\\build-selector-hook\n */\n\n/**\n * Determine if the two given store slices are the same. If they are two objects, it's a simple identity\n * comparison. If they are two arrays, we compare the contents of the arrays.\n * @param slice1\n * @param slice2\n * @return True if they are the same, false if they are different.\n */\nexport function areSlicesTheSame(slice1: T, slice2: T): boolean {\n\tif (!slice1 || !slice2) {\n\t\treturn !slice1 && !slice2;\n\t} else if (Array.isArray(slice1) || Array.isArray(slice2)) {\n\t\tif (!Array.isArray(slice1) || !Array.isArray(slice2)) {\n\t\t\treturn false;\n\t\t} else {\n\t\t\tif (slice1.length !== slice2.length) {\n\t\t\t\treturn false;\n\t\t\t} else {\n\t\t\t\tlet areSame = true;\n\t\t\t\tslice1.forEach((value, i) => {\n\t\t\t\t\tif (slice2[i] !== value) {\n\t\t\t\t\t\tareSame = false;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn areSame;\n\t\t\t}\n\t\t}\n\t} else {\n\t\treturn slice1 === slice2;\n\t}\n}\n","/**\n * @copyright Copyright 2019 Epic Systems Corporation\n * @file buildWrappedSelector function\n * @author Roland Scott\n * @module react-redux-booster\\src\\internal\\store\\build-wrapped-selector\n */\n\nimport { getStateSlice } from \"./create-meta-reducer/get-state-slice\";\nimport { areSlicesTheSame } from \"./are-slices-the-same\";\nimport { ISliceKeyCollection } from \"./types\";\n\ninterface IAccessors {\n\t[key: string]: (...args: any[]) => any;\n}\n\n/**\n * Wrap the user's selector with one that memoizes the store slice and the last selected value.\n * If the given store slices haven't change, don't run the user's selector, and just return the\n * last known value instead.\n *\n * This is our poor man's selector memoization for now.\n * It will avoid re-renders when other store slices that you don't care about change.\n * However, it will not provide any memoization for pieces *within* the slice you care about.\n *\n * @param selector The user's selector\n * @param accessors The collection of accessors to be passed to the user's selector\n * @param sliceKeyCollection The collection mapping IDs to state slice keys\n * @param id The id of the accessor/selector group that this selector is for\n * @param prevSlice A ref holding the slice of the state from last time this function was called\n * @param prevValue A ref holding the previously selected value from the last time this function was called\n * @param prevSelector A ref holding the previous user-provided selector function so we can decide whether the incoming selector is new\n * @param requiredSliceIds The slice IDs required by *all* the accessors in this group (if it's a combined selector)\n * @returns A new selector that will only run the actual selector code when the slice has changed.\n */\nexport function buildWrappedSelector(\n\tselector: (accessors: IAccessors) => any,\n\taccessors: IAccessors,\n\tsliceKeyCollection: ISliceKeyCollection,\n\tid: number,\n\tprevSlice: React.MutableRefObject,\n\tprevValue: React.MutableRefObject,\n\tprevSelector: React.MutableRefObject,\n\trequiredSliceIds?: number[],\n): (state: any) => any {\n\treturn (wholeState: any) => {\n\t\t// Sanity check. Make sure we have the given accessors\n\t\tif (!accessors) {\n\t\t\tthrow Error(\n\t\t\t\t`There are no accessors for id ${id}. Did you forget to call addSharedState or addCombinedSelectors?`,\n\t\t\t);\n\t\t}\n\t\t// Check to see if the slice has actually changed. This is our poor man's memoization for now.\n\t\t// It will avoid re-renders when other store slices that you don't care about change.\n\t\t// However, it will not provide any memoization for pieces *within* the slice you care about.\n\t\tconst currentSlice = getStateSlice(wholeState, sliceKeyCollection, id, requiredSliceIds);\n\t\tif (currentSlice) {\n\t\t\tif (\n\t\t\t\tprevSelector.current !== selector ||\n\t\t\t\ttypeof prevValue.current === \"undefined\" ||\n\t\t\t\t!areSlicesTheSame(currentSlice, prevSlice.current)\n\t\t\t) {\n\t\t\t\tprevSlice.current = currentSlice;\n\t\t\t\tprevValue.current = selector(accessors);\n\t\t\t\tprevSelector.current = selector;\n\t\t\t}\n\t\t\treturn prevValue.current;\n\t\t} else {\n\t\t\t// If the slice is not even defined, then the accessors are definitly not going to work,\n\t\t\t// so throw an error.\n\t\t\tthrow Error(`Required state slice for selector group ${id} is undefined.`);\n\t\t}\n\t};\n}\n","/**\n * @copyright Copyright 2019 Epic Systems Corporation\n * @file buildSelectorHook function\n * @author Roland Scott\n * @module react-redux-booster\\src\\internal\\store\\build-selector-hook\n */\n\nimport { IUseSharedStateHook } from \"..\";\nimport { IInteralStore } from \"./types\";\nimport { useCallback, useRef, useMemo, DependencyList } from \"react\";\nimport { useStore, useSelector } from \"react-redux\";\nimport { buildWrappedSelector } from \"./build-wrapped-selector\";\n\nexport function buildSelectorHook(id: number): IUseSharedStateHook {\n\treturn (selector, deps: DependencyList) => {\n\t\tconst { _$_boosterInfo } = (useStore() as unknown) as IInteralStore;\n\t\tconst { accessorCollection, accessorDependencies, sliceKeyCollection } = _$_boosterInfo;\n\t\tconst requiredSliceIds = accessorDependencies[id];\n\t\tconst accessors = accessorCollection[id];\n\n\t\t// The refs have to be obtained unconditionally at the \"top level\" of this custom hook, according the Rules of Hooks.\n\t\tconst prevSlice = useRef(undefined as any);\n\t\tconst prevValue = useRef(undefined as any);\n\n\t\t// Keep track of the given selector, so we can tell when it has changed\n\t\tconst prevSelector = useRef(undefined as any);\n\t\tconst memoizedSelector = useCallback(selector, deps);\n\n\t\t// The creation of the selector wrapper itself is memoized so that we only recreate the wrapper when necessary\n\t\tconst actualSelector = useMemo(\n\t\t\t() =>\n\t\t\t\tbuildWrappedSelector(\n\t\t\t\t\tmemoizedSelector,\n\t\t\t\t\taccessors,\n\t\t\t\t\tsliceKeyCollection,\n\t\t\t\t\tid,\n\t\t\t\t\tprevSlice,\n\t\t\t\t\tprevValue,\n\t\t\t\t\tprevSelector,\n\t\t\t\t\trequiredSliceIds,\n\t\t\t\t),\n\t\t\t[\n\t\t\t\tmemoizedSelector,\n\t\t\t\taccessors,\n\t\t\t\tsliceKeyCollection,\n\t\t\t\tid,\n\t\t\t\tprevSlice,\n\t\t\t\tprevValue,\n\t\t\t\tprevSelector,\n\t\t\t\trequiredSliceIds,\n\t\t\t],\n\t\t);\n\n\t\t// We need to call useSelector to set up a subscription to the Store.\n\t\treturn useSelector(actualSelector) as any;\n\t};\n}\n","/**\n * @copyright Copyright 2019 Epic Systems Corporation\n * @file buildCombinedSelectors function\n * @author Roland Scott\n * @module react-redux-booster\\src\\build-combined-selectors\n */\n\nimport { ISelectorCollection, IUseSharedStateHook } from \"./types\";\nimport { IHaveCombinedSelectorsMetadata } from \"./internal/types\";\nimport { getNextId } from \"./internal/get-next-id\";\nimport { buildSelectorHook } from \"./internal/build-selector-hook\";\n\n/**\n * Build a custom React hook that uses a group of combined selectors (selectors which have access to multiple\n * pieces of shared state).\n *\n * When used inside a React component, the hook takes a callback that will be given your accessor functions as\n * an argument, and is expected to return the value you are selecting.\n *\n * @param selectors The selector functions to be included in the hook.\n * @returns a custom React hook that uses a group of combined selectors (selectors which have access to multiple\n * pieces of shared state).\n */\nexport function buildCombinedSelectors>(\n\tselectors: TSelectors,\n): IUseSharedStateHook {\n\tconst id = getNextId();\n\tconst retVal = buildSelectorHook(id);\n\t// TODO - make sure __$$csmd doesn't show up in the final accessors collection\n\t((retVal as any) as IHaveCombinedSelectorsMetadata).__$$csmd = { id, selectors };\n\treturn retVal;\n}\n","/**\n * @copyright Copyright 2019 Epic Systems Corporation\n * @file createSharedState function\n * @author Roland Scott\n * @module react-redux-booster\\src\\internal\\create-shared-state\n */\n\nimport { getNextId } from \"./get-next-id\";\nimport { ISharedState, IInternalSliceInfo } from \"./types\";\nimport { IReducerCollection, ISelectorCollection } from \"../types\";\n\n/**\n * Build a new state slice, and set the hidden properties on it. Remember - the data is not actually stored\n * in this object. This is just a placeholder with some metadata about your slice.\n * @param initializer The function used to initialize the state's value\n * @returns The new state slice.\n */\nexport function createSharedState(\n\tinitializer: () => TState,\n\treducers?: IReducerCollection,\n\tselectors?: ISelectorCollection,\n): TState & ISharedState & IInternalSliceInfo {\n\tconst retVal = {\n\t\tid: getNextId(),\n\t\tinitializer,\n\t\treducers,\n\t\tselectors,\n\t};\n\t// The return type is a lie. We don't actually return TState.\n\treturn retVal as TState & ISharedState & IInternalSliceInfo;\n}\n","/**\r\n * @copyright Copyright 2019 Epic Systems Corporation\r\n * @file buildSharedState function\r\n * @author Roland Scott\r\n * @module react-redux-booster\\src\\build-shared-state\r\n */\r\n\r\nimport { buildActionCreators } from \"./internal/build-action-creators\";\r\nimport {\r\n\tInferActionCreatorsFromReducers,\r\n\tIReducerCollection,\r\n\tISelectorCollection,\r\n\tIStateConfig,\r\n\tIUseSharedStateHook,\r\n} from \"./types\";\r\nimport { createSharedState } from \"./internal/create-shared-state\";\r\nimport { buildSelectorHook } from \"./internal/build-selector-hook\";\r\n\r\n/**\r\n * The shape of a shared state piece.\r\n */\r\nexport interface ISharedState<\r\n\tTState,\r\n\tTReducers extends IReducerCollection,\r\n\tTSelectors extends ISelectorCollection\r\n> {\r\n\t/**\r\n\t * The action creator functions for this shared state, to be used when dispatching actions for this state.\r\n\t */\r\n\tactionCreators: InferActionCreatorsFromReducers;\r\n\t/**\r\n\t * The shared state object. THIS IS NOT THE DATA. YOUR DATA IS ACCESSED VIA SELECTORS, NOT VIA THIS OBJECT.\r\n\t */\r\n\tsharedState: TState;\r\n\t/**\r\n\t * A custom React hook to get access to this state's selectors.\r\n\t */\r\n\tuseSharedState: IUseSharedStateHook;\r\n}\r\n\r\n/**\r\n * Build a piece of shared state to be added to the store.\r\n * @param config The configuration for this state piece.\r\n * @returns An object which contains your action creators, a custom React hook to get read access to\r\n * the state, and a sharedState object required by other pieces of the API.\r\n */\r\nexport function buildSharedState<\r\n\tTState,\r\n\tTReducers extends IReducerCollection,\r\n\tTSelectors extends ISelectorCollection\r\n>(config: IStateConfig): ISharedState {\r\n\tconst sharedState = createSharedState(config.init, config.reducers, config.selectors);\r\n\treturn {\r\n\t\tactionCreators: buildActionCreators(sharedState.id, config.reducers),\r\n\t\tsharedState,\r\n\t\tuseSharedState: buildSelectorHook(sharedState.id),\r\n\t};\r\n}\r\n","export default function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}","import _typeof from \"./typeof.js\";\nexport default function toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}","import defineProperty from \"./defineProperty.js\";\nfunction ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function (r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n}\nexport default function _objectSpread2(e) {\n for (var r = 1; r < arguments.length; r++) {\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n}","import _objectSpread from '@babel/runtime/helpers/esm/objectSpread2';\n\n/**\n * Adapted from React: https://github.com/facebook/react/blob/master/packages/shared/formatProdErrorMessage.js\n *\n * Do not require this module directly! Use normal throw error calls. These messages will be replaced with error codes\n * during build.\n * @param {number} code\n */\nfunction formatProdErrorMessage(code) {\n return \"Minified Redux error #\" + code + \"; visit https://redux.js.org/Errors?code=\" + code + \" for the full message or \" + 'use the non-minified dev environment for full errors. ';\n}\n\n// Inlined version of the `symbol-observable` polyfill\nvar $$observable = (function () {\n return typeof Symbol === 'function' && Symbol.observable || '@@observable';\n})();\n\n/**\n * These are private action types reserved by Redux.\n * For any unknown actions, you must return the current state.\n * If the current state is undefined, you must return the initial state.\n * Do not reference these action types directly in your code.\n */\nvar randomString = function randomString() {\n return Math.random().toString(36).substring(7).split('').join('.');\n};\n\nvar ActionTypes = {\n INIT: \"@@redux/INIT\" + randomString(),\n REPLACE: \"@@redux/REPLACE\" + randomString(),\n PROBE_UNKNOWN_ACTION: function PROBE_UNKNOWN_ACTION() {\n return \"@@redux/PROBE_UNKNOWN_ACTION\" + randomString();\n }\n};\n\n/**\n * @param {any} obj The object to inspect.\n * @returns {boolean} True if the argument appears to be a plain object.\n */\nfunction isPlainObject(obj) {\n if (typeof obj !== 'object' || obj === null) return false;\n var proto = obj;\n\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n\n return Object.getPrototypeOf(obj) === proto;\n}\n\n// Inlined / shortened version of `kindOf` from https://github.com/jonschlinkert/kind-of\nfunction miniKindOf(val) {\n if (val === void 0) return 'undefined';\n if (val === null) return 'null';\n var type = typeof val;\n\n switch (type) {\n case 'boolean':\n case 'string':\n case 'number':\n case 'symbol':\n case 'function':\n {\n return type;\n }\n }\n\n if (Array.isArray(val)) return 'array';\n if (isDate(val)) return 'date';\n if (isError(val)) return 'error';\n var constructorName = ctorName(val);\n\n switch (constructorName) {\n case 'Symbol':\n case 'Promise':\n case 'WeakMap':\n case 'WeakSet':\n case 'Map':\n case 'Set':\n return constructorName;\n } // other\n\n\n return type.slice(8, -1).toLowerCase().replace(/\\s/g, '');\n}\n\nfunction ctorName(val) {\n return typeof val.constructor === 'function' ? val.constructor.name : null;\n}\n\nfunction isError(val) {\n return val instanceof Error || typeof val.message === 'string' && val.constructor && typeof val.constructor.stackTraceLimit === 'number';\n}\n\nfunction isDate(val) {\n if (val instanceof Date) return true;\n return typeof val.toDateString === 'function' && typeof val.getDate === 'function' && typeof val.setDate === 'function';\n}\n\nfunction kindOf(val) {\n var typeOfVal = typeof val;\n\n if (process.env.NODE_ENV !== 'production') {\n typeOfVal = miniKindOf(val);\n }\n\n return typeOfVal;\n}\n\n/**\n * @deprecated\n *\n * **We recommend using the `configureStore` method\n * of the `@reduxjs/toolkit` package**, which replaces `createStore`.\n *\n * Redux Toolkit is our recommended approach for writing Redux logic today,\n * including store setup, reducers, data fetching, and more.\n *\n * **For more details, please read this Redux docs page:**\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * `configureStore` from Redux Toolkit is an improved version of `createStore` that\n * simplifies setup and helps avoid common bugs.\n *\n * You should not be using the `redux` core package by itself today, except for learning purposes.\n * The `createStore` method from the core `redux` package will not be removed, but we encourage\n * all users to migrate to using Redux Toolkit for all Redux code.\n *\n * If you want to use `createStore` without this visual deprecation warning, use\n * the `legacy_createStore` import instead:\n *\n * `import { legacy_createStore as createStore} from 'redux'`\n *\n */\n\nfunction createStore(reducer, preloadedState, enhancer) {\n var _ref2;\n\n if (typeof preloadedState === 'function' && typeof enhancer === 'function' || typeof enhancer === 'function' && typeof arguments[3] === 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(0) : 'It looks like you are passing several store enhancers to ' + 'createStore(). This is not supported. Instead, compose them ' + 'together to a single function. See https://redux.js.org/tutorials/fundamentals/part-4-store#creating-a-store-with-enhancers for an example.');\n }\n\n if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {\n enhancer = preloadedState;\n preloadedState = undefined;\n }\n\n if (typeof enhancer !== 'undefined') {\n if (typeof enhancer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(1) : \"Expected the enhancer to be a function. Instead, received: '\" + kindOf(enhancer) + \"'\");\n }\n\n return enhancer(createStore)(reducer, preloadedState);\n }\n\n if (typeof reducer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(2) : \"Expected the root reducer to be a function. Instead, received: '\" + kindOf(reducer) + \"'\");\n }\n\n var currentReducer = reducer;\n var currentState = preloadedState;\n var currentListeners = [];\n var nextListeners = currentListeners;\n var isDispatching = false;\n /**\n * This makes a shallow copy of currentListeners so we can use\n * nextListeners as a temporary list while dispatching.\n *\n * This prevents any bugs around consumers calling\n * subscribe/unsubscribe in the middle of a dispatch.\n */\n\n function ensureCanMutateNextListeners() {\n if (nextListeners === currentListeners) {\n nextListeners = currentListeners.slice();\n }\n }\n /**\n * Reads the state tree managed by the store.\n *\n * @returns {any} The current state tree of your application.\n */\n\n\n function getState() {\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(3) : 'You may not call store.getState() while the reducer is executing. ' + 'The reducer has already received the state as an argument. ' + 'Pass it down from the top reducer instead of reading it from the store.');\n }\n\n return currentState;\n }\n /**\n * Adds a change listener. It will be called any time an action is dispatched,\n * and some part of the state tree may potentially have changed. You may then\n * call `getState()` to read the current state tree inside the callback.\n *\n * You may call `dispatch()` from a change listener, with the following\n * caveats:\n *\n * 1. The subscriptions are snapshotted just before every `dispatch()` call.\n * If you subscribe or unsubscribe while the listeners are being invoked, this\n * will not have any effect on the `dispatch()` that is currently in progress.\n * However, the next `dispatch()` call, whether nested or not, will use a more\n * recent snapshot of the subscription list.\n *\n * 2. The listener should not expect to see all state changes, as the state\n * might have been updated multiple times during a nested `dispatch()` before\n * the listener is called. It is, however, guaranteed that all subscribers\n * registered before the `dispatch()` started will be called with the latest\n * state by the time it exits.\n *\n * @param {Function} listener A callback to be invoked on every dispatch.\n * @returns {Function} A function to remove this change listener.\n */\n\n\n function subscribe(listener) {\n if (typeof listener !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(4) : \"Expected the listener to be a function. Instead, received: '\" + kindOf(listener) + \"'\");\n }\n\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(5) : 'You may not call store.subscribe() while the reducer is executing. ' + 'If you would like to be notified after the store has been updated, subscribe from a ' + 'component and invoke store.getState() in the callback to access the latest state. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');\n }\n\n var isSubscribed = true;\n ensureCanMutateNextListeners();\n nextListeners.push(listener);\n return function unsubscribe() {\n if (!isSubscribed) {\n return;\n }\n\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(6) : 'You may not unsubscribe from a store listener while the reducer is executing. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');\n }\n\n isSubscribed = false;\n ensureCanMutateNextListeners();\n var index = nextListeners.indexOf(listener);\n nextListeners.splice(index, 1);\n currentListeners = null;\n };\n }\n /**\n * Dispatches an action. It is the only way to trigger a state change.\n *\n * The `reducer` function, used to create the store, will be called with the\n * current state tree and the given `action`. Its return value will\n * be considered the **next** state of the tree, and the change listeners\n * will be notified.\n *\n * The base implementation only supports plain object actions. If you want to\n * dispatch a Promise, an Observable, a thunk, or something else, you need to\n * wrap your store creating function into the corresponding middleware. For\n * example, see the documentation for the `redux-thunk` package. Even the\n * middleware will eventually dispatch plain object actions using this method.\n *\n * @param {Object} action A plain object representing “what changed”. It is\n * a good idea to keep actions serializable so you can record and replay user\n * sessions, or use the time travelling `redux-devtools`. An action must have\n * a `type` property which may not be `undefined`. It is a good idea to use\n * string constants for action types.\n *\n * @returns {Object} For convenience, the same action object you dispatched.\n *\n * Note that, if you use a custom middleware, it may wrap `dispatch()` to\n * return something else (for example, a Promise you can await).\n */\n\n\n function dispatch(action) {\n if (!isPlainObject(action)) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(7) : \"Actions must be plain objects. Instead, the actual type was: '\" + kindOf(action) + \"'. You may need to add middleware to your store setup to handle dispatching other values, such as 'redux-thunk' to handle dispatching functions. See https://redux.js.org/tutorials/fundamentals/part-4-store#middleware and https://redux.js.org/tutorials/fundamentals/part-6-async-logic#using-the-redux-thunk-middleware for examples.\");\n }\n\n if (typeof action.type === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(8) : 'Actions may not have an undefined \"type\" property. You may have misspelled an action type string constant.');\n }\n\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(9) : 'Reducers may not dispatch actions.');\n }\n\n try {\n isDispatching = true;\n currentState = currentReducer(currentState, action);\n } finally {\n isDispatching = false;\n }\n\n var listeners = currentListeners = nextListeners;\n\n for (var i = 0; i < listeners.length; i++) {\n var listener = listeners[i];\n listener();\n }\n\n return action;\n }\n /**\n * Replaces the reducer currently used by the store to calculate the state.\n *\n * You might need this if your app implements code splitting and you want to\n * load some of the reducers dynamically. You might also need this if you\n * implement a hot reloading mechanism for Redux.\n *\n * @param {Function} nextReducer The reducer for the store to use instead.\n * @returns {void}\n */\n\n\n function replaceReducer(nextReducer) {\n if (typeof nextReducer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(10) : \"Expected the nextReducer to be a function. Instead, received: '\" + kindOf(nextReducer));\n }\n\n currentReducer = nextReducer; // This action has a similiar effect to ActionTypes.INIT.\n // Any reducers that existed in both the new and old rootReducer\n // will receive the previous state. This effectively populates\n // the new state tree with any relevant data from the old one.\n\n dispatch({\n type: ActionTypes.REPLACE\n });\n }\n /**\n * Interoperability point for observable/reactive libraries.\n * @returns {observable} A minimal observable of state changes.\n * For more information, see the observable proposal:\n * https://github.com/tc39/proposal-observable\n */\n\n\n function observable() {\n var _ref;\n\n var outerSubscribe = subscribe;\n return _ref = {\n /**\n * The minimal observable subscription method.\n * @param {Object} observer Any object that can be used as an observer.\n * The observer object should have a `next` method.\n * @returns {subscription} An object with an `unsubscribe` method that can\n * be used to unsubscribe the observable from the store, and prevent further\n * emission of values from the observable.\n */\n subscribe: function subscribe(observer) {\n if (typeof observer !== 'object' || observer === null) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(11) : \"Expected the observer to be an object. Instead, received: '\" + kindOf(observer) + \"'\");\n }\n\n function observeState() {\n if (observer.next) {\n observer.next(getState());\n }\n }\n\n observeState();\n var unsubscribe = outerSubscribe(observeState);\n return {\n unsubscribe: unsubscribe\n };\n }\n }, _ref[$$observable] = function () {\n return this;\n }, _ref;\n } // When a store is created, an \"INIT\" action is dispatched so that every\n // reducer returns their initial state. This effectively populates\n // the initial state tree.\n\n\n dispatch({\n type: ActionTypes.INIT\n });\n return _ref2 = {\n dispatch: dispatch,\n subscribe: subscribe,\n getState: getState,\n replaceReducer: replaceReducer\n }, _ref2[$$observable] = observable, _ref2;\n}\n/**\n * Creates a Redux store that holds the state tree.\n *\n * **We recommend using `configureStore` from the\n * `@reduxjs/toolkit` package**, which replaces `createStore`:\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\n\nvar legacy_createStore = createStore;\n\n/**\n * Prints a warning in the console if it exists.\n *\n * @param {String} message The warning message.\n * @returns {void}\n */\nfunction warning(message) {\n /* eslint-disable no-console */\n if (typeof console !== 'undefined' && typeof console.error === 'function') {\n console.error(message);\n }\n /* eslint-enable no-console */\n\n\n try {\n // This error was thrown as a convenience so that if you enable\n // \"break on all exceptions\" in your console,\n // it would pause the execution at this line.\n throw new Error(message);\n } catch (e) {} // eslint-disable-line no-empty\n\n}\n\nfunction getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {\n var reducerKeys = Object.keys(reducers);\n var argumentName = action && action.type === ActionTypes.INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer';\n\n if (reducerKeys.length === 0) {\n return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.';\n }\n\n if (!isPlainObject(inputState)) {\n return \"The \" + argumentName + \" has unexpected type of \\\"\" + kindOf(inputState) + \"\\\". Expected argument to be an object with the following \" + (\"keys: \\\"\" + reducerKeys.join('\", \"') + \"\\\"\");\n }\n\n var unexpectedKeys = Object.keys(inputState).filter(function (key) {\n return !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key];\n });\n unexpectedKeys.forEach(function (key) {\n unexpectedKeyCache[key] = true;\n });\n if (action && action.type === ActionTypes.REPLACE) return;\n\n if (unexpectedKeys.length > 0) {\n return \"Unexpected \" + (unexpectedKeys.length > 1 ? 'keys' : 'key') + \" \" + (\"\\\"\" + unexpectedKeys.join('\", \"') + \"\\\" found in \" + argumentName + \". \") + \"Expected to find one of the known reducer keys instead: \" + (\"\\\"\" + reducerKeys.join('\", \"') + \"\\\". Unexpected keys will be ignored.\");\n }\n}\n\nfunction assertReducerShape(reducers) {\n Object.keys(reducers).forEach(function (key) {\n var reducer = reducers[key];\n var initialState = reducer(undefined, {\n type: ActionTypes.INIT\n });\n\n if (typeof initialState === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(12) : \"The slice reducer for key \\\"\" + key + \"\\\" returned undefined during initialization. \" + \"If the state passed to the reducer is undefined, you must \" + \"explicitly return the initial state. The initial state may \" + \"not be undefined. If you don't want to set a value for this reducer, \" + \"you can use null instead of undefined.\");\n }\n\n if (typeof reducer(undefined, {\n type: ActionTypes.PROBE_UNKNOWN_ACTION()\n }) === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(13) : \"The slice reducer for key \\\"\" + key + \"\\\" returned undefined when probed with a random type. \" + (\"Don't try to handle '\" + ActionTypes.INIT + \"' or other actions in \\\"redux/*\\\" \") + \"namespace. They are considered private. Instead, you must return the \" + \"current state for any unknown actions, unless it is undefined, \" + \"in which case you must return the initial state, regardless of the \" + \"action type. The initial state may not be undefined, but can be null.\");\n }\n });\n}\n/**\n * Turns an object whose values are different reducer functions, into a single\n * reducer function. It will call every child reducer, and gather their results\n * into a single state object, whose keys correspond to the keys of the passed\n * reducer functions.\n *\n * @param {Object} reducers An object whose values correspond to different\n * reducer functions that need to be combined into one. One handy way to obtain\n * it is to use ES6 `import * as reducers` syntax. The reducers may never return\n * undefined for any action. Instead, they should return their initial state\n * if the state passed to them was undefined, and the current state for any\n * unrecognized action.\n *\n * @returns {Function} A reducer function that invokes every reducer inside the\n * passed object, and builds a state object with the same shape.\n */\n\n\nfunction combineReducers(reducers) {\n var reducerKeys = Object.keys(reducers);\n var finalReducers = {};\n\n for (var i = 0; i < reducerKeys.length; i++) {\n var key = reducerKeys[i];\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof reducers[key] === 'undefined') {\n warning(\"No reducer provided for key \\\"\" + key + \"\\\"\");\n }\n }\n\n if (typeof reducers[key] === 'function') {\n finalReducers[key] = reducers[key];\n }\n }\n\n var finalReducerKeys = Object.keys(finalReducers); // This is used to make sure we don't warn about the same\n // keys multiple times.\n\n var unexpectedKeyCache;\n\n if (process.env.NODE_ENV !== 'production') {\n unexpectedKeyCache = {};\n }\n\n var shapeAssertionError;\n\n try {\n assertReducerShape(finalReducers);\n } catch (e) {\n shapeAssertionError = e;\n }\n\n return function combination(state, action) {\n if (state === void 0) {\n state = {};\n }\n\n if (shapeAssertionError) {\n throw shapeAssertionError;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n var warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);\n\n if (warningMessage) {\n warning(warningMessage);\n }\n }\n\n var hasChanged = false;\n var nextState = {};\n\n for (var _i = 0; _i < finalReducerKeys.length; _i++) {\n var _key = finalReducerKeys[_i];\n var reducer = finalReducers[_key];\n var previousStateForKey = state[_key];\n var nextStateForKey = reducer(previousStateForKey, action);\n\n if (typeof nextStateForKey === 'undefined') {\n var actionType = action && action.type;\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(14) : \"When called with an action of type \" + (actionType ? \"\\\"\" + String(actionType) + \"\\\"\" : '(unknown type)') + \", the slice reducer for key \\\"\" + _key + \"\\\" returned undefined. \" + \"To ignore an action, you must explicitly return the previous state. \" + \"If you want this reducer to hold no value, you can return null instead of undefined.\");\n }\n\n nextState[_key] = nextStateForKey;\n hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n }\n\n hasChanged = hasChanged || finalReducerKeys.length !== Object.keys(state).length;\n return hasChanged ? nextState : state;\n };\n}\n\nfunction bindActionCreator(actionCreator, dispatch) {\n return function () {\n return dispatch(actionCreator.apply(this, arguments));\n };\n}\n/**\n * Turns an object whose values are action creators, into an object with the\n * same keys, but with every function wrapped into a `dispatch` call so they\n * may be invoked directly. This is just a convenience method, as you can call\n * `store.dispatch(MyActionCreators.doSomething())` yourself just fine.\n *\n * For convenience, you can also pass an action creator as the first argument,\n * and get a dispatch wrapped function in return.\n *\n * @param {Function|Object} actionCreators An object whose values are action\n * creator functions. One handy way to obtain it is to use ES6 `import * as`\n * syntax. You may also pass a single function.\n *\n * @param {Function} dispatch The `dispatch` function available on your Redux\n * store.\n *\n * @returns {Function|Object} The object mimicking the original object, but with\n * every action creator wrapped into the `dispatch` call. If you passed a\n * function as `actionCreators`, the return value will also be a single\n * function.\n */\n\n\nfunction bindActionCreators(actionCreators, dispatch) {\n if (typeof actionCreators === 'function') {\n return bindActionCreator(actionCreators, dispatch);\n }\n\n if (typeof actionCreators !== 'object' || actionCreators === null) {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(16) : \"bindActionCreators expected an object or a function, but instead received: '\" + kindOf(actionCreators) + \"'. \" + \"Did you write \\\"import ActionCreators from\\\" instead of \\\"import * as ActionCreators from\\\"?\");\n }\n\n var boundActionCreators = {};\n\n for (var key in actionCreators) {\n var actionCreator = actionCreators[key];\n\n if (typeof actionCreator === 'function') {\n boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n }\n }\n\n return boundActionCreators;\n}\n\n/**\n * Composes single-argument functions from right to left. The rightmost\n * function can take multiple arguments as it provides the signature for\n * the resulting composite function.\n *\n * @param {...Function} funcs The functions to compose.\n * @returns {Function} A function obtained by composing the argument functions\n * from right to left. For example, compose(f, g, h) is identical to doing\n * (...args) => f(g(h(...args))).\n */\nfunction compose() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n if (funcs.length === 0) {\n return function (arg) {\n return arg;\n };\n }\n\n if (funcs.length === 1) {\n return funcs[0];\n }\n\n return funcs.reduce(function (a, b) {\n return function () {\n return a(b.apply(void 0, arguments));\n };\n });\n}\n\n/**\n * Creates a store enhancer that applies middleware to the dispatch method\n * of the Redux store. This is handy for a variety of tasks, such as expressing\n * asynchronous actions in a concise manner, or logging every action payload.\n *\n * See `redux-thunk` package as an example of the Redux middleware.\n *\n * Because middleware is potentially asynchronous, this should be the first\n * store enhancer in the composition chain.\n *\n * Note that each middleware will be given the `dispatch` and `getState` functions\n * as named arguments.\n *\n * @param {...Function} middlewares The middleware chain to be applied.\n * @returns {Function} A store enhancer applying the middleware.\n */\n\nfunction applyMiddleware() {\n for (var _len = arguments.length, middlewares = new Array(_len), _key = 0; _key < _len; _key++) {\n middlewares[_key] = arguments[_key];\n }\n\n return function (createStore) {\n return function () {\n var store = createStore.apply(void 0, arguments);\n\n var _dispatch = function dispatch() {\n throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(15) : 'Dispatching while constructing your middleware is not allowed. ' + 'Other middleware would not be applied to this dispatch.');\n };\n\n var middlewareAPI = {\n getState: store.getState,\n dispatch: function dispatch() {\n return _dispatch.apply(void 0, arguments);\n }\n };\n var chain = middlewares.map(function (middleware) {\n return middleware(middlewareAPI);\n });\n _dispatch = compose.apply(void 0, chain)(store.dispatch);\n return _objectSpread(_objectSpread({}, store), {}, {\n dispatch: _dispatch\n });\n };\n };\n}\n\nexport { ActionTypes as __DO_NOT_USE__ActionTypes, applyMiddleware, bindActionCreators, combineReducers, compose, createStore, legacy_createStore };\n","/**\n * @copyright Copyright 2019 Epic Systems Corporation\n * @file getSliceKey function\n * @author Roland Scott\n * @module react-redux-booster\\src\\internal\\get-slice-key\n */\n\n/**\n * Create the string key for this slice of the store.\n * @param sliceId the ID of this slice\n * @param displayName the user-friendly name of this slice\n */\nexport function getSliceKey(sliceId: number, displayName: string): string {\n\treturn `${sliceId}_${displayName}`;\n}\n","/**\n * @copyright Copyright 2019 Epic Systems Corporation\n * @file initializeState function\n * @author Roland Scott\n * @module react-redux-booster\\src\\internal\\combine-reducers\\initialize-state\n */\n\nimport { IWholeState, ISliceInfoCollection, ISliceKeyCollection } from \"../types\";\n\n/**\n * Create a new version of the state by running the initializer function for each uninitialized slice\n * and return the new state (if anything changed), or the old state (if nothing changed).\n *\n * @param prevState The previous state\n * @param sliceInfoArr The state slices to initialize\n * @returns A new state if anything got initialized/changed, the exact same state if nothing changed.\n */\nexport function initializeState(\n\tprevState: TState,\n\tsliceInfoCollection: ISliceInfoCollection,\n\tsliceKeys: ISliceKeyCollection,\n): TState {\n\tconst nextState = {} as any;\n\tlet hasChanged = false;\n\n\tObject.keys(sliceInfoCollection).forEach((prop) => {\n\t\tconst sliceInfo = sliceInfoCollection[prop as any];\n\t\tconst sliceKey = sliceKeys[sliceInfo.id];\n\t\tconst prevSlice = prevState[sliceKey];\n\t\tif (!prevSlice) {\n\t\t\tnextState[sliceKey] = sliceInfo.initializer();\n\t\t\thasChanged = true;\n\t\t} else {\n\t\t\tnextState[sliceKey] = prevSlice;\n\t\t}\n\t});\n\treturn hasChanged ? nextState : prevState;\n}\n","/**\n * @copyright Copyright 2019 Epic Systems Corporation\n * @file mergeNextSlice function\n * @author Roland Scott\n * @module react-redux-booster\\src\\internal\\combine-reducers\\merge-next-slice\n */\n\nimport { IWholeState, ISliceKeyCollection } from \"../types\";\n\n/**\n * Create a new state object, shallow copy it, and update the given slice(s).\n * @param state The entire state object\n * @param nextSlice The next slice or array of slices\n * @param sliceId The ID of the slice (if it's a single slice)\n * @param sliceIds Array of slice IDs (if it's an array of slices)\n * @returns The new state object.\n */\nexport function mergeNextSlice(\n\tstate: TState,\n\tnextSlice: TSlice,\n\tsliceKeys: ISliceKeyCollection,\n\tsliceId: number,\n\tsliceIds?: number[],\n): TState {\n\tconst nextState = { ...state } as any;\n\tif (sliceIds) {\n\t\tif (!Array.isArray(nextSlice)) {\n\t\t\tthrow Error(\"Slice is not an array, but multiple slide IDs are given\");\n\t\t}\n\t\tsliceIds.map((id, i) => (nextState[sliceKeys[id]] = nextSlice[i]));\n\t} else {\n\t\tnextState[sliceKeys[sliceId]] = nextSlice;\n\t}\n\treturn nextState;\n}\n","/**\n * @copyright Copyright 2019 Epic Systems Corporation\n * @file createMetaReducer function\n * @author Roland Scott\n * @module react-redux-booster\\src\\internal\\create-meta-reducer\\create-meta-reducer\n */\n\nimport { Reducer } from \"redux\";\nimport {\n\tIInternalAction,\n\tReducerWithMetadata,\n\tISliceInfoCollection,\n\tISliceKeyCollection,\n\tIInternalReducerCollection,\n} from \"../types\";\nimport { getStateSlice } from \"./get-state-slice\";\nimport { initializeState } from \"./initialize-state\";\nimport { mergeNextSlice } from \"./merge-next-slice\";\n\n/**\n * This is the function to call when adding or removing state slices from the store. It returns the actual\n * reducer function that will be passed to Redux as the meta-reducer.\n * @param sliceInfoCollection All the state slices that you want to be a part of the store.\n * @returns The meta reducer function to be passed to Redux\n */\nexport function createMetaReducer(\n\tsliceInfoCollection: ISliceInfoCollection,\n\tsliceKeys: ISliceKeyCollection,\n\tallReducers: IInternalReducerCollection,\n): Reducer {\n\treturn (prevState = {}, action: IInternalAction) => {\n\t\t// Run through all slices, and initialize their state, if necessary\n\t\t// Will return the exact same prevState if nothing was changed.\n\t\tlet nextState = initializeState(prevState, sliceInfoCollection, sliceKeys);\n\n\t\t// NOTE: we are ONLY running the reducer code relevant for this action.\n\t\t// as a result, you cannot rely on reducers to initialize their own state.\n\t\t// The initialization of the state is expected to be handled by the init()\n\t\t// function passed into buildSharedState().\n\n\t\t// Core Redux code sends certain actions like @@init, which we won't have any any reducers for.\n\t\t// So don't panic unless we see that the action actually had a slice ID.\n\t\tif (action.sliceId) {\n\t\t\tconst sliceReducers = allReducers[action.sliceId];\n\t\t\tif (sliceReducers) {\n\t\t\t\tconst sliceReducer = sliceReducers[action.type] as ReducerWithMetadata;\n\t\t\t\tif (sliceReducer) {\n\t\t\t\t\tconst { requiredSliceIds } = sliceReducer;\n\t\t\t\t\tconst { sliceId } = action;\n\n\t\t\t\t\t// Grab the state slices needed for this reducer\n\t\t\t\t\tconst prevSlice = getStateSlice(nextState, sliceKeys, sliceId, requiredSliceIds);\n\n\t\t\t\t\t// Run the reducer\n\t\t\t\t\tconst nextSlice = sliceReducer(prevSlice, action.payload);\n\n\t\t\t\t\t// Add the results to the new state\n\t\t\t\t\tif (nextSlice !== prevSlice) {\n\t\t\t\t\t\tnextState = mergeNextSlice(\n\t\t\t\t\t\t\tnextState,\n\t\t\t\t\t\t\tnextSlice,\n\t\t\t\t\t\t\tsliceKeys,\n\t\t\t\t\t\t\tsliceId,\n\t\t\t\t\t\t\trequiredSliceIds,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthrow Error(\n\t\t\t\t\t\t`Couldn't find the reducer for action ${\n\t\t\t\t\t\t\taction.type\n\t\t\t\t\t\t}. Did you forget to call addSharedState or addCombinedReducers for these reducers?`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthrow Error(\n\t\t\t\t\t`Couldn't find any reducers for id ${\n\t\t\t\t\t\taction.sliceId\n\t\t\t\t\t}. Did you forget to call addSharedState or addCombinedReducers for these reducers?`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// Return exact same state if nothing changed\n\t\treturn nextState;\n\t};\n}\n","/**\n * @copyright Copyright 2019 Epic Systems Corporation\n * @file buildAccessors function\n * @author Roland Scott\n * @module react-redux-booster\\src\\internal\\build-accessors\n */\n\nimport { ISelectorCollection } from \"../../types\";\nimport { ISliceKeyCollection, SelectorWithMetadata } from \"../types\";\nimport { getStateSlice } from \"../create-meta-reducer/get-state-slice\";\n\ninterface AccessorCollection {\n\t[key: string]: (...args: []) => any;\n}\n\n/**\n * Given a set of selectors, build the corresponding accessors and return them.\n * @param selectors The selectors to use\n * @param getState A function that will return the current state when called\n * @param id The id for this selector group\n * @param sliceKeys Map of store entity IDs to state slice keys\n * @returns The collection of accessors (selectors bound to a particular state slice) that will be available to the developer\n */\nexport function buildAccessors(\n\tselectors: ISelectorCollection,\n\tgetState: () => any,\n\tid: number,\n\tsliceKeys: ISliceKeyCollection,\n): AccessorCollection {\n\tconst retVal: AccessorCollection = {};\n\tObject.keys(selectors).forEach(selectorName => {\n\t\tif (!selectorName.startsWith(\"__$\")) {\n\t\t\tconst selector = selectors[selectorName] as SelectorWithMetadata;\n\t\t\tretVal[selectorName] = (...args: any[]) => {\n\t\t\t\tconst slice = getStateSlice(getState(), sliceKeys, id, selector.requiredSliceIds);\n\t\t\t\treturn (selectors[selectorName] as any).apply(undefined, [slice, ...args]);\n\t\t\t};\n\t\t}\n\t});\n\treturn retVal;\n}\n","/**\r\n * @copyright Copyright 2019 Epic Systems Corporation\r\n * @file addSharedState function\r\n * @author Roland Scott\r\n * @module react-redux-booster\\src\\internal\\add-shared-state\r\n */\r\n\r\nimport { Reducer } from \"react\";\r\nimport { AnyAction } from \"redux\";\r\nimport { ISharedState, IBoosterInfo } from \"../types\";\r\nimport { getSliceKey } from \"../get-slice-key\";\r\nimport { createMetaReducer } from \"../create-meta-reducer/create-meta-reducer\";\r\nimport { buildAccessors } from \"./build-accessors\";\r\n\r\n/**\r\n * Add a new piece of shared state to the store\r\n * @param sliceInfo The shared state slice to be added\r\n * @param displayName A display name for the shared state slice that is being added\r\n * @param replaceReducer The store's replaceReducer function\r\n * @param getState The store's getState function\r\n */\r\nexport function addSharedState(\r\n\tprevBoosterInfo: IBoosterInfo,\r\n\tsliceInfo: ISharedState,\r\n\tdisplayName: string,\r\n\treplaceReducer: (nextReducer: Reducer) => void,\r\n\tgetState: () => any,\r\n): IBoosterInfo {\r\n\t// Sanity check\tto make sure we haven't already seen this ID.\r\n\tconst { id } = sliceInfo;\r\n\tif (prevBoosterInfo.sliceInfoCollection[id]) {\r\n\t\tthrow Error(`Shared state with ID ${id} has already been added to the store.`);\r\n\t}\r\n\r\n\t// Make sure we're creating a new copy...\r\n\tconst nextBoosterInfo: IBoosterInfo = { ...prevBoosterInfo };\r\n\tnextBoosterInfo.sliceInfoCollection = { ...prevBoosterInfo.sliceInfoCollection };\r\n\tnextBoosterInfo.sliceKeyCollection = { ...prevBoosterInfo.sliceKeyCollection };\r\n\r\n\t// Add the slice info\r\n\tnextBoosterInfo.sliceInfoCollection[id] = {\r\n\t\tid: sliceInfo.id,\r\n\t\tinitializer: sliceInfo.initializer,\r\n\t};\r\n\r\n\t// Construct the full slice name (i.e. with display name)\r\n\tnextBoosterInfo.sliceKeyCollection[id] = getSliceKey(sliceInfo.id, displayName);\r\n\r\n\tconst { reducers, selectors } = sliceInfo;\r\n\r\n\t// Add the reducers\r\n\tif (reducers) {\r\n\t\tnextBoosterInfo.reducerCollection = { ...prevBoosterInfo.reducerCollection };\r\n\t\tnextBoosterInfo.reducerCollection[id] = reducers;\r\n\t}\r\n\r\n\t// Build up the accessor functions from the selectors\r\n\tif (selectors) {\r\n\t\tnextBoosterInfo.accessorCollection = { ...prevBoosterInfo.accessorCollection };\r\n\t\tnextBoosterInfo.accessorCollection[id] = buildAccessors(\r\n\t\t\tselectors,\r\n\t\t\tgetState,\r\n\t\t\tid,\r\n\t\t\tnextBoosterInfo.sliceKeyCollection,\r\n\t\t);\r\n\t}\r\n\r\n\t// Update the redux meta reducer\r\n\treplaceReducer(createMetaReducer(\r\n\t\tnextBoosterInfo.sliceInfoCollection,\r\n\t\tnextBoosterInfo.sliceKeyCollection,\r\n\t\tnextBoosterInfo.reducerCollection,\r\n\t) as any);\r\n\r\n\treturn nextBoosterInfo;\r\n}\r\n","/**\n * @copyright Copyright 2019 Epic Systems Corporation\n * @file buildCombinedAccessorDependencies function\n * @author Roland Scott\n * @module react-redux-booster\\src\\internal\\store\\build-combined-accessor-dependencies\n */\n\nimport { ISelectorCollection } from \"../../types\";\nimport { SelectorWithMetadata } from \"../types\";\n\n/**\n * Add the required slice IDs for all the given selectors to a map for easy access later.\n * @param selectors The collection of selectors to grab the required slice IDs from\n */\nexport function buildCombinedAccessorDependencies(selectors: ISelectorCollection): number[] {\n\tconst collection: { [id: number]: true | undefined } = {};\n\tObject.keys(selectors).forEach(key => {\n\t\tconst { requiredSliceIds } = selectors[key] as SelectorWithMetadata;\n\t\tif (requiredSliceIds) {\n\t\t\trequiredSliceIds.forEach(id => {\n\t\t\t\tcollection[id] = true;\n\t\t\t});\n\t\t}\n\t});\n\treturn Object.keys(collection).map(val => +val);\n}\n","/**\n * @copyright Copyright 2019 Epic Systems Corporation\n * @file addCombinedSelectors function\n * @author Roland Scott\n * @module react-redux-booster\\src\\internal\\store\\add-combined-selectors\n */\n\nimport { ICombinedSelectorsMetadata, IBoosterInfo } from \"../types\";\nimport { buildAccessors } from \"./build-accessors\";\nimport { buildCombinedAccessorDependencies } from \"./build-combined-accessor-dependencies\";\n\n/**\n * Add the given collection of combined selectors to the store.\n * @param prevBoosterInfo The \"old\" booster information from the store\n * @param selectorsInfo The selectors to be added\n * @param displayName The display name to give to this group of selectors\n */\nexport function addCombinedSelectors(\n\tprevBoosterInfo: IBoosterInfo,\n\tselectorsInfo: ICombinedSelectorsMetadata,\n\t_displayName: string,\n\tgetState: () => any,\n): IBoosterInfo {\n\tconst { id, selectors } = selectorsInfo;\n\tif (!prevBoosterInfo.accessorCollection[id] && !prevBoosterInfo.accessorDependencies[id]) {\n\t\t// Make sure to create a new copy\n\t\tconst nextBoosterInfo: IBoosterInfo = { ...prevBoosterInfo };\n\t\tnextBoosterInfo.accessorCollection = { ...prevBoosterInfo.accessorCollection };\n\t\tnextBoosterInfo.accessorDependencies = { ...prevBoosterInfo.accessorDependencies };\n\t\t// Build the accessors and add them to the store\n\t\tnextBoosterInfo.accessorCollection[id] = buildAccessors(\n\t\t\tselectors,\n\t\t\tgetState,\n\t\t\t-1,\n\t\t\tnextBoosterInfo.sliceKeyCollection,\n\t\t);\n\t\t// Mark the accessor dependencies so we can memoize\n\t\tnextBoosterInfo.accessorDependencies[id] = buildCombinedAccessorDependencies(selectors);\n\t\t// Tag the group of accessors with a display name in case we ever need it\n\t\t// nextBoosterInfo.accessorCollection[id].__$amd = { displayName };\n\t\t// Done\n\t\treturn nextBoosterInfo;\n\t} else {\n\t\tthrow Error(`Combined selectors with id ${id} have already been added to the store.`);\n\t}\n}\n","/**\r\n * @copyright Copyright 2019 Epic Systems Corporation\r\n * @file addCombinedReducers function\r\n * @author Roland Scott\r\n * @module react-redux-booster\\src\\internal\\store\\add-combined-reducers\r\n */\r\n\r\nimport { IBoosterInfo, ICombinedReducersMetadata } from \"../types\";\r\nimport { createMetaReducer } from \"../create-meta-reducer/create-meta-reducer\";\r\nimport { Reducer } from \"react\";\r\nimport { AnyAction } from \"redux\";\r\n\r\n/**\r\n * Add the given collection of combined reducers to the store.\r\n * @param prevBoosterInfo The \"old\" booster information from the store\r\n * @param reducersInfo The selectors to be added\r\n * @param displayName The display name to give to this group of selectors\r\n */\r\nexport function addCombinedReducers(\r\n\tprevBoosterInfo: IBoosterInfo,\r\n\treducersInfo: ICombinedReducersMetadata,\r\n\t_displayName: string,\r\n\treplaceReducer: (nextReducer: Reducer) => void,\r\n): IBoosterInfo {\r\n\tconst { id, reducers } = reducersInfo;\r\n\tif (!prevBoosterInfo.reducerCollection[id]) {\r\n\t\t// Make sure to create a new copy\r\n\t\tconst nextBoosterInfo: IBoosterInfo = { ...prevBoosterInfo };\r\n\t\tnextBoosterInfo.reducerCollection = { ...prevBoosterInfo.reducerCollection };\r\n\t\t// Add the reducers to the collection\r\n\t\tnextBoosterInfo.reducerCollection[id] = { ...reducers };\r\n\t\t// Tag the group of reducers with a display name in case we ever need it\r\n\t\t// ((nextBoosterInfo.reducerCollection[id] as any) as IHaveReducerMetadata).__$rmd = { displayName };\r\n\t\t// Rebuild the meta reducer\r\n\t\treplaceReducer(\r\n\t\t\tcreateMetaReducer(\r\n\t\t\t\tnextBoosterInfo.sliceInfoCollection,\r\n\t\t\t\tnextBoosterInfo.sliceKeyCollection,\r\n\t\t\t\tnextBoosterInfo.reducerCollection,\r\n\t\t\t) as any,\r\n\t\t);\r\n\t\t// Done\r\n\t\treturn nextBoosterInfo;\r\n\t} else {\r\n\t\tthrow Error(`Combined reducers with id ${id} have already been added to the store.`);\r\n\t}\r\n}\r\n","/**\n * @copyright Copyright 2019 Epic Systems Corporation\n * @file createStore function\n * @author Roland Scott\n * @module react-redux-booster\\src\\internal\\get-store-enhancers\n */\n\n/* istanbul ignore next */\nexport function getStoreEnhancers(): any {\n\tif (typeof window !== \"undefined\") {\n\t\treturn (\n\t\t\t(window as any).__REDUX_DEVTOOLS_EXTENSION__ &&\n\t\t\t(window as any).__REDUX_DEVTOOLS_EXTENSION__()\n\t\t);\n\t}\n\treturn undefined;\n}\n","/**\r\n * @copyright Copyright 2019 Epic Systems Corporation\r\n * @file createStore function\r\n * @author Roland Scott\r\n * @module react-redux-booster\\src\\create-store\r\n */\r\n\r\nimport { createStore as createReduxStore, Store } from \"redux\";\r\nimport {\r\n\tISharedState,\r\n\tIInteralStore,\r\n\tIHaveCombinedSelectorsMetadata,\r\n\tIHaveCombinedReducersMetadata,\r\n} from \"./internal/types\";\r\nimport { IStore, IUseSharedStateHook, ActionCreatorCollection } from \"./types\";\r\nimport { addSharedState } from \"./internal/store/add-shared-state\";\r\nimport { addCombinedSelectors } from \"./internal/store/add-combined-selectors\";\r\nimport { addCombinedReducers } from \"./internal/store/add-combined-reducers\";\r\nimport { getStoreEnhancers } from \"./internal/get-store-enhancers\";\r\n\r\n/**\r\n * Creates the application store. There can only be one store per application.\r\n * @returns The new store\r\n */\r\nexport function createStore(): IStore & Store {\r\n\t////////////////// CREATE THE REDUX STORE ///////////////////////\r\n\r\n\tconst store = createReduxStore(() => ({}), undefined, getStoreEnhancers()) as IStore &\r\n\t\tIInteralStore &\r\n\t\tStore;\r\n\r\n\t////////////////// ADD BOOSTER FUNCTIONS ///////////////////////\r\n\r\n\tstore._$_boosterInfo = {\r\n\t\taccessorCollection: {},\r\n\t\taccessorDependencies: {},\r\n\t\treducerCollection: {},\r\n\t\tsliceInfoCollection: {},\r\n\t\tsliceKeyCollection: {},\r\n\t};\r\n\r\n\tstore.addSharedState = (sharedState: ISharedState, displayName: string) => {\r\n\t\tconst { _$_boosterInfo, replaceReducer, getState } = store;\r\n\t\tstore._$_boosterInfo = addSharedState(\r\n\t\t\t_$_boosterInfo,\r\n\t\t\tsharedState,\r\n\t\t\tdisplayName,\r\n\t\t\treplaceReducer,\r\n\t\t\tgetState,\r\n\t\t);\r\n\t};\r\n\r\n\tstore.addCombinedReducers = (actionCreators: ActionCreatorCollection, displayName: string = \"\") => {\r\n\t\tconst { _$_boosterInfo, replaceReducer } = store;\r\n\t\tconst { __$$crmd } = (actionCreators as any) as IHaveCombinedReducersMetadata;\r\n\t\tstore._$_boosterInfo = addCombinedReducers(_$_boosterInfo, __$$crmd, displayName, replaceReducer);\r\n\t};\r\n\r\n\tstore.addCombinedSelectors = (hook: IUseSharedStateHook, displayName: string = \"\") => {\r\n\t\tconst { _$_boosterInfo, getState } = store;\r\n\t\tconst { __$$csmd } = (hook as any) as IHaveCombinedSelectorsMetadata;\r\n\t\tstore._$_boosterInfo = addCombinedSelectors(_$_boosterInfo, __$$csmd, displayName, getState);\r\n\t};\r\n\r\n\t// Implement these in a subsequet wave. They are not on the critical path right now.\r\n\tstore.removeCombinedReducers = undefined as any;\r\n\tstore.removeSharedState = undefined as any;\r\n\r\n\treturn store;\r\n}\r\n","/**\r\n * @copyright Copyright 2019 Epic Systems Corporation\r\n * @file useDispatch hook\r\n * @author Roland Scott\r\n * @module react-redux-booster\\src\\use-dispatch\r\n */\r\n\r\nimport { useDispatch as useReduxDispatch } from \"react-redux\";\r\nimport { IAction } from \"./types\";\r\n\r\n/**\r\n * Get a reference to the store's dispatch function.\r\n *\r\n * This won't work unless you've surrounded your React tree with a store .\r\n * @returns The dispatch function for your store\r\n */\r\nexport function useDispatch(): (action: T) => T {\r\n\treturn useReduxDispatch();\r\n}\r\n","/**\r\n * @copyright Copyright 2019 Epic Systems Corporation\r\n * @file withSharedStates function\r\n * @author Roland Scott\r\n * @module react-redux-booster\\src\\with-shared-states\r\n */\r\n\r\nimport { ISharedState, ReducerWithMetadata, SelectorWithMetadata } from \"./internal/types\";\r\nimport { Reducer, Selector } from \"./types\";\r\n\r\n/**\r\n * Shape of the value returned by `withSharedState`\r\n */\r\nexport interface ISharedStateBuilder {\r\n\t/**\r\n\t * Builds a reducer that will use multiple pieces of shared state.\r\n\t * @reducer The reducer function implementation\r\n\t */\r\n\tbuildReducer>(reducer: TReducer): TReducer;\r\n\r\n\t/**\r\n\t * Builds a selector that will use multiple pieces of shared state.\r\n\t * @param selector The selector function implementation\r\n\t */\r\n\tbuildSelector>(selector: TSelector): TSelector;\r\n}\r\n\r\n/**\r\n * Creates an object that can be used to build reducers and selectors that use multiple pieces of shared state.\r\n * @param sharedStates The pieces of shared state that will be used by the reducers and/or selectors.\r\n * @returns An object that can be used to build reducers and selectors that use multiple pieces of shared state.\r\n */\r\nexport function withSharedStates(\r\n\t...sharedStates: TSharedStates\r\n): ISharedStateBuilder {\r\n\treturn {\r\n\t\tbuildReducer: (reducer: any) => {\r\n\t\t\t(reducer as ReducerWithMetadata).requiredSliceIds = sharedStates.map(\r\n\t\t\t\t(arg: ISharedState) => arg.id,\r\n\t\t\t);\r\n\t\t\treturn reducer;\r\n\t\t},\r\n\t\tbuildSelector: (selector: any) => {\r\n\t\t\t(selector as SelectorWithMetadata).requiredSliceIds = sharedStates.map(\r\n\t\t\t\t(arg: ISharedState) => arg.id,\r\n\t\t\t);\r\n\t\t\treturn selector;\r\n\t\t},\r\n\t};\r\n}\r\n","/**\r\n * @copyright Copyright 2019 Epic Systems Corporation\r\n * @file library index\r\n * @author Roland Scott\r\n * @module react-redux-booster\\src\\index\r\n */\r\n\r\n/* istanbul ignore file */\r\n\r\nexport { buildCombinedReducers } from \"./build-combined-reducers\";\r\nexport { buildCombinedSelectors } from \"./build-combined-selectors\";\r\nexport { buildSharedState } from \"./build-shared-state\";\r\nexport { createStore } from \"./create-store\";\r\nexport * from \"./types\";\r\nexport { useDispatch } from \"./use-dispatch\";\r\nexport { withSharedStates } from \"./with-shared-states\";\r\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file Root Redux store\n * @author Erv Walter\n * @module Epic.VideoApp.App.Store\n */\n\n/* istanbul ignore file */\n\nimport { createStore } from \"@epic/react-redux-booster\";\n\nconst store = createStore();\nexport default store;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file Utilities for managing Date objects and date parsing\n * @author Will Cooper\n * @module Epic.VideoApp.Utils.DateTime\n */\n\nconst MINUTES_PER_HOUR = 60;\nconst SECONDS_PER_MINUTE = 60;\nconst MILLISECONDS_PER_SECOND = 1000;\n\n/**\n * Convenience method to convert hours to milliseconds for readability\n *\n * @export\n * @param hours number of hours to convert to milliseconds\n * @returns milliseconds representation of hours duration\n */\nexport function hoursToMs(hours: number): number {\n\treturn hours * MINUTES_PER_HOUR * SECONDS_PER_MINUTE * MILLISECONDS_PER_SECOND;\n}\n\n/**\n * Convenience method to convert minutes to milliseconds for readability\n *\n * @export\n * @param minutes number of minutes to convert to milliseconds\n * @returns milliseconds representation of minutes duration\n */\nexport function minutesToMs(minutes: number): number {\n\treturn minutes * SECONDS_PER_MINUTE * MILLISECONDS_PER_SECOND;\n}\n\n/**\n * Convenience method to convert seconds to milliseconds for readability\n *\n * @export\n * @param seconds number of seconds to convert to milliseconds\n * @returns milliseconds representation of seconds duration\n */\nexport function secondsToMs(seconds: number): number {\n\treturn seconds * MILLISECONDS_PER_SECOND;\n}\n\n/**\n * Convenience method to convert milliseconds to seconds\n * @export\n * @param timeMs number of milliseconds to convert to seconds\n * @returns seconds representation of milliseconds duration\n */\nexport function msToSeconds(timeMs: number): number {\n\treturn Math.round(timeMs / MILLISECONDS_PER_SECOND);\n}\n\n/**\n * Format a duration for display\n * @param timeMs time to format in milliseconds\n * @returns the formatted time\n */\nexport function getFormattedTime(timeMs: number): string {\n\tlet seconds = Math.round(timeMs / MILLISECONDS_PER_SECOND);\n\tconst hours = Math.floor(seconds / (MINUTES_PER_HOUR * SECONDS_PER_MINUTE));\n\tseconds %= MINUTES_PER_HOUR * SECONDS_PER_MINUTE;\n\tconst minutes = Math.floor(seconds / SECONDS_PER_MINUTE);\n\tseconds %= SECONDS_PER_MINUTE;\n\n\tconst formatToTwoDigits = (num: number): string => (\"0\" + num.toString()).slice(-2);\n\n\tlet returnVal = hours ? hours.toString() + \":\" + formatToTwoDigits(minutes) : minutes.toString();\n\treturnVal += \":\" + formatToTwoDigits(seconds);\n\n\treturn returnVal;\n}\n\n/**\n * Formats an ISO string into a display string showing the visit time.\n * There are issues with directly formatting ISO strings that do not contain timezone information on iOS Safari versions < 13.3 so we will provide that context when the default value does not.\n * @param isoDateString - Date string in ISO format.\n * @param locale - The locale to use for formatting the date.\n * @param formatOption - Optional parameter to specify if the date should be formatted as time only, date only, or both date and time. Default is both date and time.\n * Example (1:01:00 AM - January 1st, 2021) - 2021-01-01T01:01:00.0000000(-7:00 / +7:00 if timezone is supplied)\n * @returns the formatted string for the visit as best it can be approximated by parsing and formatting the ISO string\n */\nexport function formatDateDisplayString(\n\tisoDateString: string | null,\n\tlocale: string,\n\tformatOption?: \"timeOnly\" | \"dateOnly\",\n): string | null {\n\tif (!isoDateString) {\n\t\treturn null;\n\t}\n\ttry {\n\t\tconst isoTime = isoDateString.split(\"T\")[1];\n\t\tlet hasTzMarker = true;\n\t\t// If ISO string does not contain timezone information, attach local time zone information to avoid inaccurate time zone conversion\n\t\tif (!isoTime.toLowerCase().includes(\"z\") && !isoTime.includes(\"-\") && !isoTime.includes(\"+\")) {\n\t\t\tisoDateString += getLocalTimeZoneOffsetString();\n\t\t\thasTzMarker = false;\n\t\t}\n\n\t\tif (locale === \"zz-epic\") {\n\t\t\tlocale = \"en-gb\";\n\t\t}\n\n\t\tconst dateTimeOptions: Intl.DateTimeFormatOptions =\n\t\t\tformatOption === \"timeOnly\"\n\t\t\t\t? {\n\t\t\t\t\t\thour: \"numeric\",\n\t\t\t\t\t\tminute: \"numeric\",\n\t\t\t\t }\n\t\t\t\t: formatOption === \"dateOnly\"\n\t\t\t\t? {\n\t\t\t\t\t\tmonth: \"long\", // Use long format so that screen readers can read dates correctly (issue #368).\n\t\t\t\t\t\tday: \"numeric\",\n\t\t\t\t\t\tyear: \"numeric\",\n\t\t\t\t }\n\t\t\t\t: {\n\t\t\t\t\t\tmonth: \"long\", // Use long format so that screen readers can read dates correctly (issue #368).\n\t\t\t\t\t\tday: \"numeric\",\n\t\t\t\t\t\tyear: \"numeric\",\n\t\t\t\t\t\thour: \"numeric\",\n\t\t\t\t\t\tminute: \"numeric\",\n\t\t\t\t };\n\n\t\tif (hasTzMarker) {\n\t\t\tdateTimeOptions.timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n\t\t\tif (formatOption !== \"dateOnly\") {\n\t\t\t\tdateTimeOptions.timeZoneName = \"short\";\n\t\t\t}\n\t\t}\n\n\t\t// date time format to use (ex. 1/1/2021, 10:00 AM)\n\t\tconst dateTimeFormat = Intl.DateTimeFormat([locale], dateTimeOptions);\n\n\t\treturn dateTimeFormat.format(new Date(isoDateString));\n\t} catch (error) {\n\t\t// if the date couldn't be formatted, return null\n\t\treturn null;\n\t}\n}\n\n/**\n * Use the current timezone offset to determine the local timezone offset\n * @returns A formatted string of the local timezone offset\n * Either -HOUR:MINUTES or +HOUR:MINUTES depending on where the date falls in relation to UTC\n */\nfunction getLocalTimeZoneOffsetString(): string {\n\t// Flip the value of the time-offset according to mozilla documentation\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset#negative_values_and_positive_values\n\tconst tzOffset = -new Date().getTimezoneOffset();\n\n\t// Parse minutes and hours from the offset\n\tconst absTzOffset = Math.abs(tzOffset);\n\tconst hours = Math.floor(absTzOffset / MINUTES_PER_HOUR);\n\tconst minutes = absTzOffset % MINUTES_PER_HOUR;\n\n\t// Format the values so the Date object can be parsed from the ISO string properly.\n\t// Requires two-digits in the hour and minute. \"07:00\" not \"7:00\"\n\tconst sign = tzOffset / absTzOffset < 0 ? \"-\" : \"+\";\n\tconst minutesStr = (\"0\" + minutes.toString()).slice(-2);\n\tconst hourStr = (\"0\" + hours.toString()).slice(-2);\n\treturn sign + hourStr + \":\" + minutesStr;\n}\n","/**\n * @copyright Copyright 2021-2023 Epic Systems Corporation\n * @file Shared types used by alerts/modal pop-ups\n * @author Will Cooper\n * @module Epic.VideoApp.Types.Alerts\n */\n\nimport { minutesToMs } from \"~/utils/dateTime\";\nimport { IUser } from \"~/web-core/interfaces\";\nimport { IImageCaptureAlertData } from \"./imageCapture\";\n\n/// CONSTANTS ///\n\n// We will wait a total of five minutes before disconnecting a user from the lobby\n// They will be notified of their time limit with one-minute to go\nconst LobbyTotalTimeOutValueMS = 300000; // 5 minutes\nexport const LobbyPopupTimeMS = 60000 + 400; // 1 minute, plus 400ms to show \"0:00\" when the timer ends\nexport const LobbyTimeToPopupMS = LobbyTotalTimeOutValueMS - LobbyPopupTimeMS; // Time until we display the popup, so it ends right at the timeout point\n\n// If a toast alert is dismissed, don't bring it back for 10 minutes unless specified elsewhere\nexport const DefaultToastDismissTimeMS = 10 * 60 * 1000;\n\n// How long the pop-up should be displayed for. The feedback survey pop-up uses this value to determine how soon to appear, and shows a countdown\n// starting at this value within the pop-up\nexport const FeedbackSurveyPopupTimeMs = minutesToMs(1) + 400; // 1 minute, plus 400ms to show \"0:00\" when the timer ends\n\n// How long to show the user about their inactivity before disconnecting them from the call. It runs during the call if there is a single user.\nexport const InactivityPopupTimeMS = minutesToMs(10);\nexport const PopupOffset = 400; // 400ms to show \"0:00\" when the timer ends\n/// BANNERS ///\n\nexport type AlertBannerType = \"local-screen-share\";\n\n/// ALERTS ///\n\nexport enum AlertType {\n\tgenericMessage,\n\tdisconnectChoice,\n\tconcurrentSessionChoice,\n\ttimeoutChoice,\n\tdiscardChoice,\n\tscreenShareWarning,\n\tremoveParticipant,\n\tendVisit,\n\tendVisitConfirmation,\n\timageCaptureRetry,\n\tgenericCountdown,\n\tinCallInactivityChoice,\n}\n\ninterface IAlertBase {\n\ttype: AlertType;\n}\n\n// Type that covers all alerts we can show\nexport type IAlert =\n\t| IGenericAlert\n\t| IChoiceAlert\n\t| IEndVisitAlert\n\t| IImageCaptureAlert\n\t| IScreenShareWarningAlert\n\t| IGenericCountdownAlert;\n\n// Choice alert - show a message, and two buttons (confirm choice and cancel)\nexport interface IChoiceAlertBase extends IAlertBase {\n\tmessage: string;\n\tconfirmText?: string;\n\tconfirmHotkey?: string;\n\tcancelText?: string;\n\tcancelHotkey?: string;\n}\n\ninterface ISimpleChoiceAlert extends IChoiceAlertBase {\n\ttype:\n\t\t| AlertType.disconnectChoice\n\t\t| AlertType.concurrentSessionChoice\n\t\t| AlertType.timeoutChoice\n\t\t| AlertType.discardChoice\n\t\t| AlertType.endVisitConfirmation\n\t\t| AlertType.inCallInactivityChoice;\n}\n\ninterface IChoiceAlertWithInfo extends IChoiceAlertBase {\n\talertData: T;\n}\n\nexport interface IImageCaptureAlert extends IChoiceAlertWithInfo {\n\ttype: AlertType.imageCaptureRetry;\n}\n\nexport interface IScreenShareWarningAlert extends IAlertBase {\n\ttype: AlertType.screenShareWarning;\n\tshareParticipant: IUser | null;\n}\n\ninterface IParticipantIdentity {\n\tidentity: string;\n\tguid?: string;\n}\n\nexport interface IRemoveParticipantAlert extends IChoiceAlertWithInfo {\n\ttype: AlertType.removeParticipant;\n}\n\n// Generic timeout alert - Show a message and a countdown with a single button to dismiss\nexport interface IGenericCountdownAlert extends IAlertBase {\n\ttype: AlertType.genericCountdown;\n\tmessage: string;\n\tcountdown: number;\n}\n\n// Generic alert - only shows a message, with an OK button\nexport interface IGenericAlert extends IAlertBase {\n\ttype: AlertType.genericMessage;\n\tmessage: string;\n}\n\nexport type IChoiceAlert = ISimpleChoiceAlert | IImageCaptureAlert | IRemoveParticipantAlert;\n\ninterface IEndVisitAlert extends IAlertBase {\n\ttype: AlertType.endVisit;\n}\n\n/// TOASTS ///\n\nexport type ToastType =\n\t| \"audio-track-muted\"\n\t| \"active-speaker\"\n\t| \"bandwidth-congestion-detected\"\n\t| \"bandwidth-congestion-grid\"\n\t| \"camera-switch-failed\"\n\t| \"image-capture-ready\"\n\t| \"image-capture-successful\"\n\t| \"image-captured\"\n\t| \"language-loading\"\n\t| \"multi-participant-waiting\"\n\t| \"multi-participant-request\"\n\t| \"remote-screen-shared\"\n\t| \"screen-share-disabled\"\n\t| \"single-participant-request\"\n\t| \"single-participant-waiting\"\n\t| \"user-moderated\"\n\t| \"chat-unread-message\"\n\t| \"video-track-muted\";\n\nexport type ToastStyle = \"success\" | \"language-loading\";\n\nexport interface IToastBase {\n\tmessageToken: string;\n\tmessageArgs?: string[];\n\ttoastStyle?: ToastStyle;\n\tdismissTimeMS?: number;\n\tttlSeconds?: number;\n\ttype?: ToastType;\n}\n\ninterface IToastWithInfo extends IToastBase {\n\textraInfo: T;\n}\n\ninterface ISimpleToast extends IToastBase {\n\ttype:\n\t\t| \"active-speaker\"\n\t\t| \"audio-track-muted\"\n\t\t| \"bandwidth-congestion-detected\"\n\t\t| \"bandwidth-congestion-grid\"\n\t\t| \"camera-switch-failed\"\n\t\t| \"image-capture-ready\"\n\t\t| \"image-capture-successful\"\n\t\t| \"image-captured\"\n\t\t| \"language-loading\"\n\t\t| \"multi-participant-waiting\"\n\t\t| \"multi-participant-request\"\n\t\t| \"screen-share-disabled\"\n\t\t| \"user-moderated\"\n\t\t| \"chat-unread-message\"\n\t\t| \"video-track-muted\";\n}\n\ninterface IParticipantIdentifierInfo {\n\tidentity: string;\n}\n\nexport interface IRemoteScreenSharedToast extends IToastWithInfo {\n\ttype: \"remote-screen-shared\";\n}\n\nexport interface ISingleParticipantToast extends IToastWithInfo {\n\ttype: \"single-participant-request\" | \"single-participant-waiting\";\n}\n\nexport type Toast = IRemoteScreenSharedToast | ISingleParticipantToast | ISimpleToast;\n\nexport type ToastWithId = Toast & { id: string };\n","/**\n * @copyright Copyright 2021-2024 Epic Systems Corporation\n * @file Types used during the authentication process\n * @author Will Cooper\n * @module Epic.VideoApp.Types.Auth\n */\n\nimport { DebuggingLogLevel } from \"~/state/room\";\nimport { VideoVendor } from \"~/web-core/types\";\nimport { IClientConfigurationDTO } from \"./user\";\n\n/** Valid FDI query parameters and our server's auth endpoint parameters */\nexport enum AuthRequestParameters {\n\tencryptedString = \"encryptedString\",\n\torgId = \"organizationID\",\n\tuseSecondaryEncryptionKey = \"secondaryKey\",\n\tlaunchToken = \"launch\",\n\tuserType = \"UT\",\n\ttelehealthToken = \"TT\",\n\tdemoSystemComputerName = \"cn\",\n\tdemoSystemMajorVersion = \"mv\",\n\tuseLowBandwidthMode = \"LowBandwidth\",\n\tuserId = \"userId\",\n\tconferenceID = \"conferenceId\",\n\tcaptureClientLogs = \"captureLogs\",\n\tsetName = \"setName\",\n\tskipHardwareTest = \"skipHardwareTest\",\n}\n\n/** Alternative FDI query parameters that can be used in place of parameters from AuthRequestParameters */\nenum AlternativeFDIParameters {\n\torgIdShort = \"org\",\n\ttelehealthTokenLong = \"telehealthToken\",\n\tuseSecondaryEncryptionKeyShort = \"sKey\",\n\tuserTypeLong = \"userType\",\n}\n\n/**\n * All valid FDI query parameters, combining those directly passed through to auth endpoints and their alternatives\n */\nexport type FDIQueryParameters = AuthRequestParameters | AlternativeFDIParameters;\nexport const FDIQueryParameters = { ...AuthRequestParameters, ...AlternativeFDIParameters };\n\n// Server response from authorization calls\nexport interface IAuthorizationResults extends IAccessTokenUpdate {\n\tconferenceDateIso: string | null;\n\tdisplayName: string | null;\n\tencryptedDisplayName: string | null;\n\tuserKey: string;\n\tlogLevel: DebuggingLogLevel;\n}\n\n/**\n * Reasons that authentication/validation may fail for the video client (keep in sync with AuthFailureReason in VideoCallAuthException.cs)\n * Not an exhaustive list, but should include reasons that will be communicated to users on the error page\n */\nexport enum AuthFailureReason {\n\tunknown = 0,\n\ttooEarly = 1,\n\ttooLate = 2,\n\tremoved = 3,\n}\n\nexport interface IAuthFailure {\n\tfailureReason: AuthFailureReason;\n}\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function instanceOfIAuthFailure(object: any): object is IAuthFailure {\n\treturn \"failureReason\" in object;\n}\n\nexport interface IConfigurationUpdateDTO {\n\tclientConfiguration: IClientConfigurationDTO;\n\tencryptedConfiguration: string;\n}\n\nexport interface IAccessTokenUpdate extends IConfigurationUpdateDTO {\n\tjwt: string;\n\texpirationSeconds: number;\n\thasRefreshToken: boolean;\n\tuseLowBandwidthMode: boolean;\n}\n\nexport interface IHardwareTestAuth extends Partial {\n\tjwt: string;\n\tvendorOverride?: VideoVendor; // Used to override the vendor configured in client configuration\n}\n\nexport interface IDisplayNameResponse {\n\tdisplayName: string;\n}\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file generic types\n * @author Colin Walters\n * @module Epic.VideoApp.Types.Generic\n */\n\nexport type ToggleState = \"off\" | \"on\";\n\nexport type Timeout = ReturnType;\n\n// this should align (partially) with the event type enum in SystemEvent.cs\n// ensure that any EventTypes that should be auditable ad-hoc are allowed in AuditFeatureModel.IsValid()\nexport enum EventType {\n\tscreenSharingStarted = 10,\n\tscreenSharingStopped = 11,\n\tmicrophoneLocked = 17,\n\tmicrophoneUnlocked = 18,\n\tcameraLocked = 19,\n\tcameraUnlocked = 20,\n\tparticipantAudioRequest = 21,\n\tparticipantVideoRequest = 22,\n\tscreenSharingLocked = 27,\n\tscreenSharingUnlocked = 28,\n\tparticipantScreenShareRequest = 29,\n\tlaunchedPictureInPicture = 51,\n\tautomatedHardwareTestSkip = 52,\n\tlocalStorageHardwareTestSkip = 53,\n}\n\nexport enum EventFlag {\n\thasScreenShareAudio = 1,\n}\n\nexport enum QueryParameters {\n\tsessionId = \"sessionID\",\n\tinIframe = \"inIframe\",\n\tskipHardwareTest = \"skipHardwareTest\",\n\tsetName = \"setName\",\n}\n\n/**\n * Month values represent JavaScript date values, i.e. January is month 0 rather than 1\n */\nexport enum Month {\n\tjanuary = 0,\n\tfebruary = 1,\n\tmarch = 2,\n\tapril = 3,\n\tmay = 4,\n\tjune = 5,\n\tjuly = 6,\n\taugust = 7,\n\tseptember = 8,\n\toctober = 9,\n\tnovember = 10,\n\tdecember = 11,\n}\n\nexport interface ITestable {\n\t\"data-testid\"?: string;\n}\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file Types related to device status and overall hardware test status\n * @author Will Cooper\n * @module Epic.VideoApp.Types.Hardware\n */\n\nimport { BannerType } from \"~/components/Utilities/BubbleBanner\";\n\nexport interface IDeviceState {\n\treadonly status: DeviceStatus;\n\treadonly errorType: DeviceStatusSubtype;\n}\n\nexport interface IHardwareTestResult {\n\tsuccess: boolean;\n\tcamera: IDeviceStatus;\n\tmicrophone: IDeviceStatus;\n\tspeaker: IDeviceStatus;\n\terrorCode: string;\n\terrorMessage: string;\n\tuserLanguage: string;\n\tshouldLogToEpic: boolean;\n}\n\nexport interface IDeviceStatus {\n\tfailure: boolean;\n\tlabel: string;\n}\n\n// Status for a specific device\nexport enum DeviceStatus {\n\tsuccess,\n\twarning,\n\terror,\n\ttesting,\n\tunknown,\n}\n\nexport enum DeviceStatusSubtype {\n\tnone,\n\tgeneral = \"Generic error\", // Browser reported a generic error that may or may not be for this device\n\thardwareError = \"Unable to acquire device\", // Browser was unable to acquire the device\n\tpermissionsError = \"Browser permissions denied\", // User denied permissions in the browser\n\tunknown = \"Unspecified error\", // Our parsing didn't recognize the error\n\tnoDevice = \"Unable to detect device\", // No device selected error, selectors should only allow this when no devices\n\n\tneverStarted = \"Microphone failed to produce audio\", // Mic warning - never produced audio\n\tstoppedWorking = \"Microphone stopped producing audio\", // Mic warning - stopped producing audio\n\ttestInterrupted = \"Microphone test interrupted\", // Mic warning - mic got disabled before we could finish checking for audio\n}\n\n// Overall hardware test status\nexport enum HardwareTestStatus {\n\ttesting,\n\tpassed,\n\tfailed,\n}\n\nexport enum HardwareTestTab {\n\tdevices,\n\tbackgrounds,\n\tclosed,\n}\n\nexport interface IStatusBannerInfo {\n\tmessage: string;\n\ttype: BannerType;\n\tadditionalDetails?: string;\n}\n\nexport interface IHardwareTestCurrentTab {\n\ttab: HardwareTestTab;\n\tisAutoSelected: boolean;\n}\n\n// Error type with its own message on the main card\nexport enum HardwareTestError {\n\tnone,\n\tgeneralError,\n\tmicrophoneError,\n\tcameraError,\n\tpermissionsError,\n\tunknown,\n}\n\nexport interface IStreamDevices {\n\tisAudioEnabled: boolean;\n\tisVideoEnabled: boolean;\n}\n\nexport type TrackAcquisitionStatus = \"notStarted\" | \"finished\" | \"showingWarning\";\n\nexport const volumeDetectionThreshold = 6;\n\nexport const DisplayNameInputMaxLength = 32;\n\nexport const EpicReportableMicDeviceStatus = [DeviceStatus.error, DeviceStatus.warning];\n\nexport const EpicReportableMicDeviceStatusSubtype = [\n\tDeviceStatusSubtype.none,\n\tDeviceStatusSubtype.general,\n\tDeviceStatusSubtype.hardwareError,\n\tDeviceStatusSubtype.permissionsError,\n\tDeviceStatusSubtype.unknown,\n\tDeviceStatusSubtype.noDevice,\n];\n\nexport const EpicReportableCameraDeviceStatus = [DeviceStatus.error, DeviceStatus.warning];\n\nexport const EpicReportableSpeakerDeviceStatus = [DeviceStatus.error];\n","/**\n * @copyright Copyright 2021-2024 Epic Systems Corporation\n * @file Types for Image Capture\n * @author Will Cooper\n * @module Epic.VideoApp.Types.ImageCapture\n */\n\nexport interface ITelemedicineDocType {\n\ttitle: string;\n\tid: string;\n}\n\nexport interface IImageCaptureAlertData {\n\tdocTypeId: string;\n\tdescription: string;\n}\n\nexport interface IMediaTokenResponse {\n\tmediaToken: string;\n}\n\n/** This directly matches the number of characters that can be entered when directly adding an image to the Notes activity in Haiku */\nexport const DescriptionMaxLength = 255;\n","/**\n * @copyright Copyright 2022-2024 Epic Systems Corporation\n * @file Custom global functions exposed in App.tsx\n * @author Gavin Lefebvre\n * @module Epic.VideoApp.Utils.WindowGlobals\n */\n\n/**\n * Check used by embedded mobile views to determine if a user is connected to their video call.\n * Used to determine whether to show a warning pop-up before closing the view in mobile apps.\n * @returns True if the user is connected to a video call, false otherwise\n */\nexport const embeddedMobileConnectedCheck = (): boolean => window.session.connectionStatus === \"connected\";\n\n/**\n * Check to see whether EVC is being shown within a mobile embedded view from an Epic mobile app.\n * @returns True if the website is being shown within a mobile embedded view\n */\nexport const isEmbeddedMobileView = (): boolean => {\n\treturn !!window?.Android?.closeWindow || !!window?.webkit?.messageHandlers?.closeWindow;\n};\n\n/**\n * Try to close the embedded mobile view, if EVC is being displayed inside one.\n * If EVC is shown embedded in a mobile application, will cause the view to close.\n * Otherwise, will do nothing.\n */\nexport const tryCloseEmbeddedMobileView = (): void => {\n\tif (window?.Android?.closeWindow) {\n\t\twindow.Android.closeWindow();\n\t} else if (window?.webkit?.messageHandlers?.closeWindow?.postMessage) {\n\t\twindow.webkit.messageHandlers.closeWindow.postMessage(\"\");\n\t}\n};\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file Browser support utilities\n * @author Matt Panico\n * @module Epic.VideoApp.Utils.Browser\n */\n\n/* eslint-disable @typescript-eslint/prefer-includes */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n\nimport { detectOS, isIOS, isWkWebView, OS } from \"./os\";\nimport { isEmbeddedMobileView } from \"./windowGlobals\";\n\nexport type Browser =\n\t| \"chrome\"\n\t| \"firefox\"\n\t| \"edge\"\n\t| \"safari\"\n\t| \"opera\"\n\t| \"legacy-edge\"\n\t| \"samsung-internet\"\n\t| \"ie\"\n\t| \"google-search-app\"\n\t| \"unknown\";\n\n/**\n * Determine the browser that the user is using\n * @returns the detected browser\n */\nexport function detectBrowser(): Browser {\n\tconst { userAgent } = navigator;\n\t// these checks match the order in UserAgentServices.ParseBrowserFromUserAgent\n\tif (/chrome\\//i.test(userAgent)) {\n\t\tif (/edg\\//i.test(userAgent)) {\n\t\t\treturn \"edge\";\n\t\t}\n\t\tif (/edge\\//i.test(userAgent)) {\n\t\t\treturn \"legacy-edge\";\n\t\t}\n\t\tif (/samsungbrowser\\//i.test(userAgent)) {\n\t\t\treturn \"samsung-internet\";\n\t\t}\n\t\tif (/opr\\//i.test(userAgent)) {\n\t\t\treturn \"opera\";\n\t\t}\n\t\treturn \"chrome\";\n\t}\n\tif (/crios\\//i.test(userAgent)) {\n\t\treturn \"chrome\";\n\t}\n\tif (/firefox\\//i.test(userAgent) || /fxios\\//i.test(userAgent)) {\n\t\treturn \"firefox\";\n\t}\n\tif (/edgios\\//i.test(userAgent)) {\n\t\treturn \"edge\";\n\t}\n\tif (/opera\\//i.test(userAgent) || /opt\\//i.test(userAgent)) {\n\t\treturn \"opera\";\n\t}\n\tif (/version\\//i.test(userAgent)) {\n\t\treturn \"safari\";\n\t}\n\tif (/rv:11.0/i.test(userAgent) || /msie/i.test(userAgent)) {\n\t\treturn \"ie\";\n\t}\n\tif (/gsa\\//i.test(userAgent)) {\n\t\treturn \"google-search-app\";\n\t}\n\treturn \"unknown\";\n}\n\n/**\n * Determine if the current browser is Legacy Edge\n * @returns true if the current browser is Legacy Edge, false otherwise\n */\nexport function isLegacyEdge(): boolean {\n\treturn detectBrowser() === \"legacy-edge\";\n}\n\n/**\n * Determine if the current browser is Modern/Chromium Edge\n * @returns true if the userAgent reports as edge, false otherwise;\n */\nexport function isChromiumEdge(): boolean {\n\treturn detectBrowser() === \"edge\";\n}\n/**\n * Determine if the current browser is Safari\n * @returns true if the current browser is Safari, false otherwise\n */\nexport function isSafari(): boolean {\n\treturn detectBrowser() === \"safari\";\n}\n\n/**\n * Determine if the current browser is Firefox\n * @returns true if the current browser is Firefox, false otherwise\n */\nexport function isFirefox(): boolean {\n\treturn detectBrowser() === \"firefox\";\n}\n\n/**\n * Determine if the current browser is Opera\n * @returns true if the current browser is Opera, false otherwise\n */\nfunction isOpera(): boolean {\n\treturn detectBrowser() === \"opera\";\n}\n\n/**\n * Determine if the current browser is Samsung Internet\n * @returns true if the current browser is Samsung Internet, false otherwise\n */\nexport function isSamsungInternet(): boolean {\n\treturn detectBrowser() === \"samsung-internet\";\n}\n\n/**\n * Determine if the current browser appears to be an embedded iOS browser.\n * This is a WKWebView that is not Chrome and has our embedded mobile functions stored in the window.\n *\n * For these devices, detectBrowser returns \"unknown\" based on UA string\n *\n * @returns true if the current browser is an Embedded IOS browser, false otherwise\n */\nexport function isEmbeddedIOS(): boolean {\n\treturn isWkWebView && !isChrome() && isEmbeddedMobileView();\n}\n\n/**\n * Determine if the current browser supports client hints\n * https://developer.mozilla.org/en-US/docs/Web/API/User-Agent_Client_Hints_API\n * @returns true if the current browser supports hints, false otherwise\n */\nexport function clientSupportsUAHints(): boolean {\n\treturn !!navigator.userAgentData;\n}\n\n/**\n * Browser strings from the brands property that support client hints\n * https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Sec-CH-UA\n */\ntype UAHintsBrowsers = \"chromium\" | \"google chrome\" | \"microsoft edge\" | \"opera\";\n\n/**\n * Checks if a client is using chrome with client hints\n *\n * @returns whether or not a client is using chrome\n * */\nexport function isChrome(): boolean {\n\tif (clientSupportsUAHints()) {\n\t\treturn browserUAHints(\"google chrome\");\n\t}\n\n\treturn detectBrowser() === \"chrome\";\n}\n\n/**\n * Checks what browser a client is using with user agents hints brand property\n *\n * @param browser Which browser to check the UAHints data against\n *\n * @returns True if one of the brands in the brands array matches the input browser\n * */\nfunction browserUAHints(browser: UAHintsBrowsers): boolean {\n\tconst { userAgentData } = navigator;\n\tif (!userAgentData) {\n\t\treturn false;\n\t}\n\n\tconst trimBrowser = browser.trim().toLowerCase();\n\treturn (\n\t\tuserAgentData.brands.filter((brands) => brands.brand.trim().toLowerCase() === trimBrowser).length >= 1\n\t);\n}\n\n/**\n * Check if a browser matches browser and version with UAHints\n *\n * @param browser string of the browser to compare to\n * @param version number of the browser version to compare to\n * @param filter optional filter function to compare the browser version and the given version. Defaults to equality if not provided.\n * The version argument will be passed as the second argument to filter() if filter() is provided.\n *\n * @returns true if the userAgentData matches the browser and version with applied filtering on version, false otherwise,\n * or if user agent client hints are not available.\n */\nexport function browserVersionUAHints(\n\tbrowser: string,\n\tversion: number,\n\tfilter?: (uaVersion: number, checkVersion: number) => boolean,\n): boolean {\n\tconst { userAgentData } = navigator;\n\tif (!userAgentData) {\n\t\treturn false;\n\t}\n\tconst trimBrowser = browser.trim().toLowerCase();\n\treturn userAgentData.brands\n\t\t.map((value) => {\n\t\t\treturn (\n\t\t\t\tvalue.brand.trim().toLowerCase() === trimBrowser &&\n\t\t\t\tapplyFilter(parseInt(value.version, 10), version, filter)\n\t\t\t);\n\t\t})\n\t\t.some(Boolean);\n}\n\n/**\n * Check if two numbers match using a filtering function if given, otherwise using equality.\n *\n * @param version1 First version to compare\n * @param version2 Second version to compare\n * @param filter optional filter function to compare the browser version and the given version.\n * Defaults to equality if not provided. Version1 and version2 will be passed to filter in that order.\n *\n * @returns true if the version match, false otherwise.\n */\nfunction applyFilter(\n\tversion1: number,\n\tversion2: number,\n\tfilter?: (version1: number, version2: number) => boolean,\n): boolean {\n\tif (filter) {\n\t\treturn filter(version1, version2);\n\t}\n\treturn version1 === version2;\n}\n\n/**\n * Determine if the current browser supports WebRTC\n * @returns true if WebRTC appears to be supported on the current browser, false otherwise\n */\nexport function isWebRTCSupported(): boolean {\n\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\tconst nav = navigator as any;\n\n\t// nav.mediaDevices check is for non-safari browsers on iOS devices\n\t// On versions prior to 14.3, that api is only exposed to safari.\n\tif (!nav.mediaDevices) {\n\t\treturn false;\n\t}\n\n\treturn !!(\n\t\tnav.getUserMedia ||\n\t\tnav.webkitGetUserMedia ||\n\t\tnav.mozGetUserMedia ||\n\t\tnav.msGetUserMedia ||\n\t\twindow.RTCPeerConnection\n\t);\n}\n\n/**\n * Determine if the current browser is supported\n * @returns true if the browsers is supported, false otherwise\n */\nexport function isSupportedBrowser(): boolean {\n\tif (!isWebRTCSupported()) {\n\t\treturn false;\n\t}\n\tif (isLegacyEdge()) {\n\t\treturn false;\n\t}\n\t// Previously, on iOS we only supported browsers supported by Twilio. Because iOS WebRTC\n\t// support has expanded, browsers with WebRTC APIs are allowed, but show a not recommend banner.\n\t// Here we block Edge and Opera because they experienced frequent crashes in our testing.\n\t// Note: Edge did not see crashes on iOS versions before 15, but we block all version to avoid losing support upon upgrade.\n\tif (detectOS() === OS.ios && (isOpera() || isChromiumEdge())) {\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n\n/** Whether or not HTML 5 is supported on the current browser */\nexport const IS_HTML5_SUPPORTED = typeof HTMLCanvasElement.prototype.getContext === \"function\";\n\n/** Whether or not HTMLAudioElement.setSinkId is supported on the current browser */\nexport const IS_SET_SINK_ID_SUPPORTED = typeof HTMLAudioElement.prototype.setSinkId === \"function\";\n\nexport type SafariDetectableVersions =\n\t| \"14+\"\n\t| \"14.5+\"\n\t| \"15+\"\n\t| \"15.2+\"\n\t| \"15.4+\"\n\t| \"15.6+\"\n\t| \"16+\"\n\t| \"17+\"\n\t| \"18+\";\n\n/**\n * Perform feature detection in the browser environment at various inflection points where the\n * version is expected to be the earliest implementation of some feature (and prior versions will\n * be undefined for such behavior)\n * @param version a SafariDetectableVersion that's been added to the type above and has\n * an implemented feature detection algorithm\n * @returns true if the browser is able to meet the feature detection; false if undefined\n */\nexport function safariDetectedAtVersion(version: SafariDetectableVersions): boolean {\n\t// must be Safari or Safari-derived engine\n\tif (!(isSafari() || isIOS())) {\n\t\treturn false;\n\t}\n\n\t// https://developer.apple.com/documentation/safari-release-notes/safari-18-release-notes\n\tif (version === \"18+\") {\n\t\treturn \"startViewTransition\" in document;\n\t}\n\n\t// https://developer.apple.com/documentation/safari-release-notes/safari-17-release-notes\n\tif (version === \"17+\") {\n\t\treturn CSS.supports(\"contain-intrinsic-size\", \"inherit\");\n\t}\n\n\t// https://developer.apple.com/documentation/safari-release-notes/safari-16-release-notes\n\t// 16.0+ was valid on iPhones, whereas desktop MacOS & iPadOS released at 16.1+ (16.0+ was only on their betas)\n\t// so we'll consolidate this to \"16+\" to mark this as our major version differentiator\n\tif (version === \"16+\") {\n\t\treturn CSS.supports(\"text-align-last\", \"center\");\n\t}\n\n\t// https://developer.apple.com/documentation/safari-release-notes/safari-15_6-release-notes\n\t// https://webkit.org/blog/13009/new-webkit-features-in-safari-15-6/\n\tif (version === \"15.6+\") {\n\t\treturn CSS.supports(\"selector(:modal)\");\n\t}\n\n\t// https://developer.apple.com/documentation/safari-release-notes/safari-15_4-release-notes\n\tif (version === \"15.4+\") {\n\t\treturn \"hasOwn\" in window.Object;\n\t}\n\n\t// https://developer.apple.com/documentation/safari-release-notes/safari-15_2-release-notes\n\tif (version === \"15.2+\") {\n\t\treturn \"FileSystemHandle\" in window;\n\t}\n\n\t// https://developer.apple.com/documentation/safari-release-notes/safari-15-release-notes\n\tif (version === \"15+\") {\n\t\treturn \"BigInt64Array\" in window;\n\t}\n\n\t// https://caniuse.com/?compare=ios_saf+14.0-14.4,ios_saf+14.5-14.8&compareCats=JS,JS%20API\n\tif (version === \"14.5+\") {\n\t\treturn \"AudioContext\" in window;\n\t}\n\n\t// https://caniuse.com/?compare=ios_saf+13.4-13.7,ios_saf+14.0-14.4&compareCats=JS,JS%20API\n\tif (version === \"14+\") {\n\t\treturn \"BigInt\" in window;\n\t}\n\n\treturn false;\n}\n\n/**\n * Determine if the current window is being rendered within an iframe\n * @returns true if the page is in an iframe, false otherwise\n */\nexport function isInIframe(): boolean {\n\ttry {\n\t\treturn window.self !== window.top;\n\t} catch {\n\t\t// browsers can block access to window.top based on same origin policy (https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy)\n\t\treturn true;\n\t}\n}\n\n/**\n * An async function determining whether this browser is impacted from the Chromium memory leak that affects background effects\n * @returns true between Chromium versions 122.0 and 122.0.6261.112, false for other browsers and Chromium versions\n */\nexport async function onMemoryLeakAffectedChromiumVersion(): Promise {\n\tconst isChromiumVersion122 = browserVersionUAHints(\n\t\t\"Chromium\",\n\t\t122,\n\t\t(uaVersion: number, checkVersion: number) => {\n\t\t\treturn uaVersion === checkVersion;\n\t\t},\n\t);\n\n\tif (!isChromiumVersion122) {\n\t\treturn false;\n\t}\n\n\tif (typeof navigator.userAgentData !== \"undefined\") {\n\t\tconst ua = await navigator.userAgentData.getHighEntropyValues([\"fullVersionList\"]);\n\t\tconst chromiumVersionInfo = ua.fullVersionList?.find((item) => item.brand === \"Chromium\");\n\t\tif (!chromiumVersionInfo) {\n\t\t\treturn true;\n\t\t}\n\t\tconst chromiumVersion = chromiumVersionInfo.version;\n\t\treturn compareGranularVersions(chromiumVersion, \"122.0.6261.112\") < 0;\n\t} else {\n\t\treturn true;\n\t}\n}\n\n/**\n * Given two versions in format X.Y.A.B consisting of natural numbers, compares which one is larger\n * @param firstVersion Chromium based browser version string. For example: 122.0.66.33\n * @param secondVersion Chromium based browser version string. For example: 122.0.66.33\n * @returns Returns positive if first one is larger, negative if second one is larger, zero if they are fully equal\n */\nexport function compareGranularVersions(firstVersion: string, secondVersion: string): number {\n\tconst firstVersionSections = firstVersion.split(\".\").map(Number);\n\tconst secondVersionSections = secondVersion.split(\".\").map(Number);\n\n\tfor (let i = 0; i < Math.max(firstVersionSections.length, secondVersionSections.length); i++) {\n\t\tconst firstSubversion = firstVersionSections[i] || 0;\n\t\tconst secondSubversion = secondVersionSections[i] || 0;\n\n\t\tif (firstSubversion < secondSubversion) {\n\t\t\treturn -1;\n\t\t} else if (firstSubversion > secondSubversion) {\n\t\t\treturn 1;\n\t\t}\n\t}\n\treturn 0;\n}\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file Utility to detect the operating system from the user agent\n * @author Matt Panico\n * @module Epic.VideoApp.Utils.Os\n */\n\nimport {\n\tclientSupportsUAHints,\n\tisSafari,\n\tSafariDetectableVersions,\n\tsafariDetectedAtVersion,\n} from \"./browser\";\n\nexport enum OS {\n\tios,\n\tmac,\n\tandroid,\n\twindows,\n\tchromeOS,\n\tlinux,\n\tother,\n}\n\nexport function isIOS(): boolean {\n\t// definitely iOS\n\tif (/iPad|iPhone|iPod|iOS/i.test(navigator.platform)) {\n\t\treturn true;\n\t}\n\n\t// iPad pretending to be a mac\n\tif (/mac/i.test(navigator.platform) && navigator.maxTouchPoints > 1) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nexport function isMacOS(): boolean {\n\treturn /mac/i.test(navigator.platform) && !isIOS();\n}\n\nfunction isAndroid(): boolean {\n\treturn /android/i.test(navigator.platform) || /android/i.test(navigator.userAgent);\n}\n\nfunction isWindows(): boolean {\n\treturn /win/i.test(navigator.platform);\n}\n\nfunction isChromeOS(): boolean {\n\treturn /cros/i.test(navigator.platform);\n}\n\nfunction isLinux(): boolean {\n\treturn /ubuntu|linux/i.test(navigator.platform);\n}\n\nexport function detectOS(): OS {\n\tif (isAndroid()) {\n\t\treturn OS.android;\n\t}\n\n\tif (isIOS()) {\n\t\treturn OS.ios;\n\t}\n\n\tif (isWindows()) {\n\t\treturn OS.windows;\n\t}\n\n\t// make sure this comes after isIOS, some iPads like to play pretend\n\tif (isMacOS()) {\n\t\treturn OS.mac;\n\t}\n\n\tif (isLinux()) {\n\t\treturn OS.linux;\n\t}\n\n\tif (isChromeOS()) {\n\t\treturn OS.chromeOS;\n\t}\n\n\treturn OS.other;\n}\n\nexport function isMobile(): boolean {\n\tconst myOS = detectOS();\n\treturn [OS.android, OS.ios].includes(myOS);\n}\n\nexport type UserAgentDevice = \"iPhone\" | \"default\";\n\n/**\n * Checks whether any of an array of substrings is present in the UserAgent string.\n * Case insensitive. Validated on iOS 14.2 - 15.0 for iPhone / iPad (when requesting mobile site)\n *\n * @param devices array of strings to test for userAgent presence\n * @returns true if found\n */\nexport function isDeviceNameInUA(devices: UserAgentDevice[]): boolean {\n\treturn devices.some((dev) => navigator.userAgent.toLowerCase().includes(dev.toLowerCase()));\n}\n\n/**\n * Checks the current user agent string to determine if we are on a specific iOS version.\n * Validated for iOS 14.2 -> 15.0\n *\n * @param version the version to check. Should be formatted as X_x rather than X.x\n * @returns whether or not the current device is on the requested iOS version\n * */\nexport function isOnIOSVersion(version: string): boolean {\n\tif (!isIOS()) {\n\t\treturn false;\n\t}\n\n\t//Try to clean up the version tag\n\tversion = version.replace(\".\", \"_\");\n\t// if someone tried \"14.\" or \"14_\" remove the trailing delimiter\n\tif (version.charAt(version.length - 1) === \"_\") {\n\t\tversion = version.slice(0, -1);\n\t}\n\n\t// These cases cover iOS 14.2 and later versions being run with \"Request Mobile Site\"\n\tconst iPad = new RegExp(\"iPad; CPU OS \" + version, \"i\");\n\tconst iPhone = new RegExp(\"CPU iPhone OS \" + version, \"i\");\n\tconst iPod = new RegExp(\"CPU iPhone \" + version, \"i\");\n\n\t// Some non-Apple browsers (Firefox) will report a platform of iPad but a UA of iPhone.\n\t// navigator.platform is deprecated, so only check against the userAgent\n\tconst ua = navigator.userAgent;\n\treturn iPad.test(ua) || iPhone.test(ua) || iPod.test(ua);\n}\n\nexport const iOSWebAudioWorkarounds = iOSDetectedAtVersion(\"14+\") && !iOSDetectedAtVersion(\"15.4+\");\nexport const iOSVerAudioGainWorkarounds = iOSDetectedAtVersion(\"15+\") && !iOSDetectedAtVersion(\"15.4+\");\nexport const iOSVerRenderingWorkarounds = iOSDetectedAtVersion(\"15+\") && !iOSDetectedAtVersion(\"15.2+\");\nexport const iOSVerMediaRecycleWorkarounds = iOSDetectedAtVersion(\"18+\");\nexport const isWkWebView = isIOS() && !isSafari();\nexport const isMacSafari = isMacOS() && isSafari();\n\n/**\n * Perform feature detection in the browser environment at various inflection points where the\n * version is expected to be the earliest implementation of some feature (and prior versions will\n * be undefined for such behavior)\n * @param version a SafariDetectableVersion that's been added to the type\n * @returns true if the device is IOS and is able to meet the feature detection; false otherwise\n */\nexport function iOSDetectedAtVersion(version: SafariDetectableVersions): boolean {\n\t// can't detect iOS at version if not iOS\n\treturn isIOS() && safariDetectedAtVersion(version);\n}\n\n/**\n * Checks if a browser that supports client hints is on android 12\n *\n * @returns whether or not a client is on android 12\n * */\nasync function isAndroid12ClientHints(): Promise {\n\tconst { userAgentData } = navigator;\n\t// detect android 12 using user agent client hints\n\tif (userAgentData) {\n\t\tif (userAgentData.mobile && userAgentData.platform === \"Android\") {\n\t\t\tconst { platformVersion } = await userAgentData.getHighEntropyValues([\"platformVersion\"]);\n\t\t\treturn !!platformVersion?.startsWith(\"12\");\n\t\t}\n\t}\n\n\treturn false;\n}\n\n/**\n * Checks if a browser is on android 12, using client hints if available, otherwise falling back to user agent string regex\n *\n * @returns whether or not a client is on android 12\n * */\nexport async function isAndroid12(): Promise {\n\tif (clientSupportsUAHints()) {\n\t\treturn isAndroid12ClientHints();\n\t}\n\n\tconst ua = navigator.userAgent;\n\tconst android12Regexp = new RegExp(\"Android 12\");\n\treturn detectOS() === OS.android && android12Regexp.test(ua);\n}\n","/**\n * @copyright Copyright 2021-2023 Epic Systems Corporation\n * @file layout related constants\n * @author Colin Walters\n * @module Epic.VideoApp.Types.Layout\n */\n\nimport { isMobile } from \"~/utils/os\";\n\n// all of the menu pages in the drop down menu\nexport type Menu =\n\t| \"menu\"\n\t| \"devices\"\n\t| \"participants\"\n\t| \"languages\"\n\t| \"background\"\n\t| \"admitOptions\"\n\t| \"participantOptions\"\n\t| \"about\";\n\n// The video UI layout\nexport type VideoUILayoutType = \"Active Speaker\" | \"Grid\";\n\n// HTML ID of the fullscreen-able
element\nexport const FullScreenContainerId = \"full-screen-container\";\n\n// inflection point between when controls are shown in header vs. in button tray\n// this should match $screen-width-inflection in _utilities.scss\nexport const ScreenWidthInflectionPoint = 850;\n\n// minimum screen height to display the header bar\n// this should match $small-screen-width-inflection in _utilities.scss\nexport const SmallScreenWidthInflectionPoint = ScreenWidthInflectionPoint - 300;\n\n// minimum screen height to display the header bar\n// this should match $minimum-screen-size-for-header in _utilities.scss\nexport const MinimumScreenHeightForHeader = 525;\n\n// minimum height / width for the participant strip to hold its max capacity\nexport const MinSizeForMaxStripCapacity = 500;\n\n// minimum dimensions for a video within our Grid display mode (4:3 aspect ratio)\n// used to calculate a safe maximum number of videos that will fit based on screen size\n// mobile devices are allowed to have thinner, shorter videos\n// we may display smaller video on incredibly small screens in order to guarantee that we can render at least one remote feed per grid page\nexport const MinVideoWidth = isMobile() ? 150 : 200;\nexport const MinVideoHeight = MinVideoWidth * 0.75;\n\nexport const VideoMargin = 1;\nexport const VideoAspectRatio = 0.75;\n\n// Context that a component should be rendered in\nexport enum DisplayContext {\n\tstandAlone,\n\tlobby,\n\tdevicesTray,\n}\n\nexport interface IDimensions {\n\theight: number;\n\twidth: number;\n}\n\nexport enum StyleContext {\n\tlight,\n\tdark,\n}\n\nexport interface IMenuContext {\n\tisInMenu: boolean;\n}\n","/**\n * @copyright Copyright 2023 Epic Systems Corporation\n * @file Types for Local Tracks\n * @author Trevor Roussel\n * @module Epic.VideoApp.Types.LocalTracks\n */\n\nimport { LocalAudioTrack, LocalVideoTrack } from \"twilio-video\";\n\nexport interface IScreenShareState {\n\ttrack: LocalVideoTrack;\n\taudioTrack: LocalAudioTrack | undefined;\n}\n\nexport enum VideoSwitchResult {\n\tnoSwitchNeeded = 0,\n\tswitchSuccess = 1,\n\tswitchFailed = 2,\n}\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file DataTrack Messaging types\n * @author Will Cooper\n * @module Epic.VideoApp.Types.Messaging\n */\n\nimport { INamelessParticipantData } from \"~/components/VideoCall/hooks/useNamelessParticipantData\";\nimport { EpicUserType } from \"./user\";\n\n// generic type for messages\n// includes message type, payload, and any other metadata headers that all messages should provide\ninterface IDataTrackMessageBase {\n\ttype: MessageType;\n\tpayload: T;\n\taction: MessageActionType; //If \"request\" must also send recipient\n\tneedsACK: boolean; //Flag for whether this message needs acknowledgement\n\tmessageSID?: string; // Unique message ID (only needed for messages that need ACKs)\n\trecipients?: string[]; //Should only be included if type is not broadcast\n}\n\n// Generic\nexport interface IAckMessagePayload {\n\tmessageID: string; //the exact message we wish to inform the sender that we successfully received\n}\n\n// Participant information update message\nexport interface IParticipantUpdatePayload extends IAckMessagePayload {\n\tcameraLocked: boolean;\n\tmicLocked: boolean;\n\tscreenShareLocked: boolean;\n\t// Whether screen share has been disabled by configuration\n\tscreenShareAllowed: boolean;\n\t// Whether screen share has been disabled by device support\n\tdeviceSupportsScreenShare: boolean;\n\tdisplayName: string;\n\tuserType: EpicUserType;\n\tinWaitingRoom: boolean;\n}\n\n/**\n * Values for messages that will perform moderator actions.\n *\n * Undefined - make no update\n * False - remove a lock on the associated media\n * True - lock the associated media\n */\nexport interface IModeratorPayload {\n\taudioLock?: boolean;\n\tvideoLock?: boolean;\n\tscreenShareLock?: boolean;\n}\n\n/**\n *\n * Undefined -> Don't update state\n * False -> Not requesting\n * True -> Requesting access\n */\nexport interface IAccessRequestPayload {\n\taudioRequest?: boolean;\n\tvideoRequest?: boolean;\n\tscreenShareRequest?: boolean;\n}\n\nexport interface IInfoUpdateMessage extends IDataTrackMessageBase {\n\ttype: MessageType.participantInfo;\n}\n\n// Info request\nexport interface IInfoRequestMessage extends IDataTrackMessageBase {\n\ttype: MessageType.infoRequest;\n}\n\n// Blank name list synchronization\nexport interface INamelessParticipantSyncRequestPayload {\n\tnamelessParticipantData: INamelessParticipantData;\n}\nexport interface INamelessParticipantSyncRequest\n\textends IDataTrackMessageBase {\n\ttype: MessageType.namelessParticipantSyncRequest;\n}\n\nexport interface INamelessParticipantSyncResponsePayload {\n\tnamelessParticipantData: INamelessParticipantData;\n}\nexport interface INamelessParticipantSyncResponse\n\textends IDataTrackMessageBase {\n\ttype: MessageType.namelessParticipantSyncResponse;\n}\n\nexport interface IModeratorActionMessage extends IDataTrackMessageBase {\n\ttype: MessageType.moderate;\n}\n\nexport interface IVisitAccessMessage extends IDataTrackMessageBase {\n\ttype: MessageType.visitAccess;\n}\n\nexport interface IMediaAccessRequestMessage extends IDataTrackMessageBase {\n\ttype: MessageType.accessRequest;\n}\n\nexport interface IImageCapturedMessage extends IDataTrackMessageBase {\n\ttype: MessageType.imageCaptured;\n}\n\nexport interface IVisitEnded extends IDataTrackMessageBase {\n\ttype: MessageType.visitEnded;\n}\n\nexport enum MessageType {\n\tparticipantInfo,\n\tinfoRequest,\n\tacknowledge,\n\tnamelessParticipantSyncRequest,\n\tnamelessParticipantSyncResponse,\n\tmoderate,\n\tvisitAccess,\n\taccessRequest,\n\timageCaptured,\n\tvisitEnded,\n}\n\nexport enum MessageActionType {\n\tbroadcast,\n\trequest,\n}\n\nexport type IDataTrackMessage =\n\t| IInfoRequestMessage\n\t| IInfoUpdateMessage\n\t| INamelessParticipantSyncRequest\n\t| INamelessParticipantSyncResponse\n\t| IModeratorActionMessage\n\t| IVisitAccessMessage\n\t| IMediaAccessRequestMessage\n\t| IImageCapturedMessage\n\t| IVisitEnded;\n\nexport const initialCallDelay = 500;\n","/**\n * @copyright Copyright 2023 Epic Systems Corporation\n * @file Twilio Room Info Types\n * @author Will Cooper\n * @module Epic.VideoApp.Types.Room\n */\n\nimport { Log } from \"twilio-video\";\nimport { secondsToMs } from \"~/utils/dateTime\";\nimport { IUser } from \"~/web-core/interfaces\";\nimport { VideoType } from \"~/web-core/types\";\nimport { EpicUserType } from \"./user\";\n\nexport type CallLayout = \"two-feeds\" | \"multi-feed\";\n\n// the only two that we currently use, other options are \"au1\", \"br1\", \"ie1\", \"de1\", \"jp1\", \"sg1\", \"gll\"\nexport type TwilioRegion = \"us1\" | \"us2\";\n\n// Number of milliseconds to wait before attempting to disconnect audio and video tracks for a second time after the call\nexport const disconnectTrackCallbackMs = secondsToMs(3);\n\n// the regionID typing is done to match some twilio connect option typing\nexport interface ICallRoomInfo {\n\ttoken: string | null;\n\troomID: string | null;\n\tuserID: string | null;\n\tregionID?: TwilioRegion;\n}\n\nexport interface IParticipantVideo {\n\t/** SID of the participant that owns the video feed */\n\treadonly identity: string;\n\n\t/** the type of the video feed */\n\treadonly videoType: VideoType;\n}\n\nexport interface IParticipantWithName {\n\t/** Room participant */\n\tparticipant: IUser;\n\n\t/** Display name of the participant */\n\tdisplayName: string;\n}\n\nexport interface IPinningState {\n\t/** last time that pinning was updated (from Date.now()) */\n\treadonly lastUpdate: number;\n\n\t/** the original pin source for the current participant */\n\treadonly updateSource: IPinSource;\n\n\t/** video that is currently pinned, null for no video pinned */\n\treadonly pinnedVideo: IParticipantVideo | null;\n}\n\nexport type IPinSource = \"Default\" | \"ImageCapture\";\n\nexport interface IParticipantInfo {\n\tuserType: EpicUserType;\n\tdisplayName: string;\n\tidentity: string;\n\tmicLocked: boolean;\n\tcameraLocked: boolean;\n\tscreenShareLocked: boolean;\n\tscreenShareAllowed: boolean;\n\tdeviceSupportsScreenShare: boolean;\n\tinWaitingRoom: boolean;\n}\n\nexport interface IStreamStatus {\n\tenabled: boolean;\n\tlocked: boolean;\n}\n\nexport interface ISupportedLocales {\n\tlocales: Record;\n}\n\nexport interface IClientLoggingConfig {\n\tlogLevel: Log.LogLevelDesc | null;\n\tinterval: number; //in seconds\n}\n","/**\n * @copyright Copyright 2021 - 2024 Epic Systems Corporation\n * @file types related to the user preferences and user specific data\n * @author Steven Anderson\n * @module Epic.VideoApp.Types.User\n */\n\nimport { FeedbackPageStep } from \"~/types/survey\";\nimport { VideoVendor } from \"~/web-core/types\";\nimport { IBrandingConfig } from \"./branding\";\nimport { ITelemedicineDocType } from \"./imageCapture\";\n\nexport enum EpicUserType {\n\tunknown = 0,\n\temp = 1,\n\twpr = 2,\n\trla = 3,\n}\n\nexport interface IClientConfigurationDTO {\n\tuserPermissions: IUserPermissions;\n\tdocumentTypes: ITelemedicineDocType[];\n\trequiresVisitAccess: boolean;\n\tpatientName: string;\n\tconferenceDateIso: string;\n\tuserType: EpicUserType;\n\tuseLowBandwidthMode: boolean;\n\twaitingRoomUrl: string;\n\tinitialFeedbackState: FeedbackPageStep;\n\tenvironment?: EnvironmentType;\n\tbranding: IBrandingConfig | null;\n\thideGuardrails: boolean;\n\tguardrailDaysHidden: number;\n\tnotifyImageCapture: boolean;\n\tforceDisplayName: boolean;\n\tshouldCheckBrowserCompatibilityForBackground: boolean;\n\tvendor: VideoVendor;\n\tchatEnabled: boolean;\n\tskipHardwareTest: boolean;\n\tclientVideoVisitInstant: string;\n\tisConferenceTimeEstimate: boolean;\n}\n\nexport enum EnvironmentType {\n\tprd = \"PRD\",\n\ttst = \"TST\",\n\tdemo = \"DEMO\",\n}\n\nexport interface IUserPermissions {\n\tcanShareScreen: boolean;\n\tcanCaptureImage: boolean;\n\tcanModerateVisit: boolean;\n\tcanStartEndVisit: boolean;\n\tcanNotSetDisplayName: boolean;\n\tcanAccessBlurring: boolean;\n\tcanAccessEpicBackgrounds: boolean;\n\tcanTestSpeaker: boolean;\n\tdisableAllBackgrounds: boolean;\n}\n\nexport interface IBackgroundAccess {\n\tblurAccess: boolean;\n\tepicBackgroundsAccess: boolean;\n}\n\nexport interface IUserPreferences {\n\tencryptedDisplayName: string | null;\n\tpreferredLocale: string | null;\n\tlastBackgroundProcessor: string;\n}\n\n// State settings for optional guardrails we allow users to individually disable\nexport interface IUserGuardOptions {\n\tdismissedScreenShareWarning: boolean;\n\tskipHardwareTest: boolean;\n}\n\n// Used to log dismissal time within localStorage\nexport interface ISaveUserGuardOptions {\n\t// If a user dismisses the warning, we log the date of dismissal as a UTC string and check if a refresh is due at load time\n\tdismissedScreenShareWarning: string | null;\n\tskipHardwareTest: string | null;\n}\n\nexport enum GuardOptionProperties {\n\tdismissedScreenShareWarning = 0,\n\tskipHardwareTest = 1,\n\tstopSkipHardwareTest = 2,\n}\n\nexport interface IUserPreferencesWithEncryption {\n\tdisplayName: string;\n}\n\nexport interface IChatNegotiateResponse {\n\tserviceAddress: string;\n\ttoken: string;\n}\n","/**\n * @copyright Copyright 2022 Epic Systems Corporation\n * @file Interfaces & Helpers for RTCStats logging\n * @author Gavin Lefebvre\n * @module Epic.VideoApp.Types.WebRTCStats\n */\n\nimport Video from \"twilio-video\";\n\n/** Interfaces */\n\nexport interface ISignalingRoom extends Video.Room {\n\t_signaling: {\n\t\t_peerConnectionManager: {\n\t\t\t_peerConnections: Map;\n\t\t};\n\t};\n}\n\nexport interface IStatsCollector extends StringKeyObject {\n\tactiveIceCandidatePair: StandardizedIceStatsArray;\n\tlocalAudioTrackStats: Record;\n\tremoteAudioTrackStats: Record;\n\tlocalVideoTrackStats: Record;\n\tremoteVideoTrackStats: Record;\n}\n\nexport interface IGetStatsDto {\n\troomId: string;\n\tparticipantIdentity: string;\n\ttimestamp: number;\n\tdata: IStatsCollector;\n}\n\n/**\n * Target log file that data should be logged to (keep in sync with LogTargetFile in DebugQueryStringModel.cs)\n */\nexport enum LogTargetFile {\n\tclientLogs = 0,\n\twebRTCLogs = 1,\n}\n\n/** Helper functions */\n\nexport function getEmptyIceCandidatePairArray(): StandardizedIceStatsArray {\n\treturn {\n\t\tavailableIncomingBitrate: [],\n\t\tavailableOutgoingBitrate: [],\n\t\tbytesReceived: [],\n\t\tbytesSent: [],\n\t\tconsentRequestsSent: [],\n\t\tcurrentRoundTripTime: [],\n\t\tlastPacketReceivedTimestamp: [],\n\t\tlastPacketSentTimestamp: [],\n\t\tlocalCandidate: [],\n\t\tnominated: [],\n\t\tpriority: [],\n\t\treadable: [],\n\t\tremoteCandidate: [],\n\t\trequestsReceived: [],\n\t\trequestsSent: [],\n\t\tresponsesReceived: [],\n\t\tresponsesSent: [],\n\t\tretransmissionsReceived: [],\n\t\tretransmissionsSent: [],\n\t\tstate: [],\n\t\ttotalRoundTripTime: [],\n\t\ttransportId: [],\n\t\twritable: [],\n\t};\n}\n\nexport function getEmptyTrackArray(): StandardizedTrackStatsArray {\n\treturn {\n\t\ttrackId: [],\n\t\tssrc: [],\n\t\ttimestamp: [],\n\t\tcodecName: [],\n\t\troundTripTime: [],\n\t\tjitter: [],\n\t\tframeWidthInput: [],\n\t\tframeHeightInput: [],\n\t\tframeWidthSent: [],\n\t\tframeHeightSent: [],\n\t\tframeWidthReceived: [],\n\t\tframeHeightReceived: [],\n\t\tframeRateInput: [],\n\t\tframeRateSent: [],\n\t\tframeRateReceived: [],\n\t\tbytesReceived: [],\n\t\tbytesSent: [],\n\t\tpacketsLost: [],\n\t\tpacketsReceived: [],\n\t\tpacketsSent: [],\n\t\ttotalPacketSendDelay: [],\n\t\ttotalEncodeTime: [],\n\t\tframesEncoded: [],\n\t\testimatedPlayoutTimestamp: [],\n\t\ttotalDecodeTime: [],\n\t\tframesDecoded: [],\n\t\tjitterBufferDelay: [],\n\t\tjitterBufferEmittedCount: [],\n\t\taudioInputLevel: [],\n\t\taudioOutputLevel: [],\n\t};\n}\n\nexport function getEmptyStats(): IStatsCollector {\n\treturn {\n\t\tactiveIceCandidatePair: getEmptyIceCandidatePairArray(),\n\t\tlocalAudioTrackStats: {},\n\t\tremoteAudioTrackStats: {},\n\t\tlocalVideoTrackStats: {},\n\t\tremoteVideoTrackStats: {},\n\t};\n}\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file general types to be used by the Epic Video Client\n * @author Colin Walters\n * @module Epic.VideoApp.Types.Index\n */\n\nexport * from \"./alerts\";\nexport * from \"./auth\";\nexport * from \"./generic\";\nexport * from \"./hardware\";\nexport * from \"./imageCapture\";\nexport * from \"./layout\";\nexport * from \"./localTracks\";\nexport * from \"./messaging\";\nexport * from \"./room\";\nexport * from \"./user\";\nexport * from \"./webRTCStats\";\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file Decentralized route handling\n * @author Erv Walter\n * @module Epic.VideoApp.App.Routes\n */\n\nimport { RouteComponentProps } from \"@reach/router\";\nimport { ComponentType } from \"react\";\n\nconst registeredRoutes: IRouteEntry[] = [];\nconst routePrefixRegex = new RegExp(/\\/telehealth\\/evc-(.*)\\//gim);\nlet routePathPrefix: string | null = null;\n\nexport function getRegisteredRoutes(): IRouteEntry[] {\n\treturn registeredRoutes;\n}\n\nexport interface IRouteEntry {\n\tpath: string;\n\tcomponent: ComponentType;\n\tredirectPaths?: string[];\n\trequiresWebRTC?: boolean;\n}\n\nexport interface IAddRouteFunction {\n\t(\n\t\tpath: string,\n\t\tcomponent: ComponentType,\n\t\tredirectPaths?: string[],\n\t\trequiresWebRTC?: boolean,\n\t): void;\n}\n\n/**\n * Routes are configured each time the app is loaded, so for efficiency we'll only create them\n * if we find the matching RegExp at initial load\n * @param path path to allow/display in browser\n * @param component component to load\n * @param redirectPaths array of paths to redirect to path\n * @param requiresWebRTC whether this component requires a WebRTC compat check in order to load\n */\nexport const addRoute: IAddRouteFunction = (path, component, redirectPaths, requiresWebRTC) => {\n\tconst prefix = getRoutePathPrefix();\n\n\tif (prefix !== \"/\" && globalThis.location.pathname.startsWith(prefix)) {\n\t\t// Convert endpoint path to endpoint URL (by prepending the current path prefix)\n\t\tpath = getEndpointUrl(path);\n\n\t\t// No need to process further if there is not a distinct new endpointUrl\n\t\tif (registeredRoutes.some((route) => route.path === path)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// update redirectPaths as well, i.e. for \"/telehealth/evc-1999/VideoCall\" update the redirects for \"/telehealth/evc-1999/Home\" as well\n\t\tif (redirectPaths && redirectPaths.length > 0) {\n\t\t\tredirectPaths.forEach((element, index) => {\n\t\t\t\tredirectPaths[index] = getEndpointUrl(element);\n\t\t\t});\n\t\t}\n\t}\n\n\tregisteredRoutes.push({\n\t\tpath,\n\t\tcomponent,\n\t\tredirectPaths,\n\t\trequiresWebRTC,\n\t});\n};\n\n/**\n * Gets the path prefix for endpoint routes.\n * @returns the path prefix for endpoint routes.\n */\nfunction getRoutePathPrefix(): string {\n\tif (routePathPrefix === null) {\n\t\tconst regExResult = routePrefixRegex.exec(globalThis.location.pathname);\n\t\troutePathPrefix = !!regExResult && regExResult[0] ? regExResult[0] : \"/\";\n\t\tif (routePathPrefix && routePathPrefix !== \"/\") {\n\t\t\t// Make sure that the route path prefix starts with /, but does not end with /.\n\t\t\tif (!routePathPrefix.startsWith(\"/\")) {\n\t\t\t\troutePathPrefix = \"/\" + routePathPrefix;\n\t\t\t}\n\t\t\tif (routePathPrefix.endsWith(\"/\")) {\n\t\t\t\troutePathPrefix = routePathPrefix.slice(0, routePathPrefix.length - 1);\n\t\t\t}\n\t\t\troutePathPrefix = routePathPrefix.toLowerCase();\n\t\t}\n\t}\n\n\treturn routePathPrefix;\n}\n\n/**\n * Gets the URL for a given endpoint path. Prepends the current path prefix when the EVC app is deployed to one or more sub-folders.\n * @param endpoint the endpoint path (e.g. \"/api/Auth/VideoCall\") to get the URL for.\n * @returns the URL for the given endpoint path.\n */\nexport function getEndpointUrl(endpoint: string): string {\n\tif (!endpoint) {\n\t\treturn endpoint;\n\t}\n\n\t//If we have a server URL already specified, the path prefix should be baked into it already\n\tif (window.ServerUrl && window.ServerUrl !== \"/\") {\n\t\treturn endpoint;\n\t}\n\n\t// No need to modify the endpoint if there is no path prefix or the endpoint already starts with the path prefix\n\tconst pathPrefix = getRoutePathPrefix();\n\tif (\n\t\t!pathPrefix ||\n\t\tpathPrefix === \"/\" ||\n\t\tendpoint.toLowerCase().startsWith(pathPrefix) ||\n\t\t!window.location.pathname.toLowerCase().includes(pathPrefix)\n\t) {\n\t\treturn endpoint;\n\t}\n\n\t// Prepend the path prefix to the endpoint.\n\tconst pathSep = endpoint.startsWith(\"/\") ? \"\" : \"/\";\n\treturn pathPrefix + pathSep + endpoint;\n}\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file general utility functions\n * @author Colin Walters\n * @module Epic.VideoApp.Utils.General\n */\n\nimport { getEndpointUrl } from \"~/app/routes\";\nimport { ToggleState, VideoMargin } from \"~/types\";\nimport { BackgroundResourceType } from \"~/types/backgrounds\";\n\nconst DEV_SERVER = \"https://localhost:44334\";\n\n/**\n * Get whether or not the application is running in a development environment\n * @returns true if running in a development environment, false otherwise\n */\nexport function isDevEnvironment(): boolean {\n\treturn process.env.NODE_ENV === \"development\";\n}\n\n/**\n * Get the URL to an API on our application's web server, taking into account dev environments\n * @param path path to make the link to\n * @returns URL to the specified path\n */\nexport function makeLink(path: string): string {\n\tlet basePath = window.ServerUrl;\n\tif (!basePath) {\n\t\tbasePath = isDevEnvironment() ? DEV_SERVER : \"\";\n\t}\n\tbasePath = basePath ?? \"/\";\n\tif (!basePath.endsWith(\"/\")) {\n\t\tbasePath += \"/\";\n\t}\n\tpath = getEndpointUrl(path); // Use appropriate path prefix to get endpoint URL.\n\tconst pathName = path.replace(/^\\/+/g, \"\"); // remove leading /\n\treturn basePath + pathName;\n}\n\n/**\n * Get the URL to a resource on our application's web server\n * @param type the type of resource being loaded\n * @param file the resource file name to get a link to\n * @returns URL to the specified resource\n */\nexport function makeResourceLink(\n\ttype: \"AudioFile\" | \"Processor\" | BackgroundResourceType,\n\tfile: string,\n): string {\n\treturn makeLink(`Resource/${type}/${file}`);\n}\n\n/**\n * Get a pseudo random ID from combination of timestamp and random number\n * @returns pseudo random ID\n */\nexport function getPseudoRandomId(): string {\n\t// date time in milliseconds followed by a random number all converted to base 16\n\treturn Date.now().toString(16) + Math.random().toString(16).substring(2);\n}\n\n/**\n * No op\n *\n * iOS Safari doesn't display :active CSS styling unless touch event listeners are present (see https://bit.ly/3kOYu1v),\n * so we attach this noop to various buttons. MyChart applies a similar workaround that is bound to elements with class=\"button\" here:\n * https://codesearch/default.aspx?view=search/client#name=PatientEngagement%5CMyChartWebServer%5CWeb%5CScripts%5CUI_Framework%5CCore%5CCommon.js\n */\nexport function noOp(): void {} // eslint-disable-line @typescript-eslint/no-empty-function\n\n/**\n * Determine if the boolean value matches the ToggleState passed in\n * @param bool boolean value to check\n * @param state toggle state to check\n * @returns true if bool \"matches\" toggle, (true and \"on\") or (false and \"off\"), false otherwise\n */\nexport function boolMatchesToggleState(bool: boolean, state?: ToggleState): boolean {\n\treturn (bool && state === \"on\") || (!bool && state === \"off\");\n}\n\n/**\n * Filter a list of values to a list of its unique entries\n * @param array list to filter\n * @returns array filtered down to its unique entries\n */\nexport function getUniqueValues(array: T[]): T[] {\n\treturn array.filter((val, index) => array.indexOf(val) === index);\n}\n\n/**\n * Convert the string into an arraybuffer (charCode byte array)\n * that can be directly passed from this request body to another resource\n *\n * @param input String to convert to byte values\n * @returns An ArrayBuffer representing the data in the\n */\nexport function stringToBuffer(input: string): ArrayBuffer {\n\tconst length = input.length;\n\tconst bytes = new Uint8Array(length);\n\tfor (let i = 0; i < length; i++) {\n\t\tbytes[i] = input.charCodeAt(i);\n\t}\n\treturn bytes.buffer;\n}\n\n/**\n * Try to focus a DOM element\n * @param selectors array of HTML selectors used to find an element to focus, the first selector that finds an element will be used\n * @returns true if an element is focused, false otherwise\n */\nexport function focusElement(selectors: string | string[]): boolean {\n\tselectors = Array.isArray(selectors) ? selectors : [selectors];\n\n\t// find the first element matching one of the selectors\n\tlet elementToFocus: Element | null = null;\n\tfor (let i = 0; i < selectors.length && !elementToFocus; ++i) {\n\t\telementToFocus = document.querySelector(selectors[i]);\n\t}\n\n\tif (!elementToFocus) {\n\t\treturn false;\n\t}\n\n\tconst htmlElement = elementToFocus as HTMLElement;\n\thtmlElement.focus();\n\treturn true;\n}\n\n/**\n *\n * Helper function to determine the effective width or height of a video element\n *\n * @param dimension - The height or width to modify with the expected margin of the video\n * @returns The effective size of the video (height or width) + double the margin\n */\nexport function getVideoSizeWithMargin(dimension: number): number {\n\treturn dimension + VideoMargin * 2;\n}\n","/**\n * @copyright Copyright 2020-2024 Epic Systems Corporation\n * @file Shared state for alerts\n * @author Tara Feldstein\n * @module Epic.VideoApp.State.Alerts\n */\n\nimport { buildSharedState } from \"@epic/react-redux-booster\";\nimport store from \"~/app/store\";\nimport {\n\tAlertBannerType,\n\tAlertType,\n\tIAlert,\n\tIChoiceAlert,\n\tIGenericAlert,\n\tIGenericCountdownAlert,\n\tTimeout,\n\tToast,\n\tToastType,\n\tToastWithId,\n} from \"~/types\";\nimport { getPseudoRandomId } from \"~/utils/general\";\nimport { IUser } from \"~/web-core/interfaces\";\n\n/// TYPES ///\n\nexport interface IAlertState {\n\tcurrentAlerts: IAlert[];\n\tbanner: AlertBannerType | null;\n\ttoasts: Record;\n\tdismissedToasts: Record;\n\tdisconnectionHandle: Timeout | null;\n\tbackgroundChangedAlert: boolean;\n\tbackgroundName: string;\n\tbackgroundClearedAlert: boolean;\n\tadmittedAlert: boolean;\n\tdisplayModeAlert: string;\n\twaitingRoomAlert: boolean;\n\temptyRoomAlert: boolean;\n\tdidRequestInactivityExtension: boolean;\n\tlanguageChangedAlert: boolean;\n}\n\n/// INIT ///\n\nexport function getInitialState(): IAlertState {\n\treturn {\n\t\tcurrentAlerts: [],\n\t\tbanner: null,\n\t\ttoasts: {},\n\t\tdismissedToasts: {},\n\t\tdisconnectionHandle: null,\n\t\tbackgroundChangedAlert: false,\n\t\tbackgroundName: \"\",\n\t\tbackgroundClearedAlert: false,\n\t\tadmittedAlert: false,\n\t\tdisplayModeAlert: \"\",\n\t\twaitingRoomAlert: false,\n\t\temptyRoomAlert: false,\n\t\tdidRequestInactivityExtension: false,\n\t\tlanguageChangedAlert: false,\n\t};\n}\n\n/// REDUCERS ///\n\n// Adds an alert. Currently replaces the old alert, if any\nfunction postGenericAlert(state: IAlertState, message: string): IAlertState {\n\tconst newAlert: IGenericAlert = {\n\t\tmessage: message,\n\t\ttype: AlertType.genericMessage,\n\t};\n\n\tconst newAlerts: IAlert[] = state.currentAlerts?.slice() ?? [];\n\tnewAlerts.push(newAlert);\n\treturn {\n\t\t...state,\n\t\tcurrentAlerts: newAlerts,\n\t};\n}\n\nfunction postGenericCountdownAlert(state: IAlertState, newAlert: IGenericCountdownAlert): IAlertState {\n\tconst newAlerts: IAlert[] = state.currentAlerts?.slice() ?? [];\n\tnewAlerts.push(newAlert);\n\treturn {\n\t\t...state,\n\t\tcurrentAlerts: newAlerts,\n\t};\n}\n\nfunction postChoiceAlert(state: IAlertState, newAlert: IChoiceAlert): IAlertState {\n\tconst newAlerts: IAlert[] = state.currentAlerts.slice();\n\tnewAlerts.push(newAlert);\n\treturn {\n\t\t...state,\n\t\tcurrentAlerts: newAlerts,\n\t};\n}\n\nexport function postScreenShareWarningAlert(state: IAlertState, shareParticipant: IUser | null): IAlertState {\n\tconst newAlerts: IAlert[] = state.currentAlerts.slice() ?? [];\n\tnewAlerts.push({ type: AlertType.screenShareWarning, shareParticipant });\n\treturn { ...state, currentAlerts: newAlerts };\n}\n\nfunction postEndVisitAlert(state: IAlertState): IAlertState {\n\tconst newAlerts = state.currentAlerts.slice();\n\tnewAlerts.push({ type: AlertType.endVisit });\n\treturn { ...state, currentAlerts: newAlerts };\n}\n\nexport function postToastAlert(state: IAlertState, toast: Toast): IAlertState {\n\t// If inbound toast type was dismissed within it's chosen throttle period, don't show again\n\tconst throttleCutoff = state.dismissedToasts[toast.type];\n\n\tif (throttleCutoff >= Date.now()) {\n\t\treturn state;\n\t}\n\t// if toast type is specified, it must be unique\n\tconst newToasts = toast.type ? removeToastsOfType(state.toasts, toast.type) : { ...state.toasts };\n\n\tconst toastId = getPseudoRandomId();\n\tnewToasts[toastId] = toast;\n\n\treturn { ...state, toasts: newToasts };\n}\n\ninterface IReplaceParams {\n\tnewToast: Toast;\n\treplaceType: ToastType;\n}\n\nfunction replaceToast(state: IAlertState, params: IReplaceParams): IAlertState {\n\tconst { newToast: toast, replaceType } = params;\n\n\tconst newToasts = removeToastsOfTypes(state.toasts, [toast.type, replaceType]);\n\n\tconst toastId = getPseudoRandomId();\n\tnewToasts[toastId] = toast;\n\n\treturn { ...state, toasts: newToasts };\n}\n\n/**\n * Dismisses a toast notification. If a time is supplied, the toast will be throttled from being\n * displaying until that time is up. If no time is supplied (a value of 0) we will have no throttling.\n *\n * @param state - Current state\n * @param toastId - the toast Id to dismiss\n * @returns - Updated state after removing a toast\n */\nfunction dismissToastAlert(state: IAlertState, toastId: string): IAlertState {\n\tconst newToasts = { ...state.toasts };\n\tconst newDismissedToasts = { ...state.dismissedToasts };\n\tconst toastToDelete = newToasts[toastId];\n\n\t/** If we are dismissing a valid toast type, check if we should throttle future toasts */\n\tif (toastToDelete && toastToDelete.type) {\n\t\tconst dismissTime = toastToDelete.dismissTimeMS || 0;\n\t\tif (dismissTime !== 0) {\n\t\t\tconst cutOff = Date.now() + dismissTime;\n\t\t\tnewDismissedToasts[toastToDelete.type] = cutOff;\n\t\t}\n\t\tdelete newToasts[toastId];\n\t}\n\n\treturn { ...state, toasts: newToasts, dismissedToasts: newDismissedToasts };\n}\n\nexport function setBanner(state: IAlertState, banner: AlertBannerType | null): IAlertState {\n\treturn { ...state, banner };\n}\n\n// Clears the current alert.\nexport function clearAlert(state: IAlertState): IAlertState {\n\t// remove the first alert\n\tconst newAlerts: IAlert[] = state.currentAlerts.slice(1);\n\treturn {\n\t\t...state,\n\t\tcurrentAlerts: newAlerts,\n\t};\n}\n\n// Clears the first alert of the specified type\nexport function clearAlertType(state: IAlertState, type: AlertType): IAlertState {\n\tconst newAlerts = removeAlertsOfType(state.currentAlerts, type);\n\treturn { ...state, currentAlerts: newAlerts };\n}\n\n/**\n * Clear toasts of a specific type, or clears all toasts if null is passed in\n */\nexport function clearToasts(state: IAlertState, type: ToastType | null): IAlertState {\n\tconst newToasts = type ? removeToastsOfType(state.toasts, type) : {};\n\treturn { ...state, toasts: newToasts };\n}\n\nfunction clearMultipleToasts(state: IAlertState, types: ToastType[]): IAlertState {\n\tconst updatedToasts = removeToastsOfTypes(state.toasts, types);\n\treturn { ...state, toasts: updatedToasts };\n}\n\n// Sets the stored Timeout Handle\n// Pass a null timeout to clear\nfunction setDisconnectionTimeout(state: IAlertState, handle: Timeout | null): IAlertState {\n\tconst newState = {\n\t\t...state,\n\t\tdisconnectionHandle: handle,\n\t};\n\treturn newState;\n}\n\nfunction postScreenShareStartedAlerts(state: IAlertState): IAlertState {\n\tconst newToasts = removeToastsOfTypes(state.toasts, [\"remote-screen-shared\"]);\n\treturn { ...state, toasts: newToasts, banner: \"local-screen-share\" };\n}\n\nfunction setBackgroundChangedAlert(state: IAlertState, alert: boolean): IAlertState {\n\treturn { ...state, backgroundChangedAlert: alert };\n}\n\nfunction setBackgroundName(state: IAlertState, background: string): IAlertState {\n\treturn { ...state, backgroundName: background };\n}\n\nfunction setBackgroundClearedAlert(state: IAlertState, alert: boolean): IAlertState {\n\treturn { ...state, backgroundClearedAlert: alert };\n}\n\nfunction setAdmittedAlert(state: IAlertState, alert: boolean): IAlertState {\n\treturn { ...state, admittedAlert: alert };\n}\n\nfunction setDisplayModeAlert(state: IAlertState, displayMode: string): IAlertState {\n\treturn { ...state, displayModeAlert: displayMode };\n}\n\nfunction setDidRequestInactivityExtension(state: IAlertState, requested: boolean): IAlertState {\n\treturn { ...state, didRequestInactivityExtension: requested };\n}\n\nfunction setLanguageChangedAlert(state: IAlertState, alert: boolean): IAlertState {\n\treturn { ...state, languageChangedAlert: alert };\n}\n\nfunction setWaitingRoomAlert(state: IAlertState, alert: boolean): IAlertState {\n\treturn { ...state, waitingRoomAlert: alert };\n}\n\nfunction setEmptyRoomAlert(state: IAlertState, alert: boolean): IAlertState {\n\treturn { ...state, emptyRoomAlert: alert };\n}\n\n/// SELECTORS ///\n\nfunction getCurrentAlert(state: IAlertState): IAlert | null {\n\treturn state.currentAlerts.length ? state.currentAlerts[0] : null;\n}\n\nfunction getBanner(state: IAlertState): AlertBannerType | null {\n\treturn state.banner;\n}\n\nfunction getToastAlerts(state: IAlertState): ToastWithId[] {\n\tconst { toasts } = state;\n\treturn Object.keys(toasts).map((id) => ({ id, ...toasts[id] }));\n}\n\nfunction getDisconnectionHandle(state: IAlertState): Timeout | null {\n\treturn state.disconnectionHandle;\n}\n\nfunction getDidRequestInactivityExtension(state: IAlertState): boolean {\n\treturn state.didRequestInactivityExtension;\n}\n\n/// HELPERS ///\n\nfunction removeToastsOfTypes(toasts: Record, types: ToastType[]): Record {\n\tlet clearedToasts = { ...toasts };\n\ttypes.forEach((type) => (clearedToasts = removeToastsOfType(clearedToasts, type)));\n\treturn clearedToasts;\n}\n\nfunction removeAlertsOfType(alerts: IAlert[], type: AlertType): IAlert[] {\n\tfor (let idx = 0; idx < alerts.length; idx++) {\n\t\tif (alerts[idx].type === type) {\n\t\t\talerts.splice(idx);\n\t\t}\n\t}\n\treturn alerts;\n}\n\n/**\n * Helper function to remove all toasts of a particular type\n * @param toasts current toasts\n * @param type type of toasts to remove\n * @returns toasts with specific type filtered out\n */\nfunction removeToastsOfType(toasts: Record, type: ToastType): Record {\n\tconst newToasts = { ...toasts };\n\n\tObject.keys(newToasts).forEach((toastId) => {\n\t\tif (newToasts[toastId].type === type) {\n\t\t\tdelete newToasts[toastId];\n\t\t}\n\t});\n\n\treturn newToasts;\n}\n\nfunction getBackgroundChangedAlert(state: IAlertState): boolean {\n\treturn state.backgroundChangedAlert;\n}\n\nfunction getBackgroundName(state: IAlertState): string {\n\treturn state.backgroundName;\n}\n\nfunction getBackgroundClearedAlert(state: IAlertState): boolean {\n\treturn state.backgroundClearedAlert;\n}\n\nfunction getAdmittedAlert(state: IAlertState): boolean {\n\treturn state.admittedAlert;\n}\n\nfunction getDisplayModeAlert(state: IAlertState): string {\n\treturn state.displayModeAlert;\n}\n\nfunction getLanguageChangedAlert(state: IAlertState): boolean {\n\treturn state.languageChangedAlert;\n}\n\nfunction getWaitingRoomAlert(state: IAlertState): boolean {\n\treturn state.waitingRoomAlert;\n}\n\nfunction getEmptyRoomAlert(state: IAlertState): boolean {\n\treturn state.emptyRoomAlert;\n}\n\n/// BUILD IT ///\n\nconst builtState = buildSharedState({\n\tinit: getInitialState,\n\treducers: {\n\t\tpostGenericAlert,\n\t\tpostChoiceAlert,\n\t\tpostGenericCountdownAlert,\n\t\tclearAlert,\n\t\tclearAlertType,\n\t\tsetDisconnectionTimeout,\n\t\tpostToastAlert,\n\t\tdismissToastAlert,\n\t\tclearToasts,\n\t\tpostEndVisitAlert,\n\t\tpostScreenShareWarningAlert,\n\t\treplaceToast,\n\t\tclearMultipleToasts,\n\t\tsetBanner,\n\t\tpostScreenShareStartedAlerts,\n\t\tsetBackgroundChangedAlert,\n\t\tsetBackgroundName,\n\t\tsetBackgroundClearedAlert,\n\t\tsetAdmittedAlert,\n\t\tsetDisplayModeAlert,\n\t\tsetWaitingRoomAlert,\n\t\tsetEmptyRoomAlert,\n\t\tsetDidRequestInactivityExtension,\n\t\tsetLanguageChangedAlert,\n\t},\n\tselectors: {\n\t\tgetCurrentAlert,\n\t\tgetBanner,\n\t\tgetToastAlerts,\n\t\tgetDisconnectionHandle,\n\t\tgetBackgroundChangedAlert,\n\t\tgetBackgroundName,\n\t\tgetBackgroundClearedAlert,\n\t\tgetAdmittedAlert,\n\t\tgetDisplayModeAlert,\n\t\tgetDidRequestInactivityExtension,\n\t\tgetLanguageChangedAlert,\n\t\tgetWaitingRoomAlert,\n\t\tgetEmptyRoomAlert,\n\t},\n});\nstore.addSharedState(builtState.sharedState, \"alerts\");\n\nexport const { actionCreators: alertActions, useSharedState: useAlertState, sharedState: state } = builtState;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file shared authentication state\n * @author Colin Walters\n * @module Epic.VideoApp.State.Auth\n */\n\nimport { buildSharedState } from \"@epic/react-redux-booster\";\nimport store from \"~/app/store\";\n\n/// TYPES ///\n\nexport interface IAuthState {\n\treadonly jwt: string | null;\n\treadonly refreshTokenTimer: number | null;\n}\n\n/// INIT ///\n\nexport function getInitialState(): IAuthState {\n\treturn {\n\t\tjwt: null,\n\t\trefreshTokenTimer: null,\n\t};\n}\n\n/// REDUCERS ///\nexport function clearAuthState(): IAuthState {\n\treturn getInitialState();\n}\n\nexport function setJWT(state: IAuthState, newJWT: string | null): IAuthState {\n\treturn { ...state, jwt: newJWT };\n}\n\nfunction setRefreshTokenTimer(state: IAuthState, refreshTokenTimer: number | null): IAuthState {\n\treturn { ...state, refreshTokenTimer: refreshTokenTimer };\n}\n\n/// SELECTORS ///\n\nfunction getJWT(state: IAuthState): string | null {\n\treturn state.jwt;\n}\n\nfunction getRefreshTokenTimer(state: IAuthState): number | null {\n\treturn state.refreshTokenTimer;\n}\n\n/// BUILD IT ///\n\nconst builtState = buildSharedState({\n\tinit: getInitialState,\n\treducers: { setJWT, setRefreshTokenTimer, clearAuthState },\n\tselectors: { getJWT, getRefreshTokenTimer },\n});\n\nstore.addSharedState(builtState.sharedState, \"auth\");\n\nexport const { actionCreators: authActions, useSharedState: useAuthState, sharedState: state } = builtState;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file Types for Background Effects\n * @author Liam Liden\n * @module Epic.VideoApp.Types.Backgrounds\n */\n\n/// CONSTANTS ///\nexport const DesktopElements = 6;\nexport const DesktopInflectionElements = 3;\nexport const SmallInflectionElements = 2;\n\nexport const MenuBackgroundColor = \"#222\";\n\n/// TYPES ///\nexport type BackgroundResourceType = \"RemoteImage\" | \"BackgroundImage\";\n\nexport interface ICustomBackgroundProcessor {\n\tprocessor: BackgroundSettings;\n\tresourceType?: BackgroundResourceType; // Will be undefined for blur processor\n\tname?: string; // Alternate name if different from the path, e.g. for remote processors\n}\n\nexport type BackgroundProcessorsMap = Map;\n\nexport type BackgroundSettingKvp = [name: string, processor: ICustomBackgroundProcessor];\n\n// Used for checking status of background processor load\nexport type BackgroundProcessorLoadStatus = \"notStarted\" | \"acquiring\" | \"finished\" | \"failed\";\n\nexport enum DefaultImageNames {\n\t// Used for thumbnail used in none option when loading <6 background options\n\tnone = \"0none.png\",\n\t// Used for blurring option thumbnails\n\tblur = \"1blur.png\",\n\t// Virtual backgrounds\n\toffice = \"2office.png\",\n\tdark = \"3dark.png\",\n\tplanks = \"4planks.png\",\n\tspace = \"5space.png\",\n\t// Seasonal backgrounds\n\twinter = \"6winter.png\",\n\tspring = \"6spring.png\",\n\tsummer = \"6summer.png\",\n\tfall = \"6fall.png\",\n}\n\nexport type BackgroundSettings = { path: string } & (IImageBackgroundSettings | IBlurBackgroundSettings);\n\ninterface IImageBackgroundSettings {\n\ttype: \"image\";\n\tsrc: string;\n}\n\ninterface IBlurBackgroundSettings {\n\ttype: \"blur\";\n\tsrc: string;\n}\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file shared background processor state\n * @author Liam Liden\n * @module Epic.VideoApp.State.BackgroundProcessors\n */\n\nimport { buildSharedState } from \"@epic/react-redux-booster\";\nimport store from \"~/app/store\";\nimport {\n\tBackgroundProcessorLoadStatus,\n\tBackgroundProcessorsMap,\n\tBackgroundResourceType,\n\tBackgroundSettingKvp,\n\tBackgroundSettings,\n\tDefaultImageNames,\n\tICustomBackgroundProcessor,\n} from \"~/types/backgrounds\";\n\n/// TYPES ///\nexport interface IBackgroundProcessorsState {\n\treadonly backgroundProcessors: BackgroundProcessorsMap;\n\n\treadonly publishedBackgroundProcessor: string;\n\n\treadonly processorLoadStatus: BackgroundProcessorLoadStatus;\n}\n\n/// INIT ///\n\nexport function getInitialState(): IBackgroundProcessorsState {\n\treturn {\n\t\tbackgroundProcessors: new Map(),\n\t\tprocessorLoadStatus: \"notStarted\",\n\t\tpublishedBackgroundProcessor: DefaultImageNames.none,\n\t};\n}\n\n/// HELPERS ///\nfunction getOrderForResourceType(type: BackgroundResourceType | undefined): number {\n\tswitch (type) {\n\t\tcase undefined:\n\t\t\treturn 0;\n\t\tcase \"RemoteImage\":\n\t\t\treturn 1;\n\t\tcase \"BackgroundImage\":\n\t\t\treturn 2;\n\t}\n}\n\n/**\n * Orders two entries in the background processor map in sorted order\n * @param a First key-value-pair to sort\n * @param b Second key-value-pair to sort\n * @returns -1 if a sorts before b, 1 if b sorts before a\n */\nfunction sortBackgroundProcessors(a: BackgroundSettingKvp, b: BackgroundSettingKvp): number {\n\tconst typeDifference =\n\t\tgetOrderForResourceType(a[1].resourceType) - getOrderForResourceType(b[1].resourceType);\n\n\tif (typeDifference !== 0) {\n\t\treturn typeDifference > 0 ? 1 : -1;\n\t}\n\treturn a[0] > b[0] ? 1 : -1;\n}\n\n/// REDUCERS ///\n\nexport function setPublishedBackgroundProcessor(\n\tstate: IBackgroundProcessorsState,\n\tnewProcessorPath: string,\n): IBackgroundProcessorsState {\n\treturn {\n\t\t...state,\n\t\tpublishedBackgroundProcessor: newProcessorPath,\n\t};\n}\n\nexport function handleBackgroundLoadComplete(\n\tstate: IBackgroundProcessorsState,\n\tupdate: {\n\t\tstatus: BackgroundProcessorLoadStatus;\n\t\tprocessorSettings: BackgroundSettingKvp[];\n\t},\n): IBackgroundProcessorsState {\n\t// Make a combined array of all new processors and existing processors in state\n\tconst allProcessorSettings = [...update.processorSettings, ...state.backgroundProcessors.entries()];\n\t// Sort the combined array and convert back to a map so processors display in a consistent order\n\tconst sortedBackgroundProcessors = new Map(allProcessorSettings.sort(sortBackgroundProcessors));\n\treturn { ...state, backgroundProcessors: sortedBackgroundProcessors, processorLoadStatus: update.status };\n}\n\nexport function setProcessorLoadStatus(\n\tstate: IBackgroundProcessorsState,\n\tnewStatus: BackgroundProcessorLoadStatus,\n): IBackgroundProcessorsState {\n\treturn { ...state, processorLoadStatus: newStatus };\n}\n\n/// SELECTORS ///\n\nfunction getBackgroundProcessors(state: IBackgroundProcessorsState): BackgroundProcessorsMap {\n\treturn state.backgroundProcessors;\n}\n\nfunction getDefaultBackgroundProcessor(state: IBackgroundProcessorsState): string {\n\tconst [firstProcessor] = state.backgroundProcessors.keys();\n\treturn firstProcessor;\n}\n\nfunction getPublishedBackgroundProcessor(state: IBackgroundProcessorsState): string {\n\treturn state.publishedBackgroundProcessor;\n}\n\nfunction getProcessorLoadStatus(state: IBackgroundProcessorsState): BackgroundProcessorLoadStatus {\n\treturn state.processorLoadStatus;\n}\n\nfunction getPublishedProcessorFromMap(state: IBackgroundProcessorsState): BackgroundSettings | undefined {\n\tif (state.publishedBackgroundProcessor) {\n\t\treturn state.backgroundProcessors.get(state.publishedBackgroundProcessor)?.processor;\n\t}\n\n\treturn undefined;\n}\n\n/// BUILD IT ///\n\nconst builtState = buildSharedState({\n\tinit: getInitialState,\n\treducers: {\n\t\tsetProcessorLoadStatus,\n\t\tsetPublishedBackgroundProcessor,\n\t\thandleBackgroundLoadComplete,\n\t},\n\tselectors: {\n\t\tgetBackgroundProcessors,\n\t\tgetDefaultBackgroundProcessor,\n\t\tgetPublishedBackgroundProcessor,\n\t\tgetPublishedProcessorFromMap,\n\t\tgetProcessorLoadStatus,\n\t},\n});\n\nstore.addSharedState(builtState.sharedState, \"backgroundProcessors\");\n\nexport const {\n\tactionCreators: backgroundProcessorsActions,\n\tuseSharedState: useBackgroundProcessorsState,\n\tsharedState: state,\n} = builtState;\n","/**\n * @copyright Copyright 2022 Epic Systems Corporation\n * @file branding state\n * @author Colin Walters\n * @module Epic.VideoApp.State.Branding\n */\n\nimport { buildSharedState } from \"@epic/react-redux-booster\";\nimport store from \"~/app/store\";\nimport { IBrandedColors, IBrandingConfig, IRemoteResource } from \"~/types/branding\";\n\n/// TYPES ///\n\nexport type IBrandingState = IBrandingConfig;\n\n/// INIT ///\n\nexport function getInitialState(): IBrandingState {\n\treturn { logo: null, backgroundImage: null, colors: null, virtualBackgroundImages: null };\n}\n\n/// REDUCERS ///\n\nexport function setBrandingConfig(state: IBrandingState, config: IBrandingState | null): IBrandingState {\n\treturn { ...state, ...config };\n}\n\n/// SELECTORS ///\n\nfunction getLogo(state: IBrandingState): string | null {\n\treturn state.logo ?? null;\n}\n\nfunction getBackgroundImage(state: IBrandingState): string | null {\n\treturn state.backgroundImage ?? null;\n}\n\nfunction getColors(state: IBrandingState): IBrandedColors | null {\n\treturn state.colors ?? null;\n}\n\nfunction getVirtualBackgroundImages(state: IBrandingState): IRemoteResource[] {\n\treturn state.virtualBackgroundImages ?? [];\n}\n\n/// BUILD IT ///\n\nconst builtState = buildSharedState({\n\tinit: getInitialState,\n\tselectors: { getLogo, getBackgroundImage, getColors, getVirtualBackgroundImages },\n});\nstore.addSharedState(builtState.sharedState, \"branding\");\n\nexport const {\n\tactionCreators: brandingActions,\n\tuseSharedState: useBrandingState,\n\tsharedState: state,\n} = builtState;\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file utility function to hash the user ID and return a number for color assignment\n * @author Noah Allen\n * @module Epic.VideoApp.Utils.UserIdHash\n */\n\nexport function userIdHash(userId: string): number {\n\treturn Math.abs(userId.split(\"\").reduce((acc, char) => acc + char.charCodeAt(0), 0));\n}\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Manages the state of the chat users in the application\n * @author Noah Allen\n * @module Epic.VideoApp.State.ChatUsers\n */\nimport { IUser, IUserMap } from \"@epic/chat\";\nimport { buildSharedState } from \"@epic/react-redux-booster\";\nimport { userIdHash } from \"~/utils/userIdHash\";\nimport store from \"../app/store\";\n\n/// INIT ///\n\nexport function getInitialState(): IUserMap {\n\tconst users = {};\n\treturn users;\n}\n\n/// REDUCERS ///\n\nexport function addOrUpdateUser(state: IUserMap, user: Partial & { id: string }): IUserMap {\n\tconst existingUser = state[user.id];\n\n\treturn {\n\t\t...state,\n\t\t[user.id]: {\n\t\t\t...existingUser,\n\t\t\t...user,\n\t\t\tcolor: userIdHash(user.id),\n\t\t\tisTyping: user?.isTyping ?? false,\n\t\t},\n\t};\n}\n\nexport function addOrUpdateUsers(state: IUserMap, users: IUser[]): IUserMap {\n\tlet newState = { ...state };\n\tusers.forEach((user) => {\n\t\tconst existingUser = newState[user.id];\n\t\tnewState = {\n\t\t\t...newState,\n\t\t\t[user.id]: {\n\t\t\t\t...existingUser,\n\t\t\t\t...user,\n\t\t\t\tcolor: userIdHash(user.id),\n\t\t\t\tisTyping: existingUser?.isTyping,\n\t\t\t},\n\t\t};\n\t});\n\treturn newState;\n}\n\nexport function setUserProperty(\n\tstate: IUserMap,\n\taction: { userId: string; property: keyof IUser; value: boolean },\n): IUserMap {\n\tconst { userId, property, value } = action;\n\tconst user = state[userId];\n\tif (!user) {\n\t\treturn state;\n\t}\n\tconst updatedUser = { ...user, [property]: value };\n\treturn addOrUpdateUser(state, updatedUser);\n}\n\n/// SELECTORS ///\n\nexport function getUsers(state: IUserMap): IUserMap {\n\treturn state;\n}\n\nexport function getTypingUsersArray(state: IUserMap): IUser[] {\n\treturn Object.values(state).filter((user) => user.isTyping);\n}\n\n/// BUILD IT ///\n\nconst builtState = buildSharedState({\n\tinit: getInitialState,\n\treducers: {\n\t\taddOrUpdateUser,\n\t\tsetUserProperty,\n\t\taddOrUpdateUsers,\n\t},\n\tselectors: {\n\t\tgetUsers,\n\t\tgetTypingUsersArray,\n\t},\n});\n\nstore.addSharedState(builtState.sharedState, \"chatUsers\");\n\nexport const {\n\tactionCreators: chatUserActions,\n\tuseSharedState: useChatUserState,\n\tsharedState: state,\n} = builtState;\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Manages the state of the chat messages in the application\n * @author Noah Allen\n * @module Epic.VideoApp.State.Messages\n */\n\nimport { IMessage } from \"@epic/chat\";\nimport { buildSharedState } from \"@epic/react-redux-booster\";\nimport store from \"~/app/store\";\n\n/// TYPES\n\nexport interface IMessageState {\n\tmessages: IMessage[];\n\tnumUnreadMessages: number;\n\tlastToastId: number;\n\tnumberOfFailedMessagesInARow: number;\n}\n\n/// INIT ///\n\nexport function getInitialState(): IMessageState {\n\treturn {\n\t\tmessages: [],\n\t\tnumUnreadMessages: 0,\n\t\tlastToastId: -1,\n\t\tnumberOfFailedMessagesInARow: 0,\n\t};\n}\n\n/// REDUCERS ///\n\nexport function addMessage(state: IMessageState, newMessage: IMessage): IMessageState {\n\tconst existingMessage = state.messages.find((m) => m.messageId === newMessage.messageId);\n\n\tif (existingMessage) {\n\t\treturn state;\n\t}\n\tconst newMessages = [...state.messages];\n\tconst position = binarySearch(newMessages, newMessage.sequentialId);\n\tnewMessages.splice(position, 0, newMessage);\n\tconst newState = updateHasUnreadMessage(state, true);\n\treturn { ...newState, messages: newMessages };\n}\n\nexport function setLastToastId(state: IMessageState, seqId: number): IMessageState {\n\treturn { ...state, lastToastId: seqId };\n}\n\nexport function updateHasUnreadMessage(state: IMessageState, hasUnreadMessage: boolean): IMessageState {\n\tlet newNumUnreadMessages = 0;\n\tif (hasUnreadMessage) {\n\t\tnewNumUnreadMessages = state.numUnreadMessages + 1;\n\t}\n\treturn { ...state, numUnreadMessages: newNumUnreadMessages };\n}\n\nexport function updateMessage(\n\tstate: IMessageState,\n\tupdatedMessage: Partial & { messageId: string },\n): IMessageState {\n\tconst existingMessage = state.messages.find((m) => m.messageId === updatedMessage.messageId);\n\n\tconst messageFailed = updatedMessage.messageDeliveryStatus === \"failed\";\n\n\tif (existingMessage) {\n\t\tlet updatedMessageArray;\n\t\tif (existingMessage.sequentialId !== updatedMessage.sequentialId) {\n\t\t\tupdatedMessageArray = state.messages.filter(\n\t\t\t\t(message) => message.messageId !== existingMessage.messageId,\n\t\t\t);\n\t\t\tconst updatedMessageWithId = { ...existingMessage, ...updatedMessage };\n\t\t\tconst position = binarySearch(updatedMessageArray, updatedMessageWithId.sequentialId);\n\t\t\tupdatedMessageArray.splice(position, 0, updatedMessageWithId);\n\t\t} else {\n\t\t\t// If sequentialId is the same, just update the properties without changing the order\n\t\t\tupdatedMessageArray = state.messages.map((message) =>\n\t\t\t\tmessage.messageId === existingMessage.messageId ? { ...message, ...updatedMessage } : message,\n\t\t\t);\n\t\t}\n\t\tconst newState = {\n\t\t\t...state,\n\t\t\tmessages: updatedMessageArray,\n\t\t};\n\n\t\tif (messageFailed) {\n\t\t\tnewState.numberOfFailedMessagesInARow++;\n\t\t}\n\n\t\treturn newState;\n\t} else {\n\t\tconsole.warn(\"Edit message called, but it doesn't exist in the state.\");\n\t\treturn state;\n\t}\n}\n\nfunction addOrUpdateMessage(state: IMessageState, newOrUpdatedMessage: IMessage): IMessageState {\n\tconst { messageId, ...otherParamsOfMessage } = newOrUpdatedMessage;\n\tconst existingMessage = state.messages.find((m) => m.messageId === newOrUpdatedMessage.messageId);\n\n\tif (existingMessage) {\n\t\treturn updateMessage(state, { messageId, ...otherParamsOfMessage });\n\t} else {\n\t\treturn addMessage(state, newOrUpdatedMessage);\n\t}\n}\n\nexport function addOrUpdateMessages(\n\tstate: IMessageState,\n\tnewOrUpdatedMessageList: IMessage[],\n): IMessageState {\n\tlet newState = state;\n\tnewOrUpdatedMessageList.forEach((message) => {\n\t\tnewState = addOrUpdateMessage(newState, message);\n\t});\n\treturn newState;\n}\n\nexport function resetNumberOfFailedMessagesInARow(state: IMessageState): IMessageState {\n\treturn { ...state, numberOfFailedMessagesInARow: 0 };\n}\n\n/// SELECTORS ///\n\nexport function getMessages(state: IMessageState): IMessage[] {\n\treturn state.messages;\n}\n\nexport function getNumUnreadMessages(state: IMessageState): number {\n\treturn state.numUnreadMessages;\n}\n\nexport function getNumberOfFailedMessagesInARow(state: IMessageState): number {\n\treturn state.numberOfFailedMessagesInARow;\n}\n\n/// BUILD IT ///\n\nconst builtState = buildSharedState({\n\tinit: getInitialState,\n\treducers: {\n\t\taddMessage,\n\t\tupdateMessage,\n\t\tupdateHasUnreadMessage,\n\t\taddOrUpdateMessages,\n\t\tsetLastToastId,\n\t\tresetNumberOfFailedMessagesInARow,\n\t},\n\tselectors: {\n\t\tgetMessages,\n\t\tgetNumUnreadMessages,\n\t\tgetNumberOfFailedMessagesInARow,\n\t},\n});\n\nstore.addSharedState(builtState.sharedState, \"messages\");\n\nexport const {\n\tactionCreators: messageActions,\n\tuseSharedState: useMessageState,\n\tsharedState: state,\n} = builtState;\n\nfunction binarySearch(messages: IMessage[], sequentialId: number | null): number {\n\tif (sequentialId === null) {\n\t\treturn messages.length;\n\t}\n\tlet left = 0;\n\tlet right = messages.length - 1;\n\twhile (left <= right) {\n\t\tconst mid = left + Math.floor((right - left) / 2);\n\t\tconst midSequentialId = messages[mid].sequentialId !== null ? messages[mid].sequentialId : Infinity;\n\t\tif (midSequentialId !== null && midSequentialId < sequentialId) {\n\t\t\tleft = mid + 1;\n\t\t} else if (midSequentialId !== null && midSequentialId > sequentialId) {\n\t\t\tright = mid - 1;\n\t\t} else {\n\t\t\treturn mid;\n\t\t}\n\t}\n\treturn left;\n}\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file shared state to centrally manage some aspects of the UI\n * @author Colin Walters\n * @module Epic.VideoApp.State.Ui\n */\n\nimport { buildSharedState } from \"@epic/react-redux-booster\";\nimport store from \"~/app/store\";\nimport { IParticipantVideo, IPinningState, IPinSource, Menu, VideoUILayoutType } from \"~/types\";\nimport { IUser } from \"~/web-core/interfaces\";\n\n/// TYPES ///\n\ntype VisibleMenu = Menu | null;\ntype SidebarStatus = \"open\" | \"closed\";\n\nexport interface IDynamicMenuData {\n\ttitle: string;\n\tparticipant: IUser;\n}\n\nexport interface IUIState {\n\treadonly visibleMenuHistory: [VisibleMenu, VisibleMenu];\n\treadonly buttonTrayCollapsed: boolean;\n\treadonly pinningState: IPinningState;\n\treadonly lastFocusedParticipant: IParticipantVideo | null;\n\treadonly waitingForFocus: boolean;\n\treadonly imCapHovered: boolean;\n\treadonly videoLayout: VideoUILayoutType;\n\treadonly preferredLayout: VideoUILayoutType;\n\treadonly totalGridPageCount: number;\n\treadonly currentGridPage: number;\n\treadonly focusTrapIds: string[];\n\treadonly menuData: IDynamicMenuData | null;\n\treadonly requestMenuOpen: boolean;\n\treadonly sidebarStatus: SidebarStatus;\n\treadonly isFullScreenMode: boolean;\n}\n\n/// INIT ///\n\nexport function getInitialState(): IUIState {\n\treturn {\n\t\tvisibleMenuHistory: [null, null],\n\t\tbuttonTrayCollapsed: false,\n\t\tpinningState: { lastUpdate: 0, pinnedVideo: null, updateSource: \"Default\" },\n\t\tlastFocusedParticipant: null,\n\t\twaitingForFocus: false,\n\t\timCapHovered: false,\n\t\tcurrentGridPage: 0,\n\t\ttotalGridPageCount: 0,\n\t\tvideoLayout: \"Active Speaker\",\n\t\tpreferredLayout: \"Active Speaker\",\n\t\tfocusTrapIds: [],\n\t\tmenuData: null,\n\t\trequestMenuOpen: false,\n\t\tsidebarStatus: \"closed\",\n\t\tisFullScreenMode: !!document.fullscreenElement,\n\t};\n}\n\n/// REDUCERS ///\n\ninterface IToggleMenuParams {\n\tmenu: VisibleMenu;\n\tmenuData?: IDynamicMenuData;\n}\n\nfunction toggleVisibleMenu(state: IUIState, params: IToggleMenuParams): IUIState {\n\tconst { menu, menuData } = params;\n\tconst [prevVisible] = state.visibleMenuHistory;\n\tconst visibleMenu = menu && menu !== prevVisible ? menu : null;\n\tconst menuInfo = menuData || null;\n\treturn {\n\t\t...state,\n\t\tvisibleMenuHistory: [visibleMenu, prevVisible],\n\t\tmenuData: visibleMenu ? menuInfo : null,\n\t};\n}\n\nfunction toggleButtonTrayCollapsed(state: IUIState): IUIState {\n\t// set visible menu history to null so it closes instantaneously instead of animating\n\treturn {\n\t\t...state,\n\t\tbuttonTrayCollapsed: !state.buttonTrayCollapsed,\n\t\tvisibleMenuHistory: [null, null],\n\t};\n}\n\nfunction forceButtonTrayOpen(state: IUIState): IUIState {\n\treturn { ...state, buttonTrayCollapsed: false };\n}\n\nfunction toggleVideoLayout(state: IUIState): IUIState {\n\tconst newLayout = state.videoLayout !== \"Active Speaker\" ? \"Active Speaker\" : \"Grid\";\n\treturn { ...state, videoLayout: newLayout, preferredLayout: newLayout };\n}\n\ninterface IPinnedVideoUpdateParams {\n\tpinnedVideo: IParticipantVideo | null;\n\tupdateSource: IPinSource;\n}\n\n/**\n * Toggle whether or not the participant's video is pinned while ensuring that only one feed is pinned at any given time\n * @param pinnedVideo pinned video containing SID of the participant and video type, or null to remove pinned feed\n * @param updateSource whether this update is related to a direct pin attempt (click, screen share) or to hold the image capture focus\n */\nexport function toggleVideoPinned(state: IUIState, params: IPinnedVideoUpdateParams | null): IUIState {\n\tconst { pinningState } = state;\n\t// if this is a participant video toggle and the last pinning action was in the last half second, ignore the action\n\tif (\n\t\tparams?.pinnedVideo &&\n\t\tparams.updateSource === \"Default\" &&\n\t\tpinningState.lastUpdate + 500 > Date.now()\n\t) {\n\t\treturn state;\n\t}\n\n\tlet newPinnedVideo: IParticipantVideo | null = null;\n\tconst newPinSource = params?.updateSource ?? \"Default\";\n\tif (params) {\n\t\tconst pinnedVideo = params.pinnedVideo;\n\n\t\t// Determine if the 'new' participant to be toggled is different\n\t\tif (\n\t\t\tpinnedVideo &&\n\t\t\t(pinnedVideo.identity !== pinningState.pinnedVideo?.identity ||\n\t\t\t\tpinnedVideo.videoType !== pinningState.pinnedVideo?.videoType)\n\t\t) {\n\t\t\tnewPinnedVideo = params.pinnedVideo;\n\t\t}\n\t}\n\n\tconst newPinningState = {\n\t\tlastUpdate: Date.now(),\n\t\tpinnedVideo: newPinnedVideo,\n\t\tupdateSource: newPinSource,\n\t};\n\n\t// If we are pinning a new user, confirm the display mode is Active Speaker (pull out of Grid mode)\n\t// This will also result in a screen share defaulting the view to Active Speaker as well\n\t// If we are un-pinning go back to whichever was chosen via menu options\n\treturn {\n\t\t...state,\n\t\tvideoLayout: newPinnedVideo ? \"Active Speaker\" : state.preferredLayout,\n\t\tpinningState: newPinningState,\n\t};\n}\n\nfunction setLastFocusedParticipant(state: IUIState, focusedVideo: IParticipantVideo | null): IUIState {\n\treturn {\n\t\t...state,\n\t\tlastFocusedParticipant: focusedVideo,\n\t};\n}\n\nfunction setWaitingForFocus(state: IUIState, waiting: boolean): IUIState {\n\treturn {\n\t\t...state,\n\t\twaitingForFocus: waiting,\n\t};\n}\n\nexport function setImCapHovered(state: IUIState, newIsHovered: boolean): IUIState {\n\treturn {\n\t\t...state,\n\t\timCapHovered: newIsHovered,\n\t};\n}\n\nexport function addFocusTrap(state: IUIState, newFocusTrapId: string): IUIState {\n\tconst newFocusTrapIds = [...state.focusTrapIds, newFocusTrapId];\n\treturn {\n\t\t...state,\n\t\tfocusTrapIds: newFocusTrapIds,\n\t};\n}\n\nexport function removeFocusTrap(state: IUIState, focusTrapIdToRemove: string): IUIState {\n\tconst newFocusTrapIds = [...state.focusTrapIds];\n\n\tconst index = newFocusTrapIds.indexOf(focusTrapIdToRemove);\n\tif (index > -1) {\n\t\tnewFocusTrapIds.splice(index, 1);\n\t}\n\n\treturn {\n\t\t...state,\n\t\tfocusTrapIds: newFocusTrapIds,\n\t};\n}\n\nexport function setTotalPageCount(state: IUIState, pageCount: number): IUIState {\n\t// Don't allow the total page count to be out of bounds (higher than the current page)\n\tlet currentPage = state.currentGridPage;\n\tif (currentPage >= pageCount) {\n\t\tcurrentPage = Math.max(0, pageCount - 1);\n\t}\n\n\treturn { ...state, currentGridPage: currentPage, totalGridPageCount: pageCount };\n}\n\nexport function setCurrentPage(state: IUIState, newPage: number): IUIState {\n\tif (newPage < 0 || newPage >= state.totalGridPageCount) {\n\t\treturn state;\n\t}\n\n\treturn { ...state, currentGridPage: newPage };\n}\n\nfunction setRequestMenuOpen(state: IUIState, open: boolean): IUIState {\n\treturn { ...state, requestMenuOpen: open };\n}\n\nfunction setSidebarStatus(state: IUIState, newStatus: SidebarStatus): IUIState {\n\treturn { ...state, sidebarStatus: newStatus };\n}\n\nfunction setIsFullScreenMode(state: IUIState, isFullScreen: boolean): IUIState {\n\treturn { ...state, isFullScreenMode: isFullScreen };\n}\n\n/// SELECTORS ///\n\nfunction getVisibleMenu(state: IUIState): VisibleMenu {\n\treturn state.visibleMenuHistory[0];\n}\n\nfunction getVisibleMenuHistory(state: IUIState): [VisibleMenu, VisibleMenu] {\n\treturn state.visibleMenuHistory;\n}\n\nfunction getDynamicMenuData(state: IUIState): IDynamicMenuData | null {\n\treturn state.menuData;\n}\n\nfunction getButtonTrayCollapsed(state: IUIState): boolean {\n\treturn state.buttonTrayCollapsed;\n}\n\nfunction getPinnedVideo(state: IUIState): IParticipantVideo | null {\n\treturn state.pinningState.pinnedVideo;\n}\n\nfunction getLastFocusedParticipant(state: IUIState): IParticipantVideo | null {\n\treturn state.lastFocusedParticipant;\n}\n\nfunction getWaitingForFocus(state: IUIState): boolean {\n\treturn state.waitingForFocus;\n}\n\nfunction getImCapHovered(state: IUIState): boolean {\n\treturn state.imCapHovered;\n}\n\nfunction getVideoLayout(state: IUIState): VideoUILayoutType {\n\treturn state.videoLayout;\n}\n\nfunction getCurrentPage(state: IUIState): number {\n\treturn state.currentGridPage;\n}\n\nfunction getPageCount(state: IUIState): number {\n\treturn state.totalGridPageCount;\n}\n\nfunction getActiveFocusTrap(state: IUIState): string {\n\treturn state.focusTrapIds[state.focusTrapIds.length - 1];\n}\n\nfunction getRequestMenuOpen(state: IUIState): boolean {\n\treturn state.requestMenuOpen;\n}\n\nfunction getSidebarStatus(state: IUIState): SidebarStatus {\n\treturn state.sidebarStatus;\n}\n\nfunction getIsFullScreenMode(state: IUIState): boolean {\n\treturn state.isFullScreenMode;\n}\n\n/// BUILD IT ///\n\nconst builtState = buildSharedState({\n\tinit: getInitialState,\n\treducers: {\n\t\ttoggleVisibleMenu,\n\t\tforceButtonTrayOpen,\n\t\ttoggleButtonTrayCollapsed,\n\t\ttoggleVideoPinned,\n\t\tsetLastFocusedParticipant,\n\t\tsetWaitingForFocus,\n\t\tsetImCapHovered,\n\t\taddFocusTrap,\n\t\tremoveFocusTrap,\n\t\tsetTotalPageCount,\n\t\tsetCurrentPage,\n\t\ttoggleVideoLayout,\n\t\tsetRequestMenuOpen,\n\t\tsetSidebarStatus,\n\t\tsetIsFullScreenMode,\n\t},\n\tselectors: {\n\t\tgetVisibleMenu,\n\t\tgetVisibleMenuHistory,\n\t\tgetButtonTrayCollapsed,\n\t\tgetPinnedVideo,\n\t\tgetLastFocusedParticipant,\n\t\tgetWaitingForFocus,\n\t\tgetImCapHovered,\n\t\tgetVideoLayout,\n\t\tgetActiveFocusTrap,\n\t\tgetDynamicMenuData,\n\t\tgetPageCount,\n\t\tgetCurrentPage,\n\t\tgetRequestMenuOpen,\n\t\tgetSidebarStatus,\n\t\tgetIsFullScreenMode,\n\t},\n});\n\nstore.addSharedState(builtState.sharedState, \"ui\");\n\nexport const { actionCreators: uiActions, useSharedState: useUIState, sharedState: state } = builtState;\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Combined state for chat messages, UI, and alerts\n * @author Noah Allen\n * @module Epic.VideoApp.State.Combined.Chat\n */\n\nimport { withSharedStates } from \"@epic/react-redux-booster\";\nimport * as alerts from \"../alerts\";\nimport * as messages from \"../messages\";\nimport * as ui from \"../ui\";\n\n/// COMBINED STATE TYPES ///\n\ntype ChatCombinedState = [messages.IMessageState, ui.IUIState, alerts.IAlertState];\n\n/// COMBINED REDUCERS ///\n\nfunction newMessage([prevMessageState, prevUIState, prevAlertState]: ChatCombinedState): ChatCombinedState {\n\tconst { numUnreadMessages, messages: prevMessages, lastToastId } = prevMessageState;\n\tconst lastMessageSeqId = prevMessages[prevMessages.length - 1]?.sequentialId ?? 0;\n\tconst isSidebarOpen = prevUIState.sidebarStatus === \"open\";\n\n\tif (numUnreadMessages > 0 && lastToastId !== lastMessageSeqId && !isSidebarOpen) {\n\t\tconst newAlertState = alerts.postToastAlert(prevAlertState, {\n\t\t\ttype: \"chat-unread-message\",\n\t\t\tmessageToken: numUnreadMessages > 1 ? \"UnreadMessagesText\" : \"UnreadMessageText\",\n\t\t\tttlSeconds: 7,\n\t\t});\n\t\tconst newMessageState = messages.setLastToastId(prevMessageState, lastMessageSeqId);\n\t\treturn [newMessageState, prevUIState, newAlertState];\n\t} else if (isSidebarOpen) {\n\t\tconst newMessageState = messages.setLastToastId(prevMessageState, lastMessageSeqId);\n\t\treturn [newMessageState, prevUIState, prevAlertState];\n\t}\n\n\treturn [prevMessageState, prevUIState, prevAlertState];\n}\n\nfunction clearToast(state: ChatCombinedState): ChatCombinedState {\n\tconst [prevMessageState, prevUIState, prevAlertState] = state;\n\tconst newAlertState = alerts.clearToasts(prevAlertState, \"chat-unread-message\");\n\treturn [prevMessageState, prevUIState, newAlertState];\n}\n\n/// BUILD IT ///\n\nexport const chatCombinedReducers = {\n\tclearToast: withSharedStates(messages.state, ui.state, alerts.state).buildReducer(clearToast),\n\tnewMessage: withSharedStates(messages.state, ui.state, alerts.state).buildReducer(newMessage),\n};\n","'use strict';\n\nmodule.exports = (function(scope) {\n const { location, URL } = scope;\n if ([location, URL].some(api => !api)) {\n return function dynamicImportNotSupported(module) {\n return Promise.reject(new Error(`Failed to import: ${module}: dynamicImport is not supported`));\n };\n }\n scope.__twilioVideoImportedModules = {\n // Imported module map.\n };\n return function dynamicImport(module) {\n if (module in scope.__twilioVideoImportedModules) {\n return Promise.resolve(scope.__twilioVideoImportedModules[module]);\n }\n // NOTE(mmalavalli): Calling import() directly can cause build issues in TypeScript and Webpack\n // (and probably other frameworks). So, we create a Function that calls import() in its body.\n // eslint-disable-next-line no-new-func\n return new Function('scope', `return import('${new URL(module, location)}').then(m => scope.__twilioVideoImportedModules['${module}'] = m);`)(scope);\n };\n}(globalThis));\n","/**\n * Copyright (c) 2013 Tim Perry\n * Licensed under the MIT license.\n *\n * Copied from https://github.com/pimterry/loglevel (1.7.0)\n * and modified to remove browser and AMD module support, while keeping CommonJS.\n * It was causing a conflict when this is bundled using CommonJS, and then loaded via RequireJS.\n * The proper way to fix this module is to have a build that outputs CommonJS and AMD separately\n * which needs to be submitted to the original module's repo.\n */\n\n/* istanbul ignore file */\n/* eslint-disable */\n// Slightly dubious tricks to cut down minimized file size\nvar noop = function() {};\nvar undefinedType = \"undefined\";\nvar isIE = (typeof window !== undefinedType) && (typeof window.navigator !== undefinedType) && (\n /Trident\\/|MSIE /.test(window.navigator.userAgent)\n);\n\nvar logMethods = [\n \"trace\",\n \"debug\",\n \"info\",\n \"warn\",\n \"error\"\n];\n\n// Cross-browser bind equivalent that works at least back to IE6\nfunction bindMethod(obj, methodName) {\n var method = obj[methodName];\n if (typeof method.bind === 'function') {\n return method.bind(obj);\n } else {\n try {\n return Function.prototype.bind.call(method, obj);\n } catch (e) {\n // Missing bind shim or IE8 + Modernizr, fallback to wrapping\n return function() {\n return Function.prototype.apply.apply(method, [obj, arguments]);\n };\n }\n }\n}\n\n// Trace() doesn't print the message in IE, so for that case we need to wrap it\nfunction traceForIE() {\n if (console.log) {\n if (console.log.apply) {\n console.log.apply(console, arguments);\n } else {\n // In old IE, native console methods themselves don't have apply().\n Function.prototype.apply.apply(console.log, [console, arguments]);\n }\n }\n if (console.trace) console.trace();\n}\n\n// Build the best logging method possible for this env\n// Wherever possible we want to bind, not wrap, to preserve stack traces\nfunction realMethod(methodName) {\n if (methodName === 'debug') {\n methodName = 'log';\n }\n\n if (typeof console === undefinedType) {\n return false; // No method possible, for now - fixed later by enableLoggingWhenConsoleArrives\n } else if (methodName === 'trace' && isIE) {\n return traceForIE;\n } else if (console[methodName] !== undefined) {\n return bindMethod(console, methodName);\n } else if (console.log !== undefined) {\n return bindMethod(console, 'log');\n } else {\n return noop;\n }\n}\n\n// These private functions always need `this` to be set properly\n\nfunction replaceLoggingMethods(level, loggerName) {\n /*jshint validthis:true */\n for (var i = 0; i < logMethods.length; i++) {\n var methodName = logMethods[i];\n this[methodName] = (i < level) ?\n noop :\n this.methodFactory(methodName, level, loggerName);\n }\n\n // Define log.log as an alias for log.debug\n this.log = this.debug;\n}\n\n// In old IE versions, the console isn't present until you first open it.\n// We build realMethod() replacements here that regenerate logging methods\nfunction enableLoggingWhenConsoleArrives(methodName, level, loggerName) {\n return function () {\n if (typeof console !== undefinedType) {\n replaceLoggingMethods.call(this, level, loggerName);\n this[methodName].apply(this, arguments);\n }\n };\n}\n\n// By default, we use closely bound real methods wherever possible, and\n// otherwise we wait for a console to appear, and then try again.\nfunction defaultMethodFactory(methodName, level, loggerName) {\n /*jshint validthis:true */\n return realMethod(methodName) ||\n enableLoggingWhenConsoleArrives.apply(this, arguments);\n}\n\nfunction Logger(name, defaultLevel, factory) {\n var self = this;\n var currentLevel;\n\n var storageKey = \"loglevel\";\n if (typeof name === \"string\") {\n storageKey += \":\" + name;\n } else if (typeof name === \"symbol\") {\n storageKey = undefined;\n }\n\n function persistLevelIfPossible(levelNum) {\n var levelName = (logMethods[levelNum] || 'silent').toUpperCase();\n\n if (typeof window === undefinedType || !storageKey) return;\n\n // Use localStorage if available\n try {\n window.localStorage[storageKey] = levelName;\n return;\n } catch (ignore) {}\n\n // Use session cookie as fallback\n try {\n window.document.cookie =\n encodeURIComponent(storageKey) + \"=\" + levelName + \";\";\n } catch (ignore) {}\n }\n\n function getPersistedLevel() {\n var storedLevel;\n\n if (typeof window === undefinedType || !storageKey) return;\n\n try {\n storedLevel = window.localStorage[storageKey];\n } catch (ignore) {}\n\n // Fallback to cookies if local storage gives us nothing\n if (typeof storedLevel === undefinedType) {\n try {\n var cookie = window.document.cookie;\n var location = cookie.indexOf(\n encodeURIComponent(storageKey) + \"=\");\n if (location !== -1) {\n storedLevel = /^([^;]+)/.exec(cookie.slice(location))[1];\n }\n } catch (ignore) {}\n }\n\n // If the stored level is not valid, treat it as if nothing was stored.\n if (self.levels[storedLevel] === undefined) {\n storedLevel = undefined;\n }\n\n return storedLevel;\n }\n\n /*\n *\n * Public logger API - see https://github.com/pimterry/loglevel for details\n *\n */\n\n self.name = name;\n\n self.levels = { \"TRACE\": 0, \"DEBUG\": 1, \"INFO\": 2, \"WARN\": 3,\n \"ERROR\": 4, \"SILENT\": 5};\n\n self.methodFactory = factory || defaultMethodFactory;\n\n self.getLevel = function () {\n return currentLevel;\n };\n\n self.setLevel = function (level, persist) {\n if (typeof level === \"string\" && self.levels[level.toUpperCase()] !== undefined) {\n level = self.levels[level.toUpperCase()];\n }\n if (typeof level === \"number\" && level >= 0 && level <= self.levels.SILENT) {\n currentLevel = level;\n if (persist !== false) { // defaults to true\n persistLevelIfPossible(level);\n }\n replaceLoggingMethods.call(self, level, name);\n if (typeof console === undefinedType && level < self.levels.SILENT) {\n return \"No console available for logging\";\n }\n } else {\n throw \"log.setLevel() called with invalid level: \" + level;\n }\n };\n\n self.setDefaultLevel = function (level) {\n if (!getPersistedLevel()) {\n self.setLevel(level, false);\n }\n };\n\n self.enableAll = function(persist) {\n self.setLevel(self.levels.TRACE, persist);\n };\n\n self.disableAll = function(persist) {\n self.setLevel(self.levels.SILENT, persist);\n };\n\n // Initialize with the right level\n var initialLevel = getPersistedLevel();\n if (initialLevel == null) {\n initialLevel = defaultLevel == null ? \"WARN\" : defaultLevel;\n }\n self.setLevel(initialLevel, false);\n}\n\n/*\n *\n * Top-level API\n *\n */\n\nvar defaultLogger = new Logger();\n\nvar _loggersByName = {};\ndefaultLogger.getLogger = function getLogger(name) {\n if ((typeof name !== \"symbol\" && typeof name !== \"string\") || name === \"\") {\n throw new TypeError(\"You must supply a name when creating a logger.\");\n }\n\n var logger = _loggersByName[name];\n if (!logger) {\n logger = _loggersByName[name] = new Logger(\n name, defaultLogger.getLevel(), defaultLogger.methodFactory);\n }\n return logger;\n};\n\n// Grab the current global log variable in case of overwrite\nvar _log = (typeof window !== undefinedType) ? window.log : undefined;\ndefaultLogger.noConflict = function() {\n if (typeof window !== undefinedType &&\n window.log === defaultLogger) {\n window.log = _log;\n }\n\n return defaultLogger;\n};\n\ndefaultLogger.getLoggers = function getLoggers() {\n return _loggersByName;\n};\n\n// ES6 default export, for compatibility\ndefaultLogger['default'] = defaultLogger;\n\nmodule.exports = defaultLogger;\n","module.exports={name:\"twilio-video\",title:\"Twilio Video\",description:\"Twilio Video JavaScript Library\",version:\"2.28.1\",homepage:\"https://twilio.com\",author:\"Mark Andrus Roberts \",contributors:[\"Ryan Rowland \",\"Manjesh Malavalli \",\"Makarand Patwardhan \"],keywords:[\"twilio\",\"webrtc\",\"library\",\"javascript\",\"video\",\"rooms\"],repository:{type:\"git\",url:\"https://github.com/twilio/twilio-video.js.git\"},devDependencies:{\"@babel/core\":\"^7.14.2\",\"@babel/plugin-proposal-class-properties\":\"^7.18.6\",\"@babel/plugin-proposal-object-rest-spread\":\"^7.20.7\",\"@babel/preset-env\":\"^7.14.2\",\"@babel/preset-typescript\":\"^7.13.0\",\"@types/express\":\"^4.11.0\",\"@types/node\":\"^8.5.1\",\"@types/selenium-webdriver\":\"^3.0.8\",\"@types/ws\":\"^3.2.1\",\"@typescript-eslint/eslint-plugin\":\"^4.13.0\",\"@typescript-eslint/parser\":\"^4.0.0\",\"babel-cli\":\"^6.26.0\",\"babel-preset-es2015\":\"^6.24.1\",browserify:\"^17.0.0\",cheerio:\"^0.22.0\",cors:\"^2.8.5\",electron:\"^17.2.0\",envify:\"^4.0.0\",eslint:\"^6.2.1\",\"eslint-config-standard\":\"^14.0.0\",\"eslint-plugin-import\":\"^2.18.2\",\"eslint-plugin-node\":\"^9.1.0\",\"eslint-plugin-promise\":\"^4.2.1\",\"eslint-plugin-standard\":\"^4.0.1\",express:\"^4.16.2\",glob:\"^7.1.7\",\"ink-docstrap\":\"^1.3.2\",inquirer:\"^7.0.0\",\"is-docker\":\"^2.0.0\",jsdoc:\"^3.5.5\",\"jsdoc-babel\":\"^0.5.0\",\"json-loader\":\"^0.5.7\",karma:\"6.4.1\",\"karma-browserify\":\"^8.0.0\",\"karma-chrome-launcher\":\"^2.0.0\",\"karma-edgium-launcher\":\"^4.0.0-0\",\"karma-electron\":\"^6.1.0\",\"karma-firefox-launcher\":\"^1.3.0\",\"karma-htmlfile-reporter\":\"^0.3.8\",\"karma-junit-reporter\":\"^1.2.0\",\"karma-mocha\":\"^1.3.0\",\"karma-safari-launcher\":\"^1.0.0\",\"karma-spec-reporter\":\"0.0.32\",\"karma-typescript\":\"^5.5.1\",\"karma-typescript-es6-transform\":\"^5.5.1\",mocha:\"^3.2.0\",\"mock-require\":\"^3.0.3\",ncp:\"^2.0.0\",\"node-http-server\":\"^8.1.2\",\"npm-run-all\":\"^4.0.2\",nyc:\"^15.1.0\",requirejs:\"^2.3.3\",rimraf:\"^2.6.1\",\"simple-git\":\"^1.126.0\",sinon:\"^4.0.1\",\"ts-node\":\"4.0.1\",tslint:\"5.8.0\",twilio:\"^3.49.0\",\"twilio-release-tool\":\"^1.0.2\",typescript:\"4.2.2\",\"uglify-js\":\"^2.8.22\",\"vinyl-fs\":\"^2.4.4\",\"vinyl-source-stream\":\"^1.1.0\",watchify:\"^3.11.1\",\"webrtc-adapter\":\"^7.7.1\"},engines:{node:\">=0.12\"},license:\"BSD-3-Clause\",main:\"./es5/index.js\",types:\"./tsdef/index.d.ts\",scripts:{\"lint:js\":\"eslint ./lib ./test/*.js ./docker/**/*.js ./test/framework/*.js ./test/lib/*.js ./test/integration/** ./test/unit/** \",\"lint:ts\":\"eslint ./tsdef/*.ts ./lib/**/*.ts\",lint:\"npm-run-all lint:js lint:ts\",printVersion:\"node --version && npm --version\",\"test:unit\":\"npm-run-all printVersion build:es5 && nyc --report-dir=./coverage --include=lib/**/* --reporter=html --reporter=lcov --reporter=text mocha -r ts-node/register ./test/unit/*\",\"test:unit:quick\":\"nyc --report-dir=./coverage --include=lib/**/* --reporter=html --reporter=lcov mocha -r ts-node/register\",\"test:serversiderender\":\"mocha ./test/serversiderender/index.js\",\"test:integration:adapter\":\"node ./scripts/karma.js karma/integration.adapter.conf.js\",\"test:integration\":\"npm run build:es5 && node ./scripts/karma.js karma/integration.conf.js\",\"test:umd:install\":\"npm install puppeteer@19.2.2\",\"test:umd\":\"mocha ./test/umd/index.js\",\"test:crossbrowser:build:clean\":\"rimraf ./test/crossbrowser/lib ./test/crossbrowser/src/browser/index.js\",\"test:crossbrowser:build:lint\":\"cd ./test/crossbrowser && tslint --project tsconfig.json\",\"test:crossbrowser:build:tsc\":\"cd ./test/crossbrowser && tsc\",\"test:crossbrowser:build:browser\":\"cd ./test/crossbrowser && browserify lib/crossbrowser/src/browser/index.js > src/browser/index.js\",\"test:crossbrowser:build\":\"npm-run-all test:crossbrowser:build:*\",\"test:crossbrowser:test\":\"cd ./test/crossbrowser && mocha --compilers ts:ts-node/register test/integration/spec/**/*.ts\",\"test:crossbrowser\":\"npm-run-all test:crossbrowser:*\",\"test:sdkdriver:build:clean\":\"rimraf ./test/lib/sdkdriver/lib ./test/lib/sdkdriver/test/integration/browser/index.js\",\"test:sdkdriver:build:lint\":\"cd ./test/lib/sdkdriver && tslint --project tsconfig.json\",\"test:sdkdriver:build:tsc\":\"cd ./test/lib/sdkdriver && tsc --rootDir src\",\"test:sdkdriver:build\":\"npm-run-all test:sdkdriver:build:*\",\"test:sdkdriver:test:unit\":\"cd ./test/lib/sdkdriver && mocha --compilers ts:ts-node/register test/unit/spec/**/*.ts\",\"test:sdkdriver:test:integration:browser\":\"cd ./test/lib/sdkdriver/test/integration && browserify browser/browser.js > browser/index.js\",\"test:sdkdriver:test:integration:run\":\"cd ./test/lib/sdkdriver && mocha --compilers ts:ts-node/register test/integration/spec/**/*.ts\",\"test:sdkdriver:test:integration\":\"npm-run-all test:sdkdriver:test:integration:*\",\"test:sdkdriver:test\":\"npm-run-all test:sdkdriver:test:*\",\"test:sdkdriver\":\"npm-run-all test:sdkdriver:*\",\"test:framework:angular:install\":\"cd ./test/framework/twilio-video-angular && rimraf ./node_modules package-lock.json && npm install\",\"test:framework:angular:run\":\"mocha ./test/framework/twilio-video-angular.js\",\"test:framework:angular\":\"npm-run-all test:framework:angular:*\",\"test:framework:no-framework:run\":\"mocha ./test/framework/twilio-video-no-framework.js\",\"test:framework:no-framework\":\"npm-run-all test:framework:no-framework:*\",\"test:framework:react:install\":\"cd ./test/framework/twilio-video-react && rimraf ./node_modules package-lock.json && npm install\",\"test:framework:react:test\":\"node ./scripts/framework.js twilio-video-react\",\"test:framework:react:build\":\"cd ./test/framework/twilio-video-react && npm run build\",\"test:framework:react:run\":\"mocha ./test/framework/twilio-video-react.js\",\"test:framework:react\":\"npm-run-all test:framework:react:*\",\"test:framework:install\":\"npm install chromedriver && npm install selenium-webdriver && npm install geckodriver && npm install puppeteer\",\"test:framework\":\"npm-run-all test:framework:install test:framework:no-framework test:framework:react\",test:\"npm-run-all test:unit test:integration\",\"build:es5\":\"rimraf ./es5 && mkdir -p es5 && tsc tsdef/twilio-video-tests.ts --noEmit --lib es2018,dom && tsc\",\"build:js\":\"node ./scripts/build.js ./src/twilio-video.js ./LICENSE.md ./dist/twilio-video.js\",\"build:min.js\":'uglifyjs ./dist/twilio-video.js -o ./dist/twilio-video.min.js --comments \"/^! twilio-video.js/\" -b beautify=false,ascii_only=true',build:\"npm-run-all clean lint docs test:unit test:integration build:es5 build:js build:min.js test:umd\",\"build:quick\":\"npm-run-all clean lint docs build:es5 build:js build:min.js\",docs:\"node ./scripts/docs.js ./dist/docs\",watch:\"tsc -w\",clean:\"rimraf ./coverage ./es5 ./dist\"},dependencies:{events:\"^3.3.0\",util:\"^0.12.4\",ws:\"^7.4.6\",xmlhttprequest:\"^1.8.0\"},browser:{ws:\"./src/ws.js\",xmlhttprequest:\"./src/xmlhttprequest.js\"}};","'use strict';\n/* eslint-disable camelcase */\nconst packageInfo = require('../../package.json');\nmodule.exports.SDK_NAME = `${packageInfo.name}.js`;\nmodule.exports.SDK_VERSION = packageInfo.version;\nmodule.exports.SDP_FORMAT = 'unified';\nmodule.exports.hardwareDevicePublisheriPad = {\n hwDeviceManufacturer: 'Apple',\n hwDeviceModel: 'iPad',\n hwDeviceType: 'tablet',\n platformName: 'iOS'\n};\n\nmodule.exports.hardwareDevicePublisheriPhone = {\n hwDeviceManufacturer: 'Apple',\n hwDeviceModel: 'iPhone',\n hwDeviceType: 'mobile',\n platformName: 'iOS'\n};\n\nmodule.exports.DEFAULT_ENVIRONMENT = 'prod';\nmodule.exports.DEFAULT_REALM = 'us1';\nmodule.exports.DEFAULT_REGION = 'gll';\nmodule.exports.DEFAULT_LOG_LEVEL = 'warn';\nmodule.exports.DEFAULT_LOGGER_NAME = 'twilio-video';\nmodule.exports.WS_SERVER = (environment, region) => {\n region = region === 'gll' ? 'global' : encodeURIComponent(region);\n return environment === 'prod'\n ? `wss://${region}.vss.twilio.com/signaling`\n : `wss://${region}.vss.${environment}.twilio.com/signaling`;\n};\nmodule.exports.PUBLISH_MAX_ATTEMPTS = 5;\nmodule.exports.PUBLISH_BACKOFF_JITTER = 10;\nmodule.exports.PUBLISH_BACKOFF_MS = 20;\n\n/**\n * Returns the appropriate indefinite article (\"a\" | \"an\").\n * @param {string} word - The word which determines whether \"a\" | \"an\" is returned\n * @returns {string} \"a\" if word's first letter is a vowel, \"an\" otherwise\n */\nfunction article(word) {\n // NOTE(mmalavalli): This will not be accurate for words like \"hour\",\n // which have consonants as their first character, but are pronounced like\n // vowels. We can address this issue if the need arises.\n return ['a', 'e', 'i', 'o', 'u'].includes(word.toLowerCase()[0]) ? 'an' : 'a';\n}\n\nmodule.exports.typeErrors = {\n ILLEGAL_INVOKE(name, context) {\n return new TypeError(`Illegal call to ${name}: ${context}`);\n },\n INVALID_TYPE(name, type) {\n return new TypeError(`${name} must be ${article(type)} ${type}`);\n },\n INVALID_VALUE(name, values) {\n return new RangeError(`${name} must be one of ${values.join(', ')}`);\n },\n REQUIRED_ARGUMENT(name) {\n return new TypeError(`${name} must be specified`);\n }\n};\n\nmodule.exports.DEFAULT_FRAME_RATE = 24;\nmodule.exports.DEFAULT_VIDEO_PROCESSOR_STATS_INTERVAL_MS = 10000;\n\nmodule.exports.DEFAULT_ICE_GATHERING_TIMEOUT_MS = 15000;\nmodule.exports.DEFAULT_SESSION_TIMEOUT_SEC = 30;\n\nmodule.exports.DEFAULT_NQ_LEVEL_LOCAL = 1;\nmodule.exports.DEFAULT_NQ_LEVEL_REMOTE = 0;\nmodule.exports.MAX_NQ_LEVEL = 3;\n\nmodule.exports.ICE_ACTIVITY_CHECK_PERIOD_MS = 1000;\nmodule.exports.ICE_INACTIVITY_THRESHOLD_MS = 3000;\n\nmodule.exports.iceRestartBackoffConfig = {\n factor: 1.1,\n min: 1,\n max: module.exports.DEFAULT_SESSION_TIMEOUT_SEC * 1000,\n jitter: 1\n};\n\nmodule.exports.reconnectBackoffConfig = {\n factor: 1.5,\n min: 80,\n jitter: 1\n};\n\nmodule.exports.subscriptionMode = {\n MODE_COLLABORATION: 'collaboration',\n MODE_GRID: 'grid',\n MODE_PRESENTATION: 'presentation'\n};\n\nmodule.exports.trackSwitchOffMode = {\n MODE_DISABLED: 'disabled',\n MODE_DETECTED: 'detected',\n MODE_PREDICTED: 'predicted'\n};\n\nmodule.exports.trackPriority = {\n PRIORITY_HIGH: 'high',\n PRIORITY_LOW: 'low',\n PRIORITY_STANDARD: 'standard'\n};\n\nmodule.exports.clientTrackSwitchOffControl = {\n MODE_AUTO: 'auto',\n MODE_MANUAL: 'manual'\n};\n\nmodule.exports.videoContentPreferencesMode = {\n MODE_AUTO: 'auto',\n MODE_MANUAL: 'manual'\n};\n","/* eslint new-cap:0 */\n'use strict';\n\nconst defaultGetLogger = require('../vendor/loglevel').getLogger;\nconst constants = require('./constants');\nconst { DEFAULT_LOG_LEVEL, DEFAULT_LOGGER_NAME } = constants;\nconst E = require('./constants').typeErrors;\n\nlet deprecationWarningsByComponentConstructor;\n\nfunction getDeprecationWarnings(componentConstructor) {\n deprecationWarningsByComponentConstructor = deprecationWarningsByComponentConstructor || new Map();\n if (deprecationWarningsByComponentConstructor.has(componentConstructor)) {\n return deprecationWarningsByComponentConstructor.get(componentConstructor);\n }\n const deprecationWarnings = new Set();\n deprecationWarningsByComponentConstructor.set(componentConstructor, deprecationWarnings);\n return deprecationWarnings;\n}\n\n/**\n * Selectively outputs messages to console based on specified minimum module\n * specific log levels.\n *\n * NOTE: The values in the logLevels object passed to the constructor is changed\n * by subsequent calls to {@link Log#setLevels}.\n */\nclass Log {\n /**\n * Construct a new {@link Log} object.\n * @param {String} moduleName - Name of the logging module (webrtc/media/signaling)\n * @param {object} component - Component owning this instance of {@link Log}\n * @param {LogLevels} logLevels - Logging levels. See {@link LogLevels}\n * @param {String} loggerName - Name of the logger instance. Used when calling getLogger from loglevel module\n * @param {Function} [getLogger] - optional method used internally.\n */\n constructor(moduleName, component, logLevels, loggerName, getLogger) {\n if (typeof moduleName !== 'string') {\n throw E.INVALID_TYPE('moduleName', 'string');\n }\n\n if (!component) {\n throw E.REQUIRED_ARGUMENT('component');\n }\n\n if (typeof logLevels !== 'object') {\n logLevels = {};\n }\n\n getLogger = getLogger || defaultGetLogger;\n\n validateLogLevels(logLevels);\n\n /* istanbul ignore next */\n Object.defineProperties(this, {\n _component: {\n value: component\n },\n _logLevels: {\n value: logLevels\n },\n _warnings: {\n value: new Set()\n },\n _loggerName: {\n get: function get() {\n let name = loggerName && typeof loggerName === 'string' ? loggerName : DEFAULT_LOGGER_NAME;\n\n if (!this._logLevelsEqual) {\n name = `${name}-${moduleName}`;\n }\n return name;\n }\n },\n _logger: {\n get: function get() {\n const logger = getLogger(this._loggerName);\n let level = this._logLevels[moduleName] || DEFAULT_LOG_LEVEL;\n\n // There is no 'off' in the logger module. It uses 'silent' instead\n level = level === 'off' ? 'silent' : level;\n\n logger.setDefaultLevel(level);\n return logger;\n }\n },\n _logLevelsEqual: {\n get: function get() {\n // True if all levels are the same\n return (new Set(Object.values(this._logLevels)).size) === 1;\n }\n },\n logLevel: {\n get: function get() {\n return Log.getLevelByName(logLevels[moduleName] || DEFAULT_LOG_LEVEL);\n }\n },\n name: { get: component.toString.bind(component) }\n });\n }\n\n /**\n * Get the log level (number) by its name (string)\n * @param {String} name - Name of the log level\n * @returns {Number} Requested log level\n * @throws {TwilioError} INVALID_LOG_LEVEL (32056)\n * @public\n */\n static getLevelByName(name) {\n if (!isNaN(name)) {\n return parseInt(name, 10);\n }\n name = name.toUpperCase();\n validateLogLevel(name);\n return Log[name];\n }\n\n /**\n * Create a child {@link Log} instance with this._logLevels\n * @param moduleName - Name of the logging module\n * @param component - Component owning this instance of {@link Log}\n * @returns {Log} this\n */\n createLog(moduleName, component) {\n let name = this._loggerName;\n // Grab the original logger name\n if (!this._logLevelsEqual) {\n name = name.substring(0, name.lastIndexOf('-'));\n }\n return new Log(moduleName, component, this._logLevels, name);\n }\n\n /**\n * Set new log levels.\n * This changes the levels for all its ancestors,\n * siblings, and children and descendants instances of {@link Log}.\n * @param {LogLevels} levels - New log levels\n * @throws {TwilioError} INVALID_ARGUMENT\n * @returns {Log} this\n */\n setLevels(levels) {\n validateLogLevels(levels);\n Object.assign(this._logLevels, levels);\n return this;\n }\n\n /**\n * Log a message using the logger method appropriate for the specified logLevel\n * @param {Number} logLevel - Log level of the message being logged\n * @param {Array} messages - Message(s) to log\n * @returns {Log} This instance of {@link Log}\n * @public\n */\n log(logLevel, messages) {\n let name = Log._levels[logLevel];\n // eslint-disable-next-line no-use-before-define\n if (!name) { throw E.INVALID_VALUE('logLevel', LOG_LEVEL_VALUES); }\n\n name = name.toLowerCase();\n const prefix = [new Date().toISOString(), name, this.name];\n\n (this._logger[name] || function noop() {})(...prefix.concat(messages));\n\n return this;\n }\n\n /**\n * Log a debug message\n * @param {...String} messages - Message(s) to pass to the logger\n * @returns {Log} This instance of {@link Log}\n * @public\n */\n debug() {\n return this.log(Log.DEBUG, [].slice.call(arguments));\n }\n\n /**\n * Log a deprecation warning. Deprecation warnings are logged as warnings and\n * they are only ever logged once.\n * @param {String} deprecationWarning - The deprecation warning\n * @returns {Log} This instance of {@link Log}\n * @public\n */\n deprecated(deprecationWarning) {\n const deprecationWarnings = getDeprecationWarnings(this._component.constructor);\n if (deprecationWarnings.has(deprecationWarning)) {\n return this;\n }\n deprecationWarnings.add(deprecationWarning);\n return this.warn(deprecationWarning);\n }\n\n /**\n * Log an info message\n * @param {...String} messages - Message(s) to pass to the logger\n * @returns {Log} This instance of {@link Log}\n * @public\n */\n info() {\n return this.log(Log.INFO, [].slice.call(arguments));\n }\n\n /**\n * Log a warn message\n * @param {...String} messages - Message(s) to pass to the logger\n * @returns {Log} This instance of {@link Log}\n * @public\n */\n warn() {\n return this.log(Log.WARN, [].slice.call(arguments));\n }\n\n /**\n * Log a warning once.\n * @param {String} warning\n * @returns {Log} This instance of {@link Log}\n * @public\n */\n warnOnce(warning) {\n if (this._warnings.has(warning)) {\n return this;\n }\n this._warnings.add(warning);\n return this.warn(warning);\n }\n\n /**\n * Log an error message\n * @param {...String} messages - Message(s) to pass to the logger\n * @returns {Log} This instance of {@link Log}\n * @public\n */\n error() {\n return this.log(Log.ERROR, [].slice.call(arguments));\n }\n\n /**\n * Log an error message and throw an exception\n * @param {TwilioError} error - Error to throw\n * @param {String} customMessage - Custom message for the error\n * @public\n */\n throw(error, customMessage) {\n if (error.clone) {\n error = error.clone(customMessage);\n }\n\n this.log(Log.ERROR, error);\n throw error;\n }\n}\n\n// Singleton Constants\n/* eslint key-spacing:0 */\n/* istanbul ignore next */\nObject.defineProperties(Log, {\n DEBUG: { value: 0 },\n INFO: { value: 1 },\n WARN: { value: 2 },\n ERROR: { value: 3 },\n OFF: { value: 4 },\n _levels: {\n value: [\n 'DEBUG',\n 'INFO',\n 'WARN',\n 'ERROR',\n 'OFF',\n ]\n }\n});\n\nconst LOG_LEVELS_SET = {};\nconst LOG_LEVEL_VALUES = [];\n\nconst LOG_LEVEL_NAMES = Log._levels.map((level, i) => {\n LOG_LEVELS_SET[level] = true;\n LOG_LEVEL_VALUES.push(i);\n return level;\n});\n\nfunction validateLogLevel(level) {\n if (!(level in LOG_LEVELS_SET)) {\n throw E.INVALID_VALUE('level', LOG_LEVEL_NAMES);\n }\n}\n\nfunction validateLogLevels(levels) {\n Object.keys(levels).forEach(moduleName => {\n validateLogLevel(levels[moduleName].toUpperCase());\n });\n}\n\nmodule.exports = Log;\n","'use strict';\n\nimport { AudioProcessor } from '../tsdef/AudioProcessor';\nimport { NoiseCancellationOptions } from '../tsdef/types';\n\nconst dynamicImport = require('./util/dynamicimport');\nconst Log = require('./util/log');\n\nconst PLUGIN_CONFIG = {\n krisp: {\n supportedVersion: '1.0.0',\n pluginFile: 'krispsdk.mjs'\n },\n rnnoise: {\n supportedVersion: '0.6.0',\n pluginFile: 'rnnoise_sdk.mjs'\n }\n};\n\n// AudioProcessor assumes following interface from the Plugin\ninterface NoiseCancellationPlugin {\n init(options: { rootDir: string }): Promise;\n isInitialized(): boolean;\n isConnected(): boolean;\n isEnabled(): boolean\n connect(input: MediaStream): MediaStream;\n disconnect(): void;\n enable(): void;\n disable(): void;\n destroy(): void;\n setLogging(enable: boolean):void;\n isSupported(audioContext: AudioContext):boolean;\n getVersion(): string;\n}\n\nconst ensureVersionSupported = ({ supportedVersion, plugin, log }: {supportedVersion: string, plugin: NoiseCancellationPlugin, log: typeof Log}) : void => {\n if (!plugin.getVersion || !plugin.isSupported) {\n throw new Error('Plugin does not export getVersion/isSupported api. Are you using old version of the plugin ?');\n }\n\n const pluginVersion = plugin.getVersion();\n log.debug(`Plugin Version = ${pluginVersion}`);\n const supportedVersions = supportedVersion.split('.').map(version => Number(version));\n const pluginVersions = pluginVersion.split('.').map(version => Number(version));\n if (supportedVersions.length !== 3 || pluginVersions.length !== 3) {\n throw new Error(`Unsupported Plugin version format: ${supportedVersion}, ${pluginVersion}`);\n }\n\n if (supportedVersions[0] !== pluginVersions[0]) {\n throw new Error(`Major version mismatch: [Plugin version ${pluginVersion}], [Supported Version ${supportedVersion}]`);\n }\n\n if (pluginVersions[1] < supportedVersions[1]) {\n throw new Error(`Minor version mismatch: [Plugin version ${pluginVersion}] < [Supported Version ${supportedVersion}]`);\n }\n\n const tempContext = new AudioContext();\n const isSupported = plugin.isSupported(tempContext);\n tempContext.close();\n if (!isSupported) {\n throw new Error('Noise Cancellation plugin is not supported on your browser');\n }\n};\n\nlet audioProcessors = new Map();\nexport async function createNoiseCancellationAudioProcessor(\n noiseCancellationOptions: NoiseCancellationOptions,\n log: typeof Log\n) : Promise {\n let audioProcessor = audioProcessors.get(noiseCancellationOptions.vendor);\n if (!audioProcessor) {\n let pluginConfig = PLUGIN_CONFIG[noiseCancellationOptions.vendor];\n if (!pluginConfig) {\n throw new Error(`Unsupported NoiseCancellationOptions.vendor: ${noiseCancellationOptions.vendor}`);\n }\n\n const { supportedVersion, pluginFile } = pluginConfig;\n const rootDir = noiseCancellationOptions.sdkAssetsPath;\n const sdkFilePath = `${rootDir}/${pluginFile}`;\n\n try {\n log.debug('loading noise cancellation sdk: ', sdkFilePath);\n const dynamicModule = await dynamicImport(sdkFilePath);\n log.debug('Loaded noise cancellation sdk:', dynamicModule);\n\n const plugin = dynamicModule.default as NoiseCancellationPlugin;\n ensureVersionSupported({\n supportedVersion,\n plugin,\n log\n });\n\n if (!plugin.isInitialized()) {\n log.debug('initializing noise cancellation sdk: ', rootDir);\n await plugin.init({ rootDir });\n log.debug('noise cancellation sdk initialized!');\n }\n\n audioProcessor = {\n vendor: noiseCancellationOptions.vendor,\n isInitialized: () => plugin.isInitialized(),\n isConnected: () => plugin.isConnected(),\n isEnabled: () => plugin.isEnabled(),\n disconnect: () => plugin.disconnect(),\n enable: () => plugin.enable(),\n disable: () => plugin.disable(),\n destroy: () => plugin.destroy(),\n setLogging: (enable: boolean) => plugin.setLogging(enable),\n connect: (sourceTrack: MediaStreamTrack) => {\n log.debug('connect: ', sourceTrack.id);\n if (plugin.isConnected()) {\n plugin.disconnect();\n }\n\n const mediaStream = plugin.connect(new MediaStream([sourceTrack]));\n if (!mediaStream) {\n throw new Error('Error connecting with noise cancellation sdk');\n }\n const cleanTrack = mediaStream.getAudioTracks()[0];\n if (!cleanTrack) {\n throw new Error('Error getting clean track from noise cancellation sdk');\n }\n plugin.enable();\n return cleanTrack;\n },\n };\n audioProcessors.set(noiseCancellationOptions.vendor, audioProcessor);\n\n } catch (er) {\n log.error(`Error loading noise cancellation sdk:${sdkFilePath}`, er);\n throw er;\n }\n }\n return audioProcessor;\n}\n","'use strict';\n\nimport { NoiseCancellation, NoiseCancellationOptions, NoiseCancellationVendor } from '../../../tsdef/types';\nimport { AudioProcessor } from '../../../tsdef/AudioProcessor';\nimport { createNoiseCancellationAudioProcessor } from '../../noisecancellationadapter';\nconst Log = require('../../util/log');\n\n/**\n * {@link NoiseCancellation} interface provides methods to control noise cancellation at runtime. This interface is exposed\n * on {@link LocalAudioTrack} property `noiseCancellation`. It is available only when {@link NoiseCancellationOptions} are\n * specified when creating a {@link LocalAudioTrack}, and the plugin is successfully loaded.\n * @alias NoiseCancellation\n * @interface\n *\n * @example\n * const { connect, createLocalAudioTrack } = require('twilio-video');\n *\n * // Create a LocalAudioTrack with Krisp noise cancellation enabled.\n * const localAudioTrack = await createLocalAudioTrack({\n * noiseCancellationOptions: {\n * sdkAssetsPath: 'path/to/hosted/twilio/krisp/audio/plugin/1.0.0/dist',\n * vendor: 'krisp'\n * }\n * });\n *\n * if (!localAudioTrack.noiseCancellation) {\n * // If the Krisp audio plugin fails to load, then a warning message will be logged\n * // in the browser console, and the \"noiseCancellation\" property will be set to null.\n * // You can still use the LocalAudioTrack to join a Room. However, it will use the\n * // browser's noise suppression instead of the Krisp noise cancellation. Make sure\n * // the \"sdkAssetsPath\" provided in \"noiseCancellationOptions\" points to the correct\n * // hosted path of the plugin assets.\n * } else {\n * // Join a Room with the LocalAudioTrack.\n * const room = await connect('token', {\n * name: 'my-cool-room',\n * tracks: [localAudioTrack]\n * });\n *\n * if (!localAudioTrack.noiseCancellation.isEnabled) {\n * // Krisp noise cancellation is permanently disabled in Peer-to-Peer and Go Rooms.\n * }\n * }\n *\n * //\n * // Enable/disable noise cancellation.\n * // @param {boolean} enable - whether noise cancellation should be enabled\n * //\n * function setNoiseCancellation(enable) {\n * const { noiseCancellation } = localAudioTrack;\n * if (noiseCancellation) {\n * if (enable) {\n * // If enabled, then the LocalAudioTrack will use the Krisp noise\n * // cancellation instead of the browser's noise suppression.\n * noiseCancellation.enable();\n * } else {\n * // If disabled, then the LocalAudioTrack will use the browser's\n * // noise suppression instead of the Krisp noise cancellation.\n * noiseCancellation.disable();\n * }\n * }\n * }\n */\nexport class NoiseCancellationImpl implements NoiseCancellation {\n private _processor: AudioProcessor;\n private _sourceTrack: MediaStreamTrack;\n private _disabledPermanent: boolean;\n\n constructor(processor: AudioProcessor, originalTrack: MediaStreamTrack) {\n this._processor = processor;\n this._sourceTrack = originalTrack;\n this._disabledPermanent = false;\n }\n\n /**\n * Name of the noise cancellation vendor.\n * @type {NoiseCancellationVendor}\n */\n get vendor(): NoiseCancellationVendor {\n return this._processor.vendor;\n }\n\n /**\n * The underlying MediaStreamTrack of the {@link LocalAudioTrack}.\n * @type {MediaStreamTrack}\n */\n get sourceTrack(): MediaStreamTrack {\n return this._sourceTrack;\n }\n\n /**\n * Whether noise cancellation is enabled.\n * @type {boolean}\n */\n get isEnabled(): boolean {\n return this._processor.isEnabled();\n }\n\n /**\n * Enable noise cancellation.\n * @returns {Promise} Promise that resolves when the operation is complete\n * @throws {Error} Throws an error if noise cancellation is disabled permanently\n * for the {@link LocalAudioTrack}\n */\n enable() : Promise {\n if (this._disabledPermanent) {\n throw new Error(`${this.vendor} noise cancellation is disabled permanently for this track`);\n }\n\n this._processor.enable();\n return Promise.resolve();\n }\n\n /**\n * Disable noise cancellation.\n * @returns {Promise} Promise that resolves when the operation is complete\n */\n disable() : Promise {\n this._processor.disable();\n return Promise.resolve();\n }\n\n /**\n * @private\n */\n async reacquireTrack(reacquire: () => Promise) : Promise {\n const processorWasEnabled = this._processor.isEnabled();\n this._processor.disconnect();\n\n const track = await reacquire();\n this._sourceTrack = track;\n\n const processedTrack = await this._processor.connect(track);\n if (processorWasEnabled) {\n this._processor.enable();\n } else {\n this._processor.disable();\n }\n return processedTrack;\n }\n\n /**\n * @private\n */\n disablePermanently(): Promise {\n this._disabledPermanent = true;\n return this.disable();\n }\n\n\n /**\n * @private\n */\n stop(): void {\n this._processor.disconnect();\n this._sourceTrack.stop();\n }\n}\n\n\nexport async function applyNoiseCancellation(\n mediaStreamTrack: MediaStreamTrack,\n noiseCancellationOptions: NoiseCancellationOptions,\n log: typeof Log\n) : Promise<{ cleanTrack: MediaStreamTrack, noiseCancellation?: NoiseCancellation }> {\n try {\n const processor = await createNoiseCancellationAudioProcessor(noiseCancellationOptions, log);\n const cleanTrack = processor.connect(mediaStreamTrack);\n const noiseCancellation = new NoiseCancellationImpl(processor, mediaStreamTrack);\n return { cleanTrack, noiseCancellation };\n } catch (ex) {\n // in case of failures to load noise cancellation library just return original media stream.\n log.warn(`Failed to create noise cancellation. Returning normal audio track: ${ex}`);\n return { cleanTrack: mediaStreamTrack };\n }\n}\n","'use strict';\n\n/**\n * Create a {@link Deferred}.\n * @returns {Deferred}\n */\nfunction defer() {\n const deferred = {};\n deferred.promise = new Promise((resolve, reject) => {\n deferred.resolve = resolve;\n deferred.reject = reject;\n });\n return deferred;\n}\n\n/**\n * Copy a method from a `source` prototype onto a `wrapper` prototype. Invoking\n * the method on the `wrapper` prototype will invoke the corresponding method\n * on an instance accessed by `target`.\n * @param {object} source\n * @param {object} wrapper\n * @param {string} target\n * @param {string} methodName\n * @returns {undefined}\n */\nfunction delegateMethod(source, wrapper, target, methodName) {\n if (methodName in wrapper) {\n // Skip any methods already set.\n return;\n } else if (methodName.match(/^on[a-z]+$/)) {\n // Skip EventHandlers (these are handled in the constructor).\n return;\n }\n\n\n let isProperty = false;\n try {\n const propDesc = Object.getOwnPropertyDescriptor(source, methodName);\n isProperty = propDesc && !!propDesc.get;\n } catch (error) {\n // its okay to eat failure here.\n }\n\n // NOTE(mpatwardhan):skip properties. we are only interested in overriding\n // functions. we do not even want to evaluate `typeof source[methodName]` for properties\n // because getter would get invoked, and they might have side effects.\n // For example RTCPeerConnection.peerIdentity is a property that returns a promise.\n // calling typeof RTCPeerConnection.peerIdentity, would leak a promise, and in case it rejects\n // we see errors.\n if (isProperty) {\n return;\n }\n\n let type;\n try {\n type = typeof source[methodName];\n } catch (error) {\n // NOTE(mroberts): Attempting to check the type of non-function members\n // on the prototype throws an error for some types.\n }\n\n if (type !== 'function') {\n // Skip non-function members.\n return;\n }\n\n /* eslint no-loop-func:0 */\n wrapper[methodName] = function() {\n return this[target][methodName].apply(this[target], arguments);\n };\n}\n\n/**\n * Copy methods from a `source` prototype onto a `wrapper` prototype. Invoking\n * the methods on the `wrapper` prototype will invoke the corresponding method\n * on an instance accessed by `target`.\n * @param {object} source\n * @param {object} wrapper\n * @param {string} target\n * @returns {undefined}\n */\nfunction delegateMethods(source, wrapper, target) {\n for (const methodName in source) {\n delegateMethod(source, wrapper, target, methodName);\n }\n}\n\n/**\n * Finds the items in list1 that are not in list2.\n * @param {Array<*>|Map<*>|Set<*>} list1\n * @param {Array<*>|Map<*>|Set<*>} list2\n * @returns {Set}\n */\nfunction difference(list1, list2) {\n list1 = Array.isArray(list1) ? new Set(list1) : new Set(list1.values());\n list2 = Array.isArray(list2) ? new Set(list2) : new Set(list2.values());\n\n const difference = new Set();\n\n list1.forEach(item => {\n if (!list2.has(item)) {\n difference.add(item);\n }\n });\n\n return difference;\n}\n\n/**\n * Map a list to an array of arrays, and return the flattened result.\n * @param {Array<*>|Set<*>|Map<*>} list\n * @param {function(*): Array<*>} mapFn\n * @returns Array<*>\n */\nfunction flatMap(list, mapFn) {\n const listArray = list instanceof Map || list instanceof Set\n ? Array.from(list.values())\n : list;\n\n return listArray.reduce((flattened, item) => flattened.concat(mapFn(item)), []);\n}\n\n/**\n * Get the browser's user agent, if available.\n * @returns {?string}\n */\nfunction getUserAgent() {\n return typeof navigator !== 'undefined' && typeof navigator.userAgent === 'string'\n ? navigator.userAgent\n : null;\n}\n\n/**\n * Guess the browser.\n * @param {string} [userAgent=navigator.userAgent]\n * @returns {?string} browser - \"chrome\", \"firefox\", \"safari\", or null\n */\nfunction guessBrowser(userAgent) {\n if (typeof userAgent === 'undefined') {\n userAgent = getUserAgent();\n }\n if (/Chrome|CriOS/.test(userAgent)) {\n return 'chrome';\n }\n if (/Firefox|FxiOS/.test(userAgent)) {\n return 'firefox';\n }\n if (/Safari|iPhone|iPad|iPod/.test(userAgent)) {\n return 'safari';\n }\n return null;\n}\n\n/**\n * Guess the browser version.\n * @param {string} [userAgent=navigator.userAgent]\n * @returns {?{major: number, minor: number}}\n */\nfunction guessBrowserVersion(userAgent) {\n if (typeof userAgent === 'undefined') {\n userAgent = getUserAgent();\n }\n const prefix = {\n chrome: 'Chrome|CriOS',\n firefox: 'Firefox|FxiOS',\n safari: 'Version'\n }[guessBrowser(userAgent)];\n\n if (!prefix) {\n return null;\n }\n const regex = new RegExp(`(${prefix})/([^\\\\s]+)`);\n const [, , match] = userAgent.match(regex) || [];\n\n if (!match) {\n return null;\n }\n const versions = match.split('.').map(Number);\n return {\n major: isNaN(versions[0]) ? null : versions[0],\n minor: isNaN(versions[1]) ? null : versions[1]\n };\n}\n\n/**\n * Check whether the current browser is iOS Chrome.\n * @param {string} [userAgent=navigator.userAgent]\n * @returns {boolean}\n */\nfunction isIOSChrome(userAgent) {\n if (typeof userAgent === 'undefined') {\n userAgent = getUserAgent();\n }\n return (/Mobi/.test(userAgent) && guessBrowser() === 'chrome' && /iPad|iPhone|iPod/.test(userAgent));\n}\n\n/**\n * Intercept an event that might otherwise be proxied on an EventTarget.\n * @param {EventTarget} target\n * @param {string} type\n * @returns {void}\n */\nfunction interceptEvent(target, type) {\n let currentListener = null;\n Object.defineProperty(target, 'on' + type, {\n get: function() {\n return currentListener;\n },\n set: function(newListener) {\n if (currentListener) {\n this.removeEventListener(type, currentListener);\n }\n\n if (typeof newListener === 'function') {\n currentListener = newListener;\n this.addEventListener(type, currentListener);\n } else {\n currentListener = null;\n }\n }\n });\n}\n\n/**\n * This is a function for turning a Promise into the kind referenced in the\n * Legacy Interface Extensions section of the WebRTC spec.\n * @param {Promise<*>} promise\n * @param {function<*>} onSuccess\n * @param {function} onFailure\n * @returns {Promise}\n */\nfunction legacyPromise(promise, onSuccess, onFailure) {\n return onSuccess\n ? promise.then(onSuccess, onFailure)\n : promise;\n}\n\n/**\n * Make a unique ID.\n * @return {string}\n */\nfunction makeUUID() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {\n const r = Math.random() * 16 | 0;\n const v = c === 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n}\n\n/**\n * For each property name on the `source` prototype, add getters and/or setters\n * to `wrapper` that proxy to `target`.\n * @param {object} source\n * @param {object} wrapper\n * @param {string} target\n * @returns {undefined}\n */\nfunction proxyProperties(source, wrapper, target) {\n Object.getOwnPropertyNames(source).forEach(propertyName => {\n proxyProperty(source, wrapper, target, propertyName);\n });\n}\n\n/**\n * For the property name on the `source` prototype, add a getter and/or setter\n * to `wrapper` that proxies to `target`.\n * @param {object} source\n * @param {object} wrapper\n * @param {string} target\n * @param {string} propertyName\n * @returns {undefined}\n */\nfunction proxyProperty(source, wrapper, target, propertyName) {\n if (propertyName in wrapper) {\n // Skip any properties already set.\n return;\n } else if (propertyName.match(/^on[a-z]+$/)) {\n Object.defineProperty(wrapper, propertyName, {\n value: null,\n writable: true\n });\n\n target.addEventListener(\n propertyName.slice(2),\n (...args) => wrapper.dispatchEvent(...args)\n );\n\n return;\n }\n\n Object.defineProperty(wrapper, propertyName, {\n enumerable: true,\n get: function() {\n return target[propertyName];\n }\n });\n}\n\n/**\n * Check whether native WebRTC APIs are supported.\n * @returns {boolean}\n */\nfunction support() {\n return typeof navigator === 'object'\n && typeof navigator.mediaDevices === 'object'\n && typeof navigator.mediaDevices.getUserMedia === 'function'\n && typeof RTCPeerConnection === 'function';\n}\n\n/**\n * Create a Set of supported codecs for a certain kind of media.\n * @param {'audio'|'video'} kind\n * @returns {Promise>}\n */\nfunction createSupportedCodecsSet(kind) {\n if (typeof RTCRtpSender !== 'undefined'\n && typeof RTCRtpSender.getCapabilities === 'function') {\n return Promise.resolve(new Set(\n RTCRtpSender\n .getCapabilities(kind)\n .codecs\n .map(({ mimeType }) => mimeType.split('/')[1].toLowerCase())\n ));\n }\n if (typeof RTCPeerConnection === 'undefined'\n || typeof RTCPeerConnection.prototype === 'undefined'\n || typeof RTCPeerConnection.prototype.addTransceiver !== 'function'\n || typeof RTCPeerConnection.prototype.close !== 'function'\n || typeof RTCPeerConnection.prototype.createOffer !== 'function') {\n return Promise.resolve(new Set());\n }\n const pc = new RTCPeerConnection();\n pc.addTransceiver(kind);\n return pc.createOffer().then(({ sdp }) => {\n pc.close();\n return new Set((sdp.match(/^a=rtpmap:.+$/gm) || [])\n .map(line => line.match(/^a=rtpmap:.+ ([^/]+)/)[1].toLowerCase()));\n }, () => {\n pc.close();\n return new Set();\n });\n}\n\n// NOTE(mmalavalli): Cache the supported audio and video codecs here.\nconst supportedCodecs = new Map();\n\n/**\n * Check whether a given codec for a certain kind of media is supported.\n * @param {AudioCodec|VideoCodec} codec\n * @param {'audio'|'video'} kind\n * @returns {Promise}\n */\nfunction isCodecSupported(codec, kind) {\n const codecs = supportedCodecs.get(kind);\n if (codecs) {\n return Promise.resolve(codecs.has(codec.toLowerCase()));\n }\n return createSupportedCodecsSet(kind).then(codecs => {\n supportedCodecs.set(kind, codecs);\n return codecs.has(codec.toLowerCase());\n });\n}\n\n/**\n * Clear cached supported codecs (unit tests only).\n */\nfunction clearCachedSupportedCodecs() {\n supportedCodecs.clear();\n}\n\n/**\n * @typedef {object} Deferred\n * @property {Promise} promise\n * @property {function} reject\n * @property {function} resolve\n */\n\nexports.clearCachedSupportedCodecs = clearCachedSupportedCodecs;\nexports.defer = defer;\nexports.delegateMethods = delegateMethods;\nexports.difference = difference;\nexports.flatMap = flatMap;\nexports.guessBrowser = guessBrowser;\nexports.guessBrowserVersion = guessBrowserVersion;\nexports.isCodecSupported = isCodecSupported;\nexports.isIOSChrome = isIOSChrome;\nexports.interceptEvent = interceptEvent;\nexports.legacyPromise = legacyPromise;\nexports.makeUUID = makeUUID;\nexports.proxyProperties = proxyProperties;\nexports.support = support;\n","const SID_CHARS = '1234567890abcdef';\nconst SID_CHAR_LENGTH = 32;\n// copied from: https://code.hq.twilio.com/flex/monkey/blob/0fdce2b6c52d6be0b17a5cdb92f0c54f119b8ea8/src/client/lib/sid.ts#L39\n\n/**\n * Generates a random sid using given prefix.\n * @param {string} prefix\n * @returns string\n */\nfunction createSID(prefix) {\n let result = '';\n for (let i = 0; i < SID_CHAR_LENGTH; i++) {\n result += SID_CHARS.charAt(Math.floor(Math.random() * SID_CHARS.length));\n }\n return `${prefix}${result}`;\n}\n\nexports.sessionSID = createSID('SS');\nexports.createSID = createSID;\n\n","'use strict';\n\n/**\n * @private\n * Represents a warning encountered when\n * interacting with one of Twilio's services.\n */\n// eslint-disable-next-line\nconst TwilioWarning = {\n recordingMediaLost: 'recording-media-lost'\n};\n\nmodule.exports = TwilioWarning;\n","'use strict';\n\nconst constants = require('./constants');\nconst { typeErrors: E, trackPriority } = constants;\nconst util = require('../webrtc/util');\nconst { sessionSID } = require('./sid');\nconst TwilioWarning = require('./twiliowarning');\n\n/**\n * Return the given {@link LocalTrack} or a new {@link LocalTrack} for the\n * given MediaStreamTrack.\n * @param {LocalTrack|MediaStreamTrack} track\n * @param {object} options\n * @returns {LocalTrack}\n * @throws {TypeError}\n */\nfunction asLocalTrack(track, options) {\n if (track instanceof options.LocalAudioTrack\n || track instanceof options.LocalVideoTrack\n || track instanceof options.LocalDataTrack) {\n return track;\n }\n if (track instanceof options.MediaStreamTrack) {\n return track.kind === 'audio'\n ? new options.LocalAudioTrack(track, options)\n : new options.LocalVideoTrack(track, options);\n }\n /* eslint new-cap:0 */\n throw E.INVALID_TYPE('track', 'LocalAudioTrack, LocalVideoTrack, LocalDataTrack, or MediaStreamTrack');\n}\n\n/**\n * Create a new {@link LocalTrackPublication} for the given {@link LocalTrack}.\n * @param {LocalTrack} track\n * @param {LocalTrackPublicationSignaling} signaling\n * @param {function(track: LocalTrackPublication): void} unpublish\n * @param {object} options\n */\nfunction asLocalTrackPublication(track, signaling, unpublish, options) {\n const LocalTrackPublication = {\n audio: options.LocalAudioTrackPublication,\n video: options.LocalVideoTrackPublication,\n data: options.LocalDataTrackPublication\n }[track.kind];\n return new LocalTrackPublication(signaling, track, unpublish, options);\n}\n\n/**\n * Capitalize a word.\n * @param {string} word\n * @returns {string} capitalized\n */\nfunction capitalize(word) {\n return word[0].toUpperCase() + word.slice(1);\n}\n\n/**\n * Log deprecation warnings for the given events of an EventEmitter.\n * @param {string} name\n * @param {EventEmitter} emitter\n * @param {Map} events\n * @param {Log} log\n */\nfunction deprecateEvents(name, emitter, events, log) {\n const warningsShown = new Set();\n emitter.on('newListener', function newListener(event) {\n if (events.has(event) && !warningsShown.has(event)) {\n log.deprecated(`${name}#${event} has been deprecated and scheduled for removal in twilio-video.js@2.0.0.${events.get(event)\n ? ` Use ${name}#${events.get(event)} instead.`\n : ''}`);\n warningsShown.add(event);\n }\n if (warningsShown.size >= events.size) {\n emitter.removeListener('newListener', newListener);\n }\n });\n}\n\n/**\n * Finds the items in list1 that are not in list2.\n * @param {Array<*>|Map<*>|Set<*>} list1\n * @param {Array<*>|Map<*>|Set<*>} list2\n * @returns {Set}\n */\nfunction difference(list1, list2) {\n list1 = Array.isArray(list1) ? new Set(list1) : new Set(list1.values());\n list2 = Array.isArray(list2) ? new Set(list2) : new Set(list2.values());\n\n const difference = new Set();\n\n list1.forEach(item => {\n if (!list2.has(item)) {\n difference.add(item);\n }\n });\n\n return difference;\n}\n\n/**\n * Filter out the keys in an object with a given value.\n * @param {object} object - Object to be filtered\n * @param {*} [filterValue] - Value to be filtered out; If not specified, then\n * filters out all keys which have an explicit value of \"undefined\"\n * @returns {object} - Filtered object\n */\nfunction filterObject(object, filterValue) {\n return Object.keys(object).reduce((filtered, key) => {\n if (object[key] !== filterValue) {\n filtered[key] = object[key];\n }\n return filtered;\n }, {});\n}\n\n/**\n * Map a list to an array of arrays, and return the flattened result.\n * @param {Array<*>|Set<*>|Map<*>} list\n * @param {function(*): Array<*>} [mapFn]\n * @returns Array<*>\n */\nfunction flatMap(list, mapFn) {\n const listArray = list instanceof Map || list instanceof Set\n ? Array.from(list.values())\n : list;\n\n mapFn = mapFn || function mapFn(item) {\n return item;\n };\n\n return listArray.reduce((flattened, item) => {\n const mapped = mapFn(item);\n return flattened.concat(mapped);\n }, []);\n}\n\n/**\n * Get the user agent string, or return \"Unknown\".\n * @returns {string}\n */\nfunction getUserAgent() {\n return typeof navigator !== 'undefined' && navigator.userAgent\n ? navigator.userAgent\n : 'Unknown';\n}\n\n/**\n * Get the platform component of the user agent string.\n * Example:\n * Input - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36\n * Output - macintosh\n * @returns {string}\n */\nfunction getPlatform() {\n const userAgent = getUserAgent();\n const [, match = 'unknown'] = userAgent.match(/\\(([^)]+)\\)/) || [];\n const [platform] = match.split(';').map(entry => entry.trim());\n return platform.toLowerCase();\n}\n\n/**\n * Create a unique identifier.\n * @returns {string}\n */\nfunction makeUUID() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {\n const r = Math.random() * 16 | 0;\n const v = c === 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n}\n\n/**\n * Ensure that the given function is called once per tick.\n * @param {function} fn - Function to be executed\n * @returns {function} - Schedules the given function to be called on the next tick\n */\nfunction oncePerTick(fn) {\n let timeout = null;\n\n function nextTick() {\n timeout = null;\n fn();\n }\n\n return function scheduleNextTick() {\n if (timeout) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(nextTick);\n };\n}\n\nfunction promiseFromEvents(operation, eventEmitter, successEvent, failureEvent) {\n return new Promise((resolve, reject) => {\n function onSuccess() {\n const args = [].slice.call(arguments);\n if (failureEvent) {\n eventEmitter.removeListener(failureEvent, onFailure);\n }\n resolve(...args);\n }\n function onFailure() {\n const args = [].slice.call(arguments);\n eventEmitter.removeListener(successEvent, onSuccess);\n reject(...args);\n }\n eventEmitter.once(successEvent, onSuccess);\n if (failureEvent) {\n eventEmitter.once(failureEvent, onFailure);\n }\n operation();\n });\n}\n\n/**\n * Traverse down multiple nodes on an object and return null if\n * any link in the path is unavailable.\n * @param {Object} obj - Object to traverse\n * @param {String} path - Path to traverse. Period-separated.\n * @returns {Any|null}\n */\nfunction getOrNull(obj, path) {\n return path.split('.').reduce((output, step) => {\n if (!output) { return null; }\n return output[step];\n }, obj);\n}\n\n/**\n * @typedef {object} Deferred\n * @property {Promise} promise\n * @property {function} reject\n * @property {function} resolve\n */\n\n/**\n * Create a {@link Deferred}.\n * @returns {Deferred}\n */\nfunction defer() {\n const deferred = {};\n deferred.promise = new Promise((resolve, reject) => {\n deferred.resolve = resolve;\n deferred.reject = reject;\n });\n return deferred;\n}\n\n/**\n * Copy a method from a `source` prototype onto a `wrapper` prototype. Invoking\n * the method on the `wrapper` prototype will invoke the corresponding method\n * on an instance accessed by `target`.\n * @param {object} source\n * @param {object} wrapper\n * @param {string} target\n * @param {string} methodName\n * @returns {undefined}\n */\nfunction delegateMethod(source, wrapper, target, methodName) {\n if (methodName in wrapper) {\n // Skip any methods already set.\n return;\n } else if (methodName.match(/^on[a-z]+$/)) {\n // Skip EventHandlers (these are handled in the constructor).\n return;\n }\n\n let type;\n try {\n type = typeof source[methodName];\n } catch (error) {\n // NOTE(mroberts): Attempting to check the type of non-function members\n // on the prototype throws an error for some types.\n }\n\n if (type !== 'function') {\n // Skip non-function members.\n return;\n }\n\n /* eslint no-loop-func:0 */\n wrapper[methodName] = function(...args) {\n return this[target][methodName](...args);\n };\n}\n\n/**\n * Copy methods from a `source` prototype onto a `wrapper` prototype. Invoking\n * the methods on the `wrapper` prototype will invoke the corresponding method\n * on an instance accessed by `target`.\n * @param {object} source\n * @param {object} wrapper\n * @param {string} target\n * @returns {undefined}\n */\nfunction delegateMethods(source, wrapper, target) {\n for (const methodName in source) {\n delegateMethod(source, wrapper, target, methodName);\n }\n}\n\n/**\n * Determine whether two values are deeply equal.\n * @param {*} val1\n * @param {*} val2\n * @returns {boolean}\n */\nfunction isDeepEqual(val1, val2) {\n if (val1 === val2) {\n return true;\n }\n if (typeof val1 !== typeof val2) {\n return false;\n }\n if (val1 === null) {\n return val2 === null;\n }\n if (val2 === null) {\n return false;\n }\n if (Array.isArray(val1)) {\n return Array.isArray(val2)\n && val1.length === val2.length\n && val1.every((val, i) => isDeepEqual(val, val2[i]));\n }\n if (typeof val1 === 'object') {\n const val1Keys = Object.keys(val1).sort();\n const val2Keys = Object.keys(val2).sort();\n return !Array.isArray(val2)\n && isDeepEqual(val1Keys, val2Keys)\n && val1Keys.every(key => isDeepEqual(val1[key], val2[key]));\n }\n return false;\n}\n\n/**\n * Whether the given argument is a non-array object.\n * @param {*} object\n * @return {boolean}\n */\nfunction isNonArrayObject(object) {\n return typeof object === 'object' && !Array.isArray(object);\n}\n\n/**\n * For each property name on the `source` prototype, add getters and/or setters\n * to `wrapper` that proxy to `target`.\n * @param {object} source\n * @param {object} wrapper\n * @param {string} target\n * @returns {undefined}\n */\nfunction proxyProperties(source, wrapper, target) {\n Object.getOwnPropertyNames(source).forEach(propertyName => {\n proxyProperty(source, wrapper, target, propertyName);\n });\n}\n\n/**\n * For the property name on the `source` prototype, add a getter and/or setter\n * to `wrapper` that proxies to `target`.\n * @param {object} source\n * @param {object} wrapper\n * @param {string} target\n * @param {string} propertyName\n * @returns {undefined}\n */\nfunction proxyProperty(source, wrapper, target, propertyName) {\n if (propertyName in wrapper) {\n // Skip any properties already set.\n return;\n } else if (propertyName.match(/^on[a-z]+$/)) {\n Object.defineProperty(wrapper, propertyName, {\n value: null,\n writable: true\n });\n\n target.addEventListener(propertyName.slice(2), function(...args) {\n wrapper.dispatchEvent(...args);\n });\n\n return;\n }\n\n Object.defineProperty(wrapper, propertyName, {\n enumerable: true,\n get() {\n return target[propertyName];\n }\n });\n}\n\n/**\n * This is a function for turning a Promise into the kind referenced in the\n * Legacy Interface Extensions section of the WebRTC spec.\n * @param {Promise<*>} promise\n * @param {function<*>} onSuccess\n * @param {function} onFailure\n * @returns {Promise}\n */\nfunction legacyPromise(promise, onSuccess, onFailure) {\n if (onSuccess) {\n return promise.then(result => {\n onSuccess(result);\n }, error => {\n onFailure(error);\n });\n }\n return promise;\n}\n\n/**\n * Build the {@link LogLevels} object.\n * @param {String|LogLevel} logLevel - Log level name or object\n * @returns {LogLevels}\n */\nfunction buildLogLevels(logLevel) {\n if (typeof logLevel === 'string') {\n return {\n default: logLevel,\n media: logLevel,\n signaling: logLevel,\n webrtc: logLevel\n };\n }\n return logLevel;\n}\n\n/**\n * Get the {@link Track}'s derived class name\n * @param {Track} track\n * @param {?boolean} [local=undefined]\n * @returns {string}\n */\nfunction trackClass(track, local) {\n local = local ? 'Local' : '';\n return `${local + (track.kind || '').replace(/\\w{1}/, m => m.toUpperCase())}Track`;\n}\n\n/**\n * Get the {@link TrackPublication}'s derived class name\n * @param {TrackPublication} publication\n * @param {?boolean} [local=undefined]\n * @returns {string}\n */\nfunction trackPublicationClass(publication, local) {\n local = local ? 'Local' : '';\n return `${local + (publication.kind || '').replace(/\\w{1}/, m => m.toUpperCase())}TrackPublication`;\n}\n\n/**\n * Sets all underscore-prefixed properties on `object` non-enumerable.\n * @param {Object} object\n * @returns {void}\n */\nfunction hidePrivateProperties(object) {\n Object.getOwnPropertyNames(object).forEach(name => {\n if (name.startsWith('_')) {\n hideProperty(object, name);\n }\n });\n}\n\n/**\n * Creates a new subclass which, in the constructor, sets all underscore-prefixed\n * properties and the given public properties non-enumerable. This is useful for\n * patching up classes like EventEmitter which may set properties like `_events`\n * and `domain`.\n * @param {Function} klass\n * @param {Array} props\n * @returns {Function} subclass\n */\nfunction hidePrivateAndCertainPublicPropertiesInClass(klass, props) {\n // NOTE(mroberts): We do this to avoid giving the class a name.\n return class extends klass {\n constructor(...args) {\n super(...args);\n hidePrivateProperties(this);\n hidePublicProperties(this, props);\n }\n };\n}\n\n/**\n * Hide a property of an object.\n * @param {object} object\n * @param {string} name\n */\nfunction hideProperty(object, name) {\n const descriptor = Object.getOwnPropertyDescriptor(object, name);\n descriptor.enumerable = false;\n Object.defineProperty(object, name, descriptor);\n}\n\n/**\n * Hide the given public properties of an object.\n * @param {object} object\n * @param {Array} [props=[]]\n */\nfunction hidePublicProperties(object, props = []) {\n props.forEach(name => {\n // eslint-disable-next-line no-prototype-builtins\n if (object.hasOwnProperty(name)) {\n hideProperty(object, name);\n }\n });\n}\n\n/**\n * Convert an Array of values to an Array of JSON values by calling\n * `valueToJSON` on each value.\n * @param {Array<*>} array\n * @returns {Array<*>}\n */\nfunction arrayToJSON(array) {\n return array.map(valueToJSON);\n}\n\n/**\n * Convert a Set of values to an Array of JSON values by calling `valueToJSON`\n * on each value.\n * @param {Set<*>} set\n * @returns {Array<*>}\n */\nfunction setToJSON(set) {\n return arrayToJSON([...set]);\n}\n\n/**\n * Convert a Map from strings to values to an object of JSON values by calling\n * `valueToJSON` on each value.\n * @param {Map} map\n * @returns {object}\n */\nfunction mapToJSON(map) {\n return [...map.entries()].reduce((json, [key, value]) => {\n return Object.assign({ [key]: valueToJSON(value) }, json);\n }, {});\n}\n\n/**\n * Convert an object to a JSON value by calling `valueToJSON` on its enumerable\n * keys.\n * @param {object} object\n * @returns {object}\n */\nfunction objectToJSON(object) {\n return Object.entries(object).reduce((json, [key, value]) => {\n return Object.assign({ [key]: valueToJSON(value) }, json);\n }, {});\n}\n\n/**\n * Convert a value into a JSON value.\n * @param {*} value\n * @returns {*}\n */\nfunction valueToJSON(value) {\n if (Array.isArray(value)) {\n return arrayToJSON(value);\n } else if (value instanceof Set) {\n return setToJSON(value);\n } else if (value instanceof Map) {\n return mapToJSON(value);\n } else if (value && typeof value === 'object') {\n return objectToJSON(value);\n }\n return value;\n}\n\nfunction createRoomConnectEventPayload(connectOptions) {\n function boolToString(val) {\n return val ? 'true' : 'false';\n }\n const payload = {\n sessionSID,\n\n // arrays props converted to lengths.\n iceServers: (connectOptions.iceServers || []).length,\n audioTracks: (connectOptions.tracks || []).filter(track => track.kind === 'audio').length,\n videoTracks: (connectOptions.tracks || []).filter(track => track.kind === 'video').length,\n dataTracks: (connectOptions.tracks || []).filter(track => track.kind === 'data').length,\n };\n\n // boolean properties.\n [['audio'], ['automaticSubscription'], ['enableDscp'], ['eventListener'], ['preflight'], ['video'], ['dominantSpeaker', 'enableDominantSpeaker']].forEach(([prop, eventProp]) => {\n eventProp = eventProp || prop;\n payload[eventProp] = boolToString(!!connectOptions[prop]);\n });\n\n // numbers properties.\n [['maxVideoBitrate'], ['maxAudioBitrate']].forEach(([prop, eventProp]) => {\n eventProp = eventProp || prop;\n if (typeof connectOptions[prop] === 'number') {\n payload[eventProp] = connectOptions[prop];\n } else if (!isNaN(Number(connectOptions[prop]))) {\n payload[eventProp] = Number(connectOptions[prop]);\n }\n });\n\n // string properties.\n [['iceTransportPolicy'], ['region'], ['name', 'roomName']].forEach(([prop, eventProp]) => {\n eventProp = eventProp || prop;\n if (typeof connectOptions[prop] === 'string') {\n payload[eventProp] = connectOptions[prop];\n } else if (typeof connectOptions[prop] === 'number' && prop === 'name') {\n payload[eventProp] = connectOptions[prop].toString();\n }\n });\n\n // array props stringified.\n ['preferredAudioCodecs', 'preferredVideoCodecs'].forEach(prop => {\n if (prop in connectOptions) {\n payload[prop] = JSON.stringify(connectOptions[prop]);\n }\n });\n\n if ('networkQuality' in connectOptions) {\n payload.networkQualityConfiguration = {};\n if (isNonArrayObject(connectOptions.networkQuality)) {\n ['local', 'remote'].forEach(prop => {\n if (typeof connectOptions.networkQuality[prop] === 'number') {\n payload.networkQualityConfiguration[prop] = connectOptions.networkQuality[prop];\n }\n });\n } else {\n payload.networkQualityConfiguration.remote = 0;\n payload.networkQualityConfiguration.local = connectOptions.networkQuality ? 1 : 0;\n }\n }\n\n if (connectOptions.bandwidthProfile && connectOptions.bandwidthProfile.video) {\n const videoBPOptions = connectOptions.bandwidthProfile.video || {};\n payload.bandwidthProfileOptions = {};\n ['mode', 'maxTracks', 'trackSwitchOffMode', 'dominantSpeakerPriority', 'maxSubscriptionBitrate', 'renderDimensions', 'contentPreferencesMode', 'clientTrackSwitchOffControl'].forEach(prop => {\n if (typeof videoBPOptions[prop] === 'number' || typeof videoBPOptions[prop] === 'string') {\n payload.bandwidthProfileOptions[prop] = videoBPOptions[prop];\n } else if (typeof videoBPOptions[prop] === 'boolean') {\n payload.bandwidthProfileOptions[prop] = boolToString(videoBPOptions[prop]);\n } else if (typeof videoBPOptions[prop] === 'object') {\n payload.bandwidthProfileOptions[prop] = JSON.stringify(videoBPOptions[prop]);\n }\n });\n }\n\n return {\n group: 'room',\n name: 'connect',\n level: 'info',\n payload\n };\n}\n\n/**\n * Create the bandwidth profile payload included in an RSP connect message.\n * @param {BandwidthProfileOptions} bandwidthProfile\n * @returns {object}\n */\nfunction createBandwidthProfilePayload(bandwidthProfile) {\n return createRSPPayload(bandwidthProfile, [\n { prop: 'video', type: 'object', transform: createBandwidthProfileVideoPayload }\n ]);\n}\n\n/**\n * Create the bandwidth profile video payload included in an RSP connect message.\n * @param {VideoBandwidthProfileOptions} bandwidthProfileVideo\n * @returns {object}\n */\nfunction createBandwidthProfileVideoPayload(bandwidthProfileVideo) {\n return createRSPPayload(bandwidthProfileVideo, [\n { prop: 'dominantSpeakerPriority', type: 'string', payloadProp: 'active_speaker_priority' },\n { prop: 'maxSubscriptionBitrate', type: 'number', payloadProp: 'max_subscription_bandwidth' },\n { prop: 'maxTracks', type: 'number', payloadProp: 'max_tracks' },\n { prop: 'mode', type: 'string' },\n { prop: 'renderDimensions', type: 'object', payloadProp: 'render_dimensions', transform: createRenderDimensionsPayload },\n { prop: 'trackSwitchOffMode', type: 'string', payloadProp: 'track_switch_off' }\n ]);\n}\n\n/**\n * Create the Media Signaling payload included in an RSP connect message.\n * @param {boolean} dominantSpeaker - whether to enable the Dominant Speaker\n * protocol or not\n * @param {boolean} networkQuality - whether to enable the Network Quality\n * protocol or not\n * @param {boolean} trackPriority - whether to enable the Track Priority\n * protocol or not\n * @param {boolean} trackSwitchOff - whether to enable the Track Switch-Off\n * protocol or not.\n * @param {boolean} renderHints - whether to enable the renderHints\n * protocol or not.\n * @returns {object}\n */\nfunction createMediaSignalingPayload(dominantSpeaker, networkQuality, trackPriority, trackSwitchOff, adaptiveSimulcast, renderHints) {\n const transports = { transports: [{ type: 'data-channel' }] };\n return Object.assign(\n dominantSpeaker\n // eslint-disable-next-line\n ? { active_speaker: transports }\n : {},\n networkQuality\n // eslint-disable-next-line\n ? { network_quality: transports }\n : {},\n renderHints\n // eslint-disable-next-line\n ? { render_hints: transports }\n : {},\n adaptiveSimulcast\n // eslint-disable-next-line\n ? { publisher_hints: transports }\n : {},\n trackPriority\n // eslint-disable-next-line\n ? { track_priority: transports }\n : {},\n trackSwitchOff\n // eslint-disable-next-line\n ? { track_switch_off: transports }\n : {}\n );\n}\n\n/**\n * Create {@link VideoTrack.Dimensions} RSP payload.\n * @param {VideoTrack.Dimensions} [dimensions]\n * @returns {object}\n */\nfunction createDimensionsPayload(dimensions) {\n return createRSPPayload(dimensions, [\n { prop: 'height', type: 'number' },\n { prop: 'width', type: 'number' }\n ]);\n}\n\n/**\n * Create {@link VideoRenderDimensions} RSP payload.\n * @param renderDimensions\n * @returns {object}\n */\nfunction createRenderDimensionsPayload(renderDimensions) {\n const { PRIORITY_HIGH, PRIORITY_LOW, PRIORITY_STANDARD } = trackPriority;\n return createRSPPayload(renderDimensions, [\n { prop: PRIORITY_HIGH, type: 'object', transform: createDimensionsPayload },\n { prop: PRIORITY_LOW, type: 'object', transform: createDimensionsPayload },\n { prop: PRIORITY_STANDARD, type: 'object', transform: createDimensionsPayload }\n ]);\n}\n\n/**\n * Create an RSP payload for the given object.\n * @param {object} object - object for which RSP payload is to be generated\n * @param {Array} propConversions - conversion rules for object properties;\n * they specify how object properties should be converted to their corresponding\n * RSP payload properties\n * @returns {object}\n */\nfunction createRSPPayload(object, propConversions) {\n return propConversions.reduce((payload, { prop, type, payloadProp = prop, transform = x => x }) => {\n return typeof object[prop] === type\n ? Object.assign({ [payloadProp]: transform(object[prop]) }, payload)\n : payload;\n }, {});\n}\n\n/**\n * Create the subscribe payload included in an RSP connect/update message.\n * @param {boolean} automaticSubscription - whether to subscribe to all RemoteTracks\n * @returns {object}\n */\nfunction createSubscribePayload(automaticSubscription) {\n return {\n rules: [{\n type: automaticSubscription ? 'include' : 'exclude',\n all: true\n }],\n revision: 1\n };\n}\n\nfunction createMediaWarningsPayload(notifyWarnings) {\n const mediaWarnings = {\n [TwilioWarning.recordingMediaLost]: 'recordings'\n };\n return notifyWarnings\n .map(twilioWarningName => mediaWarnings[twilioWarningName])\n .filter(name => !!name);\n}\n\n/**\n * Add random jitter to a given value in the range [-jitter, jitter].\n * @private\n * @param {number} value\n * @param {number} jitter\n * @returns {number} value + random(-jitter, +jitter)\n */\nfunction withJitter(value, jitter) {\n const rand = Math.random();\n return value - jitter + Math.floor(2 * jitter * rand + 0.5);\n}\n\n/**\n * Checks if the a number is in the range [min, max].\n * @private\n * @param {num} num\n * @param {number} min\n * @param {number} max\n * @return {boolean}\n */\nfunction inRange(num, min, max) {\n return min <= num && num <= max;\n}\n\n/**\n * returns true if given MediaStreamTrack is a screen share track\n * @private\n * @param {MediaStreamTrack} track\n * @returns {boolean}\n */\nfunction isChromeScreenShareTrack(track) {\n // NOTE(mpatwardhan): Chrome creates screen share tracks with label like: \"screen:69734272*\"\n // we will check for label that starts with \"screen:D\" where D being a digit.\n return util.guessBrowser() === 'chrome' && track.kind === 'video' && 'displaySurface' in track.getSettings();\n}\n\n/**\n * Returns a promise that resolve after timeoutMS have passed.\n * @param {number} timeoutMS - time to wait in milliseconds.\n * @returns {Promise}\n */\nfunction waitForSometime(timeoutMS = 10) {\n return new Promise(resolve => setTimeout(resolve, timeoutMS));\n}\n\n/**\n * Returns a promise that resolve after event is received\n * @returns {Promise}\n */\nfunction waitForEvent(eventTarget, event) {\n return new Promise(resolve => {\n eventTarget.addEventListener(event, function onevent(e) {\n eventTarget.removeEventListener(event, onevent);\n resolve(e);\n });\n });\n}\n\nexports.constants = constants;\nexports.createBandwidthProfilePayload = createBandwidthProfilePayload;\nexports.createMediaSignalingPayload = createMediaSignalingPayload;\nexports.createMediaWarningsPayload = createMediaWarningsPayload;\nexports.createRoomConnectEventPayload = createRoomConnectEventPayload;\nexports.createSubscribePayload = createSubscribePayload;\nexports.asLocalTrack = asLocalTrack;\nexports.asLocalTrackPublication = asLocalTrackPublication;\nexports.capitalize = capitalize;\nexports.deprecateEvents = deprecateEvents;\nexports.difference = difference;\nexports.filterObject = filterObject;\nexports.flatMap = flatMap;\nexports.getPlatform = getPlatform;\nexports.getUserAgent = getUserAgent;\nexports.hidePrivateProperties = hidePrivateProperties;\nexports.hidePrivateAndCertainPublicPropertiesInClass = hidePrivateAndCertainPublicPropertiesInClass;\nexports.isDeepEqual = isDeepEqual;\nexports.isNonArrayObject = isNonArrayObject;\nexports.inRange = inRange;\nexports.makeUUID = makeUUID;\nexports.oncePerTick = oncePerTick;\nexports.promiseFromEvents = promiseFromEvents;\nexports.getOrNull = getOrNull;\nexports.defer = defer;\nexports.delegateMethods = delegateMethods;\nexports.proxyProperties = proxyProperties;\nexports.legacyPromise = legacyPromise;\nexports.buildLogLevels = buildLogLevels;\nexports.trackClass = trackClass;\nexports.trackPublicationClass = trackPublicationClass;\nexports.valueToJSON = valueToJSON;\nexports.withJitter = withJitter;\nexports.isChromeScreenShareTrack = isChromeScreenShareTrack;\nexports.waitForSometime = waitForSometime;\nexports.waitForEvent = waitForEvent;\n","/* globals RTCPeerConnection, RTCRtpTransceiver */\n\n'use strict';\n\nconst { flatMap, guessBrowser } = require('./');\n\n// NOTE(mmalavalli): We cache Chrome's sdpSemantics support in order to prevent\n// instantiation of more than one RTCPeerConnection.\nlet isSdpSemanticsSupported = null;\n\n/**\n * Check if Chrome supports specifying sdpSemantics for an RTCPeerConnection.\n * @return {boolean}\n */\nfunction checkIfSdpSemanticsIsSupported() {\n if (typeof isSdpSemanticsSupported === 'boolean') {\n return isSdpSemanticsSupported;\n }\n if (typeof RTCPeerConnection === 'undefined') {\n isSdpSemanticsSupported = false;\n return isSdpSemanticsSupported;\n }\n try {\n // eslint-disable-next-line no-new\n new RTCPeerConnection({ sdpSemantics: 'foo' });\n isSdpSemanticsSupported = false;\n } catch (e) {\n isSdpSemanticsSupported = true;\n }\n return isSdpSemanticsSupported;\n}\n\n// NOTE(mmalavalli): We cache Chrome's SDP format in order to prevent\n// instantiation of more than one RTCPeerConnection.\nlet chromeSdpFormat = null;\n\n/**\n * Clear cached Chrome's SDP format\n */\nfunction clearChromeCachedSdpFormat() {\n chromeSdpFormat = null;\n}\n\n/**\n * Get Chrome's default SDP format.\n * @returns {'planb'|'unified'}\n */\nfunction getChromeDefaultSdpFormat() {\n if (!chromeSdpFormat) {\n if (typeof RTCPeerConnection !== 'undefined'\n && 'addTransceiver' in RTCPeerConnection.prototype) {\n const pc = new RTCPeerConnection();\n try {\n pc.addTransceiver('audio');\n chromeSdpFormat = 'unified';\n } catch (e) {\n chromeSdpFormat = 'planb';\n }\n pc.close();\n } else {\n chromeSdpFormat = 'planb';\n }\n }\n return chromeSdpFormat;\n}\n\n/**\n * Get Chrome's SDP format.\n * @param {'plan-b'|'unified-plan'} [sdpSemantics]\n * @returns {'planb'|'unified'}\n */\nfunction getChromeSdpFormat(sdpSemantics) {\n if (!sdpSemantics || !checkIfSdpSemanticsIsSupported()) {\n return getChromeDefaultSdpFormat();\n }\n return {\n 'plan-b': 'planb',\n 'unified-plan': 'unified'\n }[sdpSemantics];\n}\n\n/**\n * Get Safari's default SDP format.\n * @returns {'planb'|'unified'}\n */\nfunction getSafariSdpFormat() {\n return typeof RTCRtpTransceiver !== 'undefined'\n && 'currentDirection' in RTCRtpTransceiver.prototype\n ? 'unified'\n : 'planb';\n}\n\n/**\n * Get the browser's default SDP format.\n * @param {'plan-b'|'unified-plan'} [sdpSemantics]\n * @returns {'planb'|'unified'}\n */\nfunction getSdpFormat(sdpSemantics) {\n return {\n chrome: getChromeSdpFormat(sdpSemantics),\n firefox: 'unified',\n safari: getSafariSdpFormat()\n }[guessBrowser()] || null;\n}\n\n/**\n * Match a pattern across lines, returning the first capture group for any\n * matches.\n * @param {string} pattern\n * @param {string} lines\n * @returns {Set} matches\n */\nfunction getMatches(pattern, lines) {\n const matches = lines.match(new RegExp(pattern, 'gm')) || [];\n return matches.reduce((results, line) => {\n const match = line.match(new RegExp(pattern));\n return match ? results.add(match[1]) : results;\n }, new Set());\n}\n\n/**\n * Get a Set of MediaStreamTrack IDs from an SDP.\n * @param {string} pattern\n * @param {string} sdp\n * @returns {Set}\n */\nfunction getTrackIds(pattern, sdp) {\n return getMatches(pattern, sdp);\n}\n\n/**\n * Get a Set of MediaStreamTrack IDs from a Plan B SDP.\n * @param {string} sdp - Plan B SDP\n * @returns {Set} trackIds\n */\nfunction getPlanBTrackIds(sdp) {\n return getTrackIds('^a=ssrc:[0-9]+ +msid:.+ +(.+) *$', sdp);\n}\n\n/**\n * Get a Set of MediaStreamTrack IDs from a Unified Plan SDP.\n * @param {string} sdp - Unified Plan SDP\n * @returns {Set} trackIds\n */\nfunction getUnifiedPlanTrackIds(sdp) {\n return getTrackIds('^a=msid:.+ +(.+) *$', sdp);\n}\n\n/**\n * Get a Set of SSRCs for a MediaStreamTrack from a Plan B SDP.\n * @param {string} sdp - Plan B SDP\n * @param {string} trackId - MediaStreamTrack ID\n * @returns {Set}\n */\nfunction getPlanBSSRCs(sdp, trackId) {\n const pattern = `^a=ssrc:([0-9]+) +msid:[^ ]+ +${trackId} *$`;\n return getMatches(pattern, sdp);\n}\n\n/**\n * Get the m= sections of a particular kind and direction from an sdp.\n * @param {string} sdp - sdp string\n * @param {string} [kind] - Pattern for matching kind\n * @param {string} [direction] - Pattern for matching direction\n * @returns {Array} mediaSections\n */\nfunction getMediaSections(sdp, kind = '.*', direction = '.*') {\n return sdp.split('\\r\\nm=').slice(1).map(mediaSection => `m=${mediaSection}`).filter(mediaSection => {\n const kindPattern = new RegExp(`m=${kind}`, 'gm');\n const directionPattern = new RegExp(`a=${direction}`, 'gm');\n return kindPattern.test(mediaSection) && directionPattern.test(mediaSection);\n });\n}\n\n/**\n * Get the Set of SSRCs announced in a MediaSection.\n * @param {string} mediaSection\n * @returns {Array} ssrcs\n */\nfunction getMediaSectionSSRCs(mediaSection) {\n return Array.from(getMatches('^a=ssrc:([0-9]+) +.*$', mediaSection));\n}\n\n/**\n * Get a Set of SSRCs for a MediaStreamTrack from a Unified Plan SDP.\n * @param {string} sdp - Unified Plan SDP\n * @param {string} trackId - MediaStreamTrack ID\n * @returns {Set}\n */\nfunction getUnifiedPlanSSRCs(sdp, trackId) {\n const mediaSections = getMediaSections(sdp);\n\n const msidAttrRegExp = new RegExp(`^a=msid:[^ ]+ +${trackId} *$`, 'gm');\n const matchingMediaSections = mediaSections.filter(mediaSection => mediaSection.match(msidAttrRegExp));\n\n return new Set(flatMap(matchingMediaSections, getMediaSectionSSRCs));\n}\n\n/**\n * Get a Map from MediaStreamTrack IDs to SSRCs from an SDP.\n * @param {function(string): Set} getTrackIds\n * @param {function(string, string): Set} getSSRCs\n * @param {string} sdp - SDP\n * @returns {Map>} trackIdsToSSRCs\n */\nfunction getTrackIdsToSSRCs(getTrackIds, getSSRCs, sdp) {\n return new Map(Array.from(getTrackIds(sdp)).map(trackId => [trackId, getSSRCs(sdp, trackId)]));\n}\n\n/**\n * Get a Map from MediaStreamTrack IDs to SSRCs from a Plan B SDP.\n * @param {string} sdp - Plan B SDP\n * @returns {Map>} trackIdsToSSRCs\n */\nfunction getPlanBTrackIdsToSSRCs(sdp) {\n return getTrackIdsToSSRCs(getPlanBTrackIds, getPlanBSSRCs, sdp);\n}\n\n/**\n * Get a Map from MediaStreamTrack IDs to SSRCs from a Plan B SDP.\n * @param {string} sdp - Plan B SDP\n * @returns {Map>} trackIdsToSSRCs\n */\nfunction getUnifiedPlanTrackIdsToSSRCs(sdp) {\n return getTrackIdsToSSRCs(getUnifiedPlanTrackIds, getUnifiedPlanSSRCs, sdp);\n}\n\n/**\n * Update the mappings from MediaStreamTrack IDs to SSRCs as indicated by both\n * the Map from MediaStreamTrack IDs to SSRCs and the SDP itself. This method\n * ensures that SSRCs never change once announced.\n * @param {function(string): Map>} getTrackIdsToSSRCs\n * @param {Map>} trackIdsToSSRCs\n * @param {string} sdp - SDP\n * @returns {strinng} updatedSdp - updated SDP\n */\nfunction updateTrackIdsToSSRCs(getTrackIdsToSSRCs, trackIdsToSSRCs, sdp) {\n const newTrackIdsToSSRCs = getTrackIdsToSSRCs(sdp);\n const newSSRCsToOldSSRCs = new Map();\n\n // NOTE(mroberts): First, update a=ssrc attributes.\n newTrackIdsToSSRCs.forEach((ssrcs, trackId) => {\n if (!trackIdsToSSRCs.has(trackId)) {\n trackIdsToSSRCs.set(trackId, ssrcs);\n return;\n }\n const oldSSRCs = Array.from(trackIdsToSSRCs.get(trackId));\n const newSSRCs = Array.from(ssrcs);\n oldSSRCs.forEach((oldSSRC, i) => {\n const newSSRC = newSSRCs[i];\n newSSRCsToOldSSRCs.set(newSSRC, oldSSRC);\n const pattern = `^a=ssrc:${newSSRC} (.*)$`;\n const replacement = `a=ssrc:${oldSSRC} $1`;\n sdp = sdp.replace(new RegExp(pattern, 'gm'), replacement);\n });\n });\n\n // NOTE(mroberts): Then, update a=ssrc-group attributes.\n const pattern = '^(a=ssrc-group:[^ ]+ +)(.*)$';\n const matches = sdp.match(new RegExp(pattern, 'gm')) || [];\n matches.forEach(line => {\n const match = line.match(new RegExp(pattern));\n if (!match) {\n return;\n }\n const prefix = match[1];\n const newSSRCs = match[2];\n const oldSSRCs = newSSRCs.split(' ').map(newSSRC => {\n const oldSSRC = newSSRCsToOldSSRCs.get(newSSRC);\n return oldSSRC ? oldSSRC : newSSRC;\n }).join(' ');\n sdp = sdp.replace(match[0], prefix + oldSSRCs);\n });\n\n return sdp;\n}\n\n/**\n * Update the mappings from MediaStreamTrack IDs to SSRCs as indicated by both\n * the Map from MediaStreamTrack IDs to SSRCs and the Plan B SDP itself. This\n * method ensures that SSRCs never change once announced.\n * @param {Map>} trackIdsToSSRCs\n * @param {string} sdp - Plan B SDP\n * @returns {string} updatedSdp - updated Plan B SDP\n */\nfunction updatePlanBTrackIdsToSSRCs(trackIdsToSSRCs, sdp) {\n return updateTrackIdsToSSRCs(getPlanBTrackIdsToSSRCs, trackIdsToSSRCs, sdp);\n}\n\n/**\n * Update the mappings from MediaStreamTrack IDs to SSRCs as indicated by both\n * the Map from MediaStreamTrack IDs to SSRCs and the Plan B SDP itself. This\n * method ensures that SSRCs never change once announced.\n * @param {Map>} trackIdsToSSRCs\n * @param {string} sdp - Plan B SDP\n * @returns {string} updatedSdp - updated Plan B SDP\n */\nfunction updateUnifiedPlanTrackIdsToSSRCs(trackIdsToSSRCs, sdp) {\n return updateTrackIdsToSSRCs(getUnifiedPlanTrackIdsToSSRCs, trackIdsToSSRCs, sdp);\n}\n\nexports.clearChromeCachedSdpFormat = clearChromeCachedSdpFormat;\nexports.getSdpFormat = getSdpFormat;\nexports.getMediaSections = getMediaSections;\nexports.getPlanBTrackIds = getPlanBTrackIds;\nexports.getUnifiedPlanTrackIds = getUnifiedPlanTrackIds;\nexports.getPlanBSSRCs = getPlanBSSRCs;\nexports.getUnifiedPlanSSRCs = getUnifiedPlanSSRCs;\nexports.updatePlanBTrackIdsToSSRCs = updatePlanBTrackIdsToSSRCs;\nexports.updateUnifiedPlanTrackIdsToSSRCs = updateUnifiedPlanTrackIdsToSSRCs;\n","'use strict';\n\nconst { flatMap, guessBrowser, guessBrowserVersion } = require('./util');\nconst { getSdpFormat } = require('./util/sdp');\n\nconst guess = guessBrowser();\nconst guessVersion = guessBrowserVersion();\nconst isChrome = guess === 'chrome';\nconst isFirefox = guess === 'firefox';\nconst isSafari = guess === 'safari';\n\nconst chromeMajorVersion = isChrome ? guessVersion.major : null;\n\nconst CHROME_LEGACY_MAX_AUDIO_LEVEL = 32767;\n\n/**\n * Get the standardized {@link RTCPeerConnection} statistics.\n * @param {RTCPeerConnection} peerConnection\n * @param {object} [options] - Used for testing\n * @returns {Promise.}\n */\nfunction getStats(peerConnection, options) {\n if (!(peerConnection && typeof peerConnection.getStats === 'function')) {\n return Promise.reject(new Error('Given PeerConnection does not support getStats'));\n }\n return _getStats(peerConnection, options);\n}\n\n/**\n * getStats() implementation.\n * @param {RTCPeerConnection} peerConnection\n * @param {object} [options] - Used for testing\n * @returns {Promise.}\n */\nfunction _getStats(peerConnection, options) {\n const localAudioTracks = getTracks(peerConnection, 'audio', 'local');\n const localVideoTracks = getTracks(peerConnection, 'video', 'local');\n const remoteAudioTracks = getTracks(peerConnection, 'audio');\n const remoteVideoTracks = getTracks(peerConnection, 'video');\n\n const statsResponse = {\n activeIceCandidatePair: null,\n localAudioTrackStats: [],\n localVideoTrackStats: [],\n remoteAudioTrackStats: [],\n remoteVideoTrackStats: []\n };\n\n const trackStatsPromises = flatMap([\n [localAudioTracks, 'localAudioTrackStats', false],\n [localVideoTracks, 'localVideoTrackStats', false],\n [remoteAudioTracks, 'remoteAudioTrackStats', true],\n [remoteVideoTracks, 'remoteVideoTrackStats', true]\n ], ([tracks, statsArrayName, isRemote]) => {\n return tracks.map(track => {\n return getTrackStats(peerConnection, track, Object.assign({ isRemote }, options)).then(trackStatsArray => {\n trackStatsArray.forEach(trackStats => {\n trackStats.trackId = track.id;\n statsResponse[statsArrayName].push(trackStats);\n });\n });\n });\n });\n\n return Promise.all(trackStatsPromises).then(() => {\n return getActiveIceCandidatePairStats(peerConnection, options);\n }).then(activeIceCandidatePairStatsReport => {\n statsResponse.activeIceCandidatePair = activeIceCandidatePairStatsReport;\n return statsResponse;\n });\n}\n\n/**\n * Generate the {@link StandardizedActiveIceCandidatePairStatsReport} for the\n * {@link RTCPeerConnection}.\n * @param {RTCPeerConnection} peerConnection\n * @param {object} [options]\n * @returns {Promise}\n */\nfunction getActiveIceCandidatePairStats(peerConnection, options = {}) {\n if (typeof options.testForChrome !== 'undefined' || isChrome\n || typeof options.testForSafari !== 'undefined' || isSafari) {\n return peerConnection.getStats().then(\n standardizeChromeOrSafariActiveIceCandidatePairStats);\n }\n if (typeof options.testForFirefox !== 'undefined' || isFirefox) {\n return peerConnection.getStats().then(standardizeFirefoxActiveIceCandidatePairStats);\n }\n return Promise.reject(new Error('RTCPeerConnection#getStats() not supported'));\n}\n\n/**\n * Standardize the active RTCIceCandidate pair's statistics in Chrome or Safari.\n * @param {RTCStatsReport} stats\n * @returns {?StandardizedActiveIceCandidatePairStatsReport}\n */\nfunction standardizeChromeOrSafariActiveIceCandidatePairStats(stats) {\n const activeCandidatePairStats = Array.from(stats.values()).find(\n ({ nominated, type }) => type === 'candidate-pair' && nominated\n );\n\n if (!activeCandidatePairStats) {\n return null;\n }\n\n const activeLocalCandidateStats = stats.get(activeCandidatePairStats.localCandidateId);\n const activeRemoteCandidateStats = stats.get(activeCandidatePairStats.remoteCandidateId);\n\n const standardizedCandidateStatsKeys = [\n { key: 'candidateType', type: 'string' },\n { key: 'ip', type: 'string' },\n { key: 'port', type: 'number' },\n { key: 'priority', type: 'number' },\n { key: 'protocol', type: 'string' },\n { key: 'url', type: 'string' }\n ];\n\n const standardizedLocalCandidateStatsKeys = standardizedCandidateStatsKeys.concat([\n { key: 'deleted', type: 'boolean' },\n { key: 'relayProtocol', type: 'string' }\n ]);\n\n const standatdizedLocalCandidateStatsReport = activeLocalCandidateStats\n ? standardizedLocalCandidateStatsKeys.reduce((report, { key, type }) => {\n report[key] = typeof activeLocalCandidateStats[key] === type\n ? activeLocalCandidateStats[key]\n : key === 'deleted' ? false : null;\n return report;\n }, {})\n : null;\n\n const standardizedRemoteCandidateStatsReport = activeRemoteCandidateStats\n ? standardizedCandidateStatsKeys.reduce((report, { key, type }) => {\n report[key] = typeof activeRemoteCandidateStats[key] === type\n ? activeRemoteCandidateStats[key]\n : null;\n return report;\n }, {})\n : null;\n\n return [\n { key: 'availableIncomingBitrate', type: 'number' },\n { key: 'availableOutgoingBitrate', type: 'number' },\n { key: 'bytesReceived', type: 'number' },\n { key: 'bytesSent', type: 'number' },\n { key: 'consentRequestsSent', type: 'number' },\n { key: 'currentRoundTripTime', type: 'number' },\n { key: 'lastPacketReceivedTimestamp', type: 'number' },\n { key: 'lastPacketSentTimestamp', type: 'number' },\n { key: 'nominated', type: 'boolean' },\n { key: 'priority', type: 'number' },\n { key: 'readable', type: 'boolean' },\n { key: 'requestsReceived', type: 'number' },\n { key: 'requestsSent', type: 'number' },\n { key: 'responsesReceived', type: 'number' },\n { key: 'responsesSent', type: 'number' },\n { key: 'retransmissionsReceived', type: 'number' },\n { key: 'retransmissionsSent', type: 'number' },\n { key: 'state', type: 'string', fixup: state => { return state === 'inprogress' ? 'in-progress' : state; } },\n { key: 'totalRoundTripTime', type: 'number' },\n { key: 'transportId', type: 'string' },\n { key: 'writable', type: 'boolean' }\n ].reduce((report, { key, type, fixup }) => {\n report[key] = typeof activeCandidatePairStats[key] === type\n ? (fixup ? fixup(activeCandidatePairStats[key]) : activeCandidatePairStats[key])\n : null;\n return report;\n }, {\n localCandidate: standatdizedLocalCandidateStatsReport,\n remoteCandidate: standardizedRemoteCandidateStatsReport\n });\n}\n\n/**\n * Standardize the active RTCIceCandidate pair's statistics in Firefox.\n * @param {RTCStatsReport} stats\n * @returns {?StandardizedActiveIceCandidatePairStatsReport}\n */\nfunction standardizeFirefoxActiveIceCandidatePairStats(stats) {\n const activeCandidatePairStats = Array.from(stats.values()).find(\n ({ nominated, type }) => type === 'candidate-pair' && nominated\n );\n\n if (!activeCandidatePairStats) {\n return null;\n }\n\n const activeLocalCandidateStats = stats.get(activeCandidatePairStats.localCandidateId);\n const activeRemoteCandidateStats = stats.get(activeCandidatePairStats.remoteCandidateId);\n\n const standardizedCandidateStatsKeys = [\n { key: 'candidateType', type: 'string' },\n { key: 'ip', ffKeys: ['address', 'ipAddress'], type: 'string' },\n { key: 'port', ffKeys: ['portNumber'], type: 'number' },\n { key: 'priority', type: 'number' },\n { key: 'protocol', ffKeys: ['transport'], type: 'string' },\n { key: 'url', type: 'string' }\n ];\n\n const standardizedLocalCandidateStatsKeys = standardizedCandidateStatsKeys.concat([\n { key: 'deleted', type: 'boolean' },\n { key: 'relayProtocol', type: 'string' }\n ]);\n\n const candidateTypes = {\n host: 'host',\n peerreflexive: 'prflx',\n relayed: 'relay',\n serverreflexive: 'srflx'\n };\n\n const standatdizedLocalCandidateStatsReport = activeLocalCandidateStats\n ? standardizedLocalCandidateStatsKeys.reduce((report, { ffKeys, key, type }) => {\n const localStatKey = ffKeys && ffKeys.find(key => key in activeLocalCandidateStats) || key;\n report[key] = typeof activeLocalCandidateStats[localStatKey] === type\n ? localStatKey === 'candidateType'\n ? candidateTypes[activeLocalCandidateStats[localStatKey]] || activeLocalCandidateStats[localStatKey]\n : activeLocalCandidateStats[localStatKey]\n : localStatKey === 'deleted' ? false : null;\n return report;\n }, {})\n : null;\n\n const standardizedRemoteCandidateStatsReport = activeRemoteCandidateStats\n ? standardizedCandidateStatsKeys.reduce((report, { ffKeys, key, type }) => {\n const remoteStatKey = ffKeys && ffKeys.find(key => key in activeRemoteCandidateStats) || key;\n report[key] = typeof activeRemoteCandidateStats[remoteStatKey] === type\n ? remoteStatKey === 'candidateType'\n ? candidateTypes[activeRemoteCandidateStats[remoteStatKey]] || activeRemoteCandidateStats[remoteStatKey]\n : activeRemoteCandidateStats[remoteStatKey]\n : null;\n return report;\n }, {})\n : null;\n\n return [\n { key: 'availableIncomingBitrate', type: 'number' },\n { key: 'availableOutgoingBitrate', type: 'number' },\n { key: 'bytesReceived', type: 'number' },\n { key: 'bytesSent', type: 'number' },\n { key: 'consentRequestsSent', type: 'number' },\n { key: 'currentRoundTripTime', type: 'number' },\n { key: 'lastPacketReceivedTimestamp', type: 'number' },\n { key: 'lastPacketSentTimestamp', type: 'number' },\n { key: 'nominated', type: 'boolean' },\n { key: 'priority', type: 'number' },\n { key: 'readable', type: 'boolean' },\n { key: 'requestsReceived', type: 'number' },\n { key: 'requestsSent', type: 'number' },\n { key: 'responsesReceived', type: 'number' },\n { key: 'responsesSent', type: 'number' },\n { key: 'retransmissionsReceived', type: 'number' },\n { key: 'retransmissionsSent', type: 'number' },\n { key: 'state', type: 'string' },\n { key: 'totalRoundTripTime', type: 'number' },\n { key: 'transportId', type: 'string' },\n { key: 'writable', type: 'boolean' }\n ].reduce((report, { key, type }) => {\n report[key] = typeof activeCandidatePairStats[key] === type\n ? activeCandidatePairStats[key]\n : null;\n return report;\n }, {\n localCandidate: standatdizedLocalCandidateStatsReport,\n remoteCandidate: standardizedRemoteCandidateStatsReport\n });\n}\n\n/**\n * Get local/remote audio/video MediaStreamTracks.\n * @param {RTCPeerConnection} peerConnection - The RTCPeerConnection\n * @param {string} kind - 'audio' or 'video'\n * @param {string} [localOrRemote] - 'local' or 'remote'\n * @returns {Array}\n */\nfunction getTracks(peerConnection, kind, localOrRemote) {\n const getSendersOrReceivers = localOrRemote === 'local' ? 'getSenders' : 'getReceivers';\n if (peerConnection[getSendersOrReceivers]) {\n return peerConnection[getSendersOrReceivers]()\n .map(({ track }) => track)\n .filter(track => track && track.kind === kind);\n }\n const getStreams = localOrRemote === 'local' ? 'getLocalStreams' : 'getRemoteStreams';\n const getTracks = kind === 'audio' ? 'getAudioTracks' : 'getVideoTracks';\n return flatMap(peerConnection[getStreams](), stream => stream[getTracks]());\n}\n\n/**\n * Get the standardized statistics for a particular MediaStreamTrack.\n * @param {RTCPeerConnection} peerConnection\n * @param {MediaStreamTrack} track\n * @param {object} [options] - Used for testing\n * @returns {Promise.>}\n */\nfunction getTrackStats(peerConnection, track, options = {}) {\n if (typeof options.testForChrome !== 'undefined' || isChrome) {\n return chromeOrSafariGetTrackStats(peerConnection, track, options);\n }\n if (typeof options.testForFirefox !== 'undefined' || isFirefox) {\n return firefoxGetTrackStats(peerConnection, track, options);\n }\n if (typeof options.testForSafari !== 'undefined' || isSafari) {\n if (typeof options.testForSafari !== 'undefined' || getSdpFormat() === 'unified') {\n return chromeOrSafariGetTrackStats(peerConnection, track, options);\n }\n // NOTE(syerrapragada): getStats() is not supported on\n // Safari versions where plan-b is the SDP format\n // due to this bug: https://bugs.webkit.org/show_bug.cgi?id=192601\n return Promise.reject(new Error([\n 'getStats() is not supported on this version of Safari',\n 'due to this bug: https://bugs.webkit.org/show_bug.cgi?id=192601'\n ].join(' ')));\n }\n return Promise.reject(new Error('RTCPeerConnection#getStats() not supported'));\n}\n\n/**\n * Get the standardized statistics for a particular MediaStreamTrack in Chrome or Safari.\n * @param {RTCPeerConnection} peerConnection\n * @param {MediaStreamTrack} track\n * @param {object} options - Used for testing\n * @returns {Promise.>}\n */\nfunction chromeOrSafariGetTrackStats(peerConnection, track, options) {\n if (chromeMajorVersion && chromeMajorVersion < 67) {\n return new Promise((resolve, reject) => {\n peerConnection.getStats(response => {\n resolve([standardizeChromeLegacyStats(response, track)]);\n }, null, reject);\n });\n }\n return peerConnection.getStats(track).then(response => {\n return standardizeChromeOrSafariStats(response, options);\n });\n}\n\n/**\n * Get the standardized statistics for a particular MediaStreamTrack in Firefox.\n * @param {RTCPeerConnection} peerConnection\n * @param {MediaStreamTrack} track\n * @param {object} options\n * @returns {Promise.>}\n */\nfunction firefoxGetTrackStats(peerConnection, track, options) {\n return peerConnection.getStats(track).then(response => {\n return [standardizeFirefoxStats(response, options)];\n });\n}\n\n/**\n * Standardize the MediaStreamTrack's legacy statistics in Chrome.\n * @param {RTCStatsResponse} response\n * @param {MediaStreamTrack} track\n * @returns {StandardizedTrackStatsReport}\n */\nfunction standardizeChromeLegacyStats(response, track) {\n const ssrcReport = response.result().find(report => {\n return report.type === 'ssrc' && report.stat('googTrackId') === track.id;\n });\n\n let standardizedStats = {};\n\n if (ssrcReport) {\n standardizedStats.timestamp = Math.round(Number(ssrcReport.timestamp));\n standardizedStats = ssrcReport.names().reduce((stats, name) => {\n switch (name) {\n case 'googCodecName':\n stats.codecName = ssrcReport.stat(name);\n break;\n case 'googRtt':\n stats.roundTripTime = Number(ssrcReport.stat(name));\n break;\n case 'googJitterReceived':\n stats.jitter = Number(ssrcReport.stat(name));\n break;\n case 'googFrameWidthInput':\n stats.frameWidthInput = Number(ssrcReport.stat(name));\n break;\n case 'googFrameHeightInput':\n stats.frameHeightInput = Number(ssrcReport.stat(name));\n break;\n case 'googFrameWidthSent':\n stats.frameWidthSent = Number(ssrcReport.stat(name));\n break;\n case 'googFrameHeightSent':\n stats.frameHeightSent = Number(ssrcReport.stat(name));\n break;\n case 'googFrameWidthReceived':\n stats.frameWidthReceived = Number(ssrcReport.stat(name));\n break;\n case 'googFrameHeightReceived':\n stats.frameHeightReceived = Number(ssrcReport.stat(name));\n break;\n case 'googFrameRateInput':\n stats.frameRateInput = Number(ssrcReport.stat(name));\n break;\n case 'googFrameRateSent':\n stats.frameRateSent = Number(ssrcReport.stat(name));\n break;\n case 'googFrameRateReceived':\n stats.frameRateReceived = Number(ssrcReport.stat(name));\n break;\n case 'ssrc':\n stats[name] = ssrcReport.stat(name);\n break;\n case 'bytesReceived':\n case 'bytesSent':\n case 'packetsLost':\n case 'packetsReceived':\n case 'packetsSent':\n case 'audioInputLevel':\n case 'audioOutputLevel':\n stats[name] = Number(ssrcReport.stat(name));\n break;\n }\n\n return stats;\n }, standardizedStats);\n }\n\n return standardizedStats;\n}\n\n/**\n * Standardize the MediaStreamTrack's statistics in Chrome or Safari.\n * @param {RTCStatsResponse} response\n * @param {object} options - Used for testing\n * @returns {Array}\n */\nfunction standardizeChromeOrSafariStats(response, { simulateExceptionWhileStandardizingStats = false }) {\n if (simulateExceptionWhileStandardizingStats) {\n throw new Error('Error while gathering stats');\n }\n let inbound = null;\n\n // NOTE(mpatwardhan): We should expect more than one \"outbound-rtp\" stats for a\n // VP8 simulcast MediaStreamTrack.\n const outbound = [];\n\n let remoteInbound = null;\n let remoteOutbound = null;\n let track = null;\n let codec = null;\n let localMedia = null;\n\n response.forEach(stat => {\n const { type } = stat;\n switch (type) {\n case 'inbound-rtp':\n inbound = stat;\n break;\n case 'outbound-rtp':\n outbound.push(stat);\n break;\n case 'media-source':\n localMedia = stat;\n break;\n case 'track':\n track = stat;\n break;\n case 'codec':\n codec = stat;\n break;\n case 'remote-inbound-rtp':\n remoteInbound = stat;\n break;\n case 'remote-outbound-rtp':\n remoteOutbound = stat;\n break;\n }\n });\n\n const isRemote = track ? track.remoteSource : !localMedia;\n const mainSources = isRemote ? [inbound] : outbound;\n const stats = [];\n const remoteSource = isRemote ? remoteOutbound : remoteInbound; // remote rtp stats\n\n mainSources.forEach(source => {\n const standardizedStats = {};\n const statSources = [\n source, // local rtp stats\n localMedia,\n track,\n codec,\n remoteSource && remoteSource.ssrc === source.ssrc ? remoteSource : null, // remote rtp stats\n ];\n\n function getStatValue(name) {\n const sourceFound = statSources.find(statSource => {\n return statSource && typeof statSource[name] !== 'undefined';\n }) || null;\n\n return sourceFound ? sourceFound[name] : null;\n }\n\n const ssrc = getStatValue('ssrc');\n if (typeof ssrc === 'number') {\n standardizedStats.ssrc = String(ssrc);\n }\n\n const timestamp = getStatValue('timestamp');\n standardizedStats.timestamp = Math.round(timestamp);\n\n let mimeType = getStatValue('mimeType');\n if (typeof mimeType === 'string') {\n mimeType = mimeType.split('/');\n standardizedStats.codecName = mimeType[mimeType.length - 1];\n }\n\n const roundTripTime = getStatValue('roundTripTime');\n if (typeof roundTripTime === 'number') {\n standardizedStats.roundTripTime = Math.round(roundTripTime * 1000);\n }\n\n const jitter = getStatValue('jitter');\n if (typeof jitter === 'number') {\n standardizedStats.jitter = Math.round(jitter * 1000);\n }\n\n const frameWidth = getStatValue('frameWidth');\n if (typeof frameWidth === 'number') {\n if (isRemote) {\n standardizedStats.frameWidthReceived = frameWidth;\n } else {\n standardizedStats.frameWidthSent = frameWidth;\n standardizedStats.frameWidthInput = track ? track.frameWidth : localMedia.width;\n }\n }\n\n const frameHeight = getStatValue('frameHeight');\n if (typeof frameHeight === 'number') {\n if (isRemote) {\n standardizedStats.frameHeightReceived = frameHeight;\n } else {\n standardizedStats.frameHeightSent = frameHeight;\n standardizedStats.frameHeightInput = track ? track.frameHeight : localMedia.height;\n }\n }\n\n const framesPerSecond = getStatValue('framesPerSecond');\n if (typeof framesPerSecond === 'number') {\n standardizedStats[isRemote ? 'frameRateReceived' : 'frameRateSent'] = framesPerSecond;\n }\n\n const bytesReceived = getStatValue('bytesReceived');\n if (typeof bytesReceived === 'number') {\n standardizedStats.bytesReceived = bytesReceived;\n }\n\n const bytesSent = getStatValue('bytesSent');\n if (typeof bytesSent === 'number') {\n standardizedStats.bytesSent = bytesSent;\n }\n\n const packetsLost = getStatValue('packetsLost');\n if (typeof packetsLost === 'number') {\n standardizedStats.packetsLost = packetsLost;\n }\n\n const packetsReceived = getStatValue('packetsReceived');\n if (typeof packetsReceived === 'number') {\n standardizedStats.packetsReceived = packetsReceived;\n }\n\n const packetsSent = getStatValue('packetsSent');\n if (typeof packetsSent === 'number') {\n standardizedStats.packetsSent = packetsSent;\n }\n\n let audioLevel = getStatValue('audioLevel');\n if (typeof audioLevel === 'number') {\n audioLevel = Math.round(audioLevel * CHROME_LEGACY_MAX_AUDIO_LEVEL);\n if (isRemote) {\n standardizedStats.audioOutputLevel = audioLevel;\n } else {\n standardizedStats.audioInputLevel = audioLevel;\n }\n }\n\n const totalPacketSendDalay = getStatValue('totalPacketSendDelay');\n if (typeof totalPacketSendDalay === 'number') {\n standardizedStats.totalPacketSendDelay = totalPacketSendDalay;\n }\n\n const totalEncodeTime = getStatValue('totalEncodeTime');\n if (typeof totalEncodeTime === 'number') {\n standardizedStats.totalEncodeTime = totalEncodeTime;\n }\n\n const framesEncoded = getStatValue('framesEncoded');\n if (typeof framesEncoded === 'number') {\n standardizedStats.framesEncoded = framesEncoded;\n }\n\n const estimatedPlayoutTimestamp = getStatValue('estimatedPlayoutTimestamp');\n if (typeof estimatedPlayoutTimestamp === 'number') {\n standardizedStats.estimatedPlayoutTimestamp = estimatedPlayoutTimestamp;\n }\n\n const totalDecodeTime = getStatValue('totalDecodeTime');\n if (typeof totalDecodeTime === 'number') {\n standardizedStats.totalDecodeTime = totalDecodeTime;\n }\n\n const framesDecoded = getStatValue('framesDecoded');\n if (typeof framesDecoded === 'number') {\n standardizedStats.framesDecoded = framesDecoded;\n }\n\n const jitterBufferDelay = getStatValue('jitterBufferDelay');\n if (typeof jitterBufferDelay === 'number') {\n standardizedStats.jitterBufferDelay = jitterBufferDelay;\n }\n\n const jitterBufferEmittedCount = getStatValue('jitterBufferEmittedCount');\n if (typeof jitterBufferEmittedCount === 'number') {\n standardizedStats.jitterBufferEmittedCount = jitterBufferEmittedCount;\n }\n\n stats.push(standardizedStats);\n });\n\n return stats;\n}\n\n/**\n * Standardize the MediaStreamTrack's statistics in Firefox.\n * @param {RTCStatsReport} response\n * @param {object} options - Used for testing\n * @returns {StandardizedTrackStatsReport}\n */\nfunction standardizeFirefoxStats(response = new Map(), { isRemote, simulateExceptionWhileStandardizingStats = false }) {\n if (simulateExceptionWhileStandardizingStats) {\n throw new Error('Error while gathering stats');\n }\n // NOTE(mroberts): If getStats is called on a closed RTCPeerConnection,\n // Firefox returns undefined instead of an RTCStatsReport. We workaround this\n // here. See the following bug for more details:\n //\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1377225\n //\n\n let inbound = null;\n let outbound = null;\n\n // NOTE(mmalavalli): Starting from Firefox 63, RTC{Inbound, Outbound}RTPStreamStats.isRemote\n // will be deprecated, followed by its removal in Firefox 66. Also, trying to\n // access members of the remote RTC{Inbound, Outbound}RTPStreamStats without\n // using RTCStatsReport.get(remoteId) will trigger console warnings. So, we\n // no longer depend on \"isRemote\", and we call RTCStatsReport.get(remoteId)\n // to access the remote RTC{Inbound, Outbound}RTPStreamStats.\n //\n // Source: https://blog.mozilla.org/webrtc/getstats-isremote-65/\n //\n response.forEach(stat => {\n const { isRemote, remoteId, type } = stat;\n if (isRemote) {\n return;\n }\n switch (type) {\n case 'inbound-rtp':\n inbound = stat;\n outbound = response.get(remoteId);\n break;\n case 'outbound-rtp':\n outbound = stat;\n inbound = response.get(remoteId);\n break;\n }\n });\n\n const first = isRemote ? inbound : outbound;\n const second = isRemote ? outbound : inbound;\n\n function getStatValue(name) {\n if (first && typeof first[name] !== 'undefined') {\n return first[name];\n }\n if (second && typeof second[name] !== 'undefined') {\n return second[name];\n }\n return null;\n }\n\n const standardizedStats = {};\n const timestamp = getStatValue('timestamp');\n standardizedStats.timestamp = Math.round(timestamp);\n\n const ssrc = getStatValue('ssrc');\n if (typeof ssrc === 'number') {\n standardizedStats.ssrc = String(ssrc);\n }\n\n const bytesSent = getStatValue('bytesSent');\n if (typeof bytesSent === 'number') {\n standardizedStats.bytesSent = bytesSent;\n }\n\n const packetsLost = getStatValue('packetsLost');\n if (typeof packetsLost === 'number') {\n standardizedStats.packetsLost = packetsLost;\n }\n\n const packetsSent = getStatValue('packetsSent');\n if (typeof packetsSent === 'number') {\n standardizedStats.packetsSent = packetsSent;\n }\n\n const roundTripTime = getStatValue('roundTripTime');\n if (typeof roundTripTime === 'number') {\n // roundTripTime is double - measured in seconds.\n // https://www.w3.org/TR/webrtc-stats/#dom-rtcremoteinboundrtpstreamstats-roundtriptime\n // cover it to milliseconds (and make it integer)\n standardizedStats.roundTripTime = Math.round(roundTripTime * 1000);\n }\n\n const jitter = getStatValue('jitter');\n if (typeof jitter === 'number') {\n standardizedStats.jitter = Math.round(jitter * 1000);\n }\n\n const frameRateSent = getStatValue('framerateMean');\n if (typeof frameRateSent === 'number') {\n standardizedStats.frameRateSent = Math.round(frameRateSent);\n }\n\n const bytesReceived = getStatValue('bytesReceived');\n if (typeof bytesReceived === 'number') {\n standardizedStats.bytesReceived = bytesReceived;\n }\n\n const packetsReceived = getStatValue('packetsReceived');\n if (typeof packetsReceived === 'number') {\n standardizedStats.packetsReceived = packetsReceived;\n }\n\n const frameRateReceived = getStatValue('framerateMean');\n if (typeof frameRateReceived === 'number') {\n standardizedStats.frameRateReceived = Math.round(frameRateReceived);\n }\n\n const totalPacketSendDalay = getStatValue('totalPacketSendDelay');\n if (typeof totalPacketSendDalay === 'number') {\n standardizedStats.totalPacketSendDelay = totalPacketSendDalay;\n }\n\n const totalEncodeTime = getStatValue('totalEncodeTime');\n if (typeof totalEncodeTime === 'number') {\n standardizedStats.totalEncodeTime = totalEncodeTime;\n }\n\n const framesEncoded = getStatValue('framesEncoded');\n if (typeof framesEncoded === 'number') {\n standardizedStats.framesEncoded = framesEncoded;\n }\n\n const estimatedPlayoutTimestamp = getStatValue('estimatedPlayoutTimestamp');\n if (typeof estimatedPlayoutTimestamp === 'number') {\n standardizedStats.estimatedPlayoutTimestamp = estimatedPlayoutTimestamp;\n }\n\n const totalDecodeTime = getStatValue('totalDecodeTime');\n if (typeof totalDecodeTime === 'number') {\n standardizedStats.totalDecodeTime = totalDecodeTime;\n }\n\n const framesDecoded = getStatValue('framesDecoded');\n if (typeof framesDecoded === 'number') {\n standardizedStats.framesDecoded = framesDecoded;\n }\n\n const jitterBufferDelay = getStatValue('jitterBufferDelay');\n if (typeof jitterBufferDelay === 'number') {\n standardizedStats.jitterBufferDelay = jitterBufferDelay;\n }\n\n const jitterBufferEmittedCount = getStatValue('jitterBufferEmittedCount');\n if (typeof jitterBufferEmittedCount === 'number') {\n standardizedStats.jitterBufferEmittedCount = jitterBufferEmittedCount;\n }\n\n return standardizedStats;\n}\n\n/**\n * Standardized RTCIceCandidate statistics.\n * @typedef {object} StandardizedIceCandidateStatsReport\n * @property {'host'|'prflx'|'relay'|'srflx'} candidateType\n * @property {string} ip\n * @property {number} port\n * @property {number} priority\n * @property {'tcp'|'udp'} protocol\n * @property {string} url\n */\n\n/**\n * Standardized local RTCIceCandidate statistics.\n * @typedef {StandardizedIceCandidateStatsReport} StandardizedLocalIceCandidateStatsReport\n * @property {boolean} [deleted=false]\n * @property {'tcp'|'tls'|'udp'} relayProtocol\n */\n\n/**\n * Standardized active RTCIceCandidate pair statistics.\n * @typedef {object} StandardizedActiveIceCandidatePairStatsReport\n * @property {number} availableIncomingBitrate\n * @property {number} availableOutgoingBitrate\n * @property {number} bytesReceived\n * @property {number} bytesSent\n * @property {number} consentRequestsSent\n * @property {number} currentRoundTripTime\n * @property {number} lastPacketReceivedTimestamp\n * @property {number} lastPacketSentTimestamp\n * @property {StandardizedLocalIceCandidateStatsReport} localCandidate\n * @property {boolean} nominated\n * @property {number} priority\n * @property {boolean} readable\n * @property {StandardizedIceCandidateStatsReport} remoteCandidate\n * @property {number} requestsReceived\n * @property {number} requestsSent\n * @property {number} responsesReceived\n * @property {number} responsesSent\n * @property {number} retransmissionsReceived\n * @property {number} retransmissionsSent\n * @property {'frozen'|'waiting'|'in-progress'|'failed'|'succeeded'} state\n * @property {number} totalRoundTripTime\n * @property {string} transportId\n * @property {boolean} writable\n */\n\n/**\n * Standardized {@link RTCPeerConnection} statistics.\n * @typedef {Object} StandardizedStatsResponse\n * @property {StandardizedActiveIceCandidatePairStatsReport} activeIceCandidatePair - Stats for active ICE candidate pair\n * @property Array localAudioTrackStats - Stats for local audio MediaStreamTracks\n * @property Array localVideoTrackStats - Stats for local video MediaStreamTracks\n * @property Array remoteAudioTrackStats - Stats for remote audio MediaStreamTracks\n * @property Array remoteVideoTrackStats - Stats for remote video MediaStreamTracks\n */\n\n/**\n * Standardized MediaStreamTrack statistics.\n * @typedef {Object} StandardizedTrackStatsReport\n * @property {string} trackId - MediaStreamTrack ID\n * @property {string} ssrc - SSRC of the MediaStreamTrack\n * @property {number} timestamp - The Unix timestamp in milliseconds\n * @property {string} [codecName] - Name of the codec used to encode the MediaStreamTrack's media\n * @property {number} [roundTripTime] - Round trip time in milliseconds\n * @property {number} [jitter] - Jitter in milliseconds\n * @property {number} [frameWidthInput] - Width in pixels of the local video MediaStreamTrack's captured frame\n * @property {number} [frameHeightInput] - Height in pixels of the local video MediaStreamTrack's captured frame\n * @property {number} [frameWidthSent] - Width in pixels of the local video MediaStreamTrack's encoded frame\n * @property {number} [frameHeightSent] - Height in pixels of the local video MediaStreamTrack's encoded frame\n * @property {number} [frameWidthReceived] - Width in pixels of the remote video MediaStreamTrack's received frame\n * @property {number} [frameHeightReceived] - Height in pixels of the remote video MediaStreamTrack's received frame\n * @property {number} [frameRateInput] - Captured frames per second of the local video MediaStreamTrack\n * @property {number} [frameRateSent] - Frames per second of the local video MediaStreamTrack's encoded video\n * @property {number} [frameRateReceived] - Frames per second of the remote video MediaStreamTrack's received video\n * @property {number} [bytesReceived] - Number of bytes of the remote MediaStreamTrack's media received\n * @property {number} [bytesSent] - Number of bytes of the local MediaStreamTrack's media sent\n * @property {number} [packetsLost] - Number of packets of the MediaStreamTrack's media lost\n * @property {number} [packetsReceived] - Number of packets of the remote MediaStreamTrack's media received\n * @property {number} [packetsSent] - Number of packets of the local MediaStreamTrack's media sent\n * @property {number} [totalPacketSendDelay] - The total number of seconds that the local MediaStreamTrack's packets\n * have spent buffered locally before being sent over the network\n * @property {number} [totalEncodeTime] - The total number of seconds spent on encoding the local MediaStreamTrack's frames\n * @property {number} [framesEncoded] - The total number of frames of the local MediaStreamTrack that have been encoded sor far\n * @property {number} [estimatedPlayoutTimestamp] - The estimated playout time of the remote MediaStreamTrack\n * @property {number} [totalDecodeTime] - The total number of seconds spent on decoding the remote MediaStreamTrack's frames\n * @property {number} [framesDecoded] - The total number of frames of the remote MediaStreamTrack that have been decoded sor far\n * @property {number} [jitterBufferDelay] - The sum of the time, in seconds, each audio sample or a video frame of the remote\n * MediaStreamTrack takes from the time the first packet is received by the jitter buffer to the time it exits the jitter buffer\n * @property {number} [jitterBufferEmittedCount] - The total number of audio samples or video frames that have come out of the jitter buffer\n * @property {AudioLevel} [audioInputLevel] - The {@link AudioLevel} of the local audio MediaStreamTrack\n * @property {AudioLevel} [audioOutputLevel] - The {@link AudioLevel} of the remote video MediaStreamTrack\n */\n\nmodule.exports = getStats;\n","/* globals navigator */\n'use strict';\n\n/**\n * This function is very similar to navigator.mediaDevices.getUserMedia\n * except that if no MediaStreamConstraints are provided, then bot audio and video\n * are requested.\n * @function getUserMedia\n * @param {MediaStreamConstraints} [constraints={audio:true,video:true}] - the\n * MediaStreamConstraints object specifying what kind of MediaStream to\n * request from the browser (by default both audio and video)\n * @returns Promise\n */\nfunction getUserMedia(constraints = { audio: true, video: true }) {\n if (typeof navigator === 'object'\n && typeof navigator.mediaDevices === 'object'\n && typeof navigator.mediaDevices.getUserMedia === 'function') {\n return navigator.mediaDevices.getUserMedia(constraints);\n }\n return Promise.reject(new Error('getUserMedia is not supported'));\n}\n\nmodule.exports = getUserMedia;\n","/* globals MediaStream */\n'use strict';\n\nif (typeof MediaStream === 'function') {\n module.exports = MediaStream;\n} else {\n module.exports = function MediaStream() {\n throw new Error('MediaStream is not supported');\n };\n}\n","/* global MediaStreamTrack */\n'use strict';\n\nif (typeof MediaStreamTrack === 'function') {\n module.exports = MediaStreamTrack;\n} else {\n module.exports = function MediaStreamTrack() {\n throw new Error('MediaStreamTrack is not supported');\n };\n}\n","/* global RTCIceCandidate */\n'use strict';\n\nif (typeof RTCIceCandidate === 'function') {\n module.exports = RTCIceCandidate;\n} else {\n module.exports = function RTCIceCandidate() {\n throw new Error('RTCIceCandidate is not supported');\n };\n}\n","/* globals RTCSessionDescription */\n'use strict';\n\n// This class wraps Chrome's RTCSessionDescription implementation. It provides\n// one piece of functionality not currently present in Chrome, namely\n//\n// 1. Rollback support\n// https://bugs.chromium.org/p/webrtc/issues/detail?id=4676\n//\nclass ChromeRTCSessionDescription {\n constructor(descriptionInitDict) {\n this.descriptionInitDict = descriptionInitDict;\n\n // If this constructor is called with an object with a .type property set to\n // \"rollback\", we should not call Chrome's RTCSessionDescription constructor,\n // because this would throw an RTCSdpType error.\n const description = descriptionInitDict && descriptionInitDict.type === 'rollback'\n ? null\n : new RTCSessionDescription(descriptionInitDict);\n\n Object.defineProperties(this, {\n _description: {\n get: function() {\n return description;\n }\n }\n });\n }\n\n get sdp() {\n return this._description ? this._description.sdp : this.descriptionInitDict.sdp;\n }\n\n get type() {\n return this._description ? this._description.type : this.descriptionInitDict.type;\n }\n}\n\nmodule.exports = ChromeRTCSessionDescription;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","'use strict';\n\nconst { EventEmitter } = require('events');\n\nclass EventTarget {\n constructor() {\n Object.defineProperties(this, {\n _eventEmitter: {\n value: new EventEmitter()\n }\n });\n }\n\n dispatchEvent(event) {\n return this._eventEmitter.emit(event.type, event);\n }\n\n addEventListener() {\n return this._eventEmitter.addListener(...arguments);\n }\n\n removeEventListener() {\n return this._eventEmitter.removeListener(...arguments);\n }\n}\n\nmodule.exports = EventTarget;\n","'use strict';\n\nconst { defer } = require('./');\n\nconst states = {\n high: new Set(['low']),\n low: new Set(['high'])\n};\n\n/**\n * Construct a {@link Latch}.\n * @class\n * @classdesc A {@link Latch} has two states (\"high\" and \"low\") and methods for\n * transitioning between them ({@link Latch#raise} and {@link Latch#lower}).\n * @param {string} [initialState=\"low\"] - either \"high\" or \"low\"\n */\nclass Latch {\n constructor(initialState = 'low') {\n let state = initialState;\n Object.defineProperties(this, {\n _state: {\n set: function(_state) {\n if (state !== _state) {\n state = _state;\n const whenDeferreds = this._whenDeferreds.get(state);\n whenDeferreds.forEach(deferred => deferred.resolve(this));\n whenDeferreds.clear();\n }\n },\n get: function() {\n return state;\n }\n },\n _whenDeferreds: {\n value: new Map([\n ['high', new Set()],\n ['low', new Set()]\n ])\n }\n });\n }\n\n get state() {\n return this._state;\n }\n\n /**\n * Transition to \"low\".\n * @returns {this}\n * @throws {Error}\n */\n lower() {\n return this.transition('low');\n }\n\n /**\n * Transition to \"high\".\n * @returns {this}\n * @throws {Error}\n */\n raise() {\n return this.transition('high');\n }\n\n /**\n * Transition to a new state.\n * @param {string} newState\n * @returns {this}\n * @throws {Error}\n */\n transition(newState) {\n if (!states[this.state].has(newState)) {\n throw createUnreachableStateError(this.state, newState);\n }\n this._state = newState;\n return this;\n }\n\n /**\n * Return a Promise that resolves when the {@link Latch} transitions to\n * the specified state.\n * @param {string} state\n * @returns {Promise}\n */\n when(state) {\n if (this.state === state) {\n return Promise.resolve(this);\n }\n if (!states[this.state].has(state)) {\n return Promise.reject(createUnreachableStateError(this.state, state));\n }\n const deferred = defer();\n this._whenDeferreds.get(state).add(deferred);\n return deferred.promise;\n }\n}\n\n/**\n * Create an unreachable state Error.\n * @param {string} from - state to be transitioned from\n * @param {string} to - state to be transitioned to\n * @return {Error}\n */\nfunction createUnreachableStateError(from, to) {\n return new Error(`Cannot transition from \"${from}\" to \"${to}\"`);\n}\n\nmodule.exports = Latch;\n","'use strict';\n\n/**\n * RTCRtpSender shim.\n * @param {MediaStreamTrack} track\n * @property {MediaStreamTrack} track\n */\nclass RTCRtpSenderShim {\n constructor(track) {\n Object.defineProperties(this, {\n track: {\n enumerable: true,\n value: track,\n writable: true\n }\n });\n }\n}\n\n// NOTE(mmalavalli): Because of the way we will be using this shim, there\n// are a couple of use cases that will not be covered:\n//\n// /* Case 1 */\n// const sender = pc.addTrack(track);\n// assert.equal(sender.track, track);\n// pc.removeTrack(sender);\n// assert.equal(sender.track, null); /* Error */\n//\n// /* Case 2 */\n// const sender = pc.addTrack(track);\n// const senders1 = new Set(pc.getSenders());\n// assert(senders1.has(sender));\n// pc.removeTrack(track);\n// const senders2 = new Set(pc.getSenders());\n// assert(senders2.has(sender)); /* Error */\n//\n// For now, since we only use senders for passing them to RTCPeerConnection#removeTrack(),\n// we will omit handling these use cases for now, and revisit them when we start\n// using the RTCRtpSender APIs.\n\nmodule.exports = RTCRtpSenderShim;\n","/* globals RTCDataChannel, RTCPeerConnection, RTCSessionDescription */\n'use strict';\n\nconst ChromeRTCSessionDescription = require('../rtcsessiondescription/chrome');\nconst EventTarget = require('../../eventtarget');\nconst Latch = require('../util/latch');\nconst MediaStream = require('../mediastream');\nconst RTCRtpSenderShim = require('../rtcrtpsender');\nconst { getSdpFormat, updatePlanBTrackIdsToSSRCs, updateUnifiedPlanTrackIdsToSSRCs } = require('../util/sdp');\nconst { delegateMethods, interceptEvent, isIOSChrome, legacyPromise, proxyProperties } = require('../util');\n\nconst isUnifiedPlan = getSdpFormat() === 'unified';\n\n// NOTE(mroberts): This class wraps Chrome's RTCPeerConnection implementation.\n// It provides some functionality not currently present in Chrome, namely the\n// abilities to\n//\n// 1. Rollback, per the workaround suggested here:\n// https://bugs.chromium.org/p/webrtc/issues/detail?id=5738#c3\n//\n// 2. Listen for track events, per the adapter.js workaround.\n//\n// 3. Set iceTransportPolicy.\n//\nclass ChromeRTCPeerConnection extends EventTarget {\n constructor(configuration = {}, constraints) {\n super();\n\n const newConfiguration = Object.assign(configuration.iceTransportPolicy\n ? { iceTransports: configuration.iceTransportPolicy }\n : {}, configuration);\n\n interceptEvent(this, 'datachannel');\n interceptEvent(this, 'signalingstatechange');\n const sdpFormat = getSdpFormat(newConfiguration.sdpSemantics);\n const peerConnection = new RTCPeerConnection(newConfiguration, constraints);\n\n Object.defineProperties(this, {\n _appliedTracksToSSRCs: {\n value: new Map(),\n writable: true\n },\n _localStream: {\n value: new MediaStream()\n },\n _peerConnection: {\n value: peerConnection\n },\n _pendingLocalOffer: {\n value: null,\n writable: true\n },\n _pendingRemoteOffer: {\n value: null,\n writable: true\n },\n _rolledBackTracksToSSRCs: {\n value: new Map(),\n writable: true\n },\n _sdpFormat: {\n value: sdpFormat\n },\n _senders: {\n value: new Map()\n },\n _signalingStateLatch: {\n value: new Latch()\n },\n _tracksToSSRCs: {\n value: new Map(),\n writable: true\n }\n });\n\n peerConnection.addEventListener('datachannel', event => {\n shimDataChannel(event.channel);\n this.dispatchEvent(event);\n });\n\n peerConnection.addEventListener('signalingstatechange', (...args) => {\n if (peerConnection.signalingState === 'stable') {\n this._appliedTracksToSSRCs = new Map(this._tracksToSSRCs);\n }\n if (!this._pendingLocalOffer && !this._pendingRemoteOffer) {\n this.dispatchEvent(...args);\n }\n });\n\n peerConnection.ontrack = () => {\n // NOTE(mroberts): adapter.js's \"track\" event shim only kicks off if we set\n // the ontrack property of the RTCPeerConnection.\n };\n\n if (typeof peerConnection.addTrack !== 'function') {\n peerConnection.addStream(this._localStream);\n }\n proxyProperties(RTCPeerConnection.prototype, this, peerConnection);\n }\n\n get localDescription() {\n return this._pendingLocalOffer ? this._pendingLocalOffer : this._peerConnection.localDescription;\n }\n\n get remoteDescription() {\n return this._pendingRemoteOffer ? this._pendingRemoteOffer : this._peerConnection.remoteDescription;\n }\n\n get signalingState() {\n if (this._pendingLocalOffer) {\n return 'have-local-offer';\n } else if (this._pendingRemoteOffer) {\n return 'have-remote-offer';\n }\n return this._peerConnection.signalingState;\n }\n\n // NOTE(mmalavalli): This shim supports our limited case of adding\n // all MediaStreamTracks to one MediaStream. It has been implemented this\n // keeping in mind that this is to be maintained only until \"addTrack\" is\n // supported natively in Chrome.\n addTrack(track, ...rest) {\n if (typeof this._peerConnection.addTrack === 'function') {\n return this._peerConnection.addTrack(track, ...rest);\n }\n if (this._peerConnection.signalingState === 'closed') {\n throw new Error(`Cannot add MediaStreamTrack [${track.id}, \n ${track.kind}]: RTCPeerConnection is closed`);\n }\n\n let sender = this._senders.get(track);\n if (sender && sender.track) {\n throw new Error(`Cannot add MediaStreamTrack ['${track.id}, \n ${track.kind}]: RTCPeerConnection already has it`);\n }\n this._peerConnection.removeStream(this._localStream);\n this._localStream.addTrack(track);\n this._peerConnection.addStream(this._localStream);\n sender = new RTCRtpSenderShim(track);\n this._senders.set(track, sender);\n return sender;\n }\n\n // NOTE(mmalavalli): This shim supports our limited case of removing\n // MediaStreamTracks from one MediaStream. It has been implemented this\n // keeping in mind that this is to be maintained only until \"removeTrack\" is\n // supported natively in Chrome.\n removeTrack(sender) {\n if (this._peerConnection.signalingState === 'closed') {\n throw new Error('Cannot remove MediaStreamTrack: RTCPeerConnection is closed');\n }\n if (typeof this._peerConnection.addTrack === 'function') {\n try {\n return this._peerConnection.removeTrack(sender);\n } catch (e) {\n // NOTE(mhuynh): Do nothing. In Chrome, will throw if a 'sender was not\n // created by this peer connection'. This behavior does not seem to be\n // spec compliant, so a temporary shim is introduced. A bug has been filed,\n // and is tracked here:\n // https://bugs.chromium.org/p/chromium/issues/detail?id=860853\n }\n } else {\n const { track } = sender;\n if (!track) {\n return;\n }\n sender = this._senders.get(track);\n if (sender && sender.track) {\n sender.track = null;\n this._peerConnection.removeStream(this._localStream);\n this._localStream.removeTrack(track);\n this._peerConnection.addStream(this._localStream);\n }\n }\n }\n\n getSenders() {\n if (typeof this._peerConnection.addTrack === 'function') {\n return this._peerConnection.getSenders();\n }\n return Array.from(this._senders.values());\n }\n\n addIceCandidate(candidate, ...rest) {\n let promise;\n\n if (this.signalingState === 'have-remote-offer') {\n // NOTE(mroberts): Because the ChromeRTCPeerConnection simulates the\n // \"have-remote-offer\" signalingStates, we only want to invoke the true\n // addIceCandidates method when the remote description has been applied.\n promise = this._signalingStateLatch.when('low').then(() =>\n this._peerConnection.addIceCandidate(candidate));\n } else {\n promise = this._peerConnection.addIceCandidate(candidate);\n }\n\n return rest.length > 0\n ? legacyPromise(promise, ...rest)\n : promise;\n }\n\n // NOTE(mroberts): The WebRTC spec does not specify that close should throw an\n // Error; however, in Chrome it does. We workaround this by checking the\n // signalingState manually.\n close() {\n if (this.signalingState !== 'closed') {\n this._pendingLocalOffer = null;\n this._pendingRemoteOffer = null;\n this._peerConnection.close();\n }\n }\n\n // NOTE(mroberts): Because we workaround Chrome's lack of rollback support by\n // \"faking\" setRemoteDescription, we cannot create an answer until we actually\n // apply the remote description. This means, once you call createAnswer, you\n // can no longer rollback. This is acceptable for our use case because we will\n // apply the newly-created answer almost immediately; however, this may be\n // unacceptable for other use cases.\n createAnswer(...args) {\n let promise;\n\n if (this._pendingRemoteOffer) {\n promise = this._peerConnection.setRemoteDescription(this._pendingRemoteOffer).then(() => {\n // NOTE(mroberts): The signalingStates between the ChromeRTCPeerConnection\n // and the underlying RTCPeerConnection implementation have converged. We\n // can unblock any pending calls to addIceCandidate now.\n this._signalingStateLatch.lower();\n return this._peerConnection.createAnswer();\n }).then(answer => {\n this._pendingRemoteOffer = null;\n\n // NOTE(mmalavalli): If createAnswer() is called immediately after rolling back, then we no\n // longer need to retain the rolled back tracks to SSRCs Map.\n this._rolledBackTracksToSSRCs.clear();\n\n return new ChromeRTCSessionDescription({\n type: 'answer',\n sdp: updateTrackIdsToSSRCs(this._sdpFormat, this._tracksToSSRCs, answer.sdp)\n });\n }, error => {\n this._pendingRemoteOffer = null;\n throw error;\n });\n } else {\n promise = this._peerConnection.createAnswer().then(answer => {\n // NOTE(mmalavalli): If createAnswer() is called immediately after rolling back, then we no\n // longer need to retain the rolled back tracks to SSRCs Map.\n this._rolledBackTracksToSSRCs.clear();\n\n return new ChromeRTCSessionDescription({\n type: 'answer',\n sdp: updateTrackIdsToSSRCs(this._sdpFormat, this._tracksToSSRCs, answer.sdp)\n });\n });\n }\n\n return args.length > 1\n ? legacyPromise(promise, ...args)\n : promise;\n }\n\n createOffer(...args) {\n const [arg1, arg2, arg3] = args;\n const options = arg3 || arg1 || {};\n\n if (isIOSChrome()) {\n // NOTE (joma): From SafariRTCPeerConnection in order to support iOS Chrome.\n if (options.offerToReceiveVideo && !this._audioTransceiver && !(isUnifiedPlan && hasReceiversForTracksOfKind(this, 'audio'))) {\n delete options.offerToReceiveAudio;\n try {\n this._audioTransceiver = isUnifiedPlan\n ? this.addTransceiver('audio', { direction: 'recvonly' })\n : this.addTransceiver('audio');\n } catch (e) {\n return Promise.reject(e);\n }\n }\n\n if (options.offerToReceiveVideo && !this._videoTransceiver && !(isUnifiedPlan && hasReceiversForTracksOfKind(this, 'video'))) {\n delete options.offerToReceiveVideo;\n try {\n this._videoTransceiver = isUnifiedPlan\n ? this.addTransceiver('video', { direction: 'recvonly' })\n : this.addTransceiver('video');\n } catch (e) {\n return Promise.reject(e);\n }\n }\n }\n\n const promise = this._peerConnection.createOffer(options).then(offer => {\n // NOTE(mmalavalli): If createOffer() is called immediately after rolling back, then we no\n // longer need to retain the rolled back tracks to SSRCs Map.\n this._rolledBackTracksToSSRCs.clear();\n\n return new ChromeRTCSessionDescription({\n type: offer.type,\n sdp: updateTrackIdsToSSRCs(this._sdpFormat, this._tracksToSSRCs, offer.sdp)\n });\n });\n\n return args.length > 1\n ? legacyPromise(promise, arg1, arg2)\n : promise;\n }\n\n createDataChannel(label, dataChannelDict) {\n dataChannelDict = shimDataChannelInit(dataChannelDict);\n const dataChannel = this._peerConnection.createDataChannel(label, dataChannelDict);\n shimDataChannel(dataChannel);\n return dataChannel;\n }\n\n setLocalDescription(...args) {\n const [description, arg1, arg2] = args;\n\n // NOTE(mmalavalli): If setLocalDescription() is called immediately after rolling back,\n // then we need to restore the rolled back tracks to SSRCs Map.\n if (this._rolledBackTracksToSSRCs.size > 0) {\n this._tracksToSSRCs = new Map(this._rolledBackTracksToSSRCs);\n this._rolledBackTracksToSSRCs.clear();\n }\n\n const promise = setDescription(this, true, description);\n return args.length > 1\n ? legacyPromise(promise, arg1, arg2)\n : promise;\n }\n\n setRemoteDescription(...args) {\n const [description, arg1, arg2] = args;\n\n // NOTE(mmalavalli): If setRemoteDescription() is called immediately after rolling back,\n // then we no longer need to retain the rolled back tracks to SSRCs Map.\n this._rolledBackTracksToSSRCs.clear();\n\n const promise = setDescription(this, false, description);\n return args.length > 1\n ? legacyPromise(promise, arg1, arg2)\n : promise;\n }\n}\n\ndelegateMethods(\n RTCPeerConnection.prototype,\n ChromeRTCPeerConnection.prototype,\n '_peerConnection');\n\n// NOTE(mroberts): We workaround Chrome's lack of rollback support, per the\n// workaround suggested here: https://bugs.chromium.org/p/webrtc/issues/detail?id=5738#c3\n// Namely, we \"fake\" setting the local or remote description and instead buffer\n// it. If we receive or create an answer, then we will actually apply the\n// description. Until we receive or create an answer, we will be able to\n// \"rollback\" by simply discarding the buffer description.\nfunction setDescription(peerConnection, local, description) {\n function setPendingLocalOffer(offer) {\n if (local) {\n peerConnection._pendingLocalOffer = offer;\n } else {\n peerConnection._pendingRemoteOffer = offer;\n }\n }\n\n function clearPendingLocalOffer() {\n if (local) {\n peerConnection._pendingLocalOffer = null;\n } else {\n peerConnection._pendingRemoteOffer = null;\n }\n }\n\n const pendingLocalOffer = local ? peerConnection._pendingLocalOffer : peerConnection._pendingRemoteOffer;\n const pendingRemoteOffer = local ? peerConnection._pendingRemoteOffer : peerConnection._pendingLocalOffer;\n const intermediateState = local ? 'have-local-offer' : 'have-remote-offer';\n const setLocalDescription = local ? 'setLocalDescription' : 'setRemoteDescription';\n let promise;\n\n if (!local && pendingRemoteOffer && description.type === 'answer') {\n promise = setRemoteAnswer(peerConnection, description);\n } else if (description.type === 'offer') {\n if (peerConnection.signalingState !== intermediateState && peerConnection.signalingState !== 'stable') {\n // NOTE(mroberts): Error message copied from Firefox.\n return Promise.reject(new Error(`Cannot set ${local ? 'local' : 'remote'} offer in state ${peerConnection.signalingState}`));\n }\n\n // We need to save this local offer in case of a rollback. We also need to\n // check to see if the signalingState between the ChromeRTCPeerConnection\n // and the underlying RTCPeerConnection implementation are about to diverge.\n // If so, we need to ensure subsequent calls to addIceCandidate will block.\n if (!pendingLocalOffer && peerConnection._signalingStateLatch.state === 'low') {\n peerConnection._signalingStateLatch.raise();\n }\n const previousSignalingState = peerConnection.signalingState;\n setPendingLocalOffer(unwrap(description));\n promise = Promise.resolve();\n\n // Only dispatch a signalingstatechange event if we transitioned.\n if (peerConnection.signalingState !== previousSignalingState) {\n promise.then(() => peerConnection.dispatchEvent(new Event('signalingstatechange')));\n }\n\n } else if (description.type === 'rollback') {\n if (peerConnection.signalingState !== intermediateState) {\n // NOTE(mroberts): Error message copied from Firefox.\n promise = Promise.reject(new Error(`Cannot rollback ${local ? 'local' : 'remote'} description in ${peerConnection.signalingState}`));\n } else {\n // Reset the pending offer.\n clearPendingLocalOffer();\n\n // NOTE(mmalavalli): We store the rolled back tracks to SSRCs Map here in case\n // setLocalDescription() is called immediately after a rollback (without calling\n // createOffer() or createAnswer()), in which case this roll back is not due to a\n // glare scenario and this Map should be restored.\n peerConnection._rolledBackTracksToSSRCs = new Map(peerConnection._tracksToSSRCs);\n peerConnection._tracksToSSRCs = new Map(peerConnection._appliedTracksToSSRCs);\n\n promise = Promise.resolve();\n promise.then(() => peerConnection.dispatchEvent(new Event('signalingstatechange')));\n }\n }\n\n return promise || peerConnection._peerConnection[setLocalDescription](unwrap(description));\n}\n\nfunction setRemoteAnswer(peerConnection, answer) {\n // Apply the pending local offer.\n const pendingLocalOffer = peerConnection._pendingLocalOffer;\n return peerConnection._peerConnection.setLocalDescription(pendingLocalOffer).then(() => {\n peerConnection._pendingLocalOffer = null;\n return peerConnection.setRemoteDescription(answer);\n }).then(() => {\n // NOTE(mroberts): The signalingStates between the ChromeRTCPeerConnection\n // and the underlying RTCPeerConnection implementation have converged. We\n // can unblock any pending calls to addIceCandidate now.\n peerConnection._signalingStateLatch.lower();\n });\n}\n\n/**\n * Whether a ChromeRTCPeerConnection has any RTCRtpReceivers(s) for the given\n * MediaStreamTrack kind.\n * @param {ChromeRTCPeerConnection} peerConnection\n * @param {'audio' | 'video'} kind\n * @returns {boolean}\n */\nfunction hasReceiversForTracksOfKind(peerConnection, kind) {\n return !!peerConnection.getTransceivers().find(({ receiver = {} }) => {\n const { track = {} } = receiver;\n return track.kind === kind;\n });\n}\n\nfunction unwrap(description) {\n if (description instanceof ChromeRTCSessionDescription) {\n if (description._description) {\n return description._description;\n }\n }\n return new RTCSessionDescription(description);\n}\n\n/**\n * Check whether or not we need to apply our maxPacketLifeTime shim. We are\n * pretty conservative: we'll only apply it if the legacy maxRetransmitTime\n * property is available _and_ the standard maxPacketLifeTime property is _not_\n * available (the thinking being that Chrome will land the standards-compliant\n * property).\n * @returns {boolean}\n */\nfunction needsMaxPacketLifeTimeShim() {\n return 'maxRetransmitTime' in RTCDataChannel.prototype\n && !('maxPacketLifeTime' in RTCDataChannel.prototype);\n}\n\n/**\n * Shim an RTCDataChannelInit dictionary (if necessary). This function returns\n * a copy of the original RTCDataChannelInit.\n * @param {RTCDataChannelInit} dataChannelDict\n * @returns {RTCDataChannelInit}\n */\nfunction shimDataChannelInit(dataChannelDict) {\n dataChannelDict = Object.assign({}, dataChannelDict);\n if (needsMaxPacketLifeTimeShim() && 'maxPacketLifeTime' in dataChannelDict) {\n dataChannelDict.maxRetransmitTime = dataChannelDict.maxPacketLifeTime;\n }\n return dataChannelDict;\n}\n\n/**\n * Shim an RTCDataChannel (if necessary). This function mutates the\n * RTCDataChannel.\n * @param {RTCDataChannel} dataChannel\n * @returns {RTCDataChannel}\n */\nfunction shimDataChannel(dataChannel) {\n Object.defineProperty(dataChannel, 'maxRetransmits', {\n value: dataChannel.maxRetransmits === 65535\n ? null\n : dataChannel.maxRetransmits\n });\n if (needsMaxPacketLifeTimeShim()) {\n // NOTE(mroberts): We can rename `maxRetransmitTime` to `maxPacketLifeTime`.\n //\n // https://bugs.chromium.org/p/chromium/issues/detail?id=696681\n //\n Object.defineProperty(dataChannel, 'maxPacketLifeTime', {\n value: dataChannel.maxRetransmitTime === 65535\n ? null\n : dataChannel.maxRetransmitTime\n });\n }\n return dataChannel;\n}\n\n/**\n * Update the mappings from MediaStreamTrack IDs to SSRCs as indicated by both\n * the Map from MediaStreamTrack IDs to SSRCs and the SDP itself. This method\n * ensures that SSRCs never change once announced.\n * @param {'planb'|'unified'} sdpFormat\n * @param {Map>} tracksToSSRCs\n * @param {string} sdp - an SDP whose format is determined by `sdpSemantics`\n * @returns {string} updatedSdp - updated SDP\n */\nfunction updateTrackIdsToSSRCs(sdpFormat, tracksToSSRCs, sdp) {\n return sdpFormat === 'unified'\n ? updateUnifiedPlanTrackIdsToSSRCs(tracksToSSRCs, sdp)\n : updatePlanBTrackIdsToSSRCs(tracksToSSRCs, sdp);\n}\n\nmodule.exports = ChromeRTCPeerConnection;\n","/* globals RTCSessionDescription */\n'use strict';\n\nmodule.exports = RTCSessionDescription;\n","/* globals RTCPeerConnection */\n'use strict';\n\nconst EventTarget = require('../../eventtarget');\nconst FirefoxRTCSessionDescription = require('../rtcsessiondescription/firefox');\nconst { updateUnifiedPlanTrackIdsToSSRCs: updateTracksToSSRCs } = require('../util/sdp');\nconst { delegateMethods, interceptEvent, legacyPromise, proxyProperties } = require('../util');\n\n// NOTE(mroberts): This class wraps Firefox's RTCPeerConnection implementation.\n// It provides some functionality not currently present in Firefox, namely the\n// abilities to\n//\n// 1. Call setLocalDescription and setRemoteDescription with new offers in\n// signalingStates \"have-local-offer\" and \"have-remote-offer\",\n// respectively.\n//\n// 2. The ability to call createOffer in signalingState \"have-local-offer\".\n//\n// Both of these are implemented using rollbacks to workaround the following\n// bug:\n//\n// https://bugzilla.mozilla.org/show_bug.cgi?id=1072388\n//\n// We also provide a workaround for a bug where Firefox may change the\n// previously-negotiated DTLS role in an answer, which breaks Chrome:\n//\n// https://bugzilla.mozilla.org/show_bug.cgi?id=1240897\n//\nclass FirefoxRTCPeerConnection extends EventTarget {\n constructor(configuration) {\n super();\n\n interceptEvent(this, 'signalingstatechange');\n\n /* eslint new-cap:0 */\n const peerConnection = new RTCPeerConnection(configuration);\n\n Object.defineProperties(this, {\n _initiallyNegotiatedDtlsRole: {\n value: null,\n writable: true\n },\n _isClosed: {\n value: false,\n writable: true\n },\n _peerConnection: {\n value: peerConnection\n },\n _rollingBack: {\n value: false,\n writable: true\n },\n _tracksToSSRCs: {\n value: new Map()\n },\n\n // NOTE(mmalavalli): Firefox throws a TypeError when the PeerConnection's\n // prototype's \"peerIdentity\" property is accessed. In order to overcome\n // this, we ignore this property while delegating methods.\n // Reference: https://bugzilla.mozilla.org/show_bug.cgi?id=1363815\n peerIdentity: {\n enumerable: true,\n value: Promise.resolve({\n idp: '',\n name: ''\n })\n }\n });\n\n let previousSignalingState;\n\n peerConnection.addEventListener('signalingstatechange', (...args) => {\n if (!this._rollingBack && this.signalingState !== previousSignalingState) {\n previousSignalingState = this.signalingState;\n\n // NOTE(mmalavalli): In Firefox, 'signalingstatechange' event is\n // triggered synchronously in the same tick after\n // RTCPeerConnection#close() is called. So we mimic Chrome's behavior\n // by triggering 'signalingstatechange' on the next tick.\n if (this._isClosed) {\n setTimeout(() => this.dispatchEvent(...args));\n } else {\n this.dispatchEvent(...args);\n }\n }\n });\n\n proxyProperties(RTCPeerConnection.prototype, this, peerConnection);\n }\n\n get iceGatheringState() {\n return this._isClosed ? 'complete' : this._peerConnection.iceGatheringState;\n }\n\n get localDescription() {\n return overwriteWithInitiallyNegotiatedDtlsRole(this._peerConnection.localDescription, this._initiallyNegotiatedDtlsRole);\n }\n\n get signalingState() {\n return this._isClosed ? 'closed' : this._peerConnection.signalingState;\n }\n\n createAnswer(...args) {\n let promise;\n\n promise = this._peerConnection.createAnswer().then(answer => {\n saveInitiallyNegotiatedDtlsRole(this, answer);\n return overwriteWithInitiallyNegotiatedDtlsRole(answer, this._initiallyNegotiatedDtlsRole);\n });\n\n return typeof args[0] === 'function'\n ? legacyPromise(promise, ...args)\n : promise;\n }\n\n // NOTE(mroberts): The WebRTC spec allows you to call createOffer from any\n // signalingState other than \"closed\"; however, Firefox has not yet implemented\n // this (https://bugzilla.mozilla.org/show_bug.cgi?id=1072388). We workaround\n // this by rolling back if we are in state \"have-local-offer\" or\n // \"have-remote-offer\". This is acceptable for our use case because we will\n // apply the newly-created offer almost immediately; however, this may be\n // unacceptable for other use cases.\n createOffer(...args) {\n const [arg1, arg2, arg3] = args;\n const options = arg3 || arg1 || {};\n let promise;\n\n if (this.signalingState === 'have-local-offer' ||\n this.signalingState === 'have-remote-offer') {\n const local = this.signalingState === 'have-local-offer';\n promise = rollback(this, local, () => this.createOffer(options));\n } else {\n promise = this._peerConnection.createOffer(options);\n }\n\n promise = promise.then(offer => {\n return new FirefoxRTCSessionDescription({\n type: offer.type,\n sdp: updateTracksToSSRCs(this._tracksToSSRCs, offer.sdp)\n });\n });\n\n return args.length > 1\n ? legacyPromise(promise, arg1, arg2)\n : promise;\n }\n\n // NOTE(mroberts): While Firefox will reject the Promise returned by\n // setLocalDescription when called from signalingState \"have-local-offer\" with\n // an answer, it still updates the .localDescription property. We workaround\n // this by explicitly handling this case.\n setLocalDescription(...args) {\n const [description, ...rest] = args;\n let promise;\n\n if (description && description.type === 'answer' && this.signalingState === 'have-local-offer') {\n promise = Promise.reject(new Error('Cannot set local answer in state have-local-offer'));\n }\n\n if (promise) {\n return args.length > 1\n ? legacyPromise(promise, ...rest)\n : promise;\n }\n\n return this._peerConnection.setLocalDescription(...args);\n }\n\n // NOTE(mroberts): The WebRTC spec allows you to call setRemoteDescription with\n // an offer multiple times in signalingState \"have-remote-offer\"; however,\n // Firefox has not yet implemented this (https://bugzilla.mozilla.org/show_bug.cgi?id=1072388).\n // We workaround this by rolling back if we are in state \"have-remote-offer\".\n // This is acceptable for our use case; however, this may be unacceptable for\n // other use cases.\n //\n // While Firefox will reject the Promise returned by setRemoteDescription when\n // called from signalingState \"have-remote-offer\" with an answer, it sill\n // updates the .remoteDescription property. We workaround this by explicitly\n // handling this case.\n setRemoteDescription(...args) {\n const [description, ...rest] = args;\n\n let promise;\n\n if (description && this.signalingState === 'have-remote-offer') {\n if (description.type === 'answer') {\n promise = Promise.reject(new Error('Cannot set remote answer in state have-remote-offer'));\n } else if (description.type === 'offer') {\n promise = rollback(this, false, () => this._peerConnection.setRemoteDescription(description));\n }\n }\n\n if (!promise) {\n promise = this._peerConnection.setRemoteDescription(description);\n }\n\n promise = promise.then(() => saveInitiallyNegotiatedDtlsRole(this, description, true));\n\n return args.length > 1\n ? legacyPromise(promise, ...rest)\n : promise;\n }\n\n // NOTE(mroberts): The WebRTC spec specifies that the PeerConnection's internal\n // isClosed slot should immediately be set to true; however, in Firefox it\n // occurs in the next tick. We workaround this by tracking isClosed manually.\n close() {\n if (this.signalingState !== 'closed') {\n this._isClosed = true;\n this._peerConnection.close();\n }\n }\n}\n\ndelegateMethods(\n RTCPeerConnection.prototype,\n FirefoxRTCPeerConnection.prototype,\n '_peerConnection');\n\nfunction rollback(peerConnection, local, onceRolledBack) {\n const setLocalDescription = local ? 'setLocalDescription' : 'setRemoteDescription';\n peerConnection._rollingBack = true;\n return peerConnection._peerConnection[setLocalDescription](new FirefoxRTCSessionDescription({\n type: 'rollback'\n })).then(onceRolledBack).then(result => {\n peerConnection._rollingBack = false;\n return result;\n }, error => {\n peerConnection._rollingBack = false;\n throw error;\n });\n}\n\n/**\n * Extract the initially negotiated DTLS role out of an RTCSessionDescription's\n * sdp property and save it on the FirefoxRTCPeerConnection if and only if\n *\n * 1. A DTLS role was not already saved on the FirefoxRTCPeerConnection, and\n * 2. The description is an answer.\n *\n * @private\n * @param {FirefoxRTCPeerConnection} peerConnection\n * @param {RTCSessionDescription} description\n * @param {boolean} [remote=false] - if true, save the inverse of the DTLS role,\n * e.g. \"active\" instead of \"passive\" and vice versa\n * @returns {undefined}\n */\nfunction saveInitiallyNegotiatedDtlsRole(peerConnection, description, remote) {\n // NOTE(mroberts): JSEP specifies that offers always offer \"actpass\" as the\n // DTLS role. We need to inspect answers to figure out the negotiated DTLS\n // role.\n if (peerConnection._initiallyNegotiatedDtlsRole || description.type === 'offer') {\n return;\n }\n\n const match = description.sdp.match(/a=setup:([a-z]+)/);\n if (!match) {\n return;\n }\n\n const dtlsRole = match[1];\n peerConnection._initiallyNegotiatedDtlsRole = remote ? {\n active: 'passive',\n passive: 'active'\n }[dtlsRole] : dtlsRole;\n}\n\n/**\n * Overwrite the DTLS role in the sdp property of an RTCSessionDescription if\n * and only if\n *\n * 1. The description is an answer, and\n * 2. A DTLS role is provided.\n *\n * @private\n * @param {RTCSessionDescription} [description]\n * @param {string} [dtlsRole] - one of \"active\" or \"passive\"\n * @returns {?RTCSessionDescription} description\n */\nfunction overwriteWithInitiallyNegotiatedDtlsRole(description, dtlsRole) {\n if (description && description.type === 'answer' && dtlsRole) {\n return new FirefoxRTCSessionDescription({\n type: description.type,\n sdp: description.sdp.replace(/a=setup:[a-z]+/g, 'a=setup:' + dtlsRole)\n });\n }\n return description;\n}\n\nmodule.exports = FirefoxRTCPeerConnection;\n","/* globals RTCPeerConnection, RTCSessionDescription */\n'use strict';\n\nconst EventTarget = require('../../eventtarget');\nconst Latch = require('../util/latch');\nconst { getSdpFormat, updatePlanBTrackIdsToSSRCs, updateUnifiedPlanTrackIdsToSSRCs } = require('../util/sdp');\nconst { delegateMethods, interceptEvent, proxyProperties } = require('../util');\n\nconst isUnifiedPlan = getSdpFormat() === 'unified';\n\nconst updateTrackIdsToSSRCs = isUnifiedPlan\n ? updateUnifiedPlanTrackIdsToSSRCs\n : updatePlanBTrackIdsToSSRCs;\n\nclass SafariRTCPeerConnection extends EventTarget {\n constructor(configuration) {\n super();\n\n interceptEvent(this, 'datachannel');\n interceptEvent(this, 'iceconnectionstatechange');\n interceptEvent(this, 'signalingstatechange');\n interceptEvent(this, 'track');\n\n const peerConnection = new RTCPeerConnection(configuration);\n\n Object.defineProperties(this, {\n _appliedTracksToSSRCs: {\n value: new Map(),\n writable: true\n },\n _audioTransceiver: {\n value: null,\n writable: true\n },\n _isClosed: {\n value: false,\n writable: true\n },\n _peerConnection: {\n value: peerConnection\n },\n _pendingLocalOffer: {\n value: null,\n writable: true\n },\n _pendingRemoteOffer: {\n value: null,\n writable: true\n },\n _rolledBackTracksToSSRCs: {\n value: new Map(),\n writable: true\n },\n _signalingStateLatch: {\n value: new Latch()\n },\n _tracksToSSRCs: {\n value: new Map(),\n writable: true\n },\n _videoTransceiver: {\n value: null,\n writable: true\n }\n });\n\n peerConnection.addEventListener('datachannel', event => {\n shimDataChannel(event.channel);\n this.dispatchEvent(event);\n });\n\n peerConnection.addEventListener('iceconnectionstatechange', (...args) => {\n if (this._isClosed) {\n return;\n }\n this.dispatchEvent(...args);\n });\n\n peerConnection.addEventListener('signalingstatechange', (...args) => {\n if (this._isClosed) {\n return;\n }\n if (peerConnection.signalingState === 'stable') {\n this._appliedTracksToSSRCs = new Map(this._tracksToSSRCs);\n }\n if (!this._pendingLocalOffer && !this._pendingRemoteOffer) {\n this.dispatchEvent(...args);\n }\n });\n\n // NOTE(syerrapragada): This ensures that SafariRTCPeerConnection's \"remoteDescription\", when accessed\n // in an RTCTrackEvent listener, will point to the underlying RTCPeerConnection's\n // \"remoteDescription\". Before this fix, this was still pointing to \"_pendingRemoteOffer\"\n // even though a new remote RTCSessionDescription had already been applied.\n peerConnection.addEventListener('track', event => {\n this._pendingRemoteOffer = null;\n this.dispatchEvent(event);\n });\n\n proxyProperties(RTCPeerConnection.prototype, this, peerConnection);\n\n }\n\n get localDescription() {\n return this._pendingLocalOffer || this._peerConnection.localDescription;\n }\n\n get iceConnectionState() {\n return this._isClosed ? 'closed' : this._peerConnection.iceConnectionState;\n }\n\n get iceGatheringState() {\n return this._isClosed ? 'complete' : this._peerConnection.iceGatheringState;\n }\n\n get remoteDescription() {\n return this._pendingRemoteOffer || this._peerConnection.remoteDescription;\n }\n\n get signalingState() {\n if (this._isClosed) {\n return 'closed';\n } else if (this._pendingLocalOffer) {\n return 'have-local-offer';\n } else if (this._pendingRemoteOffer) {\n return 'have-remote-offer';\n }\n return this._peerConnection.signalingState;\n }\n\n addIceCandidate(candidate) {\n if (this.signalingState === 'have-remote-offer') {\n return this._signalingStateLatch.when('low').then(() => this._peerConnection.addIceCandidate(candidate));\n }\n return this._peerConnection.addIceCandidate(candidate);\n }\n\n createOffer(options) {\n options = Object.assign({}, options);\n\n // NOTE(mroberts): In general, this is not the way to do this; however, it's\n // good enough for our application.\n if (options.offerToReceiveVideo && !this._audioTransceiver && !(isUnifiedPlan && hasReceiversForTracksOfKind(this, 'audio'))) {\n delete options.offerToReceiveAudio;\n try {\n this._audioTransceiver = isUnifiedPlan\n ? this.addTransceiver('audio', { direction: 'recvonly' })\n : this.addTransceiver('audio');\n } catch (e) {\n return Promise.reject(e);\n }\n }\n\n if (options.offerToReceiveVideo && !this._videoTransceiver && !(isUnifiedPlan && hasReceiversForTracksOfKind(this, 'video'))) {\n delete options.offerToReceiveVideo;\n try {\n this._videoTransceiver = isUnifiedPlan\n ? this.addTransceiver('video', { direction: 'recvonly' })\n : this.addTransceiver('video');\n } catch (e) {\n return Promise.reject(e);\n }\n }\n\n return this._peerConnection.createOffer(options).then(offer => {\n // NOTE(mmalavalli): If createOffer() is called immediately after rolling back,\n // then we no longer need to retain the rolled back tracks to SSRCs Map.\n this._rolledBackTracksToSSRCs.clear();\n\n return new RTCSessionDescription({\n type: offer.type,\n sdp: updateTrackIdsToSSRCs(this._tracksToSSRCs, offer.sdp)\n });\n });\n }\n\n createAnswer(options) {\n if (this._pendingRemoteOffer) {\n return this._peerConnection.setRemoteDescription(this._pendingRemoteOffer).then(() => {\n this._signalingStateLatch.lower();\n return this._peerConnection.createAnswer();\n }).then(answer => {\n this._pendingRemoteOffer = null;\n\n // NOTE(mmalavalli): If createAnswer() is called immediately after rolling back, then we no\n // longer need to retain the rolled back tracks to SSRCs Map.\n this._rolledBackTracksToSSRCs.clear();\n\n return isUnifiedPlan ? new RTCSessionDescription({\n type: answer.type,\n sdp: updateTrackIdsToSSRCs(this._tracksToSSRCs, answer.sdp)\n }) : answer;\n }, error => {\n this._pendingRemoteOffer = null;\n throw error;\n });\n }\n\n return this._peerConnection.createAnswer(options).then(answer => {\n // NOTE(mmalavalli): If createAnswer() is called immediately after rolling back, then we no\n // longer need to retain the rolled back tracks to SSRCs Map.\n this._rolledBackTracksToSSRCs.clear();\n\n return isUnifiedPlan ? new RTCSessionDescription({\n type: answer.type,\n sdp: updateTrackIdsToSSRCs(this._tracksToSSRCs, answer.sdp)\n }) : answer;\n });\n }\n\n createDataChannel(label, dataChannelDict) {\n const dataChannel = this._peerConnection.createDataChannel(label, dataChannelDict);\n shimDataChannel(dataChannel);\n return dataChannel;\n }\n\n removeTrack(sender) {\n sender.replaceTrack(null);\n this._peerConnection.removeTrack(sender);\n }\n\n setLocalDescription(description) {\n // NOTE(mmalavalli): If setLocalDescription() is called immediately after rolling back,\n // then we need to restore the rolled back tracks to SSRCs Map.\n if (this._rolledBackTracksToSSRCs.size > 0) {\n this._tracksToSSRCs = new Map(this._rolledBackTracksToSSRCs);\n this._rolledBackTracksToSSRCs.clear();\n }\n return setDescription(this, true, description);\n }\n\n setRemoteDescription(description) {\n // NOTE(mmalavalli): If setRemoteDescription() is called immediately after rolling back,\n // then we no longer need to retain the rolled back tracks to SSRCs Map.\n this._rolledBackTracksToSSRCs.clear();\n return setDescription(this, false, description);\n }\n\n close() {\n if (this._isClosed) {\n return;\n }\n this._isClosed = true;\n this._peerConnection.close();\n setTimeout(() => {\n this.dispatchEvent(new Event('iceconnectionstatechange'));\n this.dispatchEvent(new Event('signalingstatechange'));\n });\n }\n}\n\ndelegateMethods(\n RTCPeerConnection.prototype,\n SafariRTCPeerConnection.prototype,\n '_peerConnection');\n\nfunction setDescription(peerConnection, local, description) {\n function setPendingLocalOffer(offer) {\n if (local) {\n peerConnection._pendingLocalOffer = offer;\n } else {\n peerConnection._pendingRemoteOffer = offer;\n }\n }\n\n function clearPendingLocalOffer() {\n if (local) {\n peerConnection._pendingLocalOffer = null;\n } else {\n peerConnection._pendingRemoteOffer = null;\n }\n }\n\n const pendingLocalOffer = local ? peerConnection._pendingLocalOffer : peerConnection._pendingRemoteOffer;\n const pendingRemoteOffer = local ? peerConnection._pendingRemoteOffer : peerConnection._pendingLocalOffer;\n const intermediateState = local ? 'have-local-offer' : 'have-remote-offer';\n const setLocalDescription = local ? 'setLocalDescription' : 'setRemoteDescription';\n\n if (!local && pendingRemoteOffer && description.type === 'answer') {\n return setRemoteAnswer(peerConnection, description);\n } else if (description.type === 'offer') {\n if (peerConnection.signalingState !== intermediateState && peerConnection.signalingState !== 'stable') {\n return Promise.reject(new Error(`Cannot set ${local ? 'local' : 'remote'}\n offer in state ${peerConnection.signalingState}`));\n }\n\n if (!pendingLocalOffer && peerConnection._signalingStateLatch.state === 'low') {\n peerConnection._signalingStateLatch.raise();\n }\n const previousSignalingState = peerConnection.signalingState;\n setPendingLocalOffer(description);\n\n // Only dispatch a signalingstatechange event if we transitioned.\n if (peerConnection.signalingState !== previousSignalingState) {\n return Promise.resolve().then(() => peerConnection.dispatchEvent(new Event('signalingstatechange')));\n }\n\n return Promise.resolve();\n } else if (description.type === 'rollback') {\n if (peerConnection.signalingState !== intermediateState) {\n return Promise.reject(new Error(`Cannot rollback \n ${local ? 'local' : 'remote'} description in ${peerConnection.signalingState}`));\n }\n clearPendingLocalOffer();\n\n // NOTE(mmalavalli): We store the rolled back tracks to SSRCs Map here in case\n // setLocalDescription() is called immediately aftera rollback (without calling\n // createOffer() or createAnswer()), in which case this roll back is not due to\n // a glare scenario and this Map should be restored.\n peerConnection._rolledBackTracksToSSRCs = new Map(peerConnection._tracksToSSRCs);\n peerConnection._tracksToSSRCs = new Map(peerConnection._appliedTracksToSSRCs);\n\n return Promise.resolve().then(() => peerConnection.dispatchEvent(new Event('signalingstatechange')));\n }\n\n return peerConnection._peerConnection[setLocalDescription](description);\n}\n\nfunction setRemoteAnswer(peerConnection, answer) {\n const pendingLocalOffer = peerConnection._pendingLocalOffer;\n return peerConnection._peerConnection.setLocalDescription(pendingLocalOffer).then(() => {\n peerConnection._pendingLocalOffer = null;\n return peerConnection.setRemoteDescription(answer);\n }).then(() => peerConnection._signalingStateLatch.lower());\n}\n\n/**\n * Whether a SafariRTCPeerConnection has any RTCRtpReceivers(s) for the given\n * MediaStreamTrack kind.\n * @param {SafariRTCPeerConnection} peerConnection\n * @param {'audio' | 'video'} kind\n * @returns {boolean}\n */\nfunction hasReceiversForTracksOfKind(peerConnection, kind) {\n return !!peerConnection.getTransceivers().find(({ receiver = {} }) => {\n const { track = {} } = receiver;\n return track.kind === kind;\n });\n}\n\n/**\n * Shim an RTCDataChannel. This function mutates the RTCDataChannel.\n * @param {RTCDataChannel} dataChannel\n * @returns {RTCDataChannel}\n */\nfunction shimDataChannel(dataChannel) {\n return Object.defineProperties(dataChannel, {\n maxPacketLifeTime: {\n value: dataChannel.maxPacketLifeTime === 65535\n ? null\n : dataChannel.maxPacketLifeTime\n },\n maxRetransmits: {\n value: dataChannel.maxRetransmits === 65535\n ? null\n : dataChannel.maxRetransmits\n }\n });\n}\n\nmodule.exports = SafariRTCPeerConnection;\n","'use strict';\n\nif (typeof RTCPeerConnection === 'function') {\n const { guessBrowser } = require('../util');\n switch (guessBrowser()) {\n case 'chrome':\n module.exports = require('./chrome');\n break;\n case 'firefox':\n module.exports = require('./firefox');\n break;\n case 'safari':\n module.exports = require('./safari');\n break;\n default:\n module.exports = RTCPeerConnection;\n break;\n }\n} else {\n module.exports = function RTCPeerConnection() {\n throw new Error('RTCPeerConnection is not supported');\n };\n}\n","/* globals RTCSessionDescription */\n'use strict';\n\nif (typeof RTCSessionDescription === 'function') {\n const { guessBrowser } = require('../util');\n switch (guessBrowser()) {\n case 'chrome':\n module.exports = require('./chrome');\n break;\n case 'firefox':\n module.exports = require('./firefox');\n break;\n default:\n module.exports = RTCSessionDescription;\n break;\n }\n} else {\n module.exports = function RTCSessionDescription() {\n throw new Error('RTCSessionDescription is not supported');\n };\n}\n","'use strict';\n\nconst WebRTC = {};\n\nObject.defineProperties(WebRTC, {\n getStats: {\n enumerable: true,\n value: require('./getstats')\n },\n getUserMedia: {\n enumerable: true,\n value: require('./getusermedia')\n },\n MediaStream: {\n enumerable: true,\n value: require('./mediastream')\n },\n MediaStreamTrack: {\n enumerable: true,\n value: require('./mediastreamtrack')\n },\n RTCIceCandidate: {\n enumerable: true,\n value: require('./rtcicecandidate')\n },\n RTCPeerConnection: {\n enumerable: true,\n value: require('./rtcpeerconnection')\n },\n RTCSessionDescription: {\n enumerable: true,\n value: require('./rtcsessiondescription')\n }\n});\n\nmodule.exports = WebRTC;\n","/**\n * Copyright (c) 2011-2022 Isaac Z. Schlueter\n * Licensed under the ISC License.\n *\n * Copied from https://github.com/isaacs/inherits (2.0.4)\n*/\n\nmodule.exports = function inherits(ctor, superCtor) {\n if (ctor && superCtor) {\n ctor.super_ = superCtor;\n if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n } else {\n // old school shim for old browsers\n class TempCtor {\n constructor() { }\n }\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n }\n};\n","/* globals chrome, navigator */\n'use strict';\n\n/**\n * Check whether the current browser is an Android device.\n * @returns {boolean}\n */\nfunction isAndroid() {\n return /Android/.test(navigator.userAgent);\n}\n\n/**\n * Detects whether or not a device is an Apple touch screen device.\n * @returns {boolean}\n */\nfunction hasTouchScreen() {\n return !!(navigator && navigator.maxTouchPoints && navigator.maxTouchPoints > 2);\n}\n\n/**\n * Detects whether or not a device is an iPad.\n * @returns {boolean}\n */\nfunction isIpad() {\n return hasTouchScreen() && window.screen.width >= 744 && (/Macintosh/i.test(navigator.userAgent)\n || /iPad/.test(navigator.userAgent)\n || /iPad/.test(navigator.platform));\n}\n\n/**\n * Detects whether or not a device is an iPhone.\n * @returns {boolean}\n */\nfunction isIphone() {\n return hasTouchScreen() && window.screen.width <= 476 && (/Macintosh/i.test(navigator.userAgent)\n || /iPhone/.test(navigator.userAgent)\n || /iPhone/.test(navigator.platform));\n}\n\n/**\n * Check whether the current device is an iOS device.\n * @returns {boolean}\n */\nfunction isIOS() {\n return isIpad() || isIphone();\n}\n\n/**\n * Check whether the current browser is a mobile browser\n * @returns {boolean}\n */\nfunction isMobile() {\n return /Mobi/.test(navigator.userAgent);\n}\n\n/**\n * Check whether the current browser is non-Chromium Edge.\n * @param {string} browser\n * @returns {boolean}\n */\nfunction isNonChromiumEdge(browser) {\n return browser === 'chrome' && /Edge/.test(navigator.userAgent) && (\n typeof chrome === 'undefined' || typeof chrome.runtime === 'undefined'\n );\n}\n\n/**\n * Get the name of the rebranded Chromium browser, if any. Re-branded Chrome's user\n * agent has the following format:\n * / () / () Chrome/ [Mobile] Safari/\n * @param browser\n * @returns {?string} Name of the rebranded Chrome browser, or null if the browser\n * is either not Chrome or vanilla Chrome.\n */\nfunction rebrandedChromeBrowser(browser) {\n // If the browser is not Chrome based, then it is not a rebranded Chrome browser.\n if (browser !== 'chrome') {\n return null;\n }\n\n // Latest desktop Brave browser has a \"brave\" property in navigator.\n if ('brave' in navigator) {\n return 'brave';\n }\n\n // Remove the \"(.+)\" entries from the user agent thereby retaining only the\n // [/] entries.\n const parenthesizedSubstrings = getParenthesizedSubstrings(navigator.userAgent);\n const nameAndVersions = parenthesizedSubstrings.reduce(\n (userAgent, substring) => userAgent.replace(substring, ''),\n navigator.userAgent\n );\n\n // Extract the potential browser s by ignoring the first two names, which\n // point to and .\n const matches = nameAndVersions.match(/[^\\s]+/g) || [];\n const [/* source */, /* engine */, ...browserNames] = matches.map(nameAndVersion => {\n return nameAndVersion.split('/')[0].toLowerCase();\n });\n\n // Extract the that is not expected to be present in the vanilla Chrome\n // browser, which indicates the rebranded name (ex: \"edg[e]\", \"electron\"). If null,\n // then this is a vanilla Chrome browser.\n return browserNames.find(name => {\n return !['chrome', 'mobile', 'safari'].includes(name);\n }) || null;\n}\n\n/**\n * Get the name of the mobile webkit based browser, if any.\n * @param browser\n * @returns {?string} Name of the mobile webkit based browser, or null if the browser\n * is either not webkit based or mobile safari.\n */\nfunction mobileWebKitBrowser(browser) {\n if (browser !== 'safari') {\n return null;\n }\n if ('brave' in navigator) {\n return 'brave';\n }\n\n return ['edge', 'edg'].find(name => {\n return navigator.userAgent.toLowerCase().includes(name);\n }) || null;\n}\n\n/**\n * Get the top level parenthesized substrings within a given string. Unmatched\n * parentheses are ignored.\n * Ex: \"abc) (def) gh(ij) (kl (mn)o) (pqr\" => [\"(def)\", \"(ij)\", \"(kl (mn)o)\"]\n * @param {string} string\n * @returns {string[]}\n */\nfunction getParenthesizedSubstrings(string) {\n const openParenthesisPositions = [];\n const substrings = [];\n for (let i = 0; i < string.length; i++) {\n if (string[i] === '(') {\n openParenthesisPositions.push(i);\n } else if (string[i] === ')' && openParenthesisPositions.length > 0) {\n const openParenthesisPosition = openParenthesisPositions.pop();\n if (openParenthesisPositions.length === 0) {\n substrings.push(string.substring(openParenthesisPosition, i + 1));\n }\n }\n }\n return substrings;\n}\n\nmodule.exports = {\n isAndroid,\n isIOS,\n isIpad,\n isIphone,\n isMobile,\n isNonChromiumEdge,\n mobileWebKitBrowser,\n rebrandedChromeBrowser\n};\n","'use strict';\n\n/**\n * Return a Promise that resolves after `timeout` milliseconds.\n * @param {?number} [timeout=0]\n * @returns {Promise}\n */\nfunction delay(timeout) {\n timeout = typeof timeout === 'number' ? timeout : 0;\n return new Promise(resolve => setTimeout(resolve, timeout));\n}\n\n/**\n * Attempt to detect silence. The Promise returned by this function returns\n * false as soon as audio is detected or true after `timeout` milliseconds.\n * @param {AudioContext} audioContext\n * @param {MediaStream} stream\n * @param {?number} [timeout=250]\n * @returns {Promise}\n */\nfunction detectSilence(audioContext, stream, timeout) {\n timeout = typeof timeout === 'number' ? timeout : 250;\n\n const source = audioContext.createMediaStreamSource(stream);\n const analyser = audioContext.createAnalyser();\n analyser.fftSize = 2048;\n source.connect(analyser);\n\n const samples = new Uint8Array(analyser.fftSize);\n\n let timeoutDidFire = false;\n setTimeout(() => { timeoutDidFire = true; }, timeout);\n\n /**\n * We can't use async/await yet, so I need to factor this out.\n * @returns {Promise}\n */\n function doDetectSilence() {\n if (timeoutDidFire) {\n return Promise.resolve(true);\n }\n analyser.getByteTimeDomainData(samples);\n // NOTE(mpatwardhan): An audio MediaStreamTrack can be silent either due to all samples\n // being equal to 128 or all samples being equal to 0.\n return samples.some(sample => sample !== 128 && sample !== 0)\n ? Promise.resolve(false)\n : delay().then(doDetectSilence);\n }\n\n return doDetectSilence().then(isSilent => {\n source.disconnect();\n return isSilent;\n }, error => {\n source.disconnect();\n throw error;\n });\n}\n\nmodule.exports = detectSilence;\n","/* globals webkitAudioContext, AudioContext */\n'use strict';\n\nconst NativeAudioContext = typeof AudioContext !== 'undefined'\n ? AudioContext\n : typeof webkitAudioContext !== 'undefined'\n ? webkitAudioContext\n : null;\n\n/**\n * @interface AudioContextFactoryOptions\n * @property {AudioContext} [AudioContext] - The AudioContext constructor\n */\n\n/**\n * {@link AudioContextFactory} ensures we construct at most one AudioContext\n * at a time, and that it is eventually closed when we no longer need it.\n * @property {AudioContextFactory} AudioContextFactory - The\n * {@link AudioContextFactory} constructor\n */\nclass AudioContextFactory {\n /**\n * @param {AudioContextFactoryOptions} [options]\n */\n constructor(options) {\n options = Object.assign({\n AudioContext: NativeAudioContext\n }, options);\n Object.defineProperties(this, {\n _AudioContext: {\n value: options.AudioContext\n },\n _audioContext: {\n value: null,\n writable: true\n },\n _holders: {\n value: new Set()\n },\n AudioContextFactory: {\n enumerable: true,\n value: AudioContextFactory\n }\n });\n }\n\n /**\n * Each call to {@link AudioContextFactory#getOrCreate} should be paired with a\n * call to {@link AudioContextFactory#release}. Calling this increments an\n * internal reference count.\n * @param {*} holder - The object to hold a reference to the AudioContext\n * @returns {?AudioContext}\n */\n getOrCreate(holder) {\n if (!this._holders.has(holder)) {\n this._holders.add(holder);\n if (this._AudioContext && !this._audioContext) {\n try {\n this._audioContext = new this._AudioContext();\n } catch (error) {\n // Do nothing;\n }\n }\n }\n return this._audioContext;\n }\n\n /**\n * Decrement the internal reference count. If it reaches zero, close and destroy\n * the AudioContext.\n * @param {*} holder - The object that held a reference to the AudioContext\n * @returns {void}\n */\n release(holder) {\n if (this._holders.has(holder)) {\n this._holders.delete(holder);\n if (!this._holders.size && this._audioContext) {\n this._audioContext.close();\n this._audioContext = null;\n }\n }\n }\n}\n\nmodule.exports = new AudioContextFactory();\n","'use strict';\n\nconst detectSilence = require('../webaudio/detectsilence');\n\nconst N_ATTEMPTS = 3;\nconst ATTEMPT_DURATION_MS = 250;\n\n/**\n * Detect whether the audio stream rendered by the given HTMLVideoElement is silent.\n * @param {HTMLAudioElement} el\n * @returns {Promise} true if silent, false if not.\n */\nfunction detectSilentAudio(el) {\n // NOTE(mmalavalli): We have to delay require-ing AudioContextFactory, because\n // it exports a default instance whose constructor calls Object.assign.\n const AudioContextFactory = require('../webaudio/audiocontext');\n const holder = {};\n const audioContext = AudioContextFactory.getOrCreate(holder);\n\n let attemptsLeft = N_ATTEMPTS;\n\n function doCheckSilence() {\n attemptsLeft--;\n return detectSilence(audioContext, el.srcObject, ATTEMPT_DURATION_MS).then(isSilent => {\n if (!isSilent) {\n return false;\n }\n if (attemptsLeft > 0) {\n return doCheckSilence();\n }\n return true;\n }).catch(() => {\n // NOTE(mmalavalli): If an error is thrown while detect silence, the audio\n // stream is assumed to be silent.\n return true;\n });\n }\n\n // Resolve the returned Promise with true if 3 consecutive attempts\n // to detect silent audio are successful.\n return doCheckSilence().finally(() => {\n AudioContextFactory.release(holder);\n });\n}\n\nmodule.exports = detectSilentAudio;\n","'use strict';\n\nconst { defer } = require('./');\n\n/**\n * This is a pair of Deferreds that are set whenever local media is muted and\n * resolved whenever local media is unmuted/ended and restarted if necessary.\n */\nclass LocalMediaRestartDeferreds {\n /**\n * Constructor.\n */\n constructor() {\n Object.defineProperties(this, {\n _audio: {\n value: defer(),\n writable: true\n },\n _video: {\n value: defer(),\n writable: true\n }\n });\n\n // Initially, resolve both the Deferreds.\n this._audio.resolve();\n this._video.resolve();\n }\n\n /**\n * Resolve the Deferred for audio or video.\n * @param {'audio'|'video'} kind\n */\n resolveDeferred(kind) {\n if (kind === 'audio') {\n this._audio.resolve();\n } else {\n this._video.resolve();\n }\n }\n\n /**\n * Start the Deferred for audio or video.\n * @param {'audio' | 'video'} kind\n */\n startDeferred(kind) {\n if (kind === 'audio') {\n this._audio = defer();\n } else {\n this._video = defer();\n }\n }\n\n /**\n * Wait until the Deferred for audio or video is resolved.\n * @param {'audio'|'video'} kind\n * @returns {Promise}\n */\n whenResolved(kind) {\n return kind === 'audio' ? this._audio.promise : this._video.promise;\n }\n}\n\nmodule.exports = new LocalMediaRestartDeferreds();\n","'use strict';\n\nconst { EventEmitter } = require('events');\n\nconst { hidePrivateAndCertainPublicPropertiesInClass } = require('./util');\n\nmodule.exports = hidePrivateAndCertainPublicPropertiesInClass(EventEmitter, ['domain']);\n","'use strict';\n\nconst EventEmitter = require('../../eventemitter');\nconst { buildLogLevels, valueToJSON } = require('../../util');\nconst DEFAULT_LOG_LEVEL = require('../../util/constants').DEFAULT_LOG_LEVEL;\nconst Log = require('../../util/log');\n\nlet nInstances = 0;\n\n/**\n * A {@link Track} represents a stream of audio, video, or data.\n * @extends EventEmitter\n * @property {Track.Kind} kind - The {@link Track}'s kind\n * @property {string} name - The {@link Track}'s name\n */\nclass Track extends EventEmitter {\n /**\n * Construct a {@link Track}.\n * @param {Track.ID} id - The {@link Track}'s ID\n * @param {Track.Kind} kind - The {@link Track}'s kind\n * @param {{ log: Log, name: ?string }} options\n */\n constructor(id, kind, options) {\n options = Object.assign({\n name: id,\n log: null,\n logLevel: DEFAULT_LOG_LEVEL\n }, options);\n\n super();\n\n const name = String(options.name);\n\n const logLevels = buildLogLevels(options.logLevel);\n const log = options.log\n ? options.log.createLog('media', this)\n : new Log('media', this, logLevels, options.loggerName);\n\n Object.defineProperties(this, {\n _instanceId: {\n value: ++nInstances\n },\n _log: {\n value: log\n },\n kind: {\n enumerable: true,\n value: kind\n },\n name: {\n enumerable: true,\n value: name\n }\n });\n }\n\n toJSON() {\n return valueToJSON(this);\n }\n}\n\n/**\n * The {@link Track} ID is a string identifier for the {@link Track}.\n * @typedef {string} Track.ID\n */\n\n/**\n * The {@link Track} kind is either \"audio\", \"video\", or \"data\".\n * @typedef {string} Track.Kind\n */\n\n/**\n * The {@link Track}'s priority can be \"low\", \"standard\", or \"high\".\n * @typedef {string} Track.Priority\n */\n\n/**\n * The {@link Track} SID is a unique string identifier for the {@link Track}\n * that is published to a {@link Room}.\n * @typedef {string} Track.SID\n */\n\n/**\n * A {@link DataTrack} is a {@link LocalDataTrack} or {@link RemoteDataTrack}.\n * @typedef {LocalDataTrack|RemoteDataTrack} DataTrack\n */\n\n/**\n * A {@link LocalTrack} is a {@link LocalAudioTrack}, {@link LocalVideoTrack},\n * or {@link LocalDataTrack}.\n * @typedef {LocalAudioTrack|LocalVideoTrack|LocalDataTrack} LocalTrack\n */\n\n/**\n * {@link LocalTrack} options\n * @typedef {object} LocalTrackOptions\n * @property {LogLevel|LogLevels} logLevel - Log level for 'media' modules\n * @property {string} [name] - The {@link LocalTrack}'s name; by default,\n * it is set to the {@link LocalTrack}'s ID.\n */\n\n/**\n * A {@link RemoteTrack} is a {@link RemoteAudioTrack},\n * {@link RemoteVideoTrack}, or {@link RemoteDataTrack}.\n * @typedef {RemoteAudioTrack|RemoteVideoTrack|RemoteDataTrack} RemoteTrack\n */\n\nmodule.exports = Track;\n","'use strict';\n\nconst { isIOS } = require('../../util/browserdetection');\nconst { MediaStream } = require('../../webrtc');\n\nconst { waitForEvent, waitForSometime } = require('../../util');\nconst localMediaRestartDeferreds = require('../../util/localmediarestartdeferreds');\nconst Track = require('./');\n\n/**\n * A {@link MediaTrack} represents audio or video that can be sent to or\n * received from a {@link Room}.\n * @extends Track\n * @property {Track.ID} id - This {@link Track}'s ID\n * @property {boolean} isStarted - Whether or not the {@link MediaTrack} has\n * started\n * @property {boolean} isEnabled - Whether or not the {@link MediaTrack} is\n * enabled (i.e., whether it is paused or muted)\n * @property {Track.Kind} kind - The kind of the underlying\n * MediaStreamTrack, \"audio\" or \"video\"\n * @property {MediaStreamTrack} mediaStreamTrack - The underlying\n * MediaStreamTrack\n * @emits MediaTrack#disabled\n * @emits MediaTrack#enabled\n * @emits MediaTrack#started\n */\nclass MediaTrack extends Track {\n /**\n * Construct a {@link MediaTrack}.\n * @param {MediaTrackTransceiver} mediaTrackTransceiver\n * @param {{log: Log}} options\n */\n constructor(mediaTrackTransceiver, options) {\n options = Object.assign({\n playPausedElementsIfNotBackgrounded: isIOS()\n && typeof document === 'object'\n && typeof document.addEventListener === 'function'\n && typeof document.visibilityState === 'string'\n }, options);\n\n super(mediaTrackTransceiver.id, mediaTrackTransceiver.kind, options);\n let isStarted = false;\n\n options = Object.assign({\n MediaStream\n }, options);\n\n /* istanbul ignore next */\n Object.defineProperties(this, {\n _attachments: {\n value: new Set()\n },\n _dummyEl: {\n value: null,\n writable: true\n },\n _elShims: {\n value: new WeakMap()\n },\n _isStarted: {\n get() {\n return isStarted;\n },\n set(_isStarted) {\n isStarted = _isStarted;\n }\n },\n _playPausedElementsIfNotBackgrounded: {\n value: options.playPausedElementsIfNotBackgrounded\n },\n _shouldShimAttachedElements: {\n value: options.workaroundWebKitBug212780\n || options.playPausedElementsIfNotBackgrounded\n },\n _unprocessedTrack: {\n value: null,\n writable: true\n },\n _MediaStream: {\n value: options.MediaStream\n },\n isStarted: {\n enumerable: true,\n get() {\n return isStarted;\n }\n },\n mediaStreamTrack: {\n enumerable: true,\n get() {\n return this._unprocessedTrack || mediaTrackTransceiver.track;\n }\n },\n processedTrack: {\n enumerable: true,\n value: null,\n writable: true\n }\n });\n\n this._initialize();\n }\n\n /**\n * @private\n */\n _start() {\n this._log.debug('Started');\n this._isStarted = true;\n if (this._dummyEl) {\n this._dummyEl.oncanplay = null;\n }\n // eslint-disable-next-line no-use-before-define\n this.emit('started', this);\n }\n\n /**\n * @private\n */\n _initialize() {\n const self = this;\n\n this._log.debug('Initializing');\n this._dummyEl = this._createElement();\n\n this.mediaStreamTrack.addEventListener('ended', function onended() {\n self._end();\n self.mediaStreamTrack.removeEventListener('ended', onended);\n });\n\n if (this._dummyEl) {\n this._dummyEl.muted = true;\n this._dummyEl.oncanplay = this._start.bind(this, this._dummyEl);\n\n // NOTE(csantos): We always want to attach the original mediaStreamTrack for dummyEl\n this._attach(this._dummyEl, this.mediaStreamTrack);\n\n this._attachments.delete(this._dummyEl);\n }\n }\n\n /**\n * @private\n */\n _end() {\n this._log.debug('Ended');\n if (this._dummyEl) {\n this._dummyEl.remove();\n this._dummyEl.srcObject = null;\n this._dummyEl.oncanplay = null;\n this._dummyEl = null;\n }\n }\n\n attach(el) {\n if (typeof el === 'string') {\n el = this._selectElement(el);\n } else if (!el) {\n el = this._createElement();\n }\n this._log.debug('Attempting to attach to element:', el);\n el = this._attach(el);\n\n if (this._shouldShimAttachedElements && !this._elShims.has(el)) {\n const onUnintentionallyPaused = this._playPausedElementsIfNotBackgrounded\n ? () => playIfPausedAndNotBackgrounded(el, this._log)\n : null;\n this._elShims.set(el, shimMediaElement(el, onUnintentionallyPaused));\n }\n return el;\n }\n\n /**\n * Attach the provided MediaStreamTrack to the media element.\n * @param el - The media element to attach to\n * @param mediaStreamTrack - The MediaStreamTrack to attach. If this is\n * not provided, it uses the processedTrack if it exists\n * or it defaults to the current mediaStreamTrack\n * @private\n */\n _attach(el, mediaStreamTrack = this.processedTrack || this.mediaStreamTrack) {\n let mediaStream = el.srcObject;\n if (!(mediaStream instanceof this._MediaStream)) {\n mediaStream = new this._MediaStream();\n }\n\n const getTracks = mediaStreamTrack.kind === 'audio'\n ? 'getAudioTracks'\n : 'getVideoTracks';\n\n mediaStream[getTracks]().forEach(track => {\n mediaStream.removeTrack(track);\n });\n mediaStream.addTrack(mediaStreamTrack);\n\n // NOTE(mpatwardhan): resetting `srcObject` here, causes flicker (JSDK-2641), but it lets us\n // to sidestep the a chrome bug: https://bugs.chromium.org/p/chromium/issues/detail?id=1052353\n //\n el.srcObject = mediaStream;\n el.autoplay = true;\n el.playsInline = true;\n\n if (!this._attachments.has(el)) {\n this._attachments.add(el);\n }\n\n return el;\n }\n\n /**\n * @private\n */\n _selectElement(selector) {\n const el = document.querySelector(selector);\n\n if (!el) {\n throw new Error(`Selector matched no element: ${selector}`);\n }\n\n return el;\n }\n\n /**\n * @private\n */\n _updateElementsMediaStreamTrack() {\n this._log.debug('Reattaching all elements to update mediaStreamTrack');\n this._getAllAttachedElements().forEach(el => this._attach(el));\n }\n\n /**\n * @private\n */\n _createElement() {\n return typeof document !== 'undefined'\n ? document.createElement(this.kind)\n : null;\n }\n\n detach(el) {\n let els;\n\n if (typeof el === 'string') {\n els = [this._selectElement(el)];\n } else if (!el) {\n els = this._getAllAttachedElements();\n } else {\n els = [el];\n }\n\n this._log.debug('Attempting to detach from elements:', els);\n this._detachElements(els);\n return el ? els[0] : els;\n }\n\n /**\n * @private\n */\n _detachElements(elements) {\n return elements.map(this._detachElement.bind(this));\n }\n\n /**\n * @private\n */\n _detachElement(el) {\n if (!this._attachments.has(el)) {\n return el;\n }\n const mediaStream = el.srcObject;\n if (mediaStream instanceof this._MediaStream) {\n mediaStream.removeTrack(this.processedTrack || this.mediaStreamTrack);\n }\n this._attachments.delete(el);\n\n if (this._shouldShimAttachedElements && this._elShims.has(el)) {\n const shim = this._elShims.get(el);\n shim.unShim();\n this._elShims.delete(el);\n }\n\n return el;\n }\n\n /**\n * @private\n */\n _getAllAttachedElements() {\n const els = [];\n\n this._attachments.forEach(el => {\n els.push(el);\n });\n\n return els;\n }\n}\n\n/**\n * Play an HTMLMediaElement if it is paused and not backgrounded.\n * @private\n * @param {HTMLMediaElement} el\n * @param {Log} log\n * @returns {void}\n */\nfunction playIfPausedAndNotBackgrounded(el, log) {\n const tag = el.tagName.toLowerCase();\n log.warn('Unintentionally paused:', el);\n\n // NOTE(mmalavalli): When the element is unintentionally paused, we wait one\n // second for the \"onvisibilitychange\" event on the HTMLDocument to see if the\n // app will be backgrounded. If not, then the element can be safely played.\n Promise.race([\n waitForEvent(document, 'visibilitychange'),\n waitForSometime(1000)\n ]).then(() => {\n if (document.visibilityState === 'visible') {\n // NOTE(mmalavalli): We play the inadvertently paused elements only after\n // the LocalAudioTrack is unmuted to work around WebKit Bug 213853.\n //\n // Bug: https://bugs.webkit.org/show_bug.cgi?id=213853\n //\n localMediaRestartDeferreds.whenResolved('audio').then(() => {\n log.info(`Playing unintentionally paused <${tag}> element`);\n log.debug('Element:', el);\n return el.play();\n }).then(() => {\n log.info(`Successfully played unintentionally paused <${tag}> element`);\n log.debug('Element:', el);\n }).catch(error => {\n log.warn(`Error while playing unintentionally paused <${tag}> element:`, { error, el });\n });\n }\n });\n}\n\n/**\n * Shim the pause() and play() methods of the given HTMLMediaElement so that\n * we can detect if it was paused unintentionally.\n * @param {HTMLMediaElement} el\n * @param {?function} [onUnintentionallyPaused=null]\n * @returns {{pausedIntentionally: function, unShim: function}}\n */\nfunction shimMediaElement(el, onUnintentionallyPaused = null) {\n const origPause = el.pause;\n const origPlay = el.play;\n\n let pausedIntentionally = false;\n\n el.pause = () => {\n pausedIntentionally = true;\n return origPause.call(el);\n };\n\n el.play = () => {\n pausedIntentionally = false;\n return origPlay.call(el);\n };\n\n const onPause = onUnintentionallyPaused ? () => {\n if (!pausedIntentionally) {\n onUnintentionallyPaused();\n }\n } : null;\n\n if (onPause) {\n el.addEventListener('pause', onPause);\n }\n\n return {\n pausedIntentionally() {\n return pausedIntentionally;\n },\n unShim() {\n el.pause = origPause;\n el.play = origPlay;\n if (onPause) {\n el.removeEventListener('pause', onPause);\n }\n }\n };\n}\n\nmodule.exports = MediaTrack;\n","'use strict';\n\nconst MediaTrack = require('./mediatrack');\n\n/**\n * An {@link AudioTrack} is a {@link Track} representing audio.\n * @extends Track\n * @property {boolean} isStarted - Whether or not the {@link AudioTrack} has\n * started; if the {@link AudioTrack} started, there is enough audio data to\n * begin playback\n * @property {boolean} isEnabled - Whether or not the {@link AudioTrack} is\n * enabled; if the {@link AudioTrack} is not enabled, it is \"muted\"\n * @property {Track.Kind} kind - \"audio\"\n * @property {MediaStreamTrack} mediaStreamTrack - An audio MediaStreamTrack\n * @property {?MediaStreamTrack} processedTrack - The source of processed audio samples.\n * It is always null as audio processing is not currently supported.\n * @emits AudioTrack#disabled\n * @emits AudioTrack#enabled\n * @emits AudioTrack#started\n */\nclass AudioTrack extends MediaTrack {\n /**\n * Construct an {@link AudioTrack}.\n * @param {MediaTrackTransceiver} mediaTrackTransceiver\n * @param {{log: Log}} options\n */\n constructor(mediaTrackTransceiver, options) {\n super(mediaTrackTransceiver, options);\n }\n\n /**\n * Create an HTMLAudioElement and attach the {@link AudioTrack} to it.\n *\n * The HTMLAudioElement's srcObject will be set to a new\n * MediaStream containing the {@link AudioTrack}'s MediaStreamTrack.\n *\n * @returns {HTMLAudioElement} audioElement\n * @example\n * const Video = require('twilio-video');\n *\n * Video.createLocalAudioTrack().then(function(audioTrack) {\n * const audioElement = audioTrack.attach();\n * document.body.appendChild(audioElement);\n * });\n *//**\n * Attach the {@link AudioTrack} to an existing HTMLMediaElement. The\n * HTMLMediaElement could be an HTMLAudioElement or an HTMLVideoElement.\n *\n * If the HTMLMediaElement's srcObject is not set to a MediaStream,\n * this method sets it to a new MediaStream containing the {@link AudioTrack}'s\n * MediaStreamTrack; otherwise, it adds the {@link MediaTrack}'s\n * MediaStreamTrack to the existing MediaStream. Finally, if there are any other\n * MediaStreamTracks of the same kind on the MediaStream, this method removes\n * them.\n *\n * @param {HTMLMediaElement} mediaElement - The HTMLMediaElement to attach to\n * @returns {HTMLMediaElement} mediaElement\n * @example\n * const Video = require('twilio-video');\n *\n * const videoElement = document.createElement('video');\n * document.body.appendChild(videoElement);\n *\n * Video.createLocalAudioTrack().then(function(audioTrack) {\n * audioTrack.attach(videoElement);\n * });\n *//**\n * Attach the {@link AudioTrack} to an HTMLMediaElement selected by\n * document.querySelector. The HTMLMediaElement could be an\n * HTMLAudioElement or an HTMLVideoElement.\n *\n * If the HTMLMediaElement's srcObject is not set to a MediaStream,\n * this method sets it to a new MediaStream containing the {@link AudioTrack}'s\n * MediaStreamTrack; otherwise, it adds the {@link AudioTrack}'s\n * MediaStreamTrack to the existing MediaStream. Finally, if there are any other\n * MediaStreamTracks of the same kind on the MediaStream, this method removes\n * them.\n *\n * @param {string} selector - A query selector for the HTMLMediaElement to\n * attach to\n * @returns {HTMLMediaElement} mediaElement\n * @example\n * const Video = require('twilio-video');\n *\n * const videoElement = document.createElement('video');\n * videoElement.id = 'my-video-element';\n * document.body.appendChild(videoElement);\n *\n * Video.createLocalAudioTrack().then(function(track) {\n * track.attach('#my-video-element');\n * });\n */\n attach() {\n return super.attach.apply(this, arguments);\n }\n\n /**\n * Detach the {@link AudioTrack} from all previously attached HTMLMediaElements.\n * @returns {Array} mediaElements\n * @example\n * const mediaElements = audioTrack.detach();\n * mediaElements.forEach(mediaElement => mediaElement.remove());\n *//**\n * Detach the {@link AudioTrack} from a previously attached HTMLMediaElement.\n * @param {HTMLMediaElement} mediaElement - One of the HTMLMediaElements to\n * which the {@link AudioTrack} is attached\n * @returns {HTMLMediaElement} mediaElement\n * @example\n * const videoElement = document.getElementById('my-video-element');\n * audioTrack.detach(videoElement).remove();\n *//**\n * Detach the {@link AudioTrack} from a previously attached HTMLMediaElement\n * specified by document.querySelector.\n * @param {string} selector - The query selector of HTMLMediaElement to which\n * the {@link AudioTrack} is attached\n * @returns {HTMLMediaElement} mediaElement\n * @example\n * audioTrack.detach('#my-video-element').remove();\n */\n detach() {\n return super.detach.apply(this, arguments);\n }\n}\n\n/**\n * The {@link AudioTrack} was disabled, i.e. \"muted\".\n * @param {AudioTrack} track - The {@link AudioTrack} that was disabled\n * @event AudioTrack#disabled\n */\n\n/**\n * The {@link AudioTrack} was enabled, i.e. \"unmuted\".\n * @param {AudioTrack} track - The {@link AudioTrack} that was enabled\n * @event AudioTrack#enabled\n */\n\n/**\n * The {@link AudioTrack} started. This means there is enough audio data to\n * begin playback.\n * @param {AudioTrack} track - The {@link AudioTrack} that started\n * @event AudioTrack#started\n */\n\nmodule.exports = AudioTrack;\n","'use strict';\n\n// Cached copy of the used to check silent video frames.\nlet canvas = null;\n\nconst N_SAMPLES = 3;\nconst SAMPLE_HEIGHT = 50;\nconst SAMPLE_INTERVAL_MS = 250;\nconst SAMPLE_WIDTH = 50;\n\n/**\n * Check whether the current video frame is silent by selecting a 50x50\n * sample and calculating the max value of the pixel data. If it is 0, then\n * the frame is considered to be silent.\n * @private\n * @param {HTMLVideoElement} el\n * @returns {boolean} true if silent, false if not\n */\nfunction checkSilence(el) {\n try {\n const context = canvas.getContext('2d');\n context.drawImage(el, 0, 0, SAMPLE_WIDTH, SAMPLE_HEIGHT);\n const frame = context.getImageData(0, 0, SAMPLE_WIDTH, SAMPLE_HEIGHT);\n const frameDataWithoutAlpha = frame.data.filter((item, i) => (i + 1) % 4);\n const max = Math.max.apply(Math, frameDataWithoutAlpha);\n return max === 0;\n } catch (ex) {\n // eslint-disable-next-line no-console\n console.log('Error checking silence: ', ex);\n return false;\n }\n\n}\n\n/**\n * Detect whether the video stream rendered by the given HTMLVideoElement is silent.\n * @param {HTMLVideoElement} el\n * @returns {Promise} true if silent, false if not.\n */\nfunction detectSilentVideo(el) {\n // Create the canvas when detectSilentVideo() is called for the\n // first time.\n canvas = canvas || document.createElement('canvas');\n\n // Resolve the returned Promise with true if 3 consecutive sample\n // frames from the video being played by the HTMLVideoElement are\n // silent.\n return new Promise(resolve => {\n let samplesLeft = N_SAMPLES;\n setTimeout(function doCheckSilence() {\n samplesLeft--;\n if (!checkSilence(el)) {\n return resolve(false);\n }\n if (samplesLeft > 0) {\n return setTimeout(doCheckSilence, SAMPLE_INTERVAL_MS);\n }\n return resolve(true);\n }, SAMPLE_INTERVAL_MS);\n });\n}\n\nmodule.exports = detectSilentVideo;\n","'use strict';\n\n/**\n * The {@link DocumentVisibilityMonitor} monitors the visibility state of the DOM\n * and executes the attached listeners in phase order when the DOM is visible.\n */\nclass DocumentVisibilityMonitor {\n /**\n * Constructor.\n * @param {number} [nPhases=1] - the number of phases\n */\n constructor(nPhases = 1) {\n Object.defineProperties(this, {\n _listeners: {\n value: []\n },\n _onVisibilityChange: {\n value: () => {\n this._emitVisible(document.visibilityState === 'visible');\n }\n }\n });\n\n for (let i = 0; i < nPhases; i++) {\n this._listeners.push([]);\n }\n }\n\n\n /**\n * clears the state.\n */\n clear() {\n const nPhases = this._listeners.length;\n for (let i = 0; i < nPhases; i++) {\n this._listeners[i] = [];\n }\n }\n\n _listenerCount() {\n return this._listeners.reduce((count, phaseListeners) => count + phaseListeners.length, 0);\n }\n\n /**\n * Call all the listeners. Makes sure that all listeners for a given phase\n * are executed before calling the listeners of the next phase.\n * @private\n */\n _emitVisible(isVisible) {\n let promise = Promise.resolve();\n for (let phase = 1; phase <= this._listeners.length; phase++) {\n promise = promise.then(() => this._emitVisiblePhase(phase, isVisible));\n }\n return promise;\n }\n\n /**\n * Call all the listeners for a given phase.\n * @private\n */\n _emitVisiblePhase(phase, isVisible) {\n const phaseListeners = this._listeners[phase - 1];\n return Promise.all(phaseListeners.map(listener => {\n const ret = listener(isVisible);\n return ret instanceof Promise ? ret : Promise.resolve(ret);\n }));\n }\n\n /**\n * Start listening to the DOM visibility state change.\n * @private\n */\n _start() {\n document.addEventListener('visibilitychange', this._onVisibilityChange);\n }\n\n /**\n * Stop listening to the DOM visibility state change.\n * @private\n */\n _stop() {\n document.removeEventListener('visibilitychange', this._onVisibilityChange);\n }\n\n /**\n * Listen for the DOM visibility changes at the given phase.\n * @param {number} phase\n * @param {function} listener\n * @returns {this}\n */\n onVisibilityChange(phase, listener) {\n if (typeof phase !== 'number' || phase <= 0 || phase > this._listeners.length) {\n throw new Error('invalid phase: ', phase);\n }\n const phaseListeners = this._listeners[phase - 1];\n phaseListeners.push(listener);\n if (this._listenerCount() === 1) {\n this._start();\n }\n return this;\n }\n\n /**\n * Stop listening for the DOM visibility change at the given phase.\n * @param {number} phase\n * @param {function} listener\n * @returns {this}\n */\n offVisibilityChange(phase, listener) {\n if (typeof phase !== 'number' || phase <= 0 || phase > this._listeners.length) {\n throw new Error('invalid phase: ', phase);\n }\n\n const phaseListeners = this._listeners[phase - 1];\n const index = phaseListeners.indexOf(listener);\n if (index !== -1) {\n phaseListeners.splice(index, 1);\n if (this._listenerCount() === 0) {\n this._stop();\n }\n }\n return this;\n }\n}\n\nmodule.exports = new DocumentVisibilityMonitor(2);\n","'use strict';\n\nconst detectSilence = require('./detectsilence');\n\n/**\n * This function attempts to workaround WebKit Bug 180748. It does so by\n *\n * 1. Calling `getUserMedia`, and\n * 2. Checking to see if the resulting MediaStream is silent.\n * 3. If so, repeat Step 1; otherwise, return the MediaStream.\n *\n * The function only repeats up to `n` times, and it only waits `timeout`\n * milliseconds when detecting silence. Assuming `getUserMedia` is\n * instantaneous, in the best case, this function returns a Promise that\n * resolves immediately; in the worst case, this function returns a Promise that\n * resolves in `n` * `timeout` milliseconds.\n *\n * @param {Log} log\n * @param {function(MediaStreamConstraints): Promise} getUserMedia\n * @param {MediaStreamConstraints} constraints\n * @param {number} [n=3]\n * @param {number} [timeout=250]\n * @returns Promise\n */\nfunction workaround(log, getUserMedia, constraints, n, timeout) {\n n = typeof n === 'number' ? n : 3;\n let retry = 0;\n\n // NOTE(mroberts): We have to delay require-ing AudioContextFactory, because\n // it exports a default instance whose constructor calls Object.assign.\n const AudioContextFactory = require('./audiocontext');\n const holder = {};\n const audioContext = AudioContextFactory.getOrCreate(holder);\n\n /**\n * We can't use async/await yet, so I need to factor this out.\n * @returns {Promise}\n */\n function doWorkaround() {\n return getUserMedia(constraints).then(stream => {\n const isSilentPromise = constraints.audio\n ? detectSilence(audioContext, stream, timeout).catch(err => {\n log.warn('Encountered an error while detecting silence', err);\n return true;\n })\n : Promise.resolve(false);\n return isSilentPromise.then(isSilent => {\n if (!isSilent) {\n log.info('Got a non-silent audio MediaStreamTrack; returning it.');\n return stream;\n } else if (n <= 0) {\n log.warn('Got a silent audio MediaStreamTrack. Normally we would try \\\nto get a new one, but we\\'ve run out of retries; returning it anyway.');\n return stream;\n }\n log.warn(`Got a silent audio MediaStreamTrack. Stopping all \\\nMediaStreamTracks and calling getUserMedia again. This is retry \\\n#${++retry}.`);\n stream.getTracks().forEach(track => track.stop());\n n--;\n return doWorkaround();\n });\n });\n }\n\n return doWorkaround().then(stream => {\n AudioContextFactory.release(holder);\n return stream;\n }, error => {\n AudioContextFactory.release(holder);\n throw error;\n });\n}\n\nmodule.exports = workaround;\n","'use strict';\n\nconst EventEmitter = require('events').EventEmitter;\n\n/**\n * A {@link QueueingEventEmitter} can queue events until a listener has been\n * added.\n * @extends EventEmitter\n */\nclass QueueingEventEmitter extends EventEmitter {\n /**\n * Construct a {@link QueueingEventEmitter}\n */\n constructor() {\n super();\n Object.defineProperties(this, {\n _queuedEvents: {\n value: new Map()\n }\n });\n }\n\n /**\n * Emit any queued events.\n * @returns {boolean} true if every event had listeners, false otherwise\n *//**\n * Emit any queued events matching the event name.\n * @param {string} event\n * @returns {boolean} true if every event had listeners, false otherwise\n */\n dequeue(event) {\n let result = true;\n if (!event) {\n this._queuedEvents.forEach(function(_, queuedEvent) {\n result = this.dequeue(queuedEvent) && result;\n }, this);\n return result;\n }\n const queue = this._queuedEvents.get(event) || [];\n this._queuedEvents.delete(event);\n return queue.reduce((result, args) => this.emit(...[event].concat(args)) && result, result);\n }\n\n /**\n * If the event has listeners, emit the event; otherwise, queue the event.\n * @param {string} event\n * @param {...*} args\n * @returns {boolean} true if the event had listeners, false if the event was queued\n */\n queue() {\n const args = [].slice.call(arguments);\n if (this.emit(...args)) {\n return true;\n }\n const event = args[0];\n if (!this._queuedEvents.has(event)) {\n this._queuedEvents.set(event, []);\n }\n this._queuedEvents.get(event).push(args.slice(1));\n return false;\n }\n}\n\nmodule.exports = QueueingEventEmitter;\n","'use strict';\n\nconst QueueingEventEmitter = require('./queueingeventemitter');\n\n/**\n * A {@link TrackTransceiver} represents either one or more local RTCRtpSenders\n * or RTCDataChannels, or a single RTCRtpReceiver or remote RTCDataChannel.\n * @extends QueueingEventEmitter\n * @property {Track.ID} id\n * @property {Track.kind} kind\n */\nclass TrackTransceiver extends QueueingEventEmitter {\n /**\n * Construct a {@link TrackTransceiver}.\n * @param {Track.ID} id\n * @param {Track.kind} kind\n */\n constructor(id, kind) {\n super();\n Object.defineProperties(this, {\n id: {\n enumerable: true,\n value: id\n },\n kind: {\n enumerable: true,\n value: kind\n }\n });\n }\n\n /**\n * Stop the {@link TrackTransceiver}.\n * #emits TrackTransceiver#stopped\n * @returns {void}\n */\n stop() {\n this.emit('stopped');\n }\n}\n\n/**\n * The {@link TrackTransceiver} was stopped.\n * @event TrackTransceiver#stopped\n */\n\nmodule.exports = TrackTransceiver;\n","'use strict';\n\nconst TrackTransceiver = require('../../transceiver');\n\n/**\n * A {@link MediaTrackTransceiver} represents either one or more local\n * RTCRtpSenders, or a single RTCRtpReceiver.\n * @extends TrackTransceiver\n * @property {MediaStreamTrack} track\n */\nclass MediaTrackTransceiver extends TrackTransceiver {\n /**\n * Construct a {@link MediaTrackTransceiver}.\n * @param {Track.ID} id - The MediaStreamTrack ID signaled through RSP/SDP\n * @param {MediaStreamTrack} mediaStreamTrack\n */\n constructor(id, mediaStreamTrack) {\n super(id, mediaStreamTrack.kind);\n Object.defineProperties(this, {\n _track: {\n value: mediaStreamTrack,\n writable: true\n },\n enabled: {\n enumerable: true,\n get() {\n return this._track.enabled;\n }\n },\n readyState: {\n enumerable: true,\n get() {\n return this._track.readyState;\n }\n },\n track: {\n enumerable: true,\n get() {\n return this._track;\n }\n }\n });\n }\n\n stop() {\n this.track.stop();\n super.stop();\n }\n}\n\nmodule.exports = MediaTrackTransceiver;\n","'use strict';\n\nconst MediaTrackTransceiver = require('./transceiver');\n\n/**\n * A {@link MediaTrackSender} represents one or more local RTCRtpSenders.\n * @extends MediaTrackTransceiver\n * @emits MediaTrackSender#replaced\n */\nclass MediaTrackSender extends MediaTrackTransceiver {\n /**\n * Construct a {@link MediaTrackSender}.\n * @param {MediaStreamTrack} mediaStreamTrack\n */\n constructor(mediaStreamTrack) {\n super(mediaStreamTrack.id, mediaStreamTrack);\n Object.defineProperties(this, {\n _clones: {\n value: new Set()\n },\n _eventsToReemitters: {\n value: new Map([\n ['mute', () => this.queue('muted')],\n ['unmute', () => this.queue('unmuted')]\n ])\n },\n _senders: {\n value: new Set()\n },\n _senderToPublisherHintCallbacks: {\n value: new Map()\n },\n isPublishing: {\n enumerable: true,\n get() {\n return !!this._clones.size;\n }\n },\n muted: {\n enumerable: true,\n get() {\n return this._track.muted;\n }\n }\n });\n\n this._reemitMediaStreamTrackEvents();\n }\n\n /**\n * @private\n */\n _reemitMediaStreamTrackEvents(mediaStreamTrack = this._track) {\n const { _eventsToReemitters: eventsToReemitters, _track: track } = this;\n eventsToReemitters.forEach((reemitter, event) => mediaStreamTrack.addEventListener(event, reemitter));\n if (track !== mediaStreamTrack) {\n eventsToReemitters.forEach((reemitter, event) => track.removeEventListener(event, reemitter));\n if (track.muted !== mediaStreamTrack.muted) {\n const reemitter = eventsToReemitters.get(mediaStreamTrack.muted ? 'mute' : 'unmute');\n reemitter();\n }\n }\n }\n\n /**\n * Return a new {@link MediaTrackSender} containing a clone of the underlying\n * MediaStreamTrack. No RTCRtpSenders are copied.\n * @returns {MediaTrackSender}\n */\n clone() {\n const clone = new MediaTrackSender(this.track.clone());\n this._clones.add(clone);\n return clone;\n }\n\n /**\n * Remove a cloned {@link MediaTrackSender}.\n * @returns {void}\n */\n removeClone(clone) {\n this._clones.delete(clone);\n }\n\n /**\n * Set the given MediaStreamTrack.\n * @param {MediaStreamTrack} mediaStreamTrack\n * @returns {Promise}\n */\n setMediaStreamTrack(mediaStreamTrack) {\n const clones = Array.from(this._clones);\n const senders = Array.from(this._senders);\n return Promise.all(clones.map(clone => {\n return clone.setMediaStreamTrack(mediaStreamTrack.clone());\n }).concat(senders.map(sender => {\n return this._replaceTrack(sender, mediaStreamTrack);\n }))).finally(() => {\n this._reemitMediaStreamTrackEvents(mediaStreamTrack);\n this._track = mediaStreamTrack;\n });\n }\n\n /**\n * Add an RTCRtpSender.\n * @param {RTCRtpSender} sender\n * @param {?()=>Promise} publisherHintCallback\n * @returns {this}\n */\n addSender(sender, publisherHintCallback) {\n this._senders.add(sender);\n if (publisherHintCallback) {\n this._senderToPublisherHintCallbacks.set(sender, publisherHintCallback);\n }\n return this;\n }\n\n /**\n * Remove an RTCRtpSender.\n * @param {RTCRtpSender} sender\n * @returns {this}\n */\n removeSender(sender) {\n this._senders.delete(sender);\n this._senderToPublisherHintCallbacks.delete(sender);\n return this;\n }\n\n /**\n * Applies given encodings, or resets encodings if none specified.\n * @param {Array<{enabled: boolean, layer_index: number}>|null} encodings\n * @returns {Promise}\n */\n setPublisherHint(encodings) {\n // Note(mpatwardhan): since publisher hint applies only to group rooms we only look at 1st call callback.\n const [publisherHintCallback] = Array.from(this._senderToPublisherHintCallbacks.values());\n return publisherHintCallback ? publisherHintCallback(encodings) : Promise.resolve('COULD_NOT_APPLY_HINT');\n }\n\n _replaceTrack(sender, mediaStreamTrack) {\n return sender.replaceTrack(mediaStreamTrack).then(replaceTrackResult => {\n // clear any publisherHints and apply default encodings.\n this.setPublisherHint(null).catch(() => {});\n this.emit('replaced');\n return replaceTrackResult;\n });\n }\n}\n\n/**\n * The {@link MediaTrackSender}'s underlying MediaStreamTrack was muted.\n * @event MediaTrackSender#muted\n */\n\n/**\n * The {@link MediaTrackSender} replaced the underlying MediaStreamTrack.\n * @event MediaTrackSender#replaced\n */\n\n/**\n * The {@link MediaTrackSender}'s underlying MediaStreamTrack was unmuted.\n * @event MediaTrackSender#unmuted\n */\n\nmodule.exports = MediaTrackSender;\n","/* eslint new-cap:0 */\n'use strict';\n\nconst { getUserMedia } = require('../../webrtc');\nconst { isIOS } = require('../../util/browserdetection');\n\nconst { capitalize, defer, waitForSometime, waitForEvent } = require('../../util');\nconst { typeErrors: { ILLEGAL_INVOKE } } = require('../../util/constants');\nconst detectSilentAudio = require('../../util/detectsilentaudio');\nconst detectSilentVideo = require('../../util/detectsilentvideo');\nconst documentVisibilityMonitor = require('../../util/documentvisibilitymonitor.js');\nconst localMediaRestartDeferreds = require('../../util/localmediarestartdeferreds');\nconst gUMSilentTrackWorkaround = require('../../webaudio/workaround180748');\nconst MediaTrackSender = require('./sender');\n\nfunction mixinLocalMediaTrack(AudioOrVideoTrack) {\n /**\n * A {@link LocalMediaTrack} represents audio or video that your\n * {@link LocalParticipant} is sending to a {@link Room}. As such, it can be\n * enabled and disabled with {@link LocalMediaTrack#enable} and\n * {@link LocalMediaTrack#disable} or stopped completely with\n * {@link LocalMediaTrack#stop}.\n * @emits LocalMediaTrack#muted\n * @emits LocalMediaTrack#stopped\n * @emits LocalMediaTrack#unmuted\n */\n return class LocalMediaTrack extends AudioOrVideoTrack {\n /**\n * Construct a {@link LocalMediaTrack} from a MediaStreamTrack.\n * @param {MediaStreamTrack} mediaStreamTrack - The underlying MediaStreamTrack\n * @param {LocalTrackOptions} [options] - {@link LocalTrack} options\n */\n constructor(mediaStreamTrack, options) {\n const workaroundWebKitBug1208516 = isIOS()\n && typeof document === 'object'\n && typeof document.addEventListener === 'function'\n && typeof document.visibilityState === 'string';\n\n options = Object.assign({\n getUserMedia,\n isCreatedByCreateLocalTracks: false,\n workaroundWebKitBug1208516,\n gUMSilentTrackWorkaround\n }, options);\n\n const mediaTrackSender = new MediaTrackSender(mediaStreamTrack);\n const { kind } = mediaTrackSender;\n\n super(mediaTrackSender, options);\n\n Object.defineProperties(this, {\n _constraints: {\n value: typeof options[kind] === 'object'\n ? options[kind]\n : {},\n writable: true\n },\n _getUserMedia: {\n value: options.getUserMedia\n },\n _gUMSilentTrackWorkaround: {\n value: options.gUMSilentTrackWorkaround\n },\n _eventsToReemitters: {\n value: new Map([\n ['muted', () => this.emit('muted', this)],\n ['unmuted', () => this.emit('unmuted', this)]\n ])\n },\n _workaroundWebKitBug1208516: {\n value: options.workaroundWebKitBug1208516\n },\n _workaroundWebKitBug1208516Cleanup: {\n value: null,\n writable: true\n },\n _didCallEnd: {\n value: false,\n writable: true\n },\n _isCreatedByCreateLocalTracks: {\n value: options.isCreatedByCreateLocalTracks\n },\n _noiseCancellation: {\n value: options.noiseCancellation || null\n },\n _trackSender: {\n value: mediaTrackSender\n },\n id: {\n enumerable: true,\n value: mediaTrackSender.id\n },\n isEnabled: {\n enumerable: true,\n get() {\n return mediaTrackSender.enabled;\n }\n },\n isMuted: {\n enumerable: true,\n get() {\n return mediaTrackSender.muted;\n }\n },\n isStopped: {\n enumerable: true,\n get() {\n return mediaTrackSender.readyState === 'ended';\n }\n }\n });\n\n // NOTE(mpatwardhan): As a workaround for WebKit bug: https://bugs.webkit.org/show_bug.cgi?id=208516,\n // upon foregrounding, re-acquire new MediaStreamTrack if the existing one is ended or muted.\n if (this._workaroundWebKitBug1208516) {\n this._workaroundWebKitBug1208516Cleanup = restartWhenInadvertentlyStopped(this);\n }\n\n this._reemitTrackSenderEvents();\n }\n\n /**\n * @private\n */\n _end() {\n if (this._didCallEnd) {\n return;\n }\n super._end.call(this);\n this._didCallEnd = true;\n this._eventsToReemitters.forEach((reemitter, event) => this._trackSender.removeListener(event, reemitter));\n this.emit('stopped', this);\n }\n\n /**\n * @private\n */\n _initialize() {\n if (this._didCallEnd) {\n this._didCallEnd = false;\n }\n if (this._eventsToReemitters) {\n this._reemitTrackSenderEvents();\n }\n super._initialize.call(this);\n }\n\n /**\n * @private\n */\n _reacquireTrack(constraints) {\n const {\n _getUserMedia: getUserMedia,\n _gUMSilentTrackWorkaround: gUMSilentTrackWorkaround,\n _log: log,\n mediaStreamTrack: { kind }\n } = this;\n\n log.info('Re-acquiring the MediaStreamTrack');\n log.debug('Constraints:', constraints);\n\n const gUMConstraints = Object.assign({\n audio: false,\n video: false\n }, { [kind]: constraints });\n\n const gUMPromise = this._workaroundWebKitBug1208516Cleanup\n ? gUMSilentTrackWorkaround(log, getUserMedia, gUMConstraints)\n : getUserMedia(gUMConstraints);\n\n return gUMPromise.then(mediaStream => {\n return mediaStream.getTracks()[0];\n });\n }\n\n /**\n * @private\n */\n _reemitTrackSenderEvents() {\n this._eventsToReemitters.forEach((reemitter, event) => this._trackSender.on(event, reemitter));\n this._trackSender.dequeue('muted');\n this._trackSender.dequeue('unmuted');\n }\n\n /**\n * @private\n */\n _restart(constraints) {\n const { _log: log } = this;\n constraints = constraints || this._constraints;\n\n // NOTE(mmalavalli): If we try and restart a silent MediaStreamTrack\n // without stopping it first, then a NotReadableError is raised in case of\n // video, or the restarted audio will still be silent. Hence, we stop the\n // MediaStreamTrack here.\n this._stop();\n\n return this._reacquireTrack(constraints).catch(error => {\n log.error('Failed to re-acquire the MediaStreamTrack:', { error, constraints });\n throw error;\n }).then(newMediaStreamTrack => {\n log.info('Re-acquired the MediaStreamTrack');\n log.debug('MediaStreamTrack:', newMediaStreamTrack);\n this._constraints = Object.assign({}, constraints);\n return this._setMediaStreamTrack(newMediaStreamTrack);\n });\n }\n\n /**\n * @private\n */\n _setMediaStreamTrack(mediaStreamTrack) {\n // NOTE(mpatwardhan): Preserve the value of the \"enabled\" flag.\n mediaStreamTrack.enabled = this.mediaStreamTrack.enabled;\n\n // NOTE(mmalavalli): Stop the current MediaStreamTrack. If not already\n // stopped, this should fire a \"stopped\" event.\n this._stop();\n\n // NOTE(csantos): If there's an unprocessedTrack, this means RTCRtpSender has\n // the processedTrack already set, we don't want to replace that.\n return (this._unprocessedTrack ? Promise.resolve().then(() => {\n this._unprocessedTrack = mediaStreamTrack;\n }) : this._trackSender.setMediaStreamTrack(mediaStreamTrack).catch(error => {\n this._log.warn('setMediaStreamTrack failed:', { error, mediaStreamTrack });\n })).then(() => {\n this._initialize();\n this._getAllAttachedElements().forEach(el => this._attach(el));\n });\n }\n\n /**\n * @private\n */\n _stop() {\n this.mediaStreamTrack.stop();\n this._end();\n return this;\n }\n\n enable(enabled) {\n enabled = typeof enabled === 'boolean' ? enabled : true;\n if (enabled !== this.mediaStreamTrack.enabled) {\n this._log.info(`${enabled ? 'En' : 'Dis'}abling`);\n this.mediaStreamTrack.enabled = enabled;\n this.emit(enabled ? 'enabled' : 'disabled', this);\n }\n return this;\n }\n\n disable() {\n return this.enable(false);\n }\n\n restart(constraints) {\n const { kind } = this;\n if (!this._isCreatedByCreateLocalTracks) {\n return Promise.reject(ILLEGAL_INVOKE('restart', 'can only be called on a'\n + ` Local${capitalize(kind)}Track that is created using createLocalTracks`\n + ` or createLocal${capitalize(kind)}Track.`));\n }\n if (this._workaroundWebKitBug1208516Cleanup) {\n this._workaroundWebKitBug1208516Cleanup();\n this._workaroundWebKitBug1208516Cleanup = null;\n }\n let promise = this._restart(constraints);\n\n if (this._workaroundWebKitBug1208516) {\n promise = promise.finally(() => {\n this._workaroundWebKitBug1208516Cleanup = restartWhenInadvertentlyStopped(this);\n });\n }\n return promise;\n }\n\n stop() {\n this._log.info('Stopping');\n if (this._workaroundWebKitBug1208516Cleanup) {\n this._workaroundWebKitBug1208516Cleanup();\n this._workaroundWebKitBug1208516Cleanup = null;\n }\n return this._stop();\n }\n };\n}\n\n/**\n * Restart the given {@link LocalMediaTrack} if it has been inadvertently stopped.\n * @private\n * @param {LocalAudioTrack|LocalVideoTrack} localMediaTrack\n * @returns {function} Clean up listeners attached by the workaround\n */\nfunction restartWhenInadvertentlyStopped(localMediaTrack) {\n const {\n _log: log,\n kind,\n _noiseCancellation: noiseCancellation\n } = localMediaTrack;\n\n const detectSilence = {\n audio: detectSilentAudio,\n video: detectSilentVideo\n }[kind];\n\n const getSourceMediaStreamTrack = () => noiseCancellation\n ? noiseCancellation.sourceTrack\n : localMediaTrack.mediaStreamTrack;\n\n let { _dummyEl: el } = localMediaTrack;\n let mediaStreamTrack = getSourceMediaStreamTrack();\n let trackChangeInProgress = null;\n\n function checkSilence() {\n // The dummy element is paused, so play it and then detect silence.\n return el.play().then(() => detectSilence(el)).then(isSilent => {\n if (isSilent) {\n log.warn('Silence detected');\n } else {\n log.info('Non-silence detected');\n }\n return isSilent;\n }).catch(error => {\n log.warn('Failed to detect silence:', error);\n }).finally(() => {\n // Pause the dummy element again, if there is no processed track.\n if (!localMediaTrack.processedTrack) {\n el.pause();\n }\n });\n }\n\n function shouldReacquireTrack() {\n const {\n _workaroundWebKitBug1208516Cleanup,\n isStopped\n } = localMediaTrack;\n\n const isInadvertentlyStopped = isStopped && !!_workaroundWebKitBug1208516Cleanup;\n const { muted } = getSourceMediaStreamTrack();\n\n // NOTE(mmalavalli): Restart the LocalMediaTrack if:\n // 1. The app is foregrounded, and\n // 2. A restart is not already in progress, and\n // 3. The LocalMediaTrack is either muted, inadvertently stopped or silent\n return Promise.resolve().then(() => {\n return document.visibilityState === 'visible'\n && !trackChangeInProgress\n && (muted || isInadvertentlyStopped || checkSilence());\n });\n }\n\n function maybeRestart() {\n return Promise.race([\n waitForEvent(mediaStreamTrack, 'unmute'),\n waitForSometime(50)\n ]).then(() => shouldReacquireTrack()).then(shouldReacquire => {\n if (shouldReacquire && !trackChangeInProgress) {\n trackChangeInProgress = defer();\n localMediaTrack._restart().finally(() => {\n el = localMediaTrack._dummyEl;\n removeMediaStreamTrackListeners();\n mediaStreamTrack = getSourceMediaStreamTrack();\n addMediaStreamTrackListeners();\n trackChangeInProgress.resolve();\n trackChangeInProgress = null;\n }).catch(error => {\n log.error('failed to restart track: ', error);\n });\n }\n\n // NOTE(mmalavalli): If the MediaStreamTrack ends before the DOM is visible,\n // then this makes sure that visibility callback for phase 2 is called only\n // after the MediaStreamTrack is re-acquired.\n const promise = (trackChangeInProgress && trackChangeInProgress.promise) || Promise.resolve();\n return promise.finally(() => localMediaRestartDeferreds.resolveDeferred(kind));\n }).catch(ex => {\n log.error(`error in maybeRestart: ${ex.message}`);\n });\n }\n\n function onMute() {\n const { _log: log, kind } = localMediaTrack;\n log.info('Muted');\n log.debug('LocalMediaTrack:', localMediaTrack);\n\n // NOTE(mmalavalli): When a LocalMediaTrack is muted without the app being\n // backgrounded, and the inadvertently paused elements are played before it\n // is restarted, it never gets unmuted due to the WebKit Bug 213853. Hence,\n // setting this Deferred will make sure that the inadvertently paused elements\n // are played only after the LocalMediaTrack is unmuted.\n //\n // Bug: https://bugs.webkit.org/show_bug.cgi?id=213853\n //\n localMediaRestartDeferreds.startDeferred(kind);\n }\n\n function addMediaStreamTrackListeners() {\n mediaStreamTrack.addEventListener('ended', maybeRestart);\n mediaStreamTrack.addEventListener('mute', onMute);\n mediaStreamTrack.addEventListener('unmute', maybeRestart);\n }\n\n function removeMediaStreamTrackListeners() {\n mediaStreamTrack.removeEventListener('ended', maybeRestart);\n mediaStreamTrack.removeEventListener('mute', onMute);\n mediaStreamTrack.removeEventListener('unmute', maybeRestart);\n }\n\n // NOTE(mpatwardhan): listen for document visibility callback on phase 1.\n // this ensures that we acquire media tracks before RemoteMediaTrack\n // tries to `play` them (in phase 2). This order is important because\n // play can fail on safari if audio is not being captured.\n let onVisibilityChange = isVisible => {\n return isVisible ? maybeRestart() : false;\n };\n documentVisibilityMonitor.onVisibilityChange(1, onVisibilityChange);\n addMediaStreamTrackListeners();\n\n return () => {\n documentVisibilityMonitor.offVisibilityChange(1, onVisibilityChange);\n removeMediaStreamTrackListeners();\n };\n}\n\nmodule.exports = mixinLocalMediaTrack;\n","'use strict';\n\nconst { isIOS } = require('../../util/browserdetection');\nconst detectSilentAudio = require('../../util/detectsilentaudio');\nconst { isIOSChrome } = require('../../webrtc/util');\nconst AudioTrack = require('./audiotrack');\nconst mixinLocalMediaTrack = require('./localmediatrack');\n\nconst LocalMediaAudioTrack = mixinLocalMediaTrack(AudioTrack);\n\n/**\n * A {@link LocalAudioTrack} is an {@link AudioTrack} representing audio that\n * your {@link LocalParticipant} can publish to a {@link Room}. It can be\n * enabled and disabled with {@link LocalAudioTrack#enable} and\n * {@link LocalAudioTrack#disable} or stopped completely with\n * {@link LocalAudioTrack#stop}.\n * @extends AudioTrack\n * @property {Track.ID} id - The {@link LocalAudioTrack}'s ID\n * @property {boolean} isMuted - Whether or not the audio source has stopped sending samples to the\n * {@link LocalAudioTrack}; This can happen when the microphone is taken over by another application,\n * mainly on mobile devices; When this property toggles, then muted and unmuted\n * events are fired appropriately\n * @property {boolean} isStopped - Whether or not the {@link LocalAudioTrack} is\n * stopped\n * @property {NoiseCancellation?} noiseCancellation - When a LocalAudioTrack is created\n * with {@link NoiseCancellationOptions}, this property provides interface\n * to enable or disable the noise cancellation at runtime.\n * @emits LocalAudioTrack#disabled\n * @emits LocalAudioTrack#enabled\n * @emits LocalAudioTrack#muted\n * @emits LocalAudioTrack#started\n * @emits LocalAudioTrack#stopped\n * @emits LocalAudioTrack#unmuted\n */\nclass LocalAudioTrack extends LocalMediaAudioTrack {\n /**\n * Construct a {@link LocalAudioTrack} from a MediaStreamTrack.\n * @param {MediaStreamTrack} mediaStreamTrack - An audio MediaStreamTrack\n * @param {LocalTrackOptions} [options] - {@link LocalTrack} options\n */\n constructor(mediaStreamTrack, options) {\n const noiseCancellation = options?.noiseCancellation || null;\n super(mediaStreamTrack, options);\n\n const { _log: log } = this;\n const { label: defaultDeviceLabel = '' } = mediaStreamTrack;\n const { deviceId: defaultDeviceId = '', groupId: defaultGroupId = '' } = mediaStreamTrack.getSettings();\n\n Object.defineProperties(this, {\n _currentDefaultDeviceInfo: {\n value: { deviceId: defaultDeviceId, groupId: defaultGroupId, label: defaultDeviceLabel },\n writable: true\n },\n _defaultDeviceCaptureMode: {\n value: !isIOS()\n && this._isCreatedByCreateLocalTracks\n && typeof navigator === 'object'\n && typeof navigator.mediaDevices === 'object'\n && typeof navigator.mediaDevices.addEventListener === 'function'\n && typeof navigator.mediaDevices.enumerateDevices === 'function'\n ? options?.defaultDeviceCaptureMode || 'auto'\n : 'manual'\n },\n _onDeviceChange: {\n value: () => {\n navigator.mediaDevices.enumerateDevices().then(deviceInfos => {\n // NOTE(mmalavalli): In Chrome, when the default device changes, and we restart the LocalAudioTrack with\n // device ID \"default\", it will not switch to the new default device unless all LocalAudioTracks capturing\n // from the old default device are stopped. So, we restart the LocalAudioTrack with the actual device ID of\n // the new default device instead.\n const defaultDeviceInfo = deviceInfos.find(({ deviceId, kind }) => {\n return kind === 'audioinput' && deviceId !== 'default';\n });\n\n if (defaultDeviceInfo && ['deviceId', 'groupId'].some(prop => {\n return defaultDeviceInfo[prop] !== this._currentDefaultDeviceInfo[prop];\n })) {\n log.info('Default device changed, restarting the LocalAudioTrack');\n log.debug(`Old default device: \"${this._currentDefaultDeviceInfo.deviceId}\" => \"${this._currentDefaultDeviceInfo.label}\"`);\n log.debug(`New default device: \"${defaultDeviceInfo.deviceId}\" => \"${defaultDeviceInfo.label}\"`);\n this._currentDefaultDeviceInfo = defaultDeviceInfo;\n this._restartDefaultDevice().catch(error => log.warn(`Failed to restart: ${error.message}`));\n }\n }, error => {\n log.warn(`Failed to run enumerateDevices(): ${error.message}`);\n });\n }\n },\n _restartOnDefaultDeviceChangeCleanup: {\n value: null,\n writable: true\n },\n noiseCancellation: {\n enumerable: true,\n value: noiseCancellation,\n writable: false\n },\n });\n\n log.debug('defaultDeviceCaptureMode:', this._defaultDeviceCaptureMode);\n this._maybeRestartOnDefaultDeviceChange();\n }\n\n toString() {\n return `[LocalAudioTrack #${this._instanceId}: ${this.id}]`;\n }\n\n attach(el) {\n el = super.attach.call(this, el);\n el.muted = true;\n return el;\n }\n\n /**\n * @private\n */\n _end() {\n return super._end.apply(this, arguments);\n }\n\n /**\n * @private\n */\n _maybeRestartOnDefaultDeviceChange() {\n const { _constraints: constraints, _defaultDeviceCaptureMode: defaultDeviceCaptureMode, _log: log } = this;\n const mediaStreamTrack = this.noiseCancellation ? this.noiseCancellation.sourceTrack : this.mediaStreamTrack;\n const { deviceId } = mediaStreamTrack.getSettings();\n\n const isNotEqualToCapturedDeviceIdOrEqualToDefault = requestedDeviceId => {\n return requestedDeviceId !== deviceId || requestedDeviceId === 'default';\n };\n\n const isCapturingFromDefaultDevice = (function checkIfCapturingFromDefaultDevice(deviceIdConstraint = {}) {\n if (typeof deviceIdConstraint === 'string') {\n return isNotEqualToCapturedDeviceIdOrEqualToDefault(deviceIdConstraint);\n } else if (Array.isArray(deviceIdConstraint)) {\n return deviceIdConstraint.every(isNotEqualToCapturedDeviceIdOrEqualToDefault);\n } else if (deviceIdConstraint.exact) {\n return checkIfCapturingFromDefaultDevice(deviceIdConstraint.exact);\n } else if (deviceIdConstraint.ideal) {\n return checkIfCapturingFromDefaultDevice(deviceIdConstraint.ideal);\n }\n return true;\n }(constraints.deviceId));\n\n if (defaultDeviceCaptureMode === 'auto' && isCapturingFromDefaultDevice) {\n if (!this._restartOnDefaultDeviceChangeCleanup) {\n log.info('LocalAudioTrack will be restarted if the default device changes');\n navigator.mediaDevices.addEventListener('devicechange', this._onDeviceChange);\n this._restartOnDefaultDeviceChangeCleanup = () => {\n log.info('Cleaning up the listener to restart the LocalAudioTrack if the default device changes');\n navigator.mediaDevices.removeEventListener('devicechange', this._onDeviceChange);\n this._restartOnDefaultDeviceChangeCleanup = null;\n };\n }\n } else {\n log.info('LocalAudioTrack will NOT be restarted if the default device changes');\n if (this._restartOnDefaultDeviceChangeCleanup) {\n this._restartOnDefaultDeviceChangeCleanup();\n }\n }\n }\n\n /**\n * @private\n */\n _reacquireTrack(constraints) {\n this._log.debug('_reacquireTrack: ', constraints);\n if (this.noiseCancellation) {\n return this.noiseCancellation.reacquireTrack(() => {\n return super._reacquireTrack.call(this, constraints);\n });\n }\n\n return super._reacquireTrack.call(this, constraints);\n }\n\n /**\n * @private\n */\n _restartDefaultDevice() {\n const constraints = Object.assign({}, this._constraints);\n const restartConstraints = Object.assign({}, constraints, { deviceId: this._currentDefaultDeviceInfo.deviceId });\n return this.restart(restartConstraints).then(() => {\n // NOTE(mmalavalli): Since we used the new default device's ID while restarting the LocalAudioTrack,\n // we reset the constraints to the original constraints so that the default device detection logic in\n // _maybeRestartOnDefaultDeviceChange() still works.\n this._constraints = constraints;\n this._maybeRestartOnDefaultDeviceChange();\n });\n }\n\n /**\n * NOTE(mmalavalli): On iOS 17 Chrome, a LocalAudioTrack with Krisp Noise Cancellation\n * enabled that is restarted due to foregrounding the browser is silent for as-of-yet\n * unknown reason. We work around this by discarding the Krisp MediaStreamTrack and using\n * the source MediaStreamTrack. (VIDEO-13006)\n * @private\n */\n _setMediaStreamTrack(mediaStreamTrack) {\n const { _log: log, noiseCancellation } = this;\n let promise = super._setMediaStreamTrack.call(this, mediaStreamTrack);\n\n if (isIOSChrome() && !!noiseCancellation) {\n log.debug('iOS Chrome detected, checking if the restarted Krisp audio is silent');\n promise = promise.then(() => detectSilentAudio(this._dummyEl)).then(isSilent => {\n log.debug(`Krisp audio is ${isSilent ? 'silent, using source audio' : 'not silent'}`);\n return isSilent && noiseCancellation.disablePermanently().then(() => {\n return super._setMediaStreamTrack.call(this, noiseCancellation.sourceTrack);\n });\n });\n }\n\n return promise;\n }\n\n /**\n * Disable the {@link LocalAudioTrack}. This is equivalent to muting the audio source.\n * @returns {this}\n * @fires LocalAudioTrack#disabled\n */\n disable() {\n return super.disable.apply(this, arguments);\n }\n\n /**\n * Enable the {@link LocalAudioTrack}. This is equivalent to unmuting the audio source.\n * @returns {this}\n * @fires LocalAudioTrack#enabled\n *//**\n * Enable or disable the {@link LocalAudioTrack}. This is equivalent to unmuting or muting\n * the audio source respectively.\n * @param {boolean} [enabled] - Specify false to disable the\n * {@link LocalAudioTrack}\n * @returns {this}\n * @fires LocalAudioTrack#disabled\n * @fires LocalAudioTrack#enabled\n */\n enable() {\n return super.enable.apply(this, arguments);\n }\n\n /**\n * Restart the {@link LocalAudioTrack}. This stops the existing MediaStreamTrack\n * and creates a new MediaStreamTrack. If the {@link LocalAudioTrack} is being published\n * to a {@link Room}, then all the {@link RemoteParticipant}s will start receiving media\n * from the newly created MediaStreamTrack. You can access the new MediaStreamTrack via\n * the mediaStreamTrack property. If you want to listen to events on\n * the MediaStreamTrack directly, please do so in the \"started\" event handler. Also,\n * the {@link LocalAudioTrack}'s ID is no longer guaranteed to be the same as the\n * underlying MediaStreamTrack's ID.\n * @param {MediaTrackConstraints} [constraints] - The optional MediaTrackConstraints\n * for restarting the {@link LocalAudioTrack}; If not specified, then the current MediaTrackConstraints\n * will be used; If {} (empty object) is specified, then the default MediaTrackConstraints\n * will be used\n * @returns {Promise} Rejects with a TypeError if the {@link LocalAudioTrack} was not created\n * using an one of createLocalAudioTrack, createLocalTracks or connect;\n * Also rejects with the DOMException\n * raised by getUserMedia when it fails\n * @fires LocalAudioTrack#stopped\n * @fires LocalAudioTrack#started\n * @example\n * const { connect, createLocalAudioTrack } = require('twilio-video');\n *\n * // Create a LocalAudioTrack that captures audio from a USB microphone.\n * createLocalAudioTrack({ deviceId: 'usb-mic-id' }).then(function(localAudioTrack) {\n * return connect('token', {\n * name: 'my-cool-room',\n * tracks: [localAudioTrack]\n * });\n * }).then(function(room) {\n * // Restart the LocalAudioTrack to capture audio from the default microphone.\n * const localAudioTrack = Array.from(room.localParticipant.audioTracks.values())[0].track;\n * return localAudioTrack.restart({ deviceId: 'default-mic-id' });\n * });\n */\n restart() {\n return super.restart.apply(this, arguments);\n }\n\n /**\n * Calls stop on the underlying MediaStreamTrack. If you choose to stop a\n * {@link LocalAudioTrack}, you should unpublish it after stopping.\n * @returns {this}\n * @fires LocalAudioTrack#stopped\n */\n stop() {\n if (this.noiseCancellation) {\n this.noiseCancellation.stop();\n }\n if (this._restartOnDefaultDeviceChangeCleanup) {\n this._restartOnDefaultDeviceChangeCleanup();\n }\n return super.stop.apply(this, arguments);\n }\n}\n\n/**\n * The {@link LocalAudioTrack} was disabled, i.e. the audio source was muted by the user.\n * @param {LocalAudioTrack} track - The {@link LocalAudioTrack} that was\n * disabled\n * @event LocalAudioTrack#disabled\n */\n\n/**\n * The {@link LocalAudioTrack} was enabled, i.e. the audio source was unmuted by the user.\n * @param {LocalAudioTrack} track - The {@link LocalAudioTrack} that was enabled\n * @event LocalAudioTrack#enabled\n */\n\n/**\n * The {@link LocalAudioTrack} was muted because the audio source stopped sending samples, most\n * likely due to another application taking said audio source, especially on mobile devices.\n * @param {LocalAudioTrack} track - The {@link LocalAudioTrack} that was muted\n * @event LocalAudioTrack#muted\n */\n\n/**\n * The {@link LocalAudioTrack} started. This means there is enough audio data to\n * begin playback.\n * @param {LocalAudioTrack} track - The {@link LocalAudioTrack} that started\n * @event LocalAudioTrack#started\n */\n\n/**\n * The {@link LocalAudioTrack} stopped, either because {@link LocalAudioTrack#stop}\n * or {@link LocalAudioTrack#restart} was called or because the underlying\n * MediaStreamTrack ended.\n * @param {LocalAudioTrack} track - The {@link LocalAudioTrack} that stopped\n * @event LocalAudioTrack#stopped\n */\n\n/**\n * The {@link LocalAudioTrack} was unmuted because the audio source resumed sending samples,\n * most likely due to the application that took over the said audio source has released it\n * back to the application, especially on mobile devices. This event is also fired when\n * {@link LocalAudioTrack#restart} is called on a muted {@link LocalAudioTrack} with a\n * new audio source.\n * @param {LocalAudioTrack} track - The {@link LocalAudioTrack} that was unmuted\n * @event LocalAudioTrack#unmuted\n */\n\nmodule.exports = LocalAudioTrack;\n","// eslint-disable-next-line no-warning-comments\n// TODO(mroberts): Remove this when we go to the next major version. This is\n// only in place so that we can support ES6 classes without requiring `new`.\n'use strict';\n\nconst inherits = require('../../../vendor/inherits');\nconst LocalAudioTrackClass = require('../localaudiotrack');\n\nfunction LocalAudioTrack(mediaStreamTrack, options) {\n const track = new LocalAudioTrackClass(mediaStreamTrack, options);\n Object.setPrototypeOf(track, LocalAudioTrack.prototype);\n return track;\n}\n\ninherits(LocalAudioTrack, LocalAudioTrackClass);\n\nmodule.exports = LocalAudioTrack;\n","'use strict';\n\nconst { EventEmitter } = require('events');\nconst { DEFAULT_VIDEO_PROCESSOR_STATS_INTERVAL_MS } = require('../../util/constants');\n\n/**\n * VideoProcessorEventObserver listens to {@link VideoProcessor} related events\n * and re-emits them as a generic event with some additional information.\n * @extends EventEmitter\n * @emits VideoProcessorEventObserver#event\n */\nclass VideoProcessorEventObserver extends EventEmitter {\n\n /**\n * Constructor.\n * @param {Log} log\n */\n constructor(log) {\n super();\n\n Object.defineProperties(this, {\n _lastStatsSaveTime: {\n value: null,\n writable: true\n },\n _lastStatsPublishTime: {\n value: null,\n writable: true\n },\n _log: {\n value: log\n },\n _processorInfo: {\n value: null,\n writable: true\n },\n _stats: {\n value: null,\n writable: true\n }\n });\n\n this.on('add', info => {\n this._lastStatsSaveTime = Date.now();\n this._lastStatsPublishTime = Date.now();\n this._processorInfo = info;\n this._stats = [];\n this._reemitEvent('add', this._getEventData());\n });\n\n this.on('remove', () => {\n const data = this._getEventData();\n this._lastStatsSaveTime = null;\n this._lastStatsPublishTime = null;\n this._processorInfo = null;\n this._stats = null;\n this._reemitEvent('remove', data);\n });\n\n this.on('start', () => {\n this._reemitEvent('start', this._getEventData());\n });\n\n this.on('stop', message => {\n this._reemitEvent('stop', Object.assign({ message }, this._getEventData()));\n });\n\n this.on('stats', () => this._maybeEmitStats());\n }\n\n /**\n * @private\n */\n _getEventData() {\n if (!this._processorInfo) {\n return {};\n }\n\n const {\n processor,\n captureHeight,\n captureWidth,\n inputFrameRate,\n isRemoteVideoTrack,\n inputFrameBufferType,\n outputFrameBufferContextType\n } = this._processorInfo;\n const data = { captureHeight, captureWidth, inputFrameRate, isRemoteVideoTrack, inputFrameBufferType, outputFrameBufferContextType };\n data.name = processor._name || 'VideoProcessor';\n\n ['assetsPath', 'blurFilterRadius', 'debounce', 'fitType', 'isSimdEnabled', 'maskBlurRadius', 'pipeline', 'version'].forEach(prop => {\n const val = processor[`_${prop}`];\n if (typeof val !== 'undefined') {\n data[prop] = val;\n }\n });\n\n Object.keys(data).forEach(prop => {\n const val = data[prop];\n if (typeof val === 'boolean') {\n data[prop] = val ? 'true' : 'false';\n }\n });\n\n return data;\n }\n\n /**\n * Save stats every second. If a specific time interval has elapsed,\n * the stats event will be emitted\n * @private\n */\n _maybeEmitStats() {\n if (!this._stats || !this._processorInfo) {\n return;\n }\n const benchmark = this._processorInfo.processor._benchmark;\n if (!benchmark) {\n return;\n }\n const now = Date.now();\n if (now - this._lastStatsSaveTime < 1000) {\n return;\n }\n\n const entry = { outputFrameRate: benchmark.getRate('totalProcessingDelay') };\n ['captureFrameDelay', 'imageCompositionDelay', 'inputImageResizeDelay', 'processFrameDelay', 'segmentationDelay'].forEach(name => {\n entry[name] = benchmark.getAverageDelay(name);\n });\n this._lastStatsSaveTime = now;\n this._stats.push(entry);\n\n if (now - this._lastStatsPublishTime < DEFAULT_VIDEO_PROCESSOR_STATS_INTERVAL_MS) {\n return;\n }\n this._lastStatsPublishTime = now;\n const stats = this._stats.splice(0);\n const averages = stats.reduce((averages, current, n) => {\n Object.keys(entry).forEach(name => {\n if (!averages[name]) {\n averages[name] = 0;\n }\n averages[name] = ((averages[name] * n) + current[name]) / (n + 1);\n });\n return averages;\n }, {});\n\n Object.keys(averages).forEach(name => {\n averages[name] = parseFloat(averages[name].toFixed(2));\n });\n this._reemitEvent('stats', Object.assign({}, averages, this._getEventData()));\n }\n\n /**\n * @private\n */\n _reemitEvent(name, data) {\n this._log.debug(`VideoProcessor:${name}`, data);\n this.emit('event', { name, data });\n }\n}\n\nmodule.exports = VideoProcessorEventObserver;\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","'use strict';\n\nconst MediaTrack = require('./mediatrack');\nconst VideoProcessorEventObserver = require('./videoprocessoreventobserver');\nconst { DEFAULT_FRAME_RATE } = require('../../util/constants');\n\n/**\n * A {@link VideoTrack} is a {@link Track} representing video.\n * @extends Track\n * @property {boolean} isStarted - Whether or not the {@link VideoTrack} has\n * started; if the {@link VideoTrack} started, there is enough video data to\n * begin playback\n * @property {boolean} isEnabled - Whether or not the {@link VideoTrack} is\n * enabled; if the {@link VideoTrack} is not enabled, it is \"paused\"\n * @property {VideoTrack.Dimensions} dimensions - The {@link VideoTrack}'s\n * {@link VideoTrack.Dimensions}\n * @property {Track.Kind} kind - \"video\"\n * @property {MediaStreamTrack} mediaStreamTrack - A video MediaStreamTrack\n * @property {?MediaStreamTrack} processedTrack - The source of processed video frames.\n * It is null if no VideoProcessor has been added.\n * @property {?VideoProcessor} processor - A {@link VideoProcessor} that is currently\n * processing video frames. It is null if video frames are not being processed.\n * @emits VideoTrack#dimensionsChanged\n * @emits VideoTrack#disabled\n * @emits VideoTrack#enabled\n * @emits VideoTrack#started\n */\nclass VideoTrack extends MediaTrack {\n /**\n * Construct a {@link VideoTrack}.\n * @param {MediaTrackTransceiver} mediaTrackTransceiver\n * @param {{log: Log}} options\n */\n constructor(mediaTrackTransceiver, options) {\n super(mediaTrackTransceiver, options);\n Object.defineProperties(this, {\n _captureTimeoutId: {\n value: null,\n writable: true\n },\n _isCapturing: {\n value: false,\n writable: true\n },\n _inputFrame: {\n value: null,\n writable: true\n },\n _outputFrame: {\n value: null,\n writable: true\n },\n _processorEventObserver: {\n value: null,\n writable: true,\n },\n _processorOptions: {\n value: {},\n writable: true,\n },\n _unmuteHandler: {\n value: null,\n writable: true\n },\n dimensions: {\n enumerable: true,\n value: {\n width: null,\n height: null\n }\n },\n processor: {\n enumerable: true,\n value: null,\n writable: true\n }\n });\n\n this._processorEventObserver = new (options.VideoProcessorEventObserver || VideoProcessorEventObserver)(this._log);\n\n return this;\n }\n\n /**\n * @private\n */\n _checkIfCanCaptureFrames(isPublishing = false) {\n let canCaptureFrames = true;\n let message = '';\n const { enabled, readyState } = this.mediaStreamTrack;\n\n if (!enabled) {\n canCaptureFrames = false;\n message = 'MediaStreamTrack is disabled';\n }\n if (readyState === 'ended') {\n canCaptureFrames = false;\n message = 'MediaStreamTrack is ended';\n }\n if (!this.processor) {\n canCaptureFrames = false;\n message = 'VideoProcessor not detected.';\n }\n if (!this._attachments.size && !isPublishing) {\n canCaptureFrames = false;\n message = 'VideoTrack is not publishing and there is no attached element.';\n }\n\n if (message) {\n this._log.debug(message);\n }\n return { canCaptureFrames, message };\n }\n\n /**\n * @private\n */\n _captureFrames() {\n if (this._isCapturing) {\n this._log.debug('Ignoring captureFrames call. Capture is already in progress');\n return;\n }\n if (!this._checkIfCanCaptureFrames().canCaptureFrames) {\n this._isCapturing = false;\n this._log.debug('Cannot capture frames. Ignoring captureFrames call.');\n return;\n }\n this._isCapturing = true;\n this._processorEventObserver.emit('start');\n this._log.debug('Start capturing frames');\n\n let startTime = Date.now();\n let processFramePeriodMs;\n\n this._dummyEl.play().then(() => {\n const captureFrame = cb => {\n clearTimeout(this._captureTimeoutId);\n const { frameRate = DEFAULT_FRAME_RATE } = this.mediaStreamTrack.getSettings();\n const capturePeriodMs = Math.floor(1000 / frameRate);\n let delay = capturePeriodMs - processFramePeriodMs;\n if (delay < 0 || typeof processFramePeriodMs !== 'number') {\n delay = 0;\n }\n this._captureTimeoutId = setTimeout(cb, delay);\n };\n const process = () => {\n const checkResult = this._checkIfCanCaptureFrames();\n if (!checkResult.canCaptureFrames) {\n this._isCapturing = false;\n this._processorEventObserver.emit('stop', checkResult.message);\n this._log.debug('Cannot capture frames. Stopping capturing frames.');\n return;\n }\n startTime = Date.now();\n\n const { width = 0, height = 0 } = this.mediaStreamTrack.getSettings();\n // Setting the canvas' dimension triggers a redraw.\n // Only set it if it has changed.\n if (this._outputFrame && this._outputFrame.width !== width) {\n this._outputFrame.width = width;\n this._outputFrame.height = height;\n }\n if (this._inputFrame) {\n if (this._inputFrame.width !== width) {\n this._inputFrame.width = width;\n this._inputFrame.height = height;\n }\n this._inputFrame.getContext('2d').drawImage(this._dummyEl, 0, 0, width, height);\n }\n\n let result = null;\n try {\n const input = this._processorOptions.inputFrameBufferType === 'video' ? this._dummyEl : this._inputFrame;\n result = this.processor.processFrame(input, this._outputFrame);\n } catch (ex) {\n this._log.debug('Exception detected after calling processFrame.', ex);\n }\n ((result instanceof Promise) ? result : Promise.resolve(result))\n .then(() => {\n if (this._outputFrame) {\n if (typeof this.processedTrack.requestFrame === 'function') {\n this.processedTrack.requestFrame();\n }\n this._processorEventObserver.emit('stats');\n }\n })\n .finally(() => {\n processFramePeriodMs = Date.now() - startTime;\n captureFrame(process);\n });\n };\n captureFrame(process);\n }).catch(error => this._log.error('Video element cannot be played', { error, track: this }));\n }\n\n /**\n * @private\n */\n _initialize() {\n super._initialize();\n if (this._dummyEl) {\n this._dummyEl.onloadedmetadata = () => {\n if (dimensionsChanged(this, this._dummyEl)) {\n this.dimensions.width = this._dummyEl.videoWidth;\n this.dimensions.height = this._dummyEl.videoHeight;\n }\n };\n this._dummyEl.onresize = () => {\n if (dimensionsChanged(this, this._dummyEl)) {\n this.dimensions.width = this._dummyEl.videoWidth;\n this.dimensions.height = this._dummyEl.videoHeight;\n if (this.isStarted) {\n this._log.debug('Dimensions changed:', this.dimensions);\n this.emit(VideoTrack.DIMENSIONS_CHANGED, this);\n }\n }\n };\n }\n }\n\n /**\n * @private\n */\n _restartProcessor() {\n const processor = this.processor;\n if (processor) {\n const processorOptions = Object.assign({}, this._processorOptions);\n this.removeProcessor(processor);\n this.addProcessor(processor, processorOptions);\n }\n }\n\n /**\n * @private\n */\n _start(dummyEl) {\n this.dimensions.width = dummyEl.videoWidth;\n this.dimensions.height = dummyEl.videoHeight;\n\n this._log.debug('Dimensions:', this.dimensions);\n this.emit(VideoTrack.DIMENSIONS_CHANGED, this);\n return super._start.call(this, dummyEl);\n }\n\n /**\n * Add a {@link VideoProcessor} to allow for custom processing of video frames belonging to a VideoTrack.\n * @param {VideoProcessor} processor - The {@link VideoProcessor} to use.\n * @param {AddProcessorOptions} [options] - {@link AddProcessorOptions} to provide.\n * @returns {this}\n * @example\n * class GrayScaleProcessor {\n * constructor(percentage) {\n * this.percentage = percentage;\n * }\n * processFrame(inputFrameBuffer, outputFrameBuffer) {\n * const context = outputFrameBuffer.getContext('2d');\n * context.filter = `grayscale(${this.percentage}%)`;\n * context.drawImage(inputFrameBuffer, 0, 0, inputFrameBuffer.width, inputFrameBuffer.height);\n * }\n * }\n *\n * Video.createLocalVideoTrack().then(function(videoTrack) {\n * videoTrack.addProcessor(new GrayScaleProcessor(100));\n * });\n */\n addProcessor(processor, options) {\n if (!processor || typeof processor.processFrame !== 'function') {\n throw new Error('Received an invalid VideoProcessor from addProcessor.');\n }\n if (this.processor) {\n throw new Error('A VideoProcessor has already been added.');\n }\n if (!this._dummyEl) {\n throw new Error('VideoTrack has not been initialized.');\n }\n\n this._log.debug('Adding VideoProcessor to the VideoTrack', processor);\n\n if (!this._unmuteHandler) {\n this._unmuteHandler = () => {\n this._log.debug('mediaStreamTrack unmuted');\n // NOTE(csantos): On certain scenarios where mediaStreamTrack is coming from muted to unmuted state,\n // the processedTrack doesn't unmutes automatically although enabled is already set to true.\n // This is a terminal state for the processedTrack and should be restarted. (VIDEO-4176)\n if (this.processedTrack.muted) {\n this._log.debug('mediaStreamTrack is unmuted but processedTrack is muted. Restarting processor.');\n this._restartProcessor();\n }\n };\n this.mediaStreamTrack.addEventListener('unmute', this._unmuteHandler);\n }\n\n this._processorOptions = options || {};\n let { inputFrameBufferType, outputFrameBufferContextType } = this._processorOptions;\n if (typeof OffscreenCanvas === 'undefined' && inputFrameBufferType === 'offscreencanvas') {\n throw new Error('OffscreenCanvas is not supported by this browser.');\n }\n if (inputFrameBufferType && inputFrameBufferType !== 'video' && inputFrameBufferType !== 'canvas' && inputFrameBufferType !== 'offscreencanvas') {\n throw new Error(`Invalid inputFrameBufferType of ${inputFrameBufferType}`);\n }\n if (!inputFrameBufferType) {\n inputFrameBufferType = typeof OffscreenCanvas === 'undefined' ? 'canvas' : 'offscreencanvas';\n }\n\n const { width = 0, height = 0, frameRate = DEFAULT_FRAME_RATE } = this.mediaStreamTrack.getSettings();\n if (inputFrameBufferType === 'offscreencanvas') {\n this._inputFrame = new OffscreenCanvas(width, height);\n }\n if (inputFrameBufferType === 'canvas') {\n this._inputFrame = document.createElement('canvas');\n }\n if (this._inputFrame) {\n this._inputFrame.width = width;\n this._inputFrame.height = height;\n }\n\n this._outputFrame = document.createElement('canvas');\n this._outputFrame.width = width;\n this._outputFrame.height = height;\n\n // NOTE(csantos): Initialize the rendering context for future renders. This also ensures\n // that the correct type is used and on Firefox, it throws an exception if you try to capture\n // frames prior calling getContext https://bugzilla.mozilla.org/show_bug.cgi?id=1572422\n outputFrameBufferContextType = outputFrameBufferContextType || '2d';\n const ctx = this._outputFrame.getContext(outputFrameBufferContextType);\n if (!ctx) {\n throw new Error(`Cannot get outputFrameBufferContextType: ${outputFrameBufferContextType}.`);\n }\n\n // NOTE(csantos): Zero FPS means we can control when to render the next frame by calling requestFrame.\n // Some browsers such as Firefox doesn't support requestFrame so we will use default, which is an undefined value.\n // This means, the browser will use the highest FPS available.\n const targetFps = typeof CanvasCaptureMediaStreamTrack !== 'undefined' && CanvasCaptureMediaStreamTrack.prototype &&\n // eslint-disable-next-line\n typeof CanvasCaptureMediaStreamTrack.prototype.requestFrame === 'function' ? 0 : undefined;\n\n this.processedTrack = this._outputFrame.captureStream(targetFps).getTracks()[0];\n this.processedTrack.enabled = this.mediaStreamTrack.enabled;\n this.processor = processor;\n\n this._processorEventObserver.emit('add', {\n processor,\n captureHeight: height,\n captureWidth: width,\n inputFrameRate: frameRate,\n isRemoteVideoTrack: this.toString().includes('RemoteVideoTrack'),\n inputFrameBufferType,\n outputFrameBufferContextType\n });\n this._updateElementsMediaStreamTrack();\n this._captureFrames();\n return this;\n }\n\n /**\n * Create an HTMLVideoElement and attach the {@link VideoTrack} to it.\n *\n * The HTMLVideoElement's srcObject will be set to a new\n * MediaStream containing the {@link VideoTrack}'s MediaStreamTrack.\n *\n * @returns {HTMLVideoElement} videoElement\n * @example\n * const Video = require('twilio-video');\n *\n * Video.createLocalVideoTrack().then(function(videoTrack) {\n * const videoElement = videoTrack.attach();\n * document.body.appendChild(videoElement);\n * });\n *//**\n * Attach the {@link VideoTrack} to an existing HTMLMediaElement. The\n * HTMLMediaElement could be an HTMLAudioElement or an HTMLVideoElement.\n *\n * If the HTMLMediaElement's srcObject is not set to a MediaStream,\n * this method sets it to a new MediaStream containing the {@link VideoTrack}'s\n * MediaStreamTrack; otherwise, it adds the {@link MediaTrack}'s\n * MediaStreamTrack to the existing MediaStream. Finally, if there are any other\n * MediaStreamTracks of the same kind on the MediaStream, this method removes\n * them.\n *\n * @param {HTMLMediaElement} mediaElement - The HTMLMediaElement to attach to\n * @returns {HTMLMediaElement} mediaElement\n * @example\n * const Video = require('twilio-video');\n *\n * const videoElement = document.createElement('video');\n * document.body.appendChild(videoElement);\n *\n * Video.createLocalVideoTrack().then(function(videoTrack) {\n * videoTrack.attach(videoElement);\n * });\n *//**\n * Attach the {@link VideoTrack} to an HTMLMediaElement selected by\n * document.querySelector. The HTMLMediaElement could be an\n * HTMLAudioElement or an HTMLVideoElement.\n *\n * If the HTMLMediaElement's srcObject is not set to a MediaStream,\n * this method sets it to a new MediaStream containing the {@link VideoTrack}'s\n * MediaStreamTrack; otherwise, it adds the {@link VideoTrack}'s\n * MediaStreamTrack to the existing MediaStream. Finally, if there are any other\n * MediaStreamTracks of the same kind on the MediaStream, this method removes\n * them.\n *\n * @param {string} selector - A query selector for the HTMLMediaElement to\n * attach to\n * @returns {HTMLMediaElement} mediaElement\n * @example\n * const Video = require('twilio-video');\n *\n * const videoElement = document.createElement('video');\n * videoElement.id = 'my-video-element';\n * document.body.appendChild(videoElement);\n *\n * Video.createLocalVideoTrack().then(function(track) {\n * track.attach('#my-video-element');\n * });\n */\n attach() {\n const result = super.attach.apply(this, arguments);\n if (this.processor) {\n this._captureFrames();\n }\n return result;\n }\n\n /**\n * Detach the {@link VideoTrack} from all previously attached HTMLMediaElements.\n * @returns {Array} mediaElements\n * @example\n * const mediaElements = videoTrack.detach();\n * mediaElements.forEach(mediaElement => mediaElement.remove());\n *//**\n * Detach the {@link VideoTrack} from a previously attached HTMLMediaElement.\n * @param {HTMLMediaElement} mediaElement - One of the HTMLMediaElements to\n * which the {@link VideoTrack} is attached\n * @returns {HTMLMediaElement} mediaElement\n * @example\n * const videoElement = document.getElementById('my-video-element');\n * videoTrack.detach(videoElement).remove();\n *//**\n * Detach the {@link VideoTrack} from a previously attached HTMLMediaElement\n * specified by document.querySelector.\n * @param {string} selector - The query selector of HTMLMediaElement to which\n * the {@link VideoTrack} is attached\n * @returns {HTMLMediaElement} mediaElement\n * @example\n * videoTrack.detach('#my-video-element').remove();\n */\n detach() {\n return super.detach.apply(this, arguments);\n }\n\n /**\n * Remove the previously added {@link VideoProcessor} using `addProcessor` API.\n * @param {VideoProcessor} processor - The {@link VideoProcessor} to remove.\n * @returns {this}\n * @example\n * class GrayScaleProcessor {\n * constructor(percentage) {\n * this.percentage = percentage;\n * }\n * processFrame(inputFrameBuffer, outputFrameBuffer) {\n * const context = outputFrameBuffer.getContext('2d');\n * context.filter = `grayscale(${this.percentage}%)`;\n * context.drawImage(inputFrameBuffer, 0, 0, inputFrameBuffer.width, inputFrameBuffer.height);\n * }\n * }\n *\n * Video.createLocalVideoTrack().then(function(videoTrack) {\n * const grayScaleProcessor = new GrayScaleProcessor(100);\n * videoTrack.addProcessor(grayScaleProcessor);\n * document.getElementById('remove-button').onclick = () => videoTrack.removeProcessor(grayScaleProcessor);\n * });\n */\n removeProcessor(processor) {\n if (!processor) {\n throw new Error('Received an invalid VideoProcessor from removeProcessor.');\n }\n if (!this.processor) {\n throw new Error('No existing VideoProcessor detected.');\n }\n if (processor !== this.processor) {\n throw new Error('The provided VideoProcessor is different than the existing one.');\n }\n\n this._processorEventObserver.emit('remove');\n this._log.debug('Removing VideoProcessor from the VideoTrack', processor);\n clearTimeout(this._captureTimeoutId);\n this.mediaStreamTrack.removeEventListener('unmute', this._unmuteHandler);\n this._processorOptions = {};\n this._unmuteHandler = null;\n this._isCapturing = false;\n\n this.processor = null;\n this.processedTrack = null;\n this._inputFrame = null;\n this._outputFrame = null;\n\n this._updateElementsMediaStreamTrack();\n return this;\n }\n}\n\nVideoTrack.DIMENSIONS_CHANGED = 'dimensionsChanged';\n\nfunction dimensionsChanged(track, elem) {\n return track.dimensions.width !== elem.videoWidth\n || track.dimensions.height !== elem.videoHeight;\n}\n\n/**\n * A {@link VideoTrack}'s width and height.\n * @typedef {object} VideoTrack.Dimensions\n * @property {?number} width - The {@link VideoTrack}'s width or null if the\n * {@link VideoTrack} has not yet started\n * @property {?number} height - The {@link VideoTrack}'s height or null if the\n * {@link VideoTrack} has not yet started\n */\n\n/**\n * A {@link VideoProcessor}, when added via {@link VideoTrack#addProcessor},\n * is used to process incoming video frames before\n * sending to the encoder or renderer.\n * @typedef {object} VideoProcessor\n * @property {function} processFrame - A callback to receive input and output frame buffers for processing.\n * The input frame buffer contains the original video frame which can be used for additional processing\n * such as applying filters to it. The output frame buffer is used to receive the processed video frame\n * before sending to the encoder or renderer.\n *\n * Any exception raised (either synchronously or asynchronously) in `processFrame` will result in the frame being dropped.\n * This callback has the following signature:

\n * processFrame(
\n *   inputFrameBuffer: OffscreenCanvas | HTMLCanvasElement | HTMLVideoElement,
\n *   outputFrameBuffer: HTMLCanvasElement
\n * ): Promise<void> | void;\n *\n * @example\n * class GrayScaleProcessor {\n * constructor(percentage) {\n * this.percentage = percentage;\n * }\n * processFrame(inputFrameBuffer, outputFrameBuffer) {\n * const context = outputFrameBuffer.getContext('2d');\n * context.filter = `grayscale(${this.percentage}%)`;\n * context.drawImage(inputFrameBuffer, 0, 0, inputFrameBuffer.width, inputFrameBuffer.height);\n * }\n * }\n */\n\n/**\n * Possible options to provide to {@link LocalVideoTrack#addProcessor} and {@link RemoteVideoTrack#addProcessor}.\n * @typedef {object} AddProcessorOptions\n * @property {string} [inputFrameBufferType=\"offscreencanvas\"] - This option allows you to specify what kind of input you want to receive in your\n * Video Processor. The default is `offscreencanvas` and will fallback to a regular `canvas` if the browser does not support it.\n * Possible values include the following.\n *
\n *
\n * `offscreencanvas` - Your Video Processor will receive an [OffscreenCanvas](https://developer.mozilla.org/en-US/docs/Web/API/OffscreenCanvas)\n * which is good for canvas-related processing that can be rendered off screen.\n *
\n *
\n * `canvas` - Your Video Processor will receive an [HTMLCanvasElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement).\n * This is recommended on browsers that doesn't support `OffscreenCanvas`, or if you need to render the frame on the screen.\n *
\n *
\n * `video` - Your Video Processor will receive an [HTMLVideoElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement).\n * Use this option if you are processing the frame using WebGL or if you only need to [draw](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/drawImage)\n * the frame directly to your output canvas.\n * @property {string} [outputFrameBufferContextType=\"2d\"] - The SDK needs the [context type](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/getContext)\n * that your Video Processor uses in order to properly generate the processed track. For example, if your Video Processor uses WebGL2 (`canvas.getContext('webgl2')`),\n * you should set `outputFrameBufferContextType` to `webgl2`. Or if you're using Canvas 2D processing (`canvas.getContext('2d')`),\n * you should set `outputFrameBufferContextType` to `2d`.\n */\n\n/**\n * The {@link VideoTrack}'s dimensions changed.\n * @param {VideoTrack} track - The {@link VideoTrack} whose dimensions changed\n * @event VideoTrack#dimensionsChanged\n */\n\n/**\n * The {@link VideoTrack} was disabled, i.e. \"paused\".\n * @param {VideoTrack} track - The {@link VideoTrack} that was disabled\n * @event VideoTrack#disabled\n */\n\n/**\n * The {@link VideoTrack} was enabled, i.e. \"unpaused\".\n * @param {VideoTrack} track - The {@link VideoTrack} that was enabled\n * @event VideoTrack#enabled\n */\n\n/**\n * The {@link VideoTrack} started. This means there is enough video data to\n * begin playback.\n * @param {VideoTrack} track - The {@link VideoTrack} that started\n * @event VideoTrack#started\n */\n\nmodule.exports = VideoTrack;\n","'use strict';\n\nconst { isIOS } = require('../../util/browserdetection');\nconst detectSilentVideo = require('../../util/detectsilentvideo');\nconst mixinLocalMediaTrack = require('./localmediatrack');\nconst VideoTrack = require('./videotrack');\n\nconst LocalMediaVideoTrack = mixinLocalMediaTrack(VideoTrack);\n\n/**\n * A {@link LocalVideoTrack} is a {@link VideoTrack} representing video that\n * your {@link LocalParticipant} can publish to a {@link Room}. It can be\n * enabled and disabled with {@link LocalVideoTrack#enable} and\n * {@link LocalVideoTrack#disable} or stopped completely with\n * {@link LocalVideoTrack#stop}.\n * @extends VideoTrack\n * @property {Track.ID} id - The {@link LocalVideoTrack}'s ID\n * @property {boolean} isMuted - Whether or not the video source has stopped sending frames to the\n * {@link LocalVideoTrack}; This can happen when the camera is taken over by another application,\n * mainly on mobile devices; When this property toggles, then muted and unmuted\n * events are fired appropriately\n * @property {boolean} isStopped - Whether or not the {@link LocalVideoTrack} is\n * stopped\n * @emits LocalVideoTrack#disabled\n * @emits LocalVideoTrack#enabled\n * @emits LocalVideoTrack#muted\n * @emits LocalVideoTrack#started\n * @emits LocalVideoTrack#stopped\n * @emits LocalVideoTrack#unmuted\n */\nclass LocalVideoTrack extends LocalMediaVideoTrack {\n /**\n * Construct a {@link LocalVideoTrack} from a MediaStreamTrack.\n * @param {MediaStreamTrack} mediaStreamTrack - The underlying MediaStreamTrack\n * @param {LocalTrackOptions} [options] - {@link LocalTrack} options\n */\n constructor(mediaStreamTrack, options) {\n options = Object.assign({\n workaroundSilentLocalVideo: isIOS()\n && typeof document !== 'undefined'\n && typeof document.createElement === 'function'\n }, options);\n\n super(mediaStreamTrack, options);\n\n Object.defineProperties(this, {\n _workaroundSilentLocalVideo: {\n value: options.workaroundSilentLocalVideo\n ? workaroundSilentLocalVideo\n : null\n },\n _workaroundSilentLocalVideoCleanup: {\n value: null,\n writable: true\n }\n });\n\n // NOTE(mmalavalli): In iOS Safari, we work around a bug where local video\n // MediaStreamTracks are silent (even though they are enabled, live and unmuted)\n // after accepting/rejecting a phone call.\n if (this._workaroundSilentLocalVideo) {\n this._workaroundSilentLocalVideoCleanup = this._workaroundSilentLocalVideo(this, document);\n }\n }\n\n toString() {\n return `[LocalVideoTrack #${this._instanceId}: ${this.id}]`;\n }\n\n /**\n * @private\n */\n _checkIfCanCaptureFrames() {\n return super._checkIfCanCaptureFrames.call(this, this._trackSender.isPublishing);\n }\n\n /**\n * @private\n */\n _end() {\n return super._end.apply(this, arguments);\n }\n\n /**\n * @private\n */\n _setSenderMediaStreamTrack(useProcessed) {\n const unprocessedTrack = this.mediaStreamTrack;\n const mediaStreamTrack = useProcessed ? this.processedTrack : unprocessedTrack;\n\n return this._trackSender.setMediaStreamTrack(mediaStreamTrack)\n .catch(error => this._log.warn(\n 'setMediaStreamTrack failed on LocalVideoTrack RTCRtpSender', { error, mediaStreamTrack }))\n .then(() => {\n this._unprocessedTrack = useProcessed ? unprocessedTrack : null;\n });\n }\n\n /**\n * Add a {@link VideoProcessor} to allow for custom processing of video frames belonging to a VideoTrack.\n * @param {VideoProcessor} processor - The {@link VideoProcessor} to use.\n * @param {AddProcessorOptions} [options] - {@link AddProcessorOptions} to provide.\n * @returns {this}\n * @example\n * class GrayScaleProcessor {\n * constructor(percentage) {\n * this.percentage = percentage;\n * }\n * processFrame(inputFrameBuffer, outputFrameBuffer) {\n * const context = outputFrameBuffer.getContext('2d');\n * context.filter = `grayscale(${this.percentage}%)`;\n * context.drawImage(inputFrameBuffer, 0, 0, inputFrameBuffer.width, inputFrameBuffer.height);\n * }\n * }\n *\n * const localVideoTrack = Array.from(room.localParticipant.videoTracks.values())[0].track;\n * localVideoTrack.addProcessor(new GrayScaleProcessor(100));\n */\n addProcessor() {\n this._log.debug('Adding VideoProcessor to the LocalVideoTrack');\n const result = super.addProcessor.apply(this, arguments);\n\n if (!this.processedTrack) {\n return this._log.warn('Unable to add a VideoProcessor to the LocalVideoTrack');\n }\n\n this._log.debug('Updating LocalVideoTrack\\'s MediaStreamTrack with the processed MediaStreamTrack', this.processedTrack);\n this._setSenderMediaStreamTrack(true);\n\n return result;\n }\n\n /**\n * Remove the previously added {@link VideoProcessor} using `addProcessor` API.\n * @param {VideoProcessor} processor - The {@link VideoProcessor} to remove.\n * @returns {this}\n * @example\n * class GrayScaleProcessor {\n * constructor(percentage) {\n * this.percentage = percentage;\n * }\n * processFrame(inputFrameBuffer, outputFrameBuffer) {\n * const context = outputFrameBuffer.getContext('2d');\n * context.filter = `grayscale(${this.percentage}%)`;\n * context.drawImage(inputFrameBuffer, 0, 0, inputFrameBuffer.width, inputFrameBuffer.height);\n * }\n * }\n *\n * const localVideoTrack = Array.from(room.localParticipant.videoTracks.values())[0].track;\n * const grayScaleProcessor = new GrayScaleProcessor(100);\n * localVideoTrack.addProcessor(grayScaleProcessor);\n *\n * document.getElementById('remove-button').onclick = () => localVideoTrack.removeProcessor(grayScaleProcessor);\n */\n removeProcessor() {\n this._log.debug('Removing VideoProcessor from the LocalVideoTrack');\n const result = super.removeProcessor.apply(this, arguments);\n\n this._log.debug('Updating LocalVideoTrack\\'s MediaStreamTrack with the original MediaStreamTrack');\n this._setSenderMediaStreamTrack()\n .then(() => this._updateElementsMediaStreamTrack());\n\n return result;\n }\n\n /**\n * Disable the {@link LocalVideoTrack}. This is equivalent to pausing a video source.\n * If a {@link VideoProcessor} is added, then processedTrack is also disabled.\n * @returns {this}\n * @fires VideoTrack#disabled\n */\n disable() {\n const result = super.disable.apply(this, arguments);\n if (this.processedTrack) {\n this.processedTrack.enabled = false;\n }\n return result;\n }\n\n /**\n * Enable the {@link LocalVideoTrack}. This is equivalent to unpausing the video source.\n * If a {@link VideoProcessor} is added, then processedTrack is also enabled.\n * @returns {this}\n * @fires VideoTrack#enabled\n *//**\n * Enable or disable the {@link LocalVideoTrack}. This is equivalent to unpausing or pausing\n * the video source respectively. If a {@link VideoProcessor} is added, then processedTrack\n * is also enabled or disabled.\n * @param {boolean} [enabled] - Specify false to disable the\n * {@link LocalVideoTrack}\n * @returns {this}\n * @fires VideoTrack#disabled\n * @fires VideoTrack#enabled\n */\n enable(enabled = true) {\n const result = super.enable.apply(this, arguments);\n if (this.processedTrack) {\n this.processedTrack.enabled = enabled;\n\n if (enabled) {\n this._captureFrames();\n this._log.debug('Updating LocalVideoTrack\\'s MediaStreamTrack with the processed MediaStreamTrack', this.processedTrack);\n this._setSenderMediaStreamTrack(true);\n }\n }\n return result;\n }\n\n /**\n * Restart the {@link LocalVideoTrack}. This stops the existing MediaStreamTrack\n * and creates a new MediaStreamTrack. If the {@link LocalVideoTrack} is being published\n * to a {@link Room}, then all the {@link RemoteParticipant}s will start receiving media\n * from the newly created MediaStreamTrack. You can access the new MediaStreamTrack via\n * the mediaStreamTrack property. If you want to listen to events on\n * the MediaStreamTrack directly, please do so in the \"started\" event handler. Also,\n * the {@link LocalVideoTrack}'s ID is no longer guaranteed to be the same as the\n * underlying MediaStreamTrack's ID.\n * @param {MediaTrackConstraints} [constraints] - The optional MediaTrackConstraints\n * for restarting the {@link LocalVideoTrack}; If not specified, then the current MediaTrackConstraints\n * will be used; If {} (empty object) is specified, then the default MediaTrackConstraints\n * will be used\n * @returns {Promise} Rejects with a TypeError if the {@link LocalVideoTrack} was not created\n * using an one of createLocalVideoTrack, createLocalTracks or connect;\n * Also rejects with the DOMException\n * raised by getUserMedia when it fails\n * @fires LocalVideoTrack#stopped\n * @fires LocalVideoTrack#started\n * @example\n * const { connect, createLocalVideoTrack } = require('twilio-video');\n *\n * // Create a LocalVideoTrack that captures video from the front-facing camera.\n * createLocalVideoTrack({ facingMode: 'user' }).then(function(localVideoTrack) {\n * return connect('token', {\n * name: 'my-cool-room',\n * tracks: [localVideoTrack]\n * });\n * }).then(function(room) {\n * // Restart the LocalVideoTrack to capture video from the back-facing camera.\n * const localVideoTrack = Array.from(room.localParticipant.videoTracks.values())[0].track;\n * return localVideoTrack.restart({ facingMode: 'environment' });\n * });\n */\n restart() {\n if (this._workaroundSilentLocalVideoCleanup) {\n this._workaroundSilentLocalVideoCleanup();\n this._workaroundSilentLocalVideoCleanup = null;\n }\n\n const promise = super.restart.apply(this, arguments);\n if (this.processor) {\n promise.then(() => {\n this._restartProcessor();\n });\n }\n\n if (this._workaroundSilentLocalVideo) {\n promise.finally(() => {\n this._workaroundSilentLocalVideoCleanup = this._workaroundSilentLocalVideo(this, document);\n });\n }\n return promise;\n }\n\n /**\n * Calls stop on the underlying MediaStreamTrack. If you choose to stop a\n * {@link LocalVideoTrack}, you should unpublish it after stopping.\n * @returns {this}\n * @fires LocalVideoTrack#stopped\n */\n stop() {\n if (this._workaroundSilentLocalVideoCleanup) {\n this._workaroundSilentLocalVideoCleanup();\n this._workaroundSilentLocalVideoCleanup = null;\n }\n return super.stop.apply(this, arguments);\n }\n}\n\n/**\n * Work around a bug where local video MediaStreamTracks are silent (even though\n * they are enabled, live and unmuted) after accepting/rejecting a phone call.\n * @private\n * @param {LocalVideoTrack} localVideoTrack\n * @param {HTMLDocument} doc\n * @returns {function} Cleans up listeners attached by the workaround\n */\nfunction workaroundSilentLocalVideo(localVideoTrack, doc) {\n const { _log: log } = localVideoTrack;\n let { _dummyEl: el, mediaStreamTrack } = localVideoTrack;\n\n function onUnmute() {\n if (!localVideoTrack.isEnabled) {\n return;\n }\n log.info('Unmuted, checking silence');\n\n // The dummy element is paused, so play it and then detect silence.\n el.play().then(() => detectSilentVideo(el, doc)).then(isSilent => {\n if (!isSilent) {\n log.info('Non-silent frames detected, so no need to restart');\n return;\n }\n log.warn('Silence detected, restarting');\n\n // NOTE(mmalavalli): If we try and restart a silent MediaStreamTrack\n // without stopping it first, then a NotReadableError is raised. Hence,\n // we stop the MediaStreamTrack here.\n localVideoTrack._stop();\n\n // Restart the LocalVideoTrack.\n // eslint-disable-next-line consistent-return\n return localVideoTrack._restart();\n }).catch(error => {\n log.warn('Failed to detect silence and restart:', error);\n }).finally(() => {\n // If silent frames were not detected, then pause the dummy element again,\n // if there is no processed track.\n el = localVideoTrack._dummyEl;\n if (el && !el.paused && !localVideoTrack.processedTrack) {\n el.pause();\n }\n\n // Reset the unmute handler.\n mediaStreamTrack.removeEventListener('unmute', onUnmute);\n mediaStreamTrack = localVideoTrack.mediaStreamTrack;\n mediaStreamTrack.addEventListener('unmute', onUnmute);\n });\n }\n\n // Set the unmute handler.\n mediaStreamTrack.addEventListener('unmute', onUnmute);\n\n return () => {\n mediaStreamTrack.removeEventListener('unmute', onUnmute);\n };\n}\n\n/**\n * The {@link LocalVideoTrack} was disabled, i.e. the video source was paused by the user.\n * @param {LocalVideoTrack} track - The {@link LocalVideoTrack} that was\n * disabled\n * @event LocalVideoTrack#disabled\n */\n\n/**\n * The {@link LocalVideoTrack} was enabled, i.e. the video source was unpaused by the user.\n * @param {LocalVideoTrack} track - The {@link LocalVideoTrack} that was enabled\n * @event LocalVideoTrack#enabled\n */\n\n/**\n * The {@link LocalVideoTrack} was muted because the video source stopped sending frames, most\n * likely due to another application taking said video source, especially on mobile devices.\n * @param {LocalVideoTrack} track - The {@link LocalVideoTrack} that was muted\n * @event LocalVideoTrack#muted\n */\n\n/**\n * The {@link LocalVideoTrack} started. This means there is enough video data\n * to begin playback.\n * @param {LocalVideoTrack} track - The {@link LocalVideoTrack} that started\n * @event LocalVideoTrack#started\n */\n\n/**\n * The {@link LocalVideoTrack} stopped, either because {@link LocalVideoTrack#stop}\n * or {@link LocalVideoTrack#restart} was called or because the underlying\n * MediaStreamTrack ended.\n * @param {LocalVideoTrack} track - The {@link LocalVideoTrack} that stopped\n * @event LocalVideoTrack#stopped\n */\n\n/**\n * The {@link LocalVideoTrack} was unmuted because the video source resumed sending frames,\n * most likely due to the application that took over the said video source has released it\n * back to the application, especially on mobile devices. This event is also fired when\n * {@link LocalVideoTrack#restart} is called on a muted {@link LocalVideoTrack} with a\n * new video source.\n * @param {LocalVideoTrack} track - The {@link LocalVideoTrack} that was unmuted\n * @event LocalVideoTrack#unmuted\n */\n\nmodule.exports = LocalVideoTrack;\n","// eslint-disable-next-line no-warning-comments\n// TODO(mroberts): Remove this when we go to the next major version. This is\n// only in place so that we can support ES6 classes without requiring `new`.\n'use strict';\n\nconst inherits = require('../../../vendor/inherits');\n\nconst LocalVideoTrackClass = require('../localvideotrack');\n\nfunction LocalVideoTrack(mediaStreamTrack, options) {\n const track = new LocalVideoTrackClass(mediaStreamTrack, options);\n Object.setPrototypeOf(track, LocalVideoTrack.prototype);\n return track;\n}\n\ninherits(LocalVideoTrack, LocalVideoTrackClass);\n\nmodule.exports = LocalVideoTrack;\n","'use strict';\n\nconst TrackTransceiver = require('../transceiver');\n\n/**\n * A {@link DataTrackTransceiver} represents either one or more local\n * RTCDataChannels or a single remote RTCDataChannel. It can be used to send or\n * receive data.\n * @extends TrackTransceiver\n * @property {string} id\n * @property {string} kind - \"data\"\n * @property {?number} maxPacketLifeTime\n * @property {?number} maxRetransmits\n * @property {boolean} ordered\n */\nclass DataTrackTransceiver extends TrackTransceiver {\n /**\n * Construct a {@link DataTrackTransceiver}.\n * @param {string} id\n * @param {?number} maxPacketLifeTime\n * @param {?number} maxRetransmits\n * @param {boolean} ordered\n */\n constructor(id, maxPacketLifeTime, maxRetransmits, ordered) {\n super(id, 'data');\n Object.defineProperties(this, {\n maxPacketLifeTime: {\n enumerable: true,\n value: maxPacketLifeTime\n },\n maxRetransmits: {\n enumerable: true,\n value: maxRetransmits\n },\n ordered: {\n enumerable: true,\n value: ordered\n }\n });\n }\n}\n\nmodule.exports = DataTrackTransceiver;\n","'use strict';\n\nconst DataTrackTransceiver = require('./transceiver');\nconst makeUUID = require('../util').makeUUID;\n\n/**\n * A {@link DataTrackSender} represents a {@link DataTrackTransceiver} over\n * which data can be sent. Internally, it uses a collection of RTCDataChannels\n * to send data.\n * @extends DataTrackTransceiver\n */\nclass DataTrackSender extends DataTrackTransceiver {\n /**\n * Construct a {@link DataTrackSender}.\n * @param {?number} maxPacketLifeTime\n * @param {?number} maxRetransmits\n * @param {boolean} ordered\n */\n constructor(maxPacketLifeTime, maxRetransmtis, ordered) {\n super(makeUUID(), maxPacketLifeTime, maxRetransmtis, ordered);\n Object.defineProperties(this, {\n _clones: {\n value: new Set()\n },\n _dataChannels: {\n value: new Set()\n }\n });\n }\n\n /**\n * Add a cloned {@link DataTrackSender}.\n * @private\n * @returns {void}\n */\n _addClone(clone) {\n this._clones.add(clone);\n }\n\n /**\n * Remove a cloned {@link DataTrackSender}.\n * @returns {void}\n */\n removeClone(clone) {\n this._clones.delete(clone);\n }\n\n /**\n * Add an RTCDataChannel to the {@link DataTrackSender}.\n * @param {RTCDataChannel} dataChannel\n * @returns {this}\n */\n addDataChannel(dataChannel) {\n this._dataChannels.add(dataChannel);\n return this;\n }\n\n\n /**\n * Return a new {@link DataTrackSender}. Any message sent over this\n * {@link DataTrackSender} will also be sent over the clone. Whenever this\n * {@link DataTrackSender} is stopped, so to will the clone.\n * @returns {DataTrackSender}\n */\n clone() {\n const clone = new DataTrackSender(\n this.maxPacketLifeTime,\n this.maxRetransmits,\n this.ordered);\n this._addClone(clone);\n clone.once('stopped', () => this.removeClone(clone));\n return clone;\n }\n\n /**\n * Remove an RTCDataChannel from the {@link DataTrackSender}.\n * @param {RTCDataChannel} dataChannel\n * @returns {this}\n */\n removeDataChannel(dataChannel) {\n this._dataChannels.delete(dataChannel);\n return this;\n }\n\n /**\n * Send data over the {@link DataTrackSender}. Internally, this calls\n * send over each of the underlying RTCDataChannels.\n * @param {string|Blob|ArrayBuffer|ArrayBufferView} data\n * @returns {this}\n */\n send(data) {\n this._dataChannels.forEach(dataChannel => {\n try {\n dataChannel.send(data);\n } catch (error) {\n // Do nothing.\n }\n });\n this._clones.forEach(clone => {\n try {\n clone.send(data);\n } catch (error) {\n // Do nothing.\n }\n });\n return this;\n }\n\n stop() {\n this._dataChannels.forEach(dataChannel => dataChannel.close());\n this._clones.forEach(clone => clone.stop());\n super.stop();\n }\n}\n\nmodule.exports = DataTrackSender;\n","'use strict';\n\nconst Track = require('./');\nconst DefaultDataTrackSender = require('../../data/sender');\n\n/**\n * A {@link LocalDataTrack} is a {@link Track} representing data that your\n * {@link LocalParticipant} can publish to a {@link Room}.\n * @extends Track\n * @property {Track.ID} id - The {@link LocalDataTrack}'s ID\n * @property {Track.Kind} kind - \"data\"\n * @property {?number} maxPacketLifeTime - If non-null, this represents a time\n * limit (in milliseconds) during which the {@link LocalDataTrack} will send\n * or re-send data if not acknowledged on the underlying RTCDataChannel(s).\n * @property {?number} maxRetransmits - If non-null, this represents the number\n * of times the {@link LocalDataTrack} will resend data if not successfully\n * delivered on the underlying RTCDataChannel(s).\n * @property {boolean} ordered - true if data on the {@link LocalDataTrack} is\n * guaranteed to be sent in order.\n * @property {boolean} reliable - This is true if both\n * maxPacketLifeTime and maxRetransmits are set to\n * null. In other words, if this is true, there is no bound on packet lifetime\n * or the number of times the {@link LocalDataTrack} will attempt to send\n * data, ensuring \"reliable\" transmission.\n * @example\n * var Video = require('twilio-video');\n *\n * var localDataTrack = new Video.LocalDataTrack();\n * window.addEventListener('mousemove', function(event) {\n * localDataTrack.send(JSON.stringify({\n * x: e.clientX,\n * y: e.clientY\n * }));\n * });\n *\n * var token1 = getAccessToken();\n * Video.connect(token1, {\n * name: 'my-cool-room',\n * tracks: [localDataTrack]\n * });\n *\n * var token2 = getAccessToken();\n * Video.connect(token2, {\n * name: 'my-cool-room',\n * tracks: []\n * }).then(function(room) {\n * room.on('trackSubscribed', function(track) {\n * track.on('message', function(message) {\n * console.log(JSON.parse(message)); // { x: , y: }\n * });\n * });\n * });\n */\nclass LocalDataTrack extends Track {\n /**\n * Construct a {@link LocalDataTrack}.\n * @param {LocalDataTrackOptions} [options] - {@link LocalDataTrack} options\n */\n constructor(options) {\n options = Object.assign({\n DataTrackSender: DefaultDataTrackSender,\n maxPacketLifeTime: null,\n maxRetransmits: null,\n ordered: true\n }, options);\n\n const DataTrackSender = options.DataTrackSender;\n const dataTrackSender = new DataTrackSender(\n options.maxPacketLifeTime,\n options.maxRetransmits,\n options.ordered);\n\n super(dataTrackSender.id, 'data', options);\n\n Object.defineProperties(this, {\n _trackSender: {\n value: dataTrackSender\n },\n id: {\n enumerable: true,\n value: dataTrackSender.id\n },\n maxPacketLifeTime: {\n enumerable: true,\n value: options.maxPacketLifeTime\n },\n maxRetransmits: {\n enumerable: true,\n value: options.maxRetransmits\n },\n ordered: {\n enumerable: true,\n value: options.ordered\n },\n reliable: {\n enumerable: true,\n value: options.maxPacketLifeTime === null\n && options.maxRetransmits === null\n }\n });\n }\n\n /**\n * Send a message over the {@link LocalDataTrack}.\n * @param {string|Blob|ArrayBuffer|ArrayBufferView} data\n * @returns {void}\n */\n send(data) {\n this._trackSender.send(data);\n }\n}\n\n/**\n * {@link LocalDataTrack} options\n * @typedef {LocalTrackOptions} LocalDataTrackOptions\n * @property {?number} [maxPacketLifeTime=null] - Set this to limit the time\n * (in milliseconds) during which the LocalDataTrack will send or re-send data\n * if not successfully delivered on the underlying RTCDataChannel(s). It is an\n * error to specify both this and maxRetransmits.\n * @property {?number} [maxRetransmits=null] - Set this to limit the number of\n * times the {@link LocalDataTrack} will send or re-send data if not\n * acknowledged on the underlying RTCDataChannel(s). It is an error to specify\n * both this and maxPacketLifeTime.\n * @property {boolean} [ordered=true] - Set this to false to allow data on the\n * LocalDataTrack to be sent out-of-order.\n */\n\nmodule.exports = LocalDataTrack;\n","// eslint-disable-next-line no-warning-comments\n// TODO(mroberts): Remove this when we go to the next major version. This is\n// only in place so that we can support ES6 classes without requiring `new`.\n'use strict';\n\nconst inherits = require('../../../vendor/inherits');\n\nconst LocalDataTrackClass = require('../localdatatrack');\n\nfunction LocalDataTrack(options) {\n const track = new LocalDataTrackClass(options);\n Object.setPrototypeOf(track, LocalDataTrack.prototype);\n return track;\n}\n\ninherits(LocalDataTrack, LocalDataTrackClass);\n\nmodule.exports = LocalDataTrack;\n","'use strict';\n\nmodule.exports = {\n LocalAudioTrack: require('./localaudiotrack'),\n LocalVideoTrack: require('./localvideotrack'),\n LocalDataTrack: require('./localdatatrack')\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n'use strict';\n\nimport {\n CreateLocalAudioTrackOptions,\n CreateLocalTrackOptions,\n CreateLocalTracksOptions,\n DefaultDeviceCaptureMode,\n LocalTrack,\n NoiseCancellationOptions\n} from '../tsdef';\n\nimport { applyNoiseCancellation } from './media/track/noisecancellationimpl';\n\nconst { buildLogLevels } = require('./util');\nconst { getUserMedia, MediaStreamTrack } = require('./webrtc');\n\nconst {\n LocalAudioTrack,\n LocalDataTrack,\n LocalVideoTrack\n} = require('./media/track/es5');\n\nconst Log = require('./util/log');\nconst { DEFAULT_LOG_LEVEL, DEFAULT_LOGGER_NAME, typeErrors: { INVALID_VALUE } } = require('./util/constants');\nconst workaround180748 = require('./webaudio/workaround180748');\n\n// This is used to make out which createLocalTracks() call a particular Log\n// statement belongs to. Each call to createLocalTracks() increments this\n// counter.\nlet createLocalTrackCalls = 0;\n\n\ntype ExtraLocalTrackOption = CreateLocalTrackOptions & { isCreatedByCreateLocalTracks?: boolean };\ntype ExtraLocalAudioTrackOption = ExtraLocalTrackOption & { defaultDeviceCaptureMode? : DefaultDeviceCaptureMode };\ntype ExtraLocalTrackOptions = { audio: ExtraLocalAudioTrackOption; video: ExtraLocalTrackOption; };\n\ninterface InternalOptions extends CreateLocalTracksOptions {\n getUserMedia: any;\n LocalAudioTrack: any;\n LocalDataTrack: any;\n LocalVideoTrack: any;\n MediaStreamTrack: any;\n Log: any;\n}\n\n/**\n * Request {@link LocalTrack}s. By default, it requests a\n * {@link LocalAudioTrack} and a {@link LocalVideoTrack}.\n * Note that on mobile browsers, the camera can be reserved by only one {@link LocalVideoTrack}\n * at any given time. If you attempt to create a second {@link LocalVideoTrack}, video frames\n * will no longer be supplied to the first {@link LocalVideoTrack}.\n * @alias module:twilio-video.createLocalTracks\n * @param {CreateLocalTracksOptions} [options]\n * @returns {Promise>}\n * @example\n * var Video = require('twilio-video');\n * // Request audio and video tracks\n * Video.createLocalTracks().then(function(localTracks) {\n * var localMediaContainer = document.getElementById('local-media-container-id');\n * localTracks.forEach(function(track) {\n * localMediaContainer.appendChild(track.attach());\n * });\n * });\n * @example\n * var Video = require('twilio-video');\n * // Request just the default audio track\n * Video.createLocalTracks({ audio: true }).then(function(localTracks) {\n * return Video.connect('my-token', {\n * name: 'my-cool-room',\n * tracks: localTracks\n * });\n * });\n * @example\n * var Video = require('twilio-video');\n * // Request the audio and video tracks with custom names\n * Video.createLocalTracks({\n * audio: { name: 'microphone' },\n * video: { name: 'camera' }\n * }).then(function(localTracks) {\n * localTracks.forEach(function(localTrack) {\n * console.log(localTrack.name);\n * });\n * });\n *\n * @example\n * var Video = require('twilio-video');\n * var localTracks;\n *\n * // Pre-acquire tracks to display camera preview.\n * Video.createLocalTracks().then(function(tracks) {\n * localTracks = tracks;\n * var localVideoTrack = localTracks.find(track => track.kind === 'video');\n * divContainer.appendChild(localVideoTrack.attach());\n * })\n *\n * // Later, join the Room with the pre-acquired LocalTracks.\n * Video.connect('token', {\n * name: 'my-cool-room',\n * tracks: localTracks\n * });\n *\n */\nexport async function createLocalTracks(options?: CreateLocalTracksOptions): Promise {\n const isAudioVideoAbsent =\n !(options && ('audio' in options || 'video' in options));\n\n const fullOptions: InternalOptions = {\n audio: isAudioVideoAbsent,\n getUserMedia,\n loggerName: DEFAULT_LOGGER_NAME,\n logLevel: DEFAULT_LOG_LEVEL,\n LocalAudioTrack,\n LocalDataTrack,\n LocalVideoTrack,\n MediaStreamTrack,\n Log,\n video: isAudioVideoAbsent,\n ...options,\n };\n\n const logComponentName = `[createLocalTracks #${++createLocalTrackCalls}]`;\n const logLevels = buildLogLevels(fullOptions.logLevel);\n const log = new fullOptions.Log('default', logComponentName, logLevels, fullOptions.loggerName);\n\n const localTrackOptions = Object.assign({ log }, fullOptions);\n\n // NOTE(mmalavalli): The Room \"name\" in \"options\" was being used\n // as the LocalTrack name in asLocalTrack(). So we pass a copy of\n // \"options\" without the \"name\".\n // NOTE(joma): CreateLocalTracksOptions type does not really have a \"name\" property when used publicly by customers.\n // But we are passing this property when used internally by other JS files.\n // We can update this \"any\" type once those JS files are converted to TS.\n delete (localTrackOptions as any).name;\n\n if (fullOptions.audio === false && fullOptions.video === false) {\n log.info('Neither audio nor video requested, so returning empty LocalTracks');\n return [];\n }\n\n if (fullOptions.tracks) {\n log.info('Adding user-provided LocalTracks');\n log.debug('LocalTracks:', fullOptions.tracks);\n return fullOptions.tracks;\n }\n\n const extraLocalTrackOptions: ExtraLocalTrackOptions = {\n audio: typeof fullOptions.audio === 'object' && fullOptions.audio.name\n ? { name: fullOptions.audio.name }\n : { defaultDeviceCaptureMode: 'auto' },\n video: typeof fullOptions.video === 'object' && fullOptions.video.name\n ? { name: fullOptions.video.name }\n : {}\n };\n\n extraLocalTrackOptions.audio.isCreatedByCreateLocalTracks = true;\n extraLocalTrackOptions.video.isCreatedByCreateLocalTracks = true;\n\n let noiseCancellationOptions: NoiseCancellationOptions | undefined;\n\n if (typeof fullOptions.audio === 'object') {\n if (typeof fullOptions.audio.workaroundWebKitBug1208516 === 'boolean') {\n extraLocalTrackOptions.audio.workaroundWebKitBug1208516 = fullOptions.audio.workaroundWebKitBug1208516;\n }\n\n if ('noiseCancellationOptions' in fullOptions.audio) {\n noiseCancellationOptions = fullOptions.audio.noiseCancellationOptions;\n delete fullOptions.audio.noiseCancellationOptions;\n }\n\n if (!('defaultDeviceCaptureMode' in fullOptions.audio)) {\n extraLocalTrackOptions.audio.defaultDeviceCaptureMode = 'auto';\n } else if (['auto', 'manual'].every(mode => mode !== (fullOptions.audio as CreateLocalAudioTrackOptions).defaultDeviceCaptureMode)) {\n // eslint-disable-next-line new-cap\n throw INVALID_VALUE('CreateLocalAudioTrackOptions.defaultDeviceCaptureMode', ['auto', 'manual']);\n } else {\n extraLocalTrackOptions.audio.defaultDeviceCaptureMode = fullOptions.audio.defaultDeviceCaptureMode;\n }\n }\n\n if (typeof fullOptions.video === 'object' && typeof fullOptions.video.workaroundWebKitBug1208516 === 'boolean') {\n extraLocalTrackOptions.video.workaroundWebKitBug1208516 = fullOptions.video.workaroundWebKitBug1208516;\n }\n\n if (typeof fullOptions.audio === 'object') {\n delete fullOptions.audio.name;\n }\n if (typeof fullOptions.video === 'object') {\n delete fullOptions.video.name;\n }\n\n const mediaStreamConstraints = {\n audio: fullOptions.audio,\n video: fullOptions.video\n };\n\n const workaroundWebKitBug180748 = typeof fullOptions.audio === 'object' && fullOptions.audio.workaroundWebKitBug180748;\n\n try {\n const mediaStream = await (workaroundWebKitBug180748\n ? workaround180748(log, fullOptions.getUserMedia, mediaStreamConstraints)\n : fullOptions.getUserMedia(mediaStreamConstraints));\n\n const mediaStreamTracks = [\n ...mediaStream.getAudioTracks(),\n ...mediaStream.getVideoTracks(),\n ];\n\n log.info('Call to getUserMedia successful; got tracks:', mediaStreamTracks);\n\n return await Promise.all(\n mediaStreamTracks.map(async mediaStreamTrack => {\n if (mediaStreamTrack.kind === 'audio' && noiseCancellationOptions) {\n const { cleanTrack, noiseCancellation } = await applyNoiseCancellation(mediaStreamTrack, noiseCancellationOptions, log);\n return new localTrackOptions.LocalAudioTrack(cleanTrack, {\n ...extraLocalTrackOptions.audio,\n ...localTrackOptions,\n noiseCancellation\n });\n } else if (mediaStreamTrack.kind === 'audio') {\n return new localTrackOptions.LocalAudioTrack(mediaStreamTrack, {\n ...extraLocalTrackOptions.audio,\n ...localTrackOptions,\n });\n }\n return new localTrackOptions.LocalVideoTrack(mediaStreamTrack, {\n ...extraLocalTrackOptions.video,\n ...localTrackOptions,\n });\n })\n );\n } catch (error) {\n log.warn('Call to getUserMedia failed:', error);\n throw error;\n }\n}\n\n/**\n * {@link createLocalTracks} options\n * @typedef {object} CreateLocalTracksOptions\n * @property {boolean|CreateLocalTrackOptions|CreateLocalAudioTrackOptions} [audio=true] - Whether or not to\n * get local audio with getUserMedia when tracks\n * are not provided.\n * @property {LogLevel|LogLevels} [logLevel='warn'] - (deprecated: use [Video.Logger](module-twilio-video.html) instead.\n * See [examples](module-twilio-video.html#.connect) for details)\n * Set the default log verbosity\n * of logging. Passing a {@link LogLevel} string will use the same\n * level for all components. Pass a {@link LogLevels} to set specific log\n * levels.\n * @property {string} [loggerName='twilio-video'] - The name of the logger. Use this name when accessing the logger used by the SDK.\n * See [examples](module-twilio-video.html#.connect) for details.\n * @property {boolean|CreateLocalTrackOptions} [video=true] - Whether or not to\n * get local video with getUserMedia when tracks\n * are not provided.\n */\n","import type { TimeMeasurement } from '../../tsdef/PreflightTypes';\n\nexport class Timer {\n // eslint-disable-next-line no-undefined\n private _end: number | undefined = undefined;\n private _start: number;\n\n constructor() {\n this.start();\n }\n\n start() : this {\n this._start = Date.now();\n return this;\n }\n\n stop(): this {\n this._end = Date.now();\n return this;\n }\n\n getTimeMeasurement() : TimeMeasurement {\n return {\n start: this._start,\n end: this._end,\n // eslint-disable-next-line no-undefined\n duration: this._end === undefined ? undefined : this._end - this._start\n };\n }\n}\n","const r0 = 94.768; // Constant used in computing \"rFactor\".\n// copied from https://code.hq.twilio.com/client/sdk-frd/blob/master/voice/voice-mos-calculation.md\nexport function calculateMOS(rtt: number, jitter: number, fractionLost: number): number {\n // Compute the effective latency.\n const effectiveLatency: number = rtt + (jitter * 2) + 10;\n\n // Compute the initial \"rFactor\" from effective latency.\n let rFactor = 0;\n switch (true) {\n case effectiveLatency < 160:\n rFactor = r0 - (effectiveLatency / 40);\n break;\n case effectiveLatency < 1000:\n rFactor = r0 - ((effectiveLatency - 120) / 10);\n break;\n }\n\n // Adjust \"rFactor\" with the fraction of packets lost.\n switch (true) {\n case fractionLost <= (rFactor / 2.5):\n rFactor = Math.max(rFactor - fractionLost * 2.5, 6.52);\n break;\n default:\n rFactor = 0;\n break;\n }\n\n // Compute MOS from \"rFactor\".\n const mos: number = 1 +\n (0.035 * rFactor) +\n (0.000007 * rFactor) *\n (rFactor - 60) *\n (100 - rFactor);\n\n return mos;\n}\n\nexport function mosToScore(mosValue: number|null|undefined): number {\n let score = 0;\n if (!mosValue) {\n score = 0;\n } else if (mosValue > 4.2) {\n score = 5;\n } else if (mosValue > 4.0) {\n score = 4;\n } else if (mosValue > 3.6) {\n score = 3;\n } else if (mosValue > 3) {\n score = 2;\n } else {\n score = 1;\n }\n return score;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { RTCIceCandidateStats, SelectedIceCandidatePairStats, } from '../../tsdef/PreflightTypes';\nimport type { RTCIceCandidatePairStats } from './rtctypes';\n\ninterface RTCStatsReport {\n [x: string]: any;\n forEach(callbackfn: (value: any, key: string, parent: RTCStatsReport) => void, thisArg?: any): void;\n}\nexport interface CombinedConnectionStats {\n timestamp: number;\n bytesSent: number;\n bytesReceived: number;\n packets: number;\n packetsLost: number;\n roundTripTime: number;\n jitter: number;\n selectedIceCandidatePairStats: SelectedIceCandidatePairStats | null;\n iceCandidateStats: RTCIceCandidateStats[];\n}\n\nfunction getStatValues(report: RTCStatsReport, statName: string, kind: string[], reportTypes: string[]): number[] {\n let results: number[] = [];\n report.forEach(stat => {\n if (\n (reportTypes.length === 0 || reportTypes.includes(stat.type)) &&\n (kind.length === 0 || kind.includes(stat.kind)) &&\n typeof stat[statName] === 'number') {\n results.push(stat[statName]);\n }\n });\n return results;\n}\n\nexport async function getCombinedConnectionStats({ publisher, subscriber }: { publisher: RTCPeerConnection, subscriber: RTCPeerConnection }): Promise {\n const [publisherStats, subscriberStats] = await Promise.all([publisher, subscriber].map(pc => pc.getStats()));\n\n const timestamps = getStatValues(subscriberStats, 'timestamp', ['audio'], ['inbound-rtp']);\n const timestamp = timestamps.length > 0 ? timestamps[0] : 0;\n\n // jitter: subscriber, inbound-rtp, audio\n // Note: chrome has jitter for video, but not Safari.\n // Note: also jitter values are in seconds, but chrome's video jitter values were found to be are too big to be in seconds.\n const jitter = getStatValues(subscriberStats, 'jitter', ['audio'], ['inbound-rtp']).reduce((a, b) => Math.max(a, b), 0);\n\n // packets, packetsLost:\n // subscriber, audio, inbound-rtp,\n // subscriber, video, inbound-rtp\n const packets = getStatValues(subscriberStats, 'packetsReceived', ['audio', 'video'], ['inbound-rtp']).reduce((a, b) => a + b, 0);\n const packetsLost = getStatValues(subscriberStats, 'packetsLost', ['audio', 'video'], ['inbound-rtp']).reduce((a, b) => a + b, 0);\n\n // roundTripTime: publisher, audio, remote-inbound-rtp\n // publisher, video, remote-inbound-rtp\n const trackRoundTripTime = getStatValues(publisherStats, 'roundTripTime', ['audio', 'video'], ['remote-inbound-rtp']).reduce((a, b) => Math.max(a, b), 0);\n\n // currentRoundTripTime. subscriber, 'candidate-pair'\n const currentRoundTripTime = getStatValues(subscriberStats, 'currentRoundTripTime', [], ['candidate-pair']).reduce((a, b) => Math.max(a, b), 0);\n const roundTripTime = (currentRoundTripTime || trackRoundTripTime) * 1000;\n\n const bytesSent = getStatValues(publisherStats, 'bytesSent', [], ['candidate-pair']).reduce((a, b) => a + b, 0);\n const bytesReceived = getStatValues(subscriberStats, 'bytesReceived', [], ['candidate-pair']).reduce((a, b) => a + b, 0);\n\n const selectedIceCandidatePairStats = extractSelectedActiveCandidatePair(subscriberStats);\n\n const iceCandidateStats: RTCIceCandidateStats[] = [];\n subscriberStats.forEach(stat => {\n if (stat.type === 'local-candidate' || stat.type === 'remote-candidate') {\n iceCandidateStats.push(makeStandardCandidateStats(stat));\n }\n });\n return { timestamp, jitter, packets, packetsLost, roundTripTime, bytesSent, bytesReceived, selectedIceCandidatePairStats, iceCandidateStats };\n}\n\n\nfunction makeStandardCandidateStats(input: any) : RTCIceCandidateStats {\n const standardizedCandidateStatsKeys = [\n { key: 'transportId', type: 'string' },\n { key: 'candidateType', type: 'string' },\n { key: 'port', altKeys: ['portNumber'], type: 'number' },\n { key: 'address', altKeys: ['ip', 'ipAddress'], type: 'string' },\n { key: 'priority', type: 'number' },\n { key: 'protocol', altKeys: ['transport'], type: 'string' },\n { key: 'url', type: 'string' },\n { key: 'relayProtocol', type: 'string' },\n ];\n\n return standardizedCandidateStatsKeys.reduce(function(report: any, keyInfo) {\n let keysToLookFor = [keyInfo.key];\n if (keyInfo.altKeys) {\n keysToLookFor = keysToLookFor.concat(keyInfo.altKeys);\n }\n var key = keysToLookFor.find(key => key in input);\n if (key && typeof input[key] === keyInfo.type) {\n report[keyInfo.key] = input[key];\n }\n\n return report;\n }, {});\n}\n\nfunction extractSelectedActiveCandidatePair(stats: RTCStatsReport) : SelectedIceCandidatePairStats | null {\n let selectedCandidatePairId:string|null = null;\n const candidatePairs: RTCIceCandidatePairStats[] = [];\n stats.forEach(stat => {\n if (stat.type === 'transport' && stat.selectedCandidatePairId) {\n selectedCandidatePairId = stat.selectedCandidatePairId;\n } else if (stat.type === 'candidate-pair') {\n candidatePairs.push(stat);\n }\n });\n\n const activeCandidatePairStatsFound = candidatePairs.find(pair =>\n // Firefox\n pair.selected ||\n // Spec-compliant way\n (selectedCandidatePairId && pair.id === selectedCandidatePairId)\n );\n\n if (!activeCandidatePairStatsFound) {\n return null;\n }\n\n const activeCandidatePairStats = activeCandidatePairStatsFound as RTCIceCandidatePairStats;\n const activeLocalCandidateStats = stats.get(activeCandidatePairStats.localCandidateId);\n const activeRemoteCandidateStats = stats.get(activeCandidatePairStats.remoteCandidateId);\n if (!activeLocalCandidateStats || !activeRemoteCandidateStats) {\n return null;\n }\n\n return {\n localCandidate: makeStandardCandidateStats(activeLocalCandidateStats),\n remoteCandidate: makeStandardCandidateStats(activeRemoteCandidateStats)\n };\n}\n\n","'use strict';\n\nconst EventEmitter = require('events').EventEmitter;\nconst util = require('./util');\n\n/**\n * {@link StateMachine} represents a state machine. The state machine supports a\n * reentrant locking mechanism to allow asynchronous state transitions to ensure\n * they have not been preempted. Calls to {@link StateMachine#takeLock} are\n * guaranteed to be resolved in FIFO order.\n * @extends EventEmitter\n * @property {boolean} isLocked - whether or not the {@link StateMachine} is\n * locked performing asynchronous state transition\n * @property {string} state - the current state\n * @emits {@link StateMachine#stateChanged}\n */\nclass StateMachine extends EventEmitter {\n /**\n * Construct a {@link StateMachine}.\n * @param {string} initialState - the intiial state\n * @param {object} states\n */\n constructor(initialState, states) {\n super();\n let lock = null;\n let state = initialState;\n states = transformStates(states);\n Object.defineProperties(this, {\n _lock: {\n get() {\n return lock;\n },\n set(_lock) {\n lock = _lock;\n }\n },\n _reachableStates: {\n value: reachable(states)\n },\n _state: {\n get() {\n return state;\n },\n set(_state) {\n state = _state;\n }\n },\n _states: {\n value: states\n },\n _whenDeferreds: {\n value: new Set()\n },\n isLocked: {\n enumerable: true,\n get() {\n return lock !== null;\n }\n },\n state: {\n enumerable: true,\n get() {\n return state;\n }\n }\n });\n\n this.on('stateChanged', state => {\n this._whenDeferreds.forEach(deferred => {\n deferred.when(state, deferred.resolve, deferred.reject);\n });\n });\n }\n\n /**\n * Returns a promise whose executor function is called on each state change.\n * @param {function(state: string, resolve: function, reject: function): void} when\n * @returns {Promise.<*>}\n * @private\n */\n _whenPromise(when) {\n if (typeof when !== 'function') {\n return Promise.reject(new Error('when() executor must be a function'));\n }\n\n const deferred = util.defer();\n\n deferred.when = when;\n this._whenDeferreds.add(deferred);\n\n return deferred.promise.then(payload => {\n this._whenDeferreds.delete(deferred);\n return payload;\n }, error => {\n this._whenDeferreds.delete(deferred);\n throw error;\n });\n }\n\n /**\n * This method takes a lock and passes the {@link StateMachine#Key} to your\n * transition function. You may perform zero or more state transitions in your\n * transition function, but you should check for preemption in each tick. You\n * may also reenter the lock. Once the Promise returned by your transition\n * function resolves or rejects, this method releases the lock it acquired for\n * you.\n * @param {string} name - a name for the lock\n * @param {function(StateMachine#Key): Promise} transitionFunction\n * @returns {Promise}\n */\n // NOTE(mroberts): This method is named after a Haskell function:\n // https://hackage.haskell.org/package/base-4.8.2.0/docs/Control-Exception.html#v:bracket\n bracket(name, transitionFunction) {\n let key;\n const self = this;\n\n function releaseLock(error) {\n if (self.hasLock(key)) {\n self.releaseLockCompletely(key);\n }\n if (error) {\n throw error;\n }\n }\n\n return this.takeLock(name).then(function gotKey(_key) {\n key = _key;\n return transitionFunction(key);\n }).then(function success(result) {\n releaseLock();\n return result;\n }, releaseLock);\n }\n\n /**\n * Check whether or not a {@link StateMachine#Key} matches the lock.\n * @param {StateMachine#Key} key\n * @returns {boolean}\n */\n hasLock(key) {\n return this._lock === key;\n }\n\n /**\n * Preempt any pending state transitions and immediately transition to the new\n * state. If a lock name is specified, take the lock and return the\n * {@link StateMachine#Key}.\n * @param {string} newState\n * @param {?string} [name=null] - a name for the lock\n * @param {Array<*>} [payload=[]]\n * @returns {?StateMachine#Key}\n */\n preempt(newState, name, payload) {\n // 1. Check that the new state is valid.\n if (!isValidTransition(this._states, this.state, newState)) {\n throw new Error(`Cannot transition from \"${this.state}\" to \"${newState}\"`);\n }\n\n // 2. Release the old lock, if any.\n let oldLock;\n if (this.isLocked) {\n oldLock = this._lock;\n this._lock = null;\n }\n\n // 3. Take the lock, if requested.\n let key = null;\n if (name) {\n key = this.takeLockSync(name);\n }\n\n // 4. If a lock wasn't requested, take a \"preemption\" lock in order to\n // maintain FIFO order of those taking locks.\n const preemptionKey = key ? null : this.takeLockSync('preemption');\n\n // 5. Transition.\n this.transition(newState, key || preemptionKey, payload);\n\n // 6. Preempt anyone blocked on the old lock.\n if (oldLock) {\n oldLock.resolve();\n }\n\n // 7. Release the \"preemption\" lock, if we took it.\n if (preemptionKey) {\n this.releaseLock(preemptionKey);\n }\n\n return key;\n }\n\n /**\n * Release a lock. This method succeeds only if the {@link StateMachine} is\n * still locked and has not been preempted.\n * @param {StateMachine#Key} key\n * @throws Error\n */\n releaseLock(key) {\n if (!this.isLocked) {\n throw new Error(`Could not release the lock for ${key.name} because the StateMachine is not locked`);\n } else if (!this.hasLock(key)) {\n throw new Error(`Could not release the lock for ${key.name} because ${this._lock.name} has the lock`);\n }\n if (key.depth === 0) {\n this._lock = null;\n key.resolve();\n } else {\n key.depth--;\n }\n }\n\n /**\n * Release a lock completely, even if it has been reentered. This method\n * succeeds only if the {@link StateMachine} is still locked and has not been\n * preempted.\n * @param {StateMachine#Key} key\n * @throws Error\n */\n releaseLockCompletely(key) {\n if (!this.isLocked) {\n throw new Error(`Could not release the lock for ${key.name} because the StateMachine is not locked`);\n } else if (!this.hasLock(key)) {\n throw new Error(`Could not release the lock for ${key.name} because ${this._lock.name} has the lock`);\n }\n key.depth = 0;\n this._lock = null;\n key.resolve();\n }\n\n /**\n * Take a lock, returning a Promise for the {@link StateMachine#Key}. You should\n * take a lock anytime you intend to perform asynchronous transitions. Calls to\n * this method are guaranteed to be resolved in FIFO order. You may reenter\n * a lock by passing its {@link StateMachine#Key}.\n * @param {string|StateMachine#Key} nameOrKey - a name for the lock or an\n * existing {@link StateMachine#Key}\n * @returns {Promise}\n */\n takeLock(nameOrKey) {\n // Reentrant lock\n if (typeof nameOrKey === 'object') {\n const key = nameOrKey;\n return new Promise(resolve => {\n resolve(this.takeLockSync(key));\n });\n }\n\n // New lock\n const name = nameOrKey;\n if (this.isLocked) {\n var takeLock = this.takeLock.bind(this, name);\n return this._lock.promise.then(takeLock);\n }\n return Promise.resolve(this.takeLockSync(name));\n }\n\n /**\n * Take a lock, returning the {@Link StateMachine#Key}. This method throws if\n * the {@link StateMachine} is locked or the wrong {@link StateMachine#Key} is\n * provided. You may reenter a lock by passing its {@link StateMachine#Key}.\n * @param {string|StateMachine#Key} nameOrKey - a name for the lock or an\n * existing {@link StateMachine#Key}\n * @returns {object}\n * @throws Error\n */\n takeLockSync(nameOrKey) {\n const key = typeof nameOrKey === 'string' ? null : nameOrKey;\n const name = key ? key.name : nameOrKey;\n\n if (key && !this.hasLock(key) || !key && this.isLocked) {\n throw new Error(`Could not take the lock for ${name} because the lock for ${this._lock.name} was not released`);\n }\n\n // Reentrant lock\n if (key) {\n key.depth++;\n return key;\n }\n\n // New lock\n const lock = makeLock(name);\n this._lock = lock;\n return lock;\n }\n\n /**\n * Transition to a new state. If the {@link StateMachine} is locked, you must\n * provide the {@link StateMachine#Key}. An invalid state or the wrong\n * {@link StateMachine#Key} will throw an error.\n * @param {string} newState\n * @param {?StateMachine#Key} [key=null]\n * @param {Array<*>} [payload=[]]\n * @throws {Error}\n */\n transition(newState, key, payload) {\n payload = payload || [];\n\n // 1. If we're locked, required the key.\n if (this.isLocked) {\n if (!key) {\n throw new Error('You must provide the key in order to ' +\n 'transition');\n } else if (!this.hasLock(key)) {\n throw new Error(`Could not transition using the key for ${key.name} because ${this._lock.name} has the lock`);\n }\n } else if (key) {\n throw new Error(`Key provided for ${key.name}, but the StateMachine was not locked (possibly due to preemption)`);\n }\n\n // 2. Check that the new state is valid.\n if (!isValidTransition(this._states, this.state, newState)) {\n throw new Error(`Cannot transition from \"${this.state}\" to \"${newState}\"`);\n }\n\n // 3. Update the state and emit an event.\n this._state = newState;\n this.emit(...['stateChanged', newState].concat(payload));\n }\n\n /**\n * Attempt to transition to a new state. Unlike {@link StateMachine#transition},\n * this method does not throw.\n * @param {string} newState\n * @param {?StateMachine#Key} [key=null]\n * @param {Array<*>} [payload=[]]\n * @returns {boolean}\n */\n tryTransition(newState, key, payload) {\n try {\n this.transition(newState, key, payload);\n } catch (error) {\n return false;\n }\n return true;\n }\n\n /**\n * Return a Promise that resolves when the {@link StateMachine} transitions to\n * the specified state. If the {@link StateMachine} transitions such that the\n * requested state becomes unreachable, the Promise rejects.\n * @param {string} state\n * @returns {Promise}\n */\n when(state) {\n if (this.state === state) {\n return Promise.resolve(this);\n } else if (!isValidTransition(this._reachableStates, this.state, state)) {\n return Promise.reject(createUnreachableError(this.state, state));\n }\n return this._whenPromise((newState, resolve, reject) => {\n if (newState === state) {\n resolve(this);\n } else if (!isValidTransition(this._reachableStates, newState, state)) {\n reject(createUnreachableError(newState, state));\n }\n });\n }\n}\n\n/**\n * @event StateMachine#stateChanged\n * @param {string} newState\n */\n\n/**\n * Check if a transition is valid.\n * @private\n * @param {Map<*, Set<*>>} graph\n * @param {*} from\n * @param {*} to\n * @returns {boolean}\n */\nfunction isValidTransition(graph, from, to) {\n return graph.get(from).has(to);\n}\n\n/**\n * @typedef {object} StateMachine#Key\n */\n\nfunction makeLock(name) {\n const lock = util.defer();\n lock.name = name;\n lock.depth = 0;\n return lock;\n}\n\n/**\n * Compute the transitive closure of a graph (i.e. what nodes are reachable from\n * where).\n * @private\n * @param {Map<*, Set<*>>} graph\n * @returns {Map<*, Set<*>>}\n */\nfunction reachable(graph) {\n return Array.from(graph.keys()).reduce((newGraph, from) => newGraph.set(from, reachableFrom(graph, from)), new Map());\n}\n\n/**\n * Compute the Set of node reachable from a particular node in the graph.\n * @private\n * @param {Map<*, Set<*>>} graph\n * @param {*} from\n * @param {Set<*>} [to]\n * @returns {Set<*>}\n */\nfunction reachableFrom(graph, from, to) {\n to = to || new Set();\n graph.get(from).forEach(node => {\n if (!to.has(node)) {\n to.add(node);\n reachableFrom(graph, node, to).forEach(to.add, to);\n }\n });\n return to;\n}\n\nfunction transformStates(states) {\n const newStates = new Map();\n for (const key in states) {\n newStates.set(key, new Set(states[key]));\n }\n return newStates;\n}\n\n/**\n * Create an \"unreachable state\" Error.\n * @param {string} here\n * @param {string} there\n * @returns {Error}\n */\nfunction createUnreachableError(here, there) {\n return new Error(`\"${there}\" cannot be reached from \"${here}\"`);\n}\n\nmodule.exports = StateMachine;\n","'use strict';\n\n/**\n * Monitor the network connection status to detect interruptions and handoffs.\n */\nclass NetworkMonitor {\n /**\n * Construct a {@link NetworkMonitor}.\n * @param {function} onNetworkChanged\n * @param {*} [options]\n */\n constructor(onNetworkChanged, options) {\n options = Object.assign({\n navigator,\n window,\n }, options);\n\n const nav = options.navigator;\n const connection = nav.connection || { type: null };\n let type = connection.type;\n\n const { _events, _listener, _target } = connection.type ? {\n _events: {\n value: ['change', 'typechange']\n },\n _listener: {\n value: () => {\n const networkChanged = type !== this.type && this.isOnline;\n type = this.type;\n if (networkChanged) {\n onNetworkChanged();\n }\n }\n },\n _target: {\n value: connection\n }\n } : {\n _events: {\n value: ['online']\n },\n _listener: {\n value: onNetworkChanged\n },\n _target: {\n value: options.window\n }\n };\n\n Object.defineProperties(this, {\n isOnline: {\n enumerable: true,\n get() {\n return typeof nav.onLine === 'boolean'\n ? nav.onLine\n : true;\n }\n },\n type: {\n enumerable: true,\n get() {\n return connection.type || null;\n }\n },\n _listener,\n _events,\n _target\n });\n }\n\n /**\n * Start the {@link NetworkMonitor}.\n */\n start() {\n this._events.forEach(event => {\n this._target.addEventListener(event, this._listener);\n });\n }\n\n /**\n * Stop the {@link NetworkMonitor}.\n */\n stop() {\n this._events.forEach(event => {\n this._target.removeEventListener(event, this._listener);\n });\n }\n}\n\nmodule.exports = NetworkMonitor;\n","'use strict';\n\n/**\n * A {@link Timeout} represents a resettable and clearable timeout.\n */\nclass Timeout {\n /**\n * Construct a {@link Timeout}.\n * @param {function} fn - Function to call\n * @param {number} delay - Delay in milliseconds\n * @param {boolean} [autoStart=true] - If true, then start the {@link Timeout}.\n */\n constructor(fn, delay, autoStart = true) {\n Object.defineProperties(this, {\n _delay: {\n value: delay,\n writable: true\n },\n _fn: {\n value: fn\n },\n _timeout: {\n value: null,\n writable: true\n }\n });\n\n if (autoStart) {\n this.start();\n }\n }\n\n /**\n * The {@link Timeout} delay in milliseconds.\n * @property {number}\n */\n get delay() {\n return this._delay;\n }\n\n /**\n * Whether the {@link Timeout} is set.\n * @property {boolean}\n */\n get isSet() {\n return !!this._timeout;\n }\n\n /**\n * Update the {@link Timeout} delay.\n * @param {number} delay\n * @returns {void}\n */\n setDelay(delay) {\n this._delay = delay;\n }\n\n /**\n * Start the {@link Timeout}, if not already started.\n * @returns {void}\n */\n start() {\n if (!this.isSet) {\n this._timeout = setTimeout(() => {\n const fn = this._fn;\n this.clear();\n fn();\n }, this._delay);\n }\n }\n\n /**\n * Clear the {@link Timeout}.\n * @returns {void}\n */\n clear() {\n clearTimeout(this._timeout);\n this._timeout = null;\n }\n\n /**\n * Reset the {@link Timeout}.\n * @returns {void}\n */\n reset() {\n this.clear();\n this.start();\n }\n}\n\nmodule.exports = Timeout;\n","module.exports = WebSocket;\n","'use strict';\n\nconst StateMachine = require('./statemachine');\nconst { buildLogLevels, makeUUID } = require('./util');\nconst Log = require('./util/log');\nconst NetworkMonitor = require('./util/networkmonitor');\nconst Timeout = require('./util/timeout');\n\nlet nInstances = 0;\n\n/*\n TwilioConnection states\n -----------------------\n\n ------------------------------------------\n | |\n | v\n +---------+ +--------------+ +----------+\n | early | ----> | connecting | ----> | closed |\n +---------+ +--------------+ +----------+\n ^ | ^ | ^ ^\n | --------------------- | | | |\n | | --------------------- | | |\n | | | --------------------|------------------ |\n | v | | v |\n +----------+ +--------+ |\n | waiting | --------> | open | ---------------\n +----------+ +--------+\n */\n\nconst states = {\n closed: [],\n connecting: ['closed', 'open', 'waiting'],\n early: ['closed', 'connecting'],\n open: ['closed'],\n waiting: ['closed', 'connecting', 'early', 'open']\n};\n\nconst events = {\n closed: 'close',\n open: 'open',\n waiting: 'waiting'\n};\n\nconst TCMP_VERSION = 2;\n\nconst DEFAULT_MAX_CONSECUTIVE_MISSED_HEARTBEATS = 3;\nconst DEFAULT_MAX_CONSECUTIVE_FAILED_HELLOS = 3;\nconst DEFAULT_MAX_REQUESTED_HEARTBEAT_TIMEOUT = 5000;\nconst DEFAULT_OPEN_TIMEOUT = 15000;\nconst DEFAULT_WELCOME_TIMEOUT = 5000;\nconst OUTGOING_HEARTBEAT_OFFSET = 200;\n\nconst WS_CLOSE_NORMAL = 1000;\nconst WS_CLOSE_WELCOME_TIMEOUT = 3000;\nconst WS_CLOSE_HEARTBEATS_MISSED = 3001;\nconst WS_CLOSE_HELLO_FAILED = 3002;\nconst WS_CLOSE_SEND_FAILED = 3003;\nconst WS_CLOSE_NETWORK_CHANGED = 3004;\nconst WS_CLOSE_BUSY_WAIT = 3005;\nconst WS_CLOSE_SERVER_BUSY = 3006;\nconst WS_CLOSE_OPEN_TIMEOUT = 3007;\n\n// NOTE(joma): If you want to use close code 3008, please increment\n// the close code in test/integration/spec/docker/reconnection.js\n// line number 492.\n\nconst toplevel = globalThis;\nconst WebSocket = toplevel.WebSocket ? toplevel.WebSocket : require('ws');\n\nconst CloseReason = {\n BUSY: 'busy',\n FAILED: 'failed',\n LOCAL: 'local',\n REMOTE: 'remote',\n TIMEOUT: 'timeout'\n};\n\nconst wsCloseCodesToCloseReasons = new Map([\n [WS_CLOSE_WELCOME_TIMEOUT, CloseReason.TIMEOUT],\n [WS_CLOSE_HEARTBEATS_MISSED, CloseReason.TIMEOUT],\n [WS_CLOSE_HELLO_FAILED, CloseReason.FAILED],\n [WS_CLOSE_SEND_FAILED, CloseReason.FAILED],\n [WS_CLOSE_NETWORK_CHANGED, CloseReason.TIMEOUT],\n [WS_CLOSE_SERVER_BUSY, CloseReason.BUSY],\n [WS_CLOSE_OPEN_TIMEOUT, CloseReason.TIMEOUT]\n]);\n\n/**\n * A {@link TwilioConnection} represents a WebSocket connection\n * to a Twilio Connections Messaging Protocol (TCMP) server.\n * @fires TwilioConnection#close\n * @fires TwilioConnection#error\n * @fires TwilioConnection#message\n * @fires TwilioConnection#open\n * @fires TwilioConnection#waiting\n */\nclass TwilioConnection extends StateMachine {\n /**\n * Construct a {@link TwilioConnection}.\n * @param {string} serverUrl - TCMP server url\n * @param {TwilioConnectionOptions} options - {@link TwilioConnection} options\n */\n constructor(serverUrl, options) {\n super('early', states);\n\n options = Object.assign({\n helloBody: null,\n maxConsecutiveFailedHellos: DEFAULT_MAX_CONSECUTIVE_FAILED_HELLOS,\n maxConsecutiveMissedHeartbeats: DEFAULT_MAX_CONSECUTIVE_MISSED_HEARTBEATS,\n requestedHeartbeatTimeout: DEFAULT_MAX_REQUESTED_HEARTBEAT_TIMEOUT,\n openTimeout: DEFAULT_OPEN_TIMEOUT,\n welcomeTimeout: DEFAULT_WELCOME_TIMEOUT,\n Log,\n WebSocket\n }, options);\n\n const logLevels = buildLogLevels(options.logLevel);\n const log = new options.Log('default', this, logLevels, options.loggerName);\n\n const networkMonitor = options.networkMonitor ? new NetworkMonitor(() => {\n const { type } = networkMonitor;\n const reason = `Network changed${type ? ` to ${type}` : ''}`;\n log.debug(reason);\n this._close({ code: WS_CLOSE_NETWORK_CHANGED, reason });\n }) : null;\n\n Object.defineProperties(this, {\n _busyWaitTimeout: {\n value: null,\n writable: true\n },\n _consecutiveHeartbeatsMissed: {\n value: 0,\n writable: true\n },\n _cookie: {\n value: null,\n writable: true\n },\n _eventObserver: {\n value: options.eventObserver\n },\n _heartbeatTimeout: {\n value: null,\n writable: true\n },\n _hellosLeft: {\n value: options.maxConsecutiveFailedHellos,\n writable: true\n },\n _instanceId: {\n value: ++nInstances\n },\n _log: {\n value: log\n },\n _messageQueue: {\n value: []\n },\n _networkMonitor: {\n value: networkMonitor\n },\n _options: {\n value: options\n },\n _openTimeout: {\n value: null,\n writable: true\n },\n _sendHeartbeatTimeout: {\n value: null,\n writable: true\n },\n _serverUrl: {\n value: serverUrl\n },\n _welcomeTimeout: {\n value: null,\n writable: true\n },\n _ws: {\n value: null,\n writable: true\n }\n });\n\n const eventsToLevels = {\n connecting: 'info',\n early: 'info',\n open: 'info',\n waiting: 'warning',\n closed: 'info'\n };\n\n this.on('stateChanged', (state, ...args) => {\n if (state in events) {\n this.emit(events[state], ...args);\n }\n const event = { name: state, group: 'signaling', level: eventsToLevels[this.state] };\n if (state === 'closed') {\n const [reason] = args;\n event.payload = { reason };\n event.level = reason === CloseReason.LOCAL ? 'info' : 'error';\n }\n this._eventObserver.emit('event', event);\n });\n\n this._eventObserver.emit('event', { name: this.state, group: 'signaling', level: eventsToLevels[this.state] });\n this._connect();\n }\n\n toString() {\n return `[TwilioConnection #${this._instanceId}: ${this._ws.url}]`;\n }\n\n /**\n * Close the {@link TwilioConnection}.\n * @param {{code: number, reason: string}} event\n * @private\n */\n _close({ code, reason }) {\n if (this.state === 'closed') {\n return;\n }\n if (this._openTimeout) {\n this._openTimeout.clear();\n }\n if (this._welcomeTimeout) {\n this._welcomeTimeout.clear();\n }\n if (this._heartbeatTimeout) {\n this._heartbeatTimeout.clear();\n }\n if (this._sendHeartbeatTimeout) {\n this._sendHeartbeatTimeout.clear();\n }\n if (this._networkMonitor) {\n this._networkMonitor.stop();\n }\n if (this._busyWaitTimeout && code !== WS_CLOSE_BUSY_WAIT) {\n this._busyWaitTimeout.clear();\n }\n this._messageQueue.splice(0);\n const log = this._log;\n\n if (code === WS_CLOSE_NORMAL) {\n log.debug('Closed');\n this.transition('closed', null, [CloseReason.LOCAL]);\n } else {\n log.warn(`Closed: ${code} - ${reason}`);\n if (code !== WS_CLOSE_BUSY_WAIT) {\n this.transition('closed', null, [\n wsCloseCodesToCloseReasons.get(code) || CloseReason.REMOTE\n ]);\n }\n }\n const { readyState } = this._ws;\n const { WebSocket } = this._options;\n\n if (readyState !== WebSocket.CLOSING && readyState !== WebSocket.CLOSED) {\n this._ws.close(code, reason);\n }\n }\n\n /**\n * Connect to the TCMP server.\n * @private\n */\n _connect() {\n const log = this._log;\n if (this.state === 'waiting') {\n this.transition('early');\n } else if (this.state !== 'early') {\n log.warn(`Unexpected state \"${this.state}\" for connecting to the`\n + ' TCMP server.');\n return;\n }\n this._ws = new this._options.WebSocket(this._serverUrl);\n const ws = this._ws;\n log.debug('Created a new WebSocket:', ws);\n ws.addEventListener('close', event => this._close(event));\n\n const { openTimeout } = this._options;\n // Add a timeout for getting the onopen event on the WebSocket (15 sec). After that, attempt to reconnect only if this is not the first attempt.\n this._openTimeout = new Timeout(() => {\n const reason = `Failed to open in ${openTimeout} ms`;\n this._close({ code: WS_CLOSE_OPEN_TIMEOUT, reason });\n }, openTimeout);\n\n ws.addEventListener('open', () => {\n log.debug('WebSocket opened:', ws);\n this._openTimeout.clear();\n this._startHandshake();\n if (this._networkMonitor) {\n this._networkMonitor.start();\n }\n });\n\n ws.addEventListener('message', message => {\n log.debug(`Incoming: ${message.data}`);\n try {\n message = JSON.parse(message.data);\n } catch (error) {\n this.emit('error', error);\n return;\n }\n\n switch (message.type) {\n case 'bad':\n this._handleBad(message);\n break;\n case 'busy':\n this._handleBusy(message);\n break;\n case 'bye':\n // Do nothing.\n break;\n case 'msg':\n this._handleMessage(message);\n // NOTE(mpatwardhan): Each incoming message should be treated as an incoming\n // heartbeat intentionally falling through to 'heartbeat' case.\n // eslint-disable-next-line no-fallthrough\n case 'heartbeat':\n this._handleHeartbeat();\n break;\n case 'welcome':\n this._handleWelcome(message);\n break;\n default:\n this._log.debug(`Unknown message type: ${message.type}`);\n this.emit('error', new Error(`Unknown message type: ${message.type}`));\n break;\n }\n });\n }\n\n /**\n * Handle an incoming \"bad\" message.\n * @param {{reason: string}} message\n * @private\n */\n _handleBad({ reason }) {\n const log = this._log;\n if (!['connecting', 'open'].includes(this.state)) {\n log.warn(`Unexpected state \"${this.state}\" for handling a \"bad\" message`\n + ' from the TCMP server.');\n return;\n }\n if (this.state === 'connecting') {\n log.warn(`Closing: ${WS_CLOSE_HELLO_FAILED} - ${reason}`);\n this._close({ code: WS_CLOSE_HELLO_FAILED, reason });\n return;\n }\n log.debug(`Error: ${reason}`);\n this.emit('error', new Error(reason));\n }\n\n /**\n * Handle an incoming \"busy\" message.\n * @param {{cookie: ?string, keepAlive: boolean, retryAfter: number}} message\n * @private\n */\n _handleBusy({ cookie, keepAlive, retryAfter }) {\n const log = this._log;\n if (!['connecting', 'waiting'].includes(this.state)) {\n log.warn(`Unexpected state \"${this.state}\" for handling a \"busy\" message`\n + ' from the TCMP server.');\n return;\n }\n if (this._busyWaitTimeout) {\n this._busyWaitTimeout.clear();\n }\n if (this._welcomeTimeout) {\n this._welcomeTimeout.clear();\n }\n const reason = retryAfter < 0\n ? 'Received terminal \"busy\" message'\n : `Received \"busy\" message, retrying after ${retryAfter} ms`;\n\n if (retryAfter < 0) {\n log.warn(`Closing: ${WS_CLOSE_SERVER_BUSY} - ${reason}`);\n this._close({ code: WS_CLOSE_SERVER_BUSY, reason });\n return;\n }\n const { maxConsecutiveFailedHellos } = this._options;\n this._hellosLeft = maxConsecutiveFailedHellos;\n this._cookie = cookie || null;\n\n if (keepAlive) {\n log.warn(reason);\n this._busyWaitTimeout = new Timeout(() => this._startHandshake(), retryAfter);\n } else {\n log.warn(`Closing: ${WS_CLOSE_BUSY_WAIT} - ${reason}`);\n this._close({ code: WS_CLOSE_BUSY_WAIT, reason });\n this._busyWaitTimeout = new Timeout(() => this._connect(), retryAfter);\n }\n\n this.transition('waiting', null, [keepAlive, retryAfter]);\n }\n\n /**\n * Handle an incoming \"heartbeat\" message.\n * @private\n */\n _handleHeartbeat() {\n if (this.state !== 'open') {\n this._log.warn(`Unexpected state \"${this.state}\" for handling a \"heartbeat\"`\n + ' message from the TCMP server.');\n return;\n }\n this._heartbeatTimeout.reset();\n }\n\n /**\n * Handle a missed \"heartbeat\" message.\n * @private\n */\n _handleHeartbeatTimeout() {\n if (this.state !== 'open') {\n return;\n }\n const log = this._log;\n const { maxConsecutiveMissedHeartbeats } = this._options;\n\n log.debug(`Consecutive heartbeats missed: ${maxConsecutiveMissedHeartbeats}`);\n const reason = `Missed ${maxConsecutiveMissedHeartbeats} \"heartbeat\" messages`;\n log.warn(`Closing: ${WS_CLOSE_HEARTBEATS_MISSED} - ${reason}`);\n this._close({ code: WS_CLOSE_HEARTBEATS_MISSED, reason });\n }\n\n /**\n * Handle an incoming \"msg\" message.\n * @param {{body: object}} message\n * @private\n */\n _handleMessage({ body }) {\n if (this.state !== 'open') {\n this._log.warn(`Unexpected state \"${this.state}\" for handling a \"msg\" message`\n + ' from the TCMP server.');\n return;\n }\n this.emit('message', body);\n }\n\n /**\n * Handle an incoming \"welcome\" message.\n * @param {{ negotiatedTimeout: number }} message\n * @private\n */\n _handleWelcome({ negotiatedTimeout }) {\n const log = this._log;\n\n if (!['connecting', 'waiting'].includes(this.state)) {\n log.warn(`Unexpected state \"${this.state}\" for handling a \"welcome\"`\n + ' message from the TCMP server.');\n return;\n }\n\n if (this.state === 'waiting') {\n log.debug('Received \"welcome\" message, no need to retry connection.');\n this._busyWaitTimeout.clear();\n }\n\n const { maxConsecutiveMissedHeartbeats } = this._options;\n const heartbeatTimeout = negotiatedTimeout * maxConsecutiveMissedHeartbeats;\n const outgoingHeartbeatTimeout = negotiatedTimeout - OUTGOING_HEARTBEAT_OFFSET;\n\n this._welcomeTimeout.clear();\n this._heartbeatTimeout = new Timeout(() => this._handleHeartbeatTimeout(), heartbeatTimeout);\n this._messageQueue.splice(0).forEach(message => this._send(message));\n this._sendHeartbeatTimeout = new Timeout(() => this._sendHeartbeat(), outgoingHeartbeatTimeout);\n this.transition('open');\n }\n\n /**\n * Handle a missed \"welcome\" message.\n * @private\n */\n _handleWelcomeTimeout() {\n if (this.state !== 'connecting') {\n return;\n }\n const log = this._log;\n\n if (this._hellosLeft <= 0) {\n const reason = 'All handshake attempts failed';\n log.warn(`Closing: ${WS_CLOSE_WELCOME_TIMEOUT} - ${reason}`);\n this._close({ code: WS_CLOSE_WELCOME_TIMEOUT, reason });\n return;\n }\n\n const { maxConsecutiveFailedHellos } = this._options;\n log.warn(`Handshake attempt ${maxConsecutiveFailedHellos - this._hellosLeft} failed`);\n this._startHandshake();\n }\n\n /**\n * Send a message to the TCMP server.\n * @param {*} message\n * @private\n */\n _send(message) {\n const { readyState } = this._ws;\n const { WebSocket } = this._options;\n if (readyState === WebSocket.OPEN) {\n const data = JSON.stringify(message);\n this._log.debug(`Outgoing: ${data}`);\n try {\n this._ws.send(data);\n if (this._sendHeartbeatTimeout) {\n // Each outgoing message is to be treated as an outgoing heartbeat.\n this._sendHeartbeatTimeout.reset();\n }\n } catch (error) {\n const reason = 'Failed to send message';\n this._log.warn(`Closing: ${WS_CLOSE_SEND_FAILED} - ${reason}`);\n this._close({ code: WS_CLOSE_SEND_FAILED, reason });\n }\n }\n }\n\n /**\n * Send a \"heartbeat\" message.\n * @private\n */\n _sendHeartbeat() {\n if (this.state === 'closed') {\n return;\n }\n this._send({ type: 'heartbeat' });\n }\n\n /**\n * Send a \"hello\" message.\n * @private\n */\n _sendHello() {\n const { helloBody, requestedHeartbeatTimeout: timeout } = this._options;\n const hello = {\n id: makeUUID(),\n timeout,\n type: 'hello',\n version: TCMP_VERSION\n };\n if (this._cookie) {\n hello.cookie = this._cookie;\n }\n if (helloBody) {\n hello.body = helloBody;\n }\n this._send(hello);\n }\n\n /**\n * Send or enqueue a message.\n * @param {*} message\n * @private\n */\n _sendOrEnqueue(message) {\n if (this.state === 'closed') {\n return;\n }\n const sendOrEnqueue = this.state === 'open'\n ? message => this._send(message)\n : message => this._messageQueue.push(message);\n\n sendOrEnqueue(message);\n }\n\n /**\n * Start the TCMP handshake.\n * @private\n */\n _startHandshake() {\n if (['early', 'waiting'].includes(this.state)) {\n this.transition('connecting');\n }\n if (this.state !== 'connecting') {\n return;\n }\n this._hellosLeft--;\n this._sendHello();\n const { welcomeTimeout } = this._options;\n this._welcomeTimeout = new Timeout(() => this._handleWelcomeTimeout(), welcomeTimeout);\n }\n\n /**\n * Close the {@link TwilioConnection}.\n * @returns {void}\n */\n close() {\n if (this.state === 'closed') {\n return;\n }\n this._sendOrEnqueue({ type: 'bye' });\n this._close({ code: WS_CLOSE_NORMAL, reason: 'Normal' });\n }\n\n /**\n * Send a \"msg\" message.\n * @param {*} body\n * @returns {void}\n */\n sendMessage(body) {\n this._sendOrEnqueue({ body, type: 'msg' });\n }\n}\n\n/**\n * A unique string depicting the reason for the {@link TwilioConnection} being closed.\n * @enum {string}\n */\nTwilioConnection.CloseReason = CloseReason;\n\n/**\n * A {@link TwilioConnection} was closed.\n * @event TwilioConnection#close\n * @param {CloseReason} reason - The reason for the {@link TwilioConnection} being closed\n */\n\n/**\n * A {@link TwilioConnection} received an error from the TCMP server.\n * @event TwilioConnection#error\n * @param {Error} error - The TCMP server error\n */\n\n/**\n * A {@link TwilioConnection} received a message from the TCMP server.\n * @event TwilioConnection#message\n * @param {*} body - Message body\n */\n\n/**\n * A {@link TwilioConnection} completed a hello/welcome handshake with the TCMP server.\n * @event TwilioConnection#open\n */\n\n/**\n * A {@link TwilioConnection} received a \"busy\" message from the TCMP server.\n * @event TwilioConnection#waiting\n * @param {boolean} keepAlive - true if the WebSocket connection is retained\n * @param {number} retryAfter - delay in milliseconds after which a retry is attempted\n */\n\n/**\n * {@link TwilioConnection} options\n * @typedef {object} TwilioConnectionOptions\n * @property {EventObserver} [eventObserver] - Optional event observer\n * @property {*} [helloBody=null] - Optional body for \"hello\" message\n * @property {LogLevel} [logLevel=warn] - Log level of the {@link TwilioConnection}\n * @property {number} [maxConsecutiveFailedHellos=3] - Max. number of consecutive failed \"hello\"s\n * @property {number} [maxConsecutiveMissedHeartbeats=3] - Max. number of (effective) consecutive \"heartbeat\" messages that can be missed\n * @property {number} [requestedHeartbeatTimeout=5000] - \"heartbeat\" timeout (ms) requested by the {@link TwilioConnection}\n * @property {number} [welcomeTimeout=5000] - Time (ms) to wait for the \"welcome\" message after sending the \"hello\" message\n */\n\nmodule.exports = TwilioConnection;\n","'use strict';\n\n/**\n * @extends Error\n * @property {number} code - Error code\n */\nclass TwilioError extends Error {\n /**\n * Creates a new {@link TwilioError}\n * @param {number} code - Error code\n * @param {string} [message] - Error message\n * @param {string} [fileName] - Name of the script file where error was generated\n * @param {number} [lineNumber] - Line number of the script file where error was generated\n */\n constructor(code) {\n const args = [].slice.call(arguments, 1);\n super(...args);\n Object.setPrototypeOf(this, TwilioError.prototype);\n\n const error = Error.apply(this, args);\n error.name = 'TwilioError';\n\n Object.defineProperty(this, 'code', {\n value: code,\n enumerable: true\n });\n\n Object.getOwnPropertyNames(error).forEach(function(prop) {\n Object.defineProperty(this, prop, {\n value: error[prop],\n enumerable: true\n });\n }, this);\n }\n\n /**\n * Returns human readable string describing the error.\n * @returns {string}\n */\n toString() {\n const message = this.message ? `: ${this.message}` : '';\n return `${this.name} ${this.code}${message}`;\n }\n}\n\nmodule.exports = TwilioError;\n","// NOTE: Do not edit this file. This code is auto-generated. Contact the\n// Twilio SDK Team for more information.\n\n'use strict';\n\nconst TwilioError = require('./twilioerror');\nconst TwilioErrorByCode = {};\n\n/**\n * Create a {@link TwilioError} for a given code and message.\n * @private\n * @param {number} [code] - Error code\n * @param {string} [message] - Error message\n * @returns {TwilioError}\n */\nexports.createTwilioError = function createTwilioError(code, message) {\n code = typeof code === 'number' ? code : 0;\n message = typeof message === 'string' && message ? message : 'Unknown error';\n return TwilioErrorByCode[code] ? new TwilioErrorByCode[code]() : new TwilioError(code, message);\n};\n\n/**\n * @class AccessTokenInvalidError\n * @classdesc Raised whenever the AccessToken used for connecting to a Room is invalid.\n * @extends TwilioError\n * @property {number} code - 20101\n * @property {string} message - 'Invalid Access Token'\n */\nclass AccessTokenInvalidError extends TwilioError {\n constructor() {\n super(20101, 'Invalid Access Token');\n Object.setPrototypeOf(this, AccessTokenInvalidError.prototype);\n }\n}\n\nexports.AccessTokenInvalidError = AccessTokenInvalidError;\nObject.defineProperty(TwilioErrorByCode, 20101, { value: AccessTokenInvalidError });\n\n/**\n * @class AccessTokenHeaderInvalidError\n * @classdesc Raised whenever the AccessToken used for connecting to a Room has an invalid header.\n * @extends TwilioError\n * @property {number} code - 20102\n * @property {string} message - 'Invalid Access Token header'\n */\nclass AccessTokenHeaderInvalidError extends TwilioError {\n constructor() {\n super(20102, 'Invalid Access Token header');\n Object.setPrototypeOf(this, AccessTokenHeaderInvalidError.prototype);\n }\n}\n\nexports.AccessTokenHeaderInvalidError = AccessTokenHeaderInvalidError;\nObject.defineProperty(TwilioErrorByCode, 20102, { value: AccessTokenHeaderInvalidError });\n\n/**\n * @class AccessTokenIssuerInvalidError\n * @classdesc Raised whenever the AccessToken used for connecting to a Room contains an invalid issuer or subject.\n * @extends TwilioError\n * @property {number} code - 20103\n * @property {string} message - 'Invalid Access Token issuer/subject'\n */\nclass AccessTokenIssuerInvalidError extends TwilioError {\n constructor() {\n super(20103, 'Invalid Access Token issuer/subject');\n Object.setPrototypeOf(this, AccessTokenIssuerInvalidError.prototype);\n }\n}\n\nexports.AccessTokenIssuerInvalidError = AccessTokenIssuerInvalidError;\nObject.defineProperty(TwilioErrorByCode, 20103, { value: AccessTokenIssuerInvalidError });\n\n/**\n * @class AccessTokenExpiredError\n * @classdesc Raised whenever the AccessToken used for connecting, or reconnecting to a Room has expired.\n * @extends TwilioError\n * @property {number} code - 20104\n * @property {string} message - 'Access Token expired or expiration date invalid'\n */\nclass AccessTokenExpiredError extends TwilioError {\n constructor() {\n super(20104, 'Access Token expired or expiration date invalid');\n Object.setPrototypeOf(this, AccessTokenExpiredError.prototype);\n }\n}\n\nexports.AccessTokenExpiredError = AccessTokenExpiredError;\nObject.defineProperty(TwilioErrorByCode, 20104, { value: AccessTokenExpiredError });\n\n/**\n * @class AccessTokenNotYetValidError\n * @classdesc Raised whenever the AccessToken used for connecting to a Room is not yet valid.\n * @extends TwilioError\n * @property {number} code - 20105\n * @property {string} message - 'Access Token not yet valid'\n */\nclass AccessTokenNotYetValidError extends TwilioError {\n constructor() {\n super(20105, 'Access Token not yet valid');\n Object.setPrototypeOf(this, AccessTokenNotYetValidError.prototype);\n }\n}\n\nexports.AccessTokenNotYetValidError = AccessTokenNotYetValidError;\nObject.defineProperty(TwilioErrorByCode, 20105, { value: AccessTokenNotYetValidError });\n\n/**\n * @class AccessTokenGrantsInvalidError\n * @classdesc Raised whenever the AccessToken used for connecting to a Room has invalid grants.\n * @extends TwilioError\n * @property {number} code - 20106\n * @property {string} message - 'Invalid Access Token grants'\n */\nclass AccessTokenGrantsInvalidError extends TwilioError {\n constructor() {\n super(20106, 'Invalid Access Token grants');\n Object.setPrototypeOf(this, AccessTokenGrantsInvalidError.prototype);\n }\n}\n\nexports.AccessTokenGrantsInvalidError = AccessTokenGrantsInvalidError;\nObject.defineProperty(TwilioErrorByCode, 20106, { value: AccessTokenGrantsInvalidError });\n\n/**\n * @class AccessTokenSignatureInvalidError\n * @classdesc Raised whenever the AccessToken used for connecting to a Room has an invalid signature.\n * @extends TwilioError\n * @property {number} code - 20107\n * @property {string} message - 'Invalid Access Token signature'\n */\nclass AccessTokenSignatureInvalidError extends TwilioError {\n constructor() {\n super(20107, 'Invalid Access Token signature');\n Object.setPrototypeOf(this, AccessTokenSignatureInvalidError.prototype);\n }\n}\n\nexports.AccessTokenSignatureInvalidError = AccessTokenSignatureInvalidError;\nObject.defineProperty(TwilioErrorByCode, 20107, { value: AccessTokenSignatureInvalidError });\n\n/**\n * @class SignalingConnectionError\n * @classdesc Raised whenever a signaling connection error occurs that is not covered by a more specific error code.\n * @extends TwilioError\n * @property {number} code - 53000\n * @property {string} message - 'Signaling connection error'\n */\nclass SignalingConnectionError extends TwilioError {\n constructor() {\n super(53000, 'Signaling connection error');\n Object.setPrototypeOf(this, SignalingConnectionError.prototype);\n }\n}\n\nexports.SignalingConnectionError = SignalingConnectionError;\nObject.defineProperty(TwilioErrorByCode, 53000, { value: SignalingConnectionError });\n\n/**\n * @class SignalingConnectionDisconnectedError\n * @classdesc Raised whenever the signaling connection is unexpectedly disconnected.\n * @extends TwilioError\n * @property {number} code - 53001\n * @property {string} message - 'Signaling connection disconnected'\n */\nclass SignalingConnectionDisconnectedError extends TwilioError {\n constructor() {\n super(53001, 'Signaling connection disconnected');\n Object.setPrototypeOf(this, SignalingConnectionDisconnectedError.prototype);\n }\n}\n\nexports.SignalingConnectionDisconnectedError = SignalingConnectionDisconnectedError;\nObject.defineProperty(TwilioErrorByCode, 53001, { value: SignalingConnectionDisconnectedError });\n\n/**\n * @class SignalingConnectionTimeoutError\n * @classdesc Raised when connection liveliness checks fail, or when the signaling session expires.\n * @extends TwilioError\n * @property {number} code - 53002\n * @property {string} message - 'Signaling connection timed out'\n */\nclass SignalingConnectionTimeoutError extends TwilioError {\n constructor() {\n super(53002, 'Signaling connection timed out');\n Object.setPrototypeOf(this, SignalingConnectionTimeoutError.prototype);\n }\n}\n\nexports.SignalingConnectionTimeoutError = SignalingConnectionTimeoutError;\nObject.defineProperty(TwilioErrorByCode, 53002, { value: SignalingConnectionTimeoutError });\n\n/**\n * @class SignalingIncomingMessageInvalidError\n * @classdesc Raised whenever the Client receives a message from the Server that the Client cannot handle.\n * @extends TwilioError\n * @property {number} code - 53003\n * @property {string} message - 'Client received an invalid signaling message'\n */\nclass SignalingIncomingMessageInvalidError extends TwilioError {\n constructor() {\n super(53003, 'Client received an invalid signaling message');\n Object.setPrototypeOf(this, SignalingIncomingMessageInvalidError.prototype);\n }\n}\n\nexports.SignalingIncomingMessageInvalidError = SignalingIncomingMessageInvalidError;\nObject.defineProperty(TwilioErrorByCode, 53003, { value: SignalingIncomingMessageInvalidError });\n\n/**\n * @class SignalingOutgoingMessageInvalidError\n * @classdesc Raised whenever the Client sends a message to the Server that the Server cannot handle.\n * @extends TwilioError\n * @property {number} code - 53004\n * @property {string} message - 'Client sent an invalid signaling message'\n */\nclass SignalingOutgoingMessageInvalidError extends TwilioError {\n constructor() {\n super(53004, 'Client sent an invalid signaling message');\n Object.setPrototypeOf(this, SignalingOutgoingMessageInvalidError.prototype);\n }\n}\n\nexports.SignalingOutgoingMessageInvalidError = SignalingOutgoingMessageInvalidError;\nObject.defineProperty(TwilioErrorByCode, 53004, { value: SignalingOutgoingMessageInvalidError });\n\n/**\n * @class SignalingServerBusyError\n * @classdesc Raised when the server is too busy to accept new clients.\n * @extends TwilioError\n * @property {number} code - 53006\n * @property {string} message - 'Video server is busy'\n */\nclass SignalingServerBusyError extends TwilioError {\n constructor() {\n super(53006, 'Video server is busy');\n Object.setPrototypeOf(this, SignalingServerBusyError.prototype);\n }\n}\n\nexports.SignalingServerBusyError = SignalingServerBusyError;\nObject.defineProperty(TwilioErrorByCode, 53006, { value: SignalingServerBusyError });\n\n/**\n * @class RoomNameInvalidError\n * @classdesc Raised whenever a Room name is invalid, and the scenario is not covered by a more specific error code.\n * @extends TwilioError\n * @property {number} code - 53100\n * @property {string} message - 'Room name is invalid'\n */\nclass RoomNameInvalidError extends TwilioError {\n constructor() {\n super(53100, 'Room name is invalid');\n Object.setPrototypeOf(this, RoomNameInvalidError.prototype);\n }\n}\n\nexports.RoomNameInvalidError = RoomNameInvalidError;\nObject.defineProperty(TwilioErrorByCode, 53100, { value: RoomNameInvalidError });\n\n/**\n * @class RoomNameTooLongError\n * @classdesc Raised whenever a Room name is too long.\n * @extends TwilioError\n * @property {number} code - 53101\n * @property {string} message - 'Room name is too long'\n */\nclass RoomNameTooLongError extends TwilioError {\n constructor() {\n super(53101, 'Room name is too long');\n Object.setPrototypeOf(this, RoomNameTooLongError.prototype);\n }\n}\n\nexports.RoomNameTooLongError = RoomNameTooLongError;\nObject.defineProperty(TwilioErrorByCode, 53101, { value: RoomNameTooLongError });\n\n/**\n * @class RoomNameCharsInvalidError\n * @classdesc Raised whenever a Room name contains invalid characters.\n * @extends TwilioError\n * @property {number} code - 53102\n * @property {string} message - 'Room name contains invalid characters'\n */\nclass RoomNameCharsInvalidError extends TwilioError {\n constructor() {\n super(53102, 'Room name contains invalid characters');\n Object.setPrototypeOf(this, RoomNameCharsInvalidError.prototype);\n }\n}\n\nexports.RoomNameCharsInvalidError = RoomNameCharsInvalidError;\nObject.defineProperty(TwilioErrorByCode, 53102, { value: RoomNameCharsInvalidError });\n\n/**\n * @class RoomCreateFailedError\n * @classdesc Raised whenever the Server is unable to create a Room.\n * @extends TwilioError\n * @property {number} code - 53103\n * @property {string} message - 'Unable to create Room'\n */\nclass RoomCreateFailedError extends TwilioError {\n constructor() {\n super(53103, 'Unable to create Room');\n Object.setPrototypeOf(this, RoomCreateFailedError.prototype);\n }\n}\n\nexports.RoomCreateFailedError = RoomCreateFailedError;\nObject.defineProperty(TwilioErrorByCode, 53103, { value: RoomCreateFailedError });\n\n/**\n * @class RoomConnectFailedError\n * @classdesc Raised whenever a Client is unable to connect to a Room, and the scenario is not covered by a more specific error code.\n * @extends TwilioError\n * @property {number} code - 53104\n * @property {string} message - 'Unable to connect to Room'\n */\nclass RoomConnectFailedError extends TwilioError {\n constructor() {\n super(53104, 'Unable to connect to Room');\n Object.setPrototypeOf(this, RoomConnectFailedError.prototype);\n }\n}\n\nexports.RoomConnectFailedError = RoomConnectFailedError;\nObject.defineProperty(TwilioErrorByCode, 53104, { value: RoomConnectFailedError });\n\n/**\n * @class RoomMaxParticipantsExceededError\n * @classdesc Raised whenever a Client is unable to connect to a Room because the Room contains too many Participants.\n * @extends TwilioError\n * @property {number} code - 53105\n * @property {string} message - 'Room contains too many Participants'\n */\nclass RoomMaxParticipantsExceededError extends TwilioError {\n constructor() {\n super(53105, 'Room contains too many Participants');\n Object.setPrototypeOf(this, RoomMaxParticipantsExceededError.prototype);\n }\n}\n\nexports.RoomMaxParticipantsExceededError = RoomMaxParticipantsExceededError;\nObject.defineProperty(TwilioErrorByCode, 53105, { value: RoomMaxParticipantsExceededError });\n\n/**\n * @class RoomNotFoundError\n * @classdesc Raised whenever attempting operation on a non-existent Room.\n * @extends TwilioError\n * @property {number} code - 53106\n * @property {string} message - 'Room not found'\n */\nclass RoomNotFoundError extends TwilioError {\n constructor() {\n super(53106, 'Room not found');\n Object.setPrototypeOf(this, RoomNotFoundError.prototype);\n }\n}\n\nexports.RoomNotFoundError = RoomNotFoundError;\nObject.defineProperty(TwilioErrorByCode, 53106, { value: RoomNotFoundError });\n\n/**\n * @class RoomMaxParticipantsOutOfRangeError\n * @classdesc Raised in the REST API when MaxParticipants is set out of range.\n * @extends TwilioError\n * @property {number} code - 53107\n * @property {string} message - 'MaxParticipants is out of range'\n */\nclass RoomMaxParticipantsOutOfRangeError extends TwilioError {\n constructor() {\n super(53107, 'MaxParticipants is out of range');\n Object.setPrototypeOf(this, RoomMaxParticipantsOutOfRangeError.prototype);\n }\n}\n\nexports.RoomMaxParticipantsOutOfRangeError = RoomMaxParticipantsOutOfRangeError;\nObject.defineProperty(TwilioErrorByCode, 53107, { value: RoomMaxParticipantsOutOfRangeError });\n\n/**\n * @class RoomTypeInvalidError\n * @classdesc Raised in the REST API when the user attempts to create a Room with an invalid RoomType\n * @extends TwilioError\n * @property {number} code - 53108\n * @property {string} message - 'RoomType is not valid'\n */\nclass RoomTypeInvalidError extends TwilioError {\n constructor() {\n super(53108, 'RoomType is not valid');\n Object.setPrototypeOf(this, RoomTypeInvalidError.prototype);\n }\n}\n\nexports.RoomTypeInvalidError = RoomTypeInvalidError;\nObject.defineProperty(TwilioErrorByCode, 53108, { value: RoomTypeInvalidError });\n\n/**\n * @class RoomTimeoutOutOfRangeError\n * @classdesc Raised in the REST API when Timeout is set out of range.\n * @extends TwilioError\n * @property {number} code - 53109\n * @property {string} message - 'Timeout is out of range'\n */\nclass RoomTimeoutOutOfRangeError extends TwilioError {\n constructor() {\n super(53109, 'Timeout is out of range');\n Object.setPrototypeOf(this, RoomTimeoutOutOfRangeError.prototype);\n }\n}\n\nexports.RoomTimeoutOutOfRangeError = RoomTimeoutOutOfRangeError;\nObject.defineProperty(TwilioErrorByCode, 53109, { value: RoomTimeoutOutOfRangeError });\n\n/**\n * @class RoomStatusCallbackMethodInvalidError\n * @classdesc Raised in the REST API when StatusCallbackMethod is set to an invalid value.\n * @extends TwilioError\n * @property {number} code - 53110\n * @property {string} message - 'StatusCallbackMethod is invalid'\n */\nclass RoomStatusCallbackMethodInvalidError extends TwilioError {\n constructor() {\n super(53110, 'StatusCallbackMethod is invalid');\n Object.setPrototypeOf(this, RoomStatusCallbackMethodInvalidError.prototype);\n }\n}\n\nexports.RoomStatusCallbackMethodInvalidError = RoomStatusCallbackMethodInvalidError;\nObject.defineProperty(TwilioErrorByCode, 53110, { value: RoomStatusCallbackMethodInvalidError });\n\n/**\n * @class RoomStatusCallbackInvalidError\n * @classdesc Raised in the REST API when StatusCallback is not a valid URL or the url is too long.\n * @extends TwilioError\n * @property {number} code - 53111\n * @property {string} message - 'StatusCallback is invalid'\n */\nclass RoomStatusCallbackInvalidError extends TwilioError {\n constructor() {\n super(53111, 'StatusCallback is invalid');\n Object.setPrototypeOf(this, RoomStatusCallbackInvalidError.prototype);\n }\n}\n\nexports.RoomStatusCallbackInvalidError = RoomStatusCallbackInvalidError;\nObject.defineProperty(TwilioErrorByCode, 53111, { value: RoomStatusCallbackInvalidError });\n\n/**\n * @class RoomStatusInvalidError\n * @classdesc Raised in the REST API when Status is not valid or the Room is not in-progress.\n * @extends TwilioError\n * @property {number} code - 53112\n * @property {string} message - 'Status is invalid'\n */\nclass RoomStatusInvalidError extends TwilioError {\n constructor() {\n super(53112, 'Status is invalid');\n Object.setPrototypeOf(this, RoomStatusInvalidError.prototype);\n }\n}\n\nexports.RoomStatusInvalidError = RoomStatusInvalidError;\nObject.defineProperty(TwilioErrorByCode, 53112, { value: RoomStatusInvalidError });\n\n/**\n * @class RoomRoomExistsError\n * @classdesc Raised in the REST API when the Room creation fails because a Room exists with the same name.\n * @extends TwilioError\n * @property {number} code - 53113\n * @property {string} message - 'Room exists'\n */\nclass RoomRoomExistsError extends TwilioError {\n constructor() {\n super(53113, 'Room exists');\n Object.setPrototypeOf(this, RoomRoomExistsError.prototype);\n }\n}\n\nexports.RoomRoomExistsError = RoomRoomExistsError;\nObject.defineProperty(TwilioErrorByCode, 53113, { value: RoomRoomExistsError });\n\n/**\n * @class RoomInvalidParametersError\n * @classdesc Raised in the REST API when one or more Room creation parameter is incompatible with the Room type.\n * @extends TwilioError\n * @property {number} code - 53114\n * @property {string} message - 'Room creation parameter(s) incompatible with the Room type'\n */\nclass RoomInvalidParametersError extends TwilioError {\n constructor() {\n super(53114, 'Room creation parameter(s) incompatible with the Room type');\n Object.setPrototypeOf(this, RoomInvalidParametersError.prototype);\n }\n}\n\nexports.RoomInvalidParametersError = RoomInvalidParametersError;\nObject.defineProperty(TwilioErrorByCode, 53114, { value: RoomInvalidParametersError });\n\n/**\n * @class RoomMediaRegionInvalidError\n * @classdesc Raised in the REST API when MediaRegion is set to an invalid value.\n * @extends TwilioError\n * @property {number} code - 53115\n * @property {string} message - 'MediaRegion is invalid'\n */\nclass RoomMediaRegionInvalidError extends TwilioError {\n constructor() {\n super(53115, 'MediaRegion is invalid');\n Object.setPrototypeOf(this, RoomMediaRegionInvalidError.prototype);\n }\n}\n\nexports.RoomMediaRegionInvalidError = RoomMediaRegionInvalidError;\nObject.defineProperty(TwilioErrorByCode, 53115, { value: RoomMediaRegionInvalidError });\n\n/**\n * @class RoomMediaRegionUnavailableError\n * @classdesc Raised in the REST API when MediaRegion is set to a valid value but no media servers are available.\n * @extends TwilioError\n * @property {number} code - 53116\n * @property {string} message - 'There are no media servers available in the MediaRegion'\n */\nclass RoomMediaRegionUnavailableError extends TwilioError {\n constructor() {\n super(53116, 'There are no media servers available in the MediaRegion');\n Object.setPrototypeOf(this, RoomMediaRegionUnavailableError.prototype);\n }\n}\n\nexports.RoomMediaRegionUnavailableError = RoomMediaRegionUnavailableError;\nObject.defineProperty(TwilioErrorByCode, 53116, { value: RoomMediaRegionUnavailableError });\n\n/**\n * @class RoomSubscriptionOperationNotSupportedError\n * @classdesc Raised whenever the subscription operation requested is not supported for the Room type.\n * @extends TwilioError\n * @property {number} code - 53117\n * @property {string} message - 'The subscription operation requested is not supported for the Room type'\n */\nclass RoomSubscriptionOperationNotSupportedError extends TwilioError {\n constructor() {\n super(53117, 'The subscription operation requested is not supported for the Room type');\n Object.setPrototypeOf(this, RoomSubscriptionOperationNotSupportedError.prototype);\n }\n}\n\nexports.RoomSubscriptionOperationNotSupportedError = RoomSubscriptionOperationNotSupportedError;\nObject.defineProperty(TwilioErrorByCode, 53117, { value: RoomSubscriptionOperationNotSupportedError });\n\n/**\n * @class RoomCompletedError\n * @classdesc Raised whenever a Room is completed via the REST API.\n * @extends TwilioError\n * @property {number} code - 53118\n * @property {string} message - 'Room completed'\n */\nclass RoomCompletedError extends TwilioError {\n constructor() {\n super(53118, 'Room completed');\n Object.setPrototypeOf(this, RoomCompletedError.prototype);\n }\n}\n\nexports.RoomCompletedError = RoomCompletedError;\nObject.defineProperty(TwilioErrorByCode, 53118, { value: RoomCompletedError });\n\n/**\n * @class RoomAudioOnlyFlagNotSupportedError\n * @classdesc Raised whenever a participant tries to set the AudioOnly flag for a Room type other than Group Rooms.\n * @extends TwilioError\n * @property {number} code - 53124\n * @property {string} message - 'The AudioOnly flag is not supported for the Room type'\n */\nclass RoomAudioOnlyFlagNotSupportedError extends TwilioError {\n constructor() {\n super(53124, 'The AudioOnly flag is not supported for the Room type');\n Object.setPrototypeOf(this, RoomAudioOnlyFlagNotSupportedError.prototype);\n }\n}\n\nexports.RoomAudioOnlyFlagNotSupportedError = RoomAudioOnlyFlagNotSupportedError;\nObject.defineProperty(TwilioErrorByCode, 53124, { value: RoomAudioOnlyFlagNotSupportedError });\n\n/**\n * @class RoomTrackKindNotSupportedError\n * @classdesc Raised whenever a participant tries to publish a track or connects with a track that is not supported by the group room.\n * @extends TwilioError\n * @property {number} code - 53125\n * @property {string} message - 'The track kind is not supported by the Room'\n */\nclass RoomTrackKindNotSupportedError extends TwilioError {\n constructor() {\n super(53125, 'The track kind is not supported by the Room');\n Object.setPrototypeOf(this, RoomTrackKindNotSupportedError.prototype);\n }\n}\n\nexports.RoomTrackKindNotSupportedError = RoomTrackKindNotSupportedError;\nObject.defineProperty(TwilioErrorByCode, 53125, { value: RoomTrackKindNotSupportedError });\n\n/**\n * @class ParticipantIdentityInvalidError\n * @classdesc Raised whenever a Participant identity is invalid, and the scenario is not covered by a more specific error code.\n * @extends TwilioError\n * @property {number} code - 53200\n * @property {string} message - 'Participant identity is invalid'\n */\nclass ParticipantIdentityInvalidError extends TwilioError {\n constructor() {\n super(53200, 'Participant identity is invalid');\n Object.setPrototypeOf(this, ParticipantIdentityInvalidError.prototype);\n }\n}\n\nexports.ParticipantIdentityInvalidError = ParticipantIdentityInvalidError;\nObject.defineProperty(TwilioErrorByCode, 53200, { value: ParticipantIdentityInvalidError });\n\n/**\n * @class ParticipantIdentityTooLongError\n * @classdesc Raised whenever a Participant identity is too long.\n * @extends TwilioError\n * @property {number} code - 53201\n * @property {string} message - 'Participant identity is too long'\n */\nclass ParticipantIdentityTooLongError extends TwilioError {\n constructor() {\n super(53201, 'Participant identity is too long');\n Object.setPrototypeOf(this, ParticipantIdentityTooLongError.prototype);\n }\n}\n\nexports.ParticipantIdentityTooLongError = ParticipantIdentityTooLongError;\nObject.defineProperty(TwilioErrorByCode, 53201, { value: ParticipantIdentityTooLongError });\n\n/**\n * @class ParticipantIdentityCharsInvalidError\n * @classdesc Raised whenever a Participant identity contains invalid characters.\n * @extends TwilioError\n * @property {number} code - 53202\n * @property {string} message - 'Participant identity contains invalid characters'\n */\nclass ParticipantIdentityCharsInvalidError extends TwilioError {\n constructor() {\n super(53202, 'Participant identity contains invalid characters');\n Object.setPrototypeOf(this, ParticipantIdentityCharsInvalidError.prototype);\n }\n}\n\nexports.ParticipantIdentityCharsInvalidError = ParticipantIdentityCharsInvalidError;\nObject.defineProperty(TwilioErrorByCode, 53202, { value: ParticipantIdentityCharsInvalidError });\n\n/**\n * @class ParticipantMaxTracksExceededError\n * @classdesc Raised whenever a Participant tries to publish a Track and the maximum number of published tracks allowed in the Room at the same time has been reached\n * @extends TwilioError\n * @property {number} code - 53203\n * @property {string} message - 'The maximum number of published tracks allowed in the Room at the same time has been reached'\n */\nclass ParticipantMaxTracksExceededError extends TwilioError {\n constructor() {\n super(53203, 'The maximum number of published tracks allowed in the Room at the same time has been reached');\n Object.setPrototypeOf(this, ParticipantMaxTracksExceededError.prototype);\n }\n}\n\nexports.ParticipantMaxTracksExceededError = ParticipantMaxTracksExceededError;\nObject.defineProperty(TwilioErrorByCode, 53203, { value: ParticipantMaxTracksExceededError });\n\n/**\n * @class ParticipantNotFoundError\n * @classdesc Raised whenever attempting an operation on a non-existent Participant.\n * @extends TwilioError\n * @property {number} code - 53204\n * @property {string} message - 'Participant not found'\n */\nclass ParticipantNotFoundError extends TwilioError {\n constructor() {\n super(53204, 'Participant not found');\n Object.setPrototypeOf(this, ParticipantNotFoundError.prototype);\n }\n}\n\nexports.ParticipantNotFoundError = ParticipantNotFoundError;\nObject.defineProperty(TwilioErrorByCode, 53204, { value: ParticipantNotFoundError });\n\n/**\n * @class ParticipantDuplicateIdentityError\n * @classdesc Raised by the server to the existing Participant when a new Participant joins a Room with the same identity as the existing Participant.\n * @extends TwilioError\n * @property {number} code - 53205\n * @property {string} message - 'Participant disconnected because of duplicate identity'\n */\nclass ParticipantDuplicateIdentityError extends TwilioError {\n constructor() {\n super(53205, 'Participant disconnected because of duplicate identity');\n Object.setPrototypeOf(this, ParticipantDuplicateIdentityError.prototype);\n }\n}\n\nexports.ParticipantDuplicateIdentityError = ParticipantDuplicateIdentityError;\nObject.defineProperty(TwilioErrorByCode, 53205, { value: ParticipantDuplicateIdentityError });\n\n/**\n * @class TrackInvalidError\n * @classdesc Raised whenever a Track is invalid, and the scenario is not covered by a more specific error code.\n * @extends TwilioError\n * @property {number} code - 53300\n * @property {string} message - 'Track is invalid'\n */\nclass TrackInvalidError extends TwilioError {\n constructor() {\n super(53300, 'Track is invalid');\n Object.setPrototypeOf(this, TrackInvalidError.prototype);\n }\n}\n\nexports.TrackInvalidError = TrackInvalidError;\nObject.defineProperty(TwilioErrorByCode, 53300, { value: TrackInvalidError });\n\n/**\n * @class TrackNameInvalidError\n * @classdesc Raised whenever a Track name is invalid, and the scenario is not covered by a more specific error code.\n * @extends TwilioError\n * @property {number} code - 53301\n * @property {string} message - 'Track name is invalid'\n */\nclass TrackNameInvalidError extends TwilioError {\n constructor() {\n super(53301, 'Track name is invalid');\n Object.setPrototypeOf(this, TrackNameInvalidError.prototype);\n }\n}\n\nexports.TrackNameInvalidError = TrackNameInvalidError;\nObject.defineProperty(TwilioErrorByCode, 53301, { value: TrackNameInvalidError });\n\n/**\n * @class TrackNameTooLongError\n * @classdesc Raised whenever a Track name is too long.\n * @extends TwilioError\n * @property {number} code - 53302\n * @property {string} message - 'Track name is too long'\n */\nclass TrackNameTooLongError extends TwilioError {\n constructor() {\n super(53302, 'Track name is too long');\n Object.setPrototypeOf(this, TrackNameTooLongError.prototype);\n }\n}\n\nexports.TrackNameTooLongError = TrackNameTooLongError;\nObject.defineProperty(TwilioErrorByCode, 53302, { value: TrackNameTooLongError });\n\n/**\n * @class TrackNameCharsInvalidError\n * @classdesc Raised whenever a Track name contains invalid characters.\n * @extends TwilioError\n * @property {number} code - 53303\n * @property {string} message - 'Track name contains invalid characters'\n */\nclass TrackNameCharsInvalidError extends TwilioError {\n constructor() {\n super(53303, 'Track name contains invalid characters');\n Object.setPrototypeOf(this, TrackNameCharsInvalidError.prototype);\n }\n}\n\nexports.TrackNameCharsInvalidError = TrackNameCharsInvalidError;\nObject.defineProperty(TwilioErrorByCode, 53303, { value: TrackNameCharsInvalidError });\n\n/**\n * @class TrackNameIsDuplicatedError\n * @classdesc Raised whenever a Participant is currently publishing a Track with the same name.\n * @extends TwilioError\n * @property {number} code - 53304\n * @property {string} message - 'Track name is duplicated'\n */\nclass TrackNameIsDuplicatedError extends TwilioError {\n constructor() {\n super(53304, 'Track name is duplicated');\n Object.setPrototypeOf(this, TrackNameIsDuplicatedError.prototype);\n }\n}\n\nexports.TrackNameIsDuplicatedError = TrackNameIsDuplicatedError;\nObject.defineProperty(TwilioErrorByCode, 53304, { value: TrackNameIsDuplicatedError });\n\n/**\n * @class TrackServerTrackCapacityReachedError\n * @classdesc The server does not have enough resources available to create a new Track.\n * @extends TwilioError\n * @property {number} code - 53305\n * @property {string} message - 'The server has reached capacity and cannot fulfill this request'\n */\nclass TrackServerTrackCapacityReachedError extends TwilioError {\n constructor() {\n super(53305, 'The server has reached capacity and cannot fulfill this request');\n Object.setPrototypeOf(this, TrackServerTrackCapacityReachedError.prototype);\n }\n}\n\nexports.TrackServerTrackCapacityReachedError = TrackServerTrackCapacityReachedError;\nObject.defineProperty(TwilioErrorByCode, 53305, { value: TrackServerTrackCapacityReachedError });\n\n/**\n * @class MediaClientLocalDescFailedError\n * @classdesc Raised whenever a Client is unable to create or apply a local media description.\n * @extends TwilioError\n * @property {number} code - 53400\n * @property {string} message - 'Client is unable to create or apply a local media description'\n */\nclass MediaClientLocalDescFailedError extends TwilioError {\n constructor() {\n super(53400, 'Client is unable to create or apply a local media description');\n Object.setPrototypeOf(this, MediaClientLocalDescFailedError.prototype);\n }\n}\n\nexports.MediaClientLocalDescFailedError = MediaClientLocalDescFailedError;\nObject.defineProperty(TwilioErrorByCode, 53400, { value: MediaClientLocalDescFailedError });\n\n/**\n * @class MediaServerLocalDescFailedError\n * @classdesc Raised whenever the Server is unable to create or apply a local media description.\n * @extends TwilioError\n * @property {number} code - 53401\n * @property {string} message - 'Server is unable to create or apply a local media description'\n */\nclass MediaServerLocalDescFailedError extends TwilioError {\n constructor() {\n super(53401, 'Server is unable to create or apply a local media description');\n Object.setPrototypeOf(this, MediaServerLocalDescFailedError.prototype);\n }\n}\n\nexports.MediaServerLocalDescFailedError = MediaServerLocalDescFailedError;\nObject.defineProperty(TwilioErrorByCode, 53401, { value: MediaServerLocalDescFailedError });\n\n/**\n * @class MediaClientRemoteDescFailedError\n * @classdesc Raised whenever the Client receives a remote media description but is unable to apply it.\n * @extends TwilioError\n * @property {number} code - 53402\n * @property {string} message - 'Client is unable to apply a remote media description'\n */\nclass MediaClientRemoteDescFailedError extends TwilioError {\n constructor() {\n super(53402, 'Client is unable to apply a remote media description');\n Object.setPrototypeOf(this, MediaClientRemoteDescFailedError.prototype);\n }\n}\n\nexports.MediaClientRemoteDescFailedError = MediaClientRemoteDescFailedError;\nObject.defineProperty(TwilioErrorByCode, 53402, { value: MediaClientRemoteDescFailedError });\n\n/**\n * @class MediaServerRemoteDescFailedError\n * @classdesc Raised whenever the Server receives a remote media description but is unable to apply it.\n * @extends TwilioError\n * @property {number} code - 53403\n * @property {string} message - 'Server is unable to apply a remote media description'\n */\nclass MediaServerRemoteDescFailedError extends TwilioError {\n constructor() {\n super(53403, 'Server is unable to apply a remote media description');\n Object.setPrototypeOf(this, MediaServerRemoteDescFailedError.prototype);\n }\n}\n\nexports.MediaServerRemoteDescFailedError = MediaServerRemoteDescFailedError;\nObject.defineProperty(TwilioErrorByCode, 53403, { value: MediaServerRemoteDescFailedError });\n\n/**\n * @class MediaNoSupportedCodecError\n * @classdesc Raised whenever the intersection of codecs supported by the Client and the Server (or, in peer-to-peer, the Client and another Participant) is empty.\n * @extends TwilioError\n * @property {number} code - 53404\n * @property {string} message - 'No supported codec'\n */\nclass MediaNoSupportedCodecError extends TwilioError {\n constructor() {\n super(53404, 'No supported codec');\n Object.setPrototypeOf(this, MediaNoSupportedCodecError.prototype);\n }\n}\n\nexports.MediaNoSupportedCodecError = MediaNoSupportedCodecError;\nObject.defineProperty(TwilioErrorByCode, 53404, { value: MediaNoSupportedCodecError });\n\n/**\n * @class MediaConnectionError\n * @classdesc Raised by the Client or Server whenever a media connection fails or raised by the Client whenever it detects that media has stopped flowing.\n * @extends TwilioError\n * @property {number} code - 53405\n * @property {string} message - 'Media connection failed or Media activity ceased'\n */\nclass MediaConnectionError extends TwilioError {\n constructor() {\n super(53405, 'Media connection failed or Media activity ceased');\n Object.setPrototypeOf(this, MediaConnectionError.prototype);\n }\n}\n\nexports.MediaConnectionError = MediaConnectionError;\nObject.defineProperty(TwilioErrorByCode, 53405, { value: MediaConnectionError });\n\n/**\n * @class MediaDTLSTransportFailedError\n * @classdesc There was a problem while negotiating with the remote DTLS peer. Therefore the Participant will not be able to publish or subscribe to Tracks.\n * @extends TwilioError\n * @property {number} code - 53407\n * @property {string} message - 'Media connection failed due to DTLS handshake failure'\n */\nclass MediaDTLSTransportFailedError extends TwilioError {\n constructor() {\n super(53407, 'Media connection failed due to DTLS handshake failure');\n Object.setPrototypeOf(this, MediaDTLSTransportFailedError.prototype);\n }\n}\n\nexports.MediaDTLSTransportFailedError = MediaDTLSTransportFailedError;\nObject.defineProperty(TwilioErrorByCode, 53407, { value: MediaDTLSTransportFailedError });\n\n/**\n * @class ConfigurationAcquireFailedError\n * @classdesc Raised whenever the Client is unable to acquire configuration information from the Server.\n * @extends TwilioError\n * @property {number} code - 53500\n * @property {string} message - 'Unable to acquire configuration'\n */\nclass ConfigurationAcquireFailedError extends TwilioError {\n constructor() {\n super(53500, 'Unable to acquire configuration');\n Object.setPrototypeOf(this, ConfigurationAcquireFailedError.prototype);\n }\n}\n\nexports.ConfigurationAcquireFailedError = ConfigurationAcquireFailedError;\nObject.defineProperty(TwilioErrorByCode, 53500, { value: ConfigurationAcquireFailedError });\n\n/**\n * @class ConfigurationAcquireTurnFailedError\n * @classdesc Raised whenever the Server is unable to return TURN credentials to the Client\n * @extends TwilioError\n * @property {number} code - 53501\n * @property {string} message - 'Unable to acquire TURN credentials'\n */\nclass ConfigurationAcquireTurnFailedError extends TwilioError {\n constructor() {\n super(53501, 'Unable to acquire TURN credentials');\n Object.setPrototypeOf(this, ConfigurationAcquireTurnFailedError.prototype);\n }\n}\n\nexports.ConfigurationAcquireTurnFailedError = ConfigurationAcquireTurnFailedError;\nObject.defineProperty(TwilioErrorByCode, 53501, { value: ConfigurationAcquireTurnFailedError });\n","/* eslint-disable camelcase */\nconst TwilioConnection = require('../twilioconnection.js');\nconst { ICE_VERSION } = require('../util/constants');\nconst { createTwilioError, SignalingConnectionError } = require('../util/twilio-video-errors');\n\nimport { RTCIceServer, RTCStats } from './rtctypes';\nimport { EventEmitter } from 'events';\n\n\nexport { RTCStats, RTCIceServer };\nexport function getTurnCredentials(token: string, wsServer: string): Promise {\n return new Promise((resolve, reject) => {\n const eventObserver = new EventEmitter();\n const connectionOptions = {\n networkMonitor: null,\n eventObserver,\n helloBody: {\n edge: 'roaming', // roaming here means use same edge as signaling.\n preflight: true,\n token: token,\n type: 'ice',\n version: ICE_VERSION\n },\n };\n\n const twilioConnection = new TwilioConnection(wsServer, connectionOptions);\n let done = false;\n twilioConnection.once('close', () => {\n if (!done) {\n done = true;\n reject(new SignalingConnectionError());\n }\n });\n\n twilioConnection.on('message', (messageData: {\n code: number;\n message: string;\n ice_servers: RTCIceServer[];\n type: string;\n }) => {\n const { code, message, ice_servers, type } = messageData;\n if ((type === 'iced' || type === 'error') && !done) {\n done = true;\n if (type === 'iced') {\n resolve(ice_servers);\n } else {\n reject(createTwilioError(code, message));\n }\n twilioConnection.close();\n }\n });\n });\n}\n\n","\nimport type { Stats } from '../../tsdef/PreflightTypes';\n\n/**\n * Computes min, max, average for given array.\n * @param {Array} values\n * @returns {{min: number, max: number: average: number}|null}\n */\nexport function makeStat(values?: number[]|null) : Stats|null {\n if (values && values.length) {\n const min = Math.min(...values);\n const max = Math.max(...values);\n const average = values.reduce((total, value) => total + value, 0) / values.length;\n return { min, max, average };\n }\n return null;\n}\n","interface MediaStreamAudioDestinationNode extends AudioNode {\n stream: MediaStream;\n}\n\nexport function syntheticAudio(): MediaStreamTrack {\n // NOTE(mpatwardhan): We have to delay require-ing AudioContextFactory, because\n // it exports a default instance whose constructor calls Object.assign.\n const audioContextFactory = require('../webaudio/audiocontext');\n const holder = {};\n const audioContext = audioContextFactory.getOrCreate(holder);\n const oscillator = audioContext.createOscillator();\n const dst = oscillator.connect(audioContext.createMediaStreamDestination()) as MediaStreamAudioDestinationNode;\n oscillator.start();\n const track = dst.stream.getAudioTracks()[0];\n const originalStop = track.stop;\n track.stop = () => {\n originalStop.call(track);\n audioContextFactory.release(holder);\n };\n return track;\n}\n","interface CanvasElement extends HTMLCanvasElement {\n captureStream(frameRate?: number): MediaStream;\n}\n\nexport function syntheticVideo({ width = 640, height = 480 } = {}): MediaStreamTrack {\n const canvas = Object.assign(\n document.createElement('canvas'), { width, height }\n ) as CanvasElement;\n\n let ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\n ctx.fillStyle = 'green';\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n let stopped = false;\n requestAnimationFrame(function animate() {\n if (!stopped) {\n // draw random rect/circle.\n const r = Math.round(Math.random() * 255);\n const g = Math.round(Math.random() * 255);\n const b = Math.round(Math.random() * 255);\n const a = Math.round(Math.random() * 255);\n ctx.fillStyle = `rgba(${r}, ${g}, ${b}, ${a})`;\n ctx.fillRect(Math.random() * width, Math.random() * height, 50, 50);\n requestAnimationFrame(animate);\n }\n });\n const stream = canvas.captureStream(30);\n const track = stream.getTracks()[0];\n const originalStop = track.stop;\n track.stop = () => {\n stopped = true;\n originalStop.call(track);\n };\n\n return track;\n}\n\n","'use strict';\n\n/**\n * Calculates the moving average delta for the given pair ofsamples. A sample (S)\n * consists of a numerator (Sn) and a denominator (Sd).The moving average delta is\n * calculated as follows:\n *\n * MovingAvgDelta = (Sn[1] - Sn[0]) / (Sd[1] - Sd[0])\n */\nclass MovingAverageDelta {\n /**\n * Constructor.\n */\n constructor() {\n Object.defineProperties(this, {\n _samples: {\n value: [\n { denominator: 0, numerator: 0 },\n { denominator: 0, numerator: 0 }\n ],\n }\n });\n }\n\n /**\n * Get the moving average delta.\n * @returns {number}\n */\n get() {\n const { _samples: samples } = this;\n const denominatorDelta = (samples[1].denominator - samples[0].denominator) || Infinity;\n const numeratorDelta = samples[1].numerator - samples[0].numerator;\n return numeratorDelta / denominatorDelta;\n }\n\n /**\n * Put a sample and get rid of the older sample to maintain sample size of 2.\n * @param numerator\n * @param denominator\n */\n putSample(numerator, denominator) {\n const { _samples: samples } = this;\n samples.shift();\n samples.push({ denominator, numerator });\n }\n}\n\nmodule.exports = MovingAverageDelta;\n","/* eslint-disable no-console */\n'use strict';\n\nconst { EventEmitter } = require('events');\n\nconst VALID_GROUPS = [\n 'signaling',\n 'room',\n 'media',\n 'quality',\n 'video-processor',\n 'preflight'\n];\n\nconst VALID_LEVELS = [\n 'debug',\n 'error',\n 'info',\n 'warning'\n];\n\n/**\n * EventObserver listens to SDK events and re-emits them on the\n * @link EventListener} with some additional information.\n * @extends EventEmitter\n * @emits EventObserver#event\n */\nclass EventObserver extends EventEmitter {\n /**\n * Constructor.\n * @param {InsightsPublisher} publisher\n * @param {number} connectTimestamp\n * @param {Log} log\n * @param {EventListener} [eventListener]\n */\n constructor(publisher, connectTimestamp, log, eventListener = null) {\n super();\n this.on('event', ({ name, group, level, payload }) => {\n if (typeof name !== 'string') {\n log.error('Unexpected name: ', name);\n throw new Error('Unexpected name: ', name);\n }\n\n if (!VALID_GROUPS.includes(group)) {\n log.error('Unexpected group: ', group);\n throw new Error('Unexpected group: ', group);\n }\n\n if (!VALID_LEVELS.includes(level)) {\n log.error('Unexpected level: ', level);\n throw new Error('Unexpected level: ', level);\n }\n\n const timestamp = Date.now();\n const elapsedTime = timestamp - connectTimestamp;\n\n const publisherPayload = Object.assign({ elapsedTime, level }, payload ? payload : {});\n publisher.publish(group, name, publisherPayload);\n\n const event = Object.assign({\n elapsedTime,\n group,\n level,\n name,\n timestamp\n }, payload ? { payload } : {});\n\n const logLevel = {\n debug: 'debug',\n error: 'error',\n info: 'info',\n warning: 'warn',\n }[level];\n log[logLevel]('event', event);\n\n if (eventListener && group === 'signaling') {\n eventListener.emit('event', event);\n }\n });\n }\n}\n\n/**\n * An SDK event.\n * @event EventObserver#event\n * @param {{name: string, payload: *}} event\n */\n\nmodule.exports = EventObserver;\n","/* eslint-disable camelcase */\n'use strict';\n\nconst EventEmitter = require('events').EventEmitter;\n\nconst { getUserAgent } = require('..');\n\nconst MAX_RECONNECT_ATTEMPTS = 5;\nconst RECONNECT_INTERVAL_MS = 50;\nconst WS_CLOSE_NORMAL = 1000;\n\nconst toplevel = globalThis;\nconst WebSocket = toplevel.WebSocket ? toplevel.WebSocket : require('ws');\nconst { hardwareDevicePublisheriPad, hardwareDevicePublisheriPhone } = require('../constants');\nconst util = require('../../util');\nconst browserdetection = require('../browserdetection');\n\n/**\n * Publish events to the Insights gateway.\n * @extends EventEmitter\n * @emits InsightsPublisher#connected\n * @emits InsightsPublisher#disconnected\n * @emits InsightsPublisher#reconnecting\n */\nclass InsightsPublisher extends EventEmitter {\n /**\n * @param {string} token - Insights gateway token\n * @param {string} sdkName - Name of the SDK using the {@link InsightsPublisher}\n * @param {string} sdkVersion - Version of the SDK using the {@link InsightsPublisher}\n * @param {string} environment - One of 'dev', 'stage' or 'prod'\n * @param {string} realm - Region identifier\n * @param {InsightsPublisherOptions} options - Override default behavior\n */\n constructor(token, sdkName, sdkVersion, environment, realm, options) {\n super();\n\n options = Object.assign({\n gateway: `${createGateway(environment, realm)}/v1/VideoEvents`,\n maxReconnectAttempts: MAX_RECONNECT_ATTEMPTS,\n reconnectIntervalMs: RECONNECT_INTERVAL_MS,\n userAgent: getUserAgent(),\n WebSocket,\n }, options);\n\n Object.defineProperties(this, {\n _connectTimestamp: {\n value: 0,\n writable: true\n },\n _eventQueue: {\n value: []\n },\n _readyToConnect: {\n value: util.defer()\n },\n _reconnectAttemptsLeft: {\n value: options.maxReconnectAttempts,\n writable: true\n },\n _ws: {\n value: null,\n writable: true\n },\n _WebSocket: {\n value: options.WebSocket\n }\n });\n\n this._readyToConnect.promise.then(({ roomSid, participantSid }) => {\n const self = this;\n this.on('disconnected', function maybeReconnect(error) {\n self._session = null;\n if (error && self._reconnectAttemptsLeft > 0) {\n self.emit('reconnecting');\n reconnect(self, token, sdkName, sdkVersion, roomSid, participantSid, options);\n return;\n }\n self.removeListener('disconnected', maybeReconnect);\n });\n connect(this, token, sdkName, sdkVersion, roomSid, participantSid, options);\n }).catch(() => {\n // ignore failures to connect\n });\n }\n\n /**\n * Start connecting to the Insights gateway.\n * @param {string} roomSid\n * @param {string} participantSid\n * @returns {void}\n */\n connect(roomSid, participantSid) {\n this._readyToConnect.resolve({ roomSid, participantSid });\n }\n\n /**\n * Publish an event to the Insights gateway.\n * @private\n * @param {*} event\n */\n _publish(event) {\n event.session = this._session;\n this._ws.send(JSON.stringify(event));\n }\n\n /**\n * Disconnect from the Insights gateway.\n * @returns {boolean} true if called when connecting/open, false if not\n */\n disconnect() {\n if (this._ws === null\n || this._ws.readyState === this._WebSocket.CLOSING\n || this._ws.readyState === this._WebSocket.CLOSED) {\n return false;\n }\n\n try {\n this._ws.close();\n } catch (error) {\n // Do nothing.\n }\n this.emit('disconnected');\n\n return true;\n }\n\n /**\n * Publish (or queue, if not connected) an event to the Insights gateway.\n * @param {string} groupName - Event group name\n * @param {string} eventName - Event name\n * @param {object} payload - Event payload\n * @returns {boolean} true if queued or published, false if disconnect() called\n */\n publish(groupName, eventName, payload) {\n if (this._ws !== null\n && (this._ws.readyState === this._WebSocket.CLOSING\n || this._ws.readyState === this._WebSocket.CLOSED)) {\n return false;\n }\n\n const publishOrEnqueue = typeof this._session === 'string'\n ? this._publish.bind(this)\n : this._eventQueue.push.bind(this._eventQueue);\n\n publishOrEnqueue({\n group: groupName,\n name: eventName,\n payload,\n timestamp: Date.now(),\n type: 'event',\n version: 1\n });\n\n return true;\n }\n}\n\n/**\n * Start connecting to the Insights gateway.\n * @private\n * @param {InsightsPublisher} publisher\n * @param {string} name\n * @param {string} token\n * @param {string} sdkName\n * @param {string} sdkVersion\n * @param {string} roomSid\n * @param {string} participantSid\n * @param {InsightsPublisherOptions} options\n */\nfunction connect(publisher, token, sdkName, sdkVersion, roomSid, participantSid, options) {\n publisher._connectTimestamp = Date.now();\n publisher._reconnectAttemptsLeft--;\n publisher._ws = new options.WebSocket(options.gateway);\n const ws = publisher._ws;\n\n ws.addEventListener('close', event => {\n if (event.code === WS_CLOSE_NORMAL) {\n publisher.emit('disconnected');\n return;\n }\n publisher.emit('disconnected', new Error(`WebSocket Error ${event.code}: ${event.reason}`));\n });\n\n ws.addEventListener('message', message => {\n handleConnectResponse(publisher, JSON.parse(message.data), options);\n });\n\n ws.addEventListener('open', () => {\n const connectRequest = {\n type: 'connect',\n token,\n version: 1\n };\n\n connectRequest.publisher = {\n name: sdkName,\n sdkVersion,\n userAgent: options.userAgent,\n participantSid: participantSid,\n roomSid: roomSid,\n };\n\n if (browserdetection.isIpad()) {\n connectRequest.publisher = { ...connectRequest.publisher, ...hardwareDevicePublisheriPad };\n } else if (browserdetection.isIphone()) {\n connectRequest.publisher = { ...connectRequest.publisher, ...hardwareDevicePublisheriPhone };\n }\n\n ws.send(JSON.stringify(connectRequest));\n });\n}\n\n/**\n * Create the Insights Websocket gateway URL.\n * @param {string} environment\n * @param {string} realm\n * @returns {string}\n */\nfunction createGateway(environment, realm) {\n return environment === 'prod' ? `wss://sdkgw.${realm}.twilio.com`\n : `wss://sdkgw.${environment}-${realm}.twilio.com`;\n}\n\n/**\n * Handle connect response from the Insights gateway.\n * @param {InsightsPublisher} publisher\n * @param {*} response\n * @param {InsightsPublisherOptions} options\n */\nfunction handleConnectResponse(publisher, response, options) {\n switch (response.type) {\n case 'connected':\n publisher._session = response.session;\n publisher._reconnectAttemptsLeft = options.maxReconnectAttempts;\n publisher._eventQueue.splice(0).forEach(publisher._publish, publisher);\n publisher.emit('connected');\n break;\n case 'error':\n publisher._ws.close();\n publisher.emit('disconnected', new Error(response.message));\n break;\n }\n}\n\n/**\n * Start re-connecting to the Insights gateway with an appropriate delay based\n * on InsightsPublisherOptions#reconnectIntervalMs.\n * @private\n * @param {InsightsPublisher} publisher\n * @param {string} token\n * @param {string} sdkName\n * @param {string} sdkVersion\n * @param {string} roomSid\n * @param {string} participantSid\n * @param {InsightsPublisherOptions} options\n */\nfunction reconnect(publisher, token, sdkName, sdkVersion, roomSid, participantSid, options) {\n const connectInterval = Date.now() - publisher._connectTimestamp;\n const timeToWait = options.reconnectIntervalMs - connectInterval;\n\n if (timeToWait > 0) {\n setTimeout(() => {\n connect(publisher, token, sdkName, sdkVersion, roomSid, participantSid, options);\n }, timeToWait);\n return;\n }\n\n connect(publisher, token, sdkName, sdkVersion, roomSid, participantSid, options);\n}\n\n/**\n * The {@link InsightsPublisher} is connected to the gateway.\n * @event InsightsPublisher#connected\n */\n\n/**\n * The {@link InsightsPublisher} is disconnected from the gateway.\n * @event InsightsPublisher#disconnected\n * @param {Error} [error] - Optional error if disconnected unintentionally\n */\n\n/**\n * The {@link InsightsPublisher} is re-connecting to the gateway.\n * @event InsightsPublisher#reconnecting\n */\n\n/**\n * {@link InsightsPublisher} options.\n * @typedef {object} InsightsPublisherOptions\n * @property {string} [gateway=sdkgw.{environment}-{realm}.twilio.com] - Insights WebSocket gateway url\n * @property {number} [maxReconnectAttempts=5] - Max re-connect attempts\n * @property {number} [reconnectIntervalMs=50] - Re-connect interval in ms\n */\n\nmodule.exports = InsightsPublisher;\n","import { DEFAULT_ENVIRONMENT, DEFAULT_LOGGER_NAME, DEFAULT_LOG_LEVEL, DEFAULT_REALM, SDK_NAME, SDK_VERSION } from '../util/constants';\nimport { PreflightOptions, PreflightTestReport, ProgressEvent, RTCIceCandidateStats, SelectedIceCandidatePairStats, Stats } from '../../tsdef/PreflightTypes';\nimport { StatsReport } from '../../tsdef/types';\nimport { Timer } from './timer';\nimport { TwilioError } from '../../tsdef/TwilioError';\nimport { calculateMOS } from './mos';\nimport { getCombinedConnectionStats } from './getCombinedConnectionStats';\nimport { getTurnCredentials } from './getturncredentials';\nimport { makeStat } from './makestat';\nimport { syntheticAudio } from './syntheticaudio';\nimport { syntheticVideo } from './syntheticvideo';\nimport { waitForSometime } from '../util/index';\n\nconst { WS_SERVER } = require('../util/constants');\nconst Log = require('../util/log');\nconst EventEmitter = require('../eventemitter');\nconst MovingAverageDelta = require('../util/movingaveragedelta');\nconst EventObserver = require('../util/eventobserver');\nconst InsightsPublisher = require('../util/insightspublisher');\nconst { createSID, sessionSID } = require('../util/sid');\nconst {\n SignalingConnectionTimeoutError,\n MediaConnectionError\n} = require('../util/twilio-video-errors');\n\nconst SECOND = 1000;\nconst DEFAULT_TEST_DURATION = 10 * SECOND;\n\n/**\n * progress values that are sent by {@link PreflightTest#event:progress}\n * @enum {string}\n */\nconst PreflightProgress = {\n /**\n * {@link PreflightTest} has successfully generated synthetic tracks\n */\n mediaAcquired: 'mediaAcquired',\n\n /**\n * {@link PreflightTest} has successfully connected to twilio server and obtained turn credentials\n */\n connected: 'connected',\n\n /**\n * SubscriberParticipant successfully subscribed to media tracks.\n */\n mediaSubscribed: 'mediaSubscribed',\n\n /**\n * Media flow was detected.\n */\n mediaStarted: 'mediaStarted',\n\n /**\n * Established DTLS connection. This is measured from RTCDtlsTransport `connecting` to `connected` state.\n * On Safari, Support for measuring this is missing, this event will be not be emitted on Safari.\n */\n dtlsConnected: 'dtlsConnected',\n\n /**\n * Established a PeerConnection, This is measured from PeerConnection `connecting` to `connected` state.\n * On Firefox, Support for measuring this is missing, this event will be not be emitted on Firefox.\n */\n peerConnectionConnected: 'peerConnectionConnected',\n\n /**\n * Established ICE connection. This is measured from ICE connection `checking` to `connected` state.\n */\n iceConnected: 'iceConnected'\n};\n\ndeclare interface PreflightStats {\n jitter: number[],\n rtt: number[],\n outgoingBitrate: number[],\n incomingBitrate: number[],\n packetLoss: number[], // fraction of packets lost.\n mos: number[],\n selectedIceCandidatePairStats: SelectedIceCandidatePairStats | null,\n iceCandidateStats: RTCIceCandidateStats[],\n}\n\ndeclare interface PreflightTestReportInternal extends PreflightTestReport {\n error?: string,\n mos?: Stats|null\n}\n\ndeclare interface PreflightOptionsInternal extends PreflightOptions {\n environment?: string;\n wsServer?: string;\n}\n\nfunction notEmpty(value: TValue | null | undefined): value is TValue {\n return value !== null && typeof value !== 'undefined';\n}\n\nlet nInstances = 0;\n\n/**\n * A {@link PreflightTest} monitors progress of an ongoing preflight test.\n *

\n * Instance of {@link PreflightTest} is returned by calling {@link module:twilio-video.runPreflight}\n * @extends EventEmitter\n * @emits PreflightTest#completed\n * @emits PreflightTest#failed\n * @emits PreflightTest#progress\n */\nexport class PreflightTest extends EventEmitter {\n\n private _testTiming = new Timer();\n private _dtlsTiming = new Timer();\n private _iceTiming = new Timer();\n private _peerConnectionTiming = new Timer();\n private _mediaTiming = new Timer();\n private _connectTiming = new Timer();\n private _sentBytesMovingAverage = new MovingAverageDelta();\n private _packetLossMovingAverage = new MovingAverageDelta();\n private _progressEvents: ProgressEvent[] = [];\n private _receivedBytesMovingAverage = new MovingAverageDelta();\n private _log: typeof Log;\n private _testDuration: number;\n private _instanceId: number;\n\n /**\n * Constructs {@link PreflightTest}.\n * @param {string} token\n * @param {?PreflightOptions} [options]\n */\n constructor(token: string, options: PreflightOptions) {\n super();\n const internalOptions = options as PreflightOptionsInternal;\n const { environment = 'prod', region = 'gll', duration = DEFAULT_TEST_DURATION } = internalOptions;\n // eslint-disable-next-line new-cap\n const wsServer = internalOptions.wsServer || WS_SERVER(environment, region);\n\n this._log = new Log('default', this, DEFAULT_LOG_LEVEL, DEFAULT_LOGGER_NAME);\n this._testDuration = duration;\n this._instanceId = nInstances++;\n this._testTiming.start();\n this._runPreflightTest(token, environment, wsServer);\n }\n\n toString(): string {\n return `[Preflight #${this._instanceId}]`;\n }\n\n /**\n * stops ongoing tests and emits error\n */\n stop():void {\n this._stopped = true;\n }\n\n private _generatePreflightReport(collectedStats?: PreflightStats) : PreflightTestReportInternal {\n this._testTiming.stop();\n return {\n testTiming: this._testTiming.getTimeMeasurement(),\n networkTiming: {\n dtls: this._dtlsTiming.getTimeMeasurement(),\n ice: this._iceTiming.getTimeMeasurement(),\n peerConnection: this._peerConnectionTiming.getTimeMeasurement(),\n connect: this._connectTiming.getTimeMeasurement(),\n media: this._mediaTiming.getTimeMeasurement()\n },\n stats: {\n jitter: makeStat(collectedStats?.jitter),\n rtt: makeStat(collectedStats?.rtt),\n packetLoss: makeStat(collectedStats?.packetLoss),\n },\n selectedIceCandidatePairStats: collectedStats ? collectedStats.selectedIceCandidatePairStats : null,\n iceCandidateStats: collectedStats ? collectedStats.iceCandidateStats : [],\n progressEvents: this._progressEvents,\n // NOTE(mpatwardhan): internal properties.\n mos: makeStat(collectedStats?.mos),\n };\n }\n\n private async _executePreflightStep(stepName: string, step: () => T|Promise, timeoutError?: TwilioError|Error) : Promise {\n this._log.debug('Executing step: ', stepName);\n const MAX_STEP_DURATION = this._testDuration + 10 * SECOND;\n if (this._stopped) {\n throw new Error('stopped');\n }\n\n const stepPromise = Promise.resolve().then(step);\n let timer: number | null = null;\n const timeoutPromise = new Promise((_resolve, reject) => {\n timer = setTimeout(() => {\n reject(timeoutError || new Error(`${stepName} timeout.`));\n }, MAX_STEP_DURATION) as unknown as number;\n });\n try {\n const result = await Promise.race([timeoutPromise, stepPromise]);\n return result as T;\n } finally {\n if (timer !== null) {\n clearTimeout(timer);\n }\n }\n }\n\n private _collectNetworkTimings(pc: RTCPeerConnection): Promise {\n return new Promise(resolve => {\n let dtlsTransport: RTCDtlsTransport;\n\n pc.addEventListener('iceconnectionstatechange', () => {\n if (pc.iceConnectionState === 'checking') {\n this._iceTiming.start();\n }\n if (pc.iceConnectionState === 'connected') {\n this._iceTiming.stop();\n this._updateProgress(PreflightProgress.iceConnected);\n if (!dtlsTransport || dtlsTransport && dtlsTransport.state === 'connected') {\n resolve();\n }\n }\n });\n\n // firefox does not support connectionstatechange.\n pc.addEventListener('connectionstatechange', () => {\n if (pc.connectionState === 'connecting') {\n this._peerConnectionTiming.start();\n }\n if (pc.connectionState === 'connected') {\n this._peerConnectionTiming.stop();\n this._updateProgress(PreflightProgress.peerConnectionConnected);\n }\n });\n\n // Safari does not expose sender.transport.\n let senders = pc.getSenders();\n let transport = senders.map(sender => sender.transport).find(notEmpty);\n if (typeof transport !== 'undefined') {\n dtlsTransport = transport as RTCDtlsTransport;\n dtlsTransport.addEventListener('statechange', () => {\n if (dtlsTransport.state === 'connecting') {\n this._dtlsTiming.start();\n }\n if (dtlsTransport.state === 'connected') {\n this._dtlsTiming.stop();\n this._updateProgress(PreflightProgress.dtlsConnected);\n if (pc.iceConnectionState === 'connected') {\n resolve();\n }\n }\n });\n }\n });\n }\n\n private _setupInsights({ token, environment = DEFAULT_ENVIRONMENT, realm = DEFAULT_REALM } : {\n token: string,\n environment?: string,\n realm?: string\n }) {\n const eventPublisherOptions = {};\n const eventPublisher = new InsightsPublisher(\n token,\n SDK_NAME,\n SDK_VERSION,\n environment,\n realm,\n eventPublisherOptions);\n\n // event publisher requires room sid/participant sid. supply fake ones.\n eventPublisher.connect('PREFLIGHT_ROOM_SID', 'PREFLIGHT_PARTICIPANT');\n const eventObserver = new EventObserver(eventPublisher, Date.now(), this._log);\n\n // eslint-disable-next-line no-undefined\n const undefinedValue = undefined;\n return {\n reportToInsights: ({ report }: { report: PreflightTestReportInternal }) => {\n const jitterStats = report.stats.jitter || undefinedValue;\n const rttStats = report.stats.rtt || undefinedValue;\n const packetLossStats = report.stats.packetLoss || undefinedValue;\n const mosStats = report.mos || undefinedValue;\n\n // stringify important info from ice candidates.\n const candidateTypeToProtocols = new Map();\n report.iceCandidateStats.forEach(candidateStats => {\n if (candidateStats.candidateType && candidateStats.protocol) {\n let protocols = candidateTypeToProtocols.get(candidateStats.candidateType) || [];\n if (protocols.indexOf(candidateStats.protocol) < 0) {\n protocols.push(candidateStats.protocol);\n }\n candidateTypeToProtocols.set(candidateStats.candidateType, protocols);\n }\n });\n const iceCandidateStats = JSON.stringify(Object.fromEntries(candidateTypeToProtocols));\n\n const insightsReport = {\n name: 'report',\n group: 'preflight',\n level: report.error ? 'error' : 'info',\n payload: {\n sessionSID,\n preflightSID: createSID('PF'),\n progressEvents: JSON.stringify(report.progressEvents),\n testTiming: report.testTiming,\n dtlsTiming: report.networkTiming.dtls,\n iceTiming: report.networkTiming.ice,\n peerConnectionTiming: report.networkTiming.peerConnection,\n connectTiming: report.networkTiming.connect,\n mediaTiming: report.networkTiming.media,\n selectedLocalCandidate: report.selectedIceCandidatePairStats?.localCandidate,\n selectedRemoteCandidate: report.selectedIceCandidatePairStats?.remoteCandidate,\n iceCandidateStats,\n jitterStats,\n rttStats,\n packetLossStats,\n mosStats,\n error: report.error\n }\n };\n eventObserver.emit('event', insightsReport);\n setTimeout(() => eventPublisher.disconnect(), 2000);\n }\n };\n }\n\n private async _runPreflightTest(token: string, environment: string, wsServer: string) {\n let localTracks: MediaStreamTrack[] = [];\n let pcs: RTCPeerConnection[] = [];\n const { reportToInsights } = this._setupInsights({ token, environment });\n try {\n let elements = [];\n localTracks = await this._executePreflightStep('Acquire media', () => [syntheticAudio(), syntheticVideo({ width: 640, height: 480 })]);\n\n this._updateProgress(PreflightProgress.mediaAcquired);\n this.emit('debug', { localTracks });\n\n this._connectTiming.start();\n let iceServers = await this._executePreflightStep('Get turn credentials', () => getTurnCredentials(token, wsServer), new SignalingConnectionTimeoutError());\n\n this._connectTiming.stop();\n this._updateProgress(PreflightProgress.connected);\n\n const senderPC: RTCPeerConnection = new RTCPeerConnection({ iceServers, iceTransportPolicy: 'relay', bundlePolicy: 'max-bundle' });\n const receiverPC: RTCPeerConnection = new RTCPeerConnection({ iceServers, bundlePolicy: 'max-bundle' });\n pcs.push(senderPC);\n pcs.push(receiverPC);\n\n this._mediaTiming.start();\n const remoteTracks = await this._executePreflightStep('Setup Peer Connections', async () => {\n senderPC.addEventListener('icecandidate', (event: RTCPeerConnectionIceEvent) => event.candidate && receiverPC.addIceCandidate(event.candidate));\n receiverPC.addEventListener('icecandidate', (event: RTCPeerConnectionIceEvent) => event.candidate && senderPC.addIceCandidate(event.candidate));\n\n localTracks.forEach(track => senderPC.addTrack(track));\n\n const remoteTracksPromise: Promise = new Promise(resolve => {\n let remoteTracks: MediaStreamTrack[] = [];\n receiverPC.addEventListener('track', event => {\n remoteTracks.push(event.track);\n if (remoteTracks.length === localTracks.length) {\n resolve(remoteTracks);\n }\n });\n });\n\n const offer = await senderPC.createOffer();\n const updatedOffer = offer;\n await senderPC.setLocalDescription(updatedOffer);\n await receiverPC.setRemoteDescription(updatedOffer);\n\n const answer = await receiverPC.createAnswer();\n await receiverPC.setLocalDescription(answer);\n await senderPC.setRemoteDescription(answer);\n await this._collectNetworkTimings(senderPC);\n\n return remoteTracksPromise;\n }, new MediaConnectionError());\n this.emit('debug', { remoteTracks });\n remoteTracks.forEach(track => {\n track.addEventListener('ended', () => this._log.warn(track.kind + ':ended'));\n track.addEventListener('mute', () => this._log.warn(track.kind + ':muted'));\n track.addEventListener('unmute', () => this._log.warn(track.kind + ':unmuted'));\n });\n this._updateProgress(PreflightProgress.mediaSubscribed);\n\n await this._executePreflightStep('Wait for tracks to start', () => {\n return new Promise(resolve => {\n const element = document.createElement('video');\n element.autoplay = true;\n element.playsInline = true;\n element.muted = true;\n element.srcObject = new MediaStream(remoteTracks);\n elements.push(element);\n this.emit('debugElement', element);\n element.oncanplay = resolve;\n });\n }, new MediaConnectionError());\n this._mediaTiming.stop();\n this._updateProgress(PreflightProgress.mediaStarted);\n\n const collectedStats = await this._executePreflightStep('Collect stats for duration',\n () => this._collectRTCStatsForDuration(this._testDuration, initCollectedStats(), senderPC, receiverPC));\n\n const report = await this._executePreflightStep('Generate report', () => this._generatePreflightReport(collectedStats));\n reportToInsights({ report });\n this.emit('completed', report);\n\n } catch (error) {\n const preflightReport = this._generatePreflightReport();\n reportToInsights({ report: { ...preflightReport, error: error?.toString() } });\n this.emit('failed', error, preflightReport);\n } finally {\n pcs.forEach(pc => pc.close());\n localTracks.forEach(track => track.stop());\n }\n }\n\n private async _collectRTCStats(collectedStats: PreflightStats, senderPC: RTCPeerConnection, receiverPC: RTCPeerConnection) {\n const combinedStats = await getCombinedConnectionStats({ publisher: senderPC, subscriber: receiverPC });\n const { timestamp, bytesSent, bytesReceived, packets, packetsLost, roundTripTime, jitter, selectedIceCandidatePairStats, iceCandidateStats } = combinedStats;\n const hasLastData = collectedStats.jitter.length > 0;\n collectedStats.jitter.push(jitter);\n collectedStats.rtt.push(roundTripTime);\n\n this._sentBytesMovingAverage.putSample(bytesSent, timestamp);\n this._receivedBytesMovingAverage.putSample(bytesReceived, timestamp);\n this._packetLossMovingAverage.putSample(packetsLost, packets);\n if (hasLastData) {\n // convert BytesMovingAverage which is in bytes/millisecond to bits/second\n collectedStats.outgoingBitrate.push(this._sentBytesMovingAverage.get() * 1000 * 8);\n collectedStats.incomingBitrate.push(this._receivedBytesMovingAverage.get() * 1000 * 8);\n const fractionPacketLost = this._packetLossMovingAverage.get();\n const percentPacketsLost = Math.min(100, fractionPacketLost * 100);\n\n collectedStats.packetLoss.push(percentPacketsLost);\n\n const score = calculateMOS(roundTripTime, jitter, fractionPacketLost);\n collectedStats.mos.push(score);\n }\n\n if (!collectedStats.selectedIceCandidatePairStats) {\n collectedStats.selectedIceCandidatePairStats = selectedIceCandidatePairStats;\n }\n\n if (collectedStats.iceCandidateStats.length === 0) {\n collectedStats.iceCandidateStats = iceCandidateStats;\n }\n }\n\n private async _collectRTCStatsForDuration(duration: number, collectedStats: PreflightStats, senderPC: RTCPeerConnection, receiverPC: RTCPeerConnection) : Promise {\n const startTime = Date.now();\n const STAT_INTERVAL = Math.min(1000, duration);\n\n await waitForSometime(STAT_INTERVAL);\n\n await this._collectRTCStats(collectedStats, senderPC, receiverPC);\n\n const remainingDuration = duration - (Date.now() - startTime);\n\n if (remainingDuration > 0) {\n collectedStats = await this._collectRTCStatsForDuration(remainingDuration, collectedStats, senderPC, receiverPC);\n }\n return collectedStats;\n }\n\n private _updateProgress(name: string): void {\n const duration = Date.now() - this._testTiming.getTimeMeasurement().start;\n this._progressEvents.push({ duration, name });\n this.emit('progress', name);\n }\n}\n\n\nexport interface InternalStatsReport extends StatsReport {\n activeIceCandidatePair: {\n timestamp: number;\n bytesSent: number;\n bytesReceived: number;\n currentRoundTripTime?: number;\n localCandidate: RTCIceCandidateStats;\n remoteCandidate: RTCIceCandidateStats;\n }\n}\n\nfunction initCollectedStats() : PreflightStats {\n return {\n mos: [],\n jitter: [],\n rtt: [],\n outgoingBitrate: [],\n incomingBitrate: [],\n packetLoss: [],\n selectedIceCandidatePairStats: null,\n iceCandidateStats: [],\n };\n}\n\n/**\n * Represents network timing measurements captured during preflight test\n * @typedef {object} NetworkTiming\n * @property {TimeMeasurement} [connect] - Time to establish signaling connection and acquire turn credentials\n * @property {TimeMeasurement} [media] - Time to start media. This is measured from calling connect to remote media getting started.\n * @property {TimeMeasurement} [dtls] - Time to establish dtls connection. This is measured from RTCDtlsTransport `connecting` to `connected` state. (Not available on Safari)\n * @property {TimeMeasurement} [ice] - Time to establish ice connectivity. This is measured from ICE connection `checking` to `connected` state.\n * @property {TimeMeasurement} [peerConnection] - Time to establish peer connectivity. This is measured from PeerConnection `connecting` to `connected` state. (Not available on Firefox)\n */\n\n/**\n * Represents stats for a numerical metric.\n * @typedef {object} Stats\n * @property {number} [average] - Average value observed.\n * @property {number} [max] - Max value observed.\n * @property {number} [min] - Min value observed.\n */\n\n/**\n * Represents stats for a numerical metric.\n * @typedef {object} SelectedIceCandidatePairStats\n * @property {RTCIceCandidateStats} [localCandidate] - Selected local ice candidate\n * @property {RTCIceCandidateStats} [remoteCandidate] - Selected local ice candidate\n */\n\n/**\n * Represents RTC related stats that were observed during preflight test\n * @typedef {object} PreflightReportStats\n * @property {Stats} [jitter] - Packet delay variation in seconds\n * @property {Stats} [rtt] - Round trip time, to the server back to the client in milliseconds.\n * @property {Stats} [packetLoss] - Packet loss as a percent of total packets sent.\n*/\n\n/**\n * A {@link PreflightProgress} event with timing information.\n * @typedef {object} ProgressEvent\n * @property {number} [duration] - The duration of the event, measured from the start of the test.\n * @property {string} [name] - The {@link PreflightProgress} event name.\n */\n\n/**\n * Represents report generated by {@link PreflightTest}.\n * @typedef {object} PreflightTestReport\n * @property {TimeMeasurement} [testTiming] - Time measurements of test run time.\n * @property {NetworkTiming} [networkTiming] - Network related time measurements.\n * @property {PreflightReportStats} [stats] - RTC related stats captured during the test.\n * @property {Array} [iceCandidateStats] - List of gathered ice candidates.\n * @property {SelectedIceCandidatePairStats} selectedIceCandidatePairStats - Stats for the ice candidates that were used for the connection.\n * @property {Array} [progressEvents] - {@link ProgressEvent} events detected during the test.\n * Use this information to determine which steps were completed and which ones were not.\n */\n\n/**\n * You may pass these options to {@link module:twilio-video.testPreflight} in order to override the\n * default behavior.\n * @typedef {object} PreflightOptions\n * @property {string} [region='gll'] - Preferred signaling region; By default, you will be connected to the\n * nearest signaling server determined by latency based routing. Setting a value other\n * than gll bypasses routing and guarantees that signaling traffic will be\n * terminated in the region that you prefer. Please refer to this table\n * for the list of supported signaling regions.\n * @property {number} [duration=10000] - number of milliseconds to run test for.\n * once connected test will run for this duration before generating the stats report.\n */\n\n/**\n * Preflight test has completed successfully.\n * @param {PreflightTestReport} report - Results of the test.\n * @event PreflightTest#completed\n */\n\n/**\n * Preflight test has encountered a failure and is now stopped.\n * @param {TwilioError|Error} error - A TwilioError or a DOMException.\n * Possible TwilioErrors include Signaling and Media related errors which can be found\n * here.\n * @param {PreflightTestReport} report - Partial results gathered during the test. Use this information to help determine the cause of failure.\n * @event PreflightTest#failed\n */\n\n/**\n * Emitted to indicate progress of the test\n * @param {PreflightProgress} progress - Indicates the status completed.\n * @event PreflightTest#progress\n */\n\n/**\n * @method\n * @name runPreflight\n * @description Run a preflight test. This method will start a test to check the quality of network connection.\n * @memberof module:twilio-video\n * @param {string} token - The Access Token string\n * @param {PreflightOptions} options - Options for the test\n * @returns {PreflightTest} preflightTest - An instance to be used to monitor progress of the test.\n * @example\n * var { runPreflight } = require('twilio-video');\n * var preflight = runPreflight(token, preflightOptions);\n * preflightTest.on('progress', progress => {\n * console.log('preflight progress:', progress);\n * });\n *\n * preflightTest.on('failed', (error, report) => {\n * console.error('preflight error:', error, report);\n * });\n *\n * preflightTest.on('completed', report => {\n * console.log('preflight completed:', report));\n * });\n*/\nexport function runPreflight(token: string, options: PreflightOptions = {}): PreflightTest {\n const preflight = new PreflightTest(token, options);\n return preflight;\n}\n\n","'use strict';\n\n/**\n * A Promise that can be canceled with {@link CancelablePromise#cancel}.\n * @extends Promise\n*/\nclass CancelablePromise {\n /**\n * Construct a new {@link CancelablePromise}.\n * @param {CancelablePromise.OnCreate} onCreate\n * @param {CancelablePromise.OnCancel} onCancel\n *//**\n * A function to be called on {@link CancelablePromise} creation\n * @typedef {function} CancelablePromise.OnCreate\n * @param {function(*)} resolve\n * @param {function(*)} reject\n * @param {function(): boolean} isCanceled\n *//**\n * A function to be called when {@link CancelablePromise#cancel} is called\n * @typedef {function} CancelablePromise.OnCancel\n */\n constructor(onCreate, onCancel) {\n /* istanbul ignore next */\n Object.defineProperties(this, {\n _isCancelable: {\n writable: true,\n value: true\n },\n _isCanceled: {\n writable: true,\n value: false\n },\n _onCancel: {\n value: onCancel\n }\n });\n\n Object.defineProperty(this, '_promise', {\n value: new Promise((resolve, reject) => {\n onCreate(value => {\n this._isCancelable = false;\n resolve(value);\n }, reason => {\n this._isCancelable = false;\n reject(reason);\n }, () => this._isCanceled);\n })\n });\n }\n\n /**\n * Create a synchronously-rejected {@link CancelablePromise}.\n * @param {*} reason\n * @returns {Promise<*>}\n */\n static reject(reason) {\n return new CancelablePromise(function rejected(resolve, reject) {\n reject(reason);\n }, function onCancel() {\n // Do nothing.\n });\n }\n\n /**\n * Create a synchronously-resolved {@link CancelablePromise}.\n * @param {*|Promise<*>|Thenable<*>} result\n * @returns {CancelablePromise<*>}\n */\n static resolve(result) {\n return new CancelablePromise(function resolved(resolve) {\n resolve(result);\n }, function onCancel() {\n // Do nothing.\n });\n }\n\n /**\n * Attempt to cancel the {@link CancelablePromise}.\n * @returns {this}\n */\n cancel() {\n if (this._isCancelable) {\n this._isCanceled = true;\n this._onCancel();\n }\n return this;\n }\n\n /**\n * @param {function} onRejected\n * @returns {CancelablePromise}\n */\n catch() {\n const args = [].slice.call(arguments);\n const promise = this._promise;\n return new CancelablePromise(function onCreate(resolve, reject) {\n promise.catch(...args).then(resolve, reject);\n }, this._onCancel);\n }\n\n /**\n * @param {?function} onResolved\n * @param {function} [onRejected]\n * @returns {CancelablePromise}\n */\n then() {\n const args = [].slice.call(arguments);\n const promise = this._promise;\n return new CancelablePromise(function onCreate(resolve, reject) {\n promise.then(...args).then(resolve, reject);\n }, this._onCancel);\n }\n\n /**\n * @param {?function} onFinally\n * @returns {CancelablePromise}\n */\n finally() {\n const args = [].slice.call(arguments);\n const promise = this._promise;\n return new CancelablePromise(function onCreate(resolve, reject) {\n promise.finally(...args).then(resolve, reject);\n }, this._onCancel);\n }\n}\n\nmodule.exports = CancelablePromise;\n","'use strict';\n\nconst CancelablePromise = require('./util/cancelablepromise');\n\n/**\n * Create a {@link CancelablePromise}.\n * @param {function(function(Array): CancelablePromise):\n * Promise>} getLocalTracks\n * @param {function(Array): LocalParticipant} createLocalParticipant\n * @param {function(Array): CancelablePromise} createRoomSignaling\n * @param {function(LocalParticipant, RoomSignaling): Room} createRoom\n * @returns CancelablePromise\n */\nfunction createCancelableRoomPromise(getLocalTracks, createLocalParticipant, createRoomSignaling, createRoom) {\n let cancelableRoomSignalingPromise;\n const cancellationError = new Error('Canceled');\n\n return new CancelablePromise(function onCreate(resolve, reject, isCanceled) {\n let localParticipant;\n getLocalTracks(function getLocalTracksSucceeded(localTracks) {\n if (isCanceled()) {\n return CancelablePromise.reject(cancellationError);\n }\n localParticipant = createLocalParticipant(localTracks);\n return createRoomSignaling(localParticipant).then(function createRoomSignalingSucceeded(getCancelableRoomSignalingPromise) {\n if (isCanceled()) {\n throw cancellationError;\n }\n cancelableRoomSignalingPromise = getCancelableRoomSignalingPromise();\n return cancelableRoomSignalingPromise;\n });\n }).then(function roomSignalingConnected(roomSignaling) {\n if (isCanceled()) {\n roomSignaling.disconnect();\n throw cancellationError;\n }\n resolve(createRoom(localParticipant, roomSignaling));\n }).catch(function onError(error) {\n reject(error);\n });\n }, function onCancel() {\n if (cancelableRoomSignalingPromise) {\n cancelableRoomSignalingPromise.cancel();\n }\n });\n}\n\nmodule.exports = createCancelableRoomPromise;\n","'use strict';\n\nconst EventEmitter = require('events').EventEmitter;\n\n/**\n * {@link EncodingParametersImpl} represents an object which notifies its\n * listeners of any changes in the values of its properties.\n * @extends EventEmitter\n * @implements EncodingParameters\n * @emits EncodingParametersImpl#changed\n * @property {?number} maxAudioBitrate\n * @property {?number} maxVideoBitrate\n */\nclass EncodingParametersImpl extends EventEmitter {\n /**\n * Construct an {@link EncodingParametersImpl}.\n * @param {EncodingParamters} encodingParameters - Initial {@link EncodingParameters}\n * @param {Boolean} adaptiveSimulcast - true if adaptive simulcast was enabled by connect options.\n */\n constructor(encodingParameters, adaptiveSimulcast) {\n super();\n\n encodingParameters = Object.assign({\n maxAudioBitrate: null,\n maxVideoBitrate: null\n }, encodingParameters);\n\n Object.defineProperties(this, {\n maxAudioBitrate: {\n value: encodingParameters.maxAudioBitrate,\n writable: true\n },\n maxVideoBitrate: {\n value: encodingParameters.maxVideoBitrate,\n writable: true\n },\n adaptiveSimulcast: {\n value: adaptiveSimulcast\n }\n });\n }\n\n /**\n * Returns the bitrate values in an {@link EncodingParameters}.\n * @returns {EncodingParameters}\n */\n toJSON() {\n return {\n maxAudioBitrate: this.maxAudioBitrate,\n maxVideoBitrate: this.maxVideoBitrate\n };\n }\n\n /**\n * Update the bitrate values with those in the given {@link EncodingParameters}.\n * @param {EncodingParameters} encodingParameters - The new {@link EncodingParameters}\n * @fires EncodingParametersImpl#changed\n */\n update(encodingParameters) {\n encodingParameters = Object.assign({\n maxAudioBitrate: this.maxAudioBitrate,\n maxVideoBitrate: this.maxVideoBitrate\n }, encodingParameters);\n\n const shouldEmitChanged = [\n 'maxAudioBitrate',\n 'maxVideoBitrate'\n ].reduce((shouldEmitChanged, maxKindBitrate) => {\n if (this[maxKindBitrate] !== encodingParameters[maxKindBitrate]) {\n this[maxKindBitrate] = encodingParameters[maxKindBitrate];\n shouldEmitChanged = true;\n }\n return shouldEmitChanged;\n }, false);\n\n if (shouldEmitChanged) {\n this.emit('changed');\n }\n }\n}\n\n/**\n * At least one of the {@link EncodingParametersImpl}'s bitrate values changed.\n * @event EncodingParametersImpl#changed\n */\n\nmodule.exports = EncodingParametersImpl;\n","'use strict';\n\nconst { isNonArrayObject } = require('./');\nconst { typeErrors: E, clientTrackSwitchOffControl, videoContentPreferencesMode, subscriptionMode, trackPriority, trackSwitchOffMode } = require('./constants');\n\n/**\n * Validate the {@link BandwidthProfileOptions} object.\n * @param {BandwidthProfileOptions} bandwidthProfile\n * @returns {?Error} - null if valid, Error if not.\n */\nfunction validateBandwidthProfile(bandwidthProfile) {\n let error = validateObject(bandwidthProfile, 'options.bandwidthProfile');\n if (!bandwidthProfile || error) {\n return error;\n }\n error = validateObject(bandwidthProfile.video, 'options.bandwidthProfile.video', [\n { prop: 'contentPreferencesMode', values: Object.values(videoContentPreferencesMode) },\n { prop: 'dominantSpeakerPriority', values: Object.values(trackPriority) },\n { prop: 'maxSubscriptionBitrate', type: 'number' },\n { prop: 'maxTracks', type: 'number' },\n { prop: 'mode', values: Object.values(subscriptionMode) },\n { prop: 'clientTrackSwitchOffControl', values: Object.values(clientTrackSwitchOffControl) },\n { prop: 'trackSwitchOffMode', values: Object.values(trackSwitchOffMode) }\n ]);\n\n if (error) {\n return error;\n }\n\n if (bandwidthProfile.video) {\n\n // maxTracks is replaced by clientTrackSwitchOffControl.\n // throw an error if both are specified.\n if ('maxTracks' in bandwidthProfile.video && 'clientTrackSwitchOffControl' in bandwidthProfile.video) {\n return new TypeError('options.bandwidthProfile.video.maxTracks is deprecated. Use options.bandwidthProfile.video.clientTrackSwitchOffControl instead.');\n }\n\n // renderDimensions is replaced by contentPreferencesMode.\n // throw an error if both are specified.\n if ('renderDimensions' in bandwidthProfile.video && 'contentPreferencesMode' in bandwidthProfile.video) {\n return new TypeError('options.bandwidthProfile.video.renderDimensions is deprecated. Use options.bandwidthProfile.video.contentPreferencesMode instead.');\n }\n\n return validateRenderDimensions(bandwidthProfile.video.renderDimensions);\n }\n\n return null;\n}\n\n/**\n * Throw if the given track is not a {@link LocalAudioTrack}, a\n * {@link LocalVideoTrack} or a MediaStreamTrack.\n * @param {*} track\n * @param {object} options\n */\nfunction validateLocalTrack(track, options) {\n if (!(track instanceof options.LocalAudioTrack\n || track instanceof options.LocalDataTrack\n || track instanceof options.LocalVideoTrack\n || track instanceof options.MediaStreamTrack)) {\n /* eslint new-cap:0 */\n throw E.INVALID_TYPE('track', 'LocalAudioTrack, LocalVideoTrack, LocalDataTrack, or MediaStreamTrack');\n }\n}\n\n/**\n * Validate an object. An object is valid if it is undefined or a non-null, non-array\n * object whose properties satisfy the specified data-type or value-range requirements.\n * @param {object} object - the object to be validated\n * @param {string} name - the object name to be used to build the error message, if invalid\n * @param {Array} [propChecks] - optional data-type or value-range requirements\n * for the object's properties\n * @returns {?Error} - null if object is valid, Error if not\n */\nfunction validateObject(object, name, propChecks = []) {\n // NOTE(mmalavalli): We determine that an undefined object is valid because this\n // means the parent object does not contain this object as a property, which is\n // a valid scenario.\n if (typeof object === 'undefined') {\n return null;\n }\n // NOTE(mmalavalli): We determine that if the object is null, or an Array, or\n // any other non-object type, then it is invalid.\n if (object === null || !isNonArrayObject(object)) {\n return E.INVALID_TYPE(name, 'object');\n }\n // NOTE(mmalavalli): We determine that the object is invalid if at least one of\n // its properties does not satisfy its data-type or value-range requirement.\n return propChecks.reduce((error, { prop, type, values }) => {\n if (error || !(prop in object)) {\n return error;\n }\n const value = object[prop];\n if (type && typeof value !== type) {\n return E.INVALID_TYPE(`${name}.${prop}`, type);\n }\n if (type === 'number' && isNaN(value)) {\n return E.INVALID_TYPE(`${name}.${prop}`, type);\n }\n if (Array.isArray(values) && !values.includes(value)) {\n return E.INVALID_VALUE(`${name}.${prop}`, values);\n }\n return error;\n }, null);\n}\n\n/**\n * Validates the renderDimensions field to be \"auto\" or {@link VideoRenderDimensions} object.\n * @param {string|VideoRenderDimensions} renderDimensions\n * @returns {?Error} - null if valid, Error if not.\n */\nfunction validateRenderDimensions(renderDimensions) {\n const name = 'options.bandwidthProfile.video.renderDimensions';\n let error = validateObject(renderDimensions, name);\n return renderDimensions ? error || Object.values(trackPriority).reduce((error, prop) => {\n return error || validateObject(renderDimensions[prop], `${name}.${prop}`, [\n { prop: 'height', type: 'number' },\n { prop: 'width', type: 'number' }\n ]);\n }, null) : error;\n}\n\nexports.validateBandwidthProfile = validateBandwidthProfile;\nexports.validateLocalTrack = validateLocalTrack;\nexports.validateObject = validateObject;\n","'use strict';\n\nconst EventEmitter = require('../../eventemitter');\nconst { buildLogLevels, valueToJSON } = require('../../util');\nconst { DEFAULT_LOG_LEVEL } = require('../../util/constants');\nconst Log = require('../../util/log');\nlet nInstances = 0;\n\n/**\n * A {@link TrackPublication} represents a {@link Track} that\n * has been published to a {@link Room}.\n * @property {string} trackName - the published {@link Track}'s name\n * @property {Track.SID} trackSid - SID assigned to the published {@link Track}\n * @emits TrackPublication#trackDisabled\n * @emits TrackPublication#trackEnabled\n */\nclass TrackPublication extends EventEmitter {\n /**\n * Construct a {@link TrackPublication}.\n * @param {string} trackName - the published {@link Track}'s name\n * @param {Track.SID} trackSid - SID assigned to the {@link Track}\n * @param {TrackPublicationOptions} options - {@link TrackPublication} options\n */\n constructor(trackName, trackSid, options) {\n super();\n\n options = Object.assign({\n logLevel: DEFAULT_LOG_LEVEL\n }, options);\n\n const logLevels = buildLogLevels(options.logLevel);\n\n Object.defineProperties(this, {\n _instanceId: {\n value: nInstances++\n },\n _log: {\n value: options.log ? options.log.createLog('default', this) : new Log('default', this, logLevels, options.loggerName)\n },\n trackName: {\n enumerable: true,\n value: trackName\n },\n trackSid: {\n enumerable: true,\n value: trackSid\n }\n });\n }\n\n toJSON() {\n return valueToJSON(this);\n }\n\n toString() {\n return `[TrackPublication #${this._instanceId}: ${this.trackSid}]`;\n }\n}\n\n/**\n * The published {@link Track} was disabled.\n * @event TrackPublication#trackDisabled\n */\n\n/**\n * The published {@link Track} was enabled.\n * @event TrackPublication#trackEnabled\n */\n\n/**\n * A {@link LocalAudioTrackPublication} or a {@link RemoteAudioTrackPublication}.\n * @typedef {LocalAudioTrackPublication|RemoteAudioTrackPublication} AudioTrackPublication\n */\n\n/**\n * A {@link LocalDataTrackPublication} or a {@link RemoteDataTrackPublication}.\n * @typedef {LocalDataTrackPublication|RemoteDataTrackPublication} DataTrackPublication\n */\n\n/**\n * A {@link LocalVideoTrackPublication} or a {@link RemoteVideoTrackPublication}.\n * @typedef {LocalVideoTrackPublication|RemoteVideoTrackPublication} VideoTrackPublication\n */\n\n/**\n * {@link TrackPublication} options\n * @typedef {object} TrackPublicationOptions\n * @property {LogLevel|LogLevels} logLevel - Log level for 'media' modules\n */\n\nmodule.exports = TrackPublication;\n","/* eslint new-cap:0 */\n'use strict';\n\nconst TrackPublication = require('./trackpublication');\nconst { typeErrors: E, trackPriority } = require('../../util/constants');\n\n/**\n * A {@link LocalTrackPublication} is a {@link LocalTrack} that has been\n * published to a {@link Room}.\n * @extends TrackPublication\n * @property {boolean} isTrackEnabled - whether the published {@link LocalTrack}\n * is enabled\n * @property {Track.Kind} kind - kind of the published {@link LocalTrack}\n * @property {Track.Priority} priority - the publish priority of the {@link LocalTrack}\n * @property {LocalTrack} track - the {@link LocalTrack}\n * @emits LocalTrackPublication#warning\n * @emits LocalTrackPublication#warningsCleared\n */\nclass LocalTrackPublication extends TrackPublication {\n /**\n * Construct a {@link LocalTrackPublication}.\n * @param {LocalTrackPublicationSignaling} signaling - The corresponding\n * {@link LocalTrackPublicationSignaling}\n * @param {LocalTrack} track - The {@link LocalTrack}\n * @param {function(LocalTrackPublication): void} unpublish - The callback\n * that unpublishes the {@link LocalTrackPublication}\n * @param {TrackPublicationOptions} options - {@link LocalTrackPublication}\n * options\n */\n constructor(signaling, track, unpublish, options) {\n super(track.name, signaling.sid, options);\n\n Object.defineProperties(this, {\n _reemitSignalingEvent: {\n value: (...args) => this.emit(\n args && args.length ? 'warning' : 'warningsCleared',\n ...args\n )\n },\n _reemitTrackEvent: {\n value: () => this.emit(this.isTrackEnabled\n ? 'trackEnabled'\n : 'trackDisabled')\n },\n _signaling: {\n value: signaling\n },\n _unpublish: {\n value: unpublish\n },\n isTrackEnabled: {\n enumerable: true,\n get() {\n return this.track.kind === 'data' ? true : this.track.isEnabled;\n }\n },\n kind: {\n enumerable: true,\n value: track.kind\n },\n priority: {\n enumerable: true,\n get() {\n return signaling.updatedPriority;\n }\n },\n track: {\n enumerable: true,\n value: track\n }\n });\n\n ['disabled', 'enabled'].forEach(name =>\n track.on(name, this._reemitTrackEvent));\n\n ['warning', 'warningsCleared'].forEach(name =>\n signaling.on(name, this._reemitSignalingEvent));\n }\n\n toString() {\n return `[LocalTrackPublication #${this._instanceId}: ${this.trackSid}]`;\n }\n\n /**\n * Update the {@link Track.Priority} of the published {@link LocalTrack}.\n * @param {Track.Priority} priority - the new {@link Track.priority}\n * @returns {this}\n * @throws {RangeError}\n */\n setPriority(priority) {\n const priorityValues = Object.values(trackPriority);\n if (!priorityValues.includes(priority)) {\n throw E.INVALID_VALUE('priority', priorityValues);\n }\n this._signaling.setPriority(priority);\n return this;\n }\n\n /**\n * Unpublish a {@link LocalTrackPublication}. This means that the media\n * from this {@link LocalTrackPublication} is no longer available to the\n * {@link Room}'s {@link RemoteParticipant}s.\n * @returns {this}\n */\n unpublish() {\n ['disabled', 'enabled'].forEach(name =>\n this.track.removeListener(name, this._reemitTrackEvent));\n\n ['warning', 'warningsCleared'].forEach(name =>\n this._signaling.removeListener(name, this._reemitSignalingEvent));\n\n this._unpublish(this);\n return this;\n }\n}\n\n/**\n * The published {@link LocalTrack} encountered a warning.\n * This event is only raised if you enabled warnings using notifyWarnings in ConnectOptions.\n * @event LocalTrackPublication#warning\n * @param {string} name - The warning that was raised.\n */\n\n/**\n * The published {@link LocalTrack} cleared all warnings.\n * This event is only raised if you enabled warnings using notifyWarnings in ConnectOptions.\n * @event LocalTrackPublication#warningsCleared\n */\n\nmodule.exports = LocalTrackPublication;\n","'use strict';\n\nconst LocalTrackPublication = require('./localtrackpublication');\n\n/**\n * A {@link LocalAudioTrackPublication} is a {@link LocalAudioTrack} that has\n * been published to a {@link Room}.\n * @extends LocalTrackPublication\n * @property {Track.Kind} kind - \"audio\"\n * @property {LocalAudioTrack} track - the {@link LocalAudioTrack}\n */\nclass LocalAudioTrackPublication extends LocalTrackPublication {\n /**\n * Construct a {@link LocalAudioTrackPublication}.\n * @param {LocalTrackPublicationSignaling} signaling - The corresponding\n * {@link LocalTrackPublicationSignaling}\n * @param {LocalAudioTrack} track - the {@link LocalAudioTrack}\n * @param {function(LocalTrackPublication): void} unpublish - The callback\n * that unpublishes the {@link LocalTrackPublication}\n * @param {TrackPublicationOptions} options - {@link LocalTrackPublication} options\n */\n constructor(signaling, track, unpublish, options) {\n super(signaling, track, unpublish, options);\n }\n\n toString() {\n return `[LocalAudioTrackPublication #${this._instanceId}: ${this.trackSid}]`;\n }\n}\n\nmodule.exports = LocalAudioTrackPublication;\n","'use strict';\n\nconst LocalTrackPublication = require('./localtrackpublication');\n\n/**\n * A {@link LocalDataTrackPublication} is a {@link LocalDataTrack} that has been\n * published to a {@link Room}.\n * @extends LocalTrackPublication\n * @property {Track.Kind} kind - \"data\"\n * @property {LocalDataTrack} track - the {@link LocalDataTrack}\n */\nclass LocalDataTrackPublication extends LocalTrackPublication {\n /**\n * Construct a {@link LocalDataTrackPublication}.\n * @param {LocalTrackPublicationSignaling} signaling - The corresponding\n * {@link LocalTrackPublicationSignaling}\n * @param {LocalDataTrack} track - the {@link LocalDataTrack}\n * @param {function(LocalTrackPublication): void} unpublish - The callback\n * that unpublishes the {@link LocalTrackPublication}\n * @param {TrackPublicationOptions} options - {@link LocalTrackPublication} options\n */\n constructor(signaling, track, unpublish, options) {\n super(signaling, track, unpublish, options);\n }\n\n toString() {\n return `[LocalDataTrackPublication #${this._instanceId}: ${this.trackSid}]`;\n }\n}\n\nmodule.exports = LocalDataTrackPublication;\n","'use strict';\n\nconst LocalTrackPublication = require('./localtrackpublication');\n\n/**\n * A {@link LocalVideoTrackPublication} is a {@link LocalVideoTrack} that has\n * been published to a {@link Room}.\n * @extends LocalTrackPublication\n * @property {Track.Kind} kind - \"video\"\n * @property {LocalVideoTrack} track - the {@link LocalVideoTrack}\n */\nclass LocalVideoTrackPublication extends LocalTrackPublication {\n /**\n * Construct a {@link LocalVideoTrackPublication}.\n * @param {LocalTrackPublicationSignaling} signaling - The corresponding\n * {@link LocalTrackPublicationSignaling}\n * @param {LocalVideoTrack} track - the {@link LocalVideoTrack}\n * @param {function(LocalTrackPublication): void} unpublish - The callback\n * that unpublishes the {@link LocalTrackPublication}\n * @param {TrackPublicationOptions} options - {@link LocalTrackPublication} options\n */\n constructor(signaling, track, unpublish, options) {\n super(signaling, track, unpublish, options);\n }\n\n toString() {\n return `[LocalVideoTrackPublication #${this._instanceId}: ${this.trackSid}]`;\n }\n}\n\nmodule.exports = LocalVideoTrackPublication;\n","'use strict';\n\nconst { typeErrors: E, trackPriority } = require('../../util/constants');\nconst { isIOS } = require('../../util/browserdetection');\nconst documentVisibilityMonitor = require('../../util/documentvisibilitymonitor.js');\n\nfunction mixinRemoteMediaTrack(AudioOrVideoTrack) {\n /**\n * A {@link RemoteMediaTrack} represents a {@link MediaTrack} published to a\n * {@link Room} by a {@link RemoteParticipant}.\n * @property {boolean} isEnabled - Whether the {@link RemoteMediaTrack} is enabled\n * @property {boolean} isSwitchedOff - Whether the {@link RemoteMediaTrack} is switched off\n * @property {Track.SID} sid - The SID assigned to the {@link RemoteMediaTrack}\n * @property {?Track.Priority} priority - The subscribe priority of the {@link RemoteMediaTrack}\n * @emits RemoteMediaTrack#disabled\n * @emits RemoteMediaTrack#enabled\n * @emits RemoteMediaTrack#switchedOff\n * @emits RemoteMediaTrack#switchedOn\n */\n return class RemoteMediaTrack extends AudioOrVideoTrack {\n /**\n * Construct a {@link RemoteMediaTrack}.\n * @param {Track.SID} sid\n * @param {MediaTrackReceiver} mediaTrackReceiver\n * @param {boolean} isEnabled\n @param {boolean} isSwitchedOff\n * @param {function(?Track.Priority): void} setPriority - Set or clear the subscribe\n * {@link Track.Priority} of the {@link RemoteMediaTrack}\n * @param {function(ClientRenderHint): void} setRenderHint - Set render hints.\n * @param {{log: Log, name: ?string}} options\n */\n constructor(sid, mediaTrackReceiver, isEnabled, isSwitchedOff, setPriority, setRenderHint, options) {\n options = Object.assign({\n // NOTE(mpatwardhan): WebKit bug: 212780 sometimes causes the audio/video elements to stay paused when safari\n // regains foreground. To workaround it, when safari gains foreground - we will play any elements that were\n // playing before safari lost foreground.\n workaroundWebKitBug212780: isIOS()\n && typeof document === 'object'\n && typeof document.addEventListener === 'function'\n && typeof document.visibilityState === 'string'\n }, options);\n\n super(mediaTrackReceiver, options);\n\n Object.defineProperties(this, {\n _isEnabled: {\n value: isEnabled,\n writable: true\n },\n _isSwitchedOff: {\n value: isSwitchedOff,\n writable: true\n },\n _priority: {\n value: null,\n writable: true\n },\n _setPriority: {\n value: setPriority\n },\n _setRenderHint: {\n value: renderHint => {\n this._log.debug('updating render hint:', renderHint);\n setRenderHint(renderHint);\n }\n },\n isEnabled: {\n enumerable: true,\n get() {\n return this._isEnabled;\n }\n },\n isSwitchedOff: {\n enumerable: true,\n get() {\n return this._isSwitchedOff;\n }\n },\n priority: {\n enumerable: true,\n get() {\n return this._priority;\n }\n },\n sid: {\n enumerable: true,\n value: sid\n },\n _workaroundWebKitBug212780: {\n value: options.workaroundWebKitBug212780\n },\n _workaroundWebKitBug212780Cleanup: {\n value: null,\n writable: true\n }\n });\n }\n\n /**\n * Update the subscribe {@link Track.Priority} of the {@link RemoteMediaTrack}.\n * @param {?Track.Priority} priority - the new subscribe {@link Track.Priority};\n * If null, then the subscribe {@link Track.Priority} is cleared, which\n * means the {@link Track.Priority} set by the publisher is now the effective priority.\n * @returns {this}\n * @throws {RangeError}\n */\n setPriority(priority) {\n const priorityValues = [null, ...Object.values(trackPriority)];\n if (!priorityValues.includes(priority)) {\n // eslint-disable-next-line new-cap\n throw E.INVALID_VALUE('priority', priorityValues);\n }\n if (this._priority !== priority) {\n this._priority = priority;\n this._setPriority(priority);\n }\n return this;\n }\n\n /**\n * @private\n * @param {boolean} isEnabled\n */\n _setEnabled(isEnabled) {\n if (this._isEnabled !== isEnabled) {\n this._isEnabled = isEnabled;\n this.emit(this._isEnabled ? 'enabled' : 'disabled', this);\n }\n }\n\n /**\n * @private\n * @param {boolean} isSwitchedOff\n */\n _setSwitchedOff(isSwitchedOff) {\n if (this._isSwitchedOff !== isSwitchedOff) {\n this._isSwitchedOff = isSwitchedOff;\n this.emit(isSwitchedOff ? 'switchedOff' : 'switchedOn', this);\n }\n }\n\n attach(el) {\n const result = super.attach(el);\n if (this.mediaStreamTrack.enabled !== true) {\n // NOTE(mpatwardhan): we disable mediaStreamTrack when there\n // are no attachments to it (see notes below). Now that there\n // are attachments re-enable the track.\n this.mediaStreamTrack.enabled = true;\n if (this.processedTrack) {\n this.processedTrack.enabled = true;\n }\n\n // NOTE(csantos): since remote tracks disables/enables the mediaStreamTrack,\n // captureFrames stops along with it. We need to start it again after re-enabling.\n // See attach/detach methods in this class and in VideoTrack class.\n if (this.processor) {\n this._captureFrames();\n }\n }\n if (this._workaroundWebKitBug212780) {\n this._workaroundWebKitBug212780Cleanup = this._workaroundWebKitBug212780Cleanup\n || playIfPausedWhileInBackground(this);\n }\n\n return result;\n }\n\n detach(el) {\n const result = super.detach(el);\n if (this._attachments.size === 0) {\n // NOTE(mpatwardhan): chrome continues playing webrtc audio\n // track even after audio element is removed from the DOM.\n // https://bugs.chromium.org/p/chromium/issues/detail?id=749928\n // to workaround: here disable the track when\n // there are no elements attached to it.\n this.mediaStreamTrack.enabled = false;\n if (this.processedTrack) {\n this.processedTrack.enabled = false;\n }\n\n if (this._workaroundWebKitBug212780Cleanup) {\n // unhook visibility change\n this._workaroundWebKitBug212780Cleanup();\n this._workaroundWebKitBug212780Cleanup = null;\n }\n }\n return result;\n }\n };\n}\n\nfunction playIfPausedWhileInBackground(remoteMediaTrack) {\n const { _log: log, kind } = remoteMediaTrack;\n\n function onVisibilityChanged(isVisible) {\n if (!isVisible) {\n return;\n }\n remoteMediaTrack._attachments.forEach(el => {\n const shim = remoteMediaTrack._elShims.get(el);\n const isInadvertentlyPaused = el.paused && shim && !shim.pausedIntentionally();\n if (isInadvertentlyPaused) {\n log.info(`Playing inadvertently paused <${kind}> element`);\n log.debug('Element:', el);\n log.debug('RemoteMediaTrack:', remoteMediaTrack);\n el.play().then(() => {\n log.info(`Successfully played inadvertently paused <${kind}> element`);\n log.debug('Element:', el);\n log.debug('RemoteMediaTrack:', remoteMediaTrack);\n }).catch(err => {\n log.warn(`Error while playing inadvertently paused <${kind}> element:`, { err, el, remoteMediaTrack });\n });\n }\n });\n }\n\n // NOTE(mpatwardhan): listen for document visibility callback on phase 2.\n // this ensures that any LocalMediaTrack's restart (which listen on phase 1) gets executed\n // first. This order is important because we `play` tracks in the callback, and\n // play can fail on safari if audio is not being captured.\n documentVisibilityMonitor.onVisibilityChange(2, onVisibilityChanged);\n return () => {\n documentVisibilityMonitor.offVisibilityChange(2, onVisibilityChanged);\n };\n}\n\n/**\n * A {@link RemoteMediaTrack} was disabled.\n * @param {RemoteMediaTrack} track - The {@link RemoteMediaTrack} that was\n * disabled\n * @event RemoteMediaTrack#disabled\n */\n\n/**\n * A {@link RemoteMediaTrack} was enabled.\n * @param {RemoteMediaTrack} track - The {@link RemoteMediaTrack} that was\n * enabled\n * @event RemoteMediaTrack#enabled\n */\n\n/**\n * A {@link RemoteMediaTrack} was switched off.\n * @param {RemoteMediaTrack} track - The {@link RemoteMediaTrack} that was\n * switched off\n * @event RemoteMediaTrack#switchedOff\n */\n\n/**\n * A {@link RemoteMediaTrack} was switched on.\n * @param {RemoteMediaTrack} track - The {@link RemoteMediaTrack} that was\n * switched on\n * @event RemoteMediaTrack#switchedOn\n */\n\n/**\n * A {@link ClientRenderHint} object specifies track dimensions and /enabled disable state.\n * This state will be used by the server(SFU) to determine bandwidth allocation for the track,\n * and turn it on or off as needed.\n * @typedef {object} ClientRenderHint\n * @property {boolean} [enabled] - track is enabled or disabled. defaults to disabled.\n * @property {VideoTrack.Dimensions} [renderDimensions] - Optional parameter to specify the desired\n * render dimensions of {@link RemoteVideoTrack}s. This property must be specified if enabled=true\n */\n\nmodule.exports = mixinRemoteMediaTrack;\n","'use strict';\n\nconst AudioTrack = require('./audiotrack');\nconst mixinRemoteMediaTrack = require('./remotemediatrack');\n\nconst RemoteMediaAudioTrack = mixinRemoteMediaTrack(AudioTrack);\n\n/**\n * A {@link RemoteAudioTrack} represents an {@link AudioTrack} published to a\n * {@link Room} by a {@link RemoteParticipant}.\n * @extends AudioTrack\n * @property {boolean} isEnabled - Whether the {@link RemoteAudioTrack} is enabled\n * @property {boolean} isSwitchedOff - Whether the {@link RemoteAudioTrack} is switched off\n * @property {Track.SID} sid - The {@link RemoteAudioTrack}'s SID\n * @property {?Track.Priority} priority - The subscribe priority of the {@link RemoteAudioTrack}\n * @emits RemoteAudioTrack#disabled\n * @emits RemoteAudioTrack#enabled\n * @emits RemoteAudioTrack#started\n * @emits RemoteAudioTrack#switchedOff\n * @emits RemoteAudioTrack#switchedOn\n */\nclass RemoteAudioTrack extends RemoteMediaAudioTrack {\n /**\n * Construct a {@link RemoteAudioTrack}.\n * @param {Track.SID} sid - The {@link RemoteAudioTrack}'s SID\n * @param {MediaTrackReceiver} mediaTrackReceiver - An audio MediaStreamTrack container\n * @param {boolean} isEnabled - Whether the {@link RemoteAudioTrack} is enabled\n * @param {boolean} isSwitchedOff - Whether the {@link RemoteAudioTrack} is switched off\n * @param {function(?Track.Priority): void} setPriority - Set or clear the subscribe\n * {@link Track.Priority} of the {@link RemoteAudioTrack}\n * @param {function(ClientRenderHint): void} setRenderHint - Set render hints.\n * @param {{log: Log}} options - The {@link RemoteTrack} options\n */\n constructor(sid, mediaTrackReceiver, isEnabled, isSwitchedOff, setPriority, setRenderHint, options) {\n super(sid, mediaTrackReceiver, isEnabled, isSwitchedOff, setPriority, setRenderHint, options);\n }\n\n toString() {\n return `[RemoteAudioTrack #${this._instanceId}: ${this.sid}]`;\n }\n\n /**\n * @private\n */\n _start() {\n super._start();\n if (this._dummyEl) {\n // NOTE(mpatwardhan): To fix VIDEO-6336, clear dummy element after the\n // RemoteAudioTrack has started.\n this._dummyEl.srcObject = null;\n this._dummyEl = null;\n }\n }\n\n /**\n * Update the subscribe {@link Track.Priority} of the {@link RemoteAudioTrack}.\n * @param {?Track.Priority} priority - the new subscribe {@link Track.Priority};\n * Currently setPriority has no effect on audio tracks.\n * @returns {this}\n * @throws {RangeError}\n */\n setPriority(priority) {\n return super.setPriority(priority);\n }\n}\n\n/**\n * The {@link RemoteAudioTrack} was disabled, i.e. \"muted\".\n * @param {RemoteAudioTrack} track - The {@link RemoteAudioTrack} that was\n * disabled\n * @event RemoteAudioTrack#disabled\n */\n\n/**\n * The {@link RemoteAudioTrack} was enabled, i.e. \"unmuted\".\n * @param {RemoteAudioTrack} track - The {@link RemoteAudioTrack} that was\n * enabled\n * @event RemoteAudioTrack#enabled\n */\n\n/**\n * The {@link RemoteAudioTrack} started. This means there is enough audio data\n * to begin playback.\n * @param {RemoteAudioTrack} track - The {@link RemoteAudioTrack} that started\n * @event RemoteAudioTrack#started\n */\n\n/**\n * A {@link RemoteAudioTrack} was switched off.\n * @param {RemoteAudioTrack} track - The {@link RemoteAudioTrack} that was\n * switched off\n * @event RemoteAudioTrack#switchedOff\n */\n\n/**\n * A {@link RemoteAudioTrack} was switched on.\n * @param {RemoteAudioTrack} track - The {@link RemoteAudioTrack} that was\n * switched on\n * @event RemoteAudioTrack#switchedOn\n */\n\nmodule.exports = RemoteAudioTrack;\n","'use strict';\n\nconst TrackPublication = require('./trackpublication');\n\n/**\n * A {@link RemoteTrackPublication} represents a {@link RemoteTrack} that has\n * been published to a {@link Room}.\n * @extends TrackPublication\n * @property {boolean} isSubscribed - whether the published {@link RemoteTrack}\n * is subscribed to\n * @property {boolean} isTrackEnabled - whether the published\n * {@link RemoteTrack} is enabled\n * @property {Track.Kind} kind - kind of the published {@link RemoteTrack}\n * @property {Track.Priority} publishPriority - the {@link Track.Priority} of the published\n * {@link RemoteTrack} set by the {@link RemoteParticipant}\n * @property {?RemoteTrack} track - Unless you have subscribed to the\n * {@link RemoteTrack}, this property is null\n * @emits RemoteTrackPublication#publishPriorityChanged\n * @emits RemoteTrackPublication#subscribed\n * @emits RemoteTrackPublication#subscriptionFailed\n * @emits RemoteTrackPublication#trackDisabled\n * @emits RemoteTrackPublication#trackEnabled\n * @emits RemoteTrackPublication#trackSwitchedOff\n * @emits RemoteTrackPublication#trackSwitchedOn\n * @emits RemoteTrackPublication#unsubscribed\n *\n */\nclass RemoteTrackPublication extends TrackPublication {\n /**\n * Construct a {@link RemoteTrackPublication}.\n * @param {RemoteTrackPublicationSignaling} signaling - {@link RemoteTrackPublication} signaling\n * @param {RemoteTrackPublicationOptions} options - {@link RemoteTrackPublication}\n * options\n */\n constructor(signaling, options) {\n super(signaling.name, signaling.sid, options);\n\n Object.defineProperties(this, {\n _signaling: {\n value: signaling\n },\n _track: {\n value: null,\n writable: true\n },\n isSubscribed: {\n enumerable: true,\n get() {\n return !!this._track;\n }\n },\n isTrackEnabled: {\n enumerable: true,\n get() {\n return signaling.isEnabled;\n }\n },\n kind: {\n enumerable: true,\n value: signaling.kind\n },\n publishPriority: {\n enumerable: true,\n get() {\n return signaling.priority;\n }\n },\n track: {\n enumerable: true,\n get() {\n return this._track;\n }\n }\n });\n\n // remember original state, and fire events only on change.\n let {\n error,\n isEnabled,\n isSwitchedOff,\n priority\n } = signaling;\n\n signaling.on('updated', () => {\n if (error !== signaling.error) {\n error = signaling.error;\n this.emit('subscriptionFailed', signaling.error);\n return;\n }\n if (isEnabled !== signaling.isEnabled) {\n isEnabled = signaling.isEnabled;\n if (this.track) {\n this.track._setEnabled(signaling.isEnabled);\n }\n this.emit(signaling.isEnabled ? 'trackEnabled' : 'trackDisabled');\n }\n if (isSwitchedOff !== signaling.isSwitchedOff) {\n this._log.debug(`${this.trackSid}: ${isSwitchedOff ? 'OFF' : 'ON'} => ${signaling.isSwitchedOff ? 'OFF' : 'ON'}`);\n isSwitchedOff = signaling.isSwitchedOff;\n if (this.track) {\n this.track._setSwitchedOff(signaling.isSwitchedOff);\n this.emit(isSwitchedOff ? 'trackSwitchedOff' : 'trackSwitchedOn', this.track);\n } else if (isSwitchedOff) {\n this._log.warn('Track was not subscribed when switched Off.');\n }\n }\n if (priority !== signaling.priority) {\n priority = signaling.priority;\n this.emit('publishPriorityChanged', priority);\n }\n });\n }\n\n toString() {\n return `[RemoteTrackPublication #${this._instanceId}: ${this.trackSid}]`;\n }\n\n /**\n * @private\n * @param {RemoteTrack} track\n */\n _subscribed(track) {\n if (!this._track && track) {\n this._track = track;\n this.emit('subscribed', track);\n }\n }\n\n /**\n * @private\n */\n _unsubscribe() {\n if (this._track) {\n const track = this._track;\n this._track = null;\n this.emit('unsubscribed', track);\n }\n }\n}\n\n/**\n * The {@link RemoteTrack}'s publish {@link Track.Priority} was changed by the\n * {@link RemoteParticipant}.\n * @param {Track.Priority} priority - the {@link RemoteTrack}'s new publish\n * {@link Track.Priority}; RemoteTrackPublication#publishPriority is also\n * updated accordingly\n * @event RemoteTrackPublication#publishPriorityChanged\n */\n\n/**\n * Your {@link LocalParticipant} subscribed to the {@link RemoteTrack}.\n * @param {RemoteTrack} track - the {@link RemoteTrack} that was subscribed to\n * @event RemoteTrackPublication#subscribed\n */\n\n/**\n * Your {@link LocalParticipant} failed to subscribe to the {@link RemoteTrack}.\n * @param {TwilioError} error - the reason the {@link RemoteTrack} could not be\n * subscribed to\n * @event RemoteTrackPublication#subscriptionFailed\n */\n\n/**\n * The {@link RemoteTrack} was disabled.\n * @event RemoteTrackPublication#trackDisabled\n */\n\n/**\n * The {@link RemoteTrack} was enabled.\n * @event RemoteTrackPublication#trackEnabled\n */\n\n/**\n * The {@link RemoteTrack} was switched off.\n * @param {RemoteTrack} track - the {@link RemoteTrack} that was switched off\n * @event RemoteTrackPublication#trackSwitchedOff\n */\n\n/**\n * The {@link RemoteTrack} was switched on.\n * @param {RemoteTrack} track - the {@link RemoteTrack} that was switched on\n * @event RemoteTrackPublication#trackSwitchedOn\n */\n\n/**\n * Your {@link LocalParticipant} unsubscribed from the {@link RemoteTrack}.\n * @param {RemoteTrack} track - the {@link RemoteTrack} that was unsubscribed from\n * @event RemoteTrackPublication#unsubscribed\n */\n\n/**\n * {@link RemoteTrackPublication} options\n * @typedef {object} RemoteTrackPublicationOptions\n * @property {LogLevel|LogLevels} logLevel - Log level for 'media' modules\n */\n\nmodule.exports = RemoteTrackPublication;\n","'use strict';\n\nconst RemoteTrackPublication = require('./remotetrackpublication');\n\n/**\n * A {@link RemoteAudioTrackPublication} represents a {@link RemoteAudioTrack}\n * that has been published to a {@link Room}.\n * @property {Track.Kind} kind - \"audio\"\n * @property {?RemoteAudioTrack} track - unless you have subscribed to the\n * {@link RemoteAudioTrack}, this property is null\n * @emits RemoteAudioTrackPublication#subscribed\n * @emits RemoteAudioTrackPublication#subscriptionFailed\n * @emits RemoteAudioTrackPublication#trackDisabled\n * @emits RemoteAudioTrackPublication#trackEnabled\n * @emits RemoteAudioTrackPublication#unsubscribed\n */\nclass RemoteAudioTrackPublication extends RemoteTrackPublication {\n /**\n * Construct a {@link RemoteAudioTrackPublication}.\n * @param {RemoteTrackPublicationSignaling} signaling - {@link RemoteTrackPublication} signaling\n * @param {RemoteTrackPublicationOptions} options - {@link RemoteTrackPublication}\n * options\n */\n constructor(signaling, options) {\n super(signaling, options);\n }\n\n toString() {\n return `[RemoteAudioTrackPublication #${this._instanceId}: ${this.trackSid}]`;\n }\n}\n\n/**\n * Your {@link LocalParticipant} subscribed to the {@link RemoteAudioTrack}.\n * @param {RemoteAudioTrack} track - the {@link RemoteAudioTrack} that was subscribed to\n * @event RemoteAudioTrackPublication#subscribed\n */\n\n/**\n * Your {@link LocalParticipant} failed to subscribe to the {@link RemoteAudioTrack}.\n * @param {TwilioError} error - the reason the {@link RemoteAudioTrack} could not be\n * subscribed to\n * @event RemoteAudioTrackPublication#subscriptionFailed\n */\n\n/**\n * The {@link RemoteAudioTrack} was disabled.\n * @event RemoteAudioTrackPublication#trackDisabled\n */\n\n/**\n * The {@link RemoteAudioTrack} was enabled.\n * @event RemoteAudioTrackPublication#trackEnabled\n */\n\n/**\n * Your {@link LocalParticipant} unsubscribed from the {@link RemoteAudioTrack}.\n * @param {RemoteAudioTrack} track - the {@link RemoteAudioTrack} that was unsubscribed from\n * @event RemoteAudioTrackPublication#unsubscribed\n */\n\nmodule.exports = RemoteAudioTrackPublication;\n","'use strict';\n\nconst Track = require('./');\nconst { typeErrors: E, trackPriority } = require('../../util/constants');\n\n/**\n * A {@link RemoteDataTrack} represents data published to a {@link Room} by a\n * {@link RemoteParticipant}.\n * @extends Track\n * @property {boolean} isEnabled - true\n * @property {boolean} isSubscribed - Whether the {@link RemoteDataTrack} is\n * subscribed to\n * @property {boolean} isSwitchedOff - Whether the {@link RemoteDataTrack} is\n * switched off\n * @property {Track.Kind} kind - \"data\"\n * @property {?number} maxPacketLifeTime - If non-null, this represents a time\n * limit (in milliseconds) during which data will be transmitted or\n * retransmitted if not acknowledged on the underlying RTCDataChannel.\n * @property {?number} maxRetransmits - If non-null, this represents the number\n * of times the data will be retransmitted if not successfully received on the\n * underlying RTCDataChannel.\n * @property {boolean} ordered - true if data on the {@link RemoteDataTrack} can\n * be received out-of-order.\n * @property {?Track.Priority} priority - The subscribe priority of the {@link RemoteDataTrack}\n * @property {boolean} reliable - This is true if both\n * maxPacketLifeTime and maxRetransmits are set to\n * null. In other words, if this is true, there is no bound on packet lifetime\n * or the number of retransmits that will be attempted, ensuring \"reliable\"\n * transmission.\n * @property {Track.SID} sid - The SID assigned to the {@link RemoteDataTrack}\n * @emits RemoteDataTrack#message\n * @emits RemoteDataTrack#switchedOff\n * @emits RemoteDataTrack#switchedOn\n */\nclass RemoteDataTrack extends Track {\n /**\n * Construct a {@link RemoteDataTrack} from a {@link DataTrackReceiver}.\n * @param {Track.SID} sid\n * @param {DataTrackReceiver} dataTrackReceiver\n * @param {{log: Log, name: ?string}} options\n */\n constructor(sid, dataTrackReceiver, options) {\n super(dataTrackReceiver.id, 'data', options);\n\n Object.defineProperties(this, {\n _isSwitchedOff: {\n value: false,\n writable: true\n },\n _priority: {\n value: null,\n writable: true\n },\n isEnabled: {\n enumerable: true,\n value: true\n },\n isSwitchedOff: {\n enumerable: true,\n get() {\n return this._isSwitchedOff;\n }\n },\n maxPacketLifeTime: {\n enumerable: true,\n value: dataTrackReceiver.maxPacketLifeTime\n },\n maxRetransmits: {\n enumerable: true,\n value: dataTrackReceiver.maxRetransmits\n },\n ordered: {\n enumerable: true,\n value: dataTrackReceiver.ordered\n },\n priority: {\n enumerable: true,\n get() {\n return this._priority;\n }\n },\n reliable: {\n enumerable: true,\n value: dataTrackReceiver.maxPacketLifeTime === null\n && dataTrackReceiver.maxRetransmits === null\n },\n sid: {\n enumerable: true,\n value: sid\n }\n });\n\n dataTrackReceiver.on('message', data => {\n this.emit('message', data, this);\n });\n }\n\n /**\n * Update the subscriber {@link Track.Priority} of the {@link RemoteDataTrack}.\n * @param {?Track.Priority} priority - the new {@link Track.priority};\n * Currently setPriority has no effect on data tracks.\n * @returns {this}\n * @throws {RangeError}\n */\n setPriority(priority) {\n const priorityValues = [null, ...Object.values(trackPriority)];\n if (!priorityValues.includes(priority)) {\n // eslint-disable-next-line new-cap\n throw E.INVALID_VALUE('priority', priorityValues);\n }\n\n // Note: priority has no real effect on the data tracks.\n this._priority = priority;\n return this;\n }\n\n /**\n * @private\n */\n _setEnabled() {\n // Do nothing.\n }\n\n /**\n * @private\n * @param {boolean} isSwitchedOff\n */\n _setSwitchedOff(isSwitchedOff) {\n if (this._isSwitchedOff !== isSwitchedOff) {\n this._isSwitchedOff = isSwitchedOff;\n this.emit(isSwitchedOff ? 'switchedOff' : 'switchedOn', this);\n }\n }\n}\n\n/**\n * A message was received over the {@link RemoteDataTrack}.\n * @event RemoteDataTrack#message\n * @param {string|ArrayBuffer} data\n * @param {RemoteDataTrack} track - The {@link RemoteDataTrack} that received\n * the message\n */\n\n/**\n * A {@link RemoteDataTrack} was switched off.\n * @param {RemoteDataTrack} track - The {@link RemoteDataTrack} that was\n * switched off\n * @event RemoteDataTrack#switchedOff\n */\n\n/**\n * A {@link RemoteDataTrack} was switched on.\n * @param {RemoteDataTrack} track - The {@link RemoteDataTrack} that was\n * switched on\n * @event RemoteDataTrack#switchedOn\n */\n\nmodule.exports = RemoteDataTrack;\n","'use strict';\n\nconst RemoteTrackPublication = require('./remotetrackpublication');\n\n/**\n * A {@link RemoteDataTrackPublication} represents a {@link RemoteDataTrack}\n * that has been published to a {@link Room}.\n * @property {Track.Kind} kind - \"data\"\n * @property {?RemoteDataTrack} track - unless you have subscribed to the\n * {@link RemoteDataTrack}, this property is null\n * @emits RemoteDataTrackPublication#subscribed\n * @emits RemoteDataTrackPublication#subscriptionFailed\n * @emits RemoteDataTrackPublication#unsubscribed\n */\nclass RemoteDataTrackPublication extends RemoteTrackPublication {\n /**\n * Construct a {@link RemoteDataTrackPublication}.\n * @param {RemoteTrackPublicationSignaling} signaling - {@link RemoteTrackPublication} signaling\n * @param {RemoteTrackPublicationOptions} options - {@link RemoteTrackPublication}\n * options\n */\n constructor(signaling, options) {\n super(signaling, options);\n }\n\n toString() {\n return `[RemoteDataTrackPublication #${this._instanceId}: ${this.trackSid}]`;\n }\n}\n\n/**\n * Your {@link LocalParticipant} subscribed to the {@link RemoteDataTrack}.\n * @param {RemoteDataTrack} track - the {@link RemoteDataTrack} that was subscribed to\n * @event RemoteDataTrackPublication#subscribed\n */\n\n/**\n * Your {@link LocalParticipant} failed to subscribe to the {@link RemoteDataTrack}.\n * @param {TwilioError} error - the reason the {@link RemoteDataTrack} could not be\n * subscribed to\n * @event RemoteDataTrackPublication#subscriptionFailed\n */\n\n/**\n * Your {@link LocalParticipant} unsubscribed from the {@link RemoteDataTrack}.\n * @param {RemoteDataTrack} track - the {@link RemoteDataTrack} that was unsubscribed from\n * @event RemoteDataTrackPublication#unsubscribed\n */\n\nmodule.exports = RemoteDataTrackPublication;\n","/* eslint-disable no-console */\n'use strict';\n\nclass NullObserver {\n constructor(callback) {\n Object.defineProperties(this, {\n _callback: {\n value: callback\n }\n });\n }\n\n observe() {\n }\n\n unobserve() {\n }\n\n makeVisible(videoEl) {\n const visibleEntry = this._makeFakeEntry(videoEl, true);\n this._callback([visibleEntry]);\n }\n\n makeInvisible(videoEl) {\n const invisibleEntry = this._makeFakeEntry(videoEl, false);\n this._callback([invisibleEntry]);\n }\n\n _makeFakeEntry(videoElement, isIntersecting) {\n return { target: videoElement, isIntersecting };\n }\n}\n\nclass NullIntersectionObserver extends NullObserver { }\n\nclass NullResizeObserver extends NullObserver {\n resize(videoEl) {\n const entry = this._makeFakeEntry(videoEl, true);\n this._callback([entry]);\n }\n}\n\n\nmodule.exports = { NullIntersectionObserver, NullResizeObserver, NullObserver };\n","'use strict';\n\nconst mixinRemoteMediaTrack = require('./remotemediatrack');\nconst VideoTrack = require('./videotrack');\nconst documentVisibilityMonitor = require('../../util/documentvisibilitymonitor.js');\nconst { NullObserver } = require('../../util/nullobserver.js');\nconst Timeout = require('../../util/timeout');\n\nconst RemoteMediaVideoTrack = mixinRemoteMediaTrack(VideoTrack);\nconst TRACK_TURN_OF_DELAY_MS = 50;\n\n/**\n * A {@link RemoteVideoTrack} represents a {@link VideoTrack} published to a\n * {@link Room} by a {@link RemoteParticipant}.\n * @extends VideoTrack\n * @property {boolean} isEnabled - Whether the {@link RemoteVideoTrack} is enabled\n * @property {boolean} isSwitchedOff - Whether the {@link RemoteVideoTrack} is switched off\n * @property {Track.SID} sid - The {@link RemoteVideoTrack}'s SID\n * @property {?Track.Priority} priority - The subscribe priority of the {@link RemoteVideoTrack}\n * @emits RemoteVideoTrack#dimensionsChanged\n * @emits RemoteVideoTrack#disabled\n * @emits RemoteVideoTrack#enabled\n * @emits RemoteVideoTrack#started\n * @emits RemoteVideoTrack#switchedOff\n * @emits RemoteVideoTrack#switchedOn\n */\nclass RemoteVideoTrack extends RemoteMediaVideoTrack {\n /**\n * Construct a {@link RemoteVideoTrack}.\n * @param {Track.SID} sid - The {@link RemoteVideoTrack}'s SID\n * @param {MediaTrackReceiver} mediaTrackReceiver - A video MediaStreamTrack container\n * @param {boolean} isEnabled - whether the {@link RemoteVideoTrack} is enabled\n * @param {boolean} isSwitchedOff - Whether the {@link RemoteVideoTrack} is switched off\n * @param {function(?Track.Priority): void} setPriority - Set or clear the subscribe\n * {@link Track.Priority} of the {@link RemoteVideoTrack}\n * @param {function(ClientRenderHint): void} setRenderHint - Set render hints.\n * @param {{log: Log}} options - The {@link RemoteTrack} options\n */\n constructor(sid, mediaTrackReceiver, isEnabled, isSwitchedOff, setPriority, setRenderHint, options) {\n options = Object.assign({\n clientTrackSwitchOffControl: 'auto',\n contentPreferencesMode: 'auto',\n enableDocumentVisibilityTurnOff: true,\n }, options);\n\n options = Object.assign({\n IntersectionObserver: typeof IntersectionObserver === 'undefined' || options.clientTrackSwitchOffControl !== 'auto' ? NullObserver : IntersectionObserver,\n ResizeObserver: typeof ResizeObserver === 'undefined' || options.contentPreferencesMode !== 'auto' ? NullObserver : ResizeObserver,\n }, options);\n\n super(sid, mediaTrackReceiver, isEnabled, isSwitchedOff, setPriority, setRenderHint, options);\n\n Object.defineProperties(this, {\n _enableDocumentVisibilityTurnOff: {\n value: options.enableDocumentVisibilityTurnOff === true && options.clientTrackSwitchOffControl === 'auto',\n },\n _documentVisibilityTurnOffCleanup: {\n value: null,\n writable: true\n },\n _clientTrackSwitchOffControl: {\n value: options.clientTrackSwitchOffControl,\n },\n _contentPreferencesMode: {\n value: options.contentPreferencesMode,\n },\n _invisibleElements: {\n value: new WeakSet(),\n },\n _elToPipCallbacks: {\n value: new WeakMap(),\n },\n _elToPipWindows: {\n value: new WeakMap(),\n },\n _turnOffTimer: {\n value: new Timeout(() => {\n this._setRenderHint({ enabled: false });\n }, TRACK_TURN_OF_DELAY_MS, false),\n },\n _resizeObserver: {\n value: new options.ResizeObserver(entries => {\n // NOTE(mpatwardhan): we ignore elements in _invisibleElements\n // to ensure that ResizeObserver does not end-up turning off a track when a fresh Video element is\n // attached and IntersectionObserver has not had its callback executed yet.\n const visibleElementResized = entries.find(entry => !this._invisibleElements.has(entry.target));\n if (visibleElementResized) {\n maybeUpdateDimensionHint(this);\n }\n })\n },\n _intersectionObserver: {\n value: new options.IntersectionObserver(entries => {\n let shouldSetRenderHint = false;\n entries.forEach(entry => {\n const wasVisible = !this._invisibleElements.has(entry.target);\n if (wasVisible !== entry.isIntersecting) {\n if (entry.isIntersecting) {\n this._log.debug('intersectionObserver detected: Off => On');\n this._invisibleElements.delete(entry.target);\n } else {\n this._log.debug('intersectionObserver detected: On => Off');\n this._invisibleElements.add(entry.target);\n }\n shouldSetRenderHint = true;\n }\n });\n if (shouldSetRenderHint) {\n maybeUpdateEnabledHint(this);\n\n // when visibility of an element changes that may cause the \"biggest\" element to change,\n // update dimensions as well. since dimensions are cached and de-duped at signaling layer,\n // its okay if they got resent.\n maybeUpdateDimensionHint(this);\n }\n }, { threshold: 0.25 })\n },\n });\n }\n\n /**\n * @private\n */\n _start(dummyEl) {\n const result = super._start.call(this, dummyEl);\n // NOTE(mpatwardhan): after emitting started, update turn off track if not visible.\n maybeUpdateEnabledHint(this);\n return result;\n }\n\n /**\n * Request to switch on a {@link RemoteVideoTrack}, This method is applicable only for the group rooms and only when connected with\n * clientTrackSwitchOffControl in video bandwidth profile options set to 'manual'\n * @returns {this}\n */\n switchOn() {\n if (this._clientTrackSwitchOffControl !== 'manual') {\n throw new Error('Invalid state. You can call switchOn only when bandwidthProfile.video.clientTrackSwitchOffControl is set to \"manual\"');\n }\n this._setRenderHint({ enabled: true });\n return this;\n }\n\n /**\n * Request to switch off a {@link RemoteVideoTrack}, This method is applicable only for the group rooms and only when connected with\n * clientTrackSwitchOffControl in video bandwidth profile options set to 'manual'\n * @returns {this}\n */\n switchOff() {\n if (this._clientTrackSwitchOffControl !== 'manual') {\n throw new Error('Invalid state. You can call switchOff only when bandwidthProfile.video.clientTrackSwitchOffControl is set to \"manual\"');\n }\n this._setRenderHint({ enabled: false });\n return this;\n }\n\n /**\n * Set the {@link RemoteVideoTrack}'s content preferences. This method is applicable only for the group rooms and only when connected with\n * videoContentPreferencesMode in video bandwidth profile options set to 'manual'\n * @param {VideoContentPreferences} contentPreferences - requested preferences.\n * @returns {this}\n */\n setContentPreferences(contentPreferences) {\n if (this._contentPreferencesMode !== 'manual') {\n throw new Error('Invalid state. You can call switchOn only when bandwidthProfile.video.contentPreferencesMode is set to \"manual\"');\n }\n\n if (contentPreferences.renderDimensions) {\n this._setRenderHint({ renderDimensions: contentPreferences.renderDimensions });\n }\n return this;\n }\n\n _unObservePip(el) {\n const pipCallbacks = this._elToPipCallbacks.get(el);\n if (pipCallbacks) {\n el.removeEventListener('enterpictureinpicture', pipCallbacks.onEnterPip);\n el.removeEventListener('leavepictureinpicture', pipCallbacks.onLeavePip);\n this._elToPipCallbacks.delete(el);\n }\n }\n\n _observePip(el) {\n const pipCallbacks = this._elToPipCallbacks.get(el);\n if (!pipCallbacks) {\n const onEnterPip = event => this._onEnterPip(event, el);\n const onLeavePip = event => this._onLeavePip(event, el);\n const onResizePip = event => this._onResizePip(event, el);\n\n el.addEventListener('enterpictureinpicture', onEnterPip);\n el.addEventListener('leavepictureinpicture', onLeavePip);\n this._elToPipCallbacks.set(el, { onEnterPip, onLeavePip, onResizePip });\n }\n }\n\n _onEnterPip(event, videoEl) {\n this._log.debug('onEnterPip');\n const pipWindow = event.pictureInPictureWindow;\n this._elToPipWindows.set(videoEl, pipWindow);\n const { onResizePip } = this._elToPipCallbacks.get(videoEl);\n pipWindow.addEventListener('resize', onResizePip);\n maybeUpdateEnabledHint(this);\n }\n\n _onLeavePip(event, videoEl) {\n this._log.debug('onLeavePip');\n this._elToPipWindows.delete(videoEl);\n const { onResizePip } = this._elToPipCallbacks.get(videoEl);\n const pipWindow = event.pictureInPictureWindow;\n pipWindow.removeEventListener('resize', onResizePip);\n maybeUpdateEnabledHint(this);\n }\n\n _onResizePip() {\n maybeUpdateDimensionHint(this);\n }\n\n attach(el) {\n const result = super.attach(el);\n\n if (this._clientTrackSwitchOffControl === 'auto') {\n // start off the element as invisible. will mark it\n // visible (and update render hints) once intersection observer calls back.\n this._invisibleElements.add(result);\n }\n\n this._intersectionObserver.observe(result);\n this._resizeObserver.observe(result);\n\n if (this._enableDocumentVisibilityTurnOff) {\n this._documentVisibilityTurnOffCleanup = this._documentVisibilityTurnOffCleanup || setupDocumentVisibilityTurnOff(this);\n }\n\n this._observePip(result);\n return result;\n }\n\n detach(el) {\n const result = super.detach(el);\n const elements = Array.isArray(result) ? result : [result];\n elements.forEach(element => {\n this._intersectionObserver.unobserve(element);\n this._resizeObserver.unobserve(element);\n this._invisibleElements.delete(element);\n this._unObservePip(element);\n });\n\n if (this._attachments.size === 0) {\n if (this._documentVisibilityTurnOffCleanup) {\n this._documentVisibilityTurnOffCleanup();\n this._documentVisibilityTurnOffCleanup = null;\n }\n }\n\n maybeUpdateEnabledHint(this);\n maybeUpdateDimensionHint(this);\n return result;\n }\n\n /**\n * Add a {@link VideoProcessor} to allow for custom processing of video frames belonging to a VideoTrack.\n * When a Participant un-publishes and re-publishes a VideoTrack, a new RemoteVideoTrack is created and\n * any VideoProcessors attached to the previous RemoteVideoTrack would have to be re-added again.\n * @param {VideoProcessor} processor - The {@link VideoProcessor} to use.\n * @param {AddProcessorOptions} [options] - {@link AddProcessorOptions} to provide.\n * @returns {this}\n * @example\n * class GrayScaleProcessor {\n * constructor(percentage) {\n * this.percentage = percentage;\n * }\n * processFrame(inputFrameBuffer, outputFrameBuffer) {\n * const context = outputFrameBuffer.getContext('2d');\n * context.filter = `grayscale(${this.percentage}%)`;\n * context.drawImage(inputFrameBuffer, 0, 0, inputFrameBuffer.width, inputFrameBuffer.height);\n * }\n * }\n *\n * const grayscaleProcessor = new GrayScaleProcessor(100);\n *\n * Array.from(room.participants.values()).forEach(participant => {\n * const remoteVideoTrack = Array.from(participant.videoTracks.values())[0].track;\n * remoteVideoTrack.addProcessor(grayscaleProcessor);\n * });\n */\n addProcessor() {\n return super.addProcessor.apply(this, arguments);\n }\n\n /**\n * Remove the previously added {@link VideoProcessor} using `addProcessor` API.\n * @param {VideoProcessor} processor - The {@link VideoProcessor} to remove.\n * @returns {this}\n * @example\n * class GrayScaleProcessor {\n * constructor(percentage) {\n * this.percentage = percentage;\n * }\n * processFrame(inputFrameBuffer, outputFrameBuffer) {\n * const context = outputFrameBuffer.getContext('2d');\n * context.filter = `grayscale(${this.percentage}%)`;\n * context.drawImage(inputFrameBuffer, 0, 0, inputFrameBuffer.width, inputFrameBuffer.height);\n * }\n * }\n *\n * const grayscaleProcessor = new GrayScaleProcessor(100);\n *\n * Array.from(room.participants.values()).forEach(participant => {\n * const remoteVideoTrack = Array.from(participant.videoTracks.values())[0].track;\n * remoteVideoTrack.addProcessor(grayscaleProcessor);\n * });\n *\n * document.getElementById('remove-button').onclick = () => {\n * Array.from(room.participants.values()).forEach(participant => {\n * const remoteVideoTrack = Array.from(participant.videoTracks.values())[0].track;\n * remoteVideoTrack.removeProcessor(grayscaleProcessor);\n * });\n * }\n */\n removeProcessor() {\n return super.removeProcessor.apply(this, arguments);\n }\n\n toString() {\n return `[RemoteVideoTrack #${this._instanceId}: ${this.sid}]`;\n }\n\n /**\n * Update the subscribe {@link Track.Priority} of the {@link RemoteVideoTrack}.\n * @param {?Track.Priority} priority - the new subscribe {@link Track.Priority};\n * If null, then the subscribe {@link Track.Priority} is cleared, which\n * means the {@link Track.Priority} set by the publisher is now the effective priority.\n * @returns {this}\n * @throws {RangeError}\n */\n setPriority(priority) {\n return super.setPriority(priority);\n }\n}\n\nfunction setupDocumentVisibilityTurnOff(removeVideoTrack) {\n function onVisibilityChanged() {\n maybeUpdateEnabledHint(removeVideoTrack);\n }\n\n documentVisibilityMonitor.onVisibilityChange(1, onVisibilityChanged);\n return () => {\n documentVisibilityMonitor.offVisibilityChange(1, onVisibilityChanged);\n };\n}\n\nfunction maybeUpdateEnabledHint(remoteVideoTrack) {\n if (remoteVideoTrack._clientTrackSwitchOffControl !== 'auto') {\n return;\n }\n\n const visibleElements = remoteVideoTrack._getAllAttachedElements().filter(el => !remoteVideoTrack._invisibleElements.has(el));\n const pipWindows = remoteVideoTrack._getAllAttachedElements().filter(el => remoteVideoTrack._elToPipWindows.has(el));\n\n // even when document is invisible we may have track playing in pip window.\n const enabled = pipWindows.length > 0 || (document.visibilityState === 'visible' && visibleElements.length > 0);\n\n if (enabled === true) {\n remoteVideoTrack._turnOffTimer.clear();\n remoteVideoTrack._setRenderHint({ enabled: true });\n } else if (!remoteVideoTrack._turnOffTimer.isSet) {\n // set the track to be turned off after some delay.\n remoteVideoTrack._turnOffTimer.start();\n }\n}\n\nfunction maybeUpdateDimensionHint(remoteVideoTrack) {\n if (remoteVideoTrack._contentPreferencesMode !== 'auto') {\n return;\n }\n\n const visibleElements = remoteVideoTrack._getAllAttachedElements().filter(el => !remoteVideoTrack._invisibleElements.has(el));\n const pipElements = remoteVideoTrack._getAllAttachedElements().map(el => {\n const pipWindow = remoteVideoTrack._elToPipWindows.get(el);\n return pipWindow ? { clientHeight: pipWindow.height, clientWidth: pipWindow.width } : { clientHeight: 0, clientWidth: 0 };\n });\n const totalElements = visibleElements.concat(pipElements);\n if (totalElements.length > 0) {\n const [{ clientHeight, clientWidth }] = totalElements.sort((el1, el2) =>\n el2.clientHeight + el2.clientWidth - el1.clientHeight - el1.clientWidth - 1);\n const renderDimensions = { height: clientHeight, width: clientWidth };\n remoteVideoTrack._setRenderHint({ renderDimensions });\n }\n}\n\n/**\n * @typedef {object} VideoContentPreferences\n * @property {VideoTrack.Dimensions} [renderDimensions] - Render Dimensions to request for the {@link RemoteVideoTrack}.\n */\n\n/**\n * The {@link RemoteVideoTrack}'s dimensions changed.\n * @param {RemoteVideoTrack} track - The {@link RemoteVideoTrack} whose\n * dimensions changed\n * @event RemoteVideoTrack#dimensionsChanged\n */\n\n/**\n * The {@link RemoteVideoTrack} was disabled, i.e. \"paused\".\n * @param {RemoteVideoTrack} track - The {@link RemoteVideoTrack} that was\n * disabled\n * @event RemoteVideoTrack#disabled\n */\n\n/**\n * The {@link RemoteVideoTrack} was enabled, i.e. \"resumed\".\n * @param {RemoteVideoTrack} track - The {@link RemoteVideoTrack} that was\n * enabled\n * @event RemoteVideoTrack#enabled\n */\n\n/**\n * The {@link RemoteVideoTrack} started. This means there is enough video data\n * to begin playback.\n * @param {RemoteVideoTrack} track - The {@link RemoteVideoTrack} that started\n * @event RemoteVideoTrack#started\n */\n\n/**\n * A {@link RemoteVideoTrack} was switched off.\n * @param {RemoteVideoTrack} track - The {@link RemoteVideoTrack} that was\n * switched off\n * @event RemoteVideoTrack#switchedOff\n */\n\n/**\n * A {@link RemoteVideoTrack} was switched on.\n * @param {RemoteVideoTrack} track - The {@link RemoteVideoTrack} that was\n * switched on\n * @event RemoteVideoTrack#switchedOn\n */\n\nmodule.exports = RemoteVideoTrack;\n","'use strict';\n\nconst RemoteTrackPublication = require('./remotetrackpublication');\n\n/**\n * A {@link RemoteVideoTrackPublication} represents a {@link RemoteVideoTrack}\n * that has been published to a {@link Room}.\n * @property {Track.Kind} kind - \"video\"\n * @property {?RemoteVideoTrack} track - unless you have subscribed to the\n * {@link RemoteVideoTrack}, this property is null\n * @emits RemoteVideoTrackPublication#subscribed\n * @emits RemoteVideoTrackPublication#subscriptionFailed\n * @emits RemoteVideoTrackPublication#trackDisabled\n * @emits RemoteVideoTrackPublication#trackEnabled\n * @emits RemoteVideoTrackPublication#unsubscribed\n */\nclass RemoteVideoTrackPublication extends RemoteTrackPublication {\n /**\n * Construct a {@link RemoteVideoTrackPublication}.\n * @param {RemoteTrackPublicationSignaling} signaling - {@link RemoteTrackPublication} signaling\n * @param {RemoteTrackPublicationOptions} options - {@link RemoteTrackPublication}\n * options\n */\n constructor(signaling, options) {\n super(signaling, options);\n }\n\n toString() {\n return `[RemoteVideoTrackPublication #${this._instanceId}: ${this.trackSid}]`;\n }\n}\n\n/**\n * Your {@link LocalParticipant} subscribed to the {@link RemoteVideoTrack}.\n * @param {RemoteVideoTrack} track - the {@link RemoteVideoTrack} that was subscribed to\n * @event RemoteVideoTrackPublication#subscribed\n */\n\n/**\n * Your {@link LocalParticipant} failed to subscribe to the {@link RemoteVideoTrack}.\n * @param {TwilioError} error - the reason the {@link RemoteVideoTrack} could not be\n * subscribed to\n * @event RemoteVideoTrackPublication#subscriptionFailed\n */\n\n/**\n * The {@link RemoteVideoTrack} was disabled.\n * @event RemoteVideoTrackPublication#trackDisabled\n */\n\n/**\n * The {@link RemoteVideoTrack} was enabled.\n * @event RemoteVideoTrackPublication#trackEnabled\n */\n\n/**\n * Your {@link LocalParticipant} unsubscribed from the {@link RemoteVideoTrack}.\n * @param {RemoteVideoTrack} track - the {@link RemoteVideoTrack} that was unsubscribed from\n * @event RemoteVideoTrackPublication#unsubscribed\n */\n\nmodule.exports = RemoteVideoTrackPublication;\n","'use strict';\n\nconst EventEmitter = require('./eventemitter');\nconst RemoteAudioTrack = require('./media/track/remoteaudiotrack');\nconst RemoteAudioTrackPublication = require('./media/track/remoteaudiotrackpublication');\nconst RemoteDataTrack = require('./media/track/remotedatatrack');\nconst RemoteDataTrackPublication = require('./media/track/remotedatatrackpublication');\nconst RemoteVideoTrack = require('./media/track/remotevideotrack');\nconst RemoteVideoTrackPublication = require('./media/track/remotevideotrackpublication');\nconst util = require('./util');\n\nlet nInstances = 0;\n\n/**\n * {@link NetworkQualityLevel} is a value from 0–5, inclusive, representing the\n * quality of a network connection.\n * @typedef {number} NetworkQualityLevel\n */\n\n/**\n * @extends EventEmitter\n * @property {Map} audioTracks -\n * The {@link Participant}'s {@link AudioTrackPublication}s\n * @property {Map} dataTracks -\n * The {@link Participant}'s {@link DataTrackPublication}s.\n * @property {Participant.Identity} identity - The identity of the {@link Participant}\n * @property {?NetworkQualityLevel} networkQualityLevel - The\n * {@link Participant}'s current {@link NetworkQualityLevel}, if any\n * @property {?NetworkQualityStats} networkQualityStats - The\n * {@link Participant}'s current {@link NetworkQualityStats}, if any\n * @property {Participant.SID} sid - The {@link Participant}'s SID\n * @property {string} state - \"connected\", \"disconnected\" or \"reconnecting\"\n * @property {Map} tracks -\n * The {@link Participant}'s {@link TrackPublication}s\n * @property {Map} videoTracks -\n * The {@link Participant}'s {@link VideoTrackPublication}s\n * @emits Participant#disconnected\n * @emits Participant#networkQualityLevelChanged\n * @emits Participant#reconnected\n * @emits Participant#reconnecting\n * @emits Participant#trackDimensionsChanged\n * @emits Participant#trackStarted\n */\nclass Participant extends EventEmitter {\n /**\n * Construct a {@link Participant}.\n * @param {ParticipantSignaling} signaling\n * @param {object} [options]\n */\n constructor(signaling, options) {\n super();\n\n options = Object.assign({\n RemoteAudioTrack,\n RemoteAudioTrackPublication,\n RemoteDataTrack,\n RemoteDataTrackPublication,\n RemoteVideoTrack,\n RemoteVideoTrackPublication,\n tracks: []\n }, options);\n\n const indexed = indexTracksById(options.tracks);\n const log = options.log.createLog('default', this);\n const audioTracks = new Map(indexed.audioTracks);\n const dataTracks = new Map(indexed.dataTracks);\n const tracks = new Map(indexed.tracks);\n const videoTracks = new Map(indexed.videoTracks);\n\n Object.defineProperties(this, {\n _RemoteAudioTrack: {\n value: options.RemoteAudioTrack\n },\n _RemoteAudioTrackPublication: {\n value: options.RemoteAudioTrackPublication\n },\n _RemoteDataTrack: {\n value: options.RemoteDataTrack\n },\n _RemoteDataTrackPublication: {\n value: options.RemoteDataTrackPublication\n },\n _RemoteVideoTrack: {\n value: options.RemoteVideoTrack\n },\n _RemoteVideoTrackPublication: {\n value: options.RemoteVideoTrackPublication\n },\n _audioTracks: {\n value: audioTracks\n },\n _dataTracks: {\n value: dataTracks\n },\n _instanceId: {\n value: ++nInstances\n },\n _clientTrackSwitchOffControl: {\n value: options.clientTrackSwitchOffControl,\n },\n _contentPreferencesMode: {\n value: options.contentPreferencesMode,\n },\n _log: {\n value: log\n },\n _signaling: {\n value: signaling\n },\n _tracks: {\n value: tracks\n },\n _trackEventReemitters: {\n value: new Map()\n },\n _trackPublicationEventReemitters: {\n value: new Map()\n },\n _trackSignalingUpdatedEventCallbacks: {\n value: new Map()\n },\n _videoTracks: {\n value: videoTracks\n },\n audioTracks: {\n enumerable: true,\n value: new Map()\n },\n dataTracks: {\n enumerable: true,\n value: new Map()\n },\n identity: {\n enumerable: true,\n get() {\n return signaling.identity;\n }\n },\n networkQualityLevel: {\n enumerable: true,\n get() {\n return signaling.networkQualityLevel;\n }\n },\n networkQualityStats: {\n enumerable: true,\n get() {\n return signaling.networkQualityStats;\n }\n },\n sid: {\n enumerable: true,\n get() {\n return signaling.sid;\n }\n },\n state: {\n enumerable: true,\n get() {\n return signaling.state;\n }\n },\n tracks: {\n enumerable: true,\n value: new Map()\n },\n videoTracks: {\n enumerable: true,\n value: new Map()\n }\n });\n\n this._tracks.forEach(reemitTrackEvents.bind(null, this));\n signaling.on('networkQualityLevelChanged', () =>\n this.emit('networkQualityLevelChanged', this.networkQualityLevel,\n this.networkQualityStats &&\n (this.networkQualityStats.audio || this.networkQualityStats.video)\n ? this.networkQualityStats\n : null));\n reemitSignalingStateChangedEvents(this, signaling);\n log.info(`Created a new Participant${this.identity ? `: ${this.identity}` : ''}`);\n }\n\n /**\n * Get the {@link RemoteTrack} events to re-emit.\n * @private\n * @returns {Array>} events\n */\n _getTrackEvents() {\n return [\n ['dimensionsChanged', 'trackDimensionsChanged'],\n ['message', 'trackMessage'],\n ['started', 'trackStarted']\n ];\n }\n\n /**\n * @private\n */\n _getTrackPublicationEvents() {\n return [];\n }\n\n toString() {\n return `[Participant #${this._instanceId}: ${this.sid}]`;\n }\n\n /**\n * @private\n * @param {RemoteTrack} track\n * @param {Track.ID} id\n * @returns {?RemoteTrack}\n */\n _addTrack(track, id) {\n const log = this._log;\n if (this._tracks.has(id)) {\n return null;\n }\n this._tracks.set(id, track);\n\n const tracksByKind = {\n audio: this._audioTracks,\n video: this._videoTracks,\n data: this._dataTracks\n }[track.kind];\n tracksByKind.set(id, track);\n reemitTrackEvents(this, track, id);\n\n log.info(`Added a new ${util.trackClass(track)}:`, id);\n log.debug(`${util.trackClass(track)}:`, track);\n\n return track;\n }\n\n\n /**\n * @private\n * @param {RemoteTrackPublication} publication\n * @returns {?RemoteTrackPublication}\n */\n _addTrackPublication(publication) {\n const log = this._log;\n if (this.tracks.has(publication.trackSid)) {\n return null;\n }\n this.tracks.set(publication.trackSid, publication);\n\n const trackPublicationsByKind = {\n audio: this.audioTracks,\n data: this.dataTracks,\n video: this.videoTracks\n }[publication.kind];\n trackPublicationsByKind.set(publication.trackSid, publication);\n reemitTrackPublicationEvents(this, publication);\n\n log.info(`Added a new ${util.trackPublicationClass(publication)}:`, publication.trackSid);\n log.debug(`${util.trackPublicationClass(publication)}:`, publication);\n return publication;\n }\n\n /**\n * @private\n */\n _handleTrackSignalingEvents() {\n const { _log: log, _clientTrackSwitchOffControl: clientTrackSwitchOffControl, _contentPreferencesMode: contentPreferencesMode } = this;\n const self = this;\n\n if (this.state === 'disconnected') {\n return;\n }\n\n const RemoteAudioTrack = this._RemoteAudioTrack;\n const RemoteAudioTrackPublication = this._RemoteAudioTrackPublication;\n const RemoteVideoTrack = this._RemoteVideoTrack;\n const RemoteVideoTrackPublication = this._RemoteVideoTrackPublication;\n const RemoteDataTrack = this._RemoteDataTrack;\n const RemoteDataTrackPublication = this._RemoteDataTrackPublication;\n const participantSignaling = this._signaling;\n\n function trackSignalingAdded(signaling) {\n const RemoteTrackPublication = {\n audio: RemoteAudioTrackPublication,\n data: RemoteDataTrackPublication,\n video: RemoteVideoTrackPublication\n }[signaling.kind];\n\n const publication = new RemoteTrackPublication(signaling, { log });\n self._addTrackPublication(publication);\n\n let isSubscribed = signaling.isSubscribed;\n if (isSubscribed) {\n trackSignalingSubscribed(signaling);\n }\n\n self._trackSignalingUpdatedEventCallbacks.set(signaling.sid, () => {\n if (isSubscribed !== signaling.isSubscribed) {\n isSubscribed = signaling.isSubscribed;\n if (isSubscribed) {\n trackSignalingSubscribed(signaling);\n return;\n }\n trackSignalingUnsubscribed(signaling);\n }\n });\n signaling.on('updated', self._trackSignalingUpdatedEventCallbacks.get(signaling.sid));\n }\n\n function trackSignalingRemoved(signaling) {\n if (signaling.isSubscribed) {\n signaling.setTrackTransceiver(null);\n }\n const updated = self._trackSignalingUpdatedEventCallbacks.get(signaling.sid);\n if (updated) {\n signaling.removeListener('updated', updated);\n self._trackSignalingUpdatedEventCallbacks.delete(signaling.sid);\n }\n const publication = self.tracks.get(signaling.sid);\n if (publication) {\n self._removeTrackPublication(publication);\n }\n }\n\n function trackSignalingSubscribed(signaling) {\n const { isEnabled, name, kind, sid, trackTransceiver, isSwitchedOff } = signaling;\n const RemoteTrack = {\n audio: RemoteAudioTrack,\n video: RemoteVideoTrack,\n data: RemoteDataTrack\n }[kind];\n\n const publication = self.tracks.get(sid);\n\n // NOTE(mroberts): It should never be the case that the TrackSignaling and\n // MediaStreamTrack or DataTrackReceiver kinds disagree; however, just in\n // case, we handle it here.\n if (!RemoteTrack || kind !== trackTransceiver.kind) {\n return;\n }\n\n const options = { log, name, clientTrackSwitchOffControl, contentPreferencesMode };\n const setPriority = newPriority => participantSignaling.updateSubscriberTrackPriority(sid, newPriority);\n const setRenderHint = renderHint => {\n if (signaling.isSubscribed) {\n participantSignaling.updateTrackRenderHint(sid, renderHint);\n }\n };\n const track = kind === 'data'\n ? new RemoteTrack(sid, trackTransceiver, options)\n : new RemoteTrack(sid, trackTransceiver, isEnabled, isSwitchedOff, setPriority, setRenderHint, options);\n\n self._addTrack(track, publication, trackTransceiver.id);\n }\n\n function trackSignalingUnsubscribed(signaling) {\n const [id, track] = Array.from(self._tracks.entries()).find(([, track]) => track.sid === signaling.sid);\n const publication = self.tracks.get(signaling.sid);\n if (track) {\n self._removeTrack(track, publication, id);\n }\n }\n\n participantSignaling.on('trackAdded', trackSignalingAdded);\n participantSignaling.on('trackRemoved', trackSignalingRemoved);\n\n participantSignaling.tracks.forEach(trackSignalingAdded);\n\n participantSignaling.on('stateChanged', function stateChanged(state) {\n if (state === 'disconnected') {\n log.debug('Removing event listeners');\n participantSignaling.removeListener('stateChanged', stateChanged);\n participantSignaling.removeListener('trackAdded', trackSignalingAdded);\n participantSignaling.removeListener('trackRemoved', trackSignalingRemoved);\n } else if (state === 'connected') {\n // NOTE(mmalavalli): Any transition to \"connected\" here is a result of\n // successful signaling reconnection, and not a first-time establishment\n // of the signaling connection.\n log.info('reconnected');\n\n // NOTE(mpatwardhan): `stateChanged` can get emitted with StateMachine locked.\n // Do not signal public events synchronously with lock held.\n setTimeout(() => self.emit('reconnected'), 0);\n\n }\n });\n }\n\n /**\n * @private\n * @param {RemoteTrack} track\n * @param {Track.ID} id\n * @returns {?RemoteTrack}\n */\n _removeTrack(track, id) {\n if (!this._tracks.has(id)) {\n return null;\n }\n this._tracks.delete(id);\n\n const tracksByKind = {\n audio: this._audioTracks,\n video: this._videoTracks,\n data: this._dataTracks\n }[track.kind];\n tracksByKind.delete(id);\n\n const reemitters = this._trackEventReemitters.get(id) || new Map();\n reemitters.forEach((reemitter, event) => {\n track.removeListener(event, reemitter);\n });\n\n const log = this._log;\n log.info(`Removed a ${util.trackClass(track)}:`, id);\n log.debug(`${util.trackClass(track)}:`, track);\n return track;\n }\n\n /**\n * @private\n * @param {RemoteTrackPublication} publication\n * @returns {?RemoteTrackPublication}\n */\n _removeTrackPublication(publication) {\n publication = this.tracks.get(publication.trackSid);\n if (!publication) {\n return null;\n }\n this.tracks.delete(publication.trackSid);\n\n const trackPublicationsByKind = {\n audio: this.audioTracks,\n data: this.dataTracks,\n video: this.videoTracks\n }[publication.kind];\n trackPublicationsByKind.delete(publication.trackSid);\n\n const reemitters = this._trackPublicationEventReemitters.get(publication.trackSid) || new Map();\n reemitters.forEach((reemitter, event) => {\n publication.removeListener(event, reemitter);\n });\n\n const log = this._log;\n log.info(`Removed a ${util.trackPublicationClass(publication)}:`, publication.trackSid);\n log.debug(`${util.trackPublicationClass(publication)}:`, publication);\n return publication;\n }\n\n toJSON() {\n return util.valueToJSON(this);\n }\n}\n\n/**\n * A {@link Participant.SID} is a 34-character string starting with \"PA\"\n * that uniquely identifies a {@link Participant}.\n * @type string\n * @typedef Participant.SID\n */\n\n/**\n * A {@link Participant.Identity} is a string that identifies a\n * {@link Participant}. You can think of it like a name.\n * @typedef {string} Participant.Identity\n */\n\n/**\n * The {@link Participant} has disconnected.\n * @param {Participant} participant - The {@link Participant} that disconnected.\n * @event Participant#disconnected\n */\n\n/**\n * The {@link Participant}'s {@link NetworkQualityLevel} changed.\n * @param {NetworkQualityLevel} networkQualityLevel - The new\n * {@link NetworkQualityLevel}\n * @param {?NetworkQualityStats} networkQualityStats - The {@link NetworkQualityStats}\n * based on which {@link NetworkQualityLevel} is calculated, if any\n * @event Participant#networkQualityLevelChanged\n */\n\n/**\n * The {@link Participant} has reconnected to the {@link Room} after a signaling connection disruption.\n * @event Participant#reconnected\n */\n\n/**\n * The {@link Participant} is reconnecting to the {@link Room} after a signaling connection disruption.\n * @event Participant#reconnecting\n */\n\n/**\n * One of the {@link Participant}'s {@link VideoTrack}'s dimensions changed.\n * @param {VideoTrack} track - The {@link VideoTrack} whose dimensions changed\n * @event Participant#trackDimensionsChanged\n */\n\n/**\n * One of the {@link Participant}'s {@link Track}s started.\n * @param {Track} track - The {@link Track} that started\n * @event Participant#trackStarted\n */\n\n/**\n * Indexed {@link Track}s by {@link Track.ID}.\n * @typedef {object} IndexedTracks\n * @property {Array<{0: Track.ID, 1: AudioTrack}>} audioTracks - Indexed\n * {@link AudioTrack}s\n * @property {Array<{0: Track.ID, 1: DataTrack}>} dataTracks - Indexed\n * {@link DataTrack}s\n * @property {Array<{0: Track.ID, 1: Track}>} tracks - Indexed {@link Track}s\n * @property {Array<{0: Track.ID, 1: VideoTrack}>} videoTracks - Indexed\n * {@link VideoTrack}s\n * @private\n */\n\n/**\n * Index tracks by {@link Track.ID}.\n * @param {Array} tracks\n * @returns {IndexedTracks}\n * @private\n */\nfunction indexTracksById(tracks) {\n const indexedTracks = tracks.map(track => [track.id, track]);\n const indexedAudioTracks = indexedTracks.filter(keyValue => keyValue[1].kind === 'audio');\n const indexedVideoTracks = indexedTracks.filter(keyValue => keyValue[1].kind === 'video');\n const indexedDataTracks = indexedTracks.filter(keyValue => keyValue[1].kind === 'data');\n\n return {\n audioTracks: indexedAudioTracks,\n dataTracks: indexedDataTracks,\n tracks: indexedTracks,\n videoTracks: indexedVideoTracks\n };\n}\n\n/**\n * Re-emit {@link ParticipantSignaling} 'stateChanged' events.\n * @param {Participant} participant\n * @param {ParticipantSignaling} signaling\n * @private\n */\nfunction reemitSignalingStateChangedEvents(participant, signaling) {\n const log = participant._log;\n\n if (participant.state === 'disconnected') {\n return;\n }\n\n // Reemit state transition events from the ParticipantSignaling.\n signaling.on('stateChanged', function stateChanged(state) {\n log.debug('Transitioned to state:', state);\n participant.emit(state, participant);\n if (state === 'disconnected') {\n log.debug('Removing Track event reemitters');\n signaling.removeListener('stateChanged', stateChanged);\n\n participant._tracks.forEach(track => {\n const reemitters = participant._trackEventReemitters.get(track.id);\n if (track && reemitters) {\n reemitters.forEach((reemitter, event) => {\n track.removeListener(event, reemitter);\n });\n }\n });\n\n // eslint-disable-next-line no-warning-comments\n // TODO(joma): Removing this introduced unit test failures in the RemoteParticipant.\n // Investigate further before removing.\n signaling.tracks.forEach(trackSignaling => {\n const track = participant._tracks.get(trackSignaling.id);\n const reemitters = participant._trackEventReemitters.get(trackSignaling.id);\n if (track && reemitters) {\n reemitters.forEach((reemitter, event) => {\n track.removeListener(event, reemitter);\n });\n }\n });\n\n participant._trackEventReemitters.clear();\n\n participant.tracks.forEach(publication => {\n participant._trackPublicationEventReemitters.get(publication.trackSid)\n .forEach((reemitter, event) => {\n publication.removeListener(event, reemitter);\n });\n });\n participant._trackPublicationEventReemitters.clear();\n }\n });\n}\n\n/**\n * Re-emit {@link Track} events.\n * @param {Participant} participant\n * @param {Track} track\n * @param {Track.ID} id\n * @private\n */\nfunction reemitTrackEvents(participant, track, id) {\n const trackEventReemitters = new Map();\n\n if (participant.state === 'disconnected') {\n return;\n }\n\n participant._getTrackEvents().forEach(eventPair => {\n const trackEvent = eventPair[0];\n const participantEvent = eventPair[1];\n\n trackEventReemitters.set(trackEvent, function() {\n const args = [participantEvent].concat([].slice.call(arguments));\n return participant.emit(...args);\n });\n\n track.on(trackEvent, trackEventReemitters.get(trackEvent));\n });\n\n participant._trackEventReemitters.set(id, trackEventReemitters);\n}\n\n/**\n * Re-emit {@link TrackPublication} events.\n * @private\n * @param {Participant} participant\n * @param {TrackPublication} publication\n */\nfunction reemitTrackPublicationEvents(participant, publication) {\n const publicationEventReemitters = new Map();\n\n if (participant.state === 'disconnected') {\n return;\n }\n\n participant._getTrackPublicationEvents().forEach(([publicationEvent, participantEvent]) => {\n publicationEventReemitters.set(publicationEvent, (...args) => {\n participant.emit(participantEvent, ...args, publication);\n });\n publication.on(publicationEvent, publicationEventReemitters.get(publicationEvent));\n });\n\n participant._trackPublicationEventReemitters.set(publication.trackSid, publicationEventReemitters);\n}\n\nmodule.exports = Participant;\n","'use strict';\n\nconst { MediaStreamTrack } = require('./webrtc');\nconst { asLocalTrack, asLocalTrackPublication, trackClass } = require('./util');\nconst { typeErrors: E, trackPriority } = require('./util/constants');\nconst { validateLocalTrack } = require('./util/validate');\n\nconst {\n LocalAudioTrack,\n LocalDataTrack,\n LocalVideoTrack\n} = require('./media/track/es5');\n\nconst LocalAudioTrackPublication = require('./media/track/localaudiotrackpublication');\nconst LocalDataTrackPublication = require('./media/track/localdatatrackpublication');\nconst LocalVideoTrackPublication = require('./media/track/localvideotrackpublication');\nconst Participant = require('./participant');\n\n/**\n * A {@link LocalParticipant} represents the local {@link Participant} in a\n * {@link Room}.\n * @extends Participant\n * @property {Map} audioTracks -\n * The {@link LocalParticipant}'s {@link LocalAudioTrackPublication}s\n * @property {Map} dataTracks -\n * The {@link LocalParticipant}'s {@link LocalDataTrackPublication}s\n * @property {Map} tracks -\n * The {@link LocalParticipant}'s {@link LocalTrackPublication}s\n * @property {Map} videoTracks -\n * The {@link LocalParticipant}'s {@link LocalVideoTrackPublication}s\n * @property {string} signalingRegion - The geographical region of the\n * signaling edge the {@link LocalParticipant} is connected to.\n *\n * @emits RemoteParticipant#reconnected\n * @emits RemoteParticipant#reconnecting\n * @emits LocalParticipant#trackDimensionsChanged\n * @emits LocalParticipant#trackDisabled\n * @emits LocalParticipant#trackEnabled\n * @emits LocalParticipant#trackPublicationFailed\n * @emits LocalParticipant#trackPublished\n * @emits LocalParticipant#trackStarted\n * @emits LocalParticipant#trackStopped\n * @emits LocalParticipant#trackWarning\n * @emits LocalParticipant#trackWarningsCleared\n */\nclass LocalParticipant extends Participant {\n /**\n * Construct a {@link LocalParticipant}.\n * @param {ParticipantSignaling} signaling\n * @param {Array} localTracks\n * @param {Object} options\n */\n constructor(signaling, localTracks, options) {\n options = Object.assign({\n LocalAudioTrack,\n LocalVideoTrack,\n LocalDataTrack,\n MediaStreamTrack,\n LocalAudioTrackPublication,\n LocalVideoTrackPublication,\n LocalDataTrackPublication,\n shouldStopLocalTracks: false,\n tracks: localTracks\n }, options);\n\n const tracksToStop = options.shouldStopLocalTracks\n ? new Set(localTracks.filter(localTrack => localTrack.kind !== 'data'))\n : new Set();\n\n super(signaling, options);\n\n Object.defineProperties(this, {\n _eventObserver: {\n value: options.eventObserver\n },\n _LocalAudioTrack: {\n value: options.LocalAudioTrack\n },\n _LocalDataTrack: {\n value: options.LocalDataTrack\n },\n _LocalVideoTrack: {\n value: options.LocalVideoTrack\n },\n _MediaStreamTrack: {\n value: options.MediaStreamTrack\n },\n _LocalAudioTrackPublication: {\n value: options.LocalAudioTrackPublication\n },\n _LocalDataTrackPublication: {\n value: options.LocalDataTrackPublication\n },\n _LocalVideoTrackPublication: {\n value: options.LocalVideoTrackPublication\n },\n _tracksToStop: {\n value: tracksToStop\n },\n signalingRegion: {\n enumerable: true,\n get() {\n return signaling.signalingRegion;\n }\n }\n });\n\n this._handleTrackSignalingEvents();\n }\n\n /**\n * @private\n * @param {LocalTrack} track\n * @param {Track.ID} id\n * @param {Track.Priority} priority\n * @returns {?LocalTrack}\n */\n _addTrack(track, id, priority) {\n const addedTrack = super._addTrack(track, id);\n if (addedTrack && this.state !== 'disconnected') {\n this._addLocalTrack(track, priority);\n }\n return addedTrack;\n }\n\n /**\n * @private\n * @param {LocalTrack} track\n * @param {Track.Priority} priority\n * @returns {void}\n */\n _addLocalTrack(track, priority) {\n // check if track has noise cancellation enabled.\n const vendor = track.noiseCancellation?.vendor;\n this._signaling.addTrack(track._trackSender, track.name, priority, vendor);\n this._log.info(`Added a new ${trackClass(track, true)}:`, track.id);\n this._log.debug(`${trackClass(track, true)}:`, track);\n }\n\n /**\n * @private\n * @param {LocalTrack} track\n * @param {Track.ID} id\n * @returns {?LocalTrack}\n */\n _removeTrack(track, id) {\n const removedTrack = super._removeTrack(track, id);\n if (removedTrack && this.state !== 'disconnected') {\n this._signaling.removeTrack(track._trackSender);\n this._log.info(`Removed a ${trackClass(track, true)}:`, track.id);\n this._log.debug(`${trackClass(track, true)}:`, track);\n }\n return removedTrack;\n }\n\n /**\n * Get the {@link LocalTrack} events to re-emit.\n * @private\n * @returns {Array>} events\n */\n _getTrackEvents() {\n return super._getTrackEvents.call(this).concat([\n ['disabled', 'trackDisabled'],\n ['enabled', 'trackEnabled'],\n ['stopped', 'trackStopped']\n ]);\n }\n\n toString() {\n return `[LocalParticipant #${this._instanceId}${this.sid ? `: ${this.sid}` : ''}]`;\n }\n\n /**\n * @private\n */\n _handleTrackSignalingEvents() {\n const log = this._log;\n\n if (this.state === 'disconnected') {\n return;\n }\n\n const localTrackDisabled = localTrack => {\n const trackSignaling = this._signaling.getPublication(localTrack._trackSender);\n if (trackSignaling) {\n trackSignaling.disable();\n log.debug(`Disabled the ${trackClass(localTrack, true)}:`, localTrack.id);\n }\n };\n\n const localTrackEnabled = localTrack => {\n const trackSignaling = this._signaling.getPublication(localTrack._trackSender);\n if (trackSignaling) {\n trackSignaling.enable();\n log.debug(`Enabled the ${trackClass(localTrack, true)}:`, localTrack.id);\n }\n };\n\n const localTrackStopped = localTrack => {\n // NOTE(mroberts): We shouldn't need to check for `stop`, since DataTracks\n // do not emit \"stopped\".\n const trackSignaling = this._signaling.getPublication(localTrack._trackSender);\n if (trackSignaling) {\n trackSignaling.stop();\n }\n return trackSignaling;\n };\n\n const stateChanged = state => {\n log.debug('Transitioned to state:', state);\n if (state === 'disconnected') {\n log.debug('Removing LocalTrack event listeners');\n this._signaling.removeListener('stateChanged', stateChanged);\n this.removeListener('trackDisabled', localTrackDisabled);\n this.removeListener('trackEnabled', localTrackEnabled);\n this.removeListener('trackStopped', localTrackStopped);\n\n // NOTE(mmalavalli): Remove the stale MediaTrackSender clones so that we\n // do not call replaceTrack() on their RTCRtpSenders.\n this._tracks.forEach(track => {\n const trackSignaling = localTrackStopped(track);\n if (trackSignaling) {\n track._trackSender.removeClone(trackSignaling._trackTransceiver);\n }\n });\n\n log.info(`LocalParticipant disconnected. Stopping ${this._tracksToStop.size} automatically-acquired LocalTracks`);\n this._tracksToStop.forEach(track => {\n track.stop();\n });\n } else if (state === 'connected') {\n // NOTE(mmalavalli): Any transition to \"connected\" here is a result of\n // successful signaling reconnection, and not a first-time establishment\n // of the signaling connection.\n log.info('reconnected');\n\n // NOTE(mpatwardhan): `stateChanged` can get emitted with StateMachine locked.\n // Do not signal public events synchronously with lock held.\n setTimeout(() => this.emit('reconnected'), 0);\n }\n };\n\n this.on('trackDisabled', localTrackDisabled);\n this.on('trackEnabled', localTrackEnabled);\n this.on('trackStopped', localTrackStopped);\n\n this._signaling.on('stateChanged', stateChanged);\n\n this._tracks.forEach(track => {\n this._addLocalTrack(track, trackPriority.PRIORITY_STANDARD);\n this._getOrCreateLocalTrackPublication(track).catch(error => {\n // Just log a warning for now.\n log.warn(`Failed to get or create LocalTrackPublication for ${track}:`, error);\n });\n });\n }\n\n /**\n * @private\n * @param {LocalTrack} localTrack\n * @returns {Promise}\n */\n _getOrCreateLocalTrackPublication(localTrack) {\n let localTrackPublication = getTrackPublication(this.tracks, localTrack);\n if (localTrackPublication) {\n return Promise.resolve(localTrackPublication);\n }\n\n const log = this._log;\n const self = this;\n\n const trackSignaling = this._signaling.getPublication(localTrack._trackSender);\n if (!trackSignaling) {\n return Promise.reject(new Error(`Unexpected error: The ${localTrack} cannot be published`));\n }\n\n return new Promise((resolve, reject) => {\n function updated() {\n const error = trackSignaling.error;\n if (error) {\n trackSignaling.removeListener('updated', updated);\n log.warn(`Failed to publish the ${trackClass(localTrack, true)}: ${error.message}`);\n self._removeTrack(localTrack, localTrack.id);\n setTimeout(() => {\n self.emit('trackPublicationFailed', error, localTrack);\n });\n reject(error);\n return;\n }\n\n if (!self._tracks.has(localTrack.id)) {\n trackSignaling.removeListener('updated', updated);\n reject(new Error(`The ${localTrack} was unpublished`));\n return;\n }\n\n const sid = trackSignaling.sid;\n if (!sid) {\n return;\n }\n\n trackSignaling.removeListener('updated', updated);\n\n const options = {\n log,\n LocalAudioTrackPublication: self._LocalAudioTrackPublication,\n LocalDataTrackPublication: self._LocalDataTrackPublication,\n LocalVideoTrackPublication: self._LocalVideoTrackPublication\n };\n\n localTrackPublication = getTrackPublication(self.tracks, localTrack);\n\n const warningHandler = twilioWarningName =>\n self.emit('trackWarning', twilioWarningName, localTrackPublication);\n\n const warningsClearedHandler = () =>\n self.emit('trackWarningsCleared', localTrackPublication);\n\n const unpublish = publication => {\n localTrackPublication.removeListener('trackWarning', warningHandler);\n localTrackPublication.removeListener('trackWarningsCleared', warningsClearedHandler);\n self.unpublishTrack(publication.track);\n };\n\n if (!localTrackPublication) {\n localTrackPublication = asLocalTrackPublication(localTrack, trackSignaling, unpublish, options);\n self._addTrackPublication(localTrackPublication);\n }\n\n localTrackPublication.on('warning', warningHandler);\n localTrackPublication.on('warningsCleared', warningsClearedHandler);\n\n const { state } = self._signaling;\n if (state === 'connected' || state === 'connecting') {\n if (localTrack._processorEventObserver) {\n localTrack._processorEventObserver.on('event', event => {\n self._eventObserver.emit('event', {\n name: event.name,\n payload: event.data,\n group: 'video-processor',\n level: 'info'\n });\n });\n }\n\n // NOTE(csantos): For tracks created before joining a room or already joined but about to publish it\n if (localTrack.processedTrack) {\n localTrack._captureFrames();\n localTrack._setSenderMediaStreamTrack(true);\n }\n }\n if (state === 'connected') {\n setTimeout(() => {\n self.emit('trackPublished', localTrackPublication);\n });\n }\n resolve(localTrackPublication);\n }\n\n trackSignaling.on('updated', updated);\n });\n }\n\n /**\n * Publishes a {@link LocalTrack} to the {@link Room}.\n * @param {LocalTrack} localTrack - The {@link LocalTrack} to publish\n * @param {LocalTrackPublishOptions} [options] - The {@link LocalTrackPublishOptions}\n * for publishing the {@link LocalTrack}\n * @returns {Promise} - Resolves with the corresponding\n * {@link LocalTrackPublication} if successful; In a Large Group Room (Maximum\n * Participants greater than 50), rejects with a {@link ParticipantMaxTracksExceededError}\n * if either the total number of published Tracks in the Room exceeds 16, or the {@link LocalTrack}\n * is part of a set of {@link LocalTrack}s which along with the published Tracks exceeds 16.\n * @throws {TypeError}\n * @throws {RangeError}\n * @example\n * var Video = require('twilio-video');\n *\n * Video.connect(token, {\n * name: 'my-cool-room',\n * audio: true\n * }).then(function(room) {\n * return Video.createLocalVideoTrack({\n * name: 'camera'\n * }).then(function(localVideoTrack) {\n * return room.localParticipant.publishTrack(localVideoTrack, {\n * priority: 'high'\n * });\n * });\n * }).then(function(publication) {\n * console.log('The LocalTrack \"' + publication.trackName\n * + '\" was successfully published with priority \"'\n * * publication.priority + '\"');\n * });\n *//**\n * Publishes a MediaStreamTrack to the {@link Room}.\n * @param {MediaStreamTrack} mediaStreamTrack - The MediaStreamTrack\n * to publish; if a corresponding {@link LocalAudioTrack} or\n * {@link LocalVideoTrack} has not yet been published, this method will\n * construct one\n * @param {MediaStreamTrackPublishOptions} [options] - The options for publishing\n * the MediaStreamTrack\n * @returns {Promise} - Resolves with the corresponding\n * {@link LocalTrackPublication} if successful; In a Large Group Room (Maximum\n * Participants greater than 50), rejects with a {@link ParticipantMaxTracksExceededError}\n * if the total number of published Tracks in the Room exceeds 16, or the {@link LocalTrack}\n * is part of a set of {@link LocalTrack}s which along with the published Tracks exceeds 16.\n * @throws {TypeError}\n * @throws {RangeError}\n * @example\n * var Video = require('twilio-video');\n *\n * Video.connect(token, {\n * name: 'my-cool-room',\n * audio: true\n * }).then(function(room) {\n * return navigator.mediaDevices.getUserMedia({\n * video: true\n * }).then(function(mediaStream) {\n * var mediaStreamTrack = mediaStream.getTracks()[0];\n * return room.localParticipant.publishTrack(mediaStreamTrack, {\n * name: 'camera',\n * priority: 'high'\n * });\n * });\n * }).then(function(publication) {\n * console.log('The LocalTrack \"' + publication.trackName\n * + '\" was successfully published with priority \"'\n * * publication.priority + '\"');\n * });\n */\n publishTrack(localTrackOrMediaStreamTrack, options) {\n const trackPublication = getTrackPublication(this.tracks, localTrackOrMediaStreamTrack);\n if (trackPublication) {\n return Promise.resolve(trackPublication);\n }\n\n options = Object.assign({\n log: this._log,\n priority: trackPriority.PRIORITY_STANDARD,\n LocalAudioTrack: this._LocalAudioTrack,\n LocalDataTrack: this._LocalDataTrack,\n LocalVideoTrack: this._LocalVideoTrack,\n MediaStreamTrack: this._MediaStreamTrack\n }, options);\n\n let localTrack;\n try {\n localTrack = asLocalTrack(localTrackOrMediaStreamTrack, options);\n } catch (error) {\n return Promise.reject(error);\n }\n\n const noiseCancellation = localTrack.noiseCancellation;\n const allowedAudioProcessors = this._signaling.audioProcessors;\n if (noiseCancellation && !allowedAudioProcessors.includes(noiseCancellation.vendor)) {\n this._log.warn(`${noiseCancellation.vendor} is not supported in this room. disabling it permanently`);\n noiseCancellation.disablePermanently();\n }\n\n const priorityValues = Object.values(trackPriority);\n if (!priorityValues.includes(options.priority)) {\n // eslint-disable-next-line new-cap\n return Promise.reject(E.INVALID_VALUE('LocalTrackPublishOptions.priority', priorityValues));\n }\n\n let addedLocalTrack = this._addTrack(localTrack, localTrack.id, options.priority)\n || this._tracks.get(localTrack.id);\n\n return this._getOrCreateLocalTrackPublication(addedLocalTrack);\n }\n\n /**\n * Publishes multiple {@link LocalTrack}s to the {@link Room}.\n * @param {Array} tracks - The {@link LocalTrack}s\n * to publish; for any MediaStreamTracks provided, if a corresponding\n * {@link LocalAudioTrack} or {@link LocalVideoTrack} has not yet been\n * published, this method will construct one\n * @returns {Promise>} - The resulting\n * {@link LocalTrackPublication}s if successful; In a Large Group Room (Maximum\n * Participants greater than 50), rejects with a {@link ParticipantMaxTracksExceededError}\n * if the total number of published Tracks in the Room exceeds 16, or the {@link LocalTrack}s\n * along with the published Tracks exceeds 16.\n * @throws {TypeError}\n */\n publishTracks(tracks) {\n if (!Array.isArray(tracks)) {\n // eslint-disable-next-line new-cap\n throw E.INVALID_TYPE('tracks',\n 'Array of LocalAudioTrack, LocalVideoTrack, LocalDataTrack, or MediaStreamTrack');\n }\n return Promise.all(tracks.map(this.publishTrack, this));\n }\n\n setBandwidthProfile() {\n this._log.warn('setBandwidthProfile is not implemented yet and may be available in future versions of twilio-video.js');\n }\n\n /**\n * Sets the {@link NetworkQualityVerbosity} for the {@link LocalParticipant} and\n * {@link RemoteParticipant}s. It does nothing if Network Quality is not enabled\n * while calling {@link connect}.\n * @param {NetworkQualityConfiguration} networkQualityConfiguration - The new\n * {@link NetworkQualityConfiguration}; If either or both of the local and\n * remote {@link NetworkQualityVerbosity} values are absent, then the corresponding\n * existing values are retained\n * @returns {this}\n * @example\n * // Update verbosity levels for both LocalParticipant and RemoteParticipants\n * localParticipant.setNetworkQualityConfiguration({\n * local: 1,\n * remote: 2\n * });\n * @example\n * // Update verbosity level for only the LocalParticipant\n * localParticipant.setNetworkQualityConfiguration({\n * local: 1\n * });\n * @example\n * // Update verbosity level for only the RemoteParticipants\n * localParticipant.setNetworkQualityConfiguration({\n * remote: 2\n * });\n */\n setNetworkQualityConfiguration(networkQualityConfiguration) {\n if (typeof networkQualityConfiguration !== 'object'\n || networkQualityConfiguration === null) {\n // eslint-disable-next-line new-cap\n throw E.INVALID_TYPE('networkQualityConfiguration', 'NetworkQualityConfiguration');\n }\n ['local', 'remote'].forEach(prop => {\n if (prop in networkQualityConfiguration && (typeof networkQualityConfiguration[prop] !== 'number' || isNaN(networkQualityConfiguration[prop]))) {\n // eslint-disable-next-line new-cap\n throw E.INVALID_TYPE(`networkQualityConfiguration.${prop}`, 'number');\n }\n });\n this._signaling.setNetworkQualityConfiguration(networkQualityConfiguration);\n return this;\n }\n\n /**\n * Set the {@link LocalParticipant}'s {@link EncodingParameters}.\n * @param {?EncodingParameters} [encodingParameters] - The new\n * {@link EncodingParameters}; If null, then the bitrate limits are removed;\n * If not specified, then the existing bitrate limits are preserved\n * @returns {this}\n * @throws {TypeError}\n */\n setParameters(encodingParameters) {\n if (typeof encodingParameters !== 'undefined'\n && typeof encodingParameters !== 'object') {\n // eslint-disable-next-line new-cap\n throw E.INVALID_TYPE('encodingParameters',\n 'EncodingParameters, null or undefined');\n }\n\n if (encodingParameters) {\n if (this._signaling.getParameters().adaptiveSimulcast && encodingParameters.maxVideoBitrate) {\n // eslint-disable-next-line new-cap\n throw E.INVALID_TYPE('encodingParameters', 'encodingParameters.maxVideoBitrate is not compatible with \"preferredVideoCodecs=auto\"');\n }\n\n ['maxAudioBitrate', 'maxVideoBitrate'].forEach(prop => {\n if (typeof encodingParameters[prop] !== 'undefined'\n && typeof encodingParameters[prop] !== 'number'\n && encodingParameters[prop] !== null) {\n // eslint-disable-next-line new-cap\n throw E.INVALID_TYPE(`encodingParameters.${prop}`, 'number, null or undefined');\n }\n });\n } else if (encodingParameters === null) {\n encodingParameters = { maxAudioBitrate: null, maxVideoBitrate: null };\n }\n\n this._signaling.setParameters(encodingParameters);\n return this;\n }\n\n /**\n * Stops publishing a {@link LocalTrack} to the {@link Room}.\n * @param {LocalTrack|MediaStreamTrack} track - The {@link LocalTrack}\n * to stop publishing; if a MediaStreamTrack is provided, this method\n * looks up the corresponding {@link LocalAudioTrack} or\n * {@link LocalVideoTrack} to stop publishing\n * @returns {?LocalTrackPublication} - The corresponding\n * {@link LocalTrackPublication} if the {@link LocalTrack} was previously\n * published, null otherwise\n * @throws {TypeError}\n */\n unpublishTrack(track) {\n validateLocalTrack(track, {\n LocalAudioTrack: this._LocalAudioTrack,\n LocalDataTrack: this._LocalDataTrack,\n LocalVideoTrack: this._LocalVideoTrack,\n MediaStreamTrack: this._MediaStreamTrack\n });\n\n let localTrack = this._tracks.get(track.id);\n if (!localTrack) {\n return null;\n }\n\n const trackSignaling = this._signaling.getPublication(localTrack._trackSender);\n trackSignaling.publishFailed(new Error(`The ${localTrack} was unpublished`));\n\n localTrack = this._removeTrack(localTrack, localTrack.id);\n if (!localTrack) {\n return null;\n }\n\n const localTrackPublication = getTrackPublication(this.tracks, localTrack);\n if (localTrackPublication) {\n this._removeTrackPublication(localTrackPublication);\n }\n return localTrackPublication;\n }\n\n /**\n * Stops publishing multiple {@link LocalTrack}s to the {@link Room}.\n * @param {Array} tracks - The {@link LocalTrack}s\n * to stop publishing; for any MediaStreamTracks provided, this method looks\n * up the corresponding {@link LocalAudioTrack} or {@link LocalVideoTrack} to\n * stop publishing\n * @returns {Array} - The corresponding\n * {@link LocalTrackPublication}s that were successfully unpublished\n * @throws {TypeError}\n */\n unpublishTracks(tracks) {\n if (!Array.isArray(tracks)) {\n // eslint-disable-next-line new-cap\n throw E.INVALID_TYPE('tracks',\n 'Array of LocalAudioTrack, LocalVideoTrack, LocalDataTrack, or MediaStreamTrack');\n }\n\n return tracks.reduce((unpublishedTracks, track) => {\n const unpublishedTrack = this.unpublishTrack(track);\n return unpublishedTrack ? unpublishedTracks.concat(unpublishedTrack) : unpublishedTracks;\n }, []);\n }\n}\n\n/**\n * The {@link LocalParticipant} has reconnected to the {@link Room} after a signaling connection disruption.\n * @event LocalParticipant#reconnected\n */\n\n/**\n * The {@link LocalParticipant} is reconnecting to the {@link Room} after a signaling connection disruption.\n * @event LocalParticipant#reconnecting\n */\n\n/**\n * One of the {@link LocalParticipant}'s {@link LocalVideoTrack}'s dimensions changed.\n * @param {LocalVideoTrack} track - The {@link LocalVideoTrack} whose dimensions changed\n * @event LocalParticipant#trackDimensionsChanged\n */\n\n/**\n * A {@link LocalTrack} was disabled by the {@link LocalParticipant}.\n * @param {LocalTrack} track - The {@link LocalTrack} that was disabled\n * @event LocalParticipant#trackDisabled\n */\n\n/**\n * A {@link LocalTrack} was enabled by the {@link LocalParticipant}.\n * @param {LocalTrack} track - The {@link LocalTrack} that was enabled\n * @event LocalParticipant#trackEnabled\n */\n\n/**\n * A {@link LocalTrack} failed to publish. Check the error message for more\n * information. In a Large Group Room (Maximum Participants greater than 50),\n * this event is raised with a {@link ParticipantMaxTracksExceededError} either\n * when attempting to publish the {@link LocalTrack} will exceed the Maximum Published\n * Tracks limit of 16, or the {@link LocalTrack} is part of a set of {@link LocalTrack}s\n * which along with the published Tracks exceeds 16.\n * @param {TwilioError} error - A {@link TwilioError} explaining why publication\n * failed\n * @param {LocalTrack} localTrack - The {@link LocalTrack} that failed to\n * publish\n * @event LocalParticipant#trackPublicationFailed\n */\n\n/**\n * A {@link LocalTrack} that was added using {@link LocalParticipant#publishTrack} was successfully published. This event\n * is not raised for {@link LocalTrack}s added in {@link ConnectOptions}.tracks or auto-created within\n * {@link connect}.\n * @param {LocalTrackPublication} publication - The resulting\n * {@link LocalTrackPublication} for the published {@link LocalTrack}\n * @event LocalParticipant#trackPublished\n */\n\n/**\n * One of the {@link LocalParticipant}'s {@link LocalTrack}s started.\n * @param {LocalTrack} track - The {@link LocalTrack} that started\n * @event LocalParticipant#trackStarted\n */\n\n/**\n * One of the {@link LocalParticipant}'s {@link LocalTrack}s stopped, either\n * because {@link LocalTrack#stop} was called or because the underlying\n * MediaStreamTrack ended).\n * @param {LocalTrack} track - The {@link LocalTrack} that stopped\n * @event LocalParticipant#trackStopped\n */\n\n/**\n * One of the {@link LocalParticipant}'s {@link LocalTrackPublication}s encountered a warning.\n * This event is only raised if you enabled warnings using notifyWarnings in ConnectOptions.\n * @param {string} name - The warning that was raised.\n * @param {LocalTrackPublication} publication - The {@link LocalTrackPublication} that encountered the warning.\n * @event LocalParticipant#trackWarning\n */\n\n/**\n * One of the {@link LocalParticipant}'s {@link LocalTrackPublication}s cleared all warnings.\n * This event is only raised if you enabled warnings using notifyWarnings in ConnectOptions.\n * @param {LocalTrackPublication} publication - The {@link LocalTrackPublication} that cleared all warnings.\n * @event LocalParticipant#trackWarningsCleared\n */\n\n/**\n * Outgoing media encoding parameters.\n * @typedef {object} EncodingParameters\n * @property {?number} [maxAudioBitrate] - Max outgoing audio bitrate (bps);\n * If not specified, retains the existing bitrate limit; A null or a\n * 0 value removes any previously set bitrate limit; This value is set\n * as a hint for variable bitrate codecs, but will not take effect for fixed bitrate\n * codecs; Based on our tests, Chrome, Firefox and Safari support a bitrate range of\n * 12000 bps to 256000 bps for Opus codec; This parameter has no effect on iSAC, PCMU\n * and PCMA codecs\n * @property {?number} [maxVideoBitrate] - Max outgoing video bitrate (bps);\n * If not specified, retains the existing bitrate limit; A null or\n * a 0 value removes any previously set bitrate limit; This value is\n * set as a hint for variable bitrate codecs, but will not take effect for fixed\n * bitrate codecs; Based on our tests, Chrome, Firefox and Safari all seem to support\n * an average bitrate range of 20000 bps (20 kbps) to 8000000 bps (8 mbps) for a\n * 720p VideoTrack.\n * Note: this limit is not applied for screen share tracks published on Chrome.\n */\n\n/**\n * Options for publishing a {@link LocalTrack}.\n * @typedef {object} LocalTrackPublishOptions\n * @property {Track.Priority} [priority='standard'] - The priority with which the {@link LocalTrack}\n * is to be published; In Group or Small Group Rooms, the appropriate bandwidth is\n * allocated to the {@link LocalTrack} based on its {@link Track.Priority}; It has no\n * effect in Peer-to-Peer Rooms; It defaults to \"standard\" when not provided\n */\n\n/**\n * Options for publishing a {@link MediaStreamTrack}.\n * @typedef {LocalTrackOptions} MediaStreamTrackPublishOptions\n * @property {Track.Priority} [priority='standard'] - The priority with which the {@link LocalTrack}\n * is to be published; In Group or Small Group Rooms, the appropriate bandwidth is\n * allocated to the {@link LocalTrack} based on its {@link Track.Priority}; It has no\n * effect in Peer-to-Peer Rooms; It defaults to \"standard\" when not provided\n */\n\n/**\n * @private\n * @param {Map} trackPublications\n * @param {LocalTrack|MediaStreamTrack} track\n * @returns {?LocalTrackPublication} trackPublication\n */\nfunction getTrackPublication(trackPublications, track) {\n return Array.from(trackPublications.values()).find(trackPublication => trackPublication.track === track\n || trackPublication.track.mediaStreamTrack === track) || null;\n}\n\nmodule.exports = LocalParticipant;\n","// eslint-disable-next-line no-warning-comments\n// TODO(mroberts): This should be described as implementing some\n// InsightsPublisher interface.\n'use strict';\n\n/**\n * Null Insights publisher.\n */\nclass InsightsPublisher {\n constructor() {\n Object.defineProperties(this, {\n _connected: {\n writable: true,\n value: true\n }\n });\n }\n\n /**\n * Connect\n * @returns {void}\n */\n connect() {\n }\n\n /**\n * Disconnect.\n * @returns {boolean}\n */\n disconnect() {\n if (this._connected) {\n this._connected = false;\n return true;\n }\n return false;\n }\n\n /**\n * Publish.\n * @returns {boolean}\n */\n publish() {\n return this._connected;\n }\n}\n\nmodule.exports = InsightsPublisher;\n","'use strict';\n\nconst { EventEmitter } = require('events');\n\nconst {\n DEFAULT_NQ_LEVEL_LOCAL,\n DEFAULT_NQ_LEVEL_REMOTE,\n MAX_NQ_LEVEL\n} = require('./util/constants');\n\nconst { inRange } = require('./util');\n\n/**\n * {@link NetworkQualityConfigurationImpl} represents an object which notifies its\n * listeners of any changes in the values of its properties.\n * @extends EventEmitter\n * @implements NetworkQualityConfiguration\n * @property {?NetworkQualityVerbosity} local - Verbosity level for {@link LocalParticipant}\n * @property {?NetworkQualityVerbosity} remote - Verbosity level for {@link RemoteParticipant}s\n */\nclass NetworkQualityConfigurationImpl extends EventEmitter {\n /**\n * Construct an {@link NetworkQualityConfigurationImpl}.\n * @param {NetworkQualityConfiguration} networkQualityConfiguration - Initial {@link NetworkQualityConfiguration}\n */\n constructor(networkQualityConfiguration) {\n super();\n\n networkQualityConfiguration = Object.assign({\n local: DEFAULT_NQ_LEVEL_LOCAL,\n remote: DEFAULT_NQ_LEVEL_REMOTE\n }, networkQualityConfiguration);\n\n Object.defineProperties(this, {\n local: {\n value: inRange(networkQualityConfiguration.local, DEFAULT_NQ_LEVEL_LOCAL, MAX_NQ_LEVEL)\n ? networkQualityConfiguration.local\n : DEFAULT_NQ_LEVEL_LOCAL,\n writable: true\n },\n remote: {\n value: inRange(networkQualityConfiguration.remote, DEFAULT_NQ_LEVEL_REMOTE, MAX_NQ_LEVEL)\n ? networkQualityConfiguration.remote\n : DEFAULT_NQ_LEVEL_REMOTE,\n writable: true\n }\n });\n }\n\n /**\n * Update the verbosity levels for network quality information for\n * {@link LocalParticipant} and {@link RemoteParticipant} with those\n * in the given {@link NetworkQualityConfiguration}.\n * @param {NetworkQualityConfiguration} networkQualityConfiguration - The new {@link NetworkQualityConfiguration}\n */\n update(networkQualityConfiguration) {\n networkQualityConfiguration = Object.assign({\n local: this.local,\n remote: this.remote\n }, networkQualityConfiguration);\n\n [\n ['local', DEFAULT_NQ_LEVEL_LOCAL, 3],\n ['remote', DEFAULT_NQ_LEVEL_REMOTE, 3]\n ].forEach(([localOrRemote, min, max]) => {\n this[localOrRemote] = typeof networkQualityConfiguration[localOrRemote] === 'number'\n && inRange(networkQualityConfiguration[localOrRemote], min, max)\n ? networkQualityConfiguration[localOrRemote]\n : min;\n });\n }\n}\n\nmodule.exports = NetworkQualityConfigurationImpl;\n","'use strict';\n\nconst Participant = require('./participant');\n\n/**\n * A {@link RemoteParticipant} represents a remote {@link Participant} in a\n * {@link Room}.\n * @extends Participant\n * @property {Map} audioTracks -\n * The {@link Participant}'s {@link RemoteAudioTrackPublication}s\n * @property {Map} dataTracks -\n * The {@link Participant}'s {@link RemoteDataTrackPublication}s\n * @property {Map} tracks -\n * The {@link Participant}'s {@link RemoteTrackPublication}s\n * @property {Map} videoTracks -\n * The {@link Participant}'s {@link RemoteVideoTrackPublication}s\n * @emits RemoteParticipant#reconnected\n * @emits RemoteParticipant#reconnecting\n * @emits RemoteParticipant#trackDimensionsChanged\n * @emits RemoteParticipant#trackDisabled\n * @emits RemoteParticipant#trackEnabled\n * @emits RemoteParticipant#trackMessage\n * @emits RemoteParticipant#trackPublished\n * @emits RemoteParticipant#trackPublishPriorityChanged\n * @emits RemoteParticipant#trackStarted\n * @emits RemoteParticipant#trackSubscribed\n * @emits RemoteParticipant#trackSubscriptionFailed\n * @emits RemoteParticipant#trackSwitchedOff\n * @emits RemoteParticipant#trackSwitchedOn\n * @emits RemoteParticipant#trackUnpublished\n * @emits RemoteParticipant#trackUnsubscribed\n */\nclass RemoteParticipant extends Participant {\n /**\n * Construct a {@link RemoteParticipant}.\n * @param {ParticipantSignaling} signaling\n * @param {object} [options]\n */\n constructor(signaling, options) {\n super(signaling, options);\n this._handleTrackSignalingEvents();\n this.once('disconnected', this._unsubscribeTracks.bind(this));\n }\n\n toString() {\n return `[RemoteParticipant #${this._instanceId}${this.sid ? `: ${this.sid}` : ''}]`;\n }\n\n /**\n * @private\n * @param {RemoteTrack} remoteTrack\n * @param {RemoteTrackPublication} publication\n * @param {Track.ID} id\n * @returns {?RemoteTrack}\n */\n _addTrack(remoteTrack, publication, id) {\n if (!super._addTrack(remoteTrack, id)) {\n return null;\n }\n publication._subscribed(remoteTrack);\n this.emit('trackSubscribed', remoteTrack, publication);\n return remoteTrack;\n }\n\n /**\n * @private\n * @param {RemoteTrackPublication} publication\n * @returns {?RemoteTrackPublication}\n */\n _addTrackPublication(publication) {\n const addedPublication = super._addTrackPublication(publication);\n if (!addedPublication) {\n return null;\n }\n this.emit('trackPublished', addedPublication);\n return addedPublication;\n }\n /**\n * @private\n */\n _getTrackPublicationEvents() {\n return [\n ...super._getTrackPublicationEvents(),\n ['subscriptionFailed', 'trackSubscriptionFailed'],\n ['trackDisabled', 'trackDisabled'],\n ['trackEnabled', 'trackEnabled'],\n ['publishPriorityChanged', 'trackPublishPriorityChanged'],\n ['trackSwitchedOff', 'trackSwitchedOff'],\n ['trackSwitchedOn', 'trackSwitchedOn']\n ];\n }\n\n /**\n * @private\n */\n _unsubscribeTracks() {\n this.tracks.forEach(publication => {\n if (publication.isSubscribed) {\n const track = publication.track;\n publication._unsubscribe();\n this.emit('trackUnsubscribed', track, publication);\n }\n });\n }\n\n /**\n * @private\n * @param {RemoteTrack} remoteTrack\n * @param {RemoteTrackPublication} publication\n * @param {Track.ID} id\n * @returns {?RemoteTrack}\n */\n _removeTrack(remoteTrack, publication, id) {\n const unsubscribedTrack = this._tracks.get(id);\n if (!unsubscribedTrack) {\n return null;\n }\n\n super._removeTrack(unsubscribedTrack, id);\n publication._unsubscribe();\n this.emit('trackUnsubscribed', unsubscribedTrack, publication);\n return unsubscribedTrack;\n }\n\n /**\n * @private\n * @param {RemoteTrackPublication} publication\n * @returns {?RemoteTrackPublication}\n */\n _removeTrackPublication(publication) {\n this._signaling.clearTrackHint(publication.trackSid);\n const removedPublication = super._removeTrackPublication(publication);\n if (!removedPublication) {\n return null;\n }\n this.emit('trackUnpublished', removedPublication);\n return removedPublication;\n }\n}\n\n/**\n * The {@link RemoteParticipant} has reconnected to the {@link Room} after a signaling connection disruption.\n * @event RemoteParticipant#reconnected\n */\n\n/**\n * The {@link RemoteParticipant} is reconnecting to the {@link Room} after a signaling connection disruption.\n * @event RemoteParticipant#reconnecting\n */\n\n/**\n * One of the {@link RemoteParticipant}'s {@link RemoteVideoTrack}'s dimensions changed.\n * @param {RemoteVideoTrack} track - The {@link RemoteVideoTrack} whose dimensions changed\n * @event RemoteParticipant#trackDimensionsChanged\n */\n\n/**\n * A {@link RemoteTrack} was disabled by the {@link RemoteParticipant}.\n * @param {RemoteTrackPublication} publication - The {@link RemoteTrackPublication} associated with the disabled {@link RemoteTrack}\n * @event RemoteParticipant#trackDisabled\n */\n\n/**\n * A {@link RemoteTrack} was enabled by the {@link RemoteParticipant}.\n * @param {RemoteTrackPublication} publication - The {@link RemoteTrackPublication} associated with the enabled {@link RemoteTrack}\n * @event RemoteParticipant#trackEnabled\n */\n\n/**\n * A message was received over one of the {@link RemoteParticipant}'s\n * {@link RemoteDataTrack}s.\n * @event RemoteParticipant#trackMessage\n * @param {string|ArrayBuffer} data\n * @param {RemoteDataTrack} track - The {@link RemoteDataTrack} over which the\n * message was received\n */\n\n/**\n * A {@link RemoteTrack} was published by the {@link RemoteParticipant} after\n * connecting to the {@link Room}. This event is not emitted for\n * {@link RemoteTrack}s that were published while the {@link RemoteParticipant}\n * was connecting to the {@link Room}.\n * @event RemoteParticipant#trackPublished\n * @param {RemoteTrackPublication} publication - The {@link RemoteTrackPublication}\n * which represents the published {@link RemoteTrack}\n * @example\n * function trackPublished(publication) {\n * console.log(`Track ${publication.trackSid} was published`);\n * }\n *\n * room.on('participantConnected', participant => {\n * // Handle RemoteTracks published while connecting to the Room.\n * participant.trackPublications.forEach(trackPublished);\n *\n * // Handle RemoteTracks published after connecting to the Room.\n * participant.on('trackPublished', trackPublished);\n * });\n */\n\n/**\n * One of the {@link RemoteParticipant}'s {@link RemoteTrack}s started.\n * @param {RemoteTrack} track - The {@link RemoteTrack} that started\n * @event RemoteParticipant#trackStarted\n */\n\n/**\n * A {@link RemoteParticipant}'s {@link RemoteTrack} was subscribed to.\n * @param {RemoteTrack} track - The {@link RemoteTrack} that was subscribed to\n * @param {RemoteTrackPublication} publication - The {@link RemoteTrackPublication}\n * for the {@link RemoteTrack} that was subscribed to\n * @event RemoteParticipant#trackSubscribed\n */\n\n/**\n * A {@link RemoteParticipant}'s {@link RemoteTrack} could not be subscribed to.\n * @param {TwilioError} error - The reason the {@link RemoteTrack} could not be\n * subscribed to\n * @param {RemoteTrackPublication} publication - The\n * {@link RemoteTrackPublication} for the {@link RemoteTrack} that could not\n * be subscribed to\n * @event RemoteParticipant#trackSubscriptionFailed\n */\n\n/**\n * The {@link RemoteTrackPublication}'s publish {@link Track.Priority} was changed by the\n * {@link RemoteParticipant}.\n * @param {Track.Priority} priority - the {@link RemoteTrack}'s new publish\n * {@link Track.Priority};\n * @param {RemoteTrackPublication} publication - The\n * {@link RemoteTrackPublication} for the {@link RemoteTrack} that changed priority\n * @event RemoteParticipant#trackPublishPriorityChanged\n */\n\n/**\n * A {@link RemoteParticipant}'s {@link RemoteTrack} was subscribed to.\n * @param {RemoteTrack} track - The {@link RemoteTrack} that was switched off\n * @param {RemoteTrackPublication} publication - The {@link RemoteTrackPublication}\n * for the {@link RemoteTrack} that was switched off\n * @event RemoteParticipant#trackSwitchedOff\n */\n\n/**\n * A {@link RemoteParticipant}'s {@link RemoteTrack} was switched on.\n * @param {RemoteTrack} track - The {@link RemoteTrack} that was switched on.\n * @param {RemoteTrackPublication} publication - The {@link RemoteTrackPublication}\n * for the {@link RemoteTrack} that was switched on\n * @event RemoteParticipant#trackSwitchedOn\n */\n\n/**\n * A {@link RemoteTrack} was unpublished by the {@link RemoteParticipant}.\n * @event RemoteParticipant#trackUnpublished\n * @param {RemoteTrackPublication} publication - The {@link RemoteTrackPublication}\n * which represents the unpublished {@link RemoteTrack}\n */\n\n/**\n * A {@link RemoteParticipant}'s {@link RemoteTrack} was unsubscribed from.\n * @param {RemoteTrack} track - The {@link RemoteTrack} that was unsubscribed from\n * @param {RemoteTrackPublication} publication - The {@link RemoteTrackPublication}\n * for the {@link RemoteTrack} that was unsubscribed from\n * @event RemoteParticipant#trackUnsubscribed\n */\n\nmodule.exports = RemoteParticipant;\n","'use strict';\n\n/**\n * Statistics for a {@link Track}.\n * @property {Track.ID} trackId - The {@link Track} ID\n * @property {Track.SID} trackSid - The {@link Track}'s SID when published in\n * in a {@link Room}\n * @property {number} timestamp - A Unix timestamp in milliseconds indicating\n * when the {@link TrackStats} were gathered\n * @property {string} ssrc - The {@link Track}'s SSRC when transmitted over the\n * RTCPeerConnection\n * @property {?number} packetsLost - The number of packets lost\n * @property {?string} codec - The name of the codec used to encode the\n * {@link Track}'s media\n */\nclass TrackStats {\n /**\n * @param {string} trackId - {@link Track} ID\n * @param {StandardizedTrackStatsReport} statsReport\n */\n constructor(trackId, statsReport) {\n if (typeof trackId !== 'string') {\n throw new Error('Track id must be a string');\n }\n\n Object.defineProperties(this, {\n trackId: {\n value: trackId,\n enumerable: true\n },\n trackSid: {\n value: statsReport.trackSid,\n enumerable: true\n },\n timestamp: {\n value: statsReport.timestamp,\n enumerable: true\n },\n ssrc: {\n value: statsReport.ssrc,\n enumerable: true\n },\n packetsLost: {\n value: typeof statsReport.packetsLost === 'number'\n ? statsReport.packetsLost\n : null,\n enumerable: true\n },\n codec: {\n value: typeof statsReport.codecName === 'string'\n ? statsReport.codecName\n : null,\n enumerable: true\n }\n });\n }\n}\n\nmodule.exports = TrackStats;\n","'use strict';\n\nconst TrackStats = require('./trackstats');\n\n/**\n * Statistics for a {@link LocalTrack}.\n * @extends TrackStats\n * @property {?number} bytesSent - Number of bytes sent\n * @property {?number} packetsSent - Number of packets sent\n * @property {?number} roundTripTime - Round trip time in milliseconds\n */\nclass LocalTrackStats extends TrackStats {\n /**\n * @param {string} trackId - {@link LocalTrack} ID\n * @param {StandardizedTrackStatsReport} statsReport\n * @param {boolean} prepareForInsights\n */\n constructor(trackId, statsReport, prepareForInsights) {\n super(trackId, statsReport);\n\n Object.defineProperties(this, {\n bytesSent: {\n value: typeof statsReport.bytesSent === 'number'\n ? statsReport.bytesSent\n : prepareForInsights ? 0 : null,\n enumerable: true\n },\n packetsSent: {\n value: typeof statsReport.packetsSent === 'number'\n ? statsReport.packetsSent\n : prepareForInsights ? 0 : null,\n enumerable: true\n },\n roundTripTime: {\n value: typeof statsReport.roundTripTime === 'number'\n ? statsReport.roundTripTime\n : prepareForInsights ? 0 : null,\n enumerable: true\n }\n });\n }\n}\n\nmodule.exports = LocalTrackStats;\n","'use strict';\n\nconst LocalTrackStats = require('./localtrackstats');\n\n/**\n * Statistics for a {@link LocalAudioTrack}.\n * @extends LocalTrackStats\n * @property {?AudioLevel} audioLevel - Input {@link AudioLevel}\n * @property {?number} jitter - Audio jitter in milliseconds\n */\nclass LocalAudioTrackStats extends LocalTrackStats {\n /**\n * @param {string} trackId - {@link LocalAudioTrack} ID\n * @param {StandardizedTrackStatsReport} statsReport\n * @param {boolean} prepareForInsights\n */\n constructor(trackId, statsReport, prepareForInsights) {\n super(trackId, statsReport, prepareForInsights);\n\n Object.defineProperties(this, {\n audioLevel: {\n value: typeof statsReport.audioInputLevel === 'number'\n ? statsReport.audioInputLevel\n : null,\n enumerable: true\n },\n jitter: {\n value: typeof statsReport.jitter === 'number'\n ? statsReport.jitter\n : null,\n enumerable: true\n }\n });\n }\n}\n\n/**\n * The maximum absolute amplitude of a set of audio samples in the\n * range of 0 to 32767 inclusive.\n * @typedef {number} AudioLevel\n */\n\nmodule.exports = LocalAudioTrackStats;\n","'use strict';\n\nconst LocalTrackStats = require('./localtrackstats');\n\n/**\n * Statistics for a {@link LocalVideoTrack}.\n * @extends LocalTrackStats\n * @property {?VideoTrack#Dimensions} captureDimensions - Video capture resolution\n * @property {?VideoTrack#Dimensions} dimensions - Video encoding resolution\n * @property {?number} captureFrameRate - Video capture frame rate\n * @property {?number} frameRate - Video encoding frame rate\n */\nclass LocalVideoTrackStats extends LocalTrackStats {\n /**\n * @param {string} trackId - {@link LocalVideoTrack} ID\n * @param {StandardizedTrackStatsReport} statsReport\n * @param {boolean} prepareForInsights\n */\n constructor(trackId, statsReport, prepareForInsights) {\n super(trackId, statsReport, prepareForInsights);\n\n let captureDimensions = null;\n if (typeof statsReport.frameWidthInput === 'number' &&\n typeof statsReport.frameHeightInput === 'number') {\n captureDimensions = {};\n\n Object.defineProperties(captureDimensions, {\n width: {\n value: statsReport.frameWidthInput,\n enumerable: true\n },\n height: {\n value: statsReport.frameHeightInput,\n enumerable: true\n }\n });\n }\n\n let dimensions = null;\n if (typeof statsReport.frameWidthSent === 'number' &&\n typeof statsReport.frameHeightSent === 'number') {\n dimensions = {};\n\n Object.defineProperties(dimensions, {\n width: {\n value: statsReport.frameWidthSent,\n enumerable: true\n },\n height: {\n value: statsReport.frameHeightSent,\n enumerable: true\n }\n });\n }\n\n Object.defineProperties(this, {\n captureDimensions: {\n value: captureDimensions,\n enumerable: true\n },\n dimensions: {\n value: dimensions,\n enumerable: true\n },\n captureFrameRate: {\n value: typeof statsReport.frameRateInput === 'number'\n ? statsReport.frameRateInput\n : null,\n enumerable: true\n },\n frameRate: {\n value: typeof statsReport.frameRateSent === 'number'\n ? statsReport.frameRateSent\n : null,\n enumerable: true\n }\n });\n }\n}\n\nmodule.exports = LocalVideoTrackStats;\n","'use strict';\n\nconst TrackStats = require('./trackstats');\n\n/**\n * Statistics for a remote {@link Track}.\n * @extends TrackStats\n * @property {?number} bytesReceived - Number of bytes received\n * @property {?number} packetsReceived - Number of packets received\n */\nclass RemoteTrackStats extends TrackStats {\n /*\n * @param {string} trackId - {@link Track} ID\n * @param {StandardizedTrackStatsReport} statsReport\n */\n constructor(trackId, statsReport) {\n super(trackId, statsReport);\n\n Object.defineProperties(this, {\n bytesReceived: {\n value: typeof statsReport.bytesReceived === 'number'\n ? statsReport.bytesReceived\n : null,\n enumerable: true\n },\n packetsReceived: {\n value: typeof statsReport.packetsReceived === 'number'\n ? statsReport.packetsReceived\n : null,\n enumerable: true\n }\n });\n }\n}\n\nmodule.exports = RemoteTrackStats;\n","'use strict';\n\nconst RemoteTrackStats = require('./remotetrackstats');\n\n/**\n * Statistics for an {@link AudioTrack}.\n * @extends RemoteTrackStats\n * @property {?AudioLevel} audioLevel - Output {@link AudioLevel}\n * @property {?number} jitter - Audio jitter in milliseconds\n */\nclass RemoteAudioTrackStats extends RemoteTrackStats {\n /**\n * @param {string} trackId - {@link AudioTrack} ID\n * @param {StandardizedTrackStatsReport} statsReport\n */\n constructor(trackId, statsReport) {\n super(trackId, statsReport);\n\n Object.defineProperties(this, {\n audioLevel: {\n value: typeof statsReport.audioOutputLevel === 'number'\n ? statsReport.audioOutputLevel\n : null,\n enumerable: true\n },\n jitter: {\n value: typeof statsReport.jitter === 'number'\n ? statsReport.jitter\n : null,\n enumerable: true\n }\n });\n }\n}\n\nmodule.exports = RemoteAudioTrackStats;\n","'use strict';\n\nconst RemoteTrackStats = require('./remotetrackstats');\n\n/**\n * Statistics for a {@link VideoTrack}.\n * @extends RemoteTrackStats\n * @property {?VideoTrack#Dimensions} dimensions - Received video resolution\n * @property {?number} frameRate - Received video frame rate\n */\nclass RemoteVideoTrackStats extends RemoteTrackStats {\n /**\n * @param {string} trackId - {@link VideoTrack} ID\n * @param {StandardizedTrackStatsReport} statsReport\n */\n constructor(trackId, statsReport) {\n super(trackId, statsReport);\n\n let dimensions = null;\n if (typeof statsReport.frameWidthReceived === 'number' &&\n typeof statsReport.frameHeightReceived === 'number') {\n dimensions = {};\n\n Object.defineProperties(dimensions, {\n width: {\n value: statsReport.frameWidthReceived,\n enumerable: true\n },\n height: {\n value: statsReport.frameHeightReceived,\n enumerable: true\n }\n });\n }\n\n Object.defineProperties(this, {\n dimensions: {\n value: dimensions,\n enumerable: true\n },\n frameRate: {\n value: typeof statsReport.frameRateReceived === 'number'\n ? statsReport.frameRateReceived\n : null,\n enumerable: true\n }\n });\n }\n}\n\nmodule.exports = RemoteVideoTrackStats;\n","'use strict';\n\nconst LocalAudioTrackStats = require('./localaudiotrackstats');\nconst LocalVideoTrackStats = require('./localvideotrackstats');\nconst RemoteAudioTrackStats = require('./remoteaudiotrackstats');\nconst RemoteVideoTrackStats = require('./remotevideotrackstats');\n\n/**\n * Statistics report for an RTCPeerConnection.\n * @property {string} peerConnectionId - ID of the RTCPeerConnection\n * @property {Array} localAudioTrackStats - List of {@link LocalAudioTrackStats}\n * @property {Array} localVideoTrackStats - List of {@link LocalVideoTrackStats}\n * @property {Array} remoteAudioTrackStats - List of {@link RemoteAudioTrackStats}\n * @property {Array} remoteVideoTrackStats - List of {@link RemoteVideoTrackStats}\n */\nclass StatsReport {\n /**\n * @param {string} peerConnectionId - RTCPeerConnection ID\n * @param {StandardizedStatsResponse} statsResponse\n * @param {boolean} prepareForInsights - if report is being prepared to send to insights.\n */\n constructor(peerConnectionId, statsResponse, prepareForInsights) {\n if (typeof peerConnectionId !== 'string') {\n throw new Error('RTCPeerConnection id must be a string');\n }\n\n Object.defineProperties(this, {\n peerConnectionId: {\n value: peerConnectionId,\n enumerable: true\n },\n localAudioTrackStats: {\n value: statsResponse.localAudioTrackStats.map(report => new LocalAudioTrackStats(report.trackId, report, prepareForInsights)),\n enumerable: true\n },\n localVideoTrackStats: {\n value: statsResponse.localVideoTrackStats.map(report => new LocalVideoTrackStats(report.trackId, report, prepareForInsights)),\n enumerable: true\n },\n remoteAudioTrackStats: {\n value: statsResponse.remoteAudioTrackStats.map(report => new RemoteAudioTrackStats(report.trackId, report)),\n enumerable: true\n },\n remoteVideoTrackStats: {\n value: statsResponse.remoteVideoTrackStats.map(report => new RemoteVideoTrackStats(report.trackId, report)),\n enumerable: true\n }\n });\n }\n}\n\nmodule.exports = StatsReport;\n","'use strict';\n\nconst EventEmitter = require('./eventemitter');\nconst RemoteParticipant = require('./remoteparticipant');\nconst StatsReport = require('./stats/statsreport');\nconst { flatMap, valueToJSON } = require('./util');\n\nlet nInstances = 0;\n\n/**\n * A {@link Room} represents communication between you and one or more\n * {@link RemoteParticipant}s sharing {@link AudioTrack}s and\n * {@link VideoTrack}s.\n *

\n * You can connect to a {@link Room} by calling {@link module:twilio-video.connect}.\n * @extends EventEmitter\n * @property {?RemoteParticipant} dominantSpeaker - The Dominant Speaker in the\n * {@link Room}, if any\n * @property {boolean} isRecording - Whether or not the {@link Room} is being\n * recorded\n * @property {LocalParticipant} localParticipant - Your {@link LocalParticipant}\n * in the {@link Room}\n * @property {string} mediaRegion - String indicating geographical region\n * where media is processed for the {@link Room}.\n * @property {string} name - The {@link Room}'s name\n * @property {Map} participants -\n * The {@link RemoteParticipant}s participating in this {@link Room}\n * @property {Room.SID} sid - The {@link Room}'s SID\n * @property {string} state - \"connected\", \"reconnecting\", or \"disconnected\"\n * @throws {SignalingConnectionDisconnectedError}\n * @emits Room#disconnected\n * @emits Room#participantConnected\n * @emits Room#participantDisconnected\n * @emits Room#participantReconnected\n * @emits Room#participantReconnecting\n * @emits Room#reconnected\n * @emits Room#reconnecting\n * @emits Room#recordingStarted\n * @emits Room#recordingStopped\n * @emits Room#trackDimensionsChanged\n * @emits Room#trackDisabled\n * @emits Room#trackEnabled\n * @emits Room#trackMessage\n * @emits Room#trackPublished\n * @emits Room#trackPublishPriorityChanged\n * @emits Room#trackStarted\n * @emits Room#trackSubscribed\n * @emits Room#trackSwitchedOff\n * @emits Room#trackSwitchedOn\n * @emits Room#trackUnpublished\n * @emits Room#trackUnsubscribed\n * @emits Room#trackWarning\n * @emits Room#trackWarningsCleared\n */\nclass Room extends EventEmitter {\n /**\n * Construct a {@link Room}.\n * @param {RoomSignaling} signaling\n * @param {?object} [options={}]\n */\n constructor(localParticipant, signaling, options) {\n super();\n\n const log = options.log.createLog('default', this);\n const participants = new Map();\n\n /* istanbul ignore next */\n Object.defineProperties(this, {\n _log: {\n value: log\n },\n _clientTrackSwitchOffControl: {\n value: options.clientTrackSwitchOffControl || 'disabled'\n },\n _contentPreferencesMode: {\n value: options.contentPreferencesMode || 'disabled'\n },\n _instanceId: {\n value: ++nInstances\n },\n _options: {\n value: options\n },\n _participants: {\n value: participants\n },\n _signaling: {\n value: signaling\n },\n dominantSpeaker: {\n enumerable: true,\n get() {\n return this.participants.get(signaling.dominantSpeakerSid) || null;\n }\n },\n isRecording: {\n enumerable: true,\n get() {\n return signaling.recording.isEnabled || false;\n }\n },\n localParticipant: {\n enumerable: true,\n value: localParticipant\n },\n name: {\n enumerable: true,\n value: signaling.name\n },\n participants: {\n enumerable: true,\n value: participants\n },\n sid: {\n enumerable: true,\n value: signaling.sid\n },\n state: {\n enumerable: true,\n get() {\n return signaling.state;\n }\n },\n mediaRegion: {\n enumerable: true,\n value: signaling.mediaRegion\n }\n });\n\n handleLocalParticipantEvents(this, localParticipant);\n handleRecordingEvents(this, signaling.recording);\n handleSignalingEvents(this, signaling);\n verifyNoiseCancellation(this);\n\n log.info('Created a new Room:', this.name);\n log.debug('Initial RemoteParticipants:', Array.from(this._participants.values()));\n }\n\n toString() {\n return `[Room #${this._instanceId}: ${this.sid}]`;\n }\n\n\n /**\n * Disconnect from the {@link Room}.\n * @returns {this}\n */\n disconnect() {\n this._log.info('Disconnecting');\n this._signaling.disconnect();\n return this;\n }\n\n /**\n * Get the {@link Room}'s media statistics. This is not supported in Safari 12.0 or below\n * due to this bug : https://bugs.webkit.org/show_bug.cgi?id=192601\n *\n * @returns {Promise.>}\n */\n getStats() {\n return this._signaling.getStats().then(responses =>\n Array.from(responses).map(([id, response]) =>\n new StatsReport(id, Object.assign({}, response, {\n localAudioTrackStats: rewriteLocalTrackIds(this, response.localAudioTrackStats),\n localVideoTrackStats: rewriteLocalTrackIds(this, response.localVideoTrackStats)\n }))\n )\n );\n }\n\n /**\n * Restart the muted local media {@link Track}s and play inadvertently paused HTMLMediaElements\n * that are attached to local and remote media {@link Track}s. This method is useful mainly on\n * mobile browsers (Safari and Chrome on iOS), where there is a possibility that the muted local\n * media {@link Track}s are never unmuted and inadvertently paused HTMLMediaElements are never\n * played again, especially after handling an incoming phone call.\n * @returns {this}\n */\n refreshInactiveMedia() {\n const { tracks: localTrackPublications } = this.localParticipant;\n\n const localMediaTracks = Array.from(localTrackPublications.values())\n .filter(({ track: { kind } }) => kind !== 'data')\n .map(({ track }) => track);\n\n const remoteMediaTracks = flatMap(this.participants, participants => Array.from(participants.tracks.values()))\n .filter(({ track }) => track && track.kind !== 'data')\n .map(({ track }) => track);\n\n const mediaTracks = localMediaTracks.concat(remoteMediaTracks);\n\n const unmuteEvent = new Event('unmute');\n localMediaTracks.forEach(({ isMuted, mediaStreamTrack }) => {\n if (isMuted) {\n mediaStreamTrack.dispatchEvent(unmuteEvent);\n }\n });\n\n const pauseEvent = new Event('pause');\n mediaTracks.forEach(({ _attachments: attachments, _elShims: elShims }) => attachments.forEach(el => {\n const shim = elShims.get(el);\n const isInadvertentlyPaused = el.paused && shim && !shim.pausedIntentionally();\n if (isInadvertentlyPaused) {\n el.dispatchEvent(pauseEvent);\n }\n }));\n\n return this;\n }\n\n toJSON() {\n return valueToJSON(this);\n }\n}\n\nfunction verifyNoiseCancellation(room) {\n const allowedAudioProcessors = room.localParticipant._signaling.audioProcessors;\n room.localParticipant.audioTracks.forEach(({ track }) => {\n const noiseCancellation = track.noiseCancellation;\n if (noiseCancellation && !allowedAudioProcessors.includes(noiseCancellation.vendor)) {\n room._log.warn(`${noiseCancellation.vendor} is not supported in this room. disabling it permanently`);\n noiseCancellation.disablePermanently();\n }\n });\n}\n\nfunction rewriteLocalTrackIds(room, trackStats) {\n const localParticipantSignaling = room.localParticipant._signaling;\n return trackStats.reduce((trackStats, trackStat) => {\n const publication = localParticipantSignaling.tracks.get(trackStat.trackId);\n const trackSender = localParticipantSignaling.getSender(publication);\n return trackSender\n ? [Object.assign({}, trackStat, { trackId: trackSender.id })].concat(trackStats)\n : trackStats;\n }, []);\n}\n\n/**\n * A {@link Room.SID} is a 34-character string starting with \"RM\"\n * that uniquely identifies a {@link Room}.\n * @type string\n * @typedef Room.SID\n */\n\n/**\n * The Dominant Speaker in the {@link Room} changed. Either the Dominant Speaker\n * is a new {@link RemoteParticipant} or the Dominant Speaker has been reset and\n * is now null.\n * @param {?RemoteParticipant} dominantSpeaker - The Dominant Speaker in the\n * {@link Room}, if any\n * @event Room#dominantSpeakerChanged\n */\n\n/**\n * Your {@link LocalParticipant} was disconnected from the {@link Room} and all\n * other {@link RemoteParticipant}s.\n * @param {Room} room - The {@link Room} your\n * {@link LocalParticipant} was disconnected from\n * @param {?TwilioError} error - Present when the {@link LocalParticipant} got\n * disconnected from the {@link Room} unexpectedly\n * @event Room#disconnected\n * @example\n * myRoom.on('disconnected', function(room, error) {\n * if (error) {\n * console.log('Unexpectedly disconnected:', error);\n * }\n * myRoom.localParticipant.tracks.forEach(function(track) {\n * track.stop();\n * track.detach();\n * });\n * });\n */\n\n/**\n * A {@link RemoteParticipant} joined the {@link Room}. In Large Group Rooms (Maximum\n * Participants greater than 50), this event is raised only when a {@link RemoteParticipant}\n * publishes at least one {@link LocalTrack}.\n * @param {RemoteParticipant} participant - The {@link RemoteParticipant} who joined\n * @event Room#participantConnected\n * @example\n * myRoom.on('participantConnected', function(participant) {\n * console.log(participant.identity + ' joined the Room');\n * });\n */\n\n/**\n * A {@link RemoteParticipant} left the {@link Room}. In Large Group Rooms (Maximum\n * Participants greater than 50), this event is raised only when a {@link RemoteParticipant}\n * unpublishes all its {@link LocalTrack}s.\n * @param {RemoteParticipant} participant - The {@link RemoteParticipant} who left\n * @event Room#participantDisconnected\n * @example\n * myRoom.on('participantDisconnected', function(participant) {\n * console.log(participant.identity + ' left the Room');\n * participant.tracks.forEach(function(track) {\n * track.detach().forEach(function(mediaElement) {\n * mediaElement.remove();\n * });\n * });\n * });\n */\n\n/**\n * A {@link RemoteParticipant} has reconnected to the {@link Room} after a signaling connection disruption.\n * @param {RemoteParticipant} participant - The {@link RemoteParticipant} that has reconnected.\n * @event Room#participantReconnected\n * @example\n * myRoom.on('participantReconnected', participant => {\n * console.log(participant.identity + ' reconnected to the Room');\n * });\n */\n\n/**\n * A {@link RemoteParticipant} is reconnecting to the {@link Room} after a signaling connection disruption.\n * @param {RemoteParticipant} participant - The {@link RemoteParticipant} that is reconnecting.\n * @event Room#participantReconnecting\n * @example\n * myRoom.on('participantReconnecting', participant => {\n * console.log(participant.identity + ' is reconnecting to the Room');\n * });\n */\n\n/**\n * Your application successfully reconnected to the {@link Room}. When this\n * event is emitted, the {@link Room} is in state \"connected\".\n * @event Room#reconnected\n * @example\n * myRoom.on('reconnected', () => {\n * console.log('Reconnected!');\n * });\n */\n\n/**\n * Your application is reconnecting to the {@link Room}. This happens when there\n * is a disruption in your signaling connection and/or your media connection. When\n * this event is emitted, the {@link Room} is in state \"reconnecting\". If reconnecting\n * succeeds, the {@link Room} will emit a \"reconnected\" event.\n * @param {MediaConnectionError|SignalingConnectionDisconnectedError} error - A\n * {@link MediaConnectionError} if your application is reconnecting due to a\n * disruption in your media connection, or a {@link SignalingConnectionDisconnectedError}\n * if your application is reconnecting due to a disruption in your signaling connection\n * @event Room#reconnecting\n * @example\n * myRoom.on('reconnecting', error => {\n * if (error.code === 53001) {\n * console.log('Reconnecting your signaling connection!', error.message);\n * } else if (error.code === 53405) {\n * console.log('Reconnecting your media connection!', error.message);\n * }\n * });\n */\n\n/**\n * The {@link Room} is now being recorded\n * @event Room#recordingStarted\n */\n\n/**\n * The {@link Room} is no longer being recorded\n * @event Room#recordingStopped\n */\n\n/**\n * One of the {@link RemoteParticipant}'s {@link VideoTrack}'s dimensions changed.\n * @param {RemoteVideoTrack} track - The {@link RemoteVideoTrack} whose dimensions changed\n * @param {RemoteParticipant} participant - The {@link RemoteParticipant} whose\n * {@link RemoteVideoTrack}'s dimensions changed\n * @event Room#trackDimensionsChanged\n */\n\n/**\n * A {@link RemoteTrack} was disabled by a {@link RemoteParticipant} in the {@link Room}.\n * @param {RemoteTrackPublication} publication - The {@link RemoteTrackPublication} that represents disabled {@link RemoteTrack}\n * @param {RemoteParticipant} participant - The {@link RemoteParticipant} who\n * disabled the {@link RemoteTrack}\n * @event Room#trackDisabled\n */\n\n/**\n * A {@link RemoteTrack} was enabled by a {@link RemoteParticipant} in the {@link Room}.\n * @param {RemoteTrackPublication} publication - The {@link RemoteTrackPublication} that represents enabled {@link RemoteTrack}\n * @param {RemoteParticipant} participant - The {@link RemoteParticipant} who\n * enabled the {@link RemoteTrack}\n * @event Room#trackEnabled\n */\n\n/**\n * A message was received over one of the {@link RemoteParticipant}'s\n * {@link RemoteDataTrack}'s.\n * @param {string|ArrayBuffer} data\n * @param {RemoteDataTrack} track - The {@link RemoteDataTrack} over which the\n * message was received\n * @param {RemoteParticipant} participant - The {@link RemoteParticipant} whose\n * {@link RemoteDataTrack} received the message\n * @event Room#trackMessage\n */\n\n/**\n * A {@link RemoteTrack} was published by a {@link RemoteParticipant} after\n * connecting to the {@link Room}. This event is not emitted for\n * {@link RemoteTrack}s that were published while the {@link RemoteParticipant}\n * was connecting to the {@link Room}.\n * @event Room#trackPublished\n * @param {RemoteTrackPublication} publication - The {@link RemoteTrackPublication}\n * which represents the published {@link RemoteTrack}\n * @param {RemoteParticipant} participant - The {@link RemoteParticipant} who\n * published the {@link RemoteTrack}\n * @example\n * function trackPublished(publication, participant) {\n * console.log(`RemoteParticipant ${participant.sid} published Track ${publication.trackSid}`);\n * }\n *\n * // Handle RemoteTracks published after connecting to the Room.\n * room.on('trackPublished', trackPublished);\n *\n * room.on('participantConnected', participant => {\n * // Handle RemoteTracks published while connecting to the Room.\n * participant.trackPublications.forEach(publication => trackPublished(publication, participant));\n * });\n */\n\n/**\n * One of a {@link RemoteParticipant}'s {@link RemoteTrack}s in the {@link Room} started.\n * @param {RemoteTrack} track - The {@link RemoteTrack} that started\n * @param {RemoteParticipant} participant - The {@link RemoteParticipant} whose\n * {@link RemoteTrack} started\n * @event Room#trackStarted\n */\n\n/**\n * A {@link RemoteParticipant}'s {@link RemoteTrack} was subscribed to.\n * @param {RemoteTrack} track - The {@link RemoteTrack} that was subscribed\n * @param {RemoteTrackPublication} publication - The {@link RemoteTrackPublication}\n * for the {@link RemoteTrack} that was subscribed to\n * @param {RemoteParticipant} participant - The {@link RemoteParticipant} whose\n * {@link RemoteTrack} was subscribed\n * @event Room#trackSubscribed\n * @example\n * room.on('trackSubscribed', function(track, publication, participant) {\n * var participantView = document.getElementById('participant-view-' + participant.identity);\n * participantView.appendChild(track.attach());\n * });\n */\n\n/**\n * A {@link RemoteParticipant}'s {@link RemoteTrack} was switched off.\n * @param {RemoteTrack} track - The {@link RemoteTrack} that was switched off\n * @param {RemoteTrackPublication} publication - The {@link RemoteTrackPublication}\n * for the {@link RemoteTrack} that was subscribed to\n * @param {RemoteParticipant} participant - The {@link RemoteParticipant} whose\n * {@link RemoteTrack} was switched off\n * @event Room#trackSwitchedOff\n */\n\n/**\n * A {@link RemoteParticipant}'s {@link RemoteTrack} was switched on.\n * @param {RemoteTrack} track - The {@link RemoteTrack} that was switched on\n * @param {RemoteTrackPublication} publication - The {@link RemoteTrackPublication}\n * for the {@link RemoteTrack} that was subscribed to\n * @param {RemoteParticipant} participant - The {@link RemoteParticipant} whose\n * {@link RemoteTrack} was switched on\n * @event Room#trackSwitchedOn\n */\n\n/**\n * A {@link RemoteParticipant}'s {@link RemoteTrack} could not be subscribed to.\n * @param {TwilioError} error - The reason the {@link RemoteTrack} could not be\n * subscribed to\n * @param {RemoteTrackPublication} publication - The\n * {@link RemoteTrackPublication} for the {@link RemoteTrack} that could not\n * be subscribed to\n * @param {RemoteParticipant} participant - The {@link RemoteParticipant} whose\n * {@link RemoteTrack} could not be subscribed to\n * @event Room#trackSubscriptionFailed\n */\n\n/**\n * The {@link RemoteTrack}'s publish {@link Track.Priority} was changed by the\n * {@link RemoteParticipant}.\n * @param {Track.Priority} priority - the {@link RemoteTrack}'s new publish\n * {@link Track.Priority};\n * @param {RemoteTrackPublication} publication - The\n * {@link RemoteTrackPublication} for the {@link RemoteTrack} that changed priority\n * @param {RemoteParticipant} participant - The {@link RemoteParticipant} whose\n * {@link RemoteTrack} changed priority\n * @event Room#trackPublishPriorityChanged\n */\n\n/**\n * A {@link RemoteTrack} was unpublished by a {@link RemoteParticipant} to the {@link Room}.\n * @event Room#trackUnpublished\n * @param {RemoteTrackPublication} publication - The {@link RemoteTrackPublication}\n * which represents the unpublished {@link RemoteTrack}\n * @param {RemoteParticipant} participant - The {@link RemoteParticipant} who\n * unpublished the {@link RemoteTrack}\n */\n\n/**\n * A {@link RemoteParticipant}'s {@link RemoteTrack} was unsubscribed from.\n * @param {RemoteTrack} track - The {@link RemoteTrack} that was unsubscribed\n * @param {RemoteTrackPublication} publication - The {@link RemoteTrackPublication}\n * for the {@link RemoteTrack} that was unsubscribed from\n * @param {RemoteParticipant} participant - The {@link RemoteParticipant} whose\n * {@link RemoteTrack} was unsubscribed\n * @event Room#trackUnsubscribed\n * @example\n * room.on('trackUnsubscribed', function(track, publication, participant) {\n * track.detach().forEach(function(mediaElement) {\n * mediaElement.remove();\n * });\n * });\n */\n\n/**\n * One of the {@link LocalParticipant}'s {@link LocalTrackPublication}s in the {@link Room} encountered a warning.\n * This event is only raised if you enabled warnings using notifyWarnings in ConnectOptions.\n * @param {string} name - The warning that was raised.\n * @param {LocalTrackPublication} publication - The {@link LocalTrackPublication} that encountered the warning.\n * @param {LocalParticipant} participant - The {@link LocalParticipant}\n * @event Room#trackWarning\n * @example\n * room.on('trackWarning', (name, publication, participant) => {\n * if (name === 'recording-media-lost') {\n * log(`LocalTrack ${publication.track.name} is not recording media.`,\n * name, publication, participant);\n *\n * // Wait a reasonable amount of time to clear the warning.\n * const timer = setTimeout(() => {\n * // If the warning is not cleared, you can manually\n * // reconnect to the room, or show a dialog to the user\n * }, 5000);\n *\n * room.once('trackWarningsCleared', (publication, participant) => {\n * log('LocalTrack warnings have cleared!',\n * publication, participant);\n * clearTimeout(timer);\n * });\n * }\n});\n */\n\n/**\n * One of the {@link LocalParticipant}'s {@link LocalTrackPublication}s in the {@link Room} cleared all warnings.\n * This event is only raised if you enabled warnings using notifyWarnings in ConnectOptions.\n * @param {LocalTrackPublication} publication - The {@link LocalTrackPublication} that cleared all warnings.\n * @param {LocalParticipant} participant - The {@link LocalParticipant}\n * @event Room#trackWarningsCleared\n */\n\nfunction connectParticipant(room, participantSignaling) {\n const { _log: log, _clientTrackSwitchOffControl: clientTrackSwitchOffControl, _contentPreferencesMode: contentPreferencesMode } = room;\n const participant = new RemoteParticipant(participantSignaling, { log, clientTrackSwitchOffControl, contentPreferencesMode });\n\n log.info('A new RemoteParticipant connected:', participant);\n room._participants.set(participant.sid, participant);\n room.emit('participantConnected', participant);\n\n // Reemit Track and RemoteParticipant events.\n const eventListeners = [\n ['reconnected', 'participantReconnected'],\n ['reconnecting', 'participantReconnecting'],\n 'trackDimensionsChanged',\n 'trackDisabled',\n 'trackEnabled',\n 'trackMessage',\n 'trackPublished',\n 'trackPublishPriorityChanged',\n 'trackStarted',\n 'trackSubscribed',\n 'trackSubscriptionFailed',\n 'trackSwitchedOff',\n 'trackSwitchedOn',\n 'trackUnpublished',\n 'trackUnsubscribed'\n ].map(eventOrPair => {\n const [event, participantEvent] = Array.isArray(eventOrPair)\n ? eventOrPair\n : [eventOrPair, eventOrPair];\n\n function reemit() {\n const args = [].slice.call(arguments);\n args.unshift(participantEvent);\n args.push(participant);\n room.emit(...args);\n }\n participant.on(event, reemit);\n return [event, reemit];\n });\n\n participant.once('disconnected', function participantDisconnected() {\n const dominantSpeaker = room.dominantSpeaker;\n log.info('RemoteParticipant disconnected:', participant);\n room._participants.delete(participant.sid);\n eventListeners.forEach(args => {\n participant.removeListener(args[0], args[1]);\n });\n room.emit('participantDisconnected', participant);\n if (participant === dominantSpeaker) {\n room.emit('dominantSpeakerChanged', room.dominantSpeaker);\n }\n });\n}\n\nfunction handleLocalParticipantEvents(room, localParticipant) {\n const events = ['trackWarning', 'trackWarningsCleared'].map(event => ({\n eventName: event,\n handler: (...args) => room.emit(event, ...[...args, localParticipant]),\n }));\n\n events.forEach(({ eventName, handler }) =>\n localParticipant.on(eventName, handler));\n\n room.once('disconnected', () =>\n events.forEach(({ eventName, handler }) =>\n localParticipant.removeListener(eventName, handler)));\n}\n\nfunction handleRecordingEvents(room, recording) {\n recording.on('updated', function updated() {\n const started = recording.isEnabled;\n room._log.info(`Recording ${started ? 'started' : 'stopped'}`);\n room.emit(`recording${started ? 'Started' : 'Stopped'}`);\n });\n}\n\nfunction handleSignalingEvents(room, signaling) {\n const log = room._log;\n\n // Reemit RemoteParticipant events from the RoomSignaling.\n log.debug('Creating a new RemoteParticipant for each ParticipantSignaling '\n + 'in the RoomSignaling');\n signaling.participants.forEach(connectParticipant.bind(null, room));\n log.debug('Setting up RemoteParticipant creation for all subsequent '\n + 'ParticipantSignalings that connect to the RoomSignaling');\n signaling.on('participantConnected', connectParticipant.bind(null, room));\n\n signaling.on('dominantSpeakerChanged', () => room.emit('dominantSpeakerChanged', room.dominantSpeaker));\n\n // Reemit state transition events from the RoomSignaling.\n signaling.on('stateChanged', function stateChanged(state, error) {\n log.info('Transitioned to state:', state);\n switch (state) {\n case 'disconnected':\n room.participants.forEach(participant => {\n participant._unsubscribeTracks();\n });\n room.emit(state, room, error);\n room.localParticipant.tracks.forEach(publication => {\n publication.unpublish();\n });\n signaling.removeListener('stateChanged', stateChanged);\n break;\n case 'reconnecting':\n\n // NOTE(mpatwardhan): `stateChanged` can get emitted with StateMachine locked.\n // Do not signal public events synchronously with lock held.\n setTimeout(() => room.emit('reconnecting', error), 0);\n\n break;\n default:\n\n // NOTE(mpatwardhan): `stateChanged` can get emitted with StateMachine locked.\n // Do not signal public events synchronously with lock held.\n setTimeout(() => room.emit('reconnected'), 0);\n }\n });\n}\n\nmodule.exports = Room;\n","\n/**\n * Expose `Backoff`.\n */\n\nclass Backoff {\n /**\n * Construct a {@link Backoff}.\n * @param {object} options\n * @property {number} min - Initial timeout in milliseconds [100]\n * @property {number} max - Max timeout [10000]\n * @property {boolean} jitter - Apply jitter [0]\n * @property {number} factor - Multiplication factor for Backoff operation [2]\n */\n constructor(options) {\n Object.defineProperties(this, {\n _min: {\n value: options.min || 100\n },\n _max: {\n value: options.max || 10000\n },\n _jitter: {\n value: options.jitter > 0 && options.jitter <= 1 ? options.jitter : 0\n },\n _factor: {\n value: options.factor || 2\n },\n _attempts: {\n value: 0,\n writable: true\n },\n _duration: {\n enumerable: false,\n get() {\n let ms = this._min * Math.pow(this._factor, this._attempts);\n if (this._jitter) {\n const rand = Math.random();\n const deviation = Math.floor(rand * this._jitter * ms);\n ms = (Math.floor(rand * 10) & 1) === 0 ? ms - deviation : ms + deviation;\n }\n return Math.min(ms, this._max) | 0;\n }\n },\n _timeoutID: {\n value: null,\n writable: true\n }\n });\n }\n\n /**\n * Start the backoff operation.\n * @param {function} fn - Function to call\n * @return {void}\n * @api public\n */\n backoff(fn) {\n let duration = this._duration;\n if (this._timeoutID) {\n clearTimeout(this._timeoutID);\n this._timeoutID = null;\n }\n this._timeoutID = setTimeout(() => {\n this._attempts++;\n fn();\n }, duration);\n }\n\n /**\n * Reset the number of attempts and clear the timer.\n *\n * @return {void}\n * @api public\n */\n reset() {\n this._attempts = 0;\n if (this._timeoutID) {\n clearTimeout(this._timeoutID);\n this._timeoutID = null;\n }\n }\n}\n\nmodule.exports = Backoff;\n","'use strict';\n\nconst { difference, flatMap } = require('../');\n\n/**\n * Create a random {@link SSRC}.\n * @returns {SSRC}\n */\nfunction createSSRC() {\n const ssrcMax = 0xffffffff;\n return String(Math.floor(Math.random() * ssrcMax));\n}\n\n/**\n * @property {string} cName\n * @property {boolean} isSimulcastEnabled\n * @property {Map} rtxPairs\n * @property {Set} primarySSRCs\n * @property {string} streamId\n * @property {Track.ID} trackId\n */\nclass TrackAttributes {\n /**\n * Construct a {@link MediaStreamTrack} attribute store.\n * @param {Track.ID} trackId - The MediaStreamTrack ID\n * @param {MediaStreamID} streamId - The MediaStream ID\n * @param {string} cName - The MediaStream cname\n */\n constructor(trackId, streamId, cName) {\n Object.defineProperties(this, {\n cName: {\n enumerable: true,\n value: cName\n },\n isSimulcastEnabled: {\n enumerable: true,\n value: false,\n writable: true\n },\n primarySSRCs: {\n enumerable: true,\n value: new Set()\n },\n rtxPairs: {\n enumerable: true,\n value: new Map()\n },\n streamId: {\n enumerable: true,\n value: streamId\n },\n trackId: {\n enumerable: true,\n value: trackId\n }\n });\n }\n\n /**\n * Add {@link SimSSRC}s to the {@link TrackAttributes}.\n * @returns {void}\n */\n addSimulcastSSRCs() {\n if (this.isSimulcastEnabled) {\n return;\n }\n const simulcastSSRCs = [createSSRC(), createSSRC()];\n simulcastSSRCs.forEach(function(ssrc) {\n this.primarySSRCs.add(ssrc);\n }, this);\n\n if (this.rtxPairs.size) {\n simulcastSSRCs.forEach(function(ssrc) {\n this.rtxPairs.set(createSSRC(), ssrc);\n }, this);\n }\n }\n\n /**\n * Add the given {@link PrimarySSRC} or {@link RtxSSRC} to the {@link TrackAttributes}\n * and update the \"isSimulcastEnabled\" flag if it is also a {@link SimSSRC}.\n * @param {SSRC} ssrc - The {@link SSRC} to be added\n * @param {?PrimarySSRC} primarySSRC - The {@link PrimarySSRC}; if the given\n * {@link SSRC} itself is the {@link PrimarySSRC}, then this is set to null\n * @param {boolean} isSimSSRC - true if the given {@link SSRC} is a\n * {@link SimSSRC}; false otherwise\n * @returns {void}\n */\n addSSRC(ssrc, primarySSRC, isSimSSRC) {\n if (primarySSRC) {\n this.rtxPairs.set(ssrc, primarySSRC);\n } else {\n this.primarySSRCs.add(ssrc);\n }\n this.isSimulcastEnabled = this.isSimulcastEnabled || isSimSSRC;\n }\n\n /**\n * Construct the SDP lines for the {@link TrackAttributes}.\n * @param {boolean} [excludeRtx=false]\n * @returns {Array} Array of SDP lines\n */\n toSdpLines(excludeRtx) {\n const rtxPairs = excludeRtx\n ? []\n : Array.from(this.rtxPairs.entries()).map(rtxPair => rtxPair.reverse());\n\n const simSSRCs = Array.from(this.primarySSRCs.values());\n const ssrcs = rtxPairs.length ? flatMap(rtxPairs) : simSSRCs;\n\n const attrLines = flatMap(ssrcs, ssrc => [\n `a=ssrc:${ssrc} cname:${this.cName}`,\n `a=ssrc:${ssrc} msid:${this.streamId} ${this.trackId}`\n ]);\n const rtxPairLines = rtxPairs.map(rtxPair => `a=ssrc-group:FID ${rtxPair.join(' ')}`);\n const simGroupLines = [\n `a=ssrc-group:SIM ${simSSRCs.join(' ')}`\n ];\n\n return rtxPairLines.concat(attrLines).concat(simGroupLines);\n }\n}\n\n/**\n * Get the matches for a given RegEx pattern.\n * @param {string} section - SDP media section\n * @param {string} pattern - RegEx pattern\n * @returns {Array>} - Array of pattern matches\n */\nfunction getMatches(section, pattern) {\n const matches = section.match(new RegExp(pattern, 'gm')) || [];\n return matches.map(match => {\n const matches = match.match(new RegExp(pattern)) || [];\n return matches.slice(1);\n });\n}\n\n/**\n * Get the {@link SimSSRC}s that belong to a simulcast group.\n * @param {string} section - SDP media section\n * @returns {Set} Set of simulcast {@link SSRC}s\n */\nfunction getSimulcastSSRCs(section) {\n const simGroupPattern = '^a=ssrc-group:SIM ([0-9]+) ([0-9]+) ([0-9]+)$';\n return new Set(flatMap(getMatches(section, simGroupPattern)));\n}\n\n/**\n * Get the value of the given attribute for an SSRC.\n * @param {string} section - SDP media section\n * @param {SSRC} ssrc - {@link SSRC} whose attribute's value is to be determinded\n * @param {string} attribute - {@link SSRC} attribute name\n * @param {string} - {@link SSRC} attribute value\n */\nfunction getSSRCAttribute(section, ssrc, attribute) {\n const pattern = `a=ssrc:${ssrc} ${attribute}:(.+)`;\n return section.match(new RegExp(pattern))[1];\n}\n\n/**\n * Create a Map of {@link PrimarySSRC}s and their {@link RtxSSRC}s.\n * @param {string} section - SDP media section\n * @returns {Map} - Map of {@link RtxSSRC}s and their\n * corresponding {@link PrimarySSRC}s\n */\nfunction getSSRCRtxPairs(section) {\n const rtxPairPattern = '^a=ssrc-group:FID ([0-9]+) ([0-9]+)$';\n return new Map(getMatches(section, rtxPairPattern).map(pair => pair.reverse()));\n}\n\n/**\n * Create SSRC attribute tuples.\n * @param {string} section\n * @returns {Array<[SSRC, MediaStreamID, Track.ID]>}\n */\nfunction createSSRCAttributeTuples(section) {\n const [streamId, trackId] = flatMap(getMatches(section, '^a=msid:(.+) (.+)$'));\n const ssrcs = flatMap(getMatches(section, '^a=ssrc:(.+) cname:.+$'));\n return ssrcs.map(ssrc => [ssrc, streamId, trackId]);\n}\n\n/**\n * Create a Map of MediaStreamTrack IDs and their {@link TrackAttributes}.\n * @param {string} section - SDP media section\n * @returns {Map}\n */\nfunction createTrackIdsToAttributes(section) {\n const simSSRCs = getSimulcastSSRCs(section);\n const rtxPairs = getSSRCRtxPairs(section);\n const ssrcAttrTuples = createSSRCAttributeTuples(section);\n\n return ssrcAttrTuples.reduce((trackIdsToSSRCs, tuple) => {\n const ssrc = tuple[0];\n const streamId = tuple[1];\n const trackId = tuple[2];\n\n const trackAttributes = trackIdsToSSRCs.get(trackId) || new TrackAttributes(\n trackId,\n streamId,\n getSSRCAttribute(section, ssrc, 'cname'));\n\n const primarySSRC = rtxPairs.get(ssrc) || null;\n trackAttributes.addSSRC(ssrc, primarySSRC, simSSRCs.has(ssrc));\n return trackIdsToSSRCs.set(trackId, trackAttributes);\n }, new Map());\n}\n\n/**\n * Apply simulcast settings to the given SDP media section.\n * @param {string} section - SDP media section\n * @param {Map} trackIdsToAttributes - Existing\n * map which will be updated for new MediaStreamTrack IDs\n * @returns {string} - The transformed SDP media section\n */\nfunction setSimulcastInMediaSection(section, trackIdsToAttributes) {\n const newTrackIdsToAttributes = createTrackIdsToAttributes(section);\n const newTrackIds = Array.from(newTrackIdsToAttributes.keys());\n let trackIds = Array.from(trackIdsToAttributes.keys());\n const trackIdsToAdd = difference(newTrackIds, trackIds);\n const trackIdsToIgnore = difference(trackIds, newTrackIds);\n\n // Update \"trackIdsToAttributes\" with TrackAttributes for new\n // MediaStreamTrack IDs.\n const trackAttributesToAdd = flatMap(trackIdsToAdd, trackId => newTrackIdsToAttributes.get(trackId));\n trackAttributesToAdd.forEach(trackAttributes => {\n trackAttributes.addSimulcastSSRCs();\n trackIdsToAttributes.set(trackAttributes.trackId, trackAttributes);\n });\n\n // Get the SDP lines of the relevant MediaStreamTrack IDs from\n // \"trackIdsToAttributes\".\n trackIds = Array.from(trackIdsToAttributes.keys());\n const relevantTrackIds = difference(trackIds, trackIdsToIgnore);\n const relevantTrackAttributes = flatMap(relevantTrackIds, trackId => trackIdsToAttributes.get(trackId));\n const excludeRtx = !section.match(/a=rtpmap:[0-9]+ rtx/);\n const relevantSdpLines = flatMap(relevantTrackAttributes, trackAttributes => trackAttributes.toSdpLines(excludeRtx));\n\n // Add the simulcast SSRC SDP lines to the media section. The Set ensures\n // that the duplicates of the SSRC SDP lines that are in both \"section\" and\n // \"relevantSdpLines\" are removed.\n const sectionLines = flatMap(new Set(section.split('\\r\\n').concat(relevantSdpLines)));\n\n const xGoogleFlagConference = 'a=x-google-flag:conference';\n if (!section.match(xGoogleFlagConference)) {\n sectionLines.push(xGoogleFlagConference);\n }\n\n return sectionLines.join('\\r\\n');\n}\n\n/**\n * String representing a MediaStream ID.\n * @typedef {string} MediaStreamID\n */\n\n/**\n * String representing the SSRC of a MediaStreamTrack.\n * @typedef {string} SSRC\n */\n\n/**\n * Primary SSRC.\n * @typedef {SSRC} PrimarySSRC\n */\n\n/**\n * Retransmission SSRC.\n * @typedef {SSRC} RtxSSRC\n */\n\n/**\n * Simulcast SSRC.\n * @typedef {SSRC} SimSSRC\n */\n\nmodule.exports = setSimulcastInMediaSection;\n","'use strict';\n\nconst { difference, flatMap } = require('../');\nconst setSimulcastInMediaSection = require('./simulcast');\n\nconst ptToFixedBitrateAudioCodecName = {\n 0: 'PCMU',\n 8: 'PCMA'\n};\n\n/**\n * A payload type\n * @typedef {number} PT\n */\n\n/**\n * An {@link AudioCodec} or {@link VideoCodec}\n * @typedef {AudioCodec|VideoCodec} Codec\n */\n\n/**\n * Create a Codec Map for the given m= section.\n * @param {string} section - The given m= section\n * @returns {Map>}\n */\nfunction createCodecMapForMediaSection(section) {\n return Array.from(createPtToCodecName(section)).reduce((codecMap, pair) => {\n const pt = pair[0];\n const codecName = pair[1];\n const pts = codecMap.get(codecName) || [];\n return codecMap.set(codecName, pts.concat(pt));\n }, new Map());\n}\n\n/**\n * Create a Map of MIDs to m= sections for the given SDP.\n * @param {string} sdp\n * @returns {Map}\n */\nfunction createMidToMediaSectionMap(sdp) {\n return getMediaSections(sdp).reduce((midsToMediaSections, mediaSection) => {\n const mid = getMidForMediaSection(mediaSection);\n return mid ? midsToMediaSections.set(mid, mediaSection) : midsToMediaSections;\n }, new Map());\n}\n\n/**\n * Create a Map from PTs to codec names for the given m= section.\n * @param {string} mediaSection - The given m= section.\n * @returns {Map} ptToCodecName\n */\nfunction createPtToCodecName(mediaSection) {\n return getPayloadTypesInMediaSection(mediaSection).reduce((ptToCodecName, pt) => {\n const rtpmapPattern = new RegExp(`a=rtpmap:${pt} ([^/]+)`);\n const matches = mediaSection.match(rtpmapPattern);\n const codecName = matches\n ? matches[1].toLowerCase()\n : ptToFixedBitrateAudioCodecName[pt]\n ? ptToFixedBitrateAudioCodecName[pt].toLowerCase()\n : '';\n return ptToCodecName.set(pt, codecName);\n }, new Map());\n}\n\n/**\n * Get the associated fmtp attributes for the given Payload Type in an m= section.\n * @param {PT} pt\n * @param {string} mediaSection\n * @returns {?object}\n */\nfunction getFmtpAttributesForPt(pt, mediaSection) {\n // In \"a=fmtp: =[;=]*\", the regex matches the codec\n // profile parameters expressed as name/value pairs separated by \";\".\n const fmtpRegex = new RegExp(`^a=fmtp:${pt} (.+)$`, 'm');\n const matches = mediaSection.match(fmtpRegex);\n return matches && matches[1].split(';').reduce((attrs, nvPair) => {\n const [name, value] = nvPair.split('=');\n attrs[name] = isNaN(value) ? value : parseInt(value, 10);\n return attrs;\n }, {});\n}\n\n/**\n * Get the MID for the given m= section.\n * @param {string} mediaSection\n * @return {?string}\n */\nfunction getMidForMediaSection(mediaSection) {\n // In \"a=mid:\", the regex matches .\n const midMatches = mediaSection.match(/^a=mid:(.+)$/m);\n return midMatches && midMatches[1];\n}\n\n/**\n * Get the m= sections of a particular kind and direction from an sdp.\n * @param {string} sdp - SDP string\n * @param {string} [kind] - Pattern for matching kind\n * @param {string} [direction] - Pattern for matching direction\n * @returns {Array} mediaSections\n */\nfunction getMediaSections(sdp, kind, direction) {\n return sdp.replace(/\\r\\n\\r\\n$/, '\\r\\n').split('\\r\\nm=').slice(1).map(mediaSection => `m=${mediaSection}`).filter(mediaSection => {\n const kindPattern = new RegExp(`m=${kind || '.*'}`, 'gm');\n const directionPattern = new RegExp(`a=${direction || '.*'}`, 'gm');\n return kindPattern.test(mediaSection) && directionPattern.test(mediaSection);\n });\n}\n\n/**\n * Get the Codec Payload Types present in the first line of the given m= section\n * @param {string} section - The m= section\n * @returns {Array} Payload Types\n */\nfunction getPayloadTypesInMediaSection(section) {\n const mLine = section.split('\\r\\n')[0];\n\n // In \"m= ... \",\n // the regex matches and the Payload Types.\n const matches = mLine.match(/([0-9]+)/g);\n\n // This should not happen, but in case there are no Payload Types in\n // the m= line, return an empty array.\n if (!matches) {\n return [];\n }\n\n // Since only the Payload Types are needed, we discard the .\n return matches.slice(1).map(match => parseInt(match, 10));\n}\n\n/**\n * Create the reordered Codec Payload Types based on the preferred Codec Names.\n * @param {Map>} codecMap - Codec Map\n * @param {Array} preferredCodecs - Preferred Codecs\n * @returns {Array} Reordered Payload Types\n */\nfunction getReorderedPayloadTypes(codecMap, preferredCodecs) {\n preferredCodecs = preferredCodecs.map(({ codec }) => codec.toLowerCase());\n const preferredPayloadTypes = flatMap(preferredCodecs, codecName => codecMap.get(codecName) || []);\n const remainingCodecs = difference(Array.from(codecMap.keys()), preferredCodecs);\n const remainingPayloadTypes = flatMap(remainingCodecs, codecName => codecMap.get(codecName));\n return preferredPayloadTypes.concat(remainingPayloadTypes);\n}\n\n/**\n * Set the given Codec Payload Types in the first line of the given m= section.\n * @param {Array} payloadTypes - Payload Types\n * @param {string} section - Given m= section\n * @returns {string} - Updated m= section\n */\nfunction setPayloadTypesInMediaSection(payloadTypes, section) {\n const lines = section.split('\\r\\n');\n let mLine = lines[0];\n const otherLines = lines.slice(1);\n mLine = mLine.replace(/([0-9]+\\s?)+$/, payloadTypes.join(' '));\n return [mLine].concat(otherLines).join('\\r\\n');\n}\n\n/**\n * Return a new SDP string with the re-ordered codec preferences.\n * @param {string} sdp\n * @param {Array} preferredAudioCodecs - If empty, the existing order\n * of audio codecs is preserved\n * @param {Array} preferredVideoCodecs - If empty, the\n * existing order of video codecs is preserved\n * @returns {string} Updated SDP string\n */\nfunction setCodecPreferences(sdp, preferredAudioCodecs, preferredVideoCodecs) {\n const mediaSections = getMediaSections(sdp);\n const session = sdp.split('\\r\\nm=')[0];\n return [session].concat(mediaSections.map(section => {\n // Codec preferences should not be applied to m=application sections.\n if (!/^m=(audio|video)/.test(section)) {\n return section;\n }\n const kind = section.match(/^m=(audio|video)/)[1];\n const codecMap = createCodecMapForMediaSection(section);\n const preferredCodecs = kind === 'audio' ? preferredAudioCodecs : preferredVideoCodecs;\n const payloadTypes = getReorderedPayloadTypes(codecMap, preferredCodecs);\n const newSection = setPayloadTypesInMediaSection(payloadTypes, section);\n\n const pcmaPayloadTypes = codecMap.get('pcma') || [];\n const pcmuPayloadTypes = codecMap.get('pcmu') || [];\n const fixedBitratePayloadTypes = kind === 'audio'\n ? new Set(pcmaPayloadTypes.concat(pcmuPayloadTypes))\n : new Set();\n\n return fixedBitratePayloadTypes.has(payloadTypes[0])\n ? newSection.replace(/\\r\\nb=(AS|TIAS):([0-9]+)/g, '')\n : newSection;\n })).join('\\r\\n');\n}\n\n/**\n * Return a new SDP string with simulcast settings.\n * @param {string} sdp\n * @param {Map} trackIdsToAttributes\n * @returns {string} Updated SDP string\n */\nfunction setSimulcast(sdp, trackIdsToAttributes) {\n const mediaSections = getMediaSections(sdp);\n const session = sdp.split('\\r\\nm=')[0];\n return [session].concat(mediaSections.map(section => {\n section = section.replace(/\\r\\n$/, '');\n if (!/^m=video/.test(section)) {\n return section;\n }\n const codecMap = createCodecMapForMediaSection(section);\n const payloadTypes = getPayloadTypesInMediaSection(section);\n const vp8PayloadTypes = new Set(codecMap.get('vp8') || []);\n\n const hasVP8PayloadType = payloadTypes.some(payloadType => vp8PayloadTypes.has(payloadType));\n return hasVP8PayloadType\n ? setSimulcastInMediaSection(section, trackIdsToAttributes)\n : section;\n })).concat('').join('\\r\\n');\n}\n\n/**\n * Get the matching Payload Types in an m= section for a particular peer codec.\n * @param {Codec} peerCodec\n * @param {PT} peerPt\n * @param {Map} codecsToPts\n * @param {string} section\n * @param {string} peerSection\n * @returns {Array}\n */\nfunction getMatchingPayloadTypes(peerCodec, peerPt, codecsToPts, section, peerSection) {\n // If there is at most one local Payload Type that matches the remote codec, retain it.\n const matchingPts = codecsToPts.get(peerCodec) || [];\n if (matchingPts.length <= 1) {\n return matchingPts;\n }\n\n // If there are no fmtp attributes for the codec in the peer m= section, then we\n // cannot get a match in the m= section. In that case, retain all matching Payload\n // Types.\n const peerFmtpAttrs = getFmtpAttributesForPt(peerPt, peerSection);\n if (!peerFmtpAttrs) {\n return matchingPts;\n }\n\n // Among the matched local Payload Types, find the one that matches the remote\n // fmtp attributes.\n const matchingPt = matchingPts.find(pt => {\n const fmtpAttrs = getFmtpAttributesForPt(pt, section);\n return fmtpAttrs && Object.keys(peerFmtpAttrs).every(attr => {\n return peerFmtpAttrs[attr] === fmtpAttrs[attr];\n });\n });\n\n // If none of the matched Payload Types also have matching fmtp attributes,\n // then retain all of them, otherwise retain only the Payload Type that\n // matches the peer fmtp attributes.\n return typeof matchingPt === 'number' ? [matchingPt] : matchingPts;\n}\n\n/**\n * Filter codecs in an m= section based on its peer m= section from the other peer.\n * @param {string} section\n * @param {Map} peerMidsToMediaSections\n * @param {Array} codecsToRemove\n * @returns {string}\n */\nfunction filterCodecsInMediaSection(section, peerMidsToMediaSections, codecsToRemove) {\n // Do nothing if the m= section represents neither audio nor video.\n if (!/^m=(audio|video)/.test(section)) {\n return section;\n }\n\n // Do nothing if the m= section does not have an equivalent remote m= section.\n const mid = getMidForMediaSection(section);\n const peerSection = mid && peerMidsToMediaSections.get(mid);\n if (!peerSection) {\n return section;\n }\n\n // Construct a Map of the peer Payload Types to their codec names.\n const peerPtToCodecs = createPtToCodecName(peerSection);\n // Construct a Map of the codec names to their Payload Types.\n const codecsToPts = createCodecMapForMediaSection(section);\n // Maintain a list of non-rtx Payload Types to retain.\n let pts = flatMap(Array.from(peerPtToCodecs), ([peerPt, peerCodec]) =>\n peerCodec !== 'rtx' && !codecsToRemove.includes(peerCodec)\n ? getMatchingPayloadTypes(\n peerCodec,\n peerPt,\n codecsToPts,\n section,\n peerSection)\n : []);\n\n // For each Payload Type that will be retained, retain their corresponding rtx\n // Payload Type if present.\n const rtxPts = codecsToPts.get('rtx') || [];\n // In \"a=fmtp: apt=\", extract the codec PT associated with rtxPt.\n pts = pts.concat(rtxPts.filter(rtxPt => {\n const fmtpAttrs = getFmtpAttributesForPt(rtxPt, section);\n return fmtpAttrs && pts.includes(fmtpAttrs.apt);\n }));\n\n // Filter out the below mentioned attribute lines in the m= section that do not\n // belong to one of the Payload Types that are to be retained.\n // 1. \"a=rtpmap: \"\n // 2. \"a=rtcp-fb: [ ]*\"\n // 3. \"a=fmtp: =[;=]*\"\n const lines = section.split('\\r\\n').filter(line => {\n const ptMatches = line.match(/^a=(rtpmap|fmtp|rtcp-fb):(.+) .+$/);\n const pt = ptMatches && ptMatches[2];\n return !ptMatches || (pt && pts.includes(parseInt(pt, 10)));\n });\n\n // Filter the list of Payload Types in the first line of the m= section.\n const orderedPts = getPayloadTypesInMediaSection(section).filter(pt => pts.includes(pt));\n return setPayloadTypesInMediaSection(orderedPts, lines.join('\\r\\n'));\n}\n\n/**\n * Filter local codecs based on the remote SDP.\n * @param {string} localSdp\n * @param {string} remoteSdp\n * @returns {string} - Updated local SDP\n */\nfunction filterLocalCodecs(localSdp, remoteSdp) {\n const localMediaSections = getMediaSections(localSdp);\n const localSession = localSdp.split('\\r\\nm=')[0];\n const remoteMidsToMediaSections = createMidToMediaSectionMap(remoteSdp);\n return [localSession].concat(localMediaSections.map(localSection => {\n return filterCodecsInMediaSection(localSection, remoteMidsToMediaSections, []);\n })).join('\\r\\n');\n}\n\n/**\n * Return a new SDP string after reverting simulcast for non vp8 sections in remote sdp.\n * @param localSdp - simulcast enabled local sdp\n * @param localSdpWithoutSimulcast - local sdp before simulcast was set\n * @param remoteSdp - remote sdp\n * @param revertForAll - when true simulcast will be reverted for all codecs. when false it will be reverted\n * only for non-vp8 codecs.\n * @return {string} Updated SDP string\n */\nfunction revertSimulcast(localSdp, localSdpWithoutSimulcast, remoteSdp, revertForAll = false) {\n const remoteMidToMediaSections = createMidToMediaSectionMap(remoteSdp);\n const localMidToMediaSectionsWithoutSimulcast = createMidToMediaSectionMap(localSdpWithoutSimulcast);\n const mediaSections = getMediaSections(localSdp);\n const session = localSdp.split('\\r\\nm=')[0];\n return [session].concat(mediaSections.map(section => {\n section = section.replace(/\\r\\n$/, '');\n if (!/^m=video/.test(section)) {\n return section;\n }\n const midMatches = section.match(/^a=mid:(.+)$/m);\n const mid = midMatches && midMatches[1];\n if (!mid) {\n return section;\n }\n\n const remoteSection = remoteMidToMediaSections.get(mid);\n const remotePtToCodecs = createPtToCodecName(remoteSection);\n const remotePayloadTypes = getPayloadTypesInMediaSection(remoteSection);\n\n const isVP8ThePreferredCodec = remotePayloadTypes.length && remotePtToCodecs.get(remotePayloadTypes[0]) === 'vp8';\n const shouldRevertSimulcast = revertForAll || !isVP8ThePreferredCodec;\n return shouldRevertSimulcast ? localMidToMediaSectionsWithoutSimulcast.get(mid).replace(/\\r\\n$/, '') : section;\n })).concat('').join('\\r\\n');\n}\n\n/**\n * Add or rewrite MSIDs for new m= sections in the given SDP with their corresponding\n * local MediaStreamTrack IDs. These can be different when previously removed MediaStreamTracks\n * are added back (or Track IDs may not be present in the SDPs at all once browsers implement\n * the latest WebRTC spec).\n * @param {string} sdp\n * @param {Map} activeMidsToTrackIds\n * @param {Map>} trackIdsByKind\n * @returns {string}\n */\nfunction addOrRewriteNewTrackIds(sdp, activeMidsToTrackIds, trackIdsByKind) {\n // NOTE(mmalavalli): The m= sections for the new MediaStreamTracks are usually\n // present after the m= sections for the existing MediaStreamTracks, in order\n // of addition.\n const newMidsToTrackIds = Array.from(trackIdsByKind).reduce((midsToTrackIds, [kind, trackIds]) => {\n const mediaSections = getMediaSections(sdp, kind, 'send(only|recv)');\n const newMids = mediaSections.map(getMidForMediaSection).filter(mid => !activeMidsToTrackIds.has(mid));\n newMids.forEach((mid, i) => midsToTrackIds.set(mid, trackIds[i]));\n return midsToTrackIds;\n }, new Map());\n return addOrRewriteTrackIds(sdp, newMidsToTrackIds);\n}\n\n/**\n * Add or rewrite MSIDs in the given SDP with their corresponding local MediaStreamTrack IDs.\n * These IDs need not be the same (or Track IDs may not be present in the SDPs at all once\n * browsers implement the latest WebRTC spec).\n * @param {string} sdp\n * @param {Map} midsToTrackIds\n * @returns {string}\n */\nfunction addOrRewriteTrackIds(sdp, midsToTrackIds) {\n const mediaSections = getMediaSections(sdp);\n const session = sdp.split('\\r\\nm=')[0];\n return [session].concat(mediaSections.map(mediaSection => {\n // Do nothing if the m= section represents neither audio nor video.\n if (!/^m=(audio|video)/.test(mediaSection)) {\n return mediaSection;\n }\n // This shouldn't happen, but in case there is no MID for the m= section, do nothing.\n const mid = getMidForMediaSection(mediaSection);\n if (!mid) {\n return mediaSection;\n }\n // In case there is no Track ID for the given MID in the map, do nothing.\n const trackId = midsToTrackIds.get(mid);\n if (!trackId) {\n return mediaSection;\n }\n // This shouldn't happen, but in case there is no a=msid: line, do nothing.\n const attributes = (mediaSection.match(/^a=msid:(.+)$/m) || [])[1];\n if (!attributes) {\n return mediaSection;\n }\n // If the a=msid: line contains the \"appdata\" field, then replace it with the Track ID,\n // otherwise append the Track ID.\n const [msid, trackIdToRewrite] = attributes.split(' ');\n const msidRegex = new RegExp(`msid:${msid}${trackIdToRewrite ? ` ${trackIdToRewrite}` : ''}$`, 'gm');\n return mediaSection.replace(msidRegex, `msid:${msid} ${trackId}`);\n })).join('\\r\\n');\n}\n\n/**\n * Removes specified ssrc attributes from given sdp.\n * @param {string} sdp\n * @param {Array} ssrcAttributesToRemove\n * @returns {string}\n */\nfunction removeSSRCAttributes(sdp, ssrcAttributesToRemove) {\n return sdp.split('\\r\\n').filter(line =>\n !ssrcAttributesToRemove.find(srcAttribute => new RegExp('a=ssrc:.*' + srcAttribute + ':', 'g').test(line))\n ).join('\\r\\n');\n}\n\n/**\n * Disable RTX in a given sdp.\n * @param {string} sdp\n * @returns {string} sdp without RTX\n */\nfunction disableRtx(sdp) {\n const mediaSections = getMediaSections(sdp);\n const session = sdp.split('\\r\\nm=')[0];\n return [session].concat(mediaSections.map(mediaSection => {\n // Do nothing if the m= section does not represent a video track.\n if (!/^m=video/.test(mediaSection)) {\n return mediaSection;\n }\n\n // Create a map of codecs to payload types.\n const codecsToPts = createCodecMapForMediaSection(mediaSection);\n // Get the RTX payload types.\n const rtxPts = codecsToPts.get('rtx');\n\n // Do nothing if there are no RTX payload types.\n if (!rtxPts) {\n return mediaSection;\n }\n\n // Remove the RTX payload types.\n const pts = new Set(getPayloadTypesInMediaSection(mediaSection));\n rtxPts.forEach(rtxPt => pts.delete(rtxPt));\n\n // Get the RTX SSRC.\n const rtxSSRCMatches = mediaSection.match(/a=ssrc-group:FID [0-9]+ ([0-9]+)/);\n const rtxSSRC = rtxSSRCMatches && rtxSSRCMatches[1];\n\n // Remove the following lines associated with the RTX payload types:\n // 1. \"a=fmtp: apt=\"\n // 2. \"a=rtpmap: rtx/...\"\n // 3. \"a=ssrc: cname:...\"\n // 4. \"a=ssrc-group:FID \"\n const filterRegexes = [\n /^a=fmtp:.+ apt=.+$/,\n /^a=rtpmap:.+ rtx\\/.+$/,\n /^a=ssrc-group:.+$/\n ].concat(rtxSSRC\n ? [new RegExp(`^a=ssrc:${rtxSSRC} .+$`)]\n : []);\n\n mediaSection = mediaSection.split('\\r\\n')\n .filter(line => filterRegexes.every(regex => !regex.test(line)))\n .join('\\r\\n');\n\n // Reconstruct the m= section without the RTX payload types.\n return setPayloadTypesInMediaSection(Array.from(pts), mediaSection);\n })).join('\\r\\n');\n}\n\n/**\n * Generate an a=fmtp: line from the given payload type and attributes.\n * @param {PT} pt\n * @param {*} fmtpAttrs\n * @returns {string}\n */\nfunction generateFmtpLineFromPtAndAttributes(pt, fmtpAttrs) {\n const serializedFmtpAttrs = Object.entries(fmtpAttrs).map(([name, value]) => {\n return `${name}=${value}`;\n }).join(';');\n return `a=fmtp:${pt} ${serializedFmtpAttrs}`;\n}\n\n/**\n * Enable DTX for opus in the m= sections for the given MIDs.`\n * @param {string} sdp\n * @param {Array} [mids] - If not specified, enables opus DTX for all\n * audio m= lines.\n * @returns {string}\n */\nfunction enableDtxForOpus(sdp, mids) {\n const mediaSections = getMediaSections(sdp);\n const session = sdp.split('\\r\\nm=')[0];\n\n mids = mids || mediaSections\n .filter(section => /^m=audio/.test(section))\n .map(getMidForMediaSection);\n\n return [session].concat(mediaSections.map(section => {\n // Do nothing if the m= section is not audio.\n if (!/^m=audio/.test(section)) {\n return section;\n }\n\n // Build a map codecs to payload types.\n const codecsToPts = createCodecMapForMediaSection(section);\n\n // Do nothing if a payload type for opus does not exist.\n const opusPt = codecsToPts.get('opus');\n if (!opusPt) {\n return section;\n }\n\n // If no fmtp attributes are found for opus, do nothing.\n const opusFmtpAttrs = getFmtpAttributesForPt(opusPt, section);\n if (!opusFmtpAttrs) {\n return section;\n }\n\n // Add usedtx=1 to the a=fmtp: line for opus.\n const origOpusFmtpLine = generateFmtpLineFromPtAndAttributes(opusPt, opusFmtpAttrs);\n const origOpusFmtpRegex = new RegExp(origOpusFmtpLine);\n\n // If the m= section's MID is in the list of MIDs, then enable dtx. Otherwise disable it.\n const mid = getMidForMediaSection(section);\n if (mids.includes(mid)) {\n opusFmtpAttrs.usedtx = 1;\n } else {\n delete opusFmtpAttrs.usedtx;\n }\n\n const opusFmtpLineWithDtx = generateFmtpLineFromPtAndAttributes(opusPt, opusFmtpAttrs);\n return section.replace(origOpusFmtpRegex, opusFmtpLineWithDtx);\n })).join('\\r\\n');\n}\n\nexports.addOrRewriteNewTrackIds = addOrRewriteNewTrackIds;\nexports.addOrRewriteTrackIds = addOrRewriteTrackIds;\nexports.createCodecMapForMediaSection = createCodecMapForMediaSection;\nexports.createPtToCodecName = createPtToCodecName;\nexports.disableRtx = disableRtx;\nexports.enableDtxForOpus = enableDtxForOpus;\nexports.filterLocalCodecs = filterLocalCodecs;\nexports.getMediaSections = getMediaSections;\nexports.removeSSRCAttributes = removeSSRCAttributes;\nexports.revertSimulcast = revertSimulcast;\nexports.setCodecPreferences = setCodecPreferences;\nexports.setSimulcast = setSimulcast;\n","'use strict';\n\nclass Filter {\n constructor(options) {\n options = Object.assign({\n getKey: function defaultGetKey(a) { return a; },\n getValue: function defaultGetValue(a) { return a; },\n isLessThanOrEqualTo: function defaultIsLessThanOrEqualTo(a, b) { return a <= b; }\n }, options);\n Object.defineProperties(this, {\n _getKey: {\n value: options.getKey\n },\n _getValue: {\n value: options.getValue\n },\n _isLessThanOrEqualTo: {\n value: options.isLessThanOrEqualTo\n },\n _map: {\n value: new Map()\n }\n });\n }\n\n toMap() {\n return new Map(this._map);\n }\n\n updateAndFilter(entries) {\n return entries.filter(this.update, this);\n }\n\n update(entry) {\n const key = this._getKey(entry);\n const value = this._getValue(entry);\n if (this._map.has(key) &&\n this._isLessThanOrEqualTo(value, this._map.get(key))) {\n return false;\n }\n this._map.set(key, value);\n return true;\n }\n}\n\nmodule.exports = Filter;\n","'use strict';\n\nconst Filter = require('../../util/filter');\n\n/**\n * An {@link IceBox} stores trickled ICE candidates. Candidates added to the\n * {@link IceBox} via {@link IceBox#update} are compared against previously\n * trickled candidates and only new candidates will be returned (assuming they\n * match the current ICE username fragment set by {@link IceBox#setUfrag}).\n * @property {?string} ufrag\n */\nclass IceBox {\n /**\n * Construct an {@link IceBox}.\n */\n constructor() {\n Object.defineProperties(this, {\n _filter: {\n value: new Filter({\n getKey: function getKey(iceState) {\n return iceState.ufrag;\n },\n isLessThanOrEqualTo: function isLessThanOrEqualTo(a, b) {\n return a.revision <= b.revision;\n }\n })\n },\n _ufrag: {\n writable: true,\n value: null\n },\n ufrag: {\n enumerable: true,\n get() {\n return this._ufrag;\n }\n }\n });\n }\n\n /**\n * Set the ICE username fragment on the {@link IceBox}. This method returns any\n * ICE candidates associated with the username fragment.\n * @param {string} ufrag\n * @returns {Array}\n */\n setUfrag(ufrag) {\n this._ufrag = ufrag;\n const ice = this._filter.toMap().get(ufrag);\n return ice ? ice.candidates : [];\n }\n\n /**\n * Update the {@link IceBox}. This method returns any new ICE candidates\n * associated with the current username fragment.\n * @param {object} iceState\n * @returns {Array}\n */\n update(iceState) {\n // NOTE(mroberts): The Server sometimes does not set the candidates property.\n iceState.candidates = iceState.candidates || [];\n const oldIceState = this._filter.toMap().get(iceState.ufrag);\n const oldCandidates = oldIceState ? oldIceState.candidates : [];\n return this._filter.update(iceState) && this._ufrag === iceState.ufrag\n ? iceState.candidates.slice(oldCandidates.length)\n : [];\n }\n}\n\nmodule.exports = IceBox;\n","'use strict';\n\nconst { ICE_ACTIVITY_CHECK_PERIOD_MS, ICE_INACTIVITY_THRESHOLD_MS } = require('../../util/constants');\n\n/**\n * Monitors a {@link RTCPeerConnection}'s stats and notifies\n * caller when inactivity is detected.\n */\nclass IceConnectionMonitor {\n /**\n * Construct an {@link IceConnectionMonitor}.\n * @param {RTCPeerConnection} peerConnection\n * @param {object} [options]\n */\n constructor(peerConnection, options) {\n options = Object.assign({\n activityCheckPeriodMs: ICE_ACTIVITY_CHECK_PERIOD_MS,\n inactivityThresholdMs: ICE_INACTIVITY_THRESHOLD_MS,\n }, options);\n\n Object.defineProperties(this, {\n _activityCheckPeriodMs: {\n value: options.activityCheckPeriodMs\n },\n _inactivityThresholdMs: {\n value: options.inactivityThresholdMs\n },\n _lastActivity: {\n value: null,\n writable: true\n },\n _peerConnection: {\n value: peerConnection\n },\n _timer: {\n value: null,\n writable: true,\n },\n _onIceConnectionStateChanged: {\n value: null,\n writable: true\n }\n });\n }\n\n _getActivePairStat(stats) {\n const statsArray = Array.from(stats.values());\n const activePairStats = statsArray.find(stat => stat.type === 'candidate-pair' && stat.nominated);\n // NOTE(mpatwardhan): sometimes (JSDK-2667) after getting disconnected while switching network\n // we may not find active pair. Treat this as 0 bytesReceived so that we count it towards inactivity.\n return activePairStats || {\n bytesReceived: 0,\n timestamp: Math.round((new Date()).getTime())\n };\n }\n\n /**\n * Get ICE connection stats, and extract received and send bytes.\n * @returns Promise\n */\n _getIceConnectionStats() {\n return this._peerConnection.getStats().then(stats => this._getActivePairStat(stats)).catch(() => {\n return null;\n });\n }\n\n /**\n * schedules/un-schedules inactivity callback.\n */\n _scheduleInactivityCallback(callback) {\n if (callback && this._onIceConnectionStateChanged === null) {\n // schedule callback\n this._onIceConnectionStateChanged = () => {\n if (this._peerConnection.iceConnectionState === 'disconnected') {\n // eslint-disable-next-line callback-return\n callback();\n }\n };\n this._peerConnection.addEventListener('iceconnectionstatechange', this._onIceConnectionStateChanged);\n } else if (!callback && this._onIceConnectionStateChanged) {\n // unschedule callback\n this._peerConnection.removeEventListener('iceconnectionstatechange', this._onIceConnectionStateChanged);\n this._onIceConnectionStateChanged = null;\n }\n }\n\n /**\n * Start monitoring the ICE connection.\n * Monitors bytes received on active ice connection pair,\n * invokes onIceConnectionInactive when inactivity is detected.\n * @param {function} onIceConnectionInactive\n */\n start(onIceConnectionInactive) {\n this.stop();\n\n this._timer = setInterval(() => {\n this._getIceConnectionStats().then(iceStats => {\n if (!iceStats) {\n return;\n }\n\n // NOTE(mpatwardhan): We look at bytesReceived on active candidate pair as an indication of active ice connection.\n // As per spec (https://w3c.github.io/webrtc-stats/#dom-rtcicecandidatepairstats-bytesreceived) this value\n // includes RTCP traffic and is +ve even when there are no tracks subscribed to.\n if (!this._lastActivity || this._lastActivity.bytesReceived !== iceStats.bytesReceived) {\n this._lastActivity = iceStats;\n // detected activity, cancel scheduled callback if any.\n this._scheduleInactivityCallback(null);\n }\n\n if (iceStats.timestamp - this._lastActivity.timestamp >= this._inactivityThresholdMs) {\n // detected inactivity.\n if (this._peerConnection.iceConnectionState === 'disconnected') {\n onIceConnectionInactive();\n } else if (this._onIceConnectionStateChanged === null) {\n this._scheduleInactivityCallback(onIceConnectionInactive);\n }\n }\n });\n }, this._activityCheckPeriodMs);\n }\n\n /**\n * Stop monitoring the ICE connection state.\n * @returns {void}\n */\n stop() {\n this._scheduleInactivityCallback(null);\n if (this._timer !== null) {\n clearInterval(this._timer);\n this._timer = null;\n this._lastActivity = null;\n }\n }\n}\n\nmodule.exports = IceConnectionMonitor;\n","'use strict';\n\nconst { EventEmitter } = require('events');\n\n/**\n * @classdesc A {@link DataTransport} implements {@link MediaSignalingTransport}\n * in terms of an RTCDataChannel.\n * @extends EventEmitter\n * @implements MediaSignalingTransport\n * @emits DataTransport#message\n */\nclass DataTransport extends EventEmitter {\n /**\n * Construct a {@link DataTransport}.\n * @param {RTCDataChannel} dataChannel\n */\n constructor(dataChannel) {\n super();\n\n Object.defineProperties(this, {\n _dataChannel: {\n value: dataChannel\n },\n _messageQueue: {\n value: []\n }\n });\n\n dataChannel.addEventListener('open', () => {\n this._messageQueue.splice(0).forEach(message => this._publish(message));\n });\n\n dataChannel.addEventListener('message', ({ data }) => {\n try {\n const message = JSON.parse(data);\n this.emit('message', message);\n } catch (error) {\n // Do nothing.\n }\n });\n\n this.publish({ type: 'ready' });\n }\n\n /**\n * @param message\n * @private\n */\n _publish(message) {\n const data = JSON.stringify(message);\n try {\n this._dataChannel.send(data);\n } catch (error) {\n // Do nothing.\n }\n }\n\n /**\n * Publish a message. Returns true if calling the method resulted in\n * publishing (or eventually publishing) the update.\n * @param {object} message\n * @returns {boolean}\n */\n publish(message) {\n const dataChannel = this._dataChannel;\n if (dataChannel.readyState === 'closing' || dataChannel.readyState === 'closed') {\n return false;\n }\n if (dataChannel.readyState === 'connecting') {\n this._messageQueue.push(message);\n return true;\n }\n this._publish(message);\n return true;\n }\n}\n\n/**\n * The {@link DataTransport} received a message.\n * @event DataTransport#message\n * @param {object} message\n */\n\nmodule.exports = DataTransport;\n","'use strict';\n\nconst DataTrackTransceiver = require('./transceiver');\nconst DataTransport = require('./transport');\n\n/**\n * A {@link DataTrackReceiver} represents a {@link DataTrackTransceiver} over\n * which data can be received. Internally, it users a single RTCDataChannel to\n * receive data.\n * @extends DataTrackTransceiver\n * @emits DataTrackReceiver#message\n * @emits DataTrackReceiver#close\n */\nclass DataTrackReceiver extends DataTrackTransceiver {\n /**\n * Construct an {@link DataTrackReceiver}.\n * @param {RTCDataChannel} dataChannel\n */\n constructor(dataChannel) {\n super(\n dataChannel.label,\n dataChannel.maxPacketLifeTime,\n dataChannel.maxRetransmits,\n dataChannel.ordered\n );\n\n Object.defineProperties(this, {\n _dataChannel: {\n value: dataChannel\n }\n });\n\n // NOTE(mmalavalli): In Firefox, the default value for \"binaryType\" is \"blob\".\n // So, we set it to \"arraybuffer\" to ensure that it is consistent with Chrome\n // and Safari.\n dataChannel.binaryType = 'arraybuffer';\n\n dataChannel.addEventListener('message', event => {\n this.emit('message', event.data);\n });\n\n dataChannel.addEventListener('close', () => {\n this.emit('close');\n });\n }\n\n stop() {\n this._dataChannel.close();\n super.stop();\n }\n\n /**\n * Create a {@link DataTransport} from the {@link DataTrackReceiver}.\n * @returns {DataTransport}\n */\n toDataTransport() {\n return new DataTransport(this._dataChannel);\n }\n}\n\n/**\n * @event DataTrackReceiver#message\n * @param {string|ArrayBuffer} data\n */\n\n/**\n * @event DataTrackReceiver#close\n */\n\nmodule.exports = DataTrackReceiver;\n","'use strict';\n\nconst MediaTrackTransceiver = require('./transceiver');\n\n/**\n * A {@link MediaTrackReceiver} represents a remote MediaStreamTrack.\n * @extends MediaTrackTransceiver\n */\nclass MediaTrackReceiver extends MediaTrackTransceiver {\n /**\n * Construct a {@link MediaTrackReceiver}.\n * @param {Track.ID} id - The MediaStreamTrack ID signaled through RSP/SDP\n * @param {MediaStreamTrack} mediaStreamTrack - The remote MediaStreamTrack\n */\n constructor(id, mediaStreamTrack) {\n super(id, mediaStreamTrack);\n }\n}\n\nmodule.exports = MediaTrackReceiver;\n","'use strict';\n\nconst { getMediaSections } = require('./');\n\n/**\n * An {@link TrackMatcher} matches an RTCTrackEvent with a MediaStreamTrack\n * ID based on the MID of the underlying RTCRtpTransceiver.\n */\nclass TrackMatcher {\n /**\n * Construct an {@link TrackMatcher}.\n */\n constructor() {\n Object.defineProperties(this, {\n _midsToTrackIds: {\n value: new Map(),\n writable: true\n }\n });\n }\n\n /**\n * Match a given MediaStreamTrack with its ID.\n * @param {RTCTrackEvent} event\n * @returns {?Track.ID}\n */\n match(event) {\n return this._midsToTrackIds.get(event.transceiver.mid) || null;\n }\n\n /**\n * Update the {@link TrackMatcher} with a new SDP.\n * @param {string} sdp\n */\n update(sdp) {\n const sections = getMediaSections(sdp, '(audio|video)');\n this._midsToTrackIds = sections.reduce((midsToTrackIds, section) => {\n const midMatches = section.match(/^a=mid:(.+)$/m) || [];\n const trackIdMatches = section.match(/^a=msid:.+ (.+)$/m) || [];\n const mid = midMatches[1];\n const trackId = trackIdMatches[1];\n return mid && trackId ? midsToTrackIds.set(mid, trackId) : midsToTrackIds;\n }, this._midsToTrackIds);\n }\n}\n\nmodule.exports = TrackMatcher;\n","'use strict';\n\nconst { RTCSessionDescription } = require('../../webrtc');\n\nconst { createPtToCodecName, getMediaSections } = require('./');\n\n/**\n * An RTX payload type\n * @typedef {PT} RtxPT\n */\n\n/**\n * A non-RTX payload type\n * @typedef {PT} NonRtxPT\n */\n\n/**\n * A Set with at least one element\n * @typedef {Set} NonEmptySet\n */\n\n/**\n * Apply the workaround for Issue 8329 to an RTCSessionDescriptionInit.\n * @param {RTCSessionDescriptionInit} description\n * @returns {RTCSessionDescription} newDescription\n */\nfunction workaround(description) {\n const descriptionInit = { type: description.type };\n if (description.type !== 'rollback') {\n descriptionInit.sdp = sdpWorkaround(description.sdp);\n }\n return new RTCSessionDescription(descriptionInit);\n}\n\n/**\n * @param {string} sdp\n * @returns {string} newSdp\n */\nfunction sdpWorkaround(sdp) {\n const mediaSections = getMediaSections(sdp);\n const session = sdp.split('\\r\\nm=')[0];\n return [session]\n .concat(mediaSections.map(mediaSectionWorkaround))\n .join('\\r\\n');\n}\n\n/**\n * @param {string} mediaSection\n * @returns {string} newMediaSection\n */\nfunction mediaSectionWorkaround(mediaSection) {\n const ptToCodecName = createPtToCodecName(mediaSection);\n mediaSection = deleteDuplicateRtxPts(mediaSection, ptToCodecName);\n const codecNameToPts = createCodecNameToPts(ptToCodecName);\n const rtxPts = codecNameToPts.get('rtx') || new Set();\n\n const invalidRtxPts = new Set();\n const rtxPtToAssociatedPt = createRtxPtToAssociatedPt(\n mediaSection, ptToCodecName, rtxPts, invalidRtxPts);\n const associatedPtToRtxPt = createAssociatedPtToRtxPt(\n rtxPtToAssociatedPt, invalidRtxPts);\n\n const unassociatedRtxPts = Array.from(invalidRtxPts);\n\n // NOTE(mroberts): We normalize to lowercase.\n const knownCodecNames = ['h264', 'vp8', 'vp9'];\n const unassociatedPts = knownCodecNames.reduce((unassociatedPts, codecName) => {\n const pts = codecNameToPts.get(codecName) || new Set();\n return Array.from(pts).reduce((unassociatedPts, pt) => associatedPtToRtxPt.has(pt)\n ? unassociatedPts\n : unassociatedPts.add(pt), unassociatedPts);\n }, new Set());\n\n unassociatedPts.forEach(pt => {\n if (unassociatedRtxPts.length) {\n const rtxPt = unassociatedRtxPts.shift();\n mediaSection = deleteFmtpAttributesForRtxPt(mediaSection, rtxPt);\n mediaSection = addFmtpAttributeForRtxPt(mediaSection, rtxPt, pt);\n }\n });\n\n unassociatedRtxPts.forEach(rtxPt => {\n mediaSection = deleteFmtpAttributesForRtxPt(mediaSection, rtxPt);\n mediaSection = deleteRtpmapAttributesForRtxPt(mediaSection, rtxPt);\n });\n\n return mediaSection;\n}\n\n/**\n * @param {string} mediaSection\n * @param {Map} ptToCodecName\n * @returns {string} newMediaSection\n */\nfunction deleteDuplicateRtxPts(mediaSection, ptToCodecName) {\n // NOTE(syerrapragada): In some cases Chrome produces an offer/answer\n // with duplicate \"rtx\" payload mapping in media section. When applied,\n // Chrome rejects the SDP. We workaround this by deleting duplicate\n // \"rtx\" mappings found in SDP.\n return Array.from(ptToCodecName.keys()).reduce((section, pt) => {\n const rtpmapRegex = new RegExp(`^a=rtpmap:${pt} rtx.+$`, 'gm');\n return (section.match(rtpmapRegex) || []).slice(ptToCodecName.get(pt) === 'rtx' ? 1 : 0).reduce((section, rtpmap) => {\n const rtpmapRegex = new RegExp(`\\r\\n${rtpmap}`);\n const fmtpmapRegex = new RegExp(`\\r\\na=fmtp:${pt} apt=[0-9]+`);\n return section.replace(rtpmapRegex, '').replace(fmtpmapRegex, '');\n }, section);\n }, mediaSection);\n}\n\n/**\n * @param {Map} ptToCodecName\n * @returns {Map>} codecNameToPts\n */\nfunction createCodecNameToPts(ptToCodecName) {\n const codecNameToPts = new Map();\n ptToCodecName.forEach((codecName, pt) => {\n const pts = codecNameToPts.get(codecName) || new Set();\n return codecNameToPts.set(codecName, pts.add(pt));\n });\n return codecNameToPts;\n}\n\n/**\n * @param {string} mediaSection\n * @param {Map} ptToCodecName\n * @param {Set} rtxPts\n * @param {Set} invalidRtxPts\n * @returns {Map} rtxPtToAssociatedPt\n */\nfunction createRtxPtToAssociatedPt(mediaSection, ptToCodecName, rtxPts, invalidRtxPts) {\n return Array.from(rtxPts).reduce((rtxPtToAssociatedPt, rtxPt) => {\n const fmtpPattern = new RegExp(`a=fmtp:${rtxPt} apt=(\\\\d+)`);\n const matches = mediaSection.match(fmtpPattern);\n if (!matches) {\n invalidRtxPts.add(rtxPt);\n return rtxPtToAssociatedPt;\n }\n\n const pt = Number.parseInt(matches[1]);\n if (!ptToCodecName.has(pt)) {\n // This is Issue 8329.\n invalidRtxPts.add(rtxPt);\n return rtxPtToAssociatedPt;\n }\n\n const codecName = ptToCodecName.get(pt);\n if (codecName === 'rtx') {\n // Strange\n invalidRtxPts.add(rtxPt);\n return rtxPtToAssociatedPt;\n }\n\n return rtxPtToAssociatedPt.set(rtxPt, pt);\n }, new Map());\n}\n\n/**\n * @param {string} mediaSection\n * @param {Map} rtxPtToAssociatedPt\n * @param {Set} invalidRtxPts\n * @returns {Map} associatedPtToRtxPt\n */\nfunction createAssociatedPtToRtxPt(rtxPtToAssociatedPt, invalidRtxPts) {\n // First, we construct a Map>.\n const associatedPtToRtxPts = Array.from(rtxPtToAssociatedPt).reduce((associatedPtToRtxPts, pair) => {\n const rtxPt = pair[0];\n const pt = pair[1];\n const rtxPts = associatedPtToRtxPts.get(pt) || new Set();\n return associatedPtToRtxPts.set(pt, rtxPts.add(rtxPt));\n }, new Map());\n\n // Then, we filter down to a Map. Any RtxPTs that map to the\n // same NonRtxPT are removed and added to invalidRtxPts.\n return Array.from(associatedPtToRtxPts).reduce((associatedPtToRtxPt, pair) => {\n const pt = pair[0];\n const rtxPts = Array.from(pair[1]);\n if (rtxPts.length > 1) {\n rtxPts.forEach(rtxPt => {\n invalidRtxPts.add(rtxPt);\n });\n return associatedPtToRtxPt;\n }\n return associatedPtToRtxPt.set(pt, rtxPts[0]);\n }, new Map());\n}\n\n/**\n * @param {string} mediaSection\n * @param {RtxPT} rtxPt\n * @returns {string} newMediaSection\n */\nfunction deleteFmtpAttributesForRtxPt(mediaSection, rtxPt) {\n const pattern = new RegExp(`a=fmtp:${rtxPt}.*\\r\\n`, 'gm');\n return mediaSection.replace(pattern, '');\n}\n\n/**\n * @param {string} mediaSection\n * @param {RtxPT} rtxPt\n * @returns {string} newMediaSection\n */\nfunction deleteRtpmapAttributesForRtxPt(mediaSection, rtxPt) {\n const pattern = new RegExp(`a=rtpmap:${rtxPt}.*\\r\\n`, 'gm');\n return mediaSection.replace(pattern, '');\n}\n\n/**\n * @param {string} mediaSection\n * @param {RtxPT} rtxPt\n * @param {NonRtxPT} pt\n * @returns {string} newMediaSection\n */\nfunction addFmtpAttributeForRtxPt(mediaSection, rtxPt, pt) {\n return mediaSection.endsWith('\\r\\n')\n ? `${mediaSection}a=fmtp:${rtxPt} apt=${pt}\\r\\n`\n : `${mediaSection}\\r\\na=fmtp:${rtxPt} apt=${pt}`;\n}\n\nmodule.exports = workaround;\n","'use strict';\n\nconst DefaultBackoff = require('../../util/backoff');\nconst {\n RTCIceCandidate: DefaultRTCIceCandidate,\n RTCPeerConnection: DefaultRTCPeerConnection,\n RTCSessionDescription: DefaultRTCSessionDescription,\n getStats: getStatistics\n} = require('../../webrtc');\n\nconst util = require('../../webrtc/util');\n\nconst {\n DEFAULT_ICE_GATHERING_TIMEOUT_MS,\n DEFAULT_LOG_LEVEL,\n DEFAULT_SESSION_TIMEOUT_SEC,\n iceRestartBackoffConfig\n} = require('../../util/constants');\n\nconst {\n addOrRewriteNewTrackIds,\n addOrRewriteTrackIds,\n createCodecMapForMediaSection,\n disableRtx,\n enableDtxForOpus,\n filterLocalCodecs,\n getMediaSections,\n removeSSRCAttributes,\n revertSimulcast,\n setCodecPreferences,\n setSimulcast\n} = require('../../util/sdp');\n\nconst DefaultTimeout = require('../../util/timeout');\n\nconst {\n MediaClientLocalDescFailedError,\n MediaClientRemoteDescFailedError\n} = require('../../util/twilio-video-errors');\n\nconst {\n buildLogLevels,\n getPlatform,\n isChromeScreenShareTrack,\n oncePerTick,\n defer\n} = require('../../util');\n\nconst IceBox = require('./icebox');\nconst DefaultIceConnectionMonitor = require('./iceconnectionmonitor.js');\nconst DataTrackReceiver = require('../../data/receiver');\nconst MediaTrackReceiver = require('../../media/track/receiver');\nconst StateMachine = require('../../statemachine');\nconst Log = require('../../util/log');\nconst TrackMatcher = require('../../util/sdp/trackmatcher');\nconst workaroundIssue8329 = require('../../util/sdp/issue8329');\n\nconst guess = util.guessBrowser();\nconst platform = getPlatform();\nconst isAndroid = /android/.test(platform);\nconst isChrome = guess === 'chrome';\nconst isFirefox = guess === 'firefox';\nconst isSafari = guess === 'safari';\n\nlet nInstances = 0;\n\n/*\nPeerConnectionV2 States\n-----------------------\n\n +------+ +--------+\n | | | |\n | open |--->| closed |\n | | | |\n +------+ +--------+\n | ^ ^\n | | |\n | | |\n v | |\n +----------+ |\n | | |\n | updating |------+\n | |\n +----------+\n\n*/\n\nconst states = {\n open: [\n 'closed',\n 'updating'\n ],\n updating: [\n 'closed',\n 'open'\n ],\n closed: []\n};\n\n/**\n * @extends StateMachine\n * @property {id}\n * @emits PeerConnectionV2#connectionStateChanged\n * @emits PeerConnectionV2#iceConnectionStateChanged\n * @emits PeerConnectionV2#candidates\n * @emits PeerConnectionV2#description\n */\nclass PeerConnectionV2 extends StateMachine {\n /**\n * Construct a {@link PeerConnectionV2}.\n * @param {string} id\n * @param {EncodingParametersImpl} encodingParameters\n * @param {PreferredCodecs} preferredCodecs\n * @param {object} [options]\n */\n constructor(id, encodingParameters, preferredCodecs, options) {\n super('open', states);\n options = Object.assign({\n enableDscp: false,\n dummyAudioMediaStreamTrack: null,\n isChromeScreenShareTrack,\n iceServers: [],\n logLevel: DEFAULT_LOG_LEVEL,\n offerOptions: {},\n revertSimulcast,\n sessionTimeout: DEFAULT_SESSION_TIMEOUT_SEC * 1000,\n setCodecPreferences,\n setSimulcast,\n Backoff: DefaultBackoff,\n IceConnectionMonitor: DefaultIceConnectionMonitor,\n RTCIceCandidate: DefaultRTCIceCandidate,\n RTCPeerConnection: DefaultRTCPeerConnection,\n RTCSessionDescription: DefaultRTCSessionDescription,\n Timeout: DefaultTimeout\n }, options);\n\n const configuration = getConfiguration(options);\n const logLevels = buildLogLevels(options.logLevel);\n const RTCPeerConnection = options.RTCPeerConnection;\n\n if (options.enableDscp === true) {\n options.chromeSpecificConstraints = options.chromeSpecificConstraints || {};\n options.chromeSpecificConstraints.optional = options.chromeSpecificConstraints.optional || [];\n options.chromeSpecificConstraints.optional.push({ googDscp: true });\n }\n\n const log = options.log ? options.log.createLog('webrtc', this) : new Log('webrtc', this, logLevels, options.loggerName);\n const peerConnection = new RTCPeerConnection(configuration, options.chromeSpecificConstraints);\n\n if (options.dummyAudioMediaStreamTrack) {\n peerConnection.addTrack(options.dummyAudioMediaStreamTrack);\n }\n\n Object.defineProperties(this, {\n _appliedTrackIdsToAttributes: {\n value: new Map(),\n writable: true\n },\n _dataChannels: {\n value: new Map()\n },\n _dataTrackReceivers: {\n value: new Set()\n },\n _descriptionRevision: {\n writable: true,\n value: 0\n },\n _didGenerateLocalCandidates: {\n writable: true,\n value: false\n },\n _enableDscp: {\n value: options.enableDscp\n },\n _encodingParameters: {\n value: encodingParameters\n },\n _isChromeScreenShareTrack: {\n value: options.isChromeScreenShareTrack,\n },\n _iceGatheringFailed: {\n value: false,\n writable: true\n },\n _iceGatheringTimeout: {\n value: new options.Timeout(\n () => this._handleIceGatheringTimeout(),\n DEFAULT_ICE_GATHERING_TIMEOUT_MS,\n false)\n },\n _iceRestartBackoff: {\n // eslint-disable-next-line new-cap\n value: new options.Backoff(iceRestartBackoffConfig)\n },\n _instanceId: {\n value: ++nInstances\n },\n _isIceConnectionInactive: {\n writable: true,\n value: false\n },\n _isIceLite: {\n writable: true,\n value: false\n },\n _isIceRestartBackoffInProgress: {\n writable: true,\n value: false\n },\n _isRestartingIce: {\n writable: true,\n value: false\n },\n _lastIceConnectionState: {\n writable: true,\n value: null\n },\n _lastStableDescriptionRevision: {\n writable: true,\n value: 0\n },\n _localCandidates: {\n writable: true,\n value: []\n },\n _localCodecs: {\n value: new Set()\n },\n _localCandidatesRevision: {\n writable: true,\n value: 1\n },\n _localDescriptionWithoutSimulcast: {\n writable: true,\n value: null\n },\n _localDescription: {\n writable: true,\n value: null\n },\n _localUfrag: {\n writable: true,\n value: null\n },\n _log: {\n value: log\n },\n _eventObserver: {\n value: options.eventObserver\n },\n _remoteCodecMaps: {\n value: new Map()\n },\n _rtpSenders: {\n value: new Map()\n },\n _rtpNewSenders: {\n value: new Set()\n },\n _iceConnectionMonitor: {\n value: new options.IceConnectionMonitor(peerConnection)\n },\n _mediaTrackReceivers: {\n value: new Set()\n },\n _needsAnswer: {\n writable: true,\n value: false\n },\n _negotiationRole: {\n writable: true,\n value: null\n },\n _offerOptions: {\n writable: true,\n value: options.offerOptions\n },\n _onEncodingParametersChanged: {\n value: oncePerTick(() => {\n if (!this._needsAnswer) {\n updateEncodingParameters(this);\n }\n })\n },\n _peerConnection: {\n value: peerConnection\n },\n _preferredAudioCodecs: {\n value: preferredCodecs.audio\n },\n _preferredVideoCodecs: {\n value: preferredCodecs.video\n },\n _shouldApplyDtx: {\n value: preferredCodecs.audio.every(({ codec }) => codec !== 'opus')\n || preferredCodecs.audio.some(({ codec, dtx }) => codec === 'opus' && dtx)\n },\n _queuedDescription: {\n writable: true,\n value: null\n },\n _iceReconnectTimeout: {\n value: new options.Timeout(() => {\n log.debug('ICE reconnect timed out');\n this.close();\n }, options.sessionTimeout, false)\n },\n _recycledTransceivers: {\n value: {\n audio: [],\n video: []\n }\n },\n _replaceTrackPromises: {\n value: new Map()\n },\n _remoteCandidates: {\n writable: true,\n value: new IceBox()\n },\n _setCodecPreferences: {\n // NOTE(mmalavalli): Re-ordering payload types in order to make sure a non-H264\n // preferred codec is selected does not work on Android Firefox due to this behavior:\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1683258. So, we work around this by\n // not applying any non-H264 preferred video codec.\n value: isFirefox && isAndroid && preferredCodecs.video[0] && preferredCodecs.video[0].codec.toLowerCase() !== 'h264'\n ? sdp => sdp\n : options.setCodecPreferences\n },\n _setSimulcast: {\n value: options.setSimulcast\n },\n _revertSimulcast: {\n value: options.revertSimulcast\n },\n _RTCIceCandidate: {\n value: options.RTCIceCandidate\n },\n _RTCPeerConnection: {\n value: options.RTCPeerConnection\n },\n _RTCSessionDescription: {\n value: options.RTCSessionDescription\n },\n _shouldOffer: {\n writable: true,\n value: false\n },\n _shouldRestartIce: {\n writable: true,\n value: false\n },\n _trackIdsToAttributes: {\n value: new Map(),\n writable: true\n },\n _trackMatcher: {\n writable: true,\n value: null\n },\n _mediaTrackSenderToPublisherHints: {\n value: new Map()\n },\n id: {\n enumerable: true,\n value: id\n }\n });\n\n encodingParameters.on('changed', this._onEncodingParametersChanged);\n\n peerConnection.addEventListener('connectionstatechange', this._handleConnectionStateChange.bind(this));\n peerConnection.addEventListener('datachannel', this._handleDataChannelEvent.bind(this));\n peerConnection.addEventListener('icecandidate', this._handleIceCandidateEvent.bind(this));\n peerConnection.addEventListener('iceconnectionstatechange', this._handleIceConnectionStateChange.bind(this));\n peerConnection.addEventListener('icegatheringstatechange', this._handleIceGatheringStateChange.bind(this));\n peerConnection.addEventListener('signalingstatechange', this._handleSignalingStateChange.bind(this));\n peerConnection.addEventListener('track', this._handleTrackEvent.bind(this));\n\n const self = this;\n this.on('stateChanged', function stateChanged(state) {\n if (state !== 'closed') {\n return;\n }\n self.removeListener('stateChanged', stateChanged);\n self._dataChannels.forEach((dataChannel, dataTrackSender) => {\n self.removeDataTrackSender(dataTrackSender);\n });\n });\n }\n\n toString() {\n return `[PeerConnectionV2 #${this._instanceId}: ${this.id}]`;\n }\n\n setEffectiveAdaptiveSimulcast(effectiveAdaptiveSimulcast) {\n this._log.debug('Setting setEffectiveAdaptiveSimulcast: ', effectiveAdaptiveSimulcast);\n // clear adaptive simulcast from codec preferences if it was set.\n this._preferredVideoCodecs.forEach(cs => {\n if ('adaptiveSimulcast' in cs) {\n cs.adaptiveSimulcast = effectiveAdaptiveSimulcast;\n }\n });\n }\n\n get _shouldApplySimulcast() {\n if (!isChrome && !isSafari) {\n return false;\n }\n\n // adaptiveSimulcast is set to false after connected message is received if other party does not support it.\n const simulcast = this._preferredVideoCodecs.some(cs => {\n return cs.codec.toLowerCase() === 'vp8' && cs.simulcast && cs.adaptiveSimulcast !== false;\n });\n\n return simulcast;\n }\n\n /**\n * The {@link PeerConnectionV2}'s underlying RTCPeerConnection's RTCPeerConnectionState\n * if supported by the browser, its RTCIceConnectionState otherwise.\n * @property {RTCPeerConnectionState}\n */\n get connectionState() {\n return this.iceConnectionState === 'failed'\n ? 'failed' : (this._peerConnection.connectionState || this.iceConnectionState);\n }\n\n /**\n * The {@link PeerConnectionV2}'s underlying RTCPeerConnection's\n * RTCIceConnectionState.\n * @property {RTCIceConnectionState}\n */\n get iceConnectionState() {\n return ((this._isIceConnectionInactive && this._peerConnection.iceConnectionState === 'disconnected') || this._iceGatheringFailed)\n ? 'failed' : this._peerConnection.iceConnectionState;\n }\n\n /**\n * Whether the {@link PeerConnectionV2} has negotiated or is in the process\n * of negotiating the application m= section.\n * @returns {boolean}\n */\n get isApplicationSectionNegotiated() {\n if (this._peerConnection.signalingState !== 'closed') {\n // accessing .localDescription in 'closed' state causes it throw exceptions.\n return this._peerConnection.localDescription\n ? getMediaSections(this._peerConnection.localDescription.sdp, 'application').length > 0\n : false;\n }\n return true;\n }\n\n /**\n * Whether adaptive simulcast is enabled.\n * @returns {boolean}\n */\n get _isAdaptiveSimulcastEnabled() {\n const adaptiveSimulcastEntry = this._preferredVideoCodecs.find(cs => 'adaptiveSimulcast' in cs);\n return adaptiveSimulcastEntry && adaptiveSimulcastEntry.adaptiveSimulcast === true;\n }\n\n /**\n * @param {MediaStreamTrack} track\n * @param {Array} encodings\n * @param {boolean} trackReplaced\n * @returns {boolean} true if encodings were updated.\n */\n _maybeUpdateEncodings(track, encodings, trackReplaced = false) {\n if (track.kind !== 'video' || track.readyState === 'ended') {\n return false;\n }\n // NOTE(mmalavalli): There is no guarantee that CanvasCaptureMediaStreamTracks will always have \"width\" and \"height\"\n // in their settings. So, we don't update the encodings if they are not present.\n // Chromium bug: https://bugs.chromium.org/p/chromium/issues/detail?id=1367082\n const { height, width } = track.getSettings();\n if (typeof height !== 'number' || typeof width !== 'number') {\n return false;\n }\n // Note(mpatwardhan): always configure encodings for safari.\n // for chrome only when adaptive simulcast enabled.\n const browser = util.guessBrowser();\n if (browser === 'safari' || (browser === 'chrome' && this._isAdaptiveSimulcastEnabled)) {\n this._updateEncodings(track, encodings, trackReplaced);\n return true;\n }\n\n return false;\n }\n\n /**\n * Configures with default encodings depending on track type and resolution.\n * Default configuration sets some encodings to disabled, and for others set scaleResolutionDownBy\n * values. When trackReplaced is set to true, it will clear 'active' for any encodings that\n * needs to be enabled.\n * @param {MediaStreamTrack} track\n * @param {Array} encodings\n * @param {boolean} trackReplaced\n */\n _updateEncodings(track, encodings, trackReplaced) {\n if (this._isChromeScreenShareTrack(track)) {\n const screenShareActiveLayerConfig = [\n { scaleResolutionDownBy: 1 },\n { scaleResolutionDownBy: 1 }\n ];\n encodings.forEach((encoding, i) => {\n const activeLayerConfig = screenShareActiveLayerConfig[i];\n if (activeLayerConfig) {\n encoding.scaleResolutionDownBy = activeLayerConfig.scaleResolutionDownBy;\n if (trackReplaced) {\n delete encoding.active;\n }\n } else {\n encoding.active = false;\n delete encoding.scaleResolutionDownBy;\n }\n });\n } else {\n const { width, height } = track.getSettings();\n // NOTE(mpatwardhan): for non-screen share tracks\n // enable layers depending on track resolutions\n const pixelsToMaxActiveLayers = [\n { pixels: 960 * 540, maxActiveLayers: 3 },\n { pixels: 480 * 270, maxActiveLayers: 2 },\n { pixels: 0, maxActiveLayers: 1 }\n ];\n\n const trackPixels = width * height;\n const activeLayersInfo = pixelsToMaxActiveLayers.find(layer => trackPixels >= layer.pixels);\n const activeLayers = Math.min(encodings.length, activeLayersInfo.maxActiveLayers);\n encodings.forEach((encoding, i) => {\n const enabled = i < activeLayers;\n if (enabled) {\n encoding.scaleResolutionDownBy = 1 << (activeLayers - i - 1);\n if (trackReplaced) {\n encoding.active = true;\n }\n } else {\n encoding.active = false;\n delete encoding.scaleResolutionDownBy;\n }\n });\n }\n this._log.debug('_updateEncodings:', encodings.map(({ active, scaleResolutionDownBy }, i) => `[${i}: ${active}, ${scaleResolutionDownBy || 0}]`).join(', '));\n }\n\n /**\n * Add an ICE candidate to the {@link PeerConnectionV2}.\n * @private\n * @param {object} candidate\n * @returns {Promise}\n */\n _addIceCandidate(candidate) {\n return Promise.resolve().then(() => {\n candidate = new this._RTCIceCandidate(candidate);\n return this._peerConnection.addIceCandidate(candidate);\n }).catch(error => {\n // NOTE(mmalavalli): Firefox 68+ now generates an RTCIceCandidate with an\n // empty candidate string to signal end-of-candidates, followed by a null\n // candidate. As of now, Chrome and Safari reject this RTCIceCandidate. Since\n // this does not affect the media connection between Firefox 68+ and Chrome/Safari\n // in Peer-to-Peer Rooms, we suppress the Error and log a warning message.\n //\n // Chrome bug: https://bugs.chromium.org/p/chromium/issues/detail?id=978582\n //\n this._log.warn(`Failed to add RTCIceCandidate ${candidate ? `\"${candidate.candidate}\"` : 'null'}: `\n + error.message);\n });\n }\n\n /**\n * Add ICE candidates to the {@link PeerConnectionV2}.\n * @private\n * @param {Array} candidates\n * @returns {Promise}\n */\n _addIceCandidates(candidates) {\n return Promise.all(candidates.map(this._addIceCandidate, this)).then(() => {});\n }\n\n /**\n * Add a new RTCRtpTransceiver or update an existing RTCRtpTransceiver for the\n * given MediaStreamTrack.\n * @private\n * @param {MediaStreamTrack} track\n * @returns {RTCRtpTransceiver}\n */\n _addOrUpdateTransceiver(track) {\n const transceiver = takeRecycledTransceiver(this, track.kind);\n if (transceiver && transceiver.sender) {\n const oldTrackId = transceiver.sender.track ? transceiver.sender.track.id : null;\n if (oldTrackId) {\n this._log.warn(`Reusing transceiver: ${transceiver.mid}] ${oldTrackId} => ${track.id}`);\n }\n // NOTE(mpatwardhan):remember this transceiver while we replace track.\n // we recycle transceivers that are not in use after 'negotiationCompleted', but we want to prevent\n // this one from getting recycled while replaceTrack is pending.\n this._replaceTrackPromises.set(transceiver, transceiver.sender.replaceTrack(track).then(() => {\n transceiver.direction = 'sendrecv';\n }, () => {\n // Do nothing.\n }).finally(() => {\n this._replaceTrackPromises.delete(transceiver);\n }));\n return transceiver;\n }\n return this._peerConnection.addTransceiver(track);\n }\n\n /**\n * Check the {@link IceBox}.\n * @private\n * @param {RTCSessionDescriptionInit} description\n * @returns {Promise}\n */\n _checkIceBox(description) {\n const ufrag = getUfrag(description);\n if (!ufrag) {\n return Promise.resolve();\n }\n const candidates = this._remoteCandidates.setUfrag(ufrag);\n return this._addIceCandidates(candidates);\n }\n\n /**\n * Create an answer and set it on the {@link PeerConnectionV2}.\n * @private\n * @param {RTCSessionDescriptionInit} offer\n * @returns {Promise}\n */\n _answer(offer) {\n return Promise.resolve().then(() => {\n if (!this._negotiationRole) {\n this._negotiationRole = 'answerer';\n }\n return this._setRemoteDescription(offer);\n }).catch(() => {\n throw new MediaClientRemoteDescFailedError();\n }).then(() => {\n return this._peerConnection.createAnswer();\n }).then(answer => {\n if (isFirefox) {\n // NOTE(mmalavalli): We work around Chromium bug 1106157 by disabling\n // RTX in Firefox 79+. For more details about the bug, please go here:\n // https://bugs.chromium.org/p/chromium/issues/detail?id=1106157\n answer = new this._RTCSessionDescription({\n sdp: disableRtx(answer.sdp),\n type: answer.type\n });\n } else {\n answer = workaroundIssue8329(answer);\n }\n\n // NOTE(mpatwardhan): Upcoming chrome versions are going to remove ssrc attributes\n // mslabel and label. See this bug https://bugs.chromium.org/p/webrtc/issues/detail?id=7110\n // and PSA: https://groups.google.com/forum/#!searchin/discuss-webrtc/PSA%7Csort:date/discuss-webrtc/jcZO-Wj0Wus/k2XvPCvoAwAJ\n // We are not referencing those attributes, but this changes goes ahead and removes them to see if it works.\n // this also helps reduce bytes on wires\n let updatedSdp = removeSSRCAttributes(answer.sdp, ['mslabel', 'label']);\n\n if (this._shouldApplySimulcast) {\n let sdpWithoutSimulcast = updatedSdp;\n updatedSdp = this._setSimulcast(sdpWithoutSimulcast, this._trackIdsToAttributes);\n // NOTE(syerrapragada): VMS does not support H264 simulcast. So,\n // unset simulcast for sections in local offer where corresponding\n // sections in answer doesn't have vp8 as preferred codec and reapply offer.\n updatedSdp = this._revertSimulcast(updatedSdp, sdpWithoutSimulcast, offer.sdp);\n }\n\n // NOTE(mmalavalli): Work around Chromium bug 1074421.\n // https://bugs.chromium.org/p/chromium/issues/detail?id=1074421\n updatedSdp = updatedSdp.replace(/42e015/g, '42e01f');\n\n return this._setLocalDescription({\n type: answer.type,\n sdp: updatedSdp\n });\n }).then(() => {\n return this._checkIceBox(offer);\n }).then(() => {\n return this._queuedDescription\n && this._updateDescription(this._queuedDescription);\n }).then(() => {\n this._queuedDescription = null;\n return this._maybeReoffer(this._peerConnection.localDescription);\n }).catch(error => {\n const errorToThrow = error instanceof MediaClientRemoteDescFailedError ? error : new MediaClientLocalDescFailedError();\n this._publishMediaWarning({\n message: 'Failed to _answer',\n code: errorToThrow.code,\n error\n });\n throw errorToThrow;\n });\n }\n\n /**\n * Close the underlying RTCPeerConnection. Returns false if the\n * RTCPeerConnection was already closed.\n * @private\n * @returns {boolean}\n */\n _close() {\n this._iceConnectionMonitor.stop();\n if (this._peerConnection.signalingState !== 'closed') {\n this._peerConnection.close();\n this.preempt('closed');\n this._encodingParameters.removeListener('changed', this._onEncodingParametersChanged);\n return true;\n }\n return false;\n }\n\n /**\n * Handle a \"connectionstatechange\" event.\n * @private\n * @returns {void}\n */\n _handleConnectionStateChange() {\n this.emit('connectionStateChanged');\n }\n\n /**\n * Handle a \"datachannel\" event.\n * @private\n * @param {RTCDataChannelEvent} event\n * @returns {void}\n */\n _handleDataChannelEvent(event) {\n const dataChannel = event.channel;\n const dataTrackReceiver = new DataTrackReceiver(dataChannel);\n this._dataTrackReceivers.add(dataTrackReceiver);\n\n dataChannel.addEventListener('close', () => {\n this._dataTrackReceivers.delete(dataTrackReceiver);\n });\n\n this.emit('trackAdded', dataTrackReceiver);\n }\n\n /**\n * Handle a glare scenario on the {@link PeerConnectionV2}.\n * @private\n * @param {RTCSessionDescriptionInit} offer\n * @returns {Promise}\n */\n _handleGlare(offer) {\n this._log.debug('Glare detected; rolling back');\n if (this._isRestartingIce) {\n this._log.debug('An ICE restart was in progress; we\\'ll need to restart ICE again after rolling back');\n this._isRestartingIce = false;\n this._shouldRestartIce = true;\n }\n return Promise.resolve().then(() => {\n this._trackIdsToAttributes = new Map(this._appliedTrackIdsToAttributes);\n return this._setLocalDescription({ type: 'rollback' });\n }).then(() => {\n this._needsAnswer = false;\n return this._answer(offer);\n }).then(didReoffer => {\n return didReoffer ? Promise.resolve() : this._offer();\n });\n }\n\n _publishMediaWarning({ message, code, error, sdp }) {\n this._eventObserver.emit('event', { level: 'warning', name: 'error', group: 'media', payload: {\n message,\n code,\n context: JSON.stringify({ error: error.message, sdp })\n } });\n }\n\n /**\n * Handle an ICE candidate event.\n * @private\n * @param {Event} event\n * @returns {void}\n */\n _handleIceCandidateEvent(event) {\n if (event.candidate) {\n this._log.debug('Clearing ICE gathering timeout');\n this._didGenerateLocalCandidates = true;\n this._iceGatheringTimeout.clear();\n this._localCandidates.push(event.candidate);\n }\n const peerConnectionState = {\n ice: {\n candidates: this._isIceLite ? [] : this._localCandidates.slice(),\n ufrag: this._localUfrag\n },\n id: this.id\n };\n if (!event.candidate) {\n peerConnectionState.ice.complete = true;\n }\n if (!(this._isIceLite && event.candidate)) {\n peerConnectionState.ice.revision = this._localCandidatesRevision++;\n this.emit('candidates', peerConnectionState);\n }\n }\n\n /**\n * Handle an ICE connection state change event.\n * @private\n * @returns {void}\n */\n _handleIceConnectionStateChange() {\n const { iceConnectionState } = this._peerConnection;\n const isIceConnectedOrComplete = ['connected', 'completed'].includes(iceConnectionState);\n const log = this._log;\n\n log.debug(`ICE connection state is \"${iceConnectionState}\"`);\n if (isIceConnectedOrComplete) {\n this._iceReconnectTimeout.clear();\n this._iceRestartBackoff.reset();\n }\n\n if (this._lastIceConnectionState !== 'failed' && iceConnectionState === 'failed' && !this._shouldRestartIce && !this._isRestartingIce) {\n // Case 1: Transition to \"failed\".\n log.warn('ICE failed');\n this._initiateIceRestartBackoff();\n } else if (['disconnected', 'failed'].includes(this._lastIceConnectionState) && isIceConnectedOrComplete) {\n // Case 2: Transition from \"disconnected\" or \"failed\".\n log.debug('ICE reconnected');\n }\n\n // start monitor media when connected, and continue to monitor while state is complete-disconnected-connected.\n if (iceConnectionState === 'connected') {\n this._isIceConnectionInactive = false;\n this._iceConnectionMonitor.start(() => {\n // note: iceConnection monitor waits for iceConnectionState=disconnected for\n // detecting inactivity. Its possible that it may know about disconnected before _handleIceConnectionStateChange\n this._iceConnectionMonitor.stop();\n if (!this._shouldRestartIce && !this._isRestartingIce) {\n log.warn('ICE Connection Monitor detected inactivity');\n this._isIceConnectionInactive = true;\n this._initiateIceRestartBackoff();\n this.emit('iceConnectionStateChanged');\n this.emit('connectionStateChanged');\n }\n });\n } else if (!['disconnected', 'completed'].includes(iceConnectionState)) { // don't stop monitoring for disconnected or completed.\n this._iceConnectionMonitor.stop();\n this._isIceConnectionInactive = false;\n }\n\n this._lastIceConnectionState = iceConnectionState;\n this.emit('iceConnectionStateChanged');\n }\n\n /**\n * Handle ICE gathering timeout.\n * @private\n * @returns {void}\n */\n _handleIceGatheringTimeout() {\n this._log.warn('ICE failed to gather any local candidates');\n this._iceGatheringFailed = true;\n this._initiateIceRestartBackoff();\n this.emit('iceConnectionStateChanged');\n this.emit('connectionStateChanged');\n }\n\n /**\n * Handle an ICE gathering state change event.\n * @private\n * @returns {void}\n */\n _handleIceGatheringStateChange() {\n const { iceGatheringState } = this._peerConnection;\n const log = this._log;\n log.debug(`ICE gathering state is \"${iceGatheringState}\"`);\n\n // NOTE(mmalavalli): Start the ICE gathering timeout only if the RTCPeerConnection\n // has started gathering candidates for the first time since the initial offer/answer\n // or an offer/answer with ICE restart.\n const { delay, isSet } = this._iceGatheringTimeout;\n if (iceGatheringState === 'gathering' && !this._didGenerateLocalCandidates && !isSet) {\n log.debug(`Starting ICE gathering timeout: ${delay}`);\n this._iceGatheringFailed = false;\n this._iceGatheringTimeout.start();\n }\n }\n\n /**\n * Handle a signaling state change event.\n * @private\n * @returns {void}\n */\n _handleSignalingStateChange() {\n if (this._peerConnection.signalingState === 'stable') {\n this._appliedTrackIdsToAttributes = new Map(this._trackIdsToAttributes);\n }\n }\n\n /**\n * Handle a track event.\n * @private\n * @param {RTCTrackEvent} event\n * @returns {void}\n */\n _handleTrackEvent(event) {\n const sdp = this._peerConnection.remoteDescription\n ? this._peerConnection.remoteDescription.sdp\n : null;\n\n this._trackMatcher = this._trackMatcher || new TrackMatcher();\n this._trackMatcher.update(sdp);\n\n const mediaStreamTrack = event.track;\n const signaledTrackId = this._trackMatcher.match(event) || mediaStreamTrack.id;\n const mediaTrackReceiver = new MediaTrackReceiver(signaledTrackId, mediaStreamTrack);\n\n // NOTE(mmalavalli): \"ended\" is not fired on the remote MediaStreamTrack when\n // the remote peer removes a track. So, when this MediaStreamTrack is re-used\n // for a different track due to the remote peer calling RTCRtpSender.replaceTrack(),\n // we delete the previous MediaTrackReceiver that owned this MediaStreamTrack\n // before adding the new MediaTrackReceiver.\n this._mediaTrackReceivers.forEach(trackReceiver => {\n if (trackReceiver.track.id === mediaTrackReceiver.track.id) {\n this._mediaTrackReceivers.delete(trackReceiver);\n }\n });\n\n this._mediaTrackReceivers.add(mediaTrackReceiver);\n mediaStreamTrack.addEventListener('ended', () => this._mediaTrackReceivers.delete(mediaTrackReceiver));\n this.emit('trackAdded', mediaTrackReceiver);\n }\n\n /**\n * Initiate ICE Restart.\n * @private\n * @returns {void}\n */\n _initiateIceRestart() {\n if (this._peerConnection.signalingState === 'closed') {\n return;\n }\n const log = this._log;\n log.warn('Attempting to restart ICE');\n this._didGenerateLocalCandidates = false;\n this._isIceRestartBackoffInProgress = false;\n this._shouldRestartIce = true;\n\n const { delay, isSet } = this._iceReconnectTimeout;\n if (!isSet) {\n log.debug(`Starting ICE reconnect timeout: ${delay}`);\n this._iceReconnectTimeout.start();\n }\n this.offer().catch(ex => {\n log.error(`offer failed in _initiateIceRestart with: ${ex.message}`);\n });\n }\n\n /**\n * Schedule an ICE Restart.\n * @private\n * @returns {void}\n */\n _initiateIceRestartBackoff() {\n if (this._peerConnection.signalingState === 'closed' || this._isIceRestartBackoffInProgress) {\n return;\n }\n this._log.warn('An ICE restart has been scheduled');\n this._isIceRestartBackoffInProgress = true;\n this._iceRestartBackoff.backoff(() => this._initiateIceRestart());\n }\n\n /**\n * Conditionally re-offer.\n * @private\n * @param {?RTCSessionDescriptionInit} localDescription\n * @returns {Promise}\n */\n _maybeReoffer(localDescription) {\n let shouldReoffer = this._shouldOffer;\n\n if (localDescription && localDescription.sdp) {\n // NOTE(mmalavalli): If the local RTCSessionDescription has fewer audio and/or\n // video send* m= lines than the corresponding RTCRtpSenders with non-null\n // MediaStreamTracks, it means that the newly added RTCRtpSenders require\n // renegotiation.\n const senders = this._peerConnection.getSenders().filter(sender => sender.track);\n shouldReoffer = ['audio', 'video'].reduce((shouldOffer, kind) => {\n const mediaSections = getMediaSections(localDescription.sdp, kind, '(sendrecv|sendonly)');\n const sendersOfKind = senders.filter(isSenderOfKind.bind(null, kind));\n return shouldOffer || (mediaSections.length < sendersOfKind.length);\n }, shouldReoffer);\n\n // NOTE(mroberts): We also need to re-offer if we have a DataTrack to share\n // but no m= application section.\n const hasDataTrack = this._dataChannels.size > 0;\n const hasApplicationMediaSection = getMediaSections(localDescription.sdp, 'application').length > 0;\n const needsApplicationMediaSection = hasDataTrack && !hasApplicationMediaSection;\n shouldReoffer = shouldReoffer || needsApplicationMediaSection;\n }\n\n const promise = shouldReoffer ? this._offer() : Promise.resolve();\n return promise.then(() => shouldReoffer);\n }\n\n /**\n * Create an offer and set it on the {@link PeerConnectionV2}.\n * @private\n * @returns {Promise}\n */\n _offer() {\n const offerOptions = Object.assign({}, this._offerOptions);\n this._needsAnswer = true;\n if (this._shouldRestartIce) {\n this._shouldRestartIce = false;\n this._isRestartingIce = true;\n offerOptions.iceRestart = true;\n }\n\n return Promise.all(this._replaceTrackPromises.values()).then(() => {\n return this._peerConnection.createOffer(offerOptions);\n }).catch(error => {\n const errorToThrow = new MediaClientLocalDescFailedError();\n this._publishMediaWarning({\n message: 'Failed to create offer',\n code: errorToThrow.code,\n error\n });\n throw errorToThrow;\n }).then(offer => {\n if (isFirefox) {\n // NOTE(mmalavalli): We work around Chromium bug 1106157 by disabling\n // RTX in Firefox 79+. For more details about the bug, please go here:\n // https://bugs.chromium.org/p/chromium/issues/detail?id=1106157\n offer = new this._RTCSessionDescription({\n sdp: disableRtx(offer.sdp),\n type: offer.type\n });\n } else {\n offer = workaroundIssue8329(offer);\n }\n\n // NOTE(mpatwardhan): upcoming chrome versions are going to remove ssrc attributes\n // mslabel and label. See this bug https://bugs.chromium.org/p/webrtc/issues/detail?id=7110\n // and PSA: https://groups.google.com/forum/#!searchin/discuss-webrtc/PSA%7Csort:date/discuss-webrtc/jcZO-Wj0Wus/k2XvPCvoAwAJ\n // Looks like we are not referencing those attributes, but this changes goes ahead and removes them to see if it works.\n // this also helps reduce bytes on wires\n let sdp = removeSSRCAttributes(offer.sdp, ['mslabel', 'label']);\n sdp = this._peerConnection.remoteDescription\n ? filterLocalCodecs(sdp, this._peerConnection.remoteDescription.sdp)\n : sdp;\n\n let updatedSdp = this._setCodecPreferences(\n sdp,\n this._preferredAudioCodecs,\n this._preferredVideoCodecs);\n\n this._shouldOffer = false;\n if (!this._negotiationRole) {\n this._negotiationRole = 'offerer';\n }\n\n if (this._shouldApplySimulcast) {\n this._localDescriptionWithoutSimulcast = {\n type: 'offer',\n sdp: updatedSdp\n };\n updatedSdp = this._setSimulcast(updatedSdp, this._trackIdsToAttributes);\n }\n return this._setLocalDescription({\n type: 'offer',\n sdp: updatedSdp\n });\n });\n }\n\n /**\n * Get the MediaTrackSender ID of the given MediaStreamTrack ID.\n * Since a MediaTrackSender's underlying MediaStreamTrack can be\n * replaced, the corresponding IDs can mismatch.\n * @private\n * @param {Track.ID} id\n * @returns {Track.ID}\n */\n _getMediaTrackSenderId(trackId) {\n const mediaTrackSender = Array.from(this._rtpSenders.keys()).find(({ track: { id } }) => id === trackId);\n return mediaTrackSender ? mediaTrackSender.id : trackId;\n }\n\n /**\n * Add or rewrite local MediaStreamTrack IDs in the given RTCSessionDescription.\n * @private\n * @param {RTCSessionDescription} description\n * @return {RTCSessionDescription}\n */\n _addOrRewriteLocalTrackIds(description) {\n const transceivers = this._peerConnection.getTransceivers();\n const activeTransceivers = transceivers.filter(({ sender, stopped }) => !stopped && sender && sender.track);\n\n // NOTE(mmalavalli): There is no guarantee that MediaStreamTrack IDs will be present in\n // SDPs, and even if they are, there is no guarantee that they will be the same as the\n // actual MediaStreamTrack IDs. So, we add or re-write the actual MediaStreamTrack IDs\n // to the assigned m= sections here.\n const assignedTransceivers = activeTransceivers.filter(({ mid }) => mid);\n const midsToTrackIds = new Map(assignedTransceivers.map(({ mid, sender }) => [mid, this._getMediaTrackSenderId(sender.track.id)]));\n const sdp1 = addOrRewriteTrackIds(description.sdp, midsToTrackIds);\n\n // NOTE(mmalavalli): Chrome and Safari do not apply the offer until they get an answer.\n // So, we add or re-write the actual MediaStreamTrack IDs to the unassigned m= sections here.\n const unassignedTransceivers = activeTransceivers.filter(({ mid }) => !mid);\n const newTrackIdsByKind = new Map(['audio', 'video'].map(kind => [\n kind,\n unassignedTransceivers.filter(({ sender }) => sender.track.kind === kind).map(({ sender }) => this._getMediaTrackSenderId(sender.track.id))\n ]));\n const sdp2 = addOrRewriteNewTrackIds(sdp1, midsToTrackIds, newTrackIdsByKind);\n\n return new this._RTCSessionDescription({\n sdp: sdp2,\n type: description.type\n });\n }\n\n /**\n * Rollback and apply the given offer.\n * @private\n * @param {RTCSessionDescriptionInit} offer\n * @returns {Promise}\n */\n _rollbackAndApplyOffer(offer) {\n return this._setLocalDescription({ type: 'rollback' }).then(() => this._setLocalDescription(offer));\n }\n\n /**\n * Set a local description on the {@link PeerConnectionV2}.\n * @private\n * @param {RTCSessionDescription|RTCSessionDescriptionInit} description\n * @returns {Promise}\n */\n _setLocalDescription(description) {\n if (description.type !== 'rollback' && this._shouldApplyDtx) {\n description = new this._RTCSessionDescription({\n sdp: enableDtxForOpus(description.sdp),\n type: description.type\n });\n }\n return this._peerConnection.setLocalDescription(description).catch(error => {\n this._log.warn(`Calling setLocalDescription with an RTCSessionDescription of type \"${description.type}\" failed with the error \"${error.message}\".`, error);\n\n const errorToThrow = new MediaClientLocalDescFailedError();\n const publishWarning = {\n message: `Calling setLocalDescription with an RTCSessionDescription of type \"${description.type}\" failed`,\n code: errorToThrow.code,\n error\n };\n\n if (description.sdp) {\n this._log.warn(`The SDP was ${description.sdp}`);\n publishWarning.sdp = description.sdp;\n }\n this._publishMediaWarning(publishWarning);\n throw errorToThrow;\n }).then(() => {\n if (description.type !== 'rollback') {\n this._localDescription = this._addOrRewriteLocalTrackIds(description);\n\n // NOTE(mmalavalli): In order for this feature to be backward compatible with older\n // SDK versions which to not support opus DTX, we append \"usedtx=1\" to the local SDP\n // only while applying it. We will not send it over the wire to prevent inadvertent\n // enabling of opus DTX in older SDKs. Newer SDKs will append \"usedtx=1\" by themselves\n // if the developer has requested opus DTX to be enabled. (JSDK-3063)\n if (this._shouldApplyDtx) {\n this._localDescription = new this._RTCSessionDescription({\n sdp: enableDtxForOpus(this._localDescription.sdp, []),\n type: this._localDescription.type\n });\n }\n\n this._localCandidates = [];\n if (description.type === 'offer') {\n this._descriptionRevision++;\n } else if (description.type === 'answer') {\n this._lastStableDescriptionRevision = this._descriptionRevision;\n negotiationCompleted(this);\n }\n this._localUfrag = getUfrag(description);\n this.emit('description', this.getState());\n }\n });\n }\n\n /**\n * Set a remote RTCSessionDescription on the {@link PeerConnectionV2}.\n * @private\n * @param {RTCSessionDescriptionInit} description\n * @returns {Promise}\n */\n _setRemoteDescription(description) {\n if (description.sdp) {\n description.sdp = this._setCodecPreferences(\n description.sdp,\n this._preferredAudioCodecs,\n this._preferredVideoCodecs);\n\n if (this._shouldApplyDtx) {\n description.sdp = enableDtxForOpus(description.sdp);\n } else {\n // NOTE(mmalavalli): Remove \"usedtx=1\" from opus's fmtp line if present\n // since DTX is disabled.\n description.sdp = enableDtxForOpus(description.sdp, []);\n }\n\n if (isFirefox) {\n // NOTE(mroberts): Do this to reduce our MediaStream count in Firefox. By\n // mapping MediaStream IDs in the SDP to \"-\", we ensure the \"track\" event\n // doesn't include any new MediaStreams in Firefox. Its `streams` member\n // will always be the empty Array.\n description.sdp = filterOutMediaStreamIds(description.sdp);\n }\n if (!this._peerConnection.remoteDescription) {\n this._isIceLite = /a=ice-lite/.test(description.sdp);\n }\n }\n description = new this._RTCSessionDescription(description);\n // eslint-disable-next-line consistent-return\n return Promise.resolve().then(() => {\n // NOTE(syerrapragada): VMS does not support H264 simulcast. So,\n // unset simulcast for sections in local offer where corresponding\n // sections in answer doesn't have vp8 as preferred codec and reapply offer.\n if (description.type === 'answer' && this._localDescriptionWithoutSimulcast) {\n // NOTE(mpatwardhan):if we were using adaptive simulcast, and if its not supported by server\n // revert simulcast even for vp8.\n const adaptiveSimulcastEntry = this._preferredVideoCodecs.find(cs => 'adaptiveSimulcast' in cs);\n const revertForAll = !!adaptiveSimulcastEntry && adaptiveSimulcastEntry.adaptiveSimulcast === false;\n const sdpWithoutSimulcastForNonVP8MediaSections = this._revertSimulcast(\n this._localDescription.sdp,\n this._localDescriptionWithoutSimulcast.sdp,\n description.sdp, revertForAll);\n this._localDescriptionWithoutSimulcast = null;\n if (sdpWithoutSimulcastForNonVP8MediaSections !== this._localDescription.sdp) {\n return this._rollbackAndApplyOffer({\n type: this._localDescription.type,\n sdp: sdpWithoutSimulcastForNonVP8MediaSections\n });\n }\n }\n }).then(() => this._peerConnection.setRemoteDescription(description)).then(() => {\n if (description.type === 'answer') {\n if (this._isRestartingIce) {\n this._log.debug('An ICE restart was in-progress and is now completed');\n this._isRestartingIce = false;\n }\n negotiationCompleted(this);\n }\n }, error => {\n this._log.warn(`Calling setRemoteDescription with an RTCSessionDescription of type \"${description.type}\" failed with the error \"${error.message}\".`, error);\n if (description.sdp) {\n this._log.warn(`The SDP was ${description.sdp}`);\n }\n throw error;\n });\n }\n\n /**\n * Update the {@link PeerConnectionV2}'s description.\n * @private\n * @param {RTCSessionDescriptionInit} description\n * @returns {Promise}\n */\n _updateDescription(description) {\n switch (description.type) {\n case 'answer':\n case 'pranswer':\n if (description.revision !== this._descriptionRevision\n || this._peerConnection.signalingState !== 'have-local-offer') {\n return Promise.resolve();\n }\n this._descriptionRevision = description.revision;\n break;\n case 'close':\n return this._close();\n case 'create-offer':\n if (description.revision <= this._lastStableDescriptionRevision) {\n return Promise.resolve();\n } else if (this._needsAnswer) {\n this._queuedDescription = description;\n return Promise.resolve();\n }\n this._descriptionRevision = description.revision;\n return this._offer();\n case 'offer':\n if (description.revision <= this._lastStableDescriptionRevision\n || this._peerConnection.signalingState === 'closed') {\n return Promise.resolve();\n }\n if (this._peerConnection.signalingState === 'have-local-offer') {\n // NOTE(mpatwardhan): For a peer connection\n // 1) createOffer always generate SDP with `setup:actpass`\n // 2) when remote description is set `setup:active` - the answer generated selects the dtls role of setup:passive\n // 3) when remote description is set `setup:passive` - the answer generated selects the dtls role of setup:active\n // 4) when remote description is set `setup:actpass` - the answer generated uses the previously negotiated role (if not negotiated previously setup:active is used)\n // This test shows the behavior: https://github.com/twilio/twilio-webrtc.js/blob/master/test/integration/spec/rtcpeerconnection.js#L936\n // with glare handling (if dtls role was not negotiated before ) the generated answer will set setup:active.\n // we do not want that. lets wait for \"initial negotiation\" before attempting glare handling.\n if (this._needsAnswer && this._lastStableDescriptionRevision === 0) {\n this._queuedDescription = description;\n return Promise.resolve();\n }\n this._descriptionRevision = description.revision;\n return this._handleGlare(description);\n }\n this._descriptionRevision = description.revision;\n return this._answer(description).then(() => {});\n default:\n // Do nothing.\n }\n\n // Handle answer or pranswer.\n const revision = description.revision;\n return Promise.resolve().then(() => {\n return this._setRemoteDescription(description);\n }).catch(error => {\n const errorToThrow = new MediaClientRemoteDescFailedError();\n this._publishMediaWarning({\n message: `Calling setRemoteDescription with an RTCSessionDescription of type \"${description.type}\" failed`,\n code: errorToThrow.code,\n error,\n sdp: description.sdp\n });\n throw errorToThrow;\n }).then(() => {\n this._lastStableDescriptionRevision = revision;\n this._needsAnswer = false;\n return this._checkIceBox(description);\n }).then(() => {\n return this._queuedDescription\n && this._updateDescription(this._queuedDescription);\n }).then(() => {\n this._queuedDescription = null;\n return this._maybeReoffer(this._peerConnection.localDescription).then(() => {});\n });\n }\n\n /**\n * Update the {@link PeerConnectionV2}'s ICE candidates.\n * @private\n * @param {object} iceState\n * @returns {Promise}\n */\n _updateIce(iceState) {\n const candidates = this._remoteCandidates.update(iceState);\n return this._addIceCandidates(candidates);\n }\n\n /**\n * Add a {@link DataTrackSender} to the {@link PeerConnectionV2}.\n * @param {DataTrackSender} dataTrackSender\n * @returns {void}\n */\n addDataTrackSender(dataTrackSender) {\n if (this._dataChannels.has(dataTrackSender)) {\n return;\n }\n try {\n const dataChannelDict = {\n ordered: dataTrackSender.ordered\n };\n if (dataTrackSender.maxPacketLifeTime !== null) {\n dataChannelDict.maxPacketLifeTime = dataTrackSender.maxPacketLifeTime;\n }\n if (dataTrackSender.maxRetransmits !== null) {\n dataChannelDict.maxRetransmits = dataTrackSender.maxRetransmits;\n }\n const dataChannel = this._peerConnection.createDataChannel(dataTrackSender.id, dataChannelDict);\n dataTrackSender.addDataChannel(dataChannel);\n this._dataChannels.set(dataTrackSender, dataChannel);\n } catch (error) {\n this._log.warn(`Error creating an RTCDataChannel for DataTrack \"${dataTrackSender.id}\": ${error.message}`);\n }\n }\n\n _handleQueuedPublisherHints() {\n if (this._peerConnection.signalingState === 'stable') {\n this._mediaTrackSenderToPublisherHints.forEach(({ deferred, encodings }, mediaTrackSender) => {\n this._mediaTrackSenderToPublisherHints.delete(mediaTrackSender);\n this._setPublisherHint(mediaTrackSender, encodings)\n .then(result => deferred.resolve(result))\n .catch(error => deferred.reject(error));\n });\n }\n }\n\n /**\n * updates encodings for simulcast layers of given sender.\n * @param {RTCRtpSender} sender\n * @param {Array<{enabled: boolean, layer_index: number}>|null} encodings\n * @returns {Promise} string indicating result of the operation. can be one of\n * \"OK\", \"INVALID_HINT\", \"COULD_NOT_APPLY_HINT\", \"UNKNOWN_TRACK\"\n */\n _setPublisherHint(mediaTrackSender, encodings) {\n if (isFirefox) {\n return Promise.resolve('COULD_NOT_APPLY_HINT');\n }\n\n if (this._mediaTrackSenderToPublisherHints.has(mediaTrackSender)) {\n // skip any stale hint associated with the mediaTrackSender.\n const queuedHint = this._mediaTrackSenderToPublisherHints.get(mediaTrackSender);\n queuedHint.deferred.resolve('REQUEST_SKIPPED');\n this._mediaTrackSenderToPublisherHints.delete(mediaTrackSender);\n }\n\n const sender = this._rtpSenders.get(mediaTrackSender);\n if (!sender) {\n this._log.warn('Could not apply publisher hint because RTCRtpSender was not found');\n return Promise.resolve('UNKNOWN_TRACK');\n }\n\n if (this._peerConnection.signalingState === 'closed') {\n this._log.warn('Could not apply publisher hint because signalingState was \"closed\"');\n return Promise.resolve('COULD_NOT_APPLY_HINT');\n }\n\n if (this._peerConnection.signalingState !== 'stable') {\n // enqueue this hint to be applied when pc becomes stable.\n this._log.debug('Queuing up publisher hint because signalingState:', this._peerConnection.signalingState);\n const deferred = defer();\n this._mediaTrackSenderToPublisherHints.set(mediaTrackSender, { deferred, encodings });\n return deferred.promise;\n }\n\n const parameters = sender.getParameters();\n if (encodings !== null) {\n encodings.forEach(({ enabled, layer_index: layerIndex }) => {\n if (parameters.encodings.length > layerIndex) {\n this._log.debug(`layer:${layerIndex}, active:${parameters.encodings[layerIndex].active} => ${enabled}`);\n parameters.encodings[layerIndex].active = enabled;\n } else {\n this._log.warn(`invalid layer:${layerIndex}, active:${enabled}`);\n }\n });\n }\n\n // Note(mpatwardhan): after publisher hints are applied, overwrite with default encodings\n // to disable any encoding that shouldn't have been enabled by publisher_hints.\n // When encodings===null (that is we are asked to reset encodings for replaceTrack)\n // along with disabling encodings, clear active flag for encodings that should not be disabled\n this._maybeUpdateEncodings(sender.track, parameters.encodings, encodings === null /* trackReplaced */);\n\n return sender.setParameters(parameters).then(() => 'OK').catch(error => {\n this._log.error('Failed to apply publisher hints:', error);\n return 'COULD_NOT_APPLY_HINT';\n });\n }\n\n /**\n * Add the {@link MediaTrackSender} to the {@link PeerConnectionV2}.\n * @param {MediaTrackSender} mediaTrackSender\n * @returns {void}\n */\n addMediaTrackSender(mediaTrackSender) {\n if (this._peerConnection.signalingState === 'closed' || this._rtpSenders.has(mediaTrackSender)) {\n return;\n }\n const transceiver = this._addOrUpdateTransceiver(mediaTrackSender.track);\n const { sender } = transceiver;\n mediaTrackSender.addSender(sender, encodings => this._setPublisherHint(mediaTrackSender, encodings));\n this._rtpNewSenders.add(sender);\n this._rtpSenders.set(mediaTrackSender, sender);\n }\n\n /**\n * Close the {@link PeerConnectionV2}.\n * @returns {void}\n */\n close() {\n if (this._close()) {\n this._descriptionRevision++;\n this._localDescription = { type: 'close' };\n this.emit('description', this.getState());\n }\n }\n\n /**\n * Get the {@link DataTrackReceiver}s and the {@link MediaTrackReceiver}s on the\n * {@link PeerConnectionV2}.\n * @returns {Array} trackReceivers\n */\n getTrackReceivers() {\n return Array.from(this._dataTrackReceivers).concat(Array.from(this._mediaTrackReceivers));\n }\n\n /**\n * Get the {@link PeerConnectionV2}'s state (specifically, its description).\n * @returns {?object}\n */\n getState() {\n if (!this._localDescription) {\n return null;\n }\n\n // NOTE(mpatwardhan): Return most recent localDescription. If the most recent local description is an\n // answer, and this method is called for sending a \"sync\" message while the next remote offer is being processed,\n // we need to send the most recent stable description revision instead of the current description revision,\n // which is supposed to be for the next local answer.\n const localDescriptionRevision = this._localDescription.type === 'answer' ? this._lastStableDescriptionRevision : this._descriptionRevision;\n const localDescription = {\n type: this._localDescription.type,\n revision: localDescriptionRevision\n };\n if (this._localDescription.sdp) {\n localDescription.sdp = this._localDescription.sdp;\n }\n return {\n description: localDescription,\n id: this.id\n };\n }\n\n /**\n * Create an offer and set it on the {@link PeerConnectionV2}.\n * @returns {Promise}\n */\n offer() {\n if (this._needsAnswer || this._isRestartingIce) {\n this._shouldOffer = true;\n return Promise.resolve();\n }\n\n return this.bracket('offering', key => {\n this.transition('updating', key);\n const promise = this._needsAnswer || this._isRestartingIce ? Promise.resolve() : this._offer();\n return promise.then(() => {\n this.tryTransition('open', key);\n }, error => {\n this.tryTransition('open', key);\n throw error;\n });\n });\n }\n\n /**\n * Remove a {@link DataTrackSender} from the {@link PeerConnectionV2}.\n * @param {DataTrackSender} dataTrackSender\n * @returns {void}\n */\n removeDataTrackSender(dataTrackSender) {\n const dataChannel = this._dataChannels.get(dataTrackSender);\n if (dataChannel) {\n dataTrackSender.removeDataChannel(dataChannel);\n this._dataChannels.delete(dataTrackSender);\n dataChannel.close();\n }\n }\n\n /**\n * Remove the {@link MediaTrackSender} from the {@link PeerConnectionV2}.\n * @param {MediaTrackSender} mediaTrackSender\n * @returns {void}\n */\n removeMediaTrackSender(mediaTrackSender) {\n const sender = this._rtpSenders.get(mediaTrackSender);\n if (!sender) {\n return;\n }\n if (this._peerConnection.signalingState !== 'closed') {\n this._peerConnection.removeTrack(sender);\n }\n mediaTrackSender.removeSender(sender);\n // clean up any pending publisher hints associated with this mediaTrackSender.\n if (this._mediaTrackSenderToPublisherHints.has(mediaTrackSender)) {\n const queuedHint = this._mediaTrackSenderToPublisherHints.get(mediaTrackSender);\n queuedHint.deferred.resolve('UNKNOWN_TRACK');\n this._mediaTrackSenderToPublisherHints.delete(mediaTrackSender);\n }\n this._rtpNewSenders.delete(sender);\n this._rtpSenders.delete(mediaTrackSender);\n }\n\n /**\n * Set the RTCConfiguration on the underlying RTCPeerConnection.\n * @param {RTCConfiguration} configuration\n * @returns {void}\n */\n setConfiguration(configuration) {\n if (typeof this._peerConnection.setConfiguration === 'function') {\n this._peerConnection.setConfiguration(getConfiguration(configuration));\n }\n }\n\n /**\n * Set the ICE reconnect timeout period.\n * @param {number} period - Period in milliseconds.\n * @returns {this}\n */\n setIceReconnectTimeout(period) {\n this._iceReconnectTimeout.setDelay(period);\n this._log.debug('Updated ICE reconnection timeout period:',\n this._iceReconnectTimeout.delay);\n return this;\n }\n\n /**\n * Update the {@link PeerConnectionV2}.\n * @param {object} peerConnectionState\n * @returns {Promise}\n */\n update(peerConnectionState) {\n return this.bracket('updating', key => {\n if (this.state === 'closed') {\n return Promise.resolve();\n }\n\n this.transition('updating', key);\n\n const updates = [];\n\n if (peerConnectionState.ice) {\n updates.push(this._updateIce(peerConnectionState.ice));\n }\n\n if (peerConnectionState.description) {\n updates.push(this._updateDescription(peerConnectionState.description));\n }\n\n return Promise.all(updates).then(() => {\n this.tryTransition('open', key);\n }, error => {\n this.tryTransition('open', key);\n throw error;\n });\n });\n }\n\n /**\n * Get the {@link PeerConnectionV2}'s media statistics.\n * @returns {Promise}\n */\n getStats() {\n return getStatistics(this._peerConnection).then(response => rewriteTrackIds(this, response));\n }\n}\n\nfunction rewriteLocalTrackId(pcv2, stats) {\n const trackId = pcv2._getMediaTrackSenderId(stats.trackId);\n return Object.assign(stats, { trackId });\n}\n\nfunction rewriteTrackId(pcv2, stats) {\n const receiver = [...pcv2._mediaTrackReceivers]\n .find(receiver => receiver.track.id === stats.trackId);\n const trackId = receiver ? receiver.id : null;\n return Object.assign(stats, { trackId });\n}\n\nfunction rewriteTrackIds(pcv2, response) {\n return Object.assign(response, {\n remoteAudioTrackStats: response.remoteAudioTrackStats.map(stats => rewriteTrackId(pcv2, stats)),\n remoteVideoTrackStats: response.remoteVideoTrackStats.map(stats => rewriteTrackId(pcv2, stats)),\n localAudioTrackStats: response.localAudioTrackStats.map(stats => rewriteLocalTrackId(pcv2, stats)),\n localVideoTrackStats: response.localVideoTrackStats.map(stats => rewriteLocalTrackId(pcv2, stats)),\n });\n}\n\n/**\n * @event PeerConnectionV2#candidates\n * @param {object} candidates\n */\n\n/**\n * @event PeerConnectionV2#connectionStateChanged\n */\n\n/**\n * @event PeerConnectionV2#description\n * @param {object} description\n */\n\n/**\n * @event PeerConnectionV2#iceConnectionStateChanged\n */\n\n/**\n * @event PeerConnectionV2#trackAdded\n * @param {DataTrackReceiver|MediaTrackReceiver} trackReceiver\n */\n\nfunction getUfrag(description) {\n if (description.sdp) {\n const match = description.sdp.match(/^a=ice-ufrag:([a-zA-Z0-9+/]+)/m);\n if (match) {\n return match[1];\n }\n }\n return null;\n}\n\nfunction getConfiguration(configuration) {\n return Object.assign({\n bundlePolicy: 'max-bundle',\n rtcpMuxPolicy: 'require'\n }, configuration);\n}\n\n/**\n * Whether the MediaStreamTrack of the given RTCRTPSender is a non-ended\n * MediaStreamTrack of a given kind.\n * @private\n * @param {string} kind\n * @param {RTCRtpSender} sender\n * @return {boolean}\n */\nfunction isSenderOfKind(kind, sender) {\n const track = sender.track;\n return track && track.kind === kind && track.readyState !== 'ended';\n}\n\n/**\n * Preferred codecs.\n * @typedef {object} PreferredCodecs\n * @property {Array} audio\n * @property {Array} video\n */\n\nfunction filterOutMediaStreamIds(sdp) {\n return sdp.replace(/a=msid:[^ ]+ /g, 'a=msid:- ');\n}\n\n/**\n * Whether an RTCRtpTransceiver can be recycled.\n * @param {RTCRtpTransceiver} transceiver\n * @returns {boolean}\n */\nfunction shouldRecycleTransceiver(transceiver, pcv2) {\n return !transceiver.stopped\n && !pcv2._replaceTrackPromises.has(transceiver)\n && ['inactive', 'recvonly'].includes(transceiver.direction);\n}\n\n/**\n * Take a recycled RTCRtpTransceiver if available.\n * @param {PeerConnectionV2} pcv2\n * @param {Track.Kind} kind\n * @returns {?RTCRtpTransceiver}\n */\nfunction takeRecycledTransceiver(pcv2, kind) {\n const preferredCodecs = {\n audio: pcv2._preferredAudioCodecs.map(({ codec }) => codec.toLowerCase()),\n video: pcv2._preferredVideoCodecs.map(({ codec }) => codec.toLowerCase())\n }[kind];\n\n const recycledTransceivers = pcv2._recycledTransceivers[kind];\n const localCodec = preferredCodecs.find(codec => pcv2._localCodecs.has(codec));\n if (!localCodec) {\n return recycledTransceivers.shift();\n }\n\n const transceiver = recycledTransceivers.find(transceiver => {\n const remoteCodecMap = pcv2._remoteCodecMaps.get(transceiver.mid);\n return remoteCodecMap && remoteCodecMap.has(localCodec);\n });\n\n if (transceiver) {\n recycledTransceivers.splice(recycledTransceivers.indexOf(transceiver), 1);\n }\n return transceiver;\n}\n\n/**\n * Update the set of locally supported {@link Codec}s.\n * @param pcv2\n * @returns {void}\n */\nfunction updateLocalCodecs(pcv2) {\n const description = pcv2._peerConnection.localDescription;\n if (!description || !description.sdp) {\n return;\n }\n getMediaSections(description.sdp).forEach(section => {\n const codecMap = createCodecMapForMediaSection(section);\n codecMap.forEach((pts, codec) => pcv2._localCodecs.add(codec));\n });\n}\n\n/**\n * Update the {@link Codec} maps for all m= sections in the remote {@link RTCSessionDescription}s.\n * @param {PeerConnectionV2} pcv2\n * @returns {void}\n */\nfunction updateRemoteCodecMaps(pcv2) {\n const description = pcv2._peerConnection.remoteDescription;\n if (!description || !description.sdp) {\n return;\n }\n getMediaSections(description.sdp).forEach(section => {\n const matched = section.match(/^a=mid:(.+)$/m);\n if (!matched || !matched[1]) {\n return;\n }\n const mid = matched[1];\n const codecMap = createCodecMapForMediaSection(section);\n pcv2._remoteCodecMaps.set(mid, codecMap);\n });\n}\n\n/**\n * Update the list of recycled RTCRtpTransceivers.\n * @param {PeerConnectionV2} pcv2\n */\nfunction updateRecycledTransceivers(pcv2) {\n pcv2._recycledTransceivers.audio = [];\n pcv2._recycledTransceivers.video = [];\n pcv2._peerConnection.getTransceivers().forEach(transceiver => {\n if (shouldRecycleTransceiver(transceiver, pcv2)) {\n const track = transceiver.receiver.track;\n pcv2._recycledTransceivers[track.kind].push(transceiver);\n }\n });\n}\n\n/**\n * Perform certain updates after an SDP negotiation is completed.\n * @param {PeerConnectionV2} pcv2\n * @returns {void}\n */\nfunction negotiationCompleted(pcv2) {\n updateRecycledTransceivers(pcv2);\n updateLocalCodecs(pcv2);\n updateRemoteCodecMaps(pcv2);\n updateEncodingParameters(pcv2).then(() => {\n // if there any any publisher hints queued, apply them now.\n pcv2._handleQueuedPublisherHints();\n });\n}\n\n/**\n * Update the RTCRtpEncodingParameters of all active RTCRtpSenders.\n * @param {PeerConnectionV2} pcv2\n * @returns {void}\n */\nfunction updateEncodingParameters(pcv2) {\n const { maxAudioBitrate, maxVideoBitrate } = pcv2._encodingParameters;\n\n const maxBitrates = new Map([\n ['audio', maxAudioBitrate],\n ['video', maxVideoBitrate]\n ]);\n\n const promises = [];\n pcv2._peerConnection.getSenders().filter(sender => sender.track).forEach(sender => {\n const maxBitrate = maxBitrates.get(sender.track.kind);\n const params = sender.getParameters();\n\n if (maxBitrate === null || maxBitrate === 0) {\n removeMaxBitrate(params);\n } else if (pcv2._isChromeScreenShareTrack(sender.track)) {\n // NOTE(mpatwardhan): Sometimes (JSDK-2557) chrome does not send any bytes on screen track if MaxBitRate is set on it via setParameters,\n // To workaround this issue we will not apply maxBitrate if the track appears to be a screen share track created by chrome\n pcv2._log.warn(`Not setting maxBitrate for ${sender.track.kind} Track ${sender.track.id} because it appears to be screen share track: ${sender.track.label}`);\n } else {\n setMaxBitrate(params, maxBitrate);\n }\n\n if (!isFirefox && params.encodings.length > 0) {\n if (sender.track.kind === 'audio') {\n // NOTE(mmalavalli): \"priority\" is a per-sender property and not\n // a per-encoding-layer property. So, we set the value only on the first\n // encoding layer. Any attempt to set the value on subsequent encoding\n // layers (in the case of simulcast) will result in the Promise returned\n // by RTCRtpSender.setParameters() being rejected. With this, audio encoding\n // is prioritized the most.\n params.encodings[0].priority = 'high';\n } else if (pcv2._isChromeScreenShareTrack(sender.track)) {\n // NOTE(mmalavalli): Screen share encodings are prioritized more than those\n // of the camera.\n params.encodings[0].priority = 'medium';\n }\n if (pcv2._enableDscp) {\n // NOTE(mmalavalli): \"networkPriority\" is a per-sender property and not\n // a per-encoding-layer property. So, we set the value only on the first\n // encoding layer. Any attempt to set the value on subsequent encoding\n // layers (in the case of simulcast) will result in the Promise returned\n // by RTCRtpSender.setParameters() being rejected.\n params.encodings[0].networkPriority = 'high';\n }\n }\n\n // when a sender is reused, delete any active encodings set by server.\n const trackReplaced = pcv2._rtpNewSenders.has(sender);\n pcv2._maybeUpdateEncodings(sender.track, params.encodings, trackReplaced);\n pcv2._rtpNewSenders.delete(sender);\n\n const promise = sender.setParameters(params).catch(error => {\n pcv2._log.warn(`Error while setting encodings parameters for ${sender.track.kind} Track ${sender.track.id}: ${error.message || error.name}`);\n });\n promises.push(promise);\n });\n return Promise.all(promises);\n}\n\n/**\n * Remove maxBitrate from the RTCRtpSendParameters' encodings.\n * @param {RTCRtpSendParameters} params\n * @returns {void}\n */\nfunction removeMaxBitrate(params) {\n if (Array.isArray(params.encodings)) {\n params.encodings.forEach(encoding => delete encoding.maxBitrate);\n }\n}\n\n/**\n * Set the given maxBitrate in the RTCRtpSendParameters' encodings.\n * @param {RTCRtpSendParameters} params\n * @param {number} maxBitrate\n * @returns {void}\n */\nfunction setMaxBitrate(params, maxBitrate) {\n if (isFirefox) {\n params.encodings = [{ maxBitrate }];\n } else {\n params.encodings.forEach(encoding => {\n encoding.maxBitrate = maxBitrate;\n });\n }\n}\nmodule.exports = PeerConnectionV2;\n","'use strict';\n\nconst { guessBrowser } = require('../../webrtc/util');\nconst PeerConnectionV2 = require('./peerconnection');\nconst MediaTrackSender = require('../../media/track/sender');\nconst QueueingEventEmitter = require('../../queueingeventemitter');\nconst util = require('../../util');\nconst { MediaConnectionError } = require('../../util/twilio-video-errors');\n\nconst isFirefox = guessBrowser() === 'firefox';\n\n/**\n * {@link PeerConnectionManager} manages multiple {@link PeerConnectionV2}s.\n * @extends QueueingEventEmitter\n * @emits PeerConnectionManager#candidates\n * @emits PeerConnectionManager#connectionStateChanged\n * @emits PeerConnectionManager#description\n * @emits PeerConnectionManager#iceConnectionStateChanged\n * @emits PeerConnectionManager#trackAdded\n */\nclass PeerConnectionManager extends QueueingEventEmitter {\n /**\n * Construct {@link PeerConnectionManager}.\n * @param {EncodingParametersImpl} encodingParameters\n * @param {PreferredCodecs} preferredCodecs\n * @param {object} options\n */\n constructor(encodingParameters, preferredCodecs, options) {\n super();\n\n options = Object.assign({\n audioContextFactory: isFirefox\n ? require('../../webaudio/audiocontext')\n : null,\n PeerConnectionV2\n }, options);\n\n const audioContext = options.audioContextFactory\n ? options.audioContextFactory.getOrCreate(this)\n : null;\n\n // NOTE(mroberts): If we're using an AudioContext, we don't need to specify\n // `offerToReceiveAudio` in RTCOfferOptions.\n const offerOptions = audioContext\n ? { offerToReceiveVideo: true }\n : { offerToReceiveAudio: true, offerToReceiveVideo: true };\n\n Object.defineProperties(this, {\n _audioContextFactory: {\n value: options.audioContextFactory\n },\n _closedPeerConnectionIds: {\n value: new Set()\n },\n _configuration: {\n writable: true,\n value: null\n },\n _configurationDeferred: {\n writable: true,\n value: util.defer()\n },\n _connectionState: {\n value: 'new',\n writable: true\n },\n _dummyAudioTrackSender: {\n value: audioContext\n ? new MediaTrackSender(createDummyAudioMediaStreamTrack(audioContext))\n : null\n },\n _encodingParameters: {\n value: encodingParameters\n },\n _iceConnectionState: {\n writable: true,\n value: 'new'\n },\n _dataTrackSenders: {\n writable: true,\n value: new Set()\n },\n _lastConnectionState: {\n value: 'new',\n writable: true\n },\n _lastIceConnectionState: {\n writable: true,\n value: 'new'\n },\n _mediaTrackSenders: {\n writable: true,\n value: new Set()\n },\n _offerOptions: {\n value: offerOptions\n },\n _peerConnections: {\n value: new Map()\n },\n _preferredCodecs: {\n value: preferredCodecs\n },\n _sessionTimeout: {\n value: null,\n writable: true\n },\n _PeerConnectionV2: {\n value: options.PeerConnectionV2\n }\n });\n }\n\n setEffectiveAdaptiveSimulcast(effectiveAdaptiveSimulcast) {\n this._peerConnections.forEach(pc => pc.setEffectiveAdaptiveSimulcast(effectiveAdaptiveSimulcast));\n this._preferredCodecs.video.forEach(cs => {\n if ('adaptiveSimulcast' in cs) {\n cs.adaptiveSimulcast = effectiveAdaptiveSimulcast;\n }\n });\n }\n\n /**\n * A summarized RTCPeerConnectionState across all the\n * {@link PeerConnectionManager}'s underlying {@link PeerConnectionV2}s.\n * @property {RTCPeerConnectionState}\n */\n get connectionState() {\n return this._connectionState;\n }\n\n /**\n * A summarized RTCIceConnectionState across all the\n * {@link PeerConnectionManager}'s underlying {@link PeerConnectionV2}s.\n * @property {RTCIceConnectionState}\n */\n get iceConnectionState() {\n return this._iceConnectionState;\n }\n\n /**\n * Close the {@link PeerConnectionV2}s which are no longer relevant.\n * @param {Array} peerConnectionStates\n * @returns {this}\n */\n _closeAbsentPeerConnections(peerConnectionStates) {\n const peerConnectionIds = new Set(peerConnectionStates.map(peerConnectionState => peerConnectionState.id));\n this._peerConnections.forEach(peerConnection => {\n if (!peerConnectionIds.has(peerConnection.id)) {\n peerConnection._close();\n }\n });\n return this;\n }\n\n /**\n * Get the {@link PeerConnectionManager}'s configuration.\n * @private\n * @returns {Promise}\n */\n _getConfiguration() {\n return this._configurationDeferred.promise;\n }\n\n /**\n * Get or create a {@link PeerConnectionV2}.\n * @private\n * @param {string} id\n * @param {object} [configuration]\n * @returns {PeerConnectionV2}\n */\n _getOrCreate(id, configuration) {\n const self = this;\n let peerConnection = this._peerConnections.get(id);\n if (!peerConnection) {\n const PeerConnectionV2 = this._PeerConnectionV2;\n\n const options = Object.assign({\n dummyAudioMediaStreamTrack: this._dummyAudioTrackSender\n ? this._dummyAudioTrackSender.track\n : null,\n offerOptions: this._offerOptions\n }, this._sessionTimeout ? {\n sessionTimeout: this._sessionTimeout\n } : {}, configuration);\n\n try {\n peerConnection = new PeerConnectionV2(id, this._encodingParameters, this._preferredCodecs, options);\n } catch (e) {\n throw new MediaConnectionError();\n }\n\n this._peerConnections.set(peerConnection.id, peerConnection);\n peerConnection.on('candidates', this.queue.bind(this, 'candidates'));\n peerConnection.on('description', this.queue.bind(this, 'description'));\n peerConnection.on('trackAdded', this.queue.bind(this, 'trackAdded'));\n peerConnection.on('stateChanged', function stateChanged(state) {\n if (state === 'closed') {\n peerConnection.removeListener('stateChanged', stateChanged);\n self._dataTrackSenders.forEach(sender => peerConnection.removeDataTrackSender(sender));\n self._mediaTrackSenders.forEach(sender => peerConnection.removeMediaTrackSender(sender));\n self._peerConnections.delete(peerConnection.id);\n self._closedPeerConnectionIds.add(peerConnection.id);\n updateConnectionState(self);\n updateIceConnectionState(self);\n }\n });\n peerConnection.on('connectionStateChanged', () => updateConnectionState(this));\n peerConnection.on('iceConnectionStateChanged', () => updateIceConnectionState(this));\n\n this._dataTrackSenders.forEach(peerConnection.addDataTrackSender, peerConnection);\n this._mediaTrackSenders.forEach(peerConnection.addMediaTrackSender, peerConnection);\n\n updateIceConnectionState(this);\n }\n return peerConnection;\n }\n\n /**\n * Close all the {@link PeerConnectionV2}s in this {@link PeerConnectionManager}.\n * @returns {this}\n */\n close() {\n this._peerConnections.forEach(peerConnection => {\n peerConnection.close();\n });\n if (this._dummyAudioTrackSender) {\n this._dummyAudioTrackSender.stop();\n }\n if (this._audioContextFactory) {\n this._audioContextFactory.release(this);\n }\n updateIceConnectionState(this);\n return this;\n }\n\n /**\n * Create a new {@link PeerConnectionV2} on this {@link PeerConnectionManager}.\n * Then, create a new offer with the newly-created {@link PeerConnectionV2}.\n * @return {Promise}\n */\n createAndOffer() {\n return this._getConfiguration().then(configuration => {\n let id;\n do {\n id = util.makeUUID();\n } while (this._peerConnections.has(id));\n\n return this._getOrCreate(id, configuration);\n }).then(peerConnection => {\n return peerConnection.offer();\n }).then(() => {\n return this;\n });\n }\n\n /**\n * Get the {@link DataTrackReceiver}s and {@link MediaTrackReceiver}s of all\n * the {@link PeerConnectionV2}s.\n * @returns {Array} trackReceivers\n */\n getTrackReceivers() {\n return util.flatMap(this._peerConnections, peerConnection => peerConnection.getTrackReceivers());\n }\n\n /**\n * Get the states of all {@link PeerConnectionV2}s.\n * @returns {Array}\n */\n getStates() {\n const peerConnectionStates = [];\n this._peerConnections.forEach(peerConnection => {\n const peerConnectionState = peerConnection.getState();\n if (peerConnectionState) {\n peerConnectionStates.push(peerConnectionState);\n }\n });\n return peerConnectionStates;\n }\n\n /**\n * Set the {@link PeerConnectionManager}'s configuration.\n * @param {object} configuration\n * @returns {this}\n */\n setConfiguration(configuration) {\n if (this._configuration) {\n this._configurationDeferred = util.defer();\n this._peerConnections.forEach(peerConnection => {\n peerConnection.setConfiguration(configuration);\n });\n }\n this._configuration = configuration;\n this._configurationDeferred.resolve(configuration);\n return this;\n }\n\n /**\n * Set the ICE reconnect timeout period for all {@link PeerConnectionV2}s.\n * @param {number} period - Period in milliseconds.\n * @returns {this}\n */\n setIceReconnectTimeout(period) {\n if (this._sessionTimeout === null) {\n this._peerConnections.forEach(peerConnection => {\n peerConnection.setIceReconnectTimeout(period);\n });\n this._sessionTimeout = period;\n }\n return this;\n }\n\n /**\n * Set the {@link DataTrackSender}s and {@link MediaTrackSender}s on the\n * {@link PeerConnectionManager}'s underlying {@link PeerConnectionV2}s.\n * @param {Array} trackSenders\n * @returns {this}\n */\n setTrackSenders(trackSenders) {\n const dataTrackSenders = new Set(trackSenders.filter(trackSender => trackSender.kind === 'data'));\n\n const mediaTrackSenders = new Set(trackSenders\n .filter(trackSender => trackSender && (trackSender.kind === 'audio' || trackSender.kind === 'video')));\n\n const changes = getTrackSenderChanges(this, dataTrackSenders, mediaTrackSenders);\n this._dataTrackSenders = dataTrackSenders;\n this._mediaTrackSenders = mediaTrackSenders;\n applyTrackSenderChanges(this, changes);\n\n return this;\n }\n\n /**\n * Update the {@link PeerConnectionManager}.\n * @param {Array} peerConnectionStates\n * @param {boolean} [synced=false]\n * @returns {Promise}\n */\n update(peerConnectionStates, synced = false) {\n if (synced) {\n this._closeAbsentPeerConnections(peerConnectionStates);\n }\n return this._getConfiguration().then(configuration => {\n return Promise.all(peerConnectionStates.map(peerConnectionState => {\n if (this._closedPeerConnectionIds.has(peerConnectionState.id)) {\n return null;\n }\n const peerConnection = this._getOrCreate(peerConnectionState.id, configuration);\n return peerConnection.update(peerConnectionState);\n }));\n }).then(() => {\n return this;\n });\n }\n\n /**\n * Get the {@link PeerConnectionManager}'s media statistics.\n * @returns {Promise.>}\n */\n getStats() {\n const peerConnections = Array.from(this._peerConnections.values());\n return Promise.all(peerConnections.map(peerConnection => peerConnection.getStats().then(response => [\n peerConnection.id,\n response\n ]))).then(responses => new Map(responses));\n }\n}\n\n/**\n * Create a dummy audio MediaStreamTrack with the given AudioContext.\n * @private\n * @param {AudioContext} audioContext\n * @return {MediaStreamTrack}\n */\nfunction createDummyAudioMediaStreamTrack(audioContext) {\n const mediaStreamDestination = audioContext.createMediaStreamDestination();\n return mediaStreamDestination.stream.getAudioTracks()[0];\n}\n\n/**\n * @event {PeerConnectionManager#candidates}\n * @param {object} candidates\n */\n\n/**\n * @event {PeerConnectionManager#connectionStateChanged}\n */\n\n/**\n * @event {PeerConnectionManager#description}\n * @param {object} description\n */\n\n/**\n * @event {PeerConnectionManager#iceConnectionStateChanged}\n */\n\n/**\n * @event {PeerConnectionManager#trackAdded}\n * @param {MediaStreamTrack|DataTrackReceiver} mediaStreamTrackOrDataTrackReceiver\n */\n\n/**\n * Apply {@link TrackSenderChanges}.\n * @param {PeerConnectionManager} peerConnectionManager\n * @param {TrackSenderChanges} changes\n * @returns {void}\n */\nfunction applyTrackSenderChanges(peerConnectionManager, changes) {\n if (changes.data.add.size\n || changes.data.remove.size\n || changes.media.add.size\n || changes.media.remove.size) {\n peerConnectionManager._peerConnections.forEach(peerConnection => {\n changes.data.remove.forEach(peerConnection.removeDataTrackSender, peerConnection);\n changes.media.remove.forEach(peerConnection.removeMediaTrackSender, peerConnection);\n changes.data.add.forEach(peerConnection.addDataTrackSender, peerConnection);\n changes.media.add.forEach(peerConnection.addMediaTrackSender, peerConnection);\n if (changes.media.add.size\n || changes.media.remove.size\n || (changes.data.add.size && !peerConnection.isApplicationSectionNegotiated)) {\n peerConnection.offer();\n }\n });\n }\n}\n\n/**\n * @interface DataTrackSenderChanges\n * @property {Set} add\n * @property {Set} remove\n */\n\n/**\n * Get the {@Link DataTrackSender} changes.\n * @param {PeerConnectionManager} peerConnectionManager\n * @param {Array} dataTrackSenders\n * @returns {DataTrackSenderChanges} changes\n */\nfunction getDataTrackSenderChanges(peerConnectionManager, dataTrackSenders) {\n const dataTrackSendersToAdd = util.difference(dataTrackSenders, peerConnectionManager._dataTrackSenders);\n const dataTrackSendersToRemove = util.difference(peerConnectionManager._dataTrackSenders, dataTrackSenders);\n return {\n add: dataTrackSendersToAdd,\n remove: dataTrackSendersToRemove\n };\n}\n\n/**\n * @interface TrackSenderChanges\n * @property {DataTrackSenderChanges} data\n * @property {MediaTrackSenderChanges} media\n */\n\n/**\n * Get {@link DataTrackSender} and {@link MediaTrackSender} changes.\n * @param {PeerConnectionManager} peerConnectionManager\n * @param {Array} dataTrackSenders\n * @param {Array} mediaTrackSenders\n * @returns {TrackSenderChanges} changes\n */\nfunction getTrackSenderChanges(peerConnectionManager, dataTrackSenders, mediaTrackSenders) {\n return {\n data: getDataTrackSenderChanges(peerConnectionManager, dataTrackSenders),\n media: getMediaTrackSenderChanges(peerConnectionManager, mediaTrackSenders)\n };\n}\n\n/**\n * @interface MediaTrackSenderChanges\n * @property {Set} add\n * @property {Set} remove\n */\n\n/**\n * Get the {@link MediaTrackSender} changes.\n * @param {PeerConnectionManager} peerConnectionManager\n * @param {Array} mediaTrackSenders\n * @returns {MediaTrackSenderChanges} changes\n */\nfunction getMediaTrackSenderChanges(peerConnectionManager, mediaTrackSenders) {\n const mediaTrackSendersToAdd = util.difference(mediaTrackSenders, peerConnectionManager._mediaTrackSenders);\n const mediaTrackSendersToRemove = util.difference(peerConnectionManager._mediaTrackSenders, mediaTrackSenders);\n return {\n add: mediaTrackSendersToAdd,\n remove: mediaTrackSendersToRemove\n };\n}\n\n/**\n * This object maps RTCIceConnectionState and RTCPeerConnectionState values to a \"rank\".\n */\nconst toRank = {\n new: 0,\n checking: 1,\n connecting: 2,\n connected: 3,\n completed: 4,\n disconnected: -1,\n failed: -2,\n closed: -3\n};\n\n/**\n * This object maps \"rank\" back to RTCIceConnectionState or RTCPeerConnectionState values.\n */\nlet fromRank;\n\n/**\n * `Object.keys` is not supported in older browsers, so we can't just\n * synchronously call it in this module; we need to defer invoking it until we\n * know we're in a modern environment (i.e., anything that supports WebRTC).\n * @returns {object} fromRank\n */\nfunction createFromRank() {\n return Object.keys(toRank).reduce((fromRank, state) => {\n return Object.assign(fromRank, { [toRank[state]]: state });\n }, {});\n}\n\n/**\n * Summarize RTCIceConnectionStates or RTCPeerConnectionStates.\n * @param {Array|Array} states\n * @returns {RTCIceConnectionState|RTCPeerConnectionState} summary\n */\nfunction summarizeIceOrPeerConnectionStates(states) {\n if (!states.length) {\n return 'new';\n }\n fromRank = fromRank || createFromRank();\n return states.reduce((state1, state2) => {\n return fromRank[Math.max(toRank[state1], toRank[state2])];\n });\n}\n\n/**\n * Update the {@link PeerConnectionManager}'s `iceConnectionState`, and emit an\n * \"iceConnectionStateChanged\" event, if necessary.\n * @param {PeerConnectionManager} pcm\n * @returns {void}\n */\nfunction updateIceConnectionState(pcm) {\n pcm._lastIceConnectionState = pcm.iceConnectionState;\n pcm._iceConnectionState = summarizeIceOrPeerConnectionStates(\n [...pcm._peerConnections.values()].map(pcv2 => pcv2.iceConnectionState));\n if (pcm.iceConnectionState !== pcm._lastIceConnectionState) {\n pcm.emit('iceConnectionStateChanged');\n }\n}\n\n/**\n * Update the {@link PeerConnectionManager}'s `connectionState`, and emit a\n * \"connectionStateChanged\" event, if necessary.\n * @param {PeerConnectionManager} pcm\n * @returns {void}\n */\nfunction updateConnectionState(pcm) {\n pcm._lastConnectionState = pcm.connectionState;\n pcm._connectionState = summarizeIceOrPeerConnectionStates(\n [...pcm._peerConnections.values()].map(pcv2 => pcv2.connectionState));\n if (pcm.connectionState !== pcm._lastConnectionState) {\n pcm.emit('connectionStateChanged');\n }\n}\n\nmodule.exports = PeerConnectionManager;\n","/* eslint callback-return:0 */\n'use strict';\n\nconst EventEmitter = require('events');\n\nlet nInstances = 0;\nclass MediaSignaling extends EventEmitter {\n /**\n * Construct a {@link MediaSignaling}.\n * @param {Promise} getReceive\n * @param {string} channel\n */\n constructor(getReceiver, channel, options) {\n super();\n Object.defineProperties(this, {\n _instanceId: {\n value: nInstances++\n },\n channel: {\n value: channel,\n },\n _log: {\n value: options.log.createLog('default', this)\n },\n _getReceiver: {\n value: getReceiver\n },\n _receiverPromise: {\n value: null,\n writable: true,\n },\n _transport: {\n value: null,\n writable: true\n }\n });\n }\n\n get isSetup() {\n return !!this._receiverPromise;\n }\n\n toString() {\n return `[MediaSignaling #${this._instanceId}:${this.channel}]`;\n }\n\n setup(id) {\n this._teardown();\n this._log.info('setting up msp transport for id:', id);\n const receiverPromise = this._getReceiver(id).then(receiver => {\n if (receiver.kind !== 'data') {\n this._log.error('Expected a DataTrackReceiver');\n } if (this._receiverPromise !== receiverPromise) {\n return;\n }\n\n try {\n this._transport = receiver.toDataTransport();\n this.emit('ready', this._transport);\n } catch (ex) {\n this._log.error(`Failed to toDataTransport: ${ex.message}`);\n }\n receiver.once('close', () => this._teardown());\n });\n this._receiverPromise = receiverPromise;\n }\n\n _teardown() {\n if (this._transport) {\n this._log.info('Tearing down');\n this._transport = null;\n this._receiverPromise = null;\n this.emit('teardown');\n }\n }\n}\n\nmodule.exports = MediaSignaling;\n","'use strict';\n\nconst MediaSignaling = require('./mediasignaling');\n\n/**\n * @property {?Track.SID} loudestParticipantSid\n * @emits DominantSpeakerSignaling#updated\n */\nclass DominantSpeakerSignaling extends MediaSignaling {\n /**\n * Construct an {@link DominantSpeakerSignaling}.\n */\n constructor(getReceiver, options) {\n super(getReceiver, 'active_speaker', options);\n\n Object.defineProperties(this, {\n _loudestParticipantSid: {\n value: null,\n writable: true\n },\n });\n\n this.on('ready', transport => {\n transport.on('message', message => {\n switch (message.type) {\n case 'active_speaker':\n this._setLoudestParticipantSid(message.participant);\n break;\n default:\n break;\n }\n });\n });\n }\n\n /**\n * Get the loudest {@link Track.SID}, if known.\n * @returns {?Track.SID}\n */\n get loudestParticipantSid() {\n return this._loudestParticipantSid;\n }\n\n /**\n * @private\n * @param {Track.SID} loudestParticipantSid\n * @returns {void}\n */\n _setLoudestParticipantSid(loudestParticipantSid) {\n if (this.loudestParticipantSid === loudestParticipantSid) {\n return;\n }\n this._loudestParticipantSid = loudestParticipantSid;\n this.emit('updated');\n }\n}\n\n/**\n * @event DominantSpeakerSignaling#updated\n */\n\nmodule.exports = DominantSpeakerSignaling;\n","'use strict';\n\n/**\n * @property {number} [availableSend] - bps (undefined in Firefox)\n * @property {number} recv - bps\n * @property {number} [rtt] - s (undefined in Firefox)\n * @property {number} send - bps\n */\nclass IceReport {\n /**\n * Construct an {@link IceReport}.\n * @param {number} send - bps\n * @param {number} recv - bps\n * @param {number} [rtt] - s\n * @param {number} [availableSend] - bps\n */\n constructor(send, recv, availableSend, rtt) {\n Object.defineProperties(this, {\n availableSend: {\n enumerable: true,\n value: availableSend\n },\n recv: {\n enumerable: true,\n value: recv\n },\n rtt: {\n enumerable: true,\n value: rtt\n },\n send: {\n enumerable: true,\n value: send\n }\n });\n }\n\n /**\n * @param {RTCStats} olderStats\n * @param {RTCStats} newerStats\n * @returns {IceReport}\n */\n static of(olderStats, newerStats) {\n const secondsElapsed = (newerStats.timestamp - olderStats.timestamp) / 1000;\n const deltaBytesSent = newerStats.bytesSent - olderStats.bytesSent;\n const deltaBytesReceived = newerStats.bytesReceived - olderStats.bytesReceived;\n const send = secondsElapsed > 0\n ? (deltaBytesSent / secondsElapsed) * 8\n : 0;\n const recv = secondsElapsed > 0\n ? (deltaBytesReceived / secondsElapsed) * 8\n : 0;\n const { availableOutgoingBitrate: availableSend, currentRoundTripTime: rtt } = newerStats;\n return new IceReport(send, recv, availableSend, rtt);\n }\n}\n\nmodule.exports = IceReport;\n","'use strict';\n\nconst IceReport = require('./icereport');\n\n/**\n * @property {IceReport} lastReport\n * @property {?RTCStats} lastStats\n */\nclass IceReportFactory {\n /**\n * Construct an {@link IceReportFactory}.\n */\n constructor() {\n Object.defineProperties(this, {\n lastReport: {\n enumerable: true,\n value: new IceReport(0, 0),\n writable: true\n },\n lastStats: {\n enumerable: true,\n value: null,\n writable: true\n }\n });\n }\n\n /**\n * Create an {@link IceReport}.\n * @param {RTCStats} newerStats;\n * @returns {IceReport}\n */\n next(newerStats) {\n const olderStats = this.lastStats;\n this.lastStats = newerStats;\n if (olderStats) {\n const report = olderStats.id === newerStats.id\n ? IceReport.of(olderStats, newerStats)\n : new IceReport(0, 0);\n this.lastReport = report;\n }\n return this.lastReport;\n }\n}\n\nmodule.exports = IceReportFactory;\n","/* eslint no-undefined:0 */\n'use strict';\n\n/**\n * @param {Array} xs\n * @returns {number|undefined}\n */\nfunction average(xs) {\n xs = xs.filter(x => typeof x === 'number');\n return xs.length < 1 ? undefined : xs.reduce((y, x) => x + y) / xs.length;\n}\n\nmodule.exports = average;\n","'use strict';\n\n/**\n * @property {StatsId} id\n * @property {TrackId} trackId\n * @property {number} bitrate - bps\n */\nclass SenderOrReceiverReport {\n /**\n * Construct a {@link SenderOrReceiverReport}.\n * @param {StatsId} id\n * @param {TrackId} trackId\n * @param {number} bitrate - bps\n */\n constructor(id, trackId, bitrate) {\n Object.defineProperties(this, {\n id: {\n enumerable: true,\n value: id\n },\n trackId: {\n enumerable: true,\n value: trackId\n },\n bitrate: {\n enumerable: true,\n value: bitrate\n }\n });\n }\n}\n\nmodule.exports = SenderOrReceiverReport;\n","'use strict';\n\n/**\n * @param {Array} xs\n * @returns {number}\n */\nfunction sum(xs) {\n return xs.reduce((y, x) => typeof x === 'number' ? x + y : y, 0);\n}\n\nmodule.exports = sum;\n","'use strict';\n\nconst average = require('./average');\nconst SenderOrReceiverReport = require('./senderorreceiverreport');\nconst sum = require('./sum');\n\n/**\n * @interface ReceiverSummary\n * @property {number} bitrate\n * @property {number} fractionLost - 0–1\n * @property {number} [jitter] - s (undefined for video tracks in Chrome)\n */\n\n/**\n * @extends SenderOrReceiverReport\n * @property {number} deltaPacketsLost\n * @property {number} deltaPacketsReceived\n * @property {number} [fractionLost] - 0–1 (undefined in Firefox)\n * @property {number} [jitter] - s (undefined for video tracks in Chrome)\n * @property {number} phonyPacketsLost - 0–1\n */\nclass ReceiverReport extends SenderOrReceiverReport {\n /**\n * @param {StatsId} id\n * @param {TrackId} trackId\n * @param {number} bitrate - bps\n * @param {number} deltaPacketsLost\n * @param {number} deltaPacketsReceived\n * @param {number} [fractionLost] - 0–1 (undefined in Firefox)\n * @param {number} [jitter] - s (undefined for video tracks in Chrome)\n */\n constructor(id, trackId, bitrate, deltaPacketsLost, deltaPacketsReceived, fractionLost, jitter) {\n super(id, trackId, bitrate);\n const phonyFractionLost = deltaPacketsReceived > 0\n ? deltaPacketsLost / deltaPacketsReceived\n : 0;\n Object.defineProperties(this, {\n deltaPacketsLost: {\n enumerable: true,\n value: deltaPacketsLost\n },\n deltaPacketsReceived: {\n enumerable: true,\n value: deltaPacketsReceived\n },\n fractionLost: {\n enumerable: true,\n value: fractionLost\n },\n jitter: {\n enumerable: true,\n value: jitter\n },\n phonyFractionLost: {\n enumerable: true,\n value: phonyFractionLost\n }\n });\n }\n\n /**\n * Create a {@link ReceiverReport}.\n * @param {string} trackId\n * @param {RTCStats} olderStats\n * @param {RTCStats} newerStats\n * @returns {ReceiverReport}\n */\n static of(trackId, olderStats, newerStats) {\n if (olderStats.id !== newerStats.id) {\n throw new Error('RTCStats IDs must match');\n }\n const secondsElapsed = (newerStats.timestamp - olderStats.timestamp) / 1000;\n const deltaBytesReceived = newerStats.bytesReceived - olderStats.bytesReceived;\n const bitrate = secondsElapsed > 0\n ? (deltaBytesReceived / secondsElapsed) * 8\n : 0;\n const deltaPacketsLost = Math.max(newerStats.packetsLost - olderStats.packetsLost, 0);\n const deltaPacketsReceived = newerStats.packetsReceived - olderStats.packetsReceived;\n const { fractionLost, jitter } = newerStats;\n return new ReceiverReport(olderStats.id, trackId, bitrate, deltaPacketsLost, deltaPacketsReceived, fractionLost, jitter);\n }\n\n /**\n * Summarize {@link ReceiverReport}s by summing and averaging their values.\n * @param {Array} reports\n * @returns {ReceiverSummary}\n */\n static summarize(reports) {\n const summaries = reports.map(report => report.summarize());\n const bitrate = sum(summaries.map(summary => summary.bitrate));\n const fractionLost = average(summaries.map(summary => summary.fractionLost));\n const jitter = average(summaries.map(summary => summary.jitter));\n return {\n bitrate,\n fractionLost,\n jitter\n };\n }\n\n /**\n * Summarize the {@link ReceiveReport}.\n * @returns {ReceiverSummary}\n */\n summarize() {\n return {\n bitrate: this.bitrate,\n fractionLost: typeof this.fractionLost === 'number' ? this.fractionLost : this.phonyFractionLost,\n jitter: this.jitter\n };\n }\n}\n\nmodule.exports = ReceiverReport;\n","/* eslint no-undefined:0 */\n'use strict';\n\nconst average = require('./average');\nconst SenderOrReceiverReport = require('./senderorreceiverreport');\nconst sum = require('./sum');\n\n/**\n * @interface SenderSummary\n * @property {number} bitrate\n * @property {number} [rtt] - s (undefined in Chrome)\n */\n\n/**\n * @extends SenderOrReceiverReport\n * @property {number} [rtt] - s (undefined in Chrome)\n */\nclass SenderReport extends SenderOrReceiverReport {\n /**\n * Construct a {@link SenderReport}.\n * @param {StatsId} id\n * @param {TrackId} trackId\n * @param {number} bitrate - bps\n * @param {number} [rtt] - s\n */\n constructor(id, trackId, bitrate, rtt) {\n super(id, trackId, bitrate);\n Object.defineProperties(this, {\n rtt: {\n enumerable: true,\n value: rtt\n }\n });\n }\n\n /**\n * Create a {@link SenderReport}.\n * @param {string} trackId\n * @param {RTCStats} olderStats\n * @param {RTCStats} newerStats\n * @param {RTCRemoteInboundRtpStreamStats} [newerRemoteStats]\n * @returns {SenderReport}\n */\n static of(trackId, olderStats, newerStats, newerRemoteStats) {\n if (olderStats.id !== newerStats.id) {\n throw new Error('RTCStats IDs must match');\n }\n const secondsElapsed = (newerStats.timestamp - olderStats.timestamp) / 1000;\n const deltaBytesSent = newerStats.bytesSent - olderStats.bytesSent;\n const bitrate = secondsElapsed > 0\n ? (deltaBytesSent / secondsElapsed) * 8\n : 0;\n const rtt = newerRemoteStats && typeof newerRemoteStats.roundTripTime === 'number'\n ? newerRemoteStats.roundTripTime / 1000\n : undefined;\n return new SenderReport(olderStats.id, trackId, bitrate, rtt);\n }\n\n /**\n * Summarize {@link SenderReport}s by summing and averaging their values.\n * @param {Array} reports\n * @returns {SenderSummary}\n */\n static summarize(reports) {\n const bitrate = sum(reports.map(report => report.bitrate));\n const rtt = average(reports.map(report => report.rtt));\n return {\n bitrate,\n rtt\n };\n }\n}\n\nmodule.exports = SenderReport;\n","'use strict';\n\nconst ReceiverReport = require('./receiverreport');\nconst SenderReport = require('./senderreport');\n\n/**\n * @interface SenderAndReceiverReports\n * @property {Array} send\n * @property {Array} recv\n */\n\n/**\n * @interface SenderAndReceiverSummary\n * @property {SenderSummary} send\n * @property {ReceiverSummary} recv\n */\n\n/**\n * @interface PeerConnectionSummary\n * @property {IceReport} ice\n * @property {SenderSummary} send\n * @property {ReceiverSummary} recv\n * @property {SenderAndReceiverSummary} audio\n * @property {SenderAndReceiverSummary} video\n */\n\n/**\n * @property {IceReport} ice\n * @roperty {SenderAndReceiverReports} audio\n * @roperty {SenderAndReceiverReports} video\n */\nclass PeerConnectionReport {\n /**\n * Construct a {@link PeerConnectionReport}.\n * @param {IceReport} ice\n * @param {SenderAndReceiverReports} audio\n * @param {SenderAndReceiverReports} video\n */\n constructor(ice, audio, video) {\n Object.defineProperties(this, {\n ice: {\n enumerable: true,\n value: ice\n },\n audio: {\n enumerable: true,\n value: audio\n },\n video: {\n enumerable: true,\n value: video\n }\n });\n }\n\n /**\n * Summarize the {@link PeerConnectionReport} by summarizing its\n * {@link SenderReport}s and {@link ReceiverReport}s.\n * @returns {PeerConnectionSummary}\n */\n summarize() {\n const senderReports = this.audio.send.concat(this.video.send);\n const send = SenderReport.summarize(senderReports);\n\n const receiverReports = this.audio.recv.concat(this.video.recv);\n const recv = ReceiverReport.summarize(receiverReports);\n\n return {\n ice: this.ice,\n send,\n recv,\n audio: {\n send: SenderReport.summarize(this.audio.send),\n recv: ReceiverReport.summarize(this.audio.recv)\n },\n video: {\n send: SenderReport.summarize(this.video.send),\n recv: ReceiverReport.summarize(this.video.recv)\n }\n };\n }\n}\n\nmodule.exports = PeerConnectionReport;\n","'use strict';\n\n/**\n * @property {StatsId} id\n * @property {TrackId} trackId\n * @property {RTCStats} lastStats\n */\nclass SenderOrReceiverReportFactory {\n /**\n * @param {StatsId} id\n * @param {TrackId} trackId\n * @param {RTCStats} initialStats\n */\n constructor(id, trackId, initialStats) {\n Object.defineProperties(this, {\n id: {\n enumerable: true,\n value: id,\n writable: true\n },\n trackId: {\n enumerable: true,\n value: trackId,\n writable: true\n },\n lastStats: {\n enumerable: true,\n value: initialStats,\n writable: true\n }\n });\n }\n}\n\nmodule.exports = SenderOrReceiverReportFactory;\n","'use strict';\n\nconst ReceiverReport = require('./receiverreport');\nconst SenderOrReceiverReportFactory = require('./senderorreceiverreportfactory');\n\n/**\n * @extends SenderOrReceiverReportFactory\n * @param {?ReceiverReport} lastReport\n */\nclass ReceiverReportFactory extends SenderOrReceiverReportFactory {\n /**\n * Construct a {@link ReceiverReportFactory}.\n * @param {TrackId} trackId\n * @param {RTCStats} initialStats\n */\n constructor(trackId, initialStats) {\n super(initialStats.id, trackId, initialStats);\n Object.defineProperties(this, {\n lastReport: {\n enumerable: true,\n value: null,\n writable: true\n }\n });\n }\n\n /**\n * Create a {@link ReceiverReport}.\n * @param {TrackId} trackId\n * @param {RTCStats} newerStats\n * @returns {ReceiverReport}\n */\n next(trackId, newerStats) {\n const olderStats = this.lastStats;\n this.lastStats = newerStats;\n this.trackId = trackId;\n const report = ReceiverReport.of(trackId, olderStats, newerStats);\n this.lastReport = report;\n return report;\n }\n}\n\nmodule.exports = ReceiverReportFactory;\n","'use strict';\n\nconst SenderOrReceiverReportFactory = require('./senderorreceiverreportfactory');\nconst SenderReport = require('./senderreport');\n\n/**\n * @extends {SenderOrReceiverReportFactory}\n * @property {?SenderReport} lastReport\n */\nclass SenderReportFactory extends SenderOrReceiverReportFactory {\n /**\n * Construct a {@link SenderReportFactory}.\n * @param {TrackId} trackId\n * @param {RTCStats} initialStats\n */\n constructor(trackId, initialStats) {\n super(initialStats.id, trackId, initialStats);\n Object.defineProperties(this, {\n lastReport: {\n enumerable: true,\n value: null,\n writable: true\n }\n });\n }\n\n /**\n * @param {TrackId} trackId\n * @param {RTCStats} newerStats\n * @param {RTCRemoteInboundRtpStreamStats} [newerRemoteStats]\n * @returns {SenderReport}\n */\n next(trackId, newerStats, newerRemoteStats) {\n const olderStats = this.lastStats;\n this.lastStats = newerStats;\n this.trackId = trackId;\n const report = SenderReport.of(trackId, olderStats, newerStats, newerRemoteStats);\n this.lastReport = report;\n return report;\n }\n}\n\nmodule.exports = SenderReportFactory;\n","'use strict';\n\nconst { guessBrowser } = require('../webrtc/util');\n\nconst IceReportFactory = require('./icereportfactory');\nconst PeerConnectionReport = require('./peerconnectionreport');\nconst ReceiverReportFactory = require('./receiverreportfactory');\nconst SenderReportFactory = require('./senderreportfactory');\n\n/**\n * @typedef {string} TrackId\n */\n\n/**\n * @typedef {string} StatsId\n */\n\n/**\n * @interface SenderReportFactoriesByMediaType\n * @property {Map} audio\n * @property {Map} video\n */\n\n/**\n * @interface ReceiverReportFactoriesByMediaType\n * @property {Map} audio\n * @property {Map} video\n */\n\n/**\n * @interface SenderAndReceiverReportFactories\n * @property {Map} send\n * @property {Map} recv\n */\n\n/**\n * @interface {StatsIdsByMediaType}\n * @property {Set} audio\n * @property {Set} video\n */\n\n/**\n * @property {RTCPeerConnection} pc\n * @property {IceReportFactory} iceReportFactory\n * @property {SenderAndReceiverReportFactories} audio\n * @property {SenderAndReceiverReportFactories} video\n * @property {?PeerConnectionReport} lastReport\n */\nclass PeerConnectionReportFactory {\n /**\n * Construct a {@link PeerConnectionReportFactory}.\n * @param {RTCPeerConnection} pc\n */\n constructor(pc) {\n Object.defineProperties(this, {\n pc: {\n enumerable: true,\n value: pc\n },\n ice: {\n enumerable: true,\n value: new IceReportFactory()\n },\n audio: {\n enumerable: true,\n value: {\n send: new Map(),\n recv: new Map()\n }\n },\n video: {\n enumerable: true,\n value: {\n send: new Map(),\n recv: new Map()\n }\n },\n lastReport: {\n enumerable: true,\n value: null,\n writable: true\n }\n });\n }\n\n /**\n * Create a {@link PeerConnectionReport}.\n * @returns {Promise}\n */\n next() {\n const updatePromise = guessBrowser() === 'firefox'\n ? updateFirefox(this)\n : updateChrome(this);\n\n return updatePromise.then(() => {\n const audioSenderReportFactories = [...this.audio.send.values()];\n const videoSenderReportFactories = [...this.video.send.values()];\n const audioReceiverReportFactories = [...this.audio.recv.values()];\n const videoReceiverReportFactories = [...this.video.recv.values()];\n\n const report = new PeerConnectionReport(\n this.ice.lastReport,\n {\n send: audioSenderReportFactories.map(factory => factory.lastReport).filter(report => report),\n recv: audioReceiverReportFactories.map(factory => factory.lastReport).filter(report => report)\n },\n {\n send: videoSenderReportFactories.map(factory => factory.lastReport).filter(report => report),\n recv: videoReceiverReportFactories.map(factory => factory.lastReport).filter(report => report)\n }\n );\n\n this.lastReport = report;\n\n return report;\n });\n }\n}\n\n/**\n * Construct a Map from MediaStreamTrack Ids to RTCStatsReports.\n * @param {Array|Array} sendersOrReceivers - each\n * RTCRtpSender should have a non-null track\n * @returns {Promise>}\n */\nfunction getSenderOrReceiverReports(sendersOrReceivers) {\n return Promise.all(sendersOrReceivers.map(senderOrReceiver => {\n const trackId = senderOrReceiver.track.id;\n return senderOrReceiver.getStats().then(report => {\n // NOTE(mroberts): We have to rewrite Ids due to this bug:\n //\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1463430\n //\n for (const stats of report.values()) {\n if (stats.type === 'inbound-rtp') {\n stats.id = `${trackId}-${stats.id}`;\n }\n }\n return [trackId, report];\n });\n })).then(pairs => new Map(pairs));\n}\n\n/**\n * @param {SenderReportFactory.constructor} SenderReportFactory\n * @param {SenderReportFactoriesByMediaType} sendersByMediaType\n * @param {RTCStatsReport} report\n * @param {RTCStats} stats\n * @param {TrackId} [trackId]\n * @returns {?SenderReportFactory}\n *//**\n * @param {ReceiverReportFactory.constructor} ReceiverReportFactory\n * @param {ReceiverReportFactoriesByMediaType} receiversByMediaType\n * @param {RTCStatsReport} report\n * @param {RTCStats} stats\n * @param {TrackId} [trackId]\n * @returns {?ReceiverReportFactory}\n */\nfunction getOrCreateSenderOrReceiverReportFactory(SenderOrReceiverReportFactory, sendersOrReceiversByMediaType, report, stats, trackId) {\n const sendersOrReceivers = sendersOrReceiversByMediaType[stats.mediaType];\n if (!trackId) {\n const trackStats = report.get(stats.trackId);\n if (trackStats) {\n trackId = trackStats.trackIdentifier;\n }\n }\n if (sendersOrReceivers && trackId) {\n if (sendersOrReceivers.has(stats.id)) {\n return sendersOrReceivers.get(stats.id);\n }\n const senderOrReceiverFactory = new SenderOrReceiverReportFactory(trackId, stats);\n sendersOrReceivers.set(stats.id, senderOrReceiverFactory);\n }\n return null;\n}\n\n/**\n * @param {PeerConnectionReportFactory} factory\n * @returns {SenderReportFactoriesByMediaType}\n */\nfunction getSenderReportFactoriesByMediaType(factory) {\n return { audio: factory.audio.send, video: factory.video.send };\n}\n\n/**\n * @param {PeerConnectionReportFactory} factory\n * @returns {ReceiverReportFactoriesByMediaType}\n */\nfunction getReceiverReportFactoriesByMediaType(factory) {\n return { audio: factory.audio.recv, video: factory.video.recv };\n}\n\n/**\n * @param {PeerConnectionReportFactory} factory\n * @param {RTCStatsReport} report\n * @param {RTCStats} stats\n * @param {TrackId} [trackId]\n * @returns {?SenderReportFactory}\n */\nfunction getOrCreateSenderReportFactory(factory, report, stats, trackId) {\n return getOrCreateSenderOrReceiverReportFactory(SenderReportFactory, getSenderReportFactoriesByMediaType(factory), report, stats, trackId);\n}\n\n/**\n * @param {PeerConnectionReportFactory} factory\n * @param {RTCStatsReport} report\n * @param {RTCStats} stats\n * @param {TrackId} [trackId]\n * @returns {?ReceiverReportFactory}\n */\nfunction getOrCreateReceiverReportFactory(factory, report, stats, trackId) {\n return getOrCreateSenderOrReceiverReportFactory(ReceiverReportFactory, getReceiverReportFactoriesByMediaType(factory), report, stats, trackId);\n}\n\n/**\n * @param {PeerConnectionReportFactory} factory\n * @retuns {StatsIdsByMediaType}\n */\nfunction getSenderReportFactoryIdsByMediaType(factory) {\n return {\n audio: new Set(factory.audio.send.keys()),\n video: new Set(factory.video.send.keys())\n };\n}\n\n/**\n * @param {PeerConnectionReportFactory} factory\n * @retuns {StatsIdsByMediaType}\n */\nfunction getReceiverReportFactoryIdsByMediaType(factory) {\n return {\n audio: new Set(factory.audio.recv.keys()),\n video: new Set(factory.video.recv.keys())\n };\n}\n\n/**\n * @param {PeerConnectionReportFactory} factory\n * @param {RTCStatsReport} report\n * @param {StatsIdsByMediaType} senderReportFactoryIdsToDeleteByMediaType\n * @param {TrackId} [trackId]\n * @returns {void}\n */\nfunction updateSenderReports(factory, report, senderReportFactoryIdsToDeleteByMediaType, trackId) {\n for (const stats of report.values()) {\n if (stats.type === 'outbound-rtp' && !stats.isRemote) {\n if (guessBrowser() !== 'firefox' && !stats.trackId) {\n continue;\n }\n const senderReportFactoryIdsToDelete = senderReportFactoryIdsToDeleteByMediaType[stats.mediaType];\n if (senderReportFactoryIdsToDelete) {\n senderReportFactoryIdsToDelete.delete(stats.id);\n }\n const senderReportFactory = getOrCreateSenderReportFactory(factory, report, stats, trackId);\n if (senderReportFactory) {\n const remoteInboundStats = report.get(stats.remoteId);\n senderReportFactory.next(trackId || senderReportFactory.trackId, stats, remoteInboundStats);\n }\n }\n }\n}\n\n/**\n * @param {PeerConnectionReportFactory} factory\n * @param {RTCStatsReport} report\n * @param {StatsIdsByMediaType} receiverReportFactoryIdsToDeleteByMediaType\n * @param {TrackId} [trackId]\n * @returns {void}\n */\nfunction updateReceiverReports(factory, report, receiverReportFactoryIdsToDeleteByMediaType, trackId) {\n for (const stats of report.values()) {\n if (stats.type === 'inbound-rtp' && !stats.isRemote) {\n const receiverReportFactoryIdsToDelete = receiverReportFactoryIdsToDeleteByMediaType[stats.mediaType];\n if (receiverReportFactoryIdsToDelete) {\n receiverReportFactoryIdsToDelete.delete(stats.id);\n }\n const receiverReportFactory = getOrCreateReceiverReportFactory(factory, report, stats, trackId);\n if (receiverReportFactory) {\n receiverReportFactory.next(trackId || receiverReportFactory.trackId, stats);\n }\n }\n }\n}\n\n/**\n * @param {SenderReportFactoriesByMediaType|ReceiverReportFactoriesByMediaType} senderOrReceiverReportFactoriesByMediaType\n * @param {StatsIdsByMediaType} senderOrReceiverReportFactoryIdsByMediaType\n * @returns {void}\n */\nfunction deleteSenderOrReceiverReportFactories(senderOrReceiverReportFactoriesByMediaType, senderOrReceiverReportFactoryIdsByMediaType) {\n for (const mediaType in senderOrReceiverReportFactoryIdsByMediaType) {\n const senderOrReceiverReportFactories = senderOrReceiverReportFactoriesByMediaType[mediaType];\n const senderOrReceiverReportFactoryIds = senderOrReceiverReportFactoryIdsByMediaType[mediaType];\n senderOrReceiverReportFactoryIds.forEach(senderOrReceiverReportFactoryId => senderOrReceiverReportFactories.delete(senderOrReceiverReportFactoryId));\n }\n}\n\n/**\n * @param {IceReportFactory} ice\n * @param {RTCStatsReport} report\n * @returns {void}\n */\nfunction updateIceReport(ice, report) {\n let selectedCandidatePair;\n for (const stats of report.values()) {\n if (stats.type === 'transport') {\n selectedCandidatePair = report.get(stats.selectedCandidatePairId);\n }\n }\n if (selectedCandidatePair) {\n ice.next(selectedCandidatePair);\n return;\n }\n for (const stats of report.values()) {\n if (stats.type === 'candidate-pair'\n && stats.nominated\n && ('selected' in stats ? stats.selected : true)) {\n ice.next(stats);\n }\n }\n}\n\n/**\n * @param {PeerConnectionReportFactory} factory\n * @returns {Promise}\n */\nfunction updateFirefox(factory) {\n const senders = factory.pc.getTransceivers()\n .filter(transceiver => transceiver.currentDirection && transceiver.currentDirection.match(/send/) && transceiver.sender.track)\n .map(transceiver => transceiver.sender);\n\n const receivers = factory.pc.getTransceivers()\n .filter(transceiver => transceiver.currentDirection && transceiver.currentDirection.match(/recv/))\n .map(transceiver => transceiver.receiver);\n\n return Promise.all([\n getSenderOrReceiverReports(senders),\n getSenderOrReceiverReports(receivers),\n factory.pc.getStats()\n ]).then(([senderReports, receiverReports, pcReport]) => {\n const senderReportFactoriesByMediaType = getSenderReportFactoriesByMediaType(factory);\n const senderReportFactoryIdsToDeleteByMediaType = getSenderReportFactoryIdsByMediaType(factory);\n senderReports.forEach((report, trackId) => updateSenderReports(factory, report, senderReportFactoryIdsToDeleteByMediaType, trackId));\n deleteSenderOrReceiverReportFactories(senderReportFactoriesByMediaType, senderReportFactoryIdsToDeleteByMediaType);\n\n const receiverReportFactoriesByMediaType = getReceiverReportFactoriesByMediaType(factory);\n const receiverReportFactoryIdsToDeleteByMediaType = getReceiverReportFactoryIdsByMediaType(factory);\n receiverReports.forEach((report, trackId) => updateReceiverReports(factory, report, receiverReportFactoryIdsToDeleteByMediaType, trackId));\n deleteSenderOrReceiverReportFactories(receiverReportFactoriesByMediaType, receiverReportFactoryIdsToDeleteByMediaType);\n\n updateIceReport(factory.ice, pcReport);\n });\n}\n\n/**\n * @param {PeerConnectionReportFactory} factory\n * @returns {Promise}\n */\nfunction updateChrome(factory) {\n return factory.pc.getStats().then(report => {\n const senderReportFactoriesByMediaType = getSenderReportFactoriesByMediaType(factory);\n const senderReportFactoryIdsToDeleteByMediaType = getSenderReportFactoryIdsByMediaType(factory);\n updateSenderReports(factory, report, senderReportFactoryIdsToDeleteByMediaType);\n deleteSenderOrReceiverReportFactories(senderReportFactoriesByMediaType, senderReportFactoryIdsToDeleteByMediaType);\n\n const receiverReportFactoriesByMediaType = getReceiverReportFactoriesByMediaType(factory);\n const receiverReportFactoryIdsToDeleteByMediaType = getReceiverReportFactoryIdsByMediaType(factory);\n updateReceiverReports(factory, report, receiverReportFactoryIdsToDeleteByMediaType);\n deleteSenderOrReceiverReportFactories(receiverReportFactoriesByMediaType, receiverReportFactoryIdsToDeleteByMediaType);\n\n updateIceReport(factory.ice, report);\n });\n}\n\nmodule.exports = PeerConnectionReportFactory;\n","/* eslint callback-return:0 */\n'use strict';\n\nconst EventEmitter = require('events');\n\nconst PeerConnectionReportFactory = require('../../stats/peerconnectionreportfactory');\n\n/**\n * @emits NetworkQualityMonitor#updated\n */\nclass NetworkQualityMonitor extends EventEmitter {\n /**\n * Construct a {@link NetworkQualityMonitor}.\n * @param {PeerConnectionManager} manager\n * @param {NetworkQualitySignaling} signaling\n */\n constructor(manager, signaling) {\n super();\n Object.defineProperties(this, {\n _factories: {\n value: new WeakMap()\n },\n _manager: {\n value: manager\n },\n _signaling: {\n value: signaling\n }\n });\n signaling.on('updated', () => this.emit('updated'));\n }\n\n /**\n * Get the current {@link NetworkQualityLevel}, if any.\n * @returns {?NetworkQualityLevel} level - initially null\n */\n get level() {\n return this._signaling.level;\n }\n\n /**\n * Get the current {@link NetworkQualityLevels}, if any.\n * @returns {?NetworkQualityLevels} levels - initially null\n */\n get levels() {\n return this._signaling.levels;\n }\n\n /**\n * Get the current {@link NetworkQualityLevels} of remote participants, if any.\n * @returns {Map} remoteLevels\n */\n get remoteLevels() {\n return this._signaling.remoteLevels;\n }\n\n /**\n * Start monitoring.\n * @returns {void}\n */\n start() {\n this.stop();\n const timeout = setTimeout(() => {\n if (this._timeout !== timeout) {\n return;\n }\n next(this).then(reports => {\n if (this._timeout !== timeout) {\n return;\n }\n if (reports.length) {\n const [report] = reports;\n this._signaling.put(report);\n }\n this.start();\n });\n }, 200);\n this._timeout = timeout;\n }\n\n /**\n * Stop monitoring.\n * @returns {void}\n */\n stop() {\n clearTimeout(this._timeout);\n this._timeout = null;\n }\n}\n\n/**\n * @param {NetworkQualityMonitor}\n * @returns {Promise}\n */\nfunction next(monitor) {\n const pcv2s = monitor._manager._peerConnections\n ? Array.from(monitor._manager._peerConnections.values())\n : [];\n\n const pcs = pcv2s\n .map(pcv2 => pcv2._peerConnection)\n .filter(pc => pc.signalingState !== 'closed');\n\n const factories = pcs.map(pc => {\n if (monitor._factories.has(pc)) {\n return monitor._factories.get(pc);\n }\n const factory = new PeerConnectionReportFactory(pc);\n monitor._factories.set(pc, factory);\n return factory;\n });\n\n const reportsOrNullPromises = factories.map(factory => factory.next().catch(() => null));\n\n return Promise.all(reportsOrNullPromises).then(reportsOrNull => reportsOrNull\n .filter(reportOrNull => reportOrNull)\n .map(report => report.summarize()));\n}\n\n/**\n * The {@link NetworkQualityLevel} changed.\n * @event NetworkQualityMonitor#updated\n */\n\nmodule.exports = NetworkQualityMonitor;\n","'use strict';\n\nconst { defer } = require('./');\n\n/**\n * An {@link AsyncVar} is an \"asynchronous variable\" which may or may not\n * contain a value of some type T. You can put a value into the {@link AsyncVar}\n * with {@link AsyncVar#put}. Callers can take a value out of the\n * {@link AsyncVar} by queueing up with {@link AsyncVar#take}. N calls to\n * {@link AsyncVar#take} require N calls to {@link AsyncVar#put} to resolve, and\n * they resolve in order.\n */\nclass AsyncVar {\n /**\n * Construct an {@link AsyncVar}.\n */\n constructor() {\n Object.defineProperties(this, {\n _deferreds: {\n value: []\n },\n _hasValue: {\n value: false,\n writable: true\n },\n _value: {\n value: null,\n writable: true\n }\n });\n }\n\n /**\n * Put a value into the {@link AsyncVar}.\n * @param {T} value\n * @returns {this}\n */\n put(value) {\n this._hasValue = true;\n this._value = value;\n const deferred = this._deferreds.shift();\n if (deferred) {\n deferred.resolve(value);\n }\n return this;\n }\n\n /**\n * Take the value out of the {@link AsyncVar}.\n * @returns {Promise}\n */\n take() {\n if (this._hasValue && !this._deferreds.length) {\n this._hasValue = false;\n return Promise.resolve(this._value);\n }\n const deferred = defer();\n this._deferreds.push(deferred);\n return deferred.promise.then(value => {\n this._hasValue = false;\n return value;\n });\n }\n}\n\nmodule.exports = AsyncVar;\n","'use strict';\n\nconst MediaSignaling = require('./mediasignaling');\nconst AsyncVar = require('../../util/asyncvar');\nconst Timeout = require('../../util/timeout');\n\nconst NETWORK_QUALITY_RESPONSE_TIME_MS = 5000;\n\n/**\n * @interface MediaSignalingTransport\n * @property {function(object): boolean} send\n * @emits MediaSignalingTransport#message\n */\n\n/**\n * The {@link MediaSignalingTransport} received a message.\n * @event MediaSignalingTransport#message\n * @param {object} message\n */\n\n/**\n * @interface LatencyStats\n * @property {number} jitter\n * @property {number} rtt\n * @property {number} level\n */\n\n/**\n * @interface FractionLostStats\n * @property {number} fractionLost\n * @property {number} level\n */\n\n/**\n * @interface BandwidthStats\n * @property {number} actual\n * @property {number} available\n * @property {number} level\n */\n\n/**\n * @interface SendOrRecvStats\n * @property {BandwidthStats} bandwidth\n * @property {FractionLostStats} fractionLost\n * @property {LatencyStats} latency\n */\n\n/**\n * @interface MediaLevels\n * @property {number} send\n * @property {SendOrRecvStats} sendStats\n * @property {number} recv\n * @property {SendOrRecvStats} recvStats\n */\n\n/**\n * @interface NetworkQualityLevels\n * @property {number} level\n * @property {MediaLevels} audio\n * @property {MediaLevels} video\n */\n\n/**\n * @typedef {PeerConnectionSummary} NetworkQualityInputs\n */\n\n/**\n * @classdesc The {@link NetworkQualitySignaling} class allows submitting\n * {@link NetworkQualityInputs} for computing {@link NetworkQualityLevel}. It\n * does so by sending and receiving messages over a\n * {@link MediaSignalingTransport}. The exact transport used depends on the\n * topology of the {@link Room} that {@link NetworkQualitySignaling} is being\n * used within: for P2P Rooms, we re-use the {@link TransportV2}; and for\n * Group Rooms, we use a {@link DataTransport}.\n * @emits NetworkQualitySignaling#updated\n */\nclass NetworkQualitySignaling extends MediaSignaling {\n /**\n * Construct a {@link NetworkQualitySignaling}.\n * @param {Promise} getReceiver\n * @param {NetworkQualityConfigurationImpl} networkQualityConfiguration\n */\n constructor(getReceiver, networkQualityConfiguration, options) {\n super(getReceiver, 'network_quality', options);\n\n Object.defineProperties(this, {\n _level: {\n value: null,\n writable: true\n },\n _levels: {\n value: null,\n writable: true\n },\n _remoteLevels: {\n value: new Map(),\n writable: true\n },\n _networkQualityInputs: {\n value: new AsyncVar()\n },\n _resendTimer: {\n value: new Timeout(() => {\n // and schedule next timer at x1.5 the delay..\n this._resendTimer.setDelay(this._resendTimer.delay * 1.5);\n this._sendNetworkQualityInputs();\n }, NETWORK_QUALITY_RESPONSE_TIME_MS, false),\n },\n _networkQualityReportLevels: {\n get() {\n return {\n reportLevel: networkQualityConfiguration.local,\n remoteReportLevel: networkQualityConfiguration.remote\n };\n }\n }\n });\n\n this.on('ready', transport => {\n transport.on('message', message => {\n this._log.debug('Incoming: ', message);\n switch (message.type) {\n case 'network_quality':\n this._handleNetworkQualityMessage(message);\n break;\n default:\n break;\n }\n });\n });\n\n this._sendNetworkQualityInputs();\n }\n\n /**\n * Get the current {@link NetworkQualityLevel}, if any.\n * @returns {?NetworkQualityLevel} level - initially null\n */\n get level() {\n return this._level;\n }\n\n /**\n * Get the current {@link NetworkQualityLevels}, if any.\n * @returns {?NetworkQualityLevels} levels - initially null\n */\n get levels() {\n return this._levels;\n }\n\n /**\n * Get the current {@link NetworkQualityLevels} of remote participants, if any.\n * @returns {Map} remoteLevels\n */\n get remoteLevels() {\n return this._remoteLevels;\n }\n\n /**\n * Check to see if the {@link NetworkQualityLevel} is new, and raise an\n * event if necessary.\n * @private\n * @param {object} message\n * @returns {void}\n */\n _handleNetworkQualityMessage(message) {\n let updated = false;\n let level = null;\n const local = message ? message.local : null;\n if (typeof local === 'number') {\n // NOTE(mroberts): In prod, we plan to only send the level.\n level = local;\n this._levels = null;\n } else if (typeof local === 'object' && local) {\n // NOTE(mroberts): In dev, we plan to send the decomposed levels. An early\n // VMS version does not compute `level` for us, so we fallback to taking\n // the minimum ourselves.\n this._levels = local;\n level = typeof local.level === 'number'\n ? local.level\n : Math.min(\n local.audio.send,\n local.audio.recv,\n local.video.send,\n local.video.recv);\n }\n if (level !== null && this.level !== level) {\n this._level = level;\n updated = true;\n }\n this._remoteLevels = message && message.remotes\n ? message.remotes.reduce((levels, obj) => {\n const oldObj = this._remoteLevels.get(obj.sid) || {};\n if (oldObj.level !== obj.level) {\n updated = true;\n }\n return levels.set(obj.sid, obj);\n }, new Map())\n : this._remoteLevels;\n\n if (updated) {\n this.emit('updated');\n }\n\n\n // score is received. so reset the timer to default timeout.\n this._resendTimer.setDelay(NETWORK_QUALITY_RESPONSE_TIME_MS);\n\n // timer is cleared only while we are sending inputs.\n // if we are already sending inputs do not send them again.\n if (this._resendTimer.isSet) {\n setTimeout(() => this._sendNetworkQualityInputs(), 1000);\n }\n }\n\n /**\n * Start sending {@link NetworkQualityInputs}.\n * @private\n * @returns {Promise}\n */\n _sendNetworkQualityInputs() {\n this._resendTimer.clear();\n return this._networkQualityInputs.take().then(networkQualityInputs => {\n if (this._transport) {\n this._transport.publish(\n createNetworkQualityInputsMessage(networkQualityInputs, this._networkQualityReportLevels));\n }\n }).finally(() => {\n this._resendTimer.start();\n });\n }\n\n /**\n * Put {@link NetworkQualityInputs} to be used for computing\n * {@link NetworkQualityLevel}.\n * @param {NetworkQualityInputs} networkQualityInputs\n * @returns {void}\n */\n put(networkQualityInputs) {\n this._networkQualityInputs.put(networkQualityInputs);\n }\n}\n\n/**\n * The {@link NetworkQualityLevel} changed.\n * @event NetworkQualitySignaling#updated\n */\n\n/**\n * @typedef {object} NetworkQualityReportLevels\n * @param {number} reportLevel\n * @param {number} remoteReportLevel\n */\n\n/**\n * @param {NetworkQualityInputs} networkQualityInputs\n * @param {NetworkQualityReportLevels} networkQualityReportLevels\n * @returns {object} message\n */\nfunction createNetworkQualityInputsMessage(networkQualityInputs, networkQualityReportLevels) {\n return Object.assign(\n { type: 'network_quality' },\n networkQualityInputs,\n networkQualityReportLevels);\n}\n\nmodule.exports = NetworkQualitySignaling;\n","'use strict';\n\nconst EventEmitter = require('events').EventEmitter;\n\n/**\n * Represents recording state\n * @extends EventEmitter\n * @property {?boolean} isEnabled\n */\nclass RecordingSignaling extends EventEmitter {\n /**\n * Construct a {@link RecordingSignaling}.\n */\n constructor() {\n super();\n Object.defineProperties(this, {\n _isEnabled: {\n value: null,\n writable: true\n },\n isEnabled: {\n enumerable: true,\n get() {\n return this._isEnabled;\n }\n }\n });\n }\n\n /**\n * Disable the {@link RecordingSignaling} if it is not already disabled.\n * @return {this}\n */\n disable() {\n return this.enable(false);\n }\n\n /**\n * Enable (or disable) the {@link RecordingSignaling} if it is not already enabled\n * (or disabled).\n * @param {boolean} [enabled=true]\n * @return {this}\n */\n enable(enabled) {\n enabled = typeof enabled === 'boolean' ? enabled : true;\n if (this.isEnabled !== enabled) {\n this._isEnabled = enabled;\n this.emit('updated');\n }\n return this;\n }\n}\n\n/**\n * Emitted whenever the {@link RecordingSignaling} is updated\n * @event RecordingSignaling#updated\n */\n\nmodule.exports = RecordingSignaling;\n","'use strict';\n\nconst RecordingSignaling = require('../recording');\n\n/**\n * @extends RecordingSignaling\n */\nclass RecordingV2 extends RecordingSignaling {\n /**\n * Construct a {@link RecordingV2}.\n */\n constructor() {\n super();\n Object.defineProperties(this, {\n _revision: {\n value: 1,\n writable: true\n }\n });\n }\n\n /**\n * Compare the {@link RecordingV2} to a {@link RecordingV2#Representation}\n * of itself and perform any updates necessary.\n * @param {RecordingV2#Representation} recording\n * @returns {this}\n * @fires RecordingSignaling#updated\n */\n update(recording) {\n if (recording.revision < this._revision) {\n return this;\n }\n this._revision = recording.revision;\n return this.enable(recording.is_recording);\n }\n}\n\n/**\n * The Room Signaling Protocol (RSP) representation of a {@link RecordingV2}\n * @typedef {object} RecordingV2#Representation\n * @property {boolean} enabled\n * @property {number} revision\n */\n\nmodule.exports = RecordingV2;\n","'use strict';\n\nconst DefaultRecordingSignaling = require('./recording');\nconst StateMachine = require('../statemachine');\nconst DefaultTimeout = require('../util/timeout');\nconst { buildLogLevels } = require('../util');\nconst { DEFAULT_LOG_LEVEL } = require('../util/constants');\nconst Log = require('../util/log');\n\nconst {\n MediaConnectionError,\n MediaDTLSTransportFailedError,\n SignalingConnectionDisconnectedError\n} = require('../util/twilio-video-errors');\n\nlet nInstances = 0;\n\n/*\nRoomSignaling States\n-----------------------\n\n +-----------+ +--------------+\n | | | |\n | connected |---->| disconnected |\n | | | |\n +-----------+ +--------------+\n | ^ ^\n | | |\n | | +--------------+\n | +---| |\n | | reconnecting |\n +----->| |\n +--------------+\n\n*/\n\nconst states = {\n connected: [\n 'reconnecting',\n 'disconnected'\n ],\n reconnecting: [\n 'connected',\n 'disconnected'\n ],\n disconnected: []\n};\n\n/**\n * A {@link Room} implementation\n * @extends StateMachine\n * @property {RTCPeerConnectionState} connectionState\n * @property {?Participant.SID} dominantSpeakerSid\n * @property {ParticipantSignaling} localParticipant\n * @property {RTCIceConnectionState} iceConnectionState\n * @property {string} name\n * @property {Map} participants\n * @property {RecordingSignaling} recording\n * @property {Room.SID} sid\n * @property {string} state - \"connected\", \"reconnecting\", or \"disconnected\"\n * @property {string} signalingConnectionState - \"connected\",\n * \"reconnecting\", or \"disconnected\"\n * @emits RoomSignaling#connectionStateChanged\n * @emits RoomSignaling#dominantSpeakerChanged\n * @emits RoomSignaling#iceConnectionStateChanged\n * @emits RoomSignaling#signalingConnectionStateChanged\n */\nclass RoomSignaling extends StateMachine {\n /**\n * Construct a {@link RoomSignaling}.\n * @param {ParticipantSignaling} localParticipant\n * @param {Room.SID} sid\n * @param {string} name\n * @param {object} options\n */\n constructor(localParticipant, sid, name, options) {\n options = Object.assign({\n logLevel: DEFAULT_LOG_LEVEL,\n RecordingSignaling: DefaultRecordingSignaling,\n Timeout: DefaultTimeout\n }, options);\n\n const logLevels = buildLogLevels(options.logLevel);\n\n super('connected', states);\n\n const RecordingSignaling = options.RecordingSignaling;\n\n const sessionTimeout = new options.Timeout(() => {\n this._disconnect(this._reconnectingError);\n }, options.sessionTimeout, false);\n\n Object.defineProperties(this, {\n _instanceId: {\n value: nInstances++\n },\n _log: {\n value: options.log\n ? options.log.createLog('default', this)\n : new Log('default', this, logLevels, options.loggerName)\n },\n _mediaConnectionIsReconnecting: {\n writable: true,\n value: false\n },\n _options: {\n value: options\n },\n _reconnectingError: {\n value: null,\n writable: true\n },\n _sessionTimeout: {\n value: sessionTimeout\n },\n dominantSpeakerSid: {\n enumerable: true,\n value: null,\n writable: true\n },\n localParticipant: {\n enumerable: true,\n value: localParticipant\n },\n name: {\n enumerable: true,\n value: name\n },\n participants: {\n enumerable: true,\n value: new Map()\n },\n recording: {\n enumerable: true,\n value: new RecordingSignaling()\n },\n sid: {\n enumerable: true,\n value: sid\n }\n });\n\n this.on('connectionStateChanged', () => {\n if (this.connectionState === 'failed'\n && !['disconnected', 'failed'].includes(this.iceConnectionState)) {\n this._disconnect(new MediaDTLSTransportFailedError());\n }\n });\n\n this.on('iceConnectionStateChanged', () => maybeUpdateState(this));\n this.on('signalingConnectionStateChanged', () => maybeUpdateState(this));\n\n // NOTE(mmalavalli): In case \"iceConnectionState\" is already failed, update\n // the RoomSignaling state. setTimeout() ensures that the state is updated\n // after RoomV2's constructor is fully executed, thereby making \"signalingConnectionState\"\n // available here.\n setTimeout(() => maybeUpdateState(this));\n }\n\n /**\n * Disconnect, possibly with an Error.\n * @private\n * @param {Error} [error]\n * @returns {boolean}\n */\n _disconnect(error) {\n if (this.state !== 'disconnected') {\n this.preempt('disconnected', null, [error]);\n return true;\n }\n return false;\n }\n\n toString() {\n return `[RoomSignaling #${this._instanceId}: ${this.localParticipant ? this.localParticipant.sid : 'null'}]`;\n }\n\n /**\n * Connect {@link RemoteParticipantSignaling} to the {@link RoomSignaling}.\n * @param {RemoteParticipantSignaling} participant\n * @returns {boolean}\n */\n connectParticipant(participant) {\n const self = this;\n\n if (participant.state === 'disconnected') {\n return false;\n }\n\n if (this.participants.has(participant.sid)) {\n return false;\n }\n\n this.participants.set(participant.sid, participant);\n\n participant.on('stateChanged', function stateChanged(state) {\n if (state === 'disconnected') {\n participant.removeListener('stateChanged', stateChanged);\n self.participants.delete(participant.sid);\n self.emit('participantDisconnected', participant);\n }\n });\n\n this.emit('participantConnected', participant);\n\n return true;\n }\n\n /**\n * Disconnect.\n * @returns {boolean}\n */\n disconnect() {\n return this._disconnect();\n }\n\n /**\n * Set (or unset) the Dominant Speaker.\n * @param {?Participant.SID} dominantSpeakerSid\n * @returns {void}\n */\n setDominantSpeaker(dominantSpeakerSid) {\n this.dominantSpeakerSid = dominantSpeakerSid;\n this.emit('dominantSpeakerChanged');\n }\n}\n\n/**\n * @event RoomSignaling#event:connectionStateChanged\n */\n\n/**\n * @event RoomSignaling#event:dominantSpeakerChanged\n */\n\n/**\n * {@link RemoteParticipantSignaling} connected to the {@link RoomSignaling}.\n * @event RoomSignaling#event:participantConnected\n * @param {RemoteParticipantSignaling} participantSignaling\n */\n\n/**\n * {@link RemoteParticipantSignaling} disconnected from the {@link RoomSignaling}.\n * @event RoomSignaling#event:participantDisconnected\n * @param {RemoteParticipantSignaling} participantSignaling\n */\n\n/**\n * @event RoomSignaling#event:iceConnectionStateChanged\n */\n\n/**\n * @event RoomSignaling#event:signalingConnectionStateChanged\n */\n\n/**\n * Maybe update the {@link RoomSignaling} state.\n * @param {RoomSignaling} roomSignaling\n */\nfunction maybeUpdateState(roomSignaling) {\n if (roomSignaling.state === 'disconnected' || roomSignaling.signalingConnectionState === 'disconnected') {\n roomSignaling._sessionTimeout.clear();\n return;\n }\n\n let newState;\n\n if (roomSignaling.signalingConnectionState === 'reconnecting') {\n newState = roomSignaling.signalingConnectionState;\n } else if (roomSignaling.iceConnectionState === 'failed') {\n roomSignaling._mediaConnectionIsReconnecting = true;\n newState = 'reconnecting';\n } else if (roomSignaling.iceConnectionState === 'new' || roomSignaling.iceConnectionState === 'checking') {\n newState = roomSignaling._mediaConnectionIsReconnecting ? 'reconnecting' : 'connected';\n } else {\n roomSignaling._mediaConnectionIsReconnecting = false;\n roomSignaling._reconnectingError = null;\n roomSignaling._sessionTimeout.clear();\n newState = 'connected';\n }\n\n if (newState === roomSignaling.state) {\n return;\n }\n\n if (newState === 'reconnecting') {\n roomSignaling._reconnectingError = roomSignaling.signalingConnectionState === 'reconnecting'\n ? new SignalingConnectionDisconnectedError()\n : new MediaConnectionError();\n roomSignaling._sessionTimeout.start();\n roomSignaling.preempt(newState, null, [roomSignaling._reconnectingError]);\n } else {\n roomSignaling.preempt(newState);\n }\n}\n\nmodule.exports = RoomSignaling;\n","'use strict';\n\n/**\n * Bandwidth network quality statistics.\n * @property {?number} actual - the actual bandwidth used, in bits per second\n * @property {?number} available - an estimate of available useable bandwidth, in bits per second\n * @property {?NetworkQualityLevel} level - {@link NetworkQualityLevel} for bandwidth\n */\nclass NetworkQualityBandwidthStats {\n /**\n * Construct a {@link NetworkQualityBandwidthStats}.\n * @param {BandwidthStats} bandwidthStats\n */\n constructor({ actual = null, available = null, level = null }) {\n Object.defineProperties(this, {\n actual: {\n value: actual,\n enumerable: true\n },\n available: {\n value: available,\n enumerable: true\n },\n level: {\n value: level,\n enumerable: true\n }\n });\n }\n}\n\nmodule.exports = NetworkQualityBandwidthStats;\n","'use strict';\n\n/**\n * Fraction lost network quality statistics.\n * @property {?number} fractionLost - packets lost\n * @property {?NetworkQualityLevel} level - {@link NetworkQualityLevel} for fraction lost\n */\nclass NetworkQualityFractionLostStats {\n /**\n * Construct a {@link NetworkQualityFractionLostStats}.\n * @param {FractionLostStats} fractionLostStats\n */\n constructor({ fractionLost = null, level = null }) {\n Object.defineProperties(this, {\n fractionLost: {\n value: fractionLost,\n enumerable: true\n },\n level: {\n value: level,\n enumerable: true\n }\n });\n }\n}\n\nmodule.exports = NetworkQualityFractionLostStats;\n","'use strict';\n\n/**\n * Latency network quality statistics.\n * @property {?number} jitter - media jitter in seconds\n * @property {?number} rtt - round trip time in seconds\n * @property {?NetworkQualityLevel} level - {@link NetworkQualityLevel} for latency\n */\nclass NetworkQualityLatencyStats {\n /**\n * Construct a {@link NetworkQualityLatencyStats}.\n * @param {LatencyStats} latencyStats\n */\n constructor({ jitter = null, rtt = null, level = null }) {\n Object.defineProperties(this, {\n jitter: {\n value: jitter,\n enumerable: true\n },\n rtt: {\n value: rtt,\n enumerable: true\n },\n level: {\n value: level,\n enumerable: true\n }\n });\n }\n}\n\nmodule.exports = NetworkQualityLatencyStats;\n","'use strict';\n\nconst NetworkQualityBandwidthStats = require('./networkqualitybandwidthstats');\nconst NetworkQualityFractionLostStats = require('./networkqualityfractionloststats');\nconst NetworkQualityLatencyStats = require('./networkqualitylatencystats');\n\n/**\n * Network quality statistics shared between {@link NetworkQualitySendStats} and\n * {@link NetworkQualityRecvStats} based on which a {@link Participant}'s\n * {@link NetworkQualityMediaStats}#send or\n * {@link NetworkQualityMediaStats}#recv is calculated.\n * @property {?NetworkQualityBandwidthStats} bandwidth - bandwidth statistics\n * @property {?NetworkQualityLatencyStats} latency - latency statistics\n * @property {?NetworkQualityFractionLostStats} fractionLost - fraction lost statistics\n */\nclass NetworkQualitySendOrRecvStats {\n /**\n * Construct a {@link NetworkQualitySendOrRecvStats}.\n * @param {SendOrRecvStats} sendOrRecvStats\n */\n constructor({ bandwidth = null, fractionLost = null, latency = null }) {\n Object.defineProperties(this, {\n bandwidth: {\n value: bandwidth ? new NetworkQualityBandwidthStats(bandwidth) : null,\n enumerable: true\n },\n fractionLost: {\n value: fractionLost ? new NetworkQualityFractionLostStats(fractionLost) : null,\n enumerable: true\n },\n latency: {\n value: latency ? new NetworkQualityLatencyStats(latency) : null,\n enumerable: true\n }\n });\n }\n}\n\nmodule.exports = NetworkQualitySendOrRecvStats;\n","'use strict';\n\nconst NetworkQualitySendOrRecvStats = require('./networkqualitysendorrecvstats');\n\n/**\n * {@link NetworkQualitySendOrRecvStats} based on which a {@link Participant}'s\n * {@link NetworkQualityMediaStats}#send is calculated.\n */\nclass NetworkQualitySendStats extends NetworkQualitySendOrRecvStats {\n /**\n * Construct a {@link NetworkQualitySendStats}.\n * @param {SendOrRecvStats} sendOrRecvStats\n */\n constructor(sendOrRecvStats) {\n super(sendOrRecvStats);\n }\n}\n\nmodule.exports = NetworkQualitySendStats;\n","'use strict';\n\nconst NetworkQualitySendOrRecvStats = require('./networkqualitysendorrecvstats');\n\n/**\n * {@link NetworkQualitySendOrRecvStats} based on which a {@link Participant}'s\n * {@link NetworkQualityMediaStats}#recv is calculated.\n */\nclass NetworkQualityRecvStats extends NetworkQualitySendOrRecvStats {\n /**\n * Construct a {@link NetworkQualityRecvStats}.\n * @param {SendOrRecvStats} sendOrRecvStats\n */\n constructor(sendOrRecvStats) {\n super(sendOrRecvStats);\n }\n}\n\nmodule.exports = NetworkQualityRecvStats;\n","'use strict';\n\nconst NetworkQualitySendStats = require('./networkqualitysendstats');\nconst NetworkQualityRecvStats = require('./networkqualityrecvstats');\n\n/**\n * Network quality statistics shared between a {@link Participant}'s audio or video.\n * @property {NetworkQualityLevel} send - {@link NetworkQualityLevel} of the\n * {@link Participant}'s published audio or video\n * @property {number} recv - {@link NetworkQualityLevel} of the\n * {@link Participant}'s subscribed audio or video\n * @property {?NetworkQualitySendOrRecvStats} sendStats - {@link NetworkQualitySendOrRecvStats}\n * based on which {@link NetworkQualityMediaStats}#send\n * is calculated\n * @property {?NetworkQualitySendOrRecvStats} recvStats - {@link NetworkQualitySendOrRecvStats}\n * based on which {@link NetworkQualityMediaStats}#recv\n * is calculated\n */\nclass NetworkQualityMediaStats {\n /**\n * Construct a {@link NetworkQualityMediaStats}.\n * @param {MediaLevels} mediaLevels\n */\n constructor({ send, recv, sendStats = null, recvStats = null }) {\n Object.defineProperties(this, {\n send: {\n value: send,\n enumerable: true\n },\n recv: {\n value: recv,\n enumerable: true\n },\n sendStats: {\n value: sendStats ? new NetworkQualitySendStats(sendStats) : null,\n enumerable: true\n },\n recvStats: {\n value: recvStats ? new NetworkQualityRecvStats(recvStats) : null,\n enumerable: true\n }\n });\n }\n}\n\nmodule.exports = NetworkQualityMediaStats;\n","'use strict';\n\nconst NetworkQualityMediaStats = require('./networkqualitymediastats');\n\n/**\n * {@link NetworkQualityMediaStats} for a {@link Participant}'s audio.\n */\nclass NetworkQualityAudioStats extends NetworkQualityMediaStats {\n /**\n * Construct a {@link NetworkQualityAudioStats}.\n * @param {MediaLevels} mediaLevels\n */\n constructor(mediaLevels) {\n super(mediaLevels);\n }\n}\n\nmodule.exports = NetworkQualityAudioStats;\n","'use strict';\n\nconst NetworkQualityMediaStats = require('./networkqualitymediastats');\n\n/**\n * {@link NetworkQualityMediaStats} for a {@link Participant}'s video.\n */\nclass NetworkQualityVideoStats extends NetworkQualityMediaStats {\n /**\n * Construct a {@link NetworkQualityVideoStats}.\n * @param {MediaLevels} mediaLevels\n */\n constructor(mediaLevels) {\n super(mediaLevels);\n }\n}\n\nmodule.exports = NetworkQualityVideoStats;\n","'use strict';\n\nconst NetworkQualityAudioStats = require('./networkqualityaudiostats');\nconst NetworkQualityVideoStats = require('./networkqualityvideostats');\n\n/**\n * Network quality statistics for a {@link Participant}.\n * @property {NetworkQualityLevel} level - {@link NetworkQualityLevel} of the {@link Participant}\n * @property {?NetworkQualityAudioStats} audio - {@link NetworkQualityMediaStats}\n * for audio; null if {@link NetworkQualityVerbosity} is {@link NetworkQualityVerbosity}#minimal\n * or below\n * @property {?NetworkQualityVideoStats} video - {@link NetworkQualityMediaStats}\n * for video; null if {@link NetworkQualityVerbosity} is {@link NetworkQualityVerbosity}#minimal\n * or below\n */\nclass NetworkQualityStats {\n /**\n * Construct a {@link NetworkQualityStats}.\n * @param {NetworkQualityLevels} networkQualityLevels\n */\n constructor({ level, audio, video }) {\n Object.defineProperties(this, {\n level: {\n value: level,\n enumerable: true\n },\n audio: {\n value: audio ? new NetworkQualityAudioStats(audio) : null,\n enumerable: true\n },\n video: {\n value: video ? new NetworkQualityVideoStats(video) : null,\n enumerable: true\n }\n });\n }\n}\n\nmodule.exports = NetworkQualityStats;\n","'use strict';\n\nconst StateMachine = require('../statemachine');\nconst NetworkQualityStats = require('../stats/networkqualitystats');\n\n/*\nParticipantSignaling States\n----------------------\n\n +------------+ +-----------+ +--------------+\n | | | | | |\n | connecting |---->| connected |---->| disconnected |\n | | | | | |\n +------------+ +-----------+ +--------------+\n | ^ ^\n | | +--------------+ |\n | |--| | |\n |--->| reconnecting |--|\n | |\n +--------------+\n*/\n\nconst states = {\n connecting: [\n 'connected'\n ],\n connected: [\n 'disconnected',\n 'reconnecting'\n ],\n reconnecting: [\n 'connected',\n 'disconnected'\n ],\n disconnected: []\n};\n\n/**\n * A {@link Participant} implementation\n * @extends StateMachine\n * @property {?string} identity\n * @property {?Participant.SID} sid\n * @property {string} state - \"connecting\", \"connected\", or \"disconnected\"\n * @property {Map} tracks\n * @emits ParticipantSignaling#networkQualityLevelChanged\n * @emits ParticipantSignaling#trackAdded\n * @emits ParticipantSignaling#trackRemoved\n */\nclass ParticipantSignaling extends StateMachine {\n /**\n * Construct a {@link ParticipantSignaling}.\n */\n constructor() {\n super('connecting', states);\n\n Object.defineProperties(this, {\n _identity: {\n writable: true,\n value: null\n },\n _networkQualityLevel: {\n value: null,\n writable: true\n },\n _networkQualityStats: {\n value: null,\n writable: true\n },\n _sid: {\n writable: true,\n value: null\n },\n identity: {\n enumerable: true,\n get() {\n return this._identity;\n }\n },\n sid: {\n enumerable: true,\n get() {\n return this._sid;\n }\n },\n tracks: {\n enumerable: true,\n value: new Map()\n }\n });\n }\n\n /**\n * Get the current {@link NetworkQualityLevel}, if any.\n * @returns {?NetworkQualityLevel} networkQualityLevel - initially null\n */\n get networkQualityLevel() {\n return this._networkQualityLevel;\n }\n\n /**\n * Get the current {@link NetworkQualityStats}\n * @returns {?NetworkQualityStats} networkQualityStats - initially null\n */\n get networkQualityStats() {\n return this._networkQualityStats;\n }\n\n /**\n * Add the {@link TrackSignaling}, MediaStreamTrack, or\n * {@link DataTrackSender} to the {@link ParticipantSignaling}.\n * @param {TrackSignaling|DataTrackSender|MediaTrackSender} track\n * @returns {this}\n * @fires ParticipantSignaling#trackAdded\n */\n addTrack(track) {\n this.tracks.set(track.id || track.sid, track);\n this.emit('trackAdded', track);\n return this;\n }\n\n /**\n * Disconnect the {@link ParticipantSignaling}.\n * @returns {boolean}\n */\n disconnect() {\n if (this.state !== 'disconnected') {\n this.preempt('disconnected');\n return true;\n }\n return false;\n }\n\n /**\n * Remove the {@link TrackSignaling}, MediaStreamTrack, or\n * {@link DataTrackSender} from the {@link ParticipantSignaling}.\n * @param {TrackSignaling|DataTrackSender|MediaTrackSender} track\n * @returns {?TrackSignaling}\n * @fires ParticipantSignaling#trackRemoved\n */\n removeTrack(track) {\n const signaling = this.tracks.get(track.id || track.sid);\n this.tracks.delete(track.id || track.sid);\n if (signaling) {\n this.emit('trackRemoved', track);\n }\n return signaling || null;\n }\n\n /**\n * @param {NetworkQualityLevel} networkQualityLevel\n * @param {?NetworkQualityLevels} [networkQualityLevels=null]\n * @returns {void}\n */\n setNetworkQualityLevel(networkQualityLevel, networkQualityLevels) {\n if (this._networkQualityLevel !== networkQualityLevel) {\n this._networkQualityLevel = networkQualityLevel;\n this._networkQualityStats = networkQualityLevels\n && (networkQualityLevels.audio || networkQualityLevels.video)\n ? new NetworkQualityStats(networkQualityLevels)\n : null;\n this.emit('networkQualityLevelChanged');\n }\n }\n\n /**\n * Connect the {@link ParticipantSignaling}.\n * @param {Participant.SID} sid\n * @param {string} identity\n * @returns {boolean}\n */\n connect(sid, identity) {\n if (this.state === 'connecting' || this.state === 'reconnecting') {\n if (!this._sid) {\n this._sid = sid;\n }\n if (!this._identity) {\n this._identity = identity;\n }\n this.preempt('connected');\n return true;\n }\n return false;\n }\n\n /**\n * Transition to \"reconnecting\" state.\n * @returns {boolean}\n */\n reconnecting() {\n if (this.state === 'connecting' || this.state === 'connected') {\n this.preempt('reconnecting');\n return true;\n }\n return false;\n }\n}\n\n/**\n * @event ParticipantSignaling#event:networkQualityLevelChanged\n */\n\n/**\n * {@link TrackSignaling} was added to the {@link ParticipantSignaling}.\n * @event ParticipantSignaling#trackAdded\n * @param {TrackSignaling} track\n */\n\n/**\n * {@link TrackSignaling} was removed from the {@link ParticipantSignaling}.\n * @event ParticipantSignaling#trackRemoved\n * @param {TrackSignaling} track\n */\n\nmodule.exports = ParticipantSignaling;\n","'use strict';\n\nconst ParticipantSignaling = require('./participant');\n\n/**\n * A {@link Participant} implementation\n * @extends ParticipantSignaling\n * @property {string} identity\n * @property {Participant.SID} sid\n */\nclass RemoteParticipantSignaling extends ParticipantSignaling {\n /**\n * Construct a {@link RemoteParticipantSignaling}.\n * @param {Participant.SID} sid\n * @param {string} identity\n */\n constructor(sid, identity) {\n super();\n this.connect(sid, identity);\n }\n}\n\nmodule.exports = RemoteParticipantSignaling;\n","'use strict';\n\nconst { EventEmitter } = require('events');\n\n/**\n * A {@link Track} implementation\n * @extends EventEmitter\n * @property {Track.Kind} kind\n * @property {string} name\n */\nclass TrackSignaling extends EventEmitter {\n /**\n * Construct a {@link TrackSignaling}.\n * @param {string} name\n * @param {Track.Kind} kind\n * @param {boolean} isEnabled\n * @param {Track.Priority} priority\n */\n constructor(name, kind, isEnabled, priority) {\n super();\n let sid = null;\n Object.defineProperties(this, {\n _error: {\n value: null,\n writable: true\n },\n _isEnabled: {\n value: isEnabled,\n writable: true\n },\n _priority: {\n value: priority,\n writable: true\n },\n _trackTransceiver: {\n value: null,\n writable: true\n },\n _sid: {\n get() {\n return sid;\n },\n set(_sid) {\n if (sid === null) {\n sid = _sid;\n }\n }\n },\n kind: {\n enumerable: true,\n value: kind\n },\n name: {\n enumerable: true,\n value: name\n }\n });\n }\n\n /**\n * Non-null if publication or subscription failed.\n * @property {?Error} error\n */\n get error() {\n return this._error;\n }\n\n /**\n * Whether the {@link TrackSignaling} is enabled.\n * @property {boolean}\n */\n get isEnabled() {\n return this._isEnabled;\n }\n\n /**\n * The {@link TrackSignaling}'s priority.\n * @property {Track.Priority}\n */\n get priority() {\n return this._priority;\n }\n\n /**\n * The {@link TrackSignaling}'s {@link Track.SID}.\n * @property {Track.SID}\n */\n get sid() {\n return this._sid;\n }\n\n /**\n * The {@link TrackSignaling}'s {@link TrackTransceiver}.\n * @property {TrackTransceiver}\n */\n get trackTransceiver() {\n return this._trackTransceiver;\n }\n\n /**\n * Disable the {@link TrackSignaling} if it is not already disabled.\n * @return {this}\n */\n disable() {\n return this.enable(false);\n }\n\n /**\n * Enable (or disable) the {@link TrackSignaling} if it is not already enabled\n * (or disabled).\n * @param {boolean} [enabled=true]\n * @return {this}\n */\n enable(enabled) {\n enabled = typeof enabled === 'boolean' ? enabled : true;\n if (this.isEnabled !== enabled) {\n this._isEnabled = enabled;\n this.emit('updated');\n }\n return this;\n }\n\n /**\n * Set the {@link TrackTransceiver} on the {@link TrackSignaling}.\n * @param {TrackTransceiver} trackTransceiver\n * @returns {this}\n */\n\n setTrackTransceiver(trackTransceiver) {\n trackTransceiver = trackTransceiver || null;\n if (this.trackTransceiver !== trackTransceiver) {\n this._trackTransceiver = trackTransceiver;\n this.emit('updated');\n }\n return this;\n }\n\n /**\n * Set the SID on the {@link TrackSignaling} once.\n * @param {string} sid\n * @returns {this}\n */\n setSid(sid) {\n if (this.sid === null) {\n this._sid = sid;\n this.emit('updated');\n }\n return this;\n }\n}\n\n/**\n * Emitted whenever the {@link TrackSignaling} is updated\n * @event TrackSignaling#updated\n */\n\nmodule.exports = TrackSignaling;\n","'use strict';\n\nconst TrackSignaling = require('./track');\n\n/**\n * A {@link RemoteTrackPublication} implementation\n * @extends TrackSignaling\n */\nclass RemoteTrackPublicationSignaling extends TrackSignaling {\n /**\n * Construct a {@link RemoteTrackPublicationSignaling}.\n * @param {Track.SID} sid\n * @param {string} name\n * @param {Track.Kind} kind\n * @param {boolean} isEnabled\n * @param {Track.Priority} priority\n * @param {boolean} isSwitchedOff\n */\n constructor(sid, name, kind, isEnabled, priority, isSwitchedOff) {\n super(name, kind, isEnabled, priority);\n Object.defineProperties(this, {\n _isSwitchedOff: {\n value: isSwitchedOff,\n writable: true\n },\n });\n this.setSid(sid);\n }\n\n /**\n * Whether the {@link RemoteTrackPublicationSignaling} is subscribed to.\n * @property {boolean}\n */\n get isSubscribed() {\n return !!this.trackTransceiver;\n }\n\n /**\n * Whether the {@link RemoteTrackPublicationSignaling} is switched off.\n * @property {boolean}\n */\n get isSwitchedOff() {\n return this._isSwitchedOff;\n }\n\n /**\n * @param {Error} error\n * @returns {this}\n */\n subscribeFailed(error) {\n if (!this.error) {\n this._error = error;\n this.emit('updated');\n }\n return this;\n }\n\n /**\n * Update the publish {@link Track.Priority}.\n * @param {Track.Priority} priority\n * @returns {this}\n */\n setPriority(priority) {\n if (this._priority !== priority) {\n this._priority = priority;\n this.emit('updated');\n }\n return this;\n }\n\n /**\n * Updates track switch on/off state.\n * @param {boolean} isSwitchedOff\n * @returns {this}\n */\n setSwitchedOff(isSwitchedOff) {\n if (this._isSwitchedOff !== isSwitchedOff) {\n this._isSwitchedOff = isSwitchedOff;\n this.emit('updated');\n }\n return this;\n }\n}\n\n\nmodule.exports = RemoteTrackPublicationSignaling;\n","'use strict';\n\nconst RemoteTrackPublicationSignaling = require('../remotetrackpublication');\n\n/**\n * @extends RemoteTrackPublicationSignaling\n */\nclass RemoteTrackPublicationV2 extends RemoteTrackPublicationSignaling {\n /**\n * Construct a {@link RemoteTrackPublicationV2}.\n * @param {RemoteTrackPublicationV2#Representation} track\n * @param {boolean} isSwitchedOff\n *\n */\n constructor(track, isSwitchedOff) {\n super(track.sid, track.name, track.kind, track.enabled, track.priority, isSwitchedOff);\n }\n\n /**\n * Compare the {@link RemoteTrackPublicationV2} to a\n * {@link RemoteTrackPublicationV2#Representation} of itself and perform any\n * updates necessary.\n * @param {RemoteTrackPublicationV2#Representation} track\n * @returns {this}\n * @fires TrackSignaling#updated\n */\n update(track) {\n this.enable(track.enabled);\n this.setPriority(track.priority);\n return this;\n }\n}\n\n/**\n * The Room Signaling Protocol (RSP) representation of a {@link RemoteTrackPublicationV2}.\n * @typedef {LocalTrackPublicationV2#Representation} RemoteTrackPublicationV2#Representation\n * @property {boolean} subscribed\n */\n\nmodule.exports = RemoteTrackPublicationV2;\n","'use strict';\n\nconst RemoteParticipantSignaling = require('../remoteparticipant');\nconst RemoteTrackPublicationV2 = require('./remotetrackpublication');\n\n/**\n * @extends RemoteParticipantSignaling\n * @property {?number} revision\n */\nclass RemoteParticipantV2 extends RemoteParticipantSignaling {\n /**\n * Construct a {@link RemoteParticipantV2}.\n * @param {object} participantState\n * @param {function(Track.SID): boolean} getInitialTrackSwitchOffState\n * @param {function(Track.SID, Track.Priority): boolean} setPriority\n * @param {function(Track.SID, ClientRenderHint): Promise} setRenderHint\n * @param {function(Track.SID): void} clearTrackHint\n * @param {object} [options]\n */\n constructor(participantState, getInitialTrackSwitchOffState, setPriority, setRenderHint, clearTrackHint, options) {\n super(participantState.sid, participantState.identity);\n\n options = Object.assign({\n RemoteTrackPublicationV2\n }, options);\n\n Object.defineProperties(this, {\n _revision: {\n writable: true,\n value: null\n },\n _RemoteTrackPublicationV2: {\n value: options.RemoteTrackPublicationV2\n },\n _getInitialTrackSwitchOffState: {\n value: getInitialTrackSwitchOffState\n },\n updateSubscriberTrackPriority: {\n value: (trackSid, priority) => setPriority(trackSid, priority)\n },\n updateTrackRenderHint: {\n value: (trackSid, renderHint) => setRenderHint(trackSid, renderHint)\n },\n clearTrackHint: {\n value: trackSid => clearTrackHint(trackSid)\n },\n revision: {\n enumerable: true,\n get() {\n return this._revision;\n }\n }\n });\n\n return this.update(participantState);\n }\n\n /**\n * @private\n */\n _getOrCreateTrack(trackState) {\n const RemoteTrackPublicationV2 = this._RemoteTrackPublicationV2;\n let track = this.tracks.get(trackState.sid);\n if (!track) {\n const isSwitchedOff = this._getInitialTrackSwitchOffState(trackState.sid);\n track = new RemoteTrackPublicationV2(trackState, isSwitchedOff);\n this.addTrack(track);\n }\n return track;\n }\n\n /**\n * Update the {@link RemoteParticipantV2} with the new state.\n * @param {object} participantState\n * @returns {this}\n */\n update(participantState) {\n if (this.revision !== null && participantState.revision <= this.revision) {\n return this;\n }\n this._revision = participantState.revision;\n\n const tracksToKeep = new Set();\n\n participantState.tracks.forEach(trackState => {\n const track = this._getOrCreateTrack(trackState);\n track.update(trackState);\n tracksToKeep.add(track);\n });\n\n this.tracks.forEach(track => {\n if (!tracksToKeep.has(track)) {\n this.removeTrack(track);\n }\n });\n\n switch (participantState.state) {\n case 'disconnected':\n this.disconnect();\n break;\n case 'reconnecting':\n this.reconnecting();\n break;\n case 'connected':\n this.connect(this.sid, this.identity);\n break;\n }\n\n return this;\n }\n}\n\nmodule.exports = RemoteParticipantV2;\n","'use strict';\n\nconst MediaSignaling = require('./mediasignaling');\nclass TrackPrioritySignaling extends MediaSignaling {\n /**\n * Construct a {@link TrackPrioritySignaling}.\n * @param {Promise} getReceiver\n */\n constructor(getReceiver, options) {\n super(getReceiver, 'track_priority', options);\n\n Object.defineProperties(this, {\n _enqueuedPriorityUpdates: {\n value: new Map()\n },\n });\n\n this.on('ready', transport => {\n Array.from(this._enqueuedPriorityUpdates.keys()).forEach(trackSid => {\n transport.publish({\n type: 'track_priority',\n track: trackSid,\n subscribe: this._enqueuedPriorityUpdates.get(trackSid)\n });\n // NOTE(mpatwardhan)- we do not clear _enqueuedPriorityUpdates intentionally,\n // this cache will is used to re-send the priorities in case of VMS-FailOver.\n });\n });\n }\n\n /**\n * @param {Track.SID} trackSid\n * @param {'publish'|'subscribe'} publishOrSubscribe\n * @param {Track.Priority} priority\n */\n sendTrackPriorityUpdate(trackSid, publishOrSubscribe, priority) {\n if (publishOrSubscribe !== 'subscribe') {\n throw new Error('only subscribe priorities are supported, found: ' + publishOrSubscribe);\n }\n this._enqueuedPriorityUpdates.set(trackSid, priority);\n if (this._transport) {\n this._transport.publish({\n type: 'track_priority',\n track: trackSid,\n subscribe: priority\n });\n }\n }\n}\n\nmodule.exports = TrackPrioritySignaling;\n","'use strict';\n\nconst MediaSignaling = require('./mediasignaling');\n\n/**\n * @emits TrackSwitchOffSignalinging#updated\n */\nclass TrackSwitchOffSignaling extends MediaSignaling {\n /**\n * Construct a {@link TrackSwitchOffSignaling}.\n * @param {Promise} getReceiver\n */\n constructor(getReceiver, options) {\n super(getReceiver, 'track_switch_off', options);\n this.on('ready', transport => {\n transport.on('message', message => {\n switch (message.type) {\n case 'track_switch_off':\n this._setTrackSwitchOffUpdates(message.off || [], message.on || []);\n break;\n default:\n break;\n }\n });\n });\n }\n\n /**\n * @private\n * @param {[Track.SID]} tracksSwitchedOff\n * @param {[Track.SID]} tracksSwitchedOn\n * @returns {void}\n */\n _setTrackSwitchOffUpdates(tracksSwitchedOff, tracksSwitchedOn) {\n this.emit('updated', tracksSwitchedOff, tracksSwitchedOn);\n }\n}\n\n/**\n * @event TrackSwitchOffSignaling#updated\n */\n\nmodule.exports = TrackSwitchOffSignaling;\n","/* eslint callback-return:0 */\n'use strict';\n\nconst MediaSignaling = require('./mediasignaling');\nconst Timeout = require('../../util/timeout');\nconst { isDeepEqual } = require('../../util');\nconst RENDER_HINT_RESPONSE_TIME_MS = 2000; // time to wait for server response (before resending all hints.)\n\nlet messageId = 1;\nclass RenderHintsSignaling extends MediaSignaling {\n /**\n * Construct a {@link RenderHintsSignaling}.\n */\n constructor(getReceiver, options) {\n super(getReceiver, 'render_hints', options);\n Object.defineProperties(this, {\n _trackSidsToRenderHints: {\n value: new Map()\n },\n _responseTimer: {\n value: new Timeout(() => {\n this._sendAllHints();\n // once timer fires, for next round double the delay.\n this._responseTimer.setDelay(this._responseTimer.delay * 2);\n }, RENDER_HINT_RESPONSE_TIME_MS, false),\n }\n });\n\n this.on('ready', transport => {\n transport.on('message', message => {\n this._log.debug('Incoming: ', message);\n switch (message.type) {\n case 'render_hints':\n this._processHintResults((message && message.subscriber && message.subscriber.hints) || []);\n break;\n default:\n this._log.warn('Unknown message type: ', message.type);\n break;\n }\n });\n\n // NOTE(mpatwardhan): When transport is set (either 1st time of after vms failover)\n // resend all track states.\n this._sendAllHints();\n });\n }\n\n _sendAllHints() {\n // to force sending all hints simply mark all tracks as dirty.\n Array.from(this._trackSidsToRenderHints.keys()).forEach(trackSid => {\n const trackState = this._trackSidsToRenderHints.get(trackSid);\n if (trackState.renderDimensions) {\n trackState.isDimensionDirty = true;\n }\n\n if ('enabled' in trackState) {\n trackState.isEnabledDirty = true;\n }\n });\n this._sendHints();\n }\n\n _processHintResults(hintResults) {\n this._responseTimer.clear();\n this._responseTimer.setDelay(RENDER_HINT_RESPONSE_TIME_MS);\n hintResults.forEach(hintResult => {\n if (hintResult.result !== 'OK') {\n this._log.debug('Server error processing hint:', hintResult);\n }\n });\n this._sendHints();\n }\n\n _sendHints() {\n if (!this._transport || this._responseTimer.isSet) {\n return;\n }\n\n const hints = [];\n Array.from(this._trackSidsToRenderHints.keys()).forEach(trackSid => {\n const trackState = this._trackSidsToRenderHints.get(trackSid);\n if (trackState.isEnabledDirty || trackState.isDimensionDirty) {\n const mspHint = {\n 'track': trackSid,\n };\n if (trackState.isEnabledDirty) {\n mspHint.enabled = trackState.enabled;\n trackState.isEnabledDirty = false;\n }\n if (trackState.isDimensionDirty) {\n // eslint-disable-next-line camelcase\n mspHint.render_dimensions = trackState.renderDimensions;\n trackState.isDimensionDirty = false;\n }\n hints.push(mspHint);\n }\n });\n\n if (hints.length > 0) {\n const payLoad = {\n type: 'render_hints',\n subscriber: {\n id: messageId++,\n hints\n }\n };\n this._log.debug('Outgoing: ', payLoad);\n this._transport.publish(payLoad);\n this._responseTimer.start();\n }\n }\n\n /**\n * @param {Track.SID} trackSid\n * @param {ClientRenderHint} renderHint\n */\n setTrackHint(trackSid, renderHint) {\n const trackState = this._trackSidsToRenderHints.get(trackSid) || { isEnabledDirty: false, isDimensionDirty: false };\n if ('enabled' in renderHint && trackState.enabled !== renderHint.enabled) {\n trackState.enabled = !!renderHint.enabled;\n trackState.isEnabledDirty = true;\n }\n\n if (renderHint.renderDimensions && !isDeepEqual(renderHint.renderDimensions, trackState.renderDimensions)) {\n // eslint-disable-next-line camelcase\n trackState.renderDimensions = renderHint.renderDimensions;\n trackState.isDimensionDirty = true;\n }\n this._trackSidsToRenderHints.set(trackSid, trackState);\n this._sendHints();\n }\n\n /**\n * must be called when track is unsubscribed.\n * @param {Track.SID} trackSid\n */\n clearTrackHint(trackSid) {\n this._trackSidsToRenderHints.delete(trackSid);\n }\n}\n\n\nmodule.exports = RenderHintsSignaling;\n","/* eslint callback-return:0 */\n'use strict';\n\nconst MediaSignaling = require('./mediasignaling');\n\nlet messageId = 1;\nclass PublisherHintsSignaling extends MediaSignaling {\n /**\n * Construct a {@link RenderHintsSignaling}.\n */\n constructor(getReceiver, options) {\n super(getReceiver, 'publisher_hints', options);\n this.on('ready', transport => {\n this._log.debug('publisher_hints transport ready:', transport);\n transport.on('message', message => {\n this._log.debug('Incoming: ', message);\n switch (message.type) {\n case 'publisher_hints':\n if (message.publisher && message.publisher.hints && message.publisher.id) {\n this._processPublisherHints(message.publisher.hints, message.publisher.id);\n }\n break;\n default:\n this._log.warn('Unknown message type: ', message.type);\n break;\n }\n });\n });\n }\n\n sendTrackReplaced({ trackSid }) {\n if (!this._transport) {\n return;\n }\n\n const payLoad = {\n type: 'client_reset',\n track: trackSid,\n id: messageId++\n };\n this._log.debug('Outgoing: ', payLoad);\n this._transport.publish(payLoad);\n }\n\n sendHintResponse({ id, hints }) {\n if (!this._transport) {\n return;\n }\n const payLoad = {\n type: 'publisher_hints',\n id,\n hints\n };\n this._log.debug('Outgoing: ', payLoad);\n this._transport.publish(payLoad);\n }\n\n /**\n * @private\n */\n _processPublisherHints(hints, id) {\n try {\n this.emit('updated', hints, id);\n } catch (ex) {\n this._log.error('error processing hints:', ex);\n }\n }\n}\n\n\nmodule.exports = PublisherHintsSignaling;\n","/* eslint-disable no-console */\n'use strict';\n\nconst DominantSpeakerSignaling = require('./dominantspeakersignaling');\nconst NetworkQualityMonitor = require('./networkqualitymonitor');\nconst NetworkQualitySignaling = require('./networkqualitysignaling');\nconst RecordingV2 = require('./recording');\nconst RoomSignaling = require('../room');\nconst RemoteParticipantV2 = require('./remoteparticipant');\nconst StatsReport = require('../../stats/statsreport');\nconst TrackPrioritySignaling = require('./trackprioritysignaling');\nconst TrackSwitchOffSignaling = require('./trackswitchoffsignaling');\nconst RenderHintsSignaling = require('./renderhintssignaling');\nconst PublisherHintsSignaling = require('./publisherhintsignaling.js');\n\n\nconst {\n constants: { DEFAULT_SESSION_TIMEOUT_SEC },\n createBandwidthProfilePayload,\n defer,\n difference,\n filterObject,\n flatMap,\n oncePerTick\n} = require('../../util');\n\nconst MovingAverageDelta = require('../../util/movingaveragedelta');\nconst { createTwilioError } = require('../../util/twilio-video-errors');\n\nconst STATS_PUBLISH_INTERVAL_MS = 10000;\n\n/**\n * @extends RoomSignaling\n */\nclass RoomV2 extends RoomSignaling {\n constructor(localParticipant, initialState, transport, peerConnectionManager, options) {\n initialState.options = Object.assign({\n session_timeout: DEFAULT_SESSION_TIMEOUT_SEC\n }, initialState.options);\n\n options = Object.assign({\n DominantSpeakerSignaling,\n NetworkQualityMonitor,\n NetworkQualitySignaling,\n RecordingSignaling: RecordingV2,\n RemoteParticipantV2,\n TrackPrioritySignaling,\n TrackSwitchOffSignaling,\n bandwidthProfile: null,\n sessionTimeout: initialState.options.session_timeout * 1000,\n statsPublishIntervalMs: STATS_PUBLISH_INTERVAL_MS\n }, options);\n\n localParticipant.setBandwidthProfile(options.bandwidthProfile);\n\n const { options: { signaling_region: signalingRegion, audio_processors: audioProcessors = [] } } = initialState;\n localParticipant.setSignalingRegion(signalingRegion);\n\n\n if (audioProcessors.includes('krisp')) {\n // Note(mpatwardhan): we add rnnoise as allowed_processor to enable testing our pipeline e2e.\n audioProcessors.push('rnnoise');\n }\n\n localParticipant.setAudioProcessors(audioProcessors);\n\n peerConnectionManager.setIceReconnectTimeout(options.sessionTimeout);\n\n super(localParticipant, initialState.sid, initialState.name, options);\n\n const getTrackReceiver = id => this._getTrackReceiver(id);\n const log = this._log;\n\n Object.defineProperties(this, {\n _disconnectedParticipantRevisions: {\n value: new Map()\n },\n _NetworkQualityMonitor: {\n value: options.NetworkQualityMonitor\n },\n _lastBandwidthProfileRevision: {\n value: localParticipant.bandwidthProfileRevision,\n writable: true\n },\n _mediaStatesWarningsRevision: {\n value: 0,\n writable: true\n },\n _networkQualityMonitor: {\n value: null,\n writable: true\n },\n _networkQualityConfiguration: {\n value: localParticipant.networkQualityConfiguration\n },\n _peerConnectionManager: {\n value: peerConnectionManager\n },\n _published: {\n value: new Map()\n },\n _publishedRevision: {\n value: 0,\n writable: true\n },\n _RemoteParticipantV2: {\n value: options.RemoteParticipantV2\n },\n _subscribed: {\n value: new Map()\n },\n _subscribedRevision: {\n value: 0,\n writable: true\n },\n _subscriptionFailures: {\n value: new Map()\n },\n _dominantSpeakerSignaling: {\n value: new options.DominantSpeakerSignaling(getTrackReceiver, { log })\n },\n _networkQualitySignaling: {\n value: new options.NetworkQualitySignaling(\n getTrackReceiver,\n localParticipant.networkQualityConfiguration,\n { log }\n )\n },\n _renderHintsSignaling: {\n value: new RenderHintsSignaling(getTrackReceiver, { log }),\n },\n _publisherHintsSignaling: {\n value: new PublisherHintsSignaling(getTrackReceiver, { log }),\n },\n _trackPrioritySignaling: {\n value: new options.TrackPrioritySignaling(getTrackReceiver, { log }),\n },\n _trackSwitchOffSignaling: {\n value: new options.TrackSwitchOffSignaling(getTrackReceiver, { log }),\n },\n _pendingSwitchOffStates: {\n value: new Map()\n },\n _transport: {\n value: transport\n },\n _trackReceiverDeferreds: {\n value: new Map()\n },\n mediaRegion: {\n enumerable: true,\n value: initialState.options.media_region || null\n }\n });\n\n this._initTrackSwitchOffSignaling();\n this._initDominantSpeakerSignaling();\n this._initNetworkQualityMonitorSignaling();\n this._initPublisherHintSignaling();\n\n handleLocalParticipantEvents(this, localParticipant);\n handlePeerConnectionEvents(this, peerConnectionManager);\n handleTransportEvents(this, transport);\n periodicallyPublishStats(this, transport, options.statsPublishIntervalMs);\n\n this._update(initialState);\n\n // NOTE(mpatwardhan) after initial state we know if publisher_hints are enabled or not\n // if they are not enabled. we need to undo simulcast that was enabled with initial offer.\n this._peerConnectionManager.setEffectiveAdaptiveSimulcast(this._publisherHintsSignaling.isSetup);\n }\n\n /**\n * The PeerConnection state.\n * @property {RTCPeerConnectionState}\n */\n get connectionState() {\n return this._peerConnectionManager.connectionState;\n }\n\n /**\n * The Signaling Connection State.\n * @property {string} - \"connected\", \"reconnecting\", \"disconnected\"\n */\n get signalingConnectionState() {\n return this._transport.state === 'syncing'\n ? 'reconnecting'\n : this._transport.state;\n }\n\n /**\n * The Ice Connection State.\n * @property {RTCIceConnectionState}\n */\n get iceConnectionState() {\n return this._peerConnectionManager.iceConnectionState;\n }\n\n /**\n * @private\n */\n _deleteTrackReceiverDeferred(id) {\n return this._trackReceiverDeferreds.delete(id);\n }\n\n /**\n * @private\n */\n _getOrCreateTrackReceiverDeferred(id) {\n const deferred = this._trackReceiverDeferreds.get(id) || defer();\n const trackReceivers = this._peerConnectionManager.getTrackReceivers();\n\n // NOTE(mmalavalli): In Firefox, there can be instances where a MediaStreamTrack\n // for the given Track ID already exists, for example, when a Track is removed\n // and added back. If that is the case, then we should resolve 'deferred'.\n const trackReceiver = trackReceivers.find(trackReceiver => trackReceiver.id === id && trackReceiver.readyState !== 'ended');\n\n if (trackReceiver) {\n deferred.resolve(trackReceiver);\n } else {\n // NOTE(mmalavalli): Only add the 'deferred' to the map if it's not\n // resolved. This will prevent old copies of the MediaStreamTrack from\n // being used when the remote peer removes and re-adds a MediaStreamTrack.\n this._trackReceiverDeferreds.set(id, deferred);\n }\n\n return deferred;\n }\n\n /**\n * @private\n */\n _addTrackReceiver(trackReceiver) {\n const deferred = this._getOrCreateTrackReceiverDeferred(trackReceiver.id);\n deferred.resolve(trackReceiver);\n return this;\n }\n\n /**\n * @private\n */\n _disconnect(error) {\n const didDisconnect = super._disconnect.call(this, error);\n if (didDisconnect) {\n this._teardownNetworkQualityMonitor();\n this._transport.disconnect();\n this._peerConnectionManager.close();\n }\n\n this.localParticipant.tracks.forEach(track => {\n track.publishFailed(error || new Error('LocalParticipant disconnected'));\n });\n\n return didDisconnect;\n }\n\n /**\n * @private\n */\n _getTrackReceiver(id) {\n return this._getOrCreateTrackReceiverDeferred(id).promise.then(trackReceiver => {\n this._deleteTrackReceiverDeferred(id);\n return trackReceiver;\n });\n }\n\n /**\n * @private\n */\n _getInitialTrackSwitchOffState(trackSid) {\n const initiallySwitchedOff = this._pendingSwitchOffStates.get(trackSid) || false;\n this._pendingSwitchOffStates.delete(trackSid);\n if (initiallySwitchedOff) {\n this._log.warn(`[${trackSid}] was initially switched off! `);\n }\n return initiallySwitchedOff;\n }\n\n\n /**\n * @private\n */\n _getTrackSidsToTrackSignalings() {\n const trackSidsToTrackSignalings = flatMap(this.participants, participant => Array.from(participant.tracks));\n return new Map(trackSidsToTrackSignalings);\n }\n\n /**\n * @private\n */\n _getOrCreateRemoteParticipant(participantState) {\n const RemoteParticipantV2 = this._RemoteParticipantV2;\n let participant = this.participants.get(participantState.sid);\n const self = this;\n if (!participant) {\n participant = new RemoteParticipantV2(\n participantState,\n trackSid => this._getInitialTrackSwitchOffState(trackSid),\n (trackSid, priority) => this._trackPrioritySignaling.sendTrackPriorityUpdate(trackSid, 'subscribe', priority),\n (trackSid, hint) => this._renderHintsSignaling.setTrackHint(trackSid, hint),\n trackSid => this._renderHintsSignaling.clearTrackHint(trackSid)\n );\n participant.on('stateChanged', function stateChanged(state) {\n if (state === 'disconnected') {\n participant.removeListener('stateChanged', stateChanged);\n self.participants.delete(participant.sid);\n self._disconnectedParticipantRevisions.set(participant.sid, participant.revision);\n }\n });\n this.connectParticipant(participant);\n }\n return participant;\n }\n\n /**\n * @private\n */\n _getState() {\n return {\n participant: this.localParticipant.getState()\n };\n }\n\n /**\n * @private\n */\n _maybeAddBandwidthProfile(update) {\n const { bandwidthProfile, bandwidthProfileRevision } = this.localParticipant;\n if (bandwidthProfile && this._lastBandwidthProfileRevision < bandwidthProfileRevision) {\n this._lastBandwidthProfileRevision = bandwidthProfileRevision;\n return Object.assign({\n bandwidth_profile: createBandwidthProfilePayload(bandwidthProfile)\n }, update);\n }\n return update;\n }\n /**\n * @private\n */\n _publishNewLocalParticipantState() {\n this._transport.publish(this._maybeAddBandwidthProfile(this._getState()));\n }\n\n /**\n * @private\n */\n _publishPeerConnectionState(peerConnectionState) {\n /* eslint camelcase:0 */\n this._transport.publish(Object.assign({\n peer_connections: [peerConnectionState]\n }, this._getState()));\n }\n\n /**\n * @private\n */\n _update(roomState) {\n if (roomState.subscribed && roomState.subscribed.revision > this._subscribedRevision) {\n this._subscribedRevision = roomState.subscribed.revision;\n roomState.subscribed.tracks.forEach(trackState => {\n if (trackState.id) {\n this._subscriptionFailures.delete(trackState.sid);\n this._subscribed.set(trackState.sid, trackState.id);\n } else if (trackState.error && !this._subscriptionFailures.has(trackState.sid)) {\n this._subscriptionFailures.set(trackState.sid, trackState.error);\n }\n });\n\n const subscribedTrackSids = new Set(roomState.subscribed.tracks\n .filter(trackState => !!trackState.id)\n .map(trackState => trackState.sid));\n\n this._subscribed.forEach((trackId, trackSid) => {\n if (!subscribedTrackSids.has(trackSid)) {\n this._subscribed.delete(trackSid);\n }\n });\n }\n\n const participantsToKeep = new Set();\n\n // eslint-disable-next-line no-warning-comments\n // TODO(mroberts): Remove me once the Server is fixed.\n (roomState.participants || []).forEach(participantState => {\n if (participantState.sid === this.localParticipant.sid) {\n return;\n }\n\n // NOTE(mmalavalli): If the incoming revision for a disconnected Participant is less than or\n // equal to the revision when it was disconnected, then the state is old and can be ignored.\n // Otherwise, the Participant was most likely disconnected in a Large Group Room when it\n // stopped publishing media, and hence needs to be re-added.\n const disconnectedParticipantRevision = this._disconnectedParticipantRevisions.get(participantState.sid);\n if (disconnectedParticipantRevision && participantState.revision <= disconnectedParticipantRevision) {\n return;\n }\n\n if (disconnectedParticipantRevision) {\n this._disconnectedParticipantRevisions.delete(participantState.sid);\n }\n const participant = this._getOrCreateRemoteParticipant(participantState);\n participant.update(participantState);\n participantsToKeep.add(participant);\n });\n\n if (roomState.type === 'synced') {\n this.participants.forEach(participant => {\n if (!participantsToKeep.has(participant)) {\n participant.disconnect();\n }\n });\n }\n\n handleSubscriptions(this);\n\n // eslint-disable-next-line no-warning-comments\n // TODO(mroberts): Remove me once the Server is fixed.\n /* eslint camelcase:0 */\n if (roomState.peer_connections) {\n this._peerConnectionManager.update(roomState.peer_connections, roomState.type === 'synced');\n }\n\n if (roomState.recording) {\n this.recording.update(roomState.recording);\n }\n\n if (roomState.published && roomState.published.revision > this._publishedRevision) {\n this._publishedRevision = roomState.published.revision;\n roomState.published.tracks.forEach(track => {\n if (track.sid) {\n this._published.set(track.id, track.sid);\n }\n });\n this.localParticipant.update(roomState.published);\n }\n\n if (roomState.participant) {\n this.localParticipant.connect(\n roomState.participant.sid,\n roomState.participant.identity);\n }\n\n [\n this._dominantSpeakerSignaling,\n this._networkQualitySignaling,\n this._trackPrioritySignaling,\n this._trackSwitchOffSignaling,\n this._renderHintsSignaling,\n this._publisherHintsSignaling\n ].forEach(mediaSignaling => {\n const channel = mediaSignaling.channel;\n if (!mediaSignaling.isSetup\n && roomState.media_signaling\n && roomState.media_signaling[channel]\n && roomState.media_signaling[channel].transport\n && roomState.media_signaling[channel].transport.type === 'data-channel') {\n mediaSignaling.setup(roomState.media_signaling[channel].transport.label);\n }\n });\n\n if (roomState.type === 'warning' && roomState.states &&\n roomState.states.revision > this._mediaStatesWarningsRevision) {\n this._mediaStatesWarningsRevision = roomState.states.revision;\n this.localParticipant.updateMediaStates(roomState.states);\n }\n\n return this;\n }\n\n _initPublisherHintSignaling() {\n this._publisherHintsSignaling.on('updated', (hints, id) => {\n Promise.all(hints.map(hint => {\n return this.localParticipant.setPublisherHint(hint.track, hint.encodings).then(result => {\n return { track: hint.track, result };\n });\n })).then(hintResponses => {\n this._publisherHintsSignaling.sendHintResponse({ id, hints: hintResponses });\n });\n });\n\n const handleReplaced = track => {\n if (track.kind === 'video') {\n track.trackTransceiver.on('replaced', () => {\n this._publisherHintsSignaling.sendTrackReplaced({ trackSid: track.sid });\n });\n }\n };\n\n // hook up for any existing and new tracks getting replaced.\n Array.from(this.localParticipant.tracks.values()).forEach(track => handleReplaced(track));\n this.localParticipant.on('trackAdded', track => handleReplaced(track));\n }\n\n _initTrackSwitchOffSignaling() {\n this._trackSwitchOffSignaling.on('updated', (tracksOff, tracksOn) => {\n try {\n this._log.debug('received trackSwitch: ', { tracksOn, tracksOff });\n const trackUpdates = new Map();\n tracksOn.forEach(trackSid => trackUpdates.set(trackSid, true));\n tracksOff.forEach(trackSid => {\n if (trackUpdates.get(trackSid)) {\n // NOTE(mpatwardhan): This means that VIDEO-3762 has been reproduced.\n this._log.warn(`${trackSid} is DUPLICATED in both tracksOff and tracksOn list`);\n }\n trackUpdates.set(trackSid, false);\n });\n this.participants.forEach(participant => {\n participant.tracks.forEach(track => {\n const isOn = trackUpdates.get(track.sid);\n if (typeof isOn !== 'undefined') {\n track.setSwitchedOff(!isOn);\n trackUpdates.delete(track.sid);\n }\n });\n });\n // NOTE(mpatwardhan): Cache any notification about the tracks that we do not yet know about.\n trackUpdates.forEach((isOn, trackSid) => this._pendingSwitchOffStates.set(trackSid, !isOn));\n } catch (ex) {\n this._log.error('error processing track switch off:', ex);\n }\n });\n }\n\n _initDominantSpeakerSignaling() {\n this._dominantSpeakerSignaling.on('updated', () => this.setDominantSpeaker(this._dominantSpeakerSignaling.loudestParticipantSid));\n }\n\n _initNetworkQualityMonitorSignaling() {\n this._networkQualitySignaling.on('ready', () => {\n const networkQualityMonitor = new this._NetworkQualityMonitor(this._peerConnectionManager, this._networkQualitySignaling);\n this._networkQualityMonitor = networkQualityMonitor;\n networkQualityMonitor.on('updated', () => {\n if (this.iceConnectionState === 'failed') {\n return;\n }\n this.localParticipant.setNetworkQualityLevel(\n networkQualityMonitor.level,\n networkQualityMonitor.levels);\n this.participants.forEach(participant => {\n const levels = networkQualityMonitor.remoteLevels.get(participant.sid);\n if (levels) {\n participant.setNetworkQualityLevel(levels.level, levels);\n }\n });\n });\n networkQualityMonitor.start();\n });\n this._networkQualitySignaling.on('teardown', () => this._teardownNetworkQualityMonitor());\n }\n\n _teardownNetworkQualityMonitor() {\n if (this._networkQualityMonitor) {\n this._networkQualityMonitor.stop();\n this._networkQualityMonitor = null;\n }\n }\n\n /**\n * Get the {@link RoomV2}'s media statistics.\n * @returns {Promise.>}\n */\n getStats() {\n return this._peerConnectionManager.getStats().then(responses =>\n new Map(Array.from(responses).map(([id, response]) =>\n [id, Object.assign({}, response, {\n localAudioTrackStats: filterAndAddLocalTrackSids(this, response.localAudioTrackStats),\n localVideoTrackStats: filterAndAddLocalTrackSids(this, response.localVideoTrackStats),\n remoteAudioTrackStats: filterAndAddRemoteTrackSids(this, response.remoteAudioTrackStats),\n remoteVideoTrackStats: filterAndAddRemoteTrackSids(this, response.remoteVideoTrackStats)\n })]\n ))\n );\n }\n}\n\n/**\n * Filter out {@link TrackStats} that aren't in the collection while also\n * stamping their Track SIDs.\n * @param {Map} idToSid\n * @param {Array} trackStats\n * @returns {Array}\n */\nfunction filterAndAddTrackSids(idToSid, trackStats) {\n return trackStats.reduce((trackStats, trackStat) => {\n const trackSid = idToSid.get(trackStat.trackId);\n return trackSid\n ? [Object.assign({}, trackStat, { trackSid })].concat(trackStats)\n : trackStats;\n }, []);\n}\n\n/**\n * Filter out {@link LocalTrackStats} that aren't currently published while also\n * stamping their Track SIDs.\n * @param {RoomV2} roomV2\n * @param {Array} localTrackStats\n * @returns {Array}\n */\nfunction filterAndAddLocalTrackSids(roomV2, localTrackStats) {\n return filterAndAddTrackSids(roomV2._published, localTrackStats);\n}\n\n/**\n * Filter out {@link RemoteTrackStats} that aren't currently subscribed while\n * also stamping their Track SIDs.\n * @param {RoomV2} roomV2\n * @param {Array} remoteTrackStats\n * @returns {Array}\n */\nfunction filterAndAddRemoteTrackSids(roomV2, remoteTrackStats) {\n const idToSid = new Map(Array.from(roomV2._subscribed.entries()).map(([sid, id]) => [id, sid]));\n return filterAndAddTrackSids(idToSid, remoteTrackStats);\n}\n\n/**\n * @typedef {object} RoomV2#Representation\n * @property {string} name\n * @property {LocalParticipantV2#Representation} participant\n * @property {?Array} participants\n * @property {?Array} peer_connections\n * @property {?RecordingV2#Representation} recording\n * @property {string} sid\n */\n\nfunction handleLocalParticipantEvents(roomV2, localParticipant) {\n const localParticipantUpdated = oncePerTick(() => {\n roomV2._publishNewLocalParticipantState();\n });\n\n const renegotiate = oncePerTick(() => {\n const trackSenders = flatMap(localParticipant.tracks, trackV2 => trackV2.trackTransceiver);\n roomV2._peerConnectionManager.setTrackSenders(trackSenders);\n });\n\n localParticipant.on('trackAdded', renegotiate);\n localParticipant.on('trackRemoved', renegotiate);\n localParticipant.on('updated', localParticipantUpdated);\n\n roomV2.on('stateChanged', function stateChanged(state) {\n if (state === 'disconnected') {\n localParticipant.removeListener('trackAdded', renegotiate);\n localParticipant.removeListener('trackRemoved', renegotiate);\n localParticipant.removeListener('updated', localParticipantUpdated);\n roomV2.removeListener('stateChanged', stateChanged);\n localParticipant.disconnect();\n }\n });\n\n roomV2.on('signalingConnectionStateChanged', () => {\n const { localParticipant, signalingConnectionState } = roomV2;\n const { identity, sid } = localParticipant;\n switch (signalingConnectionState) {\n case 'connected':\n localParticipant.connect(sid, identity);\n break;\n case 'reconnecting':\n localParticipant.reconnecting();\n break;\n }\n });\n}\n\nfunction handlePeerConnectionEvents(roomV2, peerConnectionManager) {\n peerConnectionManager.on('description', function onDescription(description) {\n roomV2._publishPeerConnectionState(description);\n });\n peerConnectionManager.dequeue('description');\n\n peerConnectionManager.on('candidates', function onCandidates(candidates) {\n roomV2._publishPeerConnectionState(candidates);\n });\n peerConnectionManager.dequeue('candidates');\n\n peerConnectionManager.on('trackAdded', roomV2._addTrackReceiver.bind(roomV2));\n peerConnectionManager.dequeue('trackAdded');\n peerConnectionManager.getTrackReceivers().forEach(roomV2._addTrackReceiver, roomV2);\n\n peerConnectionManager.on('connectionStateChanged', () => {\n roomV2.emit('connectionStateChanged');\n });\n\n peerConnectionManager.on('iceConnectionStateChanged', () => {\n roomV2.emit('iceConnectionStateChanged');\n if (roomV2.iceConnectionState === 'failed') {\n if (roomV2.localParticipant.networkQualityLevel !== null) {\n roomV2.localParticipant.setNetworkQualityLevel(0);\n }\n roomV2.participants.forEach(participant => {\n if (participant.networkQualityLevel !== null) {\n participant.setNetworkQualityLevel(0);\n }\n });\n }\n });\n}\n\nfunction handleTransportEvents(roomV2, transport) {\n transport.on('message', roomV2._update.bind(roomV2));\n transport.on('stateChanged', function stateChanged(state, error) {\n if (state === 'disconnected') {\n if (roomV2.state !== 'disconnected') {\n roomV2._disconnect(error);\n }\n transport.removeListener('stateChanged', stateChanged);\n }\n roomV2.emit('signalingConnectionStateChanged');\n });\n}\n\n/**\n * Periodically publish {@link StatsReport}s.\n * @private\n * @param {RoomV2} roomV2\n * @param {Transport} transport\n * @param {Number} intervalMs\n */\nfunction periodicallyPublishStats(roomV2, transport, intervalMs) {\n const movingAverageDeltas = new Map();\n let oddPublishCount = false;\n const interval = setInterval(() => {\n roomV2.getStats().then(stats => {\n oddPublishCount = !oddPublishCount;\n stats.forEach((response, id) => {\n // NOTE(mmalavalli): A StatsReport is used to publish a \"stats-report\"\n // event instead of using StandardizedStatsResponse directly because\n // StatsReport will add zeros to properties that do not exist.\n const report = new StatsReport(id, response, true /* prepareForInsights */);\n\n // NOTE(mmalavalli): Since A/V sync metrics are not part of the StatsReport class,\n // we add them to the insights payload here.\n transport.publishEvent('quality', 'stats-report', 'info', {\n audioTrackStats: report.remoteAudioTrackStats.map((trackStat, i) =>\n addAVSyncMetricsToRemoteTrackStats(trackStat, response.remoteAudioTrackStats[i], movingAverageDeltas)),\n localAudioTrackStats: report.localAudioTrackStats.map((trackStat, i) =>\n addAVSyncMetricsToLocalTrackStats(trackStat, response.localAudioTrackStats[i], movingAverageDeltas)),\n localVideoTrackStats: report.localVideoTrackStats.map((trackStat, i) =>\n addAVSyncMetricsToLocalTrackStats(trackStat, response.localVideoTrackStats[i], movingAverageDeltas)),\n peerConnectionId: report.peerConnectionId,\n videoTrackStats: report.remoteVideoTrackStats.map((trackStat, i) =>\n addAVSyncMetricsToRemoteTrackStats(trackStat, response.remoteVideoTrackStats[i], movingAverageDeltas)),\n });\n\n // NOTE(mmalavalli): Clean up entries for Tracks that are no longer published or subscribed to.\n const keys = flatMap([\n 'localAudioTrackStats',\n 'localVideoTrackStats',\n 'remoteAudioTrackStats',\n 'remoteVideoTrackStats'\n ], prop => report[prop].map(({ ssrc, trackSid }) => `${trackSid}+${ssrc}`));\n const movingAverageDeltaKeysToBeRemoved = difference(Array.from(movingAverageDeltas.keys()), keys);\n movingAverageDeltaKeysToBeRemoved.forEach(key => movingAverageDeltas.delete(key));\n\n if (oddPublishCount) {\n // NOTE(mmalavalli): null properties of the \"active-ice-candidate-pair\"\n // payload are assigned default values until the Insights gateway\n // accepts null values.\n const activeIceCandidatePair = replaceNullsWithDefaults(\n response.activeIceCandidatePair,\n report.peerConnectionId);\n\n transport.publishEvent(\n 'quality',\n 'active-ice-candidate-pair',\n 'info',\n activeIceCandidatePair);\n }\n });\n }, () => {\n // Do nothing.\n });\n }, intervalMs);\n\n roomV2.on('stateChanged', function onStateChanged(state) {\n if (state === 'disconnected') {\n clearInterval(interval);\n roomV2.removeListener('stateChanged', onStateChanged);\n }\n });\n}\n\nfunction handleSubscriptions(room) {\n const trackSidsToTrackSignalings = room._getTrackSidsToTrackSignalings();\n\n room._subscriptionFailures.forEach((error, trackSid) => {\n const trackSignaling = trackSidsToTrackSignalings.get(trackSid);\n if (trackSignaling) {\n room._subscriptionFailures.delete(trackSid);\n trackSignaling.subscribeFailed(createTwilioError(error.code, error.message));\n }\n });\n\n trackSidsToTrackSignalings.forEach(trackSignaling => {\n const trackId = room._subscribed.get(trackSignaling.sid);\n if (!trackId || (trackSignaling.isSubscribed && trackSignaling.trackTransceiver.id !== trackId)) {\n trackSignaling.setTrackTransceiver(null);\n }\n if (trackId) {\n room._getTrackReceiver(trackId).then(trackReceiver => trackSignaling.setTrackTransceiver(trackReceiver));\n }\n });\n}\n\n/**\n * NOTE(mmalavalli): Since A/V sync metrics are not part of the public StatsReport class, we add them\n * only for reporting purposes.\n * @private\n */\nfunction addAVSyncMetricsToLocalTrackStats(trackStats, trackResponse, movingAverageDeltas) {\n const {\n framesEncoded,\n packetsSent,\n totalEncodeTime,\n totalPacketSendDelay\n } = trackResponse;\n const augmentedTrackStats = Object.assign({}, trackStats);\n const key = `${trackStats.trackSid}+${trackStats.ssrc}`;\n const trackMovingAverageDeltas = movingAverageDeltas.get(key) || new Map();\n\n if (typeof totalEncodeTime === 'number' && typeof framesEncoded === 'number') {\n const trackAvgEncodeDelayMovingAverageDelta = trackMovingAverageDeltas.get('avgEncodeDelay')\n || new MovingAverageDelta();\n trackAvgEncodeDelayMovingAverageDelta.putSample(totalEncodeTime * 1000, framesEncoded);\n augmentedTrackStats.avgEncodeDelay = Math.round(trackAvgEncodeDelayMovingAverageDelta.get());\n trackMovingAverageDeltas.set('avgEncodeDelay', trackAvgEncodeDelayMovingAverageDelta);\n }\n if (typeof totalPacketSendDelay === 'number' && typeof packetsSent === 'number') {\n const trackAvgPacketSendDelayMovingAverageDelta = trackMovingAverageDeltas.get('avgPacketSendDelay')\n || new MovingAverageDelta();\n trackAvgPacketSendDelayMovingAverageDelta.putSample(totalPacketSendDelay * 1000, packetsSent);\n augmentedTrackStats.avgPacketSendDelay = Math.round(trackAvgPacketSendDelayMovingAverageDelta.get());\n trackMovingAverageDeltas.set('avgPacketSendDelay', trackAvgPacketSendDelayMovingAverageDelta);\n }\n movingAverageDeltas.set(key, trackMovingAverageDeltas);\n return augmentedTrackStats;\n}\n\n/**\n * NOTE(mmalavalli): Since A/V sync metrics are not part of the public StatsReport class, we add them\n * only for reporting purposes.\n * @private\n */\nfunction addAVSyncMetricsToRemoteTrackStats(trackStats, trackResponse, movingAverageDeltas) {\n const {\n estimatedPlayoutTimestamp,\n framesDecoded,\n jitterBufferDelay,\n jitterBufferEmittedCount,\n totalDecodeTime\n } = trackResponse;\n const augmentedTrackStats = Object.assign({}, trackStats);\n const key = `${trackStats.trackSid}+${trackStats.ssrc}`;\n const trackMovingAverageDeltas = movingAverageDeltas.get(key) || new Map();\n\n if (typeof estimatedPlayoutTimestamp === 'number') {\n augmentedTrackStats.estimatedPlayoutTimestamp = estimatedPlayoutTimestamp;\n }\n if (typeof framesDecoded === 'number' && typeof totalDecodeTime === 'number') {\n const trackAvgDecodeDelayMovingAverageDelta = trackMovingAverageDeltas.get('avgDecodeDelay')\n || new MovingAverageDelta();\n trackAvgDecodeDelayMovingAverageDelta.putSample(totalDecodeTime * 1000, framesDecoded);\n augmentedTrackStats.avgDecodeDelay = Math.round(trackAvgDecodeDelayMovingAverageDelta.get());\n trackMovingAverageDeltas.set('avgDecodeDelay', trackAvgDecodeDelayMovingAverageDelta);\n }\n if (typeof jitterBufferDelay === 'number' && typeof jitterBufferEmittedCount === 'number') {\n const trackAvgJitterBufferDelayMovingAverageDelta = trackMovingAverageDeltas.get('avgJitterBufferDelay')\n || new MovingAverageDelta();\n trackAvgJitterBufferDelayMovingAverageDelta.putSample(jitterBufferDelay * 1000, jitterBufferEmittedCount);\n augmentedTrackStats.avgJitterBufferDelay = Math.round(trackAvgJitterBufferDelayMovingAverageDelta.get());\n trackMovingAverageDeltas.set('avgJitterBufferDelay', trackAvgJitterBufferDelayMovingAverageDelta);\n }\n movingAverageDeltas.set(key, trackMovingAverageDeltas);\n return augmentedTrackStats;\n}\n\nfunction replaceNullsWithDefaults(activeIceCandidatePair, peerConnectionId) {\n activeIceCandidatePair = Object.assign({\n availableIncomingBitrate: 0,\n availableOutgoingBitrate: 0,\n bytesReceived: 0,\n bytesSent: 0,\n consentRequestsSent: 0,\n currentRoundTripTime: 0,\n lastPacketReceivedTimestamp: 0,\n lastPacketSentTimestamp: 0,\n nominated: false,\n peerConnectionId: peerConnectionId,\n priority: 0,\n readable: false,\n requestsReceived: 0,\n requestsSent: 0,\n responsesReceived: 0,\n responsesSent: 0,\n retransmissionsReceived: 0,\n retransmissionsSent: 0,\n state: 'failed',\n totalRoundTripTime: 0,\n transportId: '',\n writable: false\n }, filterObject(activeIceCandidatePair || {}, null));\n\n activeIceCandidatePair.localCandidate = Object.assign({\n candidateType: 'host',\n deleted: false,\n ip: '',\n port: 0,\n priority: 0,\n protocol: 'udp',\n url: ''\n }, filterObject(activeIceCandidatePair.localCandidate || {}, null));\n\n activeIceCandidatePair.remoteCandidate = Object.assign({\n candidateType: 'host',\n ip: '',\n port: 0,\n priority: 0,\n protocol: 'udp',\n url: ''\n }, filterObject(activeIceCandidatePair.remoteCandidate || {}, null));\n\n return activeIceCandidatePair;\n}\n\nmodule.exports = RoomV2;\n","'use strict';\n\nconst StateMachine = require('../../statemachine');\nconst TwilioConnection = require('../../twilioconnection');\nconst DefaultBackoff = require('../../util/backoff');\nconst { reconnectBackoffConfig } = require('../../util/constants');\nconst Timeout = require('../../util/timeout');\nconst { SDK_NAME, SDK_VERSION, SDP_FORMAT } = require('../../util/constants');\n\nconst {\n createBandwidthProfilePayload,\n createMediaSignalingPayload,\n createMediaWarningsPayload,\n createSubscribePayload,\n getUserAgent,\n isNonArrayObject\n} = require('../../util');\n\nconst {\n createTwilioError,\n RoomCompletedError,\n SignalingConnectionError,\n SignalingServerBusyError,\n} = require('../../util/twilio-video-errors');\n\nconst ICE_VERSION = 1;\nconst RSP_VERSION = 2;\n\n/*\nTwilioConnectionTransport States\n----------------\n\n +-----------+\n | |\n | syncing |---------+\n | | |\n +-----------+ |\n ^ | |\n | | |\n | v v\n +------------+ +-----------+ +--------------+\n | | | | | |\n | connecting |--->| connected |--->| disconnected |\n | | | | | |\n +------------+ +-----------+ +--------------+\n | ^\n | |\n | |\n +------------------------------+\n\n*/\n\nconst states = {\n connecting: [\n 'connected',\n 'disconnected'\n ],\n connected: [\n 'disconnected',\n 'syncing'\n ],\n syncing: [\n 'connected',\n 'disconnected'\n ],\n disconnected: []\n};\n\n/**\n * A {@link TwilioConnectionTransport} supports sending and receiving Room Signaling Protocol\n * (RSP) messages. It also supports RSP requests, such as Sync and Disconnect.\n * @extends StateMachine\n * @emits TwilioConnectionTransport#connected\n * @emits TwilioConnectionTransport#message\n */\nclass TwilioConnectionTransport extends StateMachine {\n /**\n * Construct a {@link TwilioConnectionTransport}.\n * @param {?string} name\n * @param {string} accessToken\n * @param {ParticipantSignaling} localParticipant\n * @param {PeerConnectionManager} peerConnectionManager\n * @param {string} wsServer\n * @param {object} [options]\n */\n constructor(name, accessToken, localParticipant, peerConnectionManager, wsServer, options) {\n options = Object.assign({\n Backoff: DefaultBackoff,\n TwilioConnection,\n iceServers: null,\n trackPriority: true,\n trackSwitchOff: true,\n renderHints: true,\n userAgent: getUserAgent()\n }, options);\n super('connecting', states);\n\n\n Object.defineProperties(this, {\n _accessToken: {\n value: accessToken\n },\n _automaticSubscription: {\n value: options.automaticSubscription\n },\n _bandwidthProfile: {\n value: options.bandwidthProfile\n },\n _dominantSpeaker: {\n value: options.dominantSpeaker\n },\n _adaptiveSimulcast: {\n value: options.adaptiveSimulcast\n },\n _eventObserver: {\n value: options.eventObserver,\n writable: false\n },\n _renderHints: {\n value: options.renderHints\n },\n _iceServersStatus: {\n value: Array.isArray(options.iceServers)\n ? 'overrode'\n : 'acquire'\n },\n _localParticipant: {\n value: localParticipant\n },\n _name: {\n value: name,\n },\n _networkQuality: {\n value: isNonArrayObject(options.networkQuality) || options.networkQuality\n },\n _notifyWarnings: {\n value: options.notifyWarnings\n },\n _options: {\n value: options\n },\n _peerConnectionManager: {\n value: peerConnectionManager\n },\n _sessionTimer: {\n value: null,\n writable: true\n },\n _sessionTimeoutMS: {\n value: 0, // initially 0, set only after 1st successful connection.\n writable: true\n },\n _reconnectBackoff: {\n value: new options.Backoff(reconnectBackoffConfig)\n },\n _session: {\n value: null,\n writable: true\n },\n _trackPriority: {\n value: options.trackPriority\n },\n _trackSwitchOff: {\n value: options.trackSwitchOff\n },\n _twilioConnection: {\n value: null,\n writable: true\n },\n _updatesReceived: {\n value: []\n },\n _updatesToSend: {\n value: []\n },\n _userAgent: {\n value: options.userAgent\n },\n _wsServer: {\n value: wsServer\n }\n });\n\n\n setupTransport(this);\n }\n\n /**\n * Create a Connect, Sync or Disconnect RSP message.\n * @private\n * @returns {?object}\n */\n _createConnectOrSyncOrDisconnectMessage() {\n if (this.state === 'connected') {\n return null;\n }\n\n if (this.state === 'disconnected') {\n return {\n session: this._session,\n type: 'disconnect',\n version: RSP_VERSION\n };\n }\n\n const type = {\n connecting: 'connect',\n syncing: 'sync'\n }[this.state];\n\n const message = {\n name: this._name,\n participant: this._localParticipant.getState(),\n peer_connections: this._peerConnectionManager.getStates(),\n type,\n version: RSP_VERSION\n };\n\n if (message.type === 'connect') {\n message.ice_servers = this._iceServersStatus;\n\n message.publisher = {\n name: SDK_NAME,\n sdk_version: SDK_VERSION,\n user_agent: this._userAgent\n };\n\n if (this._bandwidthProfile) {\n message.bandwidth_profile = createBandwidthProfilePayload(\n this._bandwidthProfile);\n }\n\n if (this._notifyWarnings) {\n message.participant.media_warnings = createMediaWarningsPayload(\n this._notifyWarnings);\n }\n\n message.media_signaling = createMediaSignalingPayload(\n this._dominantSpeaker,\n this._networkQuality,\n this._trackPriority,\n this._trackSwitchOff,\n this._adaptiveSimulcast,\n this._renderHints);\n\n message.subscribe = createSubscribePayload(this._automaticSubscription);\n message.format = SDP_FORMAT;\n message.token = this._accessToken;\n } else if (message.type === 'sync') {\n message.session = this._session;\n message.token = this._accessToken;\n } else if (message.type === 'update') {\n message.session = this._session;\n }\n\n return message;\n }\n\n /**\n * Create an \"ice\" message.\n * @private\n */\n _createIceMessage() {\n return {\n edge: 'roaming', // roaming here means use same edge as signaling.\n token: this._accessToken,\n type: 'ice',\n version: ICE_VERSION\n };\n }\n\n /**\n * Send a Connect, Sync or Disconnect RSP message.\n * @private\n */\n _sendConnectOrSyncOrDisconnectMessage() {\n const message = this._createConnectOrSyncOrDisconnectMessage();\n if (message) {\n this._twilioConnection.sendMessage(message);\n }\n }\n\n /**\n * Disconnect the {@link TwilioConnectionTransport}. Returns true if calling the method resulted\n * in disconnection.\n * @param {TwilioError} [error]\n * @returns {boolean}\n */\n disconnect(error) {\n if (this.state !== 'disconnected') {\n this.preempt('disconnected', null, [error]);\n this._sendConnectOrSyncOrDisconnectMessage();\n this._twilioConnection.close();\n return true;\n }\n return false;\n }\n\n /**\n * Publish an RSP Update. Returns true if calling the method resulted in\n * publishing (or eventually publishing) the update.\n * @param {object} update\n * @returns {boolean}\n */\n publish(update) {\n switch (this.state) {\n case 'connected':\n this._twilioConnection.sendMessage(Object.assign({\n session: this._session,\n type: 'update',\n version: RSP_VERSION\n }, update));\n return true;\n case 'connecting':\n case 'syncing':\n this._updatesToSend.push(update);\n return true;\n case 'disconnected':\n default:\n return false;\n }\n }\n\n /**\n * Publish (or queue) an event to the Insights gateway.\n * @param {string} group - Event group name\n * @param {string} name - Event name\n * @param {string} level - Event level\n * @param {object} payload - Event payload\n * @returns {void}\n */\n publishEvent(group, name, level, payload) {\n this._eventObserver.emit('event', { group, name, level, payload });\n }\n\n /**\n * Sync the {@link TwilioConnectionTransport}. Returns true if calling the method resulted in\n * syncing.\n * @returns {boolean}\n */\n sync() {\n if (this.state === 'connected') {\n this.preempt('syncing');\n this._sendConnectOrSyncOrDisconnectMessage();\n return true;\n }\n return false;\n }\n\n /**\n * @private\n * @returns {void}\n */\n _setSession(session, sessionTimeout) {\n this._session = session;\n this._sessionTimeoutMS = sessionTimeout * 1000;\n }\n\n /**\n * Determines if we should attempt reconnect.\n * returns a Promise to wait on before attempting to\n * reconnect. returns null if its not okay to reconnect.\n * @private\n * @returns {Promise}\n */\n _getReconnectTimer() {\n if (this._sessionTimeoutMS === 0) {\n // this means either we have never connected.\n // or we timed out while trying to reconnect\n // In either case we do not want to reconnect.\n return null;\n }\n\n // start session timer\n if (!this._sessionTimer) {\n this._sessionTimer = new Timeout(() => {\n // ensure that _clearReconnectTimer wasn't\n // called while we were waiting.\n if (this._sessionTimer) {\n // do not allow any more reconnect attempts.\n this._sessionTimeoutMS = 0;\n }\n }, this._sessionTimeoutMS);\n }\n\n // return promise that waits with exponential backoff.\n return new Promise(resolve => {\n this._reconnectBackoff.backoff(resolve);\n });\n }\n\n /**\n * clears the session reconnect timer.\n *\n * @private\n * @returns {void}\n */\n _clearReconnectTimer() {\n this._reconnectBackoff.reset();\n if (this._sessionTimer) {\n this._sessionTimer.clear();\n this._sessionTimer = null;\n }\n }\n}\n\n/**\n * @event TwilioConnectionTransport#connected\n * @param {object} initialState\n */\n\n/**\n * @event TwilioConnectionTransport#message\n * @param {object} peerConnections\n */\n\nfunction reducePeerConnections(peerConnections) {\n return Array.from(peerConnections.reduce((peerConnectionsById, update) => {\n const reduced = peerConnectionsById.get(update.id) || update;\n\n // First, reduce the top-level `description` property.\n if (!reduced.description && update.description) {\n reduced.description = update.description;\n } else if (reduced.description && update.description) {\n if (update.description.revision > reduced.description.revision) {\n reduced.description = update.description;\n }\n }\n\n // Then, reduce the top-level `ice` property.\n if (!reduced.ice && update.ice) {\n reduced.ice = update.ice;\n } else if (reduced.ice && update.ice) {\n if (update.ice.revision > reduced.ice.revision) {\n reduced.ice = update.ice;\n }\n }\n\n // Finally, update the map.\n peerConnectionsById.set(reduced.id, reduced);\n return peerConnectionsById;\n }, new Map()).values());\n}\n\nfunction reduceUpdates(updates) {\n return updates.reduce((reduced, update) => {\n // First, reduce the top-level `participant` property.\n if (!reduced.participant && update.participant) {\n reduced.participant = update.participant;\n } else if (reduced.participant && update.participant) {\n if (update.participant.revision > reduced.participant.revision) {\n reduced.participant = update.participant;\n }\n }\n\n // Then, reduce the top-level `peer_connections` property.\n /* eslint camelcase:0 */\n if (!reduced.peer_connections && update.peer_connections) {\n reduced.peer_connections = reducePeerConnections(update.peer_connections);\n } else if (reduced.peer_connections && update.peer_connections) {\n reduced.peer_connections = reducePeerConnections(\n reduced.peer_connections.concat(update.peer_connections));\n }\n return reduced;\n }, {});\n}\n\nfunction setupTransport(transport) {\n function createOrResetTwilioConnection() {\n if (transport.state === 'disconnected') {\n return;\n }\n if (transport._twilioConnection) {\n transport._twilioConnection.removeListener('message', handleMessage);\n }\n const { _iceServersStatus, _options, _wsServer, state } = transport;\n const { TwilioConnection } = _options;\n\n const twilioConnection = new TwilioConnection(_wsServer, Object.assign({\n helloBody: state === 'connecting' && _iceServersStatus === 'acquire'\n ? transport._createIceMessage()\n : transport._createConnectOrSyncOrDisconnectMessage()\n }, _options));\n\n twilioConnection.once('close', reason => {\n if (reason === TwilioConnection.CloseReason.LOCAL) {\n disconnect();\n } else {\n disconnect(new Error(reason));\n }\n });\n\n twilioConnection.on('message', handleMessage);\n transport._twilioConnection = twilioConnection;\n }\n\n function disconnect(error) {\n if (transport.state === 'disconnected') {\n return;\n }\n if (!error) {\n transport.disconnect();\n return;\n }\n\n const reconnectTimer = transport._getReconnectTimer();\n if (!reconnectTimer) {\n const twilioError = error.message === TwilioConnection.CloseReason.BUSY\n ? new SignalingServerBusyError()\n : new SignalingConnectionError();\n transport.disconnect(twilioError);\n return;\n }\n\n if (transport.state === 'connected') {\n transport.preempt('syncing');\n }\n\n reconnectTimer.then(createOrResetTwilioConnection);\n }\n\n function handleMessage(message) {\n if (transport.state === 'disconnected') {\n return;\n }\n if (message.type === 'error') {\n transport.disconnect(createTwilioError(message.code, message.message));\n return;\n }\n switch (transport.state) {\n case 'connected':\n switch (message.type) {\n case 'connected':\n case 'synced':\n case 'update':\n case 'warning':\n transport.emit('message', message);\n return;\n case 'disconnected':\n transport.disconnect(message.status === 'completed'\n ? new RoomCompletedError()\n : null);\n return;\n default:\n // Do nothing.\n return;\n }\n case 'connecting':\n switch (message.type) {\n case 'iced':\n transport._options.onIced(message.ice_servers).then(() => {\n transport._sendConnectOrSyncOrDisconnectMessage();\n });\n return;\n case 'connected':\n transport._setSession(message.session, message.options.session_timeout);\n transport.emit('connected', message);\n transport.preempt('connected');\n return;\n case 'synced':\n case 'update':\n transport._updatesReceived.push(message);\n return;\n case 'disconnected':\n transport.disconnect(message.status === 'completed'\n ? new RoomCompletedError()\n : null);\n return;\n default:\n // Do nothing.\n return;\n }\n case 'syncing':\n switch (message.type) {\n case 'connected':\n case 'update':\n transport._updatesReceived.push(message);\n return;\n case 'synced':\n transport._clearReconnectTimer();\n transport.emit('message', message);\n transport.preempt('connected');\n return;\n case 'disconnected':\n transport.disconnect(message.status === 'completed'\n ? new RoomCompletedError()\n : null);\n return;\n default:\n // Do nothing.\n return;\n }\n default:\n // Impossible\n return;\n }\n }\n\n transport.on('stateChanged', function stateChanged(state) {\n switch (state) {\n case 'connected': {\n const updates = transport._updatesToSend.splice(0);\n if (updates.length) {\n transport.publish(reduceUpdates(updates));\n }\n transport._updatesReceived.splice(0).forEach(update => transport.emit('message', update));\n return;\n }\n case 'disconnected':\n transport._twilioConnection.removeListener('message', handleMessage);\n transport.removeListener('stateChanged', stateChanged);\n return;\n case 'syncing':\n // Do nothing.\n return;\n default:\n // Impossible\n return;\n }\n });\n\n const { _options, _iceServersStatus } = transport;\n const { iceServers, onIced } = _options;\n\n if (_iceServersStatus === 'overrode') {\n onIced(iceServers).then(createOrResetTwilioConnection);\n } else {\n createOrResetTwilioConnection();\n }\n}\n\nmodule.exports = TwilioConnectionTransport;\n","'use strict';\n\nconst CancelablePromise = require('../../util/cancelablepromise');\nconst DefaultPeerConnectionManager = require('./peerconnectionmanager');\nconst DefaultRoomV2 = require('./room');\nconst DefaultTransport = require('./twilioconnectiontransport');\n\nconst {\n SignalingConnectionDisconnectedError,\n SignalingIncomingMessageInvalidError\n} = require('../../util/twilio-video-errors');\n\nconst { flatMap, createRoomConnectEventPayload } = require('../../util');\n\nfunction createCancelableRoomSignalingPromise(token, wsServer, localParticipant, encodingParameters, preferredCodecs, options) {\n options = Object.assign({\n PeerConnectionManager: DefaultPeerConnectionManager,\n RoomV2: DefaultRoomV2,\n Transport: DefaultTransport\n }, options);\n\n const adaptiveSimulcast = preferredCodecs.video[0] && preferredCodecs.video[0].adaptiveSimulcast === true;\n const { PeerConnectionManager, RoomV2, Transport, iceServers, log } = options;\n const peerConnectionManager = new PeerConnectionManager(encodingParameters, preferredCodecs, options);\n const trackSenders = flatMap(localParticipant.tracks, trackV2 => [trackV2.trackTransceiver]);\n peerConnectionManager.setTrackSenders(trackSenders);\n\n const cancellationError = new Error('Canceled');\n\n let transport;\n\n const cancelablePromise = new CancelablePromise((resolve, reject, isCanceled) => {\n const onIced = iceServers => {\n if (isCanceled()) {\n reject(cancellationError);\n return Promise.reject(cancellationError);\n }\n log.debug('Got ICE servers:', iceServers);\n options.iceServers = iceServers;\n peerConnectionManager.setConfiguration(options);\n\n return peerConnectionManager.createAndOffer().then(() => {\n if (isCanceled()) {\n reject(cancellationError);\n throw cancellationError;\n }\n log.debug('createAndOffer() succeeded.');\n // NOTE(mmalavalli): PeerConnectionManager#createAndOffer() queues the\n // initial offer in the event queue for the 'description' event. So,\n // we are dequeueing to prevent the spurious 'update' message sent by\n // the client after connecting to a room.\n peerConnectionManager.dequeue('description');\n }).catch(error => {\n log.error('createAndOffer() failed:', error);\n reject(error);\n throw error;\n });\n };\n\n const {\n automaticSubscription,\n bandwidthProfile,\n dominantSpeaker,\n environment,\n eventObserver,\n loggerName,\n logLevel,\n name,\n networkMonitor,\n networkQuality,\n notifyWarnings,\n realm,\n sdpSemantics,\n } = options;\n\n // decide which msp channels to request\n // dominantSpeaker, networkQuality\n const trackPriority = !!bandwidthProfile;\n const trackSwitchOff = !!bandwidthProfile;\n const renderHints = !!bandwidthProfile &&\n (options.clientTrackSwitchOffControl !== 'disabled' || options.contentPreferencesMode !== 'disabled');\n\n const transportOptions = Object.assign({\n adaptiveSimulcast,\n automaticSubscription,\n dominantSpeaker,\n environment,\n eventObserver,\n loggerName,\n logLevel,\n networkMonitor,\n networkQuality,\n notifyWarnings,\n iceServers,\n onIced,\n realm,\n renderHints,\n sdpSemantics,\n trackPriority,\n trackSwitchOff\n }, bandwidthProfile ? {\n bandwidthProfile\n } : {});\n\n transport = new Transport(\n name,\n token,\n localParticipant,\n peerConnectionManager,\n wsServer,\n transportOptions);\n\n const connectEventPayload = createRoomConnectEventPayload(options);\n eventObserver.emit('event', connectEventPayload);\n\n transport.once('connected', initialState => {\n log.debug('Transport connected:', initialState);\n if (isCanceled()) {\n reject(cancellationError);\n return;\n }\n const { participant: localParticipantState } = initialState;\n if (!localParticipantState) {\n reject(new SignalingIncomingMessageInvalidError());\n return;\n }\n resolve(new RoomV2(localParticipant, initialState, transport, peerConnectionManager, options));\n });\n\n transport.once('stateChanged', (state, error) => {\n if (state === 'disconnected') {\n transport = null;\n reject(error || new SignalingConnectionDisconnectedError());\n } else {\n log.debug('Transport state changed:', state);\n }\n });\n }, () => {\n if (transport) {\n transport.disconnect();\n transport = null;\n }\n });\n\n cancelablePromise.catch(() => {\n if (transport) {\n transport.disconnect();\n transport = null;\n }\n peerConnectionManager.close();\n });\n\n return cancelablePromise;\n}\n\nmodule.exports = createCancelableRoomSignalingPromise;\n","'use strict';\n\nconst ParticipantSignaling = require('./participant');\n\nclass LocalParticipantSignaling extends ParticipantSignaling {\n constructor() {\n super();\n Object.defineProperties(this, {\n _publicationsToTrackSenders: {\n value: new Map()\n },\n _trackSendersToPublications: {\n value: new Map()\n }\n });\n }\n\n /**\n * @param {DataTrackSender|MediaTrackSender} trackSender\n * @param {string} name\n * @param {Track.Priority} priority\n * @param {?NoiseCancellationVendor} noiseCancellationVendor\n * @returns {LocalTrackPublicationSignaling} publication\n */\n addTrack(trackSender, name, priority, noiseCancellationVendor = null) {\n const publication = this._createLocalTrackPublicationSignaling(trackSender, name, priority, noiseCancellationVendor);\n this._trackSendersToPublications.set(trackSender, publication);\n this._publicationsToTrackSenders.set(publication, trackSender);\n super.addTrack(publication);\n return this;\n }\n\n /**\n * @param {DataTrackSender|MediaTrackSender} trackSender\n * @returns {?LocalTrackPublicationSignaling}\n */\n getPublication(trackSender) {\n return this._trackSendersToPublications.get(trackSender) || null;\n }\n\n /**\n * @param {LocalTrackPublicationSignaling} trackPublication\n * @returns {?DataTrackSender|MediaTrackSender}\n */\n getSender(trackPublication) {\n return this._publicationsToTrackSenders.get(trackPublication) || null;\n }\n\n /**\n * @param {DataTrackSender|MediaTrackSender} trackSender\n * @returns {?LocalTrackPublicationSignaling}\n */\n removeTrack(trackSender) {\n const publication = this._trackSendersToPublications.get(trackSender);\n if (!publication) {\n return null;\n }\n this._trackSendersToPublications.delete(trackSender);\n this._publicationsToTrackSenders.delete(publication);\n const didDelete = super.removeTrack(publication);\n if (didDelete) {\n publication.stop();\n }\n return publication;\n }\n}\n\nmodule.exports = LocalParticipantSignaling;\n","'use strict';\n\nconst TrackSignaling = require('./track');\n\n/**\n * A {@link LocalTrackPublication} implementation\n * @extends TrackSignaling\n * @property {Track.ID} id\n */\nclass LocalTrackPublicationSignaling extends TrackSignaling {\n /**\n * Construct a {@link LocalTrackPublicationSignaling}. {@link TrackSenders}\n * are always cloned.\n * @param {DataTrackSender|MediaTrackSender} trackSender - the {@link TrackSender}\n * of the {@link LocalTrack} to be published\n * @param {string} name - the name of the {@link LocalTrack} to be published\n * @param {Track.Priority} priority - initial {@link Track.Priority}\n */\n constructor(trackSender, name, priority) {\n trackSender = trackSender.clone();\n const enabled = trackSender.kind === 'data' ? true : trackSender.track.enabled;\n super(name, trackSender.kind, enabled, priority);\n this.setTrackTransceiver(trackSender);\n Object.defineProperties(this, {\n _updatedPriority: {\n value: priority,\n writable: true\n },\n id: {\n enumerable: true,\n value: trackSender.id\n }\n });\n }\n\n /**\n * The updated {@link Track.Priority} of the {@link LocalTrack}.\n * @property {Track.priority}\n */\n get updatedPriority() {\n return this._updatedPriority;\n }\n\n /**\n * Enable (or disable) the {@link LocalTrackPublicationSignaling} if it is not\n * already enabled (or disabled). This also updates the cloned\n * {@link MediaTrackSender}'s MediaStreamTracks `enabled` state.\n * @param {boolean} [enabled=true]\n * @return {this}\n */\n enable(enabled) {\n enabled = typeof enabled === 'boolean' ? enabled : true;\n this.trackTransceiver.track.enabled = enabled;\n return super.enable(enabled);\n }\n\n /**\n * Rejects the SID's deferred promise with the given Error.\n * @param {Error} error\n * @returns {this}\n */\n publishFailed(error) {\n if (setError(this, error)) {\n this.emit('updated');\n }\n return this;\n }\n\n /**\n * Update the {@link Track.Priority} of the published {@link LocalTrack}.\n * @param {Track.priority} priority\n * @returns {this}\n */\n setPriority(priority) {\n if (this._updatedPriority !== priority) {\n this._updatedPriority = priority;\n this.emit('updated');\n }\n return this;\n }\n\n /**\n * Set the published {@link LocalTrack}'s {@link Track.SID}.\n * @param {Track.SID} sid\n * @returns {this}\n */\n setSid(sid) {\n if (this._error) {\n return this;\n }\n return super.setSid.call(this, sid);\n }\n\n /**\n * Stop the cloned {@link TrackSender}.\n * @returns {void}\n */\n stop() {\n this.trackTransceiver.stop();\n }\n}\n\n/**\n * @param {LocalTrackPublication} publication\n * @param {Error} error\n * @returns {boolean} updated\n */\nfunction setError(publication, error) {\n if (publication._sid !== null || publication._error) {\n return false;\n }\n publication._error = error;\n return true;\n}\n\nmodule.exports = LocalTrackPublicationSignaling;\n","'use strict';\n\nconst LocalTrackPublicationSignaling = require('../localtrackpublication');\nconst TwilioWarning = require('../../util/twiliowarning');\nconst createTwilioError = require('../../util/twilio-video-errors').createTwilioError;\n\n/**\n * @extends LocalTrackPublicationSignaling\n */\nclass LocalTrackPublicationV2 extends LocalTrackPublicationSignaling {\n /**\n * Construct a {@link LocalTrackPublicationV2}.\n * @param {DataTrackSender|MediaTrackSender} trackSender\n * @param {string} name\n * @param {Track.Priority} priority\n * @param {?NoiseCancellationVendor} noiseCancellationVendor\n * @param {object} [options]\n */\n constructor(trackSender, name, priority, noiseCancellationVendor, options) {\n super(trackSender, name, priority);\n\n Object.defineProperties(this, {\n _log: {\n value: options.log.createLog('default', this)\n },\n _mediaStates: {\n value: { recordings: null },\n writable: true\n },\n _noiseCancellationVendor: {\n value: noiseCancellationVendor,\n }\n });\n }\n\n /**\n * Get the {@link LocalTrackPublicationV2#Representation} of a given {@link TrackSignaling}.\n * @returns {LocalTrackPublicationV2#Representation} - without the SID\n */\n getState() {\n const state = {\n enabled: this.isEnabled,\n id: this.id,\n kind: this.kind,\n name: this.name,\n priority: this.updatedPriority,\n };\n\n if (this._noiseCancellationVendor) {\n // eslint-disable-next-line camelcase\n state.audio_processor = this._noiseCancellationVendor;\n }\n return state;\n }\n\n toString() {\n return `[LocalTrackPublicationV2: ${this.sid}]`;\n }\n\n /**\n * Compare the {@link LocalTrackPublicationV2} to a {@link LocalTrackPublicationV2#Representation} of itself\n * and perform any updates necessary.\n * @param {PublishedTrack} track\n * @returns {this}\n * @fires TrackSignaling#updated\n */\n update(track) {\n switch (track.state) {\n case 'ready':\n this.setSid(track.sid);\n break;\n case 'failed': {\n const error = track.error;\n this.publishFailed(createTwilioError(error.code, error.message));\n break;\n }\n default: // 'created'\n break;\n }\n return this;\n }\n\n updateMediaStates(mediaStates) {\n if (!mediaStates || !mediaStates.recordings ||\n this._mediaStates.recordings === mediaStates.recordings) {\n return this;\n }\n this._mediaStates.recordings = mediaStates.recordings;\n switch (this._mediaStates.recordings) {\n case 'OK':\n this._log.info('Warnings have cleared.');\n this.emit('warningsCleared');\n break;\n case 'NO_MEDIA':\n this._log.warn('Recording media lost.');\n this.emit('warning', TwilioWarning.recordingMediaLost);\n break;\n default:\n this._log.warn(`Unknown media state detected: ${this._mediaStates.recordings}`);\n break;\n }\n return this;\n }\n}\n\n/**\n * The Room Signaling Protocol (RSP) representation of a {@link LocalTrackPublicationV2}.\n * @typedef {object} LocalTrackPublicationV2#Representation\n * @property {boolean} enabled\n * @property {Track.ID} id\n * @property {Track.Kind} kind\n * @property {string} name\n * @priority {Track.Priority} priority\n * @property {Track.SID} sid\n */\n\nmodule.exports = LocalTrackPublicationV2;\n","'use strict';\n\nconst LocalParticipantSignaling = require('../localparticipant');\nconst LocalTrackPublicationV2 = require('./localtrackpublication');\nconst { DEFAULT_LOG_LEVEL } = require('../../util/constants');\nconst Log = require('../../util/log');\nconst { buildLogLevels, isDeepEqual } = require('../../util');\n\n/**\n * @extends ParticipantSignaling\n * @property {BandwidthProfileOptions} bandwidthProfile\n * @property {NetworkQualityConfigurationImpl} networkQualityConfiguration\n * @property {number} revision\n * @emits LocalParticipantV2#updated\n */\nclass LocalParticipantV2 extends LocalParticipantSignaling {\n /**\n * Construct a {@link LocalParticipantV2}.\n * @param {EncodingParametersImpl} encodingParameters\n * @param {NetworkQualityConfigurationImpl} networkQualityConfiguration\n * @param {object} [options]\n */\n constructor(encodingParameters, networkQualityConfiguration, options) {\n options = Object.assign({\n logLevel: DEFAULT_LOG_LEVEL,\n LocalTrackPublicationV2\n }, options);\n\n super();\n\n const logLevels = buildLogLevels(options.logLevel);\n\n Object.defineProperties(this, {\n _bandwidthProfile: {\n value: null,\n writable: true\n },\n _bandwidthProfileRevision: {\n value: 0,\n writable: true\n },\n _encodingParameters: {\n value: encodingParameters\n },\n _removeListeners: {\n value: new Map()\n },\n _LocalTrackPublicationV2: {\n value: options.LocalTrackPublicationV2\n },\n _log: {\n value: options.log\n ? options.log.createLog('default', this)\n : new Log('default', this, logLevels, options.loggerName)\n },\n _publishedRevision: {\n writable: true,\n value: 0\n },\n _revision: {\n writable: true,\n value: 1\n },\n _signalingRegion: {\n value: null,\n writable: true\n },\n audioProcessors: {\n value: [],\n writable: true\n },\n bandwidthProfile: {\n enumerable: true,\n get() {\n return this._bandwidthProfile;\n }\n },\n bandwidthProfileRevision: {\n enumerable: true,\n get() {\n return this._bandwidthProfileRevision;\n }\n },\n networkQualityConfiguration: {\n enumerable: true,\n value: networkQualityConfiguration\n },\n revision: {\n enumerable: true,\n get() {\n return this._revision;\n }\n },\n signalingRegion: {\n enumerable: true,\n get() {\n return this._signalingRegion;\n }\n }\n });\n }\n\n toString() {\n return `[LocalParticipantSignaling: ${this.sid}]`;\n }\n\n /**\n * Set the signalingRegion.\n * @param {string} signalingRegion.\n */\n setSignalingRegion(signalingRegion) {\n if (!this._signalingRegion) {\n this._signalingRegion = signalingRegion;\n }\n }\n\n /**\n * Update the {@link BandwidthProfileOptions}.\n * @param {BandwidthProfileOptions} bandwidthProfile\n */\n setBandwidthProfile(bandwidthProfile) {\n if (!isDeepEqual(this._bandwidthProfile, bandwidthProfile)) {\n // NOTE(mmalavalli): Object.assign() copies the values of only\n // the top level properties. In order to deep copy the object, we\n // stringify and parse the object.\n this._bandwidthProfile = JSON.parse(JSON.stringify(bandwidthProfile));\n this._bandwidthProfileRevision++;\n this.didUpdate();\n }\n }\n\n /**\n * Sets the AudioProcessors enabled for this room.\n * @param {string[]} audioProcessors\n */\n setAudioProcessors(audioProcessors) {\n this.audioProcessors = audioProcessors;\n }\n\n /**\n * returns current {@link EncodingParametersImpl}.\n * @returns {EncodingParametersImpl}\n */\n getParameters() {\n return this._encodingParameters;\n }\n\n /**\n * Set the {@link EncodingParameters}.\n * @param {?EncodingParameters} encodingParameters\n * @returns {this}\n */\n setParameters(encodingParameters) {\n this._encodingParameters.update(encodingParameters);\n return this;\n }\n\n /**\n * Update the {@link LocalParticipantV2} with the new state.\n * @param {Published} published\n * @returns {this}\n */\n update(published) {\n if (this._publishedRevision >= published.revision) {\n return this;\n }\n\n this._publishedRevision = published.revision;\n\n published.tracks.forEach(function(publicationState) {\n const localTrackPublicationV2 = this.tracks.get(publicationState.id);\n if (localTrackPublicationV2) {\n localTrackPublicationV2.update(publicationState);\n }\n }, this);\n\n return this;\n }\n\n updateMediaStates(mediaStates) {\n if (!mediaStates || !mediaStates.tracks) {\n return this;\n }\n\n Array.from(this.tracks.values()).forEach(publication => {\n const states = mediaStates.tracks[publication.sid];\n if (states) {\n publication.updateMediaStates(states);\n }\n });\n return this;\n }\n\n /**\n * @protected\n * @param {DataTrackSender|MediaTrackSender} trackSender\n * @param {string} name\n * @param {Track.Priority} priority\n * @param {?NoiseCancellationVendor} noiseCancellationVendor\n * @returns {LocalTrackPublicationV2}\n */\n _createLocalTrackPublicationSignaling(trackSender, name, priority, noiseCancellationVendor) {\n return new this._LocalTrackPublicationV2(trackSender, name, priority, noiseCancellationVendor, { log: this._log });\n }\n\n /**\n * Add a {@link LocalTrackPublicationV2} for the given {@link DataTrackSender}\n * or {@link MediaTrackSender} to the {@link LocalParticipantV2}.\n * @param {DataTrackSender|MediaTrackSender} trackSender\n * @param {string} name\n * @param {Track.Priority} priority\n * @returns {this}\n */\n addTrack(trackSender, name, priority, noiseCancellationVendor) {\n super.addTrack(trackSender, name, priority, noiseCancellationVendor);\n const publication = this.getPublication(trackSender);\n\n let {\n isEnabled,\n updatedPriority\n } = publication;\n\n const updated = () => {\n // NOTE(mmalavalli): The LocalParticipantV2's state is only published if\n // the \"updated\" event is emitted due to LocalTrackPublicationV2's\n // .isEnabled or .updatedPriority being changed. We do not publish if it is fired due to the\n // LocalTrackPublicationV2's .sid being set.\n if (isEnabled !== publication.isEnabled || updatedPriority !== publication.updatedPriority) {\n this.didUpdate();\n isEnabled = publication.isEnabled;\n updatedPriority = publication.updatedPriority;\n }\n };\n\n publication.on('updated', updated);\n\n this._removeListener(publication);\n this._removeListeners.set(publication, () => publication.removeListener('updated', updated));\n\n this.didUpdate();\n\n return this;\n }\n\n /**\n * @private\n * @param {LocalTrackPublicationV2} publication\n * @returns {void}\n */\n _removeListener(publication) {\n const removeListener = this._removeListeners.get(publication);\n if (removeListener) {\n removeListener();\n }\n }\n\n /**\n * Get the current state of the {@link LocalParticipantV2}.\n * @returns {object}\n */\n getState() {\n return {\n revision: this.revision,\n tracks: Array.from(this.tracks.values()).map(track => track.getState())\n };\n }\n\n /**\n * Increment the revision for the {@link LocalParticipantV2}.\n * @private\n * @returns {void}\n */\n didUpdate() {\n this._revision++;\n this.emit('updated');\n }\n\n /**\n * Remove the {@link LocalTrackPublicationV2} for the given {@link DataTrackSender}\n * or {@link MediaTrackSender} from the {@link LocalParticipantV2}.\n * @param {DataTrackSender|MediaTrackSender} trackSender\n * @returns {?LocalTrackPublicationV2}\n */\n removeTrack(trackSender) {\n const publication = super.removeTrack(trackSender);\n if (publication) {\n trackSender.removeClone(publication.trackTransceiver);\n this._removeListener(publication);\n this.didUpdate();\n }\n return publication;\n }\n\n /**\n * Updates the verbosity of network quality information.\n * @param {NetworkQualityConfiguration} networkQualityConfiguration\n * @returns {void}\n */\n setNetworkQualityConfiguration(networkQualityConfiguration) {\n this.networkQualityConfiguration.update(networkQualityConfiguration);\n }\n\n /**\n * updates encodings for simulcast layers.\n * @param {Track.SID} trackSid\n * @param {Array<{enabled: boolean, layer_index: number}>} encodings\n * @returns {Promise} string indicating result of the operation. can be one of\n * \"OK\", \"INVALID_HINT\", \"COULD_NOT_APPLY_HINT\", \"UNKNOWN_TRACK\"\n */\n setPublisherHint(trackSid, encodings) {\n const trackSignaling = Array.from(this.tracks.values()).find(trackPub => trackPub.sid === trackSid);\n if (!trackSignaling) {\n this._log.warn(`track:${trackSid} not found`);\n return Promise.resolve('UNKNOWN_TRACK');\n }\n return trackSignaling.trackTransceiver.setPublisherHint(encodings);\n }\n}\n\n\n/**\n * @interface Published\n * @property {number} revision\n * @property {Array} tracks\n */\n\n/**\n * @typedef {CreatedTrack|ReadyTrack|FailedTrack} PublishedTrack\n */\n\n/**\n * @interface CreatedTrack\n * @property {Track.ID} id\n * @property {string} state - \"created\"\n */\n\n/**\n * @interface ReadyTrack\n * @property {Track.ID} id\n * @property {Track.SID} sid\n * @property {string} state - \"ready\"\n */\n\n/**\n * @interface FailedTrack\n * @property {Track.ID} id\n * @property {TrackError} error\n * @property {string} state - \"failed\"\n */\n\n/**\n * @interface TrackError\n * @property {number} code\n * @property {string} message\n */\n\n/**\n * @event LocalParticipantV2#updated\n */\n\nmodule.exports = LocalParticipantV2;\n","/* eslint consistent-return:0 */\n'use strict';\n\nconst ParticipantSignaling = require('./participant');\nconst RoomSignaling = require('./room');\nconst StateMachine = require('../statemachine');\n\n/*\nSignaling States\n----------------\n\n +---------+\n | |\n | opening |\n +--->| |\n | +---------+\n +--------+ | | +------+\n | |<--+ +-->| |\n | closed |<----------| open |\n | |<--+ +-->| |\n +--------+ | | +------+\n +---------+ |\n | |<--+\n | closing |\n | |\n +---------+\n\n*/\n\nconst states = {\n closed: [\n 'opening'\n ],\n opening: [\n 'closed',\n 'open'\n ],\n open: [\n 'closed',\n 'closing'\n ],\n closing: [\n 'closed',\n 'open'\n ]\n};\n\n/**\n * @extends StateMachine\n * @property {string} state - one of \"closed\", \"opening\", \"open\", or \"closing\"\n */\nclass Signaling extends StateMachine {\n /**\n * Construct {@link Signaling}.\n */\n constructor() {\n super('closed', states);\n }\n\n /**\n * @private\n */\n // NOTE(mroberts): This is a dummy implementation suitable for testing.\n _close(key) {\n this.transition('closing', key);\n this.transition('closed', key);\n return Promise.resolve(this);\n }\n\n /**\n * @private\n */\n // NOTE(mroberts): This is a dummy implementation suitable for testing.\n _connect(\n localParticipant,\n token,\n encodingParameters,\n preferredCodecs,\n options\n ) {\n localParticipant.connect('PA00000000000000000000000000000000', 'test');\n const sid = 'RM00000000000000000000000000000000';\n const promise = Promise.resolve(new RoomSignaling(localParticipant, sid, options));\n promise.cancel = function cancel() {};\n return promise;\n }\n\n /**\n * @private\n */\n // NOTE(mroberts): This is a dummy implementation suitable for testing.\n _open(key) {\n this.transition('opening', key);\n this.transition('open', key);\n return Promise.resolve(this);\n }\n\n /**\n * Close the {@link Signaling}.\n * @returns {Promise}\n */\n close() {\n return this.bracket('close', key => {\n switch (this.state) {\n case 'closed':\n return this;\n case 'open':\n return this._close(key);\n default:\n throw new Error(`Unexpected Signaling state \"${this.state}\"`);\n }\n });\n }\n\n /**\n * Connect to a {@link RoomSignaling}.\n * @param {ParticipantSignaling} localParticipant\n * @param {string} token\n * @param {EncodingParametersImpl} encodingParameters\n * @param {PreferredCodecs} preferredCodecs\n * @param {object} options\n * @returns {Promise>}\n */\n connect(\n localParticipant,\n token,\n encodingParameters,\n preferredCodecs,\n options\n ) {\n const self = this;\n return this.bracket('connect', function transition(key) {\n switch (self.state) {\n case 'closed':\n return self._open(key).then(transition.bind(null, key));\n case 'open':\n // NOTE(mroberts): We don't need to hold the lock in _connect. Instead,\n // we just need to ensure the Signaling remains open.\n self.releaseLockCompletely(key);\n return self._connect(localParticipant, token, encodingParameters, preferredCodecs, options);\n default:\n throw new Error(`Unexpected Signaling state \"${self.state}\"`);\n }\n });\n }\n\n /**\n * Create a local {@link ParticipantSignaling}.\n * @returns {ParticipantSignaling}\n */\n createLocalParticipantSignaling() {\n return new ParticipantSignaling();\n }\n\n /**\n * Open the {@link Signaling}.\n * @returns {Promise}\n */\n open() {\n return this.bracket('open', key => {\n switch (this.state) {\n case 'closed':\n return this._open(key);\n case 'open':\n return this;\n default:\n throw new Error(`Unexpected Signaling state \"${this.state}\"`);\n }\n });\n }\n}\n\nmodule.exports = Signaling;\n","'use strict';\n\nconst defaultCreateCancelableRoomSignalingPromise = require('./cancelableroomsignalingpromise');\nconst LocalParticipantV2 = require('./localparticipant');\nconst Signaling = require('../');\n\n/**\n * {@link SignalingV2} implements version 2 of our signaling protocol.\n * @extends Signaling\n */\nclass SignalingV2 extends Signaling {\n /**\n * Construct {@link SignalingV2}.\n * @param {string} wsServer\n * @param {?object} [options={}]\n */\n constructor(wsServer, options) {\n /* eslint new-cap:0 */\n options = Object.assign({\n createCancelableRoomSignalingPromise: defaultCreateCancelableRoomSignalingPromise\n }, options);\n\n super();\n\n Object.defineProperties(this, {\n _createCancelableRoomSignalingPromise: {\n value: options.createCancelableRoomSignalingPromise\n },\n _options: {\n value: options\n },\n _wsServer: {\n value: wsServer\n }\n });\n }\n\n /**\n * @private\n */\n _connect(\n localParticipant,\n token,\n encodingParameters,\n preferredCodecs,\n options\n ) {\n options = Object.assign({}, this._options, options);\n return this._createCancelableRoomSignalingPromise.bind(\n null,\n token,\n this._wsServer,\n localParticipant,\n encodingParameters,\n preferredCodecs,\n options);\n }\n\n createLocalParticipantSignaling(encodingParameters, networkQualityConfiguration) {\n return new LocalParticipantV2(encodingParameters, networkQualityConfiguration);\n }\n}\n\nmodule.exports = SignalingV2;\n","'use strict';\n\nconst { MediaStreamTrack } = require('./webrtc');\nconst { guessBrowser, guessBrowserVersion, isCodecSupported } = require('./webrtc/util');\nconst createCancelableRoomPromise = require('./cancelableroompromise');\nconst EncodingParametersImpl = require('./encodingparameters');\nconst LocalParticipant = require('./localparticipant');\nconst InsightsPublisher = require('./util/insightspublisher');\nconst NullInsightsPublisher = require('./util/insightspublisher/null');\n\nconst {\n LocalAudioTrack,\n LocalDataTrack,\n LocalVideoTrack\n} = require('./media/track/es5');\n\nconst NetworkQualityConfigurationImpl = require('./networkqualityconfiguration');\nconst Room = require('./room');\nconst SignalingV2 = require('./signaling/v2');\n\nconst {\n asLocalTrack,\n buildLogLevels,\n filterObject,\n isNonArrayObject\n} = require('./util');\n\nconst {\n DEFAULT_ENVIRONMENT,\n DEFAULT_LOG_LEVEL,\n DEFAULT_LOGGER_NAME,\n DEFAULT_REALM,\n DEFAULT_REGION,\n WS_SERVER,\n SDK_NAME,\n SDK_VERSION,\n typeErrors: E\n} = require('./util/constants');\n\nconst CancelablePromise = require('./util/cancelablepromise');\nconst EventObserver = require('./util/eventobserver');\nconst DefaultLog = require('./util/log');\nconst { validateBandwidthProfile } = require('./util/validate');\n\nconst safariVersion = guessBrowser() === 'safari' && guessBrowserVersion();\n\n// This is used to make out which connect() call a particular Log statement\n// belongs to. Each call to connect() increments this counter.\nlet connectCalls = 0;\n\nlet didPrintSafariWarning = false;\nlet isSafariWithoutVP8Support = false;\n\nif (safariVersion) {\n const { major: safariMajorVersion, minor: safariMinorVersion } = safariVersion;\n isSafariWithoutVP8Support = safariMajorVersion < 12 || (safariMajorVersion === 12 && safariMinorVersion < 1);\n}\n\nconst deprecatedConnectOptionsProps = new Set([\n { didWarn: false, shouldDelete: true, name: 'abortOnIceServersTimeout' },\n { didWarn: false, shouldDelete: true, name: 'dscpTagging', newName: 'enableDscp' },\n { didWarn: false, shouldDelete: true, name: 'iceServersTimeout' },\n { didWarn: false, shouldDelete: false, name: 'eventListener', newName: 'Video.Logger' },\n { didWarn: false, shouldDelete: false, name: 'logLevel', newName: 'Video.Logger' },\n]);\n\nconst deprecatedBandwidthProfileOptions = new Set([\n { didWarn: false, shouldDelete: false, name: 'maxTracks', newName: 'bandwidthProfile.video.clientTrackSwitchOffControl' },\n { didWarn: false, shouldDelete: false, name: 'renderDimensions', newName: 'bandwidthProfile.video.contentPreferencesMode' },\n]);\n\n/**\n * Connect to a {@link Room}.\n *

\n * By default, this will automatically acquire an array containing a\n * {@link LocalAudioTrack} and {@link LocalVideoTrack} before connecting to\n * the {@link Room}. These will be stopped when you disconnect from the\n * {@link Room}.\n *

\n * You can override the default behavior by specifying\n * options. For example, rather than acquiring a\n * {@link LocalAudioTrack} and {@link LocalVideoTrack} automatically, you can\n * pass your own array which you can stop yourself. See {@link ConnectOptions}\n * for more information.\n * @alias module:twilio-video.connect\n * @param {string} token - The Access Token string\n * @param {ConnectOptions} [options] - Options to override the default behavior, invalid options are ignored.\n * @returns {CancelablePromise}\n * @throws {RangeError}\n * @throws {TwilioError}\n * @throws {TypeError}\n * @example\n * var Video = require('twilio-video');\n * var token = getAccessToken();\n * Video.connect(token, {\n * name: 'my-cool-room'\n * }).then(function(room) {\n * room.on('participantConnected', function(participant) {\n * console.log(participant.identity + ' has connected');\n * });\n\n * room.once('disconnected', function() {\n * console.log('You left the Room:', room.name);\n * });\n * }).catch(error => {\n * console.log('Could not connect to the Room:', error.message);\n * });\n * @example\n * var Video = require('twilio-video');\n * var token = getAccessToken();\n *\n * // Connect with audio-only\n * Video.connect(token, {\n * name: 'my-cool-room',\n * audio: true\n * }).then(function(room) {\n * room.on('participantConnected', function(participant) {\n * console.log(participant.identity + ' has connected');\n * });\n *\n * room.once('disconnected', function() {\n * console.log('You left the Room:', room.name);\n * });\n * }).catch(error => {\n * console.log('Could not connect to the Room:', error.message);\n * });\n * @example\n * var Video = require('twilio-video');\n * var token = getAccessToken();\n *\n * // Connect with media acquired using getUserMedia()\n * navigator.mediaDevices.getUserMedia({\n * audio: true,\n * video: true\n * }).then(function(mediaStream) {\n * return Video.connect(token, {\n * name: 'my-cool-room',\n * tracks: mediaStream.getTracks()\n * });\n * }).then(function(room) {\n * room.on('participantConnected', function(participant) {\n * console.log(participant.identity + ' has connected');\n * });\n *\n * room.once('disconnected', function() {\n * console.log('You left the Room:', room.name);\n * });\n * }).catch(error => {\n * console.log('Could not connect to the Room:', error.message);\n * });\n * @example\n * var Video = require('twilio-video');\n * var token = getAccessToken();\n *\n * // Connect with custom names for LocalAudioTrack and LocalVideoTrack\n * Video.connect(token, {\n * name: 'my-cool-room'\n * audio: { name: 'microphone' },\n * video: { name: 'camera' }\n * }).then(function(room) {\n * room.localParticipants.trackPublications.forEach(function(publication) {\n * console.log('The LocalTrack \"' + publication.trackName + '\" was successfully published');\n * });\n * }).catch(error => {\n * console.log('Could not connect to the Room:', error.message);\n * });\n * @example\n * // Accessing the SDK logger\n * var { Logger, connect } = require('twilio-video');\n * var token = getAccessToken();\n *\n * var logger = Logger.getLogger('twilio-video');\n *\n * // Listen for logs\n * var originalFactory = logger.methodFactory;\n * logger.methodFactory = function (methodName, logLevel, loggerName) {\n * var method = originalFactory(methodName, logLevel, loggerName);\n *\n * return function (datetime, logLevel, component, message, data) {\n * method(datetime, logLevel, component, message, data);\n * // Send to your own server\n * postDataToServer(arguments);\n * };\n * };\n * logger.setLevel('debug');\n *\n * connect(token, {\n * name: 'my-cool-room'\n * }).then(function(room) {\n * room.on('participantConnected', function(participant) {\n * console.log(participant.identity + ' has connected');\n * });\n * }).catch(error => {\n * console.log('Could not connect to the Room:', error.message);\n * });\n */\nfunction connect(token, options) {\n if (typeof options === 'undefined') {\n options = {};\n }\n if (!isNonArrayObject(options)) {\n return CancelablePromise.reject(E.INVALID_TYPE('options', 'object'));\n }\n\n const Log = options.Log || DefaultLog;\n const loggerName = options.loggerName || DEFAULT_LOGGER_NAME;\n const logLevel = options.logLevel || DEFAULT_LOG_LEVEL;\n const logLevels = buildLogLevels(logLevel);\n const logComponentName = `[connect #${++connectCalls}]`;\n\n let log;\n try {\n log = new Log('default', logComponentName, logLevels, loggerName);\n } catch (error) {\n return CancelablePromise.reject(error);\n }\n\n // NOTE(csantos): Log a warning for the deprecated ConnectOptions properties.\n // The warning is displayed only for the first call to connect() per browser session.\n // Additionally, the options that are no longer needed will be removed.\n deprecateOptions(options, log, deprecatedConnectOptionsProps);\n\n const adaptiveSimulcast = options.preferredVideoCodecs === 'auto';\n if (adaptiveSimulcast) {\n // NOTE(mpatwardhan): enable adaptiveSimulcast.\n options.preferredVideoCodecs = [{ codec: 'VP8', simulcast: true, adaptiveSimulcast: true }];\n }\n\n if (options.maxVideoBitrate && adaptiveSimulcast) {\n log.error('ConnectOptions \"maxVideoBitrate\" is not compatible with \"preferredVideoCodecs=auto\"');\n return CancelablePromise.reject(E.ILLEGAL_INVOKE('connect',\n 'ConnectOptions \"maxVideoBitrate\" is not compatible with \"preferredVideoCodecs=auto\"'));\n }\n\n options = Object.assign({\n automaticSubscription: true,\n dominantSpeaker: false,\n enableDscp: false,\n environment: DEFAULT_ENVIRONMENT,\n eventListener: null,\n insights: true,\n LocalAudioTrack,\n LocalDataTrack,\n LocalParticipant,\n LocalVideoTrack,\n Log,\n MediaStreamTrack,\n loggerName,\n logLevel,\n maxAudioBitrate: null,\n maxVideoBitrate: null,\n name: null,\n networkMonitor: true,\n networkQuality: false,\n preferredAudioCodecs: [],\n preferredVideoCodecs: [],\n realm: DEFAULT_REALM,\n region: DEFAULT_REGION,\n signaling: SignalingV2\n }, filterObject(options));\n\n /* eslint new-cap:0 */\n const eventPublisherOptions = {};\n if (typeof options.wsServerInsights === 'string') {\n eventPublisherOptions.gateway = options.wsServerInsights;\n }\n const EventPublisher = options.insights ? InsightsPublisher : NullInsightsPublisher;\n const eventPublisher = new EventPublisher(\n token,\n SDK_NAME,\n SDK_VERSION,\n options.environment,\n options.realm,\n eventPublisherOptions);\n\n const wsServer = WS_SERVER(options.environment, options.region);\n const eventObserver = new EventObserver(eventPublisher, Date.now(), log, options.eventListener);\n options = Object.assign({ eventObserver, wsServer }, options);\n options.log = log;\n\n // NOTE(mroberts): Print the Safari warning once if the log-level is at least\n // \"warn\", i.e. neither \"error\" nor \"off\".\n // NOTE(mmalavalli): Print the Safari warning only for versions 12.0 and below.\n if (isSafariWithoutVP8Support\n && !didPrintSafariWarning\n && (log.logLevel !== 'error' && log.logLevel !== 'off')) {\n didPrintSafariWarning = true;\n log.warn([\n 'Support for Safari 12.0 and below is limited because it does not support VP8.',\n 'This means you may experience codec issues in Group Rooms. You may also',\n 'experience codec issues in Peer-to-Peer (P2P) Rooms containing Android- or',\n 'iOS-based Participants who do not support H.264. However, P2P Rooms',\n 'with browser-based Participants should work. For more information, please',\n 'refer to this guide: https://www.twilio.com/docs/video/javascript-v2-developing-safari-11'\n ].join(' '));\n }\n\n if (typeof token !== 'string') {\n return CancelablePromise.reject(E.INVALID_TYPE('token', 'string'));\n }\n\n // NOTE(mmalavalli): The Room \"name\" in \"options\" was being used\n // as the LocalTrack name in asLocalTrack(). So we pass a copy of\n // \"options\" without the \"name\".\n const localTrackOptions = Object.assign({}, options);\n delete localTrackOptions.name;\n\n if ('tracks' in options) {\n if (!Array.isArray(options.tracks)) {\n return CancelablePromise.reject(E.INVALID_TYPE('options.tracks',\n 'Array of LocalAudioTrack, LocalVideoTrack or MediaStreamTrack'));\n }\n try {\n options.tracks = options.tracks.map(track => asLocalTrack(track, localTrackOptions));\n } catch (error) {\n return CancelablePromise.reject(error);\n }\n }\n\n const error = validateBandwidthProfile(options.bandwidthProfile);\n if (error) {\n return CancelablePromise.reject(error);\n }\n\n // Note(mpatwardhan): \"clientTrackSwitchOffControl\" allows tracks to be switched off\n // and \"contentPreferencesMode\" allows track dimensions to be specified dynamically.\n // The properties can have one of the three values internally:\n // 1) \"auto\" = sdk will decide and send the hints.\n // 2) \"manual\" - app can use api to send the hints.\n // 3) \"disabled\" = do not enable this feature. (this is internal only value)\n // 'disabled' is needed because clientTrackSwitchOffControl and contentPreferencesMode are incompatible with\n // deprecated properties maxTracks and renderDimensions respectively. once we make @breaking_version_change\n // we can remove 'disabled' state along with maxTracks and renderDimensions.\n options.clientTrackSwitchOffControl = 'disabled'; // should sdk turn off idle tracks automatically?\n options.contentPreferencesMode = 'disabled'; // should sdk use video element dimensions for content hints?\n if (options.bandwidthProfile) {\n options.clientTrackSwitchOffControl = 'auto';\n options.contentPreferencesMode = 'auto';\n if (options.bandwidthProfile.video) {\n\n // log any warnings about deprecated bwp options\n deprecateOptions(options.bandwidthProfile.video, log, deprecatedBandwidthProfileOptions);\n\n if ('maxTracks' in options.bandwidthProfile.video) {\n // when deprecated maxTracks is specified. disable clientTrackSwitchOffControl\n options.clientTrackSwitchOffControl = 'disabled';\n } else if (options.bandwidthProfile.video.clientTrackSwitchOffControl === 'manual') {\n options.clientTrackSwitchOffControl = 'manual';\n } else {\n options.clientTrackSwitchOffControl = 'auto';\n }\n\n if ('renderDimensions' in options.bandwidthProfile.video) {\n options.contentPreferencesMode = 'disabled';\n } else if (options.bandwidthProfile.video.contentPreferencesMode === 'manual') {\n options.contentPreferencesMode = 'manual';\n } else {\n options.contentPreferencesMode = 'auto';\n }\n }\n }\n\n const Signaling = options.signaling;\n const signaling = new Signaling(options.wsServer, options);\n\n log.info('Connecting to a Room');\n log.debug('Options:', options);\n\n const encodingParameters = new EncodingParametersImpl({\n maxAudioBitrate: options.maxAudioBitrate,\n maxVideoBitrate: options.maxVideoBitrate\n }, adaptiveSimulcast);\n\n const preferredCodecs = {\n audio: options.preferredAudioCodecs.map(normalizeCodecSettings),\n video: options.preferredVideoCodecs.map(normalizeCodecSettings)\n };\n\n const networkQualityConfiguration = new NetworkQualityConfigurationImpl(\n isNonArrayObject(options.networkQuality) ? options.networkQuality : {}\n );\n\n // Log warnings for any unsupported preferred codecs.\n ['audio', 'video'].forEach(\n kind => preferredCodecs[kind].forEach(\n ({ codec }) => isCodecSupported(codec, kind).then(\n isSupported => !isSupported && log.warn(\n `The preferred ${kind} codec \"${codec}\" will be ignored as it is not supported by the browser.`\n )\n )\n )\n );\n\n // Create a CancelableRoomPromise that resolves after these steps:\n // 1 - Get the LocalTracks.\n // 2 - Create the LocalParticipant using options.tracks.\n // 3 - Connect to rtc-room-service and create the RoomSignaling.\n // 4 - Create the Room and then resolve the CancelablePromise.\n const cancelableRoomPromise = createCancelableRoomPromise(\n getLocalTracks.bind(null, options),\n createLocalParticipant.bind(null, signaling, log, encodingParameters, networkQualityConfiguration, options),\n createRoomSignaling.bind(null, token, options, signaling, encodingParameters, preferredCodecs),\n createRoom.bind(null, options));\n\n cancelableRoomPromise.then(room => {\n eventPublisher.connect(room.sid, room.localParticipant.sid);\n log.info('Connected to Room:', room.toString());\n log.info('Room name:', room.name);\n log.debug('Room:', room);\n room.once('disconnected', () => eventPublisher.disconnect());\n return room;\n }, error => {\n eventPublisher.disconnect();\n if (cancelableRoomPromise._isCanceled) {\n log.info('Attempt to connect to a Room was canceled');\n } else {\n log.info('Error while connecting to a Room:', error);\n }\n });\n\n return cancelableRoomPromise;\n}\n\n/**\n * You may pass these options to {@link connect} in order to override the\n * default behavior.\n * @typedef {object} ConnectOptions\n * @property {boolean|CreateLocalTracksOptions|CreateLocalAudioTrackOptions} [audio=true] - Whether or not to\n * get local audio with getUserMedia when tracks\n * are not provided.\n * @property {boolean} [automaticSubscription=true] - By default, you will subscribe\n * to all RemoteTracks shared by other Participants in a Room. You can now override this\n * behavior by setting this flag to false. It will make sure that you will\n * not subscribe to any RemoteTrack in a Group or Small Group Room. Setting it to\n * true, or not setting it at all preserves the default behavior. This\n * flag does not have any effect in a Peer-to-Peer Room.\n * @property {BandwidthProfileOptions} [bandwidthProfile] - You can optionally configure\n * how your available downlink bandwidth is shared among the RemoteTracks you have subscribed\n * to in a Group Room. By default, bandwidth is shared equally among the RemoteTracks.\n * This has no effect in Peer-to-Peer Rooms.\n * @property {boolean} [dominantSpeaker=false] - Whether to enable the Dominant\n * Speaker API or not. This only takes effect in Group Rooms.\n * @property {boolean} [dscpTagging=false] - (deprecated: use \"enableDscp\" instead)\n * DSCP tagging allows you to request enhanced QoS treatment for RTP media packets from any\n * firewall that the client may be behind. Setting this option to true will\n * request DSCP tagging for media packets on supported browsers (only Chrome supports this\n * as of now). Audio packets will be sent with DSCP header value set to 0xb8 which corresponds\n * to Expedited Forwarding (EF). Video packets will be sent with DSCP header value set to 0x88\n * which corresponds to Assured Forwarding (AF41).\n * @property {boolean} [enableDscp=false] - DSCP tagging allows you to request enhanced\n * QoS treatment for RTP media packets from any firewall that the client may be behind.\n * Setting this option to true will request DSCP tagging for media packets\n * on supported browsers (only Chrome supports this as of now). Audio packets will be\n * sent with DSCP header value set to 0xb8 which corresponds to Expedited Forwarding (EF).\n * Video packets will be sent with DSCP header value set to 0x88 which corresponds to\n * Assured Forwarding (AF41).\n * @property {EventListener} [eventListener] - (deprecated: use [Video.Logger](module-twilio-video.html)\n * you can listen to fine-grained events related to signaling and media that are\n * not available in the public APIs. These events might be useful for your own reporting\n * and diagnostics.\n * @property {Array} iceServers - Override the STUN and TURN\n * servers used when connecting to {@link Room}s\n * @property {RTCIceTransportPolicy} [iceTransportPolicy=\"all\"] - Override the\n * ICE transport policy to be one of \"relay\" or \"all\"\n * @property {boolean} [insights=true] - Whether publishing events\n * to the Insights gateway is enabled or not\n * @property {?number} [maxAudioBitrate=null] - Max outgoing audio bitrate (bps);\n * A null or a 0 value does not set any bitrate limit;\n * This value is set as a hint for variable bitrate codecs, but will not take\n * effect for fixed bitrate codecs; Based on our tests, Chrome, Firefox and Safari\n * support a bitrate range of 12000 bps to 256000 bps for Opus codec; This parameter\n * has no effect on iSAC, PCMU and PCMA codecs\n * @property {?number} [maxVideoBitrate=null] - Max outgoing video bitrate (bps);\n * A null or 0 value does not set any bitrate limit;\n * This value is set as a hint for variable bitrate codecs, but will not take\n * effect for fixed bitrate codecs; Based on our tests, Chrome, Firefox and Safari\n * all seem to support an average bitrate range of 20000 bps (20 kbps) to\n * 8000000 bps (8 mbps) for a 720p VideoTrack\n * This parameter must not be set when when preferredVideoCodecs is set to `auto`.\n * @property {?string} [name=null] - Set to connect to a {@link Room} by name\n * @property {boolean|NetworkQualityConfiguration} [networkQuality=false] - Whether to enable the Network\n * Quality API or not. This only takes effect in Group Rooms. Pass a {@link NetworkQualityConfiguration}\n * to configure verbosity levels for network quality information for {@link LocalParticipant}\n * and {@link RemoteParticipant}s. A true value will set the {@link NetworkQualityVerbosity}\n * for the {@link LocalParticipant} to {@link NetworkQualityVerbosity}#minimal\n * and the {@link NetworkQualityVerbosity} for {@link RemoteParticipant}s to\n * {@link NetworkQualityVerbosity}#none.\n * @property {Array} [notifyWarnings=[]] - The SDK raises warning events when it\n * detects certain conditions. You can implement callbacks on these events to act on them, or to alert\n * the user of an issue. Subsequently, \"warningsCleared\" event is raised when conditions have returned\n * to normal. You can listen to these events by specifying an array of warning. By default,\n * this array is empty and no warning events will be raised.\n * Possible values include recording-media-lost, which is raised when the media server\n * has not detected any media on the published track that is being recorded in the past 30 seconds.\n * This usually happens when there are network interruptions or when the track has stopped.\n * This warning is raised by {@link LocalTrackPublication}, {@link LocalParticipant}, and {@link Room} object.\n * @property {string} [region='gll'] - Preferred signaling region; By default, you will be connected to the\n * nearest signaling server determined by latency based routing. Setting a value other\n * than gll bypasses routing and guarantees that signaling traffic will be\n * terminated in the region that you prefer. Please refer to this table\n * for the list of supported signaling regions.\n * @property {Array} [preferredAudioCodecs=[]] - Preferred audio codecs;\n * An empty array preserves the current audio codec preference order.\n * @property {Array|VideoEncodingMode} [preferredVideoCodecs=[]] -\n * Preferred video codecs; when set to 'VideoEncodingMode.Auto', SDK manages the video codec,\n * by preferring VP8 simulcast in group rooms. It also enables adaptive simulcast, which allows SDK\n * to turn off simulcast layers that are not needed for efficient bandwidth and CPU usage.\n * An empty array preserves the current video codec.\n * preference order. If you want to set a preferred video codec on a Group Room,\n * you will need to create the Room using the REST API and set the\n * VideoCodecs property.\n * See \n * here for more information.\n * @property {LogLevel|LogLevels} [logLevel='warn'] - (deprecated: use [Video.Logger](module-twilio-video.html) instead.\n * See [examples](module-twilio-video.html#.connect) for details)\n * Set the default log verbosity\n * of logging. Passing a {@link LogLevel} string will use the same\n * level for all components. Pass a {@link LogLevels} to set specific log\n * levels.\n * @property {string} [loggerName='twilio-video'] - The name of the logger. Use this name when accessing the logger used by the SDK.\n * See [examples](module-twilio-video.html#.connect) for details.\n * @property {Array} [tracks] - The\n * {@link LocalTrack}s or MediaStreamTracks with which to join the\n * {@link Room}. These tracks can be obtained either by calling\n * {@link createLocalTracks}, or by constructing them from the MediaStream\n * obtained by calling getUserMedia().\n * @property {boolean|CreateLocalTrackOptions} [video=true] - Whether or not to\n * get local video with getUserMedia when tracks\n * are not provided.\n */\n\n/**\n * {@link BandwidthProfileOptions} allows you to configure how your available downlink\n * bandwidth is shared among the RemoteTracks you have subscribed to in a Group Room.\n * @typedef {object} BandwidthProfileOptions\n * @property {VideoBandwidthProfileOptions} [video] - Optional parameter to configure\n * how your available downlink bandwidth is shared among the {@link RemoteVideoTrack}s you\n * have subscribed to in a Group Room.\n */\n\n/**\n * {@link VideoBandwidthProfileOptions} allows you to configure how your available downlink\n * bandwidth is shared among the {@link RemoteVideoTrack}s you have subscribed to in a Group Room.\n * @typedef {object} VideoBandwidthProfileOptions\n * @property {Track.Priority} [dominantSpeakerPriority=\"standard\"] - Optional parameter to\n * specify the minimum subscribe {@link Track.Priority} of the Dominant Speaker's {@link RemoteVideoTrack}s.\n * This means that the Dominant Speaker's {@link RemoteVideoTrack}s that are published with\n * lower {@link Track.Priority} will be subscribed to with the {@link Track.Priority} specified here.\n * This has no effect on {@link RemoteVideoTrack}s published with higher {@link Track.Priority}, which will\n * still be subscribed to with with the same {@link Track.Priority}. If not specified, this defaults to \"standard\".\n * This parameter only applies to a Group Room Participant when {@link ConnectOptions}.dominantSpeaker is set to true.\n * @property {number} [maxSubscriptionBitrate] - Optional parameter to specify the maximum\n * downlink video bandwidth in bits per second (bps). By default, there are no limits on\n * the downlink video bandwidth.\n * @property {ClientTrackSwitchOffControl} [clientTrackSwitchOffControl=\"auto\"] - Optional parameter that determines\n * when to turn the {@link RemoteVideoTrack} on or off. When set to \"auto\", SDK will use the visibility of the\n * attached elements to determine if the {@link RemoteVideoTrack} should be turned off or on. When the attached video elements become invisible the {@link RemoteVideoTrack} will\n * be turned off, and when elements become visible they will be turned on. When set to \"manual\" you can turn the {@link RemoteVideoTrack}\n * on and off using the api {@link RemoteVideoTrack#switchOn} and {@link RemoteVideoTrack#switchOff} respectively.\n * @property {VideoContentPreferencesMode} [contentPreferencesMode=\"auto\"] - This Optional parameter configures\n * the mode for specifying content preferences for the {@link RemoteVideoTrack}. When set to \"auto\" the\n * SDK determines the render dimensions by inspecting the attached video elements. {@link RemoteVideoTrack}s rendered in smaller video elements\n * will receive a lower resolution stream compared to the video rendered in larger video elements. When set to \"manual\" you can set\n * the dimensions programmatically by calling {@link RemoteVideoTrack#setContentPreferences}.\n * @property {number} [maxTracks] - (deprecated: use \"clientTrackSwitchOffControl\" instead). Optional\n * parameter to specify the maximum number of visible {@link RemoteVideoTrack}s, which will be selected based on\n * {@link Track.Priority} and an N-Loudest policy. By default there are no limits on the number of visible {@link RemoteVideoTrack}s.\n * 0 or a negative value will remove any limit on the maximum number of visible {@link RemoteVideoTrack}s.\n * @property {BandwidthProfileMode} [mode=\"grid\"] - Optional parameter to specify how the {@link RemoteVideoTrack}s'\n * TrackPriority values are mapped to bandwidth allocation in Group Rooms. This defaults to \"grid\",\n * which results in equal bandwidth share allocation to all {@link RemoteVideoTrack}s.\n * @property {VideoRenderDimensions} [renderDimensions] - (deprecated: use \"contentPreferencesMode\" instead). Optional\n * parameter to specify the desired render dimensions of {@link RemoteVideoTrack}s.\n * @property {TrackSwitchOffMode} [trackSwitchOffMode=\"predicted\"] - Optional parameter to configure\n * how {@link RemoteVideoTrack}s are switched off in response to bandwidth pressure. Defaults to \"predicted\".\n */\n\n/**\n * @deprecated\n * {@link VideoRenderDimensions} allows you to specify the desired render dimensions of {@link RemoteVideoTrack}s.\n * You can specify 'auto' for this field - which is also default value - based on {@link Track.Priority}. The bandwidth allocation algorithm will distribute the available downlink bandwidth\n * proportional to the requested render dimensions. This is just an input for calculating the bandwidth to be allocated\n * and does not affect the actual resolution of the {@link RemoteVideoTrack}s.\n * @typedef {object} VideoRenderDimensions\n * @property {VideoTrack.Dimensions} [high] - Optional parameter to specify the desired rendering dimensions of\n * {@link RemoteVideoTrack} whose {@link Track.Priority} is \"high\". 0 or a negative value will result in the lowest\n * possible resolution. This defaults to 1280 x 720 (HD).\n * @property {VideoTrack.Dimensions} [low] - Optional parameter to specify the desired rendering dimensions of\n * {@link RemoteVideoTrack} whose {@link Track.Priority} is \"low\". 0 or a negative value will result in the lowest\n * possible resolution. This defaults to 176 x 144 (QCIF).\n * @property {VideoTrack.Dimensions} [standard] - Optional parameter to specify the desired rendering dimensions of\n * {@link RemoteVideoTrack} whose {@link Track.Priority} is \"standard\". 0 or a negative value will result in the lowest\n * possible resolution. This defaults to 640 x 480 (VGA).\n */\n\n/**\n * Configure verbosity levels for network quality information for\n * {@link LocalParticipant} and {@link RemoteParticipant}s.\n * @typedef {object} NetworkQualityConfiguration\n * @property {NetworkQualityVerbosity} [local=1] - Verbosity level for {@link LocalParticipant}\n * @property {NetworkQualityVerbosity} [remote=0] - Verbosity level for {@link RemoteParticipant}s\n */\n\n/**\n * You may pass these levels to {@link ConnectOptions} to override\n * log levels for individual components.\n * @typedef {object} LogLevels\n * @property {LogLevel} [default='warn'] - Log level for 'default' modules.\n * @property {LogLevel} [media='warn'] - Log level for 'media' modules.\n * @property {LogLevel} [signaling='warn'] - Log level for 'signaling' modules.\n * @property {LogLevel} [webrtc='warn'] - Log level for 'webrtc' modules.\n */\n\n/**\n * Audio codec settings.\n * @typedef {object} AudioCodecSettings\n * @property {AudioCodec} codec - Audio codec name\n */\n\n/**\n * Opus codec settings.\n * @typedef {AudioCodecSettings} OpusCodecSettings\n * @property {AudioCodec} name - \"opus\"\n * @property {boolean} [dtx=true] - Enable/disable discontinuous transmission (DTX);\n * If enabled all published {@link LocalAudioTrack}s will reduce the outgoing bitrate\n * to near-zero whenever speech is not detected, resulting in bandwidth and CPU savings;\n * It defaults to true.\n */\n\n/**\n * Video codec settings.\n * @typedef {object} VideoCodecSettings\n * @property {VideoCodec} codec - Video codec name\n */\n\n/**\n * VP8 codec settings.\n * @typedef {VideoCodecSettings} VP8CodecSettings\n * @property {VideoCodec} name - \"VP8\"\n * @property {boolean} [simulcast=false] - Enable/disable VP8 simulcast; If\n * enabled, Twilio's Video SDK will send three video streams of different\n * qualities\n */\n\n/**\n * Names of the supported audio codecs.\n * @enum {string}\n */\n// eslint-disable-next-line\nconst AudioCodec = {\n isac: 'isac',\n opus: 'opus',\n PCMA: 'PCMA',\n PCMU: 'PCMU'\n};\n\n/**\n * Names of the supported VideoEncodingMode.\n * @enum {string}\n */\n// eslint-disable-next-line\nconst VideoEncodingMode = {\n Auto: 'auto',\n};\n\n\n/**\n * Names of the supported video codecs.\n * @enum {string}\n */\n// eslint-disable-next-line\nconst VideoCodec = {\n H264: 'H264',\n VP8: 'VP8'\n};\n// VP9 is supported by most browsers, but backend doesn't at the moment.\n// Hide it from public documentation until then.\nVideoCodec.VP9 = 'VP9';\n\n/**\n * Levels for logging verbosity.\n * @enum {string}\n */\n// eslint-disable-next-line\nconst LogLevel = {\n debug: 'debug',\n info: 'info',\n warn: 'warn',\n error: 'error',\n off: 'off'\n};\n\n/**\n * The verbosity level of network quality information of a {@link Participant}.\n * @enum {number}\n */\n// eslint-disable-next-line\nconst NetworkQualityVerbosity = {\n /**\n * Nothing is reported for the {@link Participant}. This has no effect and\n * defaults to {@link NetworkQualityVerbosity}#minimal\n * for the {@link LocalParticipant}.\n */\n none: 0,\n /**\n * Reports {@link NetworkQualityLevel} for the {@link Participant}.\n */\n minimal: 1,\n /**\n * Reports {@link NetworkQualityLevel} and {@link NetworkQualityStats} for the {@link Participant}.\n * {@link NetworkQualityStats} is populated with audio and video {@link NetworkQualityLevel}s\n * based on which the {@link Participant}'s {@link NetworkQualityLevel} is calculated.\n */\n moderate: 2,\n /**\n * Reports {@link NetworkQualityLevel} and {@link NetworkQualityStats} for the {@link Participant}.\n * {@link NetworkQualityStats} is populated with audio and Video {@link NetworkQualityLevel}s\n * and their corresponding {@link NetworkQualityMediaStats} based on which the\n * {@link Participant}'s {@link NetworkQualityLevel} is calculated.\n */\n detailed: 3\n};\n\n\n/**\n * {@link TrackSwitchOffMode} specifies when {@link RemoteVideoTrack}s' are switched off.\n * @enum {string}\n */\n// eslint-disable-next-line\nconst TrackSwitchOffMode = {\n /**\n * In this mode, {@link RemoteVideoTrack}s are switched off only when network congestion\n * is detected.\n */\n detected: 'detected',\n\n /**\n * In this mode, {@link RemoteVideoTrack}s are pro-actively switched off when network\n * congestion is predicted by the bandwidth estimation mechanism.\n */\n predicted: 'predicted',\n\n /**\n * In this mode, {@link RemoteVideoTrack}s are not switched off. Instead in response to network\n * congestion, tracks will be adjusted to lower quality.\n */\n disabled: 'disabled'\n};\n\n/**\n * {@link BandwidthProfileMode} specifies how {@link RemoteVideoTrack}s' {@link Track.Priority} values\n * are mapped to bandwidth allocation in Group Rooms.\n * @enum {string}\n */\n// eslint-disable-next-line\nconst BandwidthProfileMode = {\n /**\n * This mode is for use cases where all the subscribed {@link RemoteVideoTrack}s are\n * equally important. The bandwidth allocation algorithm will share the available\n * downlink bandwidth equally among the subscribed {@link RemoteVideoTrack}s, irrespective\n * of their {@link Track.Priority}. In case of insufficient downlink bandwidth, the lower\n * priority {@link RemoteVideoTrack}s are switched off.\n */\n grid: 'grid',\n /**\n * This mode is for use cases where some {@link RemoteVideoTrack}s are prioritized more than\n * others. However, the lower priority {@link RemoteVideoTrack}s still need to be visible.\n * The bandwidth allocation algorithm will share the available downlink bandwidth proportional\n * to the requested {@link VideoRenderDimensions} corresponding to their {@link Track.Priority}.\n * In case of insufficient downlink bandwidth, the quality of higher priority {@link RemoteVideoTrack}s\n * may be degraded to avoid switching off lower priority {@link RemoteVideoTrack}s.\n */\n collaboration: 'collaboration',\n /**\n * This mode is for use cases where some {@link RemoteVideoTrack}s are deemed critical and must\n * be preserved at any cost over the other {@link RemoteVideoTrack}s. The bandwidth allocation\n * algorithm will allocate as big a share of the available downlink bandwidth as it possibly\n * can to the higher priority {@link RemoteVideoTrack}s, and only then consider the lower priority\n * {@link RemoteVideoTrack}s. In case of insufficient downlink bandwidth, the lower priority\n * {@link RemoteVideoTrack}s are switched off in order to preserve the quality of the higher\n * priority {@link RemoteVideoTrack}s.\n */\n presentation: 'presentation'\n};\n\n/**\n * {@link VideoContentPreferencesMode} specifies how {@link RemoteVideoTrack}s' render dimensions are\n * decided by the SDK.\n * @enum {string}\n */\n// eslint-disable-next-line\nconst VideoContentPreferencesMode = {\n /**\n * when set to auto, SDK uses the sizes of the video elements attached to the to the {@link RemoteVideoTrack} dynamically to\n * decide the render dimensions. {@link RemoteVideoTrack}s rendered in smaller video elements will be given smaller bandwidth allocation\n * compared to the tracks rendered in large video elements.\n */\n auto: 'auto',\n /**\n * When set to manual, application can use {@link RemoteVideoTrack#setContentPreference} to set the\n * desired render dimensions for the {@link RemoteVideoTrack}.\n */\n manual: 'manual'\n};\n\n\n/**\n * {@link ClientTrackSwitchOffControl} specifies how {@link RemoteVideoTrack}s' turned on and off\n * @enum {string}\n */\n// eslint-disable-next-line\nconst ClientTrackSwitchOffControl = {\n /**\n * when set to auto, SDK uses the visibility of the video elements attached to the to the {@link RemoteVideoTrack} to decide.\n * on turning tracks on or off. The track that are not attached to any video elements or not visible on the screen will be turned\n * off automatically.\n */\n auto: 'auto',\n\n /**\n * When set to manual, application can use {@link RemoteVideoTrack}s switchOff and switchOn apis to control turn the track on or off.\n */\n manual: 'manual'\n};\n\n\n/**\n * Names of the supported levels for {@link EventListenerEvent}s.\n * @enum {string}\n */\n// eslint-disable-next-line\nconst EventListenerLevel = {\n debug: 'debug',\n error: 'error',\n info: 'info',\n warning: 'warning'\n};\n\n/**\n * Names of the supported groups for {@link EventListenerEvent}s.\n * @enum {string}\n */\n// eslint-disable-next-line\nconst EventListenerGroup = {\n /**\n * Events associated with the connection to Twilio's signaling server\n */\n signaling: 'signaling'\n};\n\n/**\n * An {@link EventListener} allows you to listen to fine-grained {@link EventListenerEvent}s related\n * to signaling and media that are not available in the public APIs, which might be useful for your own\n * reporting and diagnostics.\n * @typedef {EventEmitter} EventListener\n * @example\n * const { EventEmitter } = require('events');\n * const { connect } = require('twilio-video');\n *\n * const eventListener = new EventEmitter();\n * eventListener.on('event', function(event) {\n * console.log('The SDK raised an event:', event);\n * });\n *\n * connect('token', {\n * eventListener: eventListener\n * });\n */\n\n/**\n * The SDK raised an {@link EventListenerEvent}.\n * @event EventListener#event\n * @param {EventListenerEvent} event - Context about the event raised by the SDK.\n * This can be one of the following:\n * * {@link EventListenerClosedEvent}\n * * {@link EventListenerConnectingEvent}\n * * {@link EventListenerEarlyEvent}\n * * {@link EventListenerOpenEvent}\n * * {@link EventListenerWaitingEvent}\n */\n\n/**\n * An {@link EventListenerEvent} provides context about an event raised by the SDK on the\n * {@link EventListener}. Apart from the properties listed here, it may also include some\n * event-specific data within an optional \"payload\" property. The different types of\n * {@link EventListenerEvent}s are listed below:\n * * {@link EventListenerClosedEvent}\n * * {@link EventListenerConnectingEvent}\n * * {@link EventListenerEarlyEvent}\n * * {@link EventListenerOpenEvent}\n * * {@link EventListenerWaitingEvent}\n * @typedef {object} EventListenerEvent\n * @property {number} elapsedTime - The time elapsed in milliseconds since connect() was called\n * @property {EventListenerGroup} group - The group under which the event is classified\n * @property {EventListenerLevel} level - The verbosity level of the event, which can be one of \"debug\", \"error\", \"info\", \"warning\"\n * @property {string} name - The name of the event\n * @property {*} [payload] - Optional event-specific data\n * @property {number} timestamp - The time in milliseconds relative to the Unix Epoch when the event was raised\n */\n\n/**\n * The connection to Twilio's signaling server was closed.\n * @typedef {EventListenerEvent} EventListenerClosedEvent\n * @property {EventListenerGroup} group='signaling'\n * @property {EventListenerLevel} level - 'info' if the connection was closed by the client, 'error' otherwise\n * @property {string} name='closed'\n * @property {{reason: string}} payload - Reason for the connection being closed. It can be one of\n * 'busy', 'failed', 'local', 'remote' or 'timeout'\n */\n\n/**\n * The SDK is connecting to Twilio's signaling server.\n * @typedef {EventListenerEvent} EventListenerConnectingEvent\n * @property {EventListenerGroup} group='signaling'\n * @property {EventListenerLevel} level='info'\n * @property {string} name='connecting'\n */\n\n/**\n * The SDK is about to connect to Twilio's signaling server.\n * @typedef {EventListenerEvent} EventListenerEarlyEvent\n * @property {EventListenerGroup} group='signaling'\n * @property {EventListenerLevel} level='info'\n * @property {string} name='early'\n */\n\n/**\n * The SDK has established a signaling connection to Twilio's signaling server.\n * @typedef {EventListenerEvent} EventListenerOpenEvent\n * @property {EventListenerGroup} group='signaling'\n * @property {EventListenerLevel} level='info'\n * @property {string} name='open'\n */\n\n/**\n * The SDK is waiting to retry connecting th Twilio's signaling server. This can\n * happen if the server is busy with too many connection requests.\n * @typedef {EventListenerEvent} EventListenerWaitingEvent\n * @property {EventListenerGroup} group='signaling'\n * @property {EventListenerLevel} level='warning'\n * @property {string} name='waiting'\n */\n\n\nfunction deprecateOptions(options, log, deprecationTable) {\n deprecationTable.forEach(prop => {\n const { didWarn, name, newName, shouldDelete } = prop;\n if (name in options && typeof options[name] !== 'undefined') {\n if (newName && shouldDelete) {\n options[newName] = options[name];\n }\n if (shouldDelete) {\n delete options[name];\n }\n if (!didWarn && !['error', 'off'].includes(log.level)) {\n log.warn(`The ConnectOptions \"${name}\" is ${newName\n ? `deprecated and scheduled for removal. Please use \"${newName}\" instead.`\n : 'no longer applicable and will be ignored.'}`);\n prop.didWarn = true;\n }\n }\n });\n}\n\nfunction createLocalParticipant(signaling, log, encodingParameters, networkQualityConfiguration, options, localTracks) {\n const localParticipantSignaling = signaling.createLocalParticipantSignaling(encodingParameters, networkQualityConfiguration);\n log.debug('Creating a new LocalParticipant:', localParticipantSignaling);\n return new options.LocalParticipant(localParticipantSignaling, localTracks, options);\n}\n\nfunction createRoom(options, localParticipant, roomSignaling) {\n const room = new Room(localParticipant, roomSignaling, options);\n const log = options.log;\n\n log.debug('Creating a new Room:', room);\n roomSignaling.on('stateChanged', function stateChanged(state) {\n if (state === 'disconnected') {\n log.info('Disconnected from Room:', room.toString());\n roomSignaling.removeListener('stateChanged', stateChanged);\n }\n });\n\n return room;\n}\n\nfunction createRoomSignaling(token, options, signaling, encodingParameters, preferredCodecs, localParticipant) {\n options.log.debug('Creating a new RoomSignaling');\n return signaling.connect(\n localParticipant._signaling,\n token,\n encodingParameters,\n preferredCodecs,\n options);\n}\n\nfunction getLocalTracks(options, handleLocalTracks) {\n const log = options.log;\n\n options.shouldStopLocalTracks = !options.tracks;\n if (options.shouldStopLocalTracks) {\n log.info('LocalTracks were not provided, so they will be acquired '\n + 'automatically before connecting to the Room. LocalTracks will '\n + 'be released if connecting to the Room fails or if the Room '\n + 'is disconnected');\n } else {\n log.info('Getting LocalTracks');\n log.debug('Options:', options);\n }\n\n return options.createLocalTracks(options).then(function getLocalTracksSucceeded(localTracks) {\n const promise = handleLocalTracks(localTracks);\n\n promise.catch(function handleLocalTracksFailed() {\n if (options.shouldStopLocalTracks) {\n log.info('The automatically acquired LocalTracks will now be stopped');\n localTracks.forEach(track => {\n track.stop();\n });\n }\n });\n\n return promise;\n });\n}\n\nfunction normalizeCodecSettings(nameOrSettings) {\n const settings = typeof nameOrSettings === 'string'\n ? { codec: nameOrSettings }\n : nameOrSettings;\n switch (settings.codec.toLowerCase()) {\n case 'opus': {\n return Object.assign({ dtx: true }, settings);\n }\n case 'vp8': {\n return Object.assign({ simulcast: false }, settings);\n }\n default: {\n return settings;\n }\n }\n}\n\nmodule.exports = connect;\n","'use strict';\n\nconst { DEFAULT_LOG_LEVEL, DEFAULT_LOGGER_NAME } = require('./util/constants');\n\n/**\n * Request a {@link LocalAudioTrack} or {@link LocalVideoTrack}.\n * @param {Track.Kind} kind - \"audio\" or \"video\"\n * @param {CreateLocalTrackOptions} [options]\n * @returns {Promise}\n * @private\n */\nfunction createLocalTrack(kind, options) {\n options = Object.assign({\n loggerName: DEFAULT_LOGGER_NAME,\n logLevel: DEFAULT_LOG_LEVEL,\n }, options);\n\n const createOptions = {};\n createOptions.loggerName = options.loggerName;\n createOptions.logLevel = options.logLevel;\n delete options.loggerName;\n delete options.logLevel;\n\n const createLocalTracks = options.createLocalTracks;\n delete options.createLocalTracks;\n createOptions[kind] = Object.keys(options).length > 0 ? options : true;\n\n return createLocalTracks(createOptions).then(localTracks => localTracks[0]);\n}\n\n/**\n * Request a {@link LocalAudioTrack}.\n * @alias module:twilio-video.createLocalAudioTrack\n * @param {CreateLocalTracksOptions|CreateLocalAudioTrackOptions} [options] - Options for requesting a {@link LocalAudioTrack}\n * @returns {Promise}\n * @example\n * var Video = require('twilio-video');\n *\n * // Connect to the Room with just video\n * Video.connect('my-token', {\n * name: 'my-cool-room',\n * video: true\n * }).then(function(room) {\n * // Add audio after connecting to the Room\n * Video.createLocalAudioTrack().then(function(localTrack) {\n * room.localParticipant.publishTrack(localTrack);\n * });\n * });\n * @example\n * var Video = require('twilio-video');\n *\n * // Request the LocalAudioTrack with a custom name\n * // and krisp noise cancellation\n * Video.createLocalAudioTrack({\n * name: 'microphone',\n * noiseCancellationOptions: {\n * vendor: 'krisp',\n * sdkAssetsPath: '/twilio-krisp-audio-plugin/1.0.0/dist'\n * }\n * });\n */\nfunction createLocalAudioTrack(options) {\n return createLocalTrack('audio', options);\n}\n\n/**\n * Request a {@link LocalVideoTrack}. Note that on mobile browsers,\n * the camera can be reserved by only one {@link LocalVideoTrack} at any given\n * time. If you attempt to create a second {@link LocalVideoTrack}, video frames\n * will no longer be supplied to the first {@link LocalVideoTrack}.\n * @alias module:twilio-video.createLocalVideoTrack\n * @param {CreateLocalTrackOptions} [options] - Options for requesting a {@link LocalVideoTrack}\n * @returns {Promise}\n * @example\n * var Video = require('twilio-video');\n *\n * // Connect to the Room with just audio\n * Video.connect('my-token', {\n * name: 'my-cool-room',\n * audio: true\n * }).then(function(room) {\n * // Add video after connecting to the Room\n * Video.createLocalVideoTrack().then(function(localTrack) {\n * room.localParticipant.publishTrack(localTrack);\n * });\n * });\n * @example\n * var Video = require('twilio-video');\n *\n * // Request the default LocalVideoTrack with a custom name\n * Video.createLocalVideoTrack({ name: 'camera' }).then(function(localTrack) {\n * console.log(localTrack.name); // 'camera'\n * });\n */\nfunction createLocalVideoTrack(options) {\n return createLocalTrack('video', options);\n}\n\n/**\n * {@link NoiseCancellationVendor} specifies the 3rd party plugin to use for noise cancellation.\n * @enum {string}\n */\n// eslint-disable-next-line\nconst NoiseCancellationVendor = {\n /**\n * This plugin can be found by requesting access with this form {@link https://forms.gle/eeFyoGJj1mgMrxN88}\n */\n krisp: 'krisp',\n};\n\n/**\n * You can use 3rd party noise cancellation plugin when creating {@link LocalAudioTrack}\n * By specifying these options. This is a beta feature.\n * @typedef {object} NoiseCancellationOptions\n * @property {NoiseCancellationVendor} vendor - Specifies the vendor library to use\n * You need to obtain and host the library files on your web server.\n * @property {string} sdkAssetsPath - Specifies path where vendor library files are\n * hosted on your web server.\n */\n\n/**\n * Create {@link LocalAudioTrack} options.\n * @typedef {CreateLocalTrackOptions} CreateLocalAudioTrackOptions\n * @property {boolean} [workaroundWebKitBug180748=false] - setting this\n * attempts to workaround WebKit Bug 180748, where, in Safari, getUserMedia may return a silent audio\n * MediaStreamTrack.\n * @property {DefaultDeviceCaptureMode} [defaultDeviceCaptureMode=\"auto\"] - This optional property only applies if the\n * {@link LocalAudioTrack} is capturing from the default audio input device connected to a desktop or laptop. When the\n * property is set to \"auto\", the LocalAudioTrack restarts whenever the default audio input device changes, in order to\n * capture audio from the new default audio input device. For example, when a bluetooth audio headset is connected to a\n * Macbook, the LocalAudioTrack will start capturing audio from the headset microphone. When the headset is disconnected,\n * the LocalAudioTrack will start capturing audio from the Macbook microphone. When the property is set to \"manual\", the\n * LocalAudioTrack continues to capture from the same audio input device even after the default audio input device changes.\n * When the property is not specified, it defaults to \"auto\".\n * @property {NoiseCancellationOptions} [noiseCancellationOptions] - This optional property enables using 3rd party plugins\n * for noise cancellation.\n */\n\n/**\n * Create {@link LocalTrack} options. Apart from the properties listed here, you can\n * also specify any of the MediaTrackConstraints\n * properties.\n * @typedef {MediaTrackConstraints} CreateLocalTrackOptions\n * @property {LogLevel|LogLevels} [logLevel='warn'] - (deprecated: use [Video.Logger](module-twilio-video.html) instead.\n * See [examples](module-twilio-video.html#.connect) for details)\n * Set the default log verbosity\n * of logging. Passing a {@link LogLevel} string will use the same\n * level for all components. Pass a {@link LogLevels} to set specific log\n * levels.\n * @property {string} [loggerName='twilio-video'] - The name of the logger. Use this name when accessing the logger used by the SDK.\n * See [examples](module-twilio-video.html#.connect) for details.\n * @property {string} [name] - The {@link LocalTrack}'s name; by default,\n * it is set to the {@link LocalTrack}'s ID.\n */\n\nmodule.exports = {\n audio: createLocalAudioTrack,\n video: createLocalVideoTrack\n};\n","'use strict';\n\nconst { guessBrowser, support: isWebRTCSupported } = require('../webrtc/util');\nconst { getSdpFormat } = require('../webrtc/util/sdp');\nconst { isAndroid, isMobile, isNonChromiumEdge, rebrandedChromeBrowser, mobileWebKitBrowser } = require('./browserdetection');\n\nconst SUPPORTED_CHROME_BASED_BROWSERS = [\n 'crios',\n 'edg',\n 'edge',\n 'electron',\n 'headlesschrome'\n];\nconst SUPPORTED_ANDROID_BROWSERS = [\n 'chrome',\n 'firefox'\n];\nconst SUPPORTED_IOS_BROWSERS = [\n 'chrome',\n 'safari'\n];\n// Currently none. Add 'brave', 'edg', and 'edge' here once we start supporting them\nconst SUPPORTED_MOBILE_WEBKIT_BASED_BROWSERS = [];\n\n/**\n * Check if the current browser is officially supported by twilio-video.js.\n * @returns {boolean}\n */\nfunction isSupported() {\n const browser = guessBrowser();\n\n // NOTE (csantos): Return right away if there is no browser detected\n // to prevent unnecessary checks which could lead to errors\n if (!browser) {\n return false;\n }\n\n const rebrandedChrome = rebrandedChromeBrowser(browser);\n const mobileWebKit = mobileWebKitBrowser(browser);\n const supportedMobileBrowsers = isAndroid() ?\n SUPPORTED_ANDROID_BROWSERS : SUPPORTED_IOS_BROWSERS;\n\n return !!browser\n && isWebRTCSupported()\n && getSdpFormat() === 'unified'\n && (!rebrandedChrome || SUPPORTED_CHROME_BASED_BROWSERS.includes(rebrandedChrome))\n && !isNonChromiumEdge(browser)\n && (!mobileWebKit || SUPPORTED_MOBILE_WEBKIT_BASED_BROWSERS.includes(mobileWebKit))\n && (!isMobile() || supportedMobileBrowsers.includes(browser));\n}\n\nmodule.exports = isSupported;\n","'use strict';\n\nimport type { ConnectOptions, CreateLocalTrackOptions, CreateLocalAudioTrackOptions } from '../tsdef/types';\nimport type { LocalAudioTrack as LocalAudioTrackType } from '../tsdef/LocalAudioTrack';\nimport type { LocalVideoTrack as LocalVideoTrackType } from '../tsdef/LocalVideoTrack';\nimport type { Log } from '../tsdef/loglevel';\nimport type { Room } from '../tsdef/Room';\nimport { createLocalTracks } from './createlocaltracks';\nimport { runPreflight } from './preflight/preflighttest';\n\n\nconst internals = {\n connect: require('./connect'),\n createLocalAudioTrack: require('./createlocaltrack').audio,\n createLocalVideoTrack: require('./createlocaltrack').video,\n isSupported: require('./util/support')(),\n version: require('../package.json').version,\n Logger: require('./vendor/loglevel'),\n LocalAudioTrack: require('./media/track/es5').LocalAudioTrack,\n LocalDataTrack: require('./media/track/es5').LocalDataTrack,\n LocalVideoTrack: require('./media/track/es5').LocalVideoTrack\n};\n\nfunction connect(token: string, options?: ConnectOptions): Promise {\n const internalOptions = {\n createLocalTracks,\n ...options\n };\n return internals.connect(token, internalOptions);\n}\n\nfunction createLocalAudioTrack(options?: CreateLocalTrackOptions|CreateLocalAudioTrackOptions): Promise {\n const internalOptions = {\n createLocalTracks,\n ...options\n };\n return internals.createLocalAudioTrack(internalOptions);\n}\n\nfunction createLocalVideoTrack(options?: CreateLocalTrackOptions): Promise {\n const internalOptions = {\n createLocalTracks,\n ...options\n };\n return internals.createLocalVideoTrack(internalOptions);\n}\n\n/**\n * @module twilio-video\n * @property {boolean} isSupported - true if the current browser is officially\n * supported by twilio-video.js; In this context, \"supported\" means that\n * twilio-video.js has been extensively tested with this browser; This\n * table\n * specifies the list of officially supported browsers.\n *\n * @property {object} Logger - The loglevel\n * module used by the SDK. Use this object to access the internal loggers and perform actions as defined by the\n * loglevel APIs.\n * See [connect](#.connect) for examples.\n *\n * @property {string} version - current version of twilio-video.js.\n */\n\nconst isSupported: boolean = internals.isSupported;\nconst version: boolean = internals.version;\nconst Logger: Log.RootLogger = internals.Logger;\nconst LocalAudioTrack = internals.LocalAudioTrack;\nconst LocalVideoTrack = internals.LocalVideoTrack;\nconst LocalDataTrack = internals.LocalDataTrack;\n\nmodule.exports = {\n connect,\n createLocalAudioTrack,\n createLocalVideoTrack,\n createLocalTracks,\n runPreflight,\n isSupported,\n version,\n Logger,\n LocalAudioTrack,\n LocalVideoTrack,\n LocalDataTrack,\n};\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file Functions used in applying background effects or manipulating video processors\n * @author Liam Liden\n * @module Epic.VideoApp.Utils.BackgroundEffects\n */\n\nimport { isSupported } from \"twilio-video\";\nimport { Month } from \"~/types\";\nimport { DefaultImageNames } from \"~/types/backgrounds\";\nimport { isSafari } from \"./browser\";\nimport { isMobile } from \"./os\";\n\n/**\n * Gets the current seasonal background image\n * @returns The path of the seasonal background image that should be used\n */\nexport function getSeasonalImagePath(): DefaultImageNames {\n\tconst month = new Date().getMonth();\n\t// Dec-Feb Winter; Mar-May Spring; June-Aug Summer; Sept-Nov Fall\n\tif (month < Month.march) {\n\t\treturn DefaultImageNames.winter;\n\t} else if (month < Month.june) {\n\t\treturn DefaultImageNames.spring;\n\t} else if (month < Month.september) {\n\t\treturn DefaultImageNames.summer;\n\t} else if (month < Month.december) {\n\t\treturn DefaultImageNames.fall;\n\t}\n\treturn DefaultImageNames.winter;\n}\n\nexport interface IBackgroundsAvailable {\n\tblur: boolean;\n\tepic: boolean;\n\tbranded: boolean;\n}\n\nconst supportsImageBackgrounds = isSupported && !isMobile() && !isSafari();\nconst supportsBlur = supportsImageBackgrounds;\n\nexport function getAvailableBackgrounds(\n\tblurAccess: boolean,\n\tepicBackgroundsAccess: boolean,\n\tbrandedBackgroundAccess: boolean,\n\tareBackgroundsDisabled: boolean = false,\n): IBackgroundsAvailable {\n\t// Chrome 122 has a memory leak with the underlying WebRTC background effects implementation\n\tconst blurAvailable = blurAccess && supportsBlur && !areBackgroundsDisabled;\n\tconst epicBackgroundsAvailable =\n\t\tepicBackgroundsAccess && supportsImageBackgrounds && !areBackgroundsDisabled;\n\tconst brandedBackgroundsAvailable =\n\t\tbrandedBackgroundAccess && supportsImageBackgrounds && !areBackgroundsDisabled;\n\treturn { blur: blurAvailable, epic: epicBackgroundsAvailable, branded: brandedBackgroundsAvailable };\n}\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Options used for connecting to a video call\n * @author Chance Overberg\n * @module Epic.VideoApp.WebCore.Types.ConnectOptions\n */\n\nimport { DebuggingLogLevel } from \"~/state/room\";\nimport { TwilioRegion } from \"~/types\";\n\nexport interface IConnectOptions {\n\tinfo: IConnectResponseDTO;\n\tlogLevel: DebuggingLogLevel;\n\tisLowBandwidth: boolean;\n\tisInWaitingRoom: boolean;\n\tjwt?: string;\n}\n\n// DTO for connection data for video vendors\nexport interface IConnectResponseDTO {\n\ttoken: string;\n\troomIdentifier: string;\n\troomID: string | null;\n\tuserID: string;\n\tpatientName: string | null;\n\tconferenceDateIso: string | null;\n\tregionID?: TwilioRegion;\n\tapiKey?: string | null;\n}\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file types for the core session interface\n * @author Trevor Roussel\n * @module Epic.VideoApp.WebCore.Types.Session\n */\n\nexport type SessionConnectionStatus = \"connected\" | \"disconnected\" | \"reconnecting\" | \"not-connected\";\n\nexport enum VideoVendor {\n\tunknown = 0,\n\ttwilio = 1,\n\tdaily = 2,\n}\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file types for the core stream interface\n * @author Trevor Roussel\n * @module Epic.VideoApp.WebCore.Types.Stream\n */\n\nexport type DeviceKind = \"audio\" | \"video\";\n\nexport type DeviceType = \"camera\" | \"mic\" | \"speaker\";\n\nconst videoTypes = [\"camera\", \"screen\"] as const;\nexport type VideoType = (typeof videoTypes)[number];\n\nexport type IStreamSubscriptionStatus = {\n\t[key in (typeof videoTypes)[number]]: SubscriptionStatus;\n};\n\nexport type Priority = \"low\" | \"standard\" | \"high\";\n\n// These directly map to the simulcast quality layers from Daily, but they could be further mapped to other scales\n// within a vendor implementation if necessary\nexport enum Quality {\n\tundefined = -1,\n\tlow = 0,\n\tstandard = 1,\n\thigh = 2,\n}\n\nexport enum SubscriptionStatus {\n\tsubscribed = 0,\n\tstaged = 1,\n\tunsubscribed = 2,\n}\n\nexport interface ISwitchDeviceResponse {\n\tresult: boolean;\n\tswitchedDevices: boolean;\n\terror: Error | undefined;\n}\n\nexport const MAIN_VIDEO_ID = \"main-video\";\nexport const LOCAL_VIDEO_ID = \"local-video\";\nexport const SCREEN_SHARE_VIDEO_ID = \"screen-share\";\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Index for Core Data Model Types\n * @author Will Cooper\n * @module Epic.VideoApp.WebCore.Types.Index\n */\n\nexport * from \"./connectOptions\";\nexport * from \"./session\";\nexport * from \"./stream\";\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file chat state\n * @author Noah Allen\n * @module Epic.VideoApp.State.Chat\n */\n\nimport { buildSharedState } from \"@epic/react-redux-booster\";\nimport store from \"~/app/store\";\nimport { IChatConfig } from \"~/types/chat\";\n\n/// TYPES ///\n\nexport type IChatState = IChatConfig;\n\n/// INIT ///\n\nexport function getInitialState(): IChatState {\n\treturn { chatEnabled: false };\n}\n\n/// REDUCERS ///\n\nexport function setChatConfig(state: IChatState, config: IChatConfig): IChatState {\n\treturn { ...state, ...config };\n}\n\n/// SELECTORS ///\n\nfunction getChatEnabled(state: IChatState): boolean {\n\treturn state.chatEnabled;\n}\n\n/// BUILD IT ///\n\nconst builtState = buildSharedState({\n\tinit: getInitialState,\n\treducers: { setChatConfig },\n\tselectors: { getChatEnabled },\n});\nstore.addSharedState(builtState.sharedState, \"chat\");\n\nexport const { actionCreators: chatActions, useSharedState: useChatState, sharedState: state } = builtState;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file Types for user feedback surveys\n * @author Max Harkins\n * @module Epic.VideoApp.Types.Survey\n */\n\nimport { IUserPermissions } from \".\";\n\n// Keep in sync with UserFeedbackState in ClientConfigurationDTO, since the initial feedback step must be part of a subset of these values\nexport enum FeedbackPageStep {\n\thidden = 0,\n\toptional = 1,\n\tintro = 2,\n\tsurvey = 3,\n\tcompleted = 4,\n}\n\n// Enum that represents the status of loading the feedback survey questionnaire\nexport enum FeedbackSurveyLoadingStatus {\n\tnotYetLoaded = 0,\n\tsuccessfullyLoaded = 1,\n\tfailedToLoad = 2,\n}\n\n/**\n * Interface for survey responses, where the index represents the question ID\n * and the value is the response (true for answered, false for not answered)\n */\nexport interface ISurveyResponses {\n\t[index: string]: boolean;\n}\n\nexport interface ISaveSurvey {\n\t(responses: ISurveyResponses, isFinalSubmission: boolean): void;\n}\n\n/** Given a question or question group, determines whether the object is of type IQuestionGroup */\nexport const isQuestionGroup = (q: IQuestion | IQuestionGroup): q is IQuestionGroup =>\n\t\"subQuestions\" in q && q.subQuestions != null;\n\nexport interface ISurvey {\n\tpages: ISurveyPage[];\n}\n\nexport interface ISurveyPage {\n\tquestions: (IQuestionGroup | IQuestion)[];\n}\nexport interface IQuestionBase {\n\tname: string;\n\tid: string;\n\trequiredPermissions?: (keyof IUserPermissions)[];\n\ticonName?: string;\n}\n\nexport interface IQuestionGroup extends IQuestionBase {\n\t/** List a question as a dependency. The question group should not be shown unless\n\t * the question with ID specified by this property was answered 'yes' */\n\tdependsOnQuestion?: string;\n\tsubQuestions: IQuestion[];\n}\n\nexport enum FeedbackReaction {\n\tnotAnswered = 0,\n\tpositive,\n\tnegative,\n}\n\nexport type IQuestion = IQuestionBase;\n","/**\n * @copyright Copyright 2022-2023 Epic Systems Corporation\n * @file Shared state for the error card\n * @author Max Harkins\n * @module Epic.VideoApp.State.FeedbackSurvey\n */\n\nimport { buildSharedState } from \"@epic/react-redux-booster\";\nimport store from \"~/app/store\";\nimport { FeedbackPageStep, FeedbackSurveyLoadingStatus, ISurvey } from \"~/types/survey\";\n\n/// TYPES ///\n\nexport interface IFeedbackSurveyState {\n\thasShownTimeoutWarning: boolean;\n\tsurveyTimeoutTimestamp: number | null; // unix timestamp of when survey submissions become invalid. Components are responsible for handling warning\n\tfeedbackStep: FeedbackPageStep;\n\tfeedbackJWT: string | null;\n\tfeedbackSurveyQuestionnaire: ISurvey | null;\n\tfeedbackSurveyLoadingStatus: FeedbackSurveyLoadingStatus;\n}\n\n/// INIT ///\n\nexport function getInitialState(): IFeedbackSurveyState {\n\treturn {\n\t\thasShownTimeoutWarning: false,\n\t\tsurveyTimeoutTimestamp: null,\n\t\tfeedbackStep: FeedbackPageStep.hidden, // Do not show the feedback step unless specified by client configuration\n\t\tfeedbackJWT: null,\n\t\tfeedbackSurveyQuestionnaire: null,\n\t\tfeedbackSurveyLoadingStatus: FeedbackSurveyLoadingStatus.notYetLoaded,\n\t};\n}\n\n/// REDUCERS ///\nexport function setHasShownTimeoutWarning(\n\tstate: IFeedbackSurveyState,\n\thasShown: boolean,\n): IFeedbackSurveyState {\n\treturn {\n\t\t...state,\n\t\thasShownTimeoutWarning: hasShown,\n\t};\n}\n\nexport function setSurveyTimeoutTimestamp(\n\tstate: IFeedbackSurveyState,\n\ttimer: number | null,\n): IFeedbackSurveyState {\n\treturn {\n\t\t...state,\n\t\tsurveyTimeoutTimestamp: timer,\n\t};\n}\n\nexport function setFeedbackStep(state: IFeedbackSurveyState, step: FeedbackPageStep): IFeedbackSurveyState {\n\tif (state.feedbackStep === step) {\n\t\treturn state;\n\t}\n\n\tif (state.feedbackStep === FeedbackPageStep.completed || state.feedbackStep === FeedbackPageStep.hidden) {\n\t\treturn {\n\t\t\t...state,\n\t\t\tfeedbackStep: step,\n\t\t\tfeedbackJWT: null,\n\t\t};\n\t}\n\n\treturn {\n\t\t...state,\n\t\tfeedbackStep: step,\n\t};\n}\n\nexport function setFeedbackJWT(state: IFeedbackSurveyState, newJWT: string | null): IFeedbackSurveyState {\n\t// Always clear out the JWT once the survey has reached the completed or hidden state\n\tif (state.feedbackStep === FeedbackPageStep.completed || state.feedbackStep === FeedbackPageStep.hidden) {\n\t\treturn { ...state, feedbackJWT: null };\n\t}\n\n\treturn { ...state, feedbackJWT: newJWT };\n}\n\nexport function setFeedbackSurveyQuestionnaire(\n\tstate: IFeedbackSurveyState,\n\tsurvey: ISurvey,\n): IFeedbackSurveyState {\n\treturn {\n\t\t...state,\n\t\tfeedbackSurveyQuestionnaire: survey,\n\t\tfeedbackSurveyLoadingStatus: FeedbackSurveyLoadingStatus.successfullyLoaded,\n\t};\n}\n\nexport function setFeedbackLoadingState(\n\tstate: IFeedbackSurveyState,\n\tloadingStatus: FeedbackSurveyLoadingStatus,\n): IFeedbackSurveyState {\n\treturn {\n\t\t...state,\n\t\tfeedbackSurveyLoadingStatus: loadingStatus,\n\t};\n}\n\n/// SELECTORS ///\n\nfunction getHasShownTimeoutWarning(state: IFeedbackSurveyState): boolean {\n\treturn state.hasShownTimeoutWarning;\n}\n\nfunction getSurveyTimeoutTimestamp(state: IFeedbackSurveyState): number | null {\n\treturn state.surveyTimeoutTimestamp;\n}\n\nfunction getFeedbackStep(state: IFeedbackSurveyState): FeedbackPageStep {\n\treturn state.feedbackStep;\n}\n\nfunction getFeedbackJWT(state: IFeedbackSurveyState): string | null {\n\treturn state.feedbackJWT;\n}\n\nfunction getFeedbackSurveyQuestionnaire(state: IFeedbackSurveyState): ISurvey | null {\n\treturn state.feedbackSurveyQuestionnaire;\n}\n\nfunction getFeedbackSurveyLoadingStatus(state: IFeedbackSurveyState): FeedbackSurveyLoadingStatus {\n\treturn state.feedbackSurveyLoadingStatus;\n}\n\n/// BUILD IT ///\n\nconst builtState = buildSharedState({\n\tinit: getInitialState,\n\treducers: {\n\t\tsetHasShownTimeoutWarning,\n\t\tsetSurveyTimeoutTimestamp,\n\t\tsetFeedbackStep,\n\t\tsetFeedbackJWT,\n\t\tsetFeedbackSurveyQuestionnaire,\n\t\tsetFeedbackLoadingState,\n\t},\n\tselectors: {\n\t\tgetHasShownTimeoutWarning,\n\t\tgetSurveyTimeoutTimestamp,\n\t\tgetFeedbackStep,\n\t\tgetFeedbackJWT,\n\t\tgetFeedbackSurveyQuestionnaire,\n\t\tgetFeedbackSurveyLoadingStatus,\n\t},\n});\n\nstore.addSharedState(builtState.sharedState, \"feedbackSurvey\");\n\nexport const {\n\tactionCreators: feedbackSurveyActions,\n\tuseSharedState: useFeedbackSurveyState,\n\tsharedState: state,\n} = builtState;\n","/**\n * @copyright Copyright 2021-2023 Epic Systems Corporation\n * @file Utility to validate and sanitize user text input\n * @author Razi Rais\n * @module Epic.VideoApp.Utils.Text\n */\n\n/**\n * @param input The user's text input to sanitize\n * @param maxInputLength The maximum number of characters that the input can contain\n * @param supportedCharacters The characters which should be kept in the output - win1252 as default\n * @returns Text input with instances of possible code injection, unsupported characters, and extra whitespace removed\n */\nexport function sanitizeInputForCharSet(\n\tinput: string,\n\tmaxInputLength: number,\n\tsupportedCharacters?: SupportedCharacters,\n): string {\n\treturn sanitizeInputHelper(input, maxInputLength, supportedCharacters ?? \"win1252\");\n}\n\n/**\n * @param input The user's text input to partially sanitize\n * @param maxInputLength The maximum number of characters that the input can contain\n * @returns Text input with instances of possible code injection and extra whitespace removed.\n */\nexport function sanitizeInput(input: string, maxInputLength: number): string {\n\treturn sanitizeInputHelper(input, maxInputLength);\n}\n\n/**\n * Helper function\n * @param input The user's text input to sanitize\n * @param maxInputLength The maximum number of characters that the input can contain\n * @param supportedCharacters The characters which should be kept in the output, if specified\n * @returns Text input with instances of possible code injection, extra whitespace, and unsupported characters (if specified) removed\n */\nfunction sanitizeInputHelper(\n\tinput: string,\n\tmaxInputLength: number,\n\tsupportedCharacters?: SupportedCharacters,\n): string {\n\tlet sanitizedInput = escapeMarkup(input);\n\tif (supportedCharacters) {\n\t\tconst isSupported = (input: string): boolean => {\n\t\t\treturn isSupportedCharacters(input, supportedCharacters);\n\t\t};\n\t\tsanitizedInput = sanitizedInput.split(\"\").filter(isSupported).join(\"\");\n\t}\n\treturn truncateInput(sanitizedInput, maxInputLength);\n}\n\n/**\n * Parses a string by\n * - breaking XML by adding a space between angle bracket and the following letter or control character\n * - eliminate sequences of &# in user input to avoid the user encoding something in HTML\n * Based on MyChart's implementation of parseString (https://codesearch/Default.aspx?view=search/client#a=xmlCharRegExp&versionid=1&name=PatientEngagement%5CPackages%5Cclient-sdk%5Csrc%5Cform%5Capi%5Cparsers%5Cparse-string.ts)\n * @param input the string to parse.\n * @returns the parsed string value.\n */\nfunction escapeMarkup(input: string): string {\n\tconst xmlCharRegExp = /<([A-Za-z/])/gm;\n\tconst xmlReplacementValue = \"< $1\";\n\n\tconst htmlElementRegExp = /&#/gm;\n\tconst htmlReplacementValue = \"& #\";\n\n\t//breaks XML by adding a space between angle bracket and the following letter or control character\n\tlet newInput = input.replace(xmlCharRegExp, xmlReplacementValue);\n\t//eliminate sequences of &# in user input to avoid the user encoding something in HTML\n\tnewInput = newInput.replace(htmlElementRegExp, htmlReplacementValue);\n\n\treturn newInput;\n}\n\n/**\n * @param input The user's text input to check.\n * @param supportedCharacters The characters that should be allowed, or win1252 by default.\n * @returns A string of all unsupported characters in the given input.\n */\nexport function getUnsupportedCharacters(input: string, supportedCharacters?: SupportedCharacters): string {\n\tif (supportedCharacters === \"all\") {\n\t\treturn \"\";\n\t}\n\n\treturn Array.from(input)\n\t\t.filter((char) => !isSupportedCharacters(char, supportedCharacters))\n\t\t.join(\", \");\n}\n\n/**\n * @param input The user's text input to check.\n * @param supportedCharacters The characters that should be allowed, or win1252 by default.\n * @returns True if the input is supported by the given character set.\n */\nexport function isSupportedCharacters(input: string, supportedCharacters?: SupportedCharacters): boolean {\n\tif (input.length === 0) {\n\t\treturn true;\n\t}\n\n\tif (supportedCharacters === \"all\") {\n\t\t// never allow breaking control characters to be included in input.\n\t\tconst result = new RegExp(badControlRegEx).test(input);\n\t\treturn !result;\n\t}\n\t// default assumes that supportedCharacters = win1252\n\tconst result = new RegExp(win1252RegEx).test(input);\n\treturn result;\n}\n\n// https://en.wikipedia.org/wiki/List_of_Unicode_characters\n// windows-1252 and non-control characters\nconst win1252RegEx =\n\t\"^[\" +\n\t\"\\\\x09\\\\x0A\\\\x0D\" +\n\t\"\\\\x20-\\\\x7E\" +\n\t\"\\\\xA0-\\\\xFF\" +\n\t\"\\\\u0152\\\\u0153\\\\u0160\\\\u0161\\\\u0178\\\\u017D\\\\u017E\\\\u0192\\\\u02C6\\\\u02DC\\\\u2013\\\\u2014\\\\u2018-\\\\u201A\" +\n\t\"\\\\u201C-\\\\u201E\\\\u2020-\\\\u2022\\\\u2026\\\\u2030\\\\u2039\\\\u203A\\\\u20AC\\\\u2122\" +\n\t\"]*$\";\n\nconst badControlRegEx = \"^[\\\\x00-\\\\x08\\\\x0B\\\\x0C\\\\x0E-\\\\x0F]*$\";\n\nexport type SupportedCharacters = \"win1252\" | \"all\";\n\n/**\n * @param input Text input\n * @param maxInputLength The maximum number of characters that the input can contain\n * @returns Text input that has been shortened to the specified max length\n */\nexport function truncateInput(input: string, maxInputLength: number): string {\n\tif (input.length <= maxInputLength) {\n\t\treturn input;\n\t}\n\n\treturn input.slice(0, maxInputLength);\n}\n\n/**\n * Formats a string to capitalize the first letter\n * @param string\n * @returns string with first letter capitalized\n */\nexport function capitalizeFirstLetter(string: string): string {\n\treturn string.charAt(0).toUpperCase() + string.slice(1);\n}\n","/**\n * @copyright Copyright 2020-2021 Epic Systems Corporation\n * @file Shared state for the call room info\n * @author Spencer Eanes\n * @module Epic.VideoApp.State.Room\n */\n\nimport { buildSharedState } from \"@epic/react-redux-booster\";\nimport { Room } from \"twilio-video\";\nimport store from \"~/app/store\";\nimport { DisplayNameInputMaxLength, EpicUserType, ICallRoomInfo, IParticipantInfo } from \"~/types\";\nimport { sanitizeInput } from \"~/utils/text\";\nimport { VideoVendor } from \"~/web-core/types\";\n\n/// TYPES ///\n\nexport interface IParticipantRequest {\n\tidentity: string;\n\taudio: boolean;\n\tvideo: boolean;\n\tscreenShare: boolean;\n}\n\nexport interface IRoomState {\n\treadonly roomInfo: ICallRoomInfo | null;\n\treadonly patientName: string | null;\n\treadonly conferenceDateIso: string | null;\n\treadonly canConnect: boolean;\n\treadonly isConnecting: boolean;\n\treadonly isDisconnecting: boolean;\n\treadonly participantInfo: IParticipantInfo[];\n\treadonly localDisplayName: string;\n\treadonly lowBandwidthMode: boolean;\n\treadonly waitingRoomUrl: string;\n\treadonly clientLoggingInterval: number; //interval in seconds\n\treadonly debuggingLogLevel: DebuggingLogLevel;\n\treadonly shouldCheckBrowserCompatibility: boolean; //if we should disable virtual backgrounds depending on browser version\n\treadonly videoVendor: VideoVendor;\n\treadonly isConferenceTimeEstimate: boolean;\n}\n\nexport enum DebuggingLogLevel {\n\tnone = 0,\n\tlow = 1,\n\tverbose = 2,\n}\n\n/// INIT ///\n\nexport function getInitialState(isDisconnecting: boolean = false, state?: IRoomState): IRoomState {\n\treturn {\n\t\troomInfo: null,\n\t\tpatientName: null,\n\t\tconferenceDateIso: null,\n\t\tcanConnect: false,\n\t\tisConnecting: false,\n\t\tisDisconnecting,\n\t\tparticipantInfo: [],\n\t\tlocalDisplayName: \"\",\n\t\tlowBandwidthMode: false,\n\t\twaitingRoomUrl: \"\",\n\t\tclientLoggingInterval: -1,\n\t\tdebuggingLogLevel: DebuggingLogLevel.none,\n\t\tshouldCheckBrowserCompatibility: false,\n\t\t// Preserve the vendor when disconnecting to drive certain post-call workflows (like user feedback survey)\n\t\tvideoVendor: isDisconnecting && state ? state.videoVendor : VideoVendor.unknown,\n\t\tisConferenceTimeEstimate: false,\n\t};\n}\n\n/// REDUCERS ///\n\nfunction setRoomInfo(state: IRoomState, updateState: ICallRoomInfo): IRoomState {\n\tconst newState = {\n\t\t...state,\n\t\troomInfo: updateState,\n\t};\n\treturn newState;\n}\n\nexport function setVisitInfo(\n\tstate: IRoomState,\n\tupdateState: { patientName: string; conferenceDateIso: string },\n): IRoomState {\n\treturn {\n\t\t...state,\n\t\tpatientName: updateState.patientName,\n\t\tconferenceDateIso: updateState.conferenceDateIso,\n\t};\n}\n\nfunction setRoom(state: IRoomState, newRoom: Room): IRoomState {\n\tconst newState = {\n\t\t...state,\n\t\troom: newRoom,\n\t};\n\treturn newState;\n}\n\nexport function setParticipantInfo(state: IRoomState, info: IParticipantInfo): IRoomState {\n\tif (!info.identity) {\n\t\treturn state;\n\t}\n\t// Attempt to remove any previous participant info for the current user before adding info\n\tconst newState = clearParticipantInfo(state, info.identity);\n\tnewState.participantInfo.push(info);\n\n\treturn newState;\n}\n\nexport function clearParticipantInfo(state: IRoomState, identity: string): IRoomState {\n\tconst newInfo = state.participantInfo.filter((entry: IParticipantInfo) => entry.identity !== identity);\n\treturn { ...state, participantInfo: newInfo };\n}\n\nexport function setCanConnect(state: IRoomState): IRoomState {\n\treturn { ...state, canConnect: true };\n}\n\nfunction setLocalDisplayName(state: IRoomState, name: string | null): IRoomState {\n\tconst newState = {\n\t\t...state,\n\t\tlocalDisplayName: sanitizeInput(name?.trim() ?? \"\", DisplayNameInputMaxLength),\n\t};\n\treturn newState;\n}\n\nfunction setIsConnecting(state: IRoomState, connecting: boolean): IRoomState {\n\tconst newState = {\n\t\t...state,\n\t\tisConnecting: connecting,\n\t};\n\treturn newState;\n}\n\nfunction setIsDisconnecting(state: IRoomState, disconnecting: boolean): IRoomState {\n\tconst newState = {\n\t\t...state,\n\t\tisDisconnecting: disconnecting,\n\t};\n\treturn newState;\n}\n\nexport function setLowBandwidth(state: IRoomState, newValue: boolean): IRoomState {\n\treturn { ...state, lowBandwidthMode: newValue };\n}\n\nexport function setShouldCheckBrowserCompatibility(state: IRoomState, newValue: boolean): IRoomState {\n\treturn { ...state, shouldCheckBrowserCompatibility: newValue };\n}\n\nexport function setWaitingRoomUrl(state: IRoomState, newValue: string): IRoomState {\n\treturn { ...state, waitingRoomUrl: newValue };\n}\n\nfunction setClientLoggingInterval(state: IRoomState, interval: number): IRoomState {\n\treturn { ...state, clientLoggingInterval: interval };\n}\n\nfunction setDebuggingLogLevel(state: IRoomState, logLevel: DebuggingLogLevel): IRoomState {\n\treturn { ...state, debuggingLogLevel: logLevel };\n}\n\nexport function setVendor(state: IRoomState, vendor: VideoVendor): IRoomState {\n\treturn { ...state, videoVendor: vendor };\n}\n\nexport function setIsConferenceTimeEstimate(\n\tstate: IRoomState,\n\tisConferenceTimeEstimate: boolean,\n): IRoomState {\n\treturn state.isConferenceTimeEstimate === isConferenceTimeEstimate\n\t\t? state\n\t\t: { ...state, isConferenceTimeEstimate: isConferenceTimeEstimate };\n}\n\n/// SELECTORS ///\n\nfunction getPatientName(state: IRoomState): string | null {\n\treturn state.patientName;\n}\n\nfunction getConferenceDateIso(state: IRoomState): string | null {\n\treturn state.conferenceDateIso;\n}\n\nfunction getCanConnect(state: IRoomState): boolean {\n\treturn state.canConnect;\n}\n\nfunction getIsConnecting(state: IRoomState): boolean {\n\treturn state.isConnecting;\n}\n\nfunction getIsDisconnecting(state: IRoomState): boolean {\n\treturn state.isDisconnecting;\n}\n\nfunction getParticipantInfo(state: IRoomState, identity: string): IParticipantInfo | undefined {\n\treturn state.participantInfo.find((participant) => participant.identity === identity);\n}\n\nfunction getParticipantsInWaitingRoom(state: IRoomState): string[] {\n\treturn state.participantInfo.filter((participant) => participant.inWaitingRoom).map((p) => p.identity);\n}\n\nfunction getParticipantModerationLocks(\n\tstate: IRoomState,\n\tidentity: string,\n): { audio: boolean; video: boolean; screenShare: boolean } {\n\tconst current = state.participantInfo.find((participant) => participant.identity === identity);\n\treturn {\n\t\tvideo: current?.cameraLocked || false,\n\t\taudio: current?.micLocked || false,\n\t\tscreenShare: current?.screenShareLocked || false,\n\t};\n}\n\nfunction getAllParticipantNames(state: IRoomState): Record {\n\tconst names: Record = {};\n\tstate.participantInfo.forEach((info) => {\n\t\tnames[info.identity] = info.displayName;\n\t});\n\treturn names;\n}\n\nfunction getAllParticipantsByType(state: IRoomState, types: EpicUserType[]): string[] {\n\tif (!types || types.length < 1) {\n\t\treturn [];\n\t}\n\n\treturn state.participantInfo\n\t\t.filter((current) => types.includes(current.userType))\n\t\t.map((user) => user.identity);\n}\n\nfunction getAllParticipantInfo(state: IRoomState): IParticipantInfo[] {\n\treturn state.participantInfo;\n}\n\nfunction getLocalDisplayName(state: IRoomState): string {\n\treturn state.localDisplayName;\n}\n\nfunction getIsLowBandwidthMode(state: IRoomState): boolean {\n\treturn state.lowBandwidthMode;\n}\n\nfunction getShouldCheckBrowserCompatibility(state: IRoomState): boolean {\n\treturn state.shouldCheckBrowserCompatibility;\n}\n\nfunction getWaitingRoomUrl(state: IRoomState): string {\n\treturn state.waitingRoomUrl;\n}\n\nfunction getClientLoggingInterval(state: IRoomState): number {\n\treturn state.clientLoggingInterval;\n}\n\nfunction getDebuggingLogLevel(state: IRoomState): DebuggingLogLevel {\n\treturn state.debuggingLogLevel;\n}\n\nfunction getRemoteUserType(state: IRoomState, identity: string): EpicUserType {\n\treturn (\n\t\tstate.participantInfo.find((participant) => participant.identity === identity)?.userType ||\n\t\tEpicUserType.unknown\n\t);\n}\n\nfunction getVendor(state: IRoomState): VideoVendor {\n\treturn state.videoVendor;\n}\n\nfunction getIsConferenceTimeEstimate(state: IRoomState): boolean {\n\treturn state.isConferenceTimeEstimate;\n}\n\n/// BUILD IT ///\n\nconst builtState = buildSharedState({\n\tinit: getInitialState,\n\treducers: {\n\t\tsetRoomInfo,\n\t\tsetVisitInfo,\n\t\tsetRoom,\n\t\tsetIsConnecting,\n\t\tsetIsDisconnecting,\n\t\tsetLocalDisplayName,\n\t\tsetClientLoggingInterval,\n\t\tsetDebuggingLogLevel,\n\t\tsetLowBandwidth,\n\t\tsetWaitingRoomUrl,\n\t\tsetShouldCheckBrowserCompatibility,\n\t\tclearParticipantInfo,\n\t\tsetIsConferenceTimeEstimate,\n\t},\n\tselectors: {\n\t\tgetPatientName,\n\t\tgetConferenceDateIso,\n\t\tgetCanConnect,\n\t\tgetIsConnecting,\n\t\tgetIsDisconnecting,\n\t\tgetParticipantInfo,\n\t\tgetAllParticipantNames,\n\t\tgetLocalDisplayName,\n\t\tgetAllParticipantsByType,\n\t\tgetAllParticipantInfo,\n\t\tgetParticipantModerationLocks,\n\t\tgetIsLowBandwidthMode,\n\t\tgetWaitingRoomUrl,\n\t\tgetClientLoggingInterval,\n\t\tgetDebuggingLogLevel,\n\t\tgetRemoteUserType,\n\t\tgetShouldCheckBrowserCompatibility,\n\t\tgetParticipantsInWaitingRoom,\n\t\tgetVendor,\n\t\tgetIsConferenceTimeEstimate,\n\t},\n});\n\nstore.addSharedState(builtState.sharedState, \"room\");\n\nexport const { actionCreators: roomActions, useSharedState: useRoomState, sharedState: state } = builtState;\n","/**\n * @copyright Copyright 2020-2023 Epic Systems Corporation\n * @file Utilities for managing browser cookies\n * @author Colin Walters\n * @module Epic.VideoApp.Utils.Cookies\n */\n\n// keys used by sessionSpecificCookies are defined here to avoid circular dependency\nexport const jwtCookieKey = \"jwt-\";\nexport const jwtHardwareTestCookieKey = \"tst-jwt-\";\nexport const jwtExpirationCookieKey = \"expire-jwt-\";\nexport const jwtHasRefreshCookieKey = \"has-refresh-\";\nexport const preferencesCookieKey = \"preferences-\";\nexport const sessionStatusCookieKey = \"session-\";\nexport const clientLoggingCookieKey = \"loggingConfig\";\nexport const configurationCookieKey = \"configuration-\";\n\n// non-session specific cookie keys\nexport const recentLanguageKey = \"recentLanguage\";\n\n// grouping of all cookies that belong to a specific session, used to clear cookies from a different session\n// ensure no key is a prefix of another key (i.e. 'jwt-' is a prefix of 'jwt-expire-' which caused issues when checking session association)\nconst SESSION_SPECIFIC_COOKIES = [\n\tjwtCookieKey,\n\tjwtExpirationCookieKey,\n\tjwtHasRefreshCookieKey,\n\tjwtHardwareTestCookieKey,\n\tpreferencesCookieKey,\n\tsessionStatusCookieKey,\n\tconfigurationCookieKey,\n];\n\ninterface ICookieParams {\n\t[key: string]: string | boolean | undefined; // indexer key necessary to allow iterating over params\n\tpath: string;\n\tsecure?: boolean;\n\texpires?: string;\n}\n\n/**\n * Get standard parameters for a cookie\n * @param expiresIn number of milliseconds before a cookie should expire, or nothing if there is no set expiration\n * @returns parameters used to create a cookie\n */\nfunction getCookieParams(expiresIn?: number): ICookieParams {\n\tconst cookieParams: ICookieParams = { path: \"/\" };\n\tif (process.env.NODE_ENV !== \"development\") {\n\t\tcookieParams.secure = true;\n\t}\n\tif (expiresIn !== undefined) {\n\t\tconst expirationInstant = Date.now() + expiresIn;\n\t\tcookieParams.expires = new Date(expirationInstant).toUTCString();\n\t}\n\treturn cookieParams;\n}\n\n/**\n * Set a browser cookie\n * @param key cookie key\n * @param value value to set into cookie\n * @param expiresIn number of milliseconds before a cookie should expire, or nothing if there is no set expiration\n */\nexport function setCookie(key: string, value: string, expiresIn?: number): void {\n\tlet cookie = `${key}=${encodeURIComponent(value)}`;\n\n\tconst params = getCookieParams(expiresIn);\n\n\tObject.keys(params).forEach((paramKey) => {\n\t\tconst paramVal = params[paramKey];\n\t\tif (paramVal === undefined) {\n\t\t\treturn;\n\t\t}\n\t\tconst paramString = typeof paramVal === \"string\" ? paramVal : paramVal.toString();\n\t\tcookie += `; ${paramKey}=${paramString}`;\n\t});\n\n\tdocument.cookie = cookie;\n}\n\n/**\n * Expires a cookie immediately\n * @param key Key of the cookie to expire\n */\nexport function expireCookie(key: string): void {\n\tsetCookie(key, \"\", 0);\n}\n\n/**\n * Get a the value of a cookie from the browser\n * @param key cookie key\n * @returns the value of the cookie from the browser\n */\nexport function getCookie(key: string): string {\n\tif (!key) {\n\t\treturn \"\";\n\t}\n\tconst cookie = decodeURIComponent(document.cookie);\n\n\t// Get matches of \"{key}={}\" that occur at either the start of the\n\t// string (^) or after a semi-colon followed by some number of white space characters (;\\s*).\n\t// The \\s* after between {key} and = will catch 0 or more whitespace characters as the = can be\n\t// surrounded by whitespace (per https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie#syntax)\n\tconst regExp = new RegExp(`(^|;\\\\s*)${key}\\\\s*=[^;]*`);\n\tconst matches = regExp.exec(cookie);\n\n\tif (matches?.length) {\n\t\t// the value of the cookie is everything after the first \"=\" but trim any whitespace\n\t\t// the user key in \"preferences-\" is an encrypted value and ends in \"=\", so we\n\t\t// we can't just return matches[0].split(\"=\")[1]\n\t\tconst [, ...value] = matches[0].split(\"=\");\n\t\treturn value.join(\"=\").trim();\n\t}\n\treturn \"\";\n}\n\n/**\n * Removes any lingering cookies associated with other sessions\n * For now, only clears other JWTs, since the only other session-specific cookie is the one used to tell that session it should close\n * And the JWT cookies are the only ones that cause problems if they persist\n * @param sessionKey Current session id\n */\nexport function expireNonSessionCookies(sessionKey: string): void {\n\tconst cookies = document.cookie.split(\"; \");\n\tconst keys = cookies.map((cookie) => cookie.split(\"=\")[0]);\n\n\tfor (const key of keys) {\n\t\tif (cookieBelongsToAnotherSession(key, sessionKey)) {\n\t\t\texpireCookie(key);\n\t\t}\n\t}\n}\n\n/**\n * Determine if a cookie is session specific, but belongs to a session other than the current one\n * @param key cookie key\n * @param sessionKey current session ID\n * @returns true if the cookie is session specific and belongs to a different session\n */\nfunction cookieBelongsToAnotherSession(key: string, sessionKey: string): boolean {\n\tif (!key) {\n\t\treturn false;\n\t}\n\n\tfor (const prefix of SESSION_SPECIFIC_COOKIES) {\n\t\tif (key.startsWith(prefix) && key.substring(prefix.length) !== sessionKey) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file Logging utilities\n * @author Colin Walters\n * @module Epic.VideoApp.Utils.Logging\n */\n\nimport { IAction } from \"@epic/react-redux-booster\";\nimport { Logger } from \"twilio-video\";\nimport { DebuggingLogLevel, roomActions } from \"~/state/room\";\nimport { IClientLoggingConfig, LogTargetFile } from \"~/types\";\nimport { clientLoggingCookieKey, expireCookie, getCookie, setCookie } from \"./cookies\";\nimport { hoursToMs } from \"./dateTime\";\nimport { isDevEnvironment, stringToBuffer } from \"./general\";\nimport { makeRequest } from \"./request\";\n\ninterface ISaveLogsResponse {\n\tsuccess: boolean;\n}\n\nlet debuggingLogLevel = DebuggingLogLevel.none;\nlet needsFlush = false;\nconst LOGS: string[] = [];\nconst webRtcInternals: string[] = [];\ntype LogSource = \"Twilio\" | \"EVC\";\nconst DELIMITER = \"\\r\\n\";\n\n/**\n * Output a message to the console only when running in development mode, and log to the client logging if necessary\n *\n * @export\n * @param message The message to output\n * @param optionalParams Additional objects to output\n */\nexport function debug(message?: unknown, ...optionalParams: unknown[]): void {\n\taddLogEntryBase(\"EVC\", \"debug\", false, [new Date().toISOString(), message, ...optionalParams]);\n}\n\n/**\n * Output a message to the console, and log to the client logging if necessary\n *\n * @export\n * @param message The message to output\n * @param optionalParams Additional objects to output\n */\nexport function log(message?: unknown, ...optionalParams: unknown[]): void {\n\taddLogEntryBase(\"EVC\", \"info\", false, [new Date().toISOString(), message, ...optionalParams]);\n}\n\n/**\n * Output a warning to the console, and log to the client logging if necessary\n *\n * @export\n * @param message The message to output\n * @param optionalParams Additional objects to output\n */\nexport function warn(message?: unknown, ...optionalParams: unknown[]): void {\n\taddLogEntryBase(\"EVC\", \"warn\", false, [new Date().toISOString(), message, ...optionalParams]);\n}\n\n/**\n * Output a message to the console only when running in development mode, and log to the client logging if necessary, but don't force the client logging to flush\n *\n * @export\n * @param message The message to output\n * @param optionalParams Additional objects to output\n */\nexport function debugNoFlush(message?: unknown, ...optionalParams: unknown[]): void {\n\taddLogEntryBase(\"EVC\", \"debug\", true, [new Date().toISOString(), message, ...optionalParams]);\n}\n\n/**\n * Configure the Twilio logger\n */\nexport function configureClientLogging(\n\tdispatch: (action: T) => T,\n\tloggingConfig?: IClientLoggingConfig,\n): void {\n\tconst logger = Logger.getLogger(\"twilio-video\");\n\n\tlogger.methodFactory = () => {\n\t\treturn (...infoToLog: any[]) => addTwilioLogEntry(...infoToLog);\n\t};\n\n\tif (!loggingConfig || loggingConfig.logLevel === null) {\n\t\tlogger.setLevel(\"warn\");\n\t\texpireCookie(clientLoggingCookieKey);\n\t\treturn;\n\t}\n\n\tstoreDebugSettingsInCookie(loggingConfig);\n\n\tif (loggingConfig.logLevel === \"debug\" || loggingConfig.logLevel === \"DEBUG\") {\n\t\tdebuggingLogLevel = DebuggingLogLevel.verbose;\n\t} else {\n\t\tdebuggingLogLevel = DebuggingLogLevel.low;\n\t}\n\n\tconst { logLevel, interval } = loggingConfig;\n\n\t// set this to a low level of logging, addTwilioLogEntry will prevent anything\n\t// lower than \"warn\" from being logged to the console\n\tlogger.setLevel(logLevel ?? \"info\");\n\n\t// set the logging interval in shared state\n\tdispatch(roomActions.setClientLoggingInterval(interval));\n\tdispatch(roomActions.setDebuggingLogLevel(debuggingLogLevel));\n}\n\n/**\n * Send webRtc logs to the server to be saved in azure blob\n * @param jwt the JWT of the current session\n * @param data string of webRtc internals data\n */\nexport async function saveWebRtcLogs(jwt: string, data: string): Promise {\n\tif (debuggingLogLevel !== DebuggingLogLevel.verbose) {\n\t\treturn;\n\t}\n\twebRtcInternals.push(data);\n\tconst success = await saveLogs(jwt, webRtcInternals, LogTargetFile.webRTCLogs);\n\n\tif (success) {\n\t\twebRtcInternals.splice(0);\n\t} else if (webRtcInternals.length > 4) {\n\t\t// make sure the local array doesn't get large enough that there are performance concerns\n\t\twebRtcInternals.shift();\n\t}\n}\n\n/**\n * Add a log entry\n * @param {LogSource} source the source of the log entry\n * @param {string} logLevel the importance of this log entry\n * @param {boolean} noFlush If this data does not need be logged to the server immediately\n * @param {any[]} infoToLog all of the information that should be included in the entry\n */\nfunction addLogEntryBase(source: LogSource, logLevel: string, noFlush: boolean, ...infoToLog: any[]): void {\n\tconst logLevelLowerCase = logLevel.toLowerCase();\n\tlet otherLogLevel = false;\n\tswitch (logLevelLowerCase) {\n\t\tcase \"debug\":\n\t\t\tif (debuggingLogLevel === DebuggingLogLevel.verbose || isDevEnvironment()) {\n\t\t\t\tconsole.debug(infoToLog);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"warn\":\n\t\t\tconsole.warn(infoToLog);\n\t\t\tbreak;\n\t\tcase \"error\":\n\t\t\tconsole.error(infoToLog);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\totherLogLevel = true;\n\t\t\tbreak;\n\t}\n\tif (debuggingLogLevel === DebuggingLogLevel.none) {\n\t\treturn;\n\t}\n\tif (otherLogLevel) {\n\t\tconsole.log(infoToLog);\n\t}\n\tif (debuggingLogLevel === DebuggingLogLevel.low && logLevelLowerCase === \"debug\") {\n\t\treturn;\n\t}\n\tLOGS.push(`${source} (${logLevel}): ` + infoToLog.map(convertLogInfoToString).join(\" \"));\n\tif (!noFlush) {\n\t\tneedsFlush = true;\n\t}\n}\n\n/**\n * Figures out how to safely convert a log entry to a string\n * @param data array of strings to combine\n * @param delimiter delimiter\n * @returns string delimited and post-fixed with delimiter, or the empty string if the array is empty\n */\nfunction stringArrayToDelimitedString(data: string[], delimiter: string): string {\n\tif (data.length < 1) {\n\t\treturn \"\";\n\t}\n\treturn data.join(delimiter) + delimiter;\n}\n\n/**\n * Figures out how to safely convert a log entry to a string\n * @param {any} entry the entry to attempt to stringify\n */\nfunction convertLogInfoToString(entry: any): string {\n\tif (typeof entry === \"object\") {\n\t\ttry {\n\t\t\treturn JSON.stringify(entry, (key, value) => {\n\t\t\t\tif (key.substring(0, 7) === \"__react\") {\n\t\t\t\t\treturn `${(entry as HTMLElement).nodeName}#${(entry as HTMLElement).id}`;\n\t\t\t\t}\n\t\t\t\tif (key !== \"\" && typeof value === \"object\" && entry === value) {\n\t\t\t\t\treturn \"[Circular]\";\n\t\t\t\t}\n\t\t\t\treturn value; // eslint-disable-line @typescript-eslint/no-unsafe-return\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tconsole.log(error);\n\t\t\treturn \"[object serialization error]\";\n\t\t}\n\t}\n\tif (typeof entry === \"string\") {\n\t\treturn entry;\n\t}\n\treturn entry.toString(); // eslint-disable-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call\n}\n\n/**\n * Add a log entry from Twilio's logger to our log entries for the call\n * @param {Log.LoggingMethod} originalLogger function to perform Twilio's default logging to the console\n * @param {any[]} infoToLog array of information that should be logged, based on docs this data should be [dateTimeIso, logLevel, component, message, data]\n */\nfunction addTwilioLogEntry(...infoToLog: any[]): void {\n\tconst infoForInternalLogs = infoToLog.slice();\n\tconst [logLevel] = infoForInternalLogs.splice(1, 1); // eslint-disable-line @typescript-eslint/no-unsafe-assignment\n\n\tif (typeof logLevel !== \"string\") {\n\t\treturn;\n\t}\n\n\t// Twilio VideoProcessor object breaks JSON.stringify due to the length of string produced, so make sure we don't include those objects to log\n\t// Filter out unnecessary processor data; looping through and deleting all \"processor\" properties or checking object size is too expensive, causing freezes\n\t// Mentioned at https://github.com/twilio/twilio-video-processors.js/issues/27\n\t// Ideally this code can be removed once the issue has been resolved.\n\tif (typeof infoForInternalLogs[2] === \"string\") {\n\t\tconst message = infoForInternalLogs[2];\n\t\tif (\n\t\t\tmessage.includes(\"VideoProcessor\") ||\n\t\t\tmessage.includes(\"Options\") ||\n\t\t\tmessage.includes(\"LocalTracks\") ||\n\t\t\tmessage.includes(\"VideoTrack\") ||\n\t\t\tmessage.includes(\"Room\")\n\t\t) {\n\t\t\t// Splices data since we've already spliced out the logLevel\n\t\t\tinfoForInternalLogs.splice(3, 3);\n\t\t}\n\t}\n\n\taddLogEntryBase(\"Twilio\", logLevel, false, ...infoForInternalLogs);\n}\n\n/**\n * Add a custom log entry\n * @param {string} logLevel the importance of this log entry\n * @param {any[]} infoToLog array of information that should be logged\n */\nexport function addLogEntry(logLevel: string, ...infoToLog: any[]): void {\n\taddLogEntryBase(\"EVC\", logLevel, false, ...infoToLog);\n}\n\n/**\n * Get the accumulated log entries\n * @returns {string[]} the log entries that have been accumulated since the last call\n */\nfunction getLogEntries(): string[] {\n\treturn LOGS.splice(0);\n}\n\n/**\n * Save any client logs that have been stored since the last call\n * @param jwt the JWT of the current session\n */\nexport async function saveClientLogs(jwt: string): Promise {\n\tif (!needsFlush) {\n\t\treturn true;\n\t}\n\treturn saveLogs(jwt, getLogEntries(), LogTargetFile.clientLogs);\n}\n\n/**\n * Send logEntries to the server, indicating if they are webRtcData or client logs data\n * @param jwt the JWT of the current session\n * @param logEntries string array of log data to be saved\n * @param logTarget target file for log entries\n */\nasync function saveLogs(jwt: string, logEntries: string[], logTarget: LogTargetFile): Promise {\n\tif (logEntries.length < 1) {\n\t\treturn true;\n\t}\n\tif (logTarget === LogTargetFile.clientLogs) {\n\t\tneedsFlush = false;\n\t}\n\n\tconst stringDelimitedData = stringArrayToDelimitedString(logEntries, DELIMITER);\n\n\ttry {\n\t\tconst response = await makeRequest(\n\t\t\t\"/api/Debug/LogDebugData\",\n\t\t\t\"POST\",\n\t\t\tjwt,\n\t\t\tstringToBuffer(stringDelimitedData),\n\t\t\t{\n\t\t\t\tqueryStringData: { logTarget },\n\t\t\t\tcontentType: \"application/octet-stream\",\n\t\t\t},\n\t\t);\n\t\treturn response.success;\n\t} catch {\n\t\t// makeRequest will handle logging the API error, add another entry for how many entries failed\n\t\taddLogEntry(\"warn\", `Error logging last ${logEntries.length} entries`);\n\t\tLOGS.unshift(...logEntries);\n\t\treturn false;\n\t}\n}\n\n/**\n * Stores debug settings in a cookie to persist after refresh\n * @param {IClientLoggingConfig} loggingConfig the config to store\n */\nexport function storeDebugSettingsInCookie(loggingConfig: IClientLoggingConfig): void {\n\tsetCookie(clientLoggingCookieKey, JSON.stringify(loggingConfig), hoursToMs(4));\n}\n\n/**\n * Loads debug settings from a cookie after refresh\n * @returns {IClientLoggingConfig} the config that was stored\n */\nexport function getDebugSettingsFromCookie(): IClientLoggingConfig | undefined {\n\tconst loggingConfig = getCookie(clientLoggingCookieKey);\n\tif (loggingConfig) {\n\t\treturn JSON.parse(loggingConfig) as IClientLoggingConfig;\n\t}\n\treturn undefined;\n}\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file wrapper around fetch for common patterns\n * @author Colin Walters\n * @module Epic.VideoApp.Utils.Request\n */\n\nimport { makeLink } from \"./general\";\nimport { addLogEntry, debug, debugNoFlush } from \"./logging\";\n\ntype Method = \"GET\" | \"POST\";\ntype ContentType = \"application/octet-stream\" | \"image/png\" | \"application/json\";\n\n/**\n * Type used to return the status and statusText from the response\n * with the error when a request fails.\n */\nexport class ResponseError extends Error {\n\tstatus: number;\n\tstatusText: string;\n\n\tconstructor(message: string, response: Response) {\n\t\tsuper(message);\n\t\tthis.status = response.status;\n\t\tthis.statusText = response.statusText;\n\t}\n}\n\n/**\n * Type used to pass back extra information about an error encountered in an api call\n * Data returned has to be cast to T, so take caution when accessing that data\n */\nexport class ApiError extends ResponseError {\n\tdata: T;\n\n\tconstructor(message: string, data: T, response: Response) {\n\t\tsuper(message, response);\n\t\tthis.data = data;\n\t}\n}\n\n/**\n * @param queryStringData request data to be included in the query string\n * @param keepalive if the request needs to\n */\ninterface IOptionalRequestParams {\n\tqueryStringData?: Record;\n\tkeepalive?: boolean;\n\tcontentType?: ContentType;\n}\n\n/**\n * Wrapper around fetch to include standard request formatting and debug logging\n *\n * @param path URL to make the request to\n * @param method request method (GET, POST, etc)\n * @param jwt the session jwt or null if there is not one\n * @param requestBodyData data of the request to be serialized in the body (JSON) or sent as bytes (Arraybuffer)\n * @param additionalData optional parameters not needed in many requests (see IOptionalRequestParams for more information)\n * @returns - The JSON data from the web request\n */\nexport async function makeRequest | void, TError = undefined>(\n\tpath: string,\n\tmethod: Method,\n\tjwt: string | null,\n\trequestBodyData?: Record | ArrayBuffer,\n\tadditionalData?: IOptionalRequestParams,\n): Promise {\n\tlet body: string | ArrayBuffer | null = null;\n\tconst headers: Record = {};\n\tlet mode: RequestMode | undefined = undefined;\n\n\tif (jwt) {\n\t\theaders[\"x-access-token\"] = `Bearer ${jwt}`;\n\t}\n\n\t// Parse optional parameters\n\tconst queryStringData = additionalData?.queryStringData;\n\tconst keepalive = additionalData?.keepalive;\n\n\tconst url = buildRequestURL(path, queryStringData);\n\n\tif (url.startsWith(\"/\")) {\n\t\t// Only same server paths will start with /\n\t\t// without specifying the request is same-origin, using keepalive results in a \"Preflight request for request with keepalive specified is currently not supported\" error.\n\t\t// https://stackoverflow.com/questions/55737748/preflight-request-failing-on-calling-a-post-request-with-keepalive-using-fetch-a\n\t\tmode = \"same-origin\";\n\t} else {\n\t\tmode = \"cors\";\n\t}\n\n\t// Only send body data as part of a POST request\n\tif (method === \"POST\" && requestBodyData) {\n\t\t// Check if we should send a raw data or JSON formatted data in our request\n\t\tconst bytes = requestBodyData as ArrayBuffer;\n\t\tif (bytes.byteLength !== undefined) {\n\t\t\theaders[\"Content-Type\"] = additionalData?.contentType ?? \"application/octet-stream\";\n\t\t\tbody = bytes;\n\t\t} else {\n\t\t\theaders[\"Content-Type\"] = \"application/json\";\n\t\t\tbody = JSON.stringify(requestBodyData);\n\t\t}\n\t}\n\n\tconst settings: RequestInit = { method, headers, body, keepalive: keepalive, mode };\n\n\t// Perform and log the outbound request\n\treturn handleRequestCore(url, settings);\n}\n\n/**\n * Performs the request for a formatted url and logs its occurrence and when it finished.\n *\n * @param requestURL - The url with any query data appended\n * @param settings - The request metadata we need to make a successful request\n * @returns - Any JSON data from the web request, throws errors on failure.\n */\nasync function handleRequestCore | void, TError = undefined>(\n\trequestURL: string,\n\tsettings: RequestInit,\n): Promise {\n\t// log the request start (avoid logging the url's query parameters)\n\tconst logUrl = requestURL.replace(/[?].*/, \"\");\n\tlogRequest({ type: \"request\", method: settings.method, url: logUrl });\n\n\tconst response = await fetch(requestURL, settings);\n\n\t// log the request finishing\n\tconst contentType = response.headers.get(\"content-type\");\n\tlogRequest({\n\t\ttype: \"response\",\n\t\tmethod: settings.method,\n\t\turl: logUrl,\n\t\tsuccessful: response.ok,\n\t\tstatus: response.status,\n\t\tstatusText: response.statusText,\n\t\tcontentType: contentType,\n\t});\n\n\tif (!response.ok) {\n\t\t// if there was JSON returned with the error try to parse it (used to inform error strings in useVideoCallAuthentication)\n\t\tlet data: TError | undefined;\n\t\ttry {\n\t\t\tconst text = await response.text();\n\t\t\tdata = JSON.parse(text) as TError;\n\t\t} catch {\n\t\t\t// we can just throw a generic error when there's no data or we fail to parse it\n\t\t}\n\n\t\tconst message = `API call to '${logUrl}' failed: ${response.status} - ${response.statusText}`;\n\n\t\taddLogEntry(\"error\", message);\n\t\tthrow data ? new ApiError(message, data, response) : new ResponseError(message, response);\n\t}\n\n\tlet responseJson: any = null;\n\tif (contentType?.includes(\"application/json\")) {\n\t\t// casting doesn't do anything at runtime, but will avoid linter issues\n\t\tresponseJson = (await response.json()) as TResp;\n\t} else if (response.status !== 204) {\n\t\t// throw an error when the request should have returned something (not 204 no content)\n\t\tthrow new ResponseError(\"API return not JSON\", response);\n\t}\n\n\t// responseJson being any makes it so making the request Promise will work with the linter\n\t// eslint-disable-next-line @typescript-eslint/no-unsafe-return\n\treturn responseJson;\n}\n\n/**\n * Build the url with appropriate query string data\n * @param path the request path\n * @param queryData query string data to be included in the URL\n * @returns the full request to be used by fetch\n */\nfunction buildRequestURL(path: string, queryData?: Record): string {\n\tconst baseUrl = makeLink(path).replace(/\\?+$/g, \"\"); // remove trailing ?\n\tconst queryString = buildQueryString(queryData);\n\tif (!queryString) {\n\t\treturn baseUrl;\n\t}\n\treturn baseUrl + (baseUrl.includes(\"?\") ? \"&\" : \"?\") + queryString;\n}\n\n/**\n * Build the query string for the outbound request\n * @param data The parameters to add to the query string\n * @returns The fully built query string to append to the URL\n */\nfunction buildQueryString(data: Record = {}): string {\n\tconst queryStr = Object.keys(data)\n\t\t.map((key) => `${key}=${encodeURIComponent(data[key])}`)\n\t\t.join(\"&\");\n\n\treturn queryStr;\n}\n\n/**\n * The data for a log entry\n */\nexport interface ILogEntry {\n\t/** Whether the log entry is an API request or an API response */\n\ttype: \"request\" | \"response\";\n\t/** What type of API call it was */\n\tmethod?: string;\n\t/** The URL of the API call */\n\turl: string;\n\t/** Whether the API call was successful */\n\tsuccessful?: boolean;\n\t/** The HTTP status code of the API call */\n\tstatus?: number;\n\t/** The HTTP Status text of the API call */\n\tstatusText?: string;\n\t/** The content type of the API call response */\n\tcontentType?: string | null;\n}\n\n/**\n * Log information from a request to the console when debugging\n * @param entry the data from the request to log\n */\nfunction logRequest(entry: ILogEntry): void {\n\tif (entry.url.endsWith(\"/api/Debug/LogDebugData\")) {\n\t\t//don't keep logging the request to log debug data over and over\n\t\tdebugNoFlush(\"Request sent:\", entry);\n\t} else {\n\t\tdebug(\"Request sent:\", entry);\n\t}\n}\n","/**\n * @copyright Copyright 2021-2024 Epic Systems Corporation\n * @file All functions needed to capture images and format them for saving to a patient's chart\n * @author Will Cooper\n * @module Epic.VideoApp.Utils.ImageCapture\n */\n\nimport { IMediaTokenResponse, ITelemedicineDocType } from \"~/types\";\nimport { MAIN_VIDEO_ID } from \"~/web-core/types\";\nimport { stringToBuffer } from \"./general\";\nimport { makeRequest } from \"./request\";\n\n/**\n * Determines available Image Capture method to capture the screenshot.\n * We return a Base64 string to ensure that we can easily display the string to the client.\n * Our two methods (ImageCapture API vs Canvas method) return different data types.\n * We will need to convert the Base64 string back to Blob/Arraybuffer format before saving images to the server.\n *\n * @param video - The video media stream to capture from\n * @returns - The raw image data of the captured image in base64 string.\n */\nexport async function captureImage(video: MediaStreamTrack): Promise {\n\t// Try to use the browser's MediaStream Image Capture API - works in Chrome, Edge, Opera\n\t// https://developer.mozilla.org/en-US/docs/Web/API/MediaStream_Image_Capture_API\n\tif (isImageCaptureAvailable()) {\n\t\t// We may have browsers that support ImageCapture but fail at runtime (32-bit Chrome vs 64-bit Chrome)\n\t\ttry {\n\t\t\t// eslint-disable-next-line compat/compat\n\t\t\tconst captureInterface = new ImageCapture(video);\n\t\t\tconst blob = await captureInterface.takePhoto();\n\t\t\treturn await readImageBlobAsync(blob);\n\t\t} catch {\n\t\t\treturn captureCanvasImage();\n\t\t}\n\t} else {\n\t\t// use canvas method\n\t\t// Fallback to canvas solution if the above API fails or is unavailable\n\t\treturn captureCanvasImage();\n\t}\n}\n\n/**\n * Takes an image Blob and returns it as a Base64 string.\n *\n * @param blob - The raw image Blob to read from\n * @returns - The raw base64 representation of the captured image.\n */\nasync function readImageBlobAsync(blob: Blob): Promise {\n\treturn new Promise((resolve, reject) => {\n\t\tconst reader = new FileReader();\n\t\treader.onload = function () {\n\t\t\tconst imageData = reader.result?.toString();\n\t\t\tif (imageData) {\n\t\t\t\tresolve(imageData);\n\t\t\t}\n\t\t\tresolve(\"\");\n\t\t};\n\n\t\treader.onerror = reject;\n\t\treader.readAsDataURL(blob);\n\t});\n}\n\n/**\n * Renders an HTML Video Element to an off-screen canvas and captures a single image from this.\n *\n * @returns - The base64 string of raw image data captured from the canvas element\n */\nfunction captureCanvasImage(): string {\n\tconst canvas = document.createElement(\"canvas\");\n\tconst videoFeed = document.getElementById(MAIN_VIDEO_ID) as HTMLVideoElement;\n\tcanvas.width = videoFeed.videoWidth;\n\tcanvas.height = videoFeed.videoHeight;\n\tcanvas.getContext(\"2d\")?.drawImage(videoFeed, 0, 0);\n\t// Remove header information \"data:image/png;base64,\" from raw image data\n\treturn canvas.toDataURL();\n}\n\n/**\n * We want to only store the raw image data.\n * The first few characters will be identifying meta data that we do not want to log with our request.\n *\n * @param imageData - The Base64 string representing image data\n * @returns - The image data stripped of any metadata\n */\nfunction stripMetaData(imageData: string): string {\n\tconst image = imageData.split(\",\");\n\tif (image.length > 0) {\n\t\treturn image[1];\n\t}\n\treturn image[0];\n}\n\n/**\n * Convert the base64 string representation of data (in this case captured images) into an arraybuffer (charCodes/bytes)\n * that can be directly passed from our Azure endpoint to Interconnect\n *\n * @param input Base64 string to convert to byte values\n * @returns An ArrayBuffer representing the data in the\n */\nfunction convertBase64ToBuffer(input: string): ArrayBuffer {\n\treturn stringToBuffer(window.atob(input));\n}\n\n/**\n * Will check any available document types for the expected default.\n *\n * @param documentTypes - The list of available document types for the current user\n * @returns - The default document type if found in the list, or if no list is provided, or the first type in the list.\n */\nexport function selectDefaultDocumentType(\n\tdocumentTypes: ITelemedicineDocType[],\n): ITelemedicineDocType | null {\n\tif (!documentTypes || !documentTypes.length) {\n\t\treturn null;\n\t}\n\n\tconst foundDefault = documentTypes.find((type) => type.id === getDefaultDocumentType().id);\n\n\t// Check if this should be alphabetical order if we need\n\treturn foundDefault ? foundDefault : documentTypes[0];\n}\n\n/**\n * Returns the default DCS Document Type available for saving images\n * @returns The hardcoded default document type\n */\nexport function getDefaultDocumentType(): ITelemedicineDocType {\n\treturn { id: \"15\", title: \"Clinical Unknown\" };\n}\n\n/**\n * Sort function for comparing document types by title\n *\n * @param docA - One doctype check\n * @param docB - The doctype to compare the first to\n * @returns - -1 if B sorts first, 0 if identical, and 1 if A sorts first\n */\nexport function alphabetizeDocTypes(docA: ITelemedicineDocType, docB: ITelemedicineDocType): number {\n\tconst first = docA.title.toUpperCase();\n\tconst second = docB.title.toUpperCase();\n\tif (first < second) {\n\t\treturn -1;\n\t}\n\tif (first > second) {\n\t\treturn 1;\n\t}\n\treturn 0;\n}\n\n/**\n * Checks whether the ImageCapture interface is available in the current browser\n *\n * @returns true if available, false otherwise\n */\nexport function isImageCaptureAvailable(): boolean {\n\treturn typeof ImageCapture !== \"undefined\";\n}\n\n/**\n * Sends a web request to generate a media token for saving images\n * @param jwt The session jwt\n * @param documentType The document type\n * @param description User entered description to save with the image\n * @param participantId The user id of the participant who's image was captured\n * @returns The media token for saving the image\n */\nexport async function generateMediaToken(\n\tjwt: string,\n\tdocumentType: string,\n\tdescription: string,\n\tparticipantId: string,\n): Promise {\n\tconst response = await makeRequest(\"/api/VideoCall/MediaToken\", \"POST\", jwt, {\n\t\tdocumentType,\n\t\tdescription,\n\t\tparticipantId,\n\t});\n\treturn response.mediaToken;\n}\n\n/**\n * Sends a web request to store an image capture\n * @param image The string of the image\n * @param jwt The session jwt\n * @param mediaToken The media token for saving the image\n */\nexport async function storeCapturedImage(image: string, jwt: string, mediaToken: string): Promise {\n\tconst buffer = convertBase64ToBuffer(stripMetaData(image));\n\tawait makeRequest(\"/api/VideoCall/SaveMedia\", \"POST\", jwt, buffer, {\n\t\tqueryStringData: { mediaToken },\n\t\tcontentType: \"image/png\",\n\t});\n}\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file State for holding captured images and associated meta data\n * @author Will Cooper\n * @module Epic.VideoApp.State.ImageCapture\n */\nimport { buildSharedState } from \"@epic/react-redux-booster\";\nimport store from \"~/app/store\";\nimport { alphabetizeDocTypes } from \"~/utils/imageCapture\";\nimport { ITelemedicineDocType } from \"../types/imageCapture\";\n\n/// TYPES ///\n\ninterface ICapturedImage {\n\tparticipantId: string;\n\timageData: string;\n}\n\nexport interface IImageCaptureState {\n\treadonly documentTypes: ITelemedicineDocType[];\n\treadonly image: string | null;\n\treadonly participantIdentifier: string;\n\treadonly isImageBeingSaved: boolean;\n\treadonly notifyImageCapture: boolean;\n}\n\n/// INIT ///\n\nexport function getInitialState(): IImageCaptureState {\n\treturn {\n\t\timage: null,\n\t\tdocumentTypes: [],\n\t\tparticipantIdentifier: \"\",\n\t\tisImageBeingSaved: false,\n\t\tnotifyImageCapture: false,\n\t};\n}\n\n/// REDUCERS ///\n\nexport function setDocumentTypes(\n\tstate: IImageCaptureState,\n\tdocuments: ITelemedicineDocType[],\n): IImageCaptureState {\n\tif (!documents || documents.length === 0) {\n\t\treturn {\n\t\t\t...state,\n\t\t\tdocumentTypes: [],\n\t\t};\n\t}\n\n\t/** Always initialize with a sorted array */\n\treturn {\n\t\t...state,\n\t\tdocumentTypes: documents.sort(alphabetizeDocTypes),\n\t};\n}\n\nexport function setImageData(state: IImageCaptureState, params: ICapturedImage | null): IImageCaptureState {\n\tif (!params) {\n\t\treturn {\n\t\t\t...state,\n\t\t\timage: null,\n\t\t\tparticipantIdentifier: \"\",\n\t\t};\n\t}\n\n\tconst { imageData, participantId } = params;\n\treturn {\n\t\t...state,\n\t\timage: imageData,\n\t\tparticipantIdentifier: participantId,\n\t};\n}\n\nfunction setIsImageBeingSaved(state: IImageCaptureState, result: boolean): IImageCaptureState {\n\treturn {\n\t\t...state,\n\t\tisImageBeingSaved: result,\n\t};\n}\n\nexport function setNotifyImageCapture(state: IImageCaptureState, result: boolean): IImageCaptureState {\n\treturn {\n\t\t...state,\n\t\tnotifyImageCapture: result,\n\t};\n}\n\n/// SELECTORS ///\n\nfunction getImageData(state: IImageCaptureState): string | null {\n\treturn state.image;\n}\n\nfunction getDocumentTypes(state: IImageCaptureState): ITelemedicineDocType[] {\n\treturn state.documentTypes;\n}\n\nfunction getParticipantId(state: IImageCaptureState): string {\n\treturn state.participantIdentifier;\n}\n\nfunction getIsImageBeingSaved(state: IImageCaptureState): boolean {\n\treturn state.isImageBeingSaved;\n}\n\nfunction getNotifyImageCapture(state: IImageCaptureState): boolean {\n\treturn state.notifyImageCapture;\n}\n\n/// BUILD IT ///\n\nconst builtState = buildSharedState({\n\tinit: getInitialState,\n\treducers: {\n\t\tsetImageData,\n\t\tsetDocumentTypes,\n\t\tsetIsImageBeingSaved,\n\t\tsetNotifyImageCapture,\n\t},\n\tselectors: {\n\t\tgetImageData,\n\t\tgetDocumentTypes,\n\t\tgetParticipantId,\n\t\tgetIsImageBeingSaved,\n\t\tgetNotifyImageCapture,\n\t},\n});\n\nstore.addSharedState(builtState.sharedState, \"imageCapture\");\n\nexport const { actionCreators: imageActions, useSharedState: useImageState, sharedState: state } = builtState;\n","/**\n * @copyright Copyright 2022 Epic Systems Corporation\n * @file Shared state for moderator-specific settings\n * @author Will Cooper\n * @module Epic.VideoApp.State.Moderation\n */\n\nimport { buildSharedState } from \"@epic/react-redux-booster\";\nimport store from \"~/app/store\";\nimport { IParticipantRequest } from \"./room\";\n\nexport interface IParticipantRequestUpdate {\n\tidentity: string;\n\taudio?: boolean;\n\tvideo?: boolean;\n\tscreenShare?: boolean;\n}\n\nexport interface IModerationState {\n\treadonly admitOptions: { audio: boolean; video: boolean; screenShare: boolean };\n\treadonly requestedParticipants: IParticipantRequest[];\n\treadonly requiresAccess: boolean;\n}\n\n/// INIT ///\n\nexport function getInitialState(): IModerationState {\n\treturn {\n\t\tadmitOptions: { audio: false, video: false, screenShare: false },\n\t\trequestedParticipants: [],\n\t\trequiresAccess: false,\n\t};\n}\n\n/// REDUCERS ///\n\nexport function setAdmitOptions(\n\tstate: IModerationState,\n\tvalue: { audio: boolean; video: boolean; screenShare: boolean },\n): IModerationState {\n\treturn { ...state, admitOptions: value };\n}\n\nexport function postParticipantRequest(\n\tstate: IModerationState,\n\tentry: IParticipantRequestUpdate,\n): IModerationState {\n\tconst { identity } = entry;\n\tif (!identity) {\n\t\treturn state;\n\t}\n\n\t// Attempt to remove any previous participant info for the current user (we will add the up to date object later)\n\tconst prevEntry: IParticipantRequest | undefined = state.requestedParticipants.find(\n\t\t(current: IParticipantRequest) => entry.identity === current.identity,\n\t);\n\n\tconst newRequests = state.requestedParticipants.filter(\n\t\t(current: IParticipantRequest) => entry.identity !== current.identity,\n\t);\n\n\tconst audio = entry.audio ?? prevEntry?.audio ?? false;\n\tconst video = entry.video ?? prevEntry?.video ?? false;\n\tconst screenShare = entry.screenShare ?? prevEntry?.screenShare ?? false;\n\n\tconst newEntry: IParticipantRequest = {\n\t\tidentity: entry.identity,\n\t\taudio: audio,\n\t\tvideo: video,\n\t\tscreenShare: screenShare,\n\t};\n\n\tnewRequests.push(newEntry);\n\n\treturn { ...state, requestedParticipants: newRequests };\n}\n\nexport function clearParticipantRequest(state: IModerationState, identity: string): IModerationState {\n\tif (!identity) {\n\t\treturn state;\n\t}\n\n\t// Attempt to remove any previous participant info for the current user\n\tconst newRequests: IParticipantRequest[] = state.requestedParticipants.filter(\n\t\t(current: IParticipantRequest) => identity !== current.identity,\n\t);\n\treturn { ...state, requestedParticipants: newRequests };\n}\n\nfunction clearAllParticipantRequests(state: IModerationState): IModerationState {\n\treturn { ...state, requestedParticipants: [] };\n}\n\nexport function setVisitRequiresAccess(state: IModerationState, value: boolean): IModerationState {\n\treturn { ...state, requiresAccess: value };\n}\n\n/// SELECTORS ///\n\nfunction getAudioAdmitOption(state: IModerationState): boolean {\n\treturn state.admitOptions.audio;\n}\n\nfunction getVideoAdmitOption(state: IModerationState): boolean {\n\treturn state.admitOptions.video;\n}\n\nfunction getScreenShareAdmitOption(state: IModerationState): boolean {\n\treturn state.admitOptions.screenShare;\n}\n\nfunction getRequestingParticipants(state: IModerationState): IParticipantRequest[] {\n\treturn state.requestedParticipants;\n}\n\nfunction getParticipantRequest(state: IModerationState, identity: string): IParticipantRequest {\n\t// Return the participants request status, or an object signifying no request was made\n\treturn (\n\t\tstate.requestedParticipants.find((participant) => participant.identity === identity) || {\n\t\t\tidentity,\n\t\t\taudio: false,\n\t\t\tvideo: false,\n\t\t\tscreenShare: false,\n\t\t}\n\t);\n}\n\nfunction getDoesVisitRequireAccess(state: IModerationState): boolean {\n\treturn state.requiresAccess;\n}\n\nconst builtState = buildSharedState({\n\tinit: getInitialState,\n\treducers: {\n\t\tclearParticipantRequest,\n\t\tclearAllParticipantRequests,\n\t\tpostParticipantRequest,\n\t\tsetAdmitOptions,\n\t\tsetVisitRequiresAccess,\n\t},\n\tselectors: {\n\t\tgetAudioAdmitOption,\n\t\tgetVideoAdmitOption,\n\t\tgetScreenShareAdmitOption,\n\t\tgetRequestingParticipants,\n\t\tgetParticipantRequest,\n\t\tgetDoesVisitRequireAccess,\n\t},\n});\n\nstore.addSharedState(builtState.sharedState, \"moderation\");\n\nexport const {\n\tactionCreators: moderationActions,\n\tuseSharedState: useModerationState,\n\tsharedState: state,\n} = builtState;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file utility function related to the user preferences\n * @author Steven Anderson\n * @module Epic.VideoApp.Utils.UserPreferences\n */\n\nimport { DefaultImageNames } from \"~/types/backgrounds\";\nimport { IUserPreferences, IUserPreferencesWithEncryption } from \"~/types/user\";\nimport { getCookie, preferencesCookieKey, setCookie } from \"./cookies\";\nimport { hoursToMs } from \"./dateTime\";\nimport { makeRequest } from \"./request\";\n\nexport function loadUserPreferences(userKey: string): IUserPreferences | null {\n\tif (!userKey) {\n\t\treturn null;\n\t}\n\n\tlet userPreferences: IUserPreferences = {\n\t\tencryptedDisplayName: null,\n\t\tlastBackgroundProcessor: DefaultImageNames.none,\n\t\tpreferredLocale: null,\n\t};\n\n\tconst serializedPreferences = localStorage.getItem(\"userPreferences_\" + userKey);\n\tif (!serializedPreferences) {\n\t\treturn userPreferences;\n\t}\n\n\ttry {\n\t\tuserPreferences = JSON.parse(serializedPreferences) as IUserPreferences;\n\t} catch {\n\t\treturn userPreferences;\n\t}\n\n\tif (!userPreferences) {\n\t\treturn userPreferences;\n\t}\n\n\tif (userPreferences.encryptedDisplayName === undefined) {\n\t\tuserPreferences.encryptedDisplayName = null;\n\t}\n\n\tif (userPreferences.preferredLocale === undefined) {\n\t\tuserPreferences.preferredLocale = null;\n\t}\n\n\treturn userPreferences;\n}\n\nexport function saveUserPreferences(userKey: string, userPreferences: IUserPreferences): void {\n\tif (!userKey || !userPreferences) {\n\t\treturn;\n\t}\n\n\tlocalStorage.setItem(\"userPreferences_\" + userKey, JSON.stringify(userPreferences));\n}\n\nexport function getUserPreferencesKeyFromCookie(sessionKey: string): string {\n\tif (!sessionKey) {\n\t\treturn \"\";\n\t}\n\treturn getCookie(preferencesCookieKey + sessionKey);\n}\n\nexport function storeUserPreferencesKeyInCookie(sessionKey: string, userKey: string): void {\n\tsetCookie(preferencesCookieKey + sessionKey, userKey, hoursToMs(4));\n}\n\n/**\n * After a refresh get the user's display name from cookies and decrypt on the server\n */\nexport async function decryptUserPreferences(\n\tjwt: string,\n\tencryptedUserPreferences: IUserPreferencesWithEncryption,\n): Promise {\n\treturn makeRequest(\"/api/VideoCall/DecryptUserPreferences\", \"POST\", jwt, {\n\t\tencryptedUserPreferences,\n\t});\n}\n","/**\n * @copyright Copyright 2023 Epic Systems Corporation\n * @file shared state related to the user (feature permissions, preferences, status, etc)\n * @author Steven Anderson & Will Cooper\n * @module Epic.VideoApp.State.User\n */\n\nimport { buildSharedState } from \"@epic/react-redux-booster\";\nimport store from \"~/app/store\";\nimport { IModeratorPayload } from \"~/types\";\nimport { DefaultImageNames } from \"~/types/backgrounds\";\nimport {\n\tEpicUserType,\n\tIBackgroundAccess,\n\tIUserGuardOptions,\n\tIUserPermissions,\n\tIUserPreferences,\n} from \"~/types/user\";\nimport { saveUserPreferences } from \"~/utils/userPreferences\";\n\n/// TYPES ///\ninterface IRequestTracker {\n\taudio: boolean;\n\tvideo: boolean;\n\tscreenShare: boolean;\n}\n\nexport interface IUserState {\n\tuserKey: string;\n\tuserPermissions: IUserPermissions;\n\tuserType: EpicUserType;\n\tmicrophoneLock: boolean;\n\tcameraLock: boolean;\n\tscreenShareLock: boolean;\n\tinWaitingRoom: boolean;\n\tpreferences: IUserPreferences;\n\tdeviceRequestStatus: IRequestTracker;\n\tisDemoSystem: boolean;\n\tguardOptions: IUserGuardOptions;\n\thideGuardRails: boolean;\n\tguardDismissalTime: number;\n}\n\n/// INIT ///\n\nexport function getInitialState(): IUserState {\n\treturn {\n\t\tuserKey: \"\",\n\t\tpreferences: {\n\t\t\tencryptedDisplayName: null,\n\t\t\tpreferredLocale: null,\n\t\t\tlastBackgroundProcessor: DefaultImageNames.none,\n\t\t},\n\t\tuserType: EpicUserType.unknown,\n\t\tmicrophoneLock: false,\n\t\tcameraLock: false,\n\t\tscreenShareLock: false,\n\t\tinWaitingRoom: false,\n\t\tuserPermissions: {\n\t\t\tcanCaptureImage: false,\n\t\t\tcanModerateVisit: false,\n\t\t\tcanShareScreen: false,\n\t\t\tcanStartEndVisit: false,\n\t\t\tcanNotSetDisplayName: false,\n\t\t\tcanAccessBlurring: true,\n\t\t\tcanAccessEpicBackgrounds: false,\n\t\t\tcanTestSpeaker: true,\n\t\t\tdisableAllBackgrounds: false,\n\t\t},\n\t\tdeviceRequestStatus: { audio: false, video: false, screenShare: false },\n\t\tisDemoSystem: false,\n\t\tguardOptions: {\n\t\t\tdismissedScreenShareWarning: false,\n\t\t\tskipHardwareTest: false,\n\t\t},\n\t\thideGuardRails: false,\n\t\tguardDismissalTime: 0,\n\t};\n}\n\n/// REDUCERS ///\n\nfunction setUserKey(state: IUserState, userKey: string): IUserState {\n\treturn { ...state, userKey };\n}\n\nfunction setPreferences(state: IUserState, newPreferences: IUserPreferences | null): IUserState {\n\tif (!newPreferences) {\n\t\treturn { ...getInitialState(), userKey: state.userKey };\n\t}\n\n\t// update the value in localStorage\n\tsaveUserPreferences(state.userKey, newPreferences);\n\n\treturn { ...state, preferences: newPreferences };\n}\n\nfunction setEncryptedDisplayName(state: IUserState, encryptedDisplayName: string | null): IUserState {\n\treturn setPreferences(state, { ...state.preferences, encryptedDisplayName });\n}\n\nexport function setPreferredLocale(state: IUserState, preferredLocale: string | null): IUserState {\n\treturn setPreferences(state, { ...state.preferences, preferredLocale });\n}\n\nexport function setUserPermission(state: IUserState, newPermissions: IUserPermissions): IUserState {\n\tconst newState = {\n\t\t...state,\n\t\tuserPermissions: {\n\t\t\t...state.userPermissions, // If we do not have a certain property in the newPermissions object, pull other parameters from existing user permissions object\n\t\t\t...newPermissions,\n\t\t},\n\t};\n\treturn newState;\n}\n\nexport function setUserType(state: IUserState, userType: EpicUserType): IUserState {\n\treturn { ...state, userType };\n}\n\nexport function setUserWaitingRoomStatus(state: IUserState, value: boolean): IUserState {\n\treturn { ...state, inWaitingRoom: value };\n}\n\nexport function setDisconnectedState(state: IUserState): IUserState {\n\tconst newState = getInitialState();\n\tnewState.userPermissions = state.userPermissions;\n\tnewState.userType = state.userType;\n\treturn newState;\n}\n\nfunction setLockState(state: IUserState, params: IModeratorPayload): IUserState {\n\tconst { audioLock, videoLock, screenShareLock } = params;\n\treturn {\n\t\t...state,\n\t\tmicrophoneLock: audioLock ?? state.microphoneLock,\n\t\tcameraLock: videoLock ?? state.cameraLock,\n\t\tscreenShareLock: screenShareLock ?? state.screenShareLock,\n\t};\n}\n\nfunction setRequestTimeout(state: IUserState, value: IRequestTracker): IUserState {\n\treturn { ...state, deviceRequestStatus: value };\n}\n\nfunction setUserActiveInCall(state: IUserState, params: IModeratorPayload): IUserState {\n\tconst { audioLock, videoLock, screenShareLock } = params;\n\n\treturn {\n\t\t...state,\n\t\tinWaitingRoom: false,\n\t\tmicrophoneLock: audioLock ?? state.microphoneLock,\n\t\tcameraLock: videoLock ?? state.cameraLock,\n\t\tscreenShareLock: screenShareLock ?? state.screenShareLock,\n\t};\n}\n\nexport function setIsDemoSystem(state: IUserState, flag: boolean): IUserState {\n\treturn { ...state, isDemoSystem: flag };\n}\n\nexport function setHideGuardrails(state: IUserState, flag: boolean): IUserState {\n\treturn { ...state, hideGuardRails: flag };\n}\n\nexport function setGuardDismissalTime(state: IUserState, time: number): IUserState {\n\treturn { ...state, guardDismissalTime: time };\n}\n\nexport function setGuardOptions(state: IUserState, newGuardOptions: IUserGuardOptions): IUserState {\n\treturn { ...state, guardOptions: newGuardOptions };\n}\n\nexport function setDismissedScreenShareWarning(state: IUserState, flag: boolean): IUserState {\n\treturn setGuardOptions(state, { ...state.guardOptions, dismissedScreenShareWarning: flag });\n}\n\n/// SELECTORS ///\n\nfunction getUserKey(state: IUserState): string {\n\treturn state.userKey ?? \"\";\n}\n\nfunction getPreferences(state: IUserState): IUserPreferences {\n\treturn state.preferences;\n}\n\nfunction getEncryptedDisplayName(state: IUserState): string | null {\n\treturn state.preferences.encryptedDisplayName;\n}\n\nfunction getLastBackgroundProcessor(state: IUserState): string {\n\treturn state.preferences.lastBackgroundProcessor;\n}\n\nfunction getUserPermission(\n\tstate: IUserState,\n\tpermission: T,\n): IUserPermissions[T] {\n\t// if for any reason any of this loaded improperly, return all permissions as false\n\treturn state.userPermissions[permission] || false;\n}\n\n// Allows dynamically checking permissions (through useCheckUserPermissions hook)\nfunction getAllUserPermissions(state: IUserState): IUserPermissions {\n\treturn state.userPermissions;\n}\n\nfunction getUserType(state: IUserState): EpicUserType {\n\treturn state.userType;\n}\n\nfunction getModerationLocks(state: IUserState): { audio: boolean; video: boolean; screenShare: boolean } {\n\treturn {\n\t\taudio: state.microphoneLock,\n\t\tvideo: state.cameraLock,\n\t\tscreenShare: state.screenShareLock,\n\t};\n}\n\nfunction getCameraLock(state: IUserState): boolean {\n\treturn state.cameraLock;\n}\n\nfunction getMicLock(state: IUserState): boolean {\n\treturn state.microphoneLock;\n}\n\nfunction getScreenShareLock(state: IUserState): boolean {\n\treturn state.screenShareLock;\n}\n\nfunction getBackgroundAccess(state: IUserState): IBackgroundAccess {\n\tif (state.userPermissions.disableAllBackgrounds) {\n\t\treturn {\n\t\t\tblurAccess: false,\n\t\t\tepicBackgroundsAccess: false,\n\t\t};\n\t}\n\n\treturn {\n\t\tblurAccess: state.userPermissions.canAccessBlurring,\n\t\tepicBackgroundsAccess: state.userPermissions.canAccessEpicBackgrounds,\n\t};\n}\n\nfunction getPreferredLocale(state: IUserState): string | null {\n\treturn state.preferences.preferredLocale;\n}\n\nfunction getIsUserInWaitingRoom(state: IUserState): boolean {\n\treturn state.inWaitingRoom;\n}\n\nfunction getDeviceRequestStatus(state: IUserState): IRequestTracker {\n\treturn state.deviceRequestStatus;\n}\n\nfunction getIsDemoSystem(state: IUserState): boolean {\n\treturn state.isDemoSystem;\n}\n\nfunction getHideGuardrails(state: IUserState): boolean {\n\treturn state.hideGuardRails;\n}\n\nfunction getGuardDismissalTime(state: IUserState): number {\n\treturn state.guardDismissalTime;\n}\n\nfunction getGuardOptions(state: IUserState): IUserGuardOptions {\n\treturn state.guardOptions;\n}\n\n/// BUILD IT ///\n\nconst builtState = buildSharedState({\n\tinit: getInitialState,\n\tselectors: {\n\t\tgetUserKey,\n\t\tgetPreferences,\n\t\tgetEncryptedDisplayName,\n\t\tgetUserPermission,\n\t\tgetAllUserPermissions,\n\t\tgetModerationLocks,\n\t\tgetUserType,\n\t\tgetMicLock,\n\t\tgetCameraLock,\n\t\tgetScreenShareLock,\n\t\tgetPreferredLocale,\n\t\tgetIsUserInWaitingRoom,\n\t\tgetLastBackgroundProcessor,\n\t\tgetBackgroundAccess,\n\t\tgetDeviceRequestStatus,\n\t\tgetIsDemoSystem,\n\t\tgetHideGuardrails,\n\t\tgetGuardDismissalTime,\n\t\tgetGuardOptions,\n\t},\n\treducers: {\n\t\tsetUserKey,\n\t\t/**\n\t\t * Updates preferences shared state with new user preferences.\n\t\t *\n\t\t * SIDE-EFFECT: Saves the updated userPreferences to localStorage.\n\t\t *\n\t\t * @param userPreferences the preferences to update into state.\n\t\t *\n\t\t * @returns New state object to be dispatched to the store.\n\t\t * */\n\t\tsetPreferences,\n\t\tsetEncryptedDisplayName,\n\t\tsetUserPermission,\n\t\tsetUserType,\n\t\tsetLockState,\n\t\tsetUserWaitingRoomStatus,\n\t\tsetRequestTimeout,\n\t\tsetUserActiveInCall,\n\t\tsetIsDemoSystem,\n\t\tsetHideGuardrails,\n\t\tsetGuardDismissalTime,\n\t\tsetGuardOptions,\n\t\tsetDismissedScreenShareWarning,\n\t},\n});\nstore.addSharedState(builtState.sharedState, \"user\");\n\nexport const { actionCreators: userActions, useSharedState: useUserState, sharedState: state } = builtState;\n","/**\n * @copyright Copyright 2021-2024 Epic Systems Corporation\n * @file Shared state functions to handle the Get Configuration response.\n * @author Will Cooper\n * @module Epic.VideoApp.State.Combined.Configuration\n */\n\nimport { withSharedStates } from \"@epic/react-redux-booster\";\nimport { EnvironmentType, EpicUserType, IClientConfigurationDTO, IHardwareTestAuth } from \"~/types\";\nimport { getAvailableBackgrounds } from \"~/utils/backgroundEffects\";\nimport { VideoVendor } from \"~/web-core/types\";\nimport * as auth from \"../auth\";\nimport * as branding from \"../branding\";\nimport * as chat from \"../chat\";\nimport * as feedbackSurvey from \"../feedbackSurvey\";\nimport * as image from \"../imageCapture\";\nimport * as moderation from \"../moderation\";\nimport * as room from \"../room\";\nimport * as user from \"../user\";\n\n/// COMBINED STATE TYPES ///\n\ntype CombinedConfigState = [\n\tbranding.IBrandingState,\n\tfeedbackSurvey.IFeedbackSurveyState,\n\timage.IImageCaptureState,\n\tmoderation.IModerationState,\n\troom.IRoomState,\n\tuser.IUserState,\n\tchat.IChatState,\n];\n\ntype HardwareTestConfigState = [auth.IAuthState, branding.IBrandingState, room.IRoomState];\n\ntype BackgroundSupportState = [branding.IBrandingState, room.IRoomState, user.IUserState];\n\n/// COMBINED REDUCERS ///\n\n/**\n * Update a users configuration values returned from the GetConfig web service\n *\n * @param state shared state prior to this action\n * @param configuration configuration data to save on the client\n * @returns the new shared state after this action is applied\n */\nfunction setConfiguration(\n\tstate: CombinedConfigState,\n\tconfiguration: IClientConfigurationDTO,\n): CombinedConfigState {\n\tif (!configuration) {\n\t\treturn state;\n\t}\n\n\tconst [\n\t\tprevBrandingState,\n\t\tprevFeedbackSurveyState,\n\t\tprevImageState,\n\t\tprevModerationState,\n\t\tprevRoomState,\n\t\tprevUserState,\n\t\tprevChatState,\n\t] = state;\n\tconst newBrandingState = branding.setBrandingConfig(prevBrandingState, configuration.branding);\n\tconst newChatState = chat.setChatConfig(prevChatState, { chatEnabled: configuration.chatEnabled });\n\tlet newImageState = image.setDocumentTypes(prevImageState, configuration.documentTypes);\n\tnewImageState = image.setNotifyImageCapture(newImageState, configuration.notifyImageCapture);\n\n\tlet newUserState = user.setUserType(prevUserState, configuration.userType);\n\tnewUserState = user.setUserPermission(newUserState, configuration.userPermissions);\n\tnewUserState = user.setUserWaitingRoomStatus(\n\t\tnewUserState,\n\t\tconfiguration.requiresVisitAccess && configuration.userType !== EpicUserType.emp,\n\t);\n\tnewUserState = user.setIsDemoSystem(newUserState, configuration.environment === EnvironmentType.demo);\n\n\tnewUserState = user.setHideGuardrails(newUserState, configuration.hideGuardrails);\n\tnewUserState = user.setGuardDismissalTime(newUserState, configuration.guardrailDaysHidden);\n\n\tconst newModerationState = moderation.setVisitRequiresAccess(\n\t\tprevModerationState,\n\t\tconfiguration.requiresVisitAccess,\n\t);\n\n\tlet newRoomState = room.setLowBandwidth(prevRoomState, configuration.useLowBandwidthMode);\n\tnewRoomState = room.setWaitingRoomUrl(newRoomState, configuration.waitingRoomUrl);\n\tnewRoomState = room.setShouldCheckBrowserCompatibility(\n\t\tnewRoomState,\n\t\tconfiguration.shouldCheckBrowserCompatibilityForBackground,\n\t);\n\tnewRoomState = room.setVisitInfo(newRoomState, {\n\t\tpatientName: configuration.patientName,\n\t\tconferenceDateIso: configuration.conferenceDateIso,\n\t});\n\tif (newRoomState.videoVendor === VideoVendor.unknown) {\n\t\tnewRoomState = room.setVendor(newRoomState, configuration.vendor);\n\t}\n\tnewRoomState = room.setIsConferenceTimeEstimate(newRoomState, configuration.isConferenceTimeEstimate);\n\n\tconst newFeedbackSurveyState = feedbackSurvey.setFeedbackStep(\n\t\tprevFeedbackSurveyState,\n\t\tconfiguration.initialFeedbackState,\n\t);\n\n\treturn [\n\t\tnewBrandingState,\n\t\tnewFeedbackSurveyState,\n\t\tnewImageState,\n\t\tnewModerationState,\n\t\tnewRoomState,\n\t\tnewUserState,\n\t\tnewChatState,\n\t];\n}\n\n/**\n * Set a user's JWT and configuration for their session\n *\n * @param state shared state prior to this action\n * @param payload JWT and configuration to put into shared state\n * @returns the new shared state after this action is applied\n */\nfunction setHardwareTestJwtAndConfig(\n\tstate: HardwareTestConfigState,\n\tpayload: IHardwareTestAuth,\n): HardwareTestConfigState {\n\tconst { jwt, vendorOverride, clientConfiguration } = payload;\n\tconst [prevAuthState, prevBrandingState, prevRoomState] = state;\n\n\tconst newAuthState = auth.setJWT(prevAuthState, jwt);\n\tconst newBrandingState = branding.setBrandingConfig(\n\t\tprevBrandingState,\n\t\tclientConfiguration?.branding ?? null,\n\t);\n\tconst newRoomState = room.setVendor(\n\t\tprevRoomState,\n\t\tvendorOverride ?? clientConfiguration?.vendor ?? VideoVendor.unknown,\n\t);\n\n\treturn [newAuthState, newBrandingState, newRoomState];\n}\n\n/// COMBINED SELECTORS ///\n\n/**\n * Determine if background effects are supported\n * @param state current shared state\n * @returns true if background effects are supported, false otherwise\n */\nfunction getIsBackgroundsSupported(state: BackgroundSupportState): boolean {\n\tconst [brandingState, roomState, userState] = state;\n\n\tconst brandingAccess =\n\t\t!!brandingState.virtualBackgroundImages && brandingState.virtualBackgroundImages.length > 0;\n\n\tconst backgroundsAvailable = getAvailableBackgrounds(\n\t\tuserState.userPermissions.canAccessBlurring,\n\t\tuserState.userPermissions.canAccessEpicBackgrounds,\n\t\tbrandingAccess,\n\t\tuserState.userPermissions.disableAllBackgrounds,\n\t);\n\n\t// Return true if not in low bandwidth mode and the device supports an available background\n\treturn (\n\t\t!roomState.lowBandwidthMode &&\n\t\t(backgroundsAvailable.blur || backgroundsAvailable.epic || backgroundsAvailable.branded)\n\t);\n}\n\n/// BUILD IT ///\n\nexport const configurationCombinedReducers = {\n\tsetConfiguration: withSharedStates(\n\t\tbranding.state,\n\t\tfeedbackSurvey.state,\n\t\timage.state,\n\t\tmoderation.state,\n\t\troom.state,\n\t\tuser.state,\n\t\tchat.state,\n\t).buildReducer(setConfiguration),\n\tsetHardwareTestJwtAndConfig: withSharedStates(auth.state, branding.state, room.state).buildReducer(\n\t\tsetHardwareTestJwtAndConfig,\n\t),\n};\n\nexport const configurationCombinedSelectors = {\n\tgetIsBackgroundsSupported: withSharedStates(branding.state, room.state, user.state).buildSelector(\n\t\tgetIsBackgroundsSupported,\n\t),\n};\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file Combined auth / room state\n * @author Colin Walters\n * @module Epic.VideoApp.State.Combined.Connection\n */\n\nimport { withSharedStates } from \"@epic/react-redux-booster\";\nimport * as auth from \"../auth\";\nimport * as room from \"../room\";\n\n/// COMBINED STATE TYPES ///\n\ntype CombinedState = [auth.IAuthState, room.IRoomState];\n\n/// COMBINED REDUCERS ///\n\n/**\n * Indicate that the user can connect to their visit and update the JWT, if necessary\n * @param state shared state prior to this action\n * @param newJwt the new JWT to set into state, or \"\" if the previous JWT should continue to be used\n * @returns the new shared state after this action is applied\n */\nfunction setCanConnect(state: CombinedState, newJwt: string): CombinedState {\n\tconst [prevAuthState, prevRoomState] = state;\n\n\tlet newAuthState = prevAuthState;\n\tif (newJwt) {\n\t\tnewAuthState = auth.setJWT(newAuthState, newJwt);\n\t}\n\n\tconst newRoomState = room.setCanConnect(prevRoomState);\n\n\treturn [newAuthState, newRoomState];\n}\n\n/// BUILD IT ///\n\nexport const connectionCombinedReducers = {\n\tsetCanConnect: withSharedStates(auth.state, room.state).buildReducer(setCanConnect),\n};\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file Shared state for the error card\n * @author Will Cooper\n * @module Epic.VideoApp.State.ErrorPage\n */\n\nimport { buildSharedState } from \"@epic/react-redux-booster\";\nimport store from \"~/app/store\";\nimport { ErrorTokenNames } from \"~/features/generic-error/GenericError\";\n\n/// TYPES ///\n\nexport interface IErrorPage {\n\ttitle?: ErrorTokenNames;\n\tmessage: ErrorTokenNames;\n}\n\nexport interface IErrorPageState {\n\tpage: IErrorPage | null;\n}\n\n/// INIT ///\n\nfunction getInitialState(): IErrorPageState {\n\treturn {\n\t\tpage: null,\n\t};\n}\n\n/// REDUCERS ///\n\n//\n/**\n * Sets the error page tile and text\n * @param state current state\n * @param page Contents for the error page, should only include string keys.\n * Title is optional and will fall back to the default \"Something went wrong\" if not provided\n * @returns Updated state\n */\nfunction setErrorCard(state: IErrorPageState, page: IErrorPage): IErrorPageState {\n\tconst newError: IErrorPageState = {\n\t\t...state,\n\t\tpage: page,\n\t};\n\treturn newError;\n}\n\n/// SELECTORS ///\n\nfunction getErrorPageTitle(state: IErrorPageState): string | null {\n\treturn state.page?.title ?? null;\n}\n\nfunction getErrorPageText(state: IErrorPageState): string | null {\n\treturn state.page?.message ?? null;\n}\n\n/// BUILD IT ///\n\nconst builtState = buildSharedState({\n\tinit: getInitialState,\n\treducers: {\n\t\tsetErrorCard,\n\t},\n\tselectors: {\n\t\tgetErrorPageTitle,\n\t\tgetErrorPageText,\n\t},\n});\n\nstore.addSharedState(builtState.sharedState, \"errorPage\");\n\nexport const {\n\tactionCreators: errorPageActions,\n\tuseSharedState: useErrorPageState,\n\tsharedState: state,\n} = builtState;\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file Shared state for the hardware test\n * @author Tara Feldstein\n * @module Epic.VideoApp.State.HardwareTest\n */\nimport { buildSharedState } from \"@epic/react-redux-booster\";\nimport store from \"~/app/store\";\nimport {\n\tDeviceStatus,\n\tDeviceStatusSubtype,\n\tHardwareTestError,\n\tHardwareTestStatus,\n\tHardwareTestTab,\n\tIDeviceState,\n\tIHardwareTestCurrentTab,\n} from \"~/types\";\nimport { isOnIOSVersion } from \"~/utils/os\";\nimport { VendorError } from \"~/web-core/interfaces\";\nimport { IDeviceUpdate } from \"~/web-core/vendor/twilio\";\n\n/// TYPES ///\nexport interface IHardwareTestState {\n\t// Status of the devices\n\treadonly cameraState: IDeviceState;\n\treadonly microphoneState: IDeviceState;\n\treadonly speakerState: IDeviceState;\n\treadonly vendorError: VendorError | null;\n\treadonly hardwareTestTab: IHardwareTestCurrentTab;\n\treadonly tabButtonNeedingFocus: HardwareTestTab[];\n\tskipHardwareTest: boolean;\n\t/// When set to false will display the toggle in the devices tray within a call instead\n\tdisplaySkipHardwareTestToggleInLobby: boolean;\n\tnotFirstSkip: boolean;\n\tisIPadCameraBugged: boolean;\n}\n\n/// INIT ///\n\nexport function getInitialState(isDisconnecting: boolean = false): IHardwareTestState {\n\tconst initialStatus = isDisconnecting ? DeviceStatus.unknown : DeviceStatus.testing;\n\n\treturn {\n\t\tcameraState: { status: initialStatus, errorType: DeviceStatusSubtype.none },\n\t\tmicrophoneState: { status: initialStatus, errorType: DeviceStatusSubtype.none },\n\t\tspeakerState: { status: initialStatus, errorType: DeviceStatusSubtype.none },\n\t\tvendorError: null,\n\t\thardwareTestTab: { tab: HardwareTestTab.closed, isAutoSelected: true },\n\t\ttabButtonNeedingFocus: [],\n\t\tskipHardwareTest: false,\n\t\tdisplaySkipHardwareTestToggleInLobby: true,\n\t\tnotFirstSkip: false,\n\t\tisIPadCameraBugged: false,\n\t};\n}\n\n/// HELPERS ///\n/**\n * Pure helper function to get the appropriate hardware test tab for the device state\n * - If a hardware test tab is open (settings or background effects), then the tab never changes\n * - If hardware test tabs are closed, then opens the settings if there is an error or warning status\n * @param state hardware test state\n * @param deviceState the state of a video, microphone, or speaker device\n * @returns the hardware test tab that should be used\n */\nfunction getTestTabForDeviceState(state: IHardwareTestState, deviceState: IDeviceState): HardwareTestTab {\n\tif (shouldOpenDeviceTab(state, deviceState)) {\n\t\treturn HardwareTestTab.devices;\n\t}\n\treturn state.hardwareTestTab.tab;\n}\n\nfunction getTestTabForAllDeviceState(\n\tstate: IHardwareTestState,\n\tdevicesUpdates: IDeviceUpdate[],\n): HardwareTestTab {\n\tfor (const update of devicesUpdates) {\n\t\tif (shouldOpenDeviceTab(state, deviceUpdateToDeviceState(update))) {\n\t\t\treturn HardwareTestTab.devices;\n\t\t}\n\t}\n\n\treturn state.hardwareTestTab.tab;\n}\n\nfunction deviceUpdateToDeviceState(update: IDeviceUpdate): IDeviceState {\n\treturn { errorType: update.errorType, status: update.status };\n}\n\nfunction shouldOpenDeviceTab(state: IHardwareTestState, deviceState: IDeviceState): boolean {\n\treturn (\n\t\tstate.hardwareTestTab.tab === HardwareTestTab.closed &&\n\t\t(deviceState.status === DeviceStatus.error || deviceState.status === DeviceStatus.warning)\n\t);\n}\n\nfunction isWarningOrError(deviceStatus: DeviceStatus): boolean {\n\treturn (\n\t\tdeviceStatus === DeviceStatus.error ||\n\t\tdeviceStatus === DeviceStatus.unknown ||\n\t\tdeviceStatus === DeviceStatus.warning\n\t);\n}\n\n/// REDUCERS - only for use by /hooks/localTracks ///\n\nexport function addElementNeedsFocus(state: IHardwareTestState, tab: HardwareTestTab): IHardwareTestState {\n\tif (state.tabButtonNeedingFocus.includes(tab)) {\n\t\treturn state;\n\t}\n\n\treturn { ...state, tabButtonNeedingFocus: [...state.tabButtonNeedingFocus, tab] };\n}\n\nexport function removeElementNeedsFocus(state: IHardwareTestState, tab: HardwareTestTab): IHardwareTestState {\n\tconst newElmsNeedingFocus = state.tabButtonNeedingFocus.filter((listTab) => {\n\t\treturn listTab !== tab;\n\t});\n\treturn { ...state, tabButtonNeedingFocus: newElmsNeedingFocus };\n}\n\nexport function closeTabAndFocusTabButton(\n\tstate: IHardwareTestState,\n\ttabType: HardwareTestTab,\n): IHardwareTestState {\n\tstate = setHardwareTestTab(state, HardwareTestTab.closed);\n\treturn addElementNeedsFocus(state, tabType);\n}\n\nexport interface IDeviceInitialization {\n\tdeviceUpdates: IDeviceUpdate[];\n\terror: VendorError;\n}\n\nexport function setInitialHardwareState(\n\tstate: IHardwareTestState,\n\tinitialization: IDeviceInitialization,\n): IHardwareTestState {\n\tconst { deviceUpdates, error } = initialization;\n\tconst hardwareTestTab = getTestTabForAllDeviceState(state, deviceUpdates);\n\n\tconst newState = {\n\t\t...state,\n\t\thardwareTestTab: { tab: hardwareTestTab, isAutoSelected: true, vendorError: error },\n\t};\n\tfor (const update of deviceUpdates) {\n\t\tswitch (update.device) {\n\t\t\tcase \"camera\":\n\t\t\t\tnewState.cameraState = deviceUpdateToDeviceState(update);\n\t\t\t\tbreak;\n\t\t\tcase \"mic\":\n\t\t\t\tnewState.microphoneState = deviceUpdateToDeviceState(update);\n\t\t\t\tbreak;\n\t\t\tcase \"speaker\":\n\t\t\t\tnewState.speakerState = deviceUpdateToDeviceState(update);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn newState;\n}\n\nexport function setCameraState(state: IHardwareTestState, deviceState: IDeviceState): IHardwareTestState {\n\tconst hardwareTestTab = getTestTabForDeviceState(state, deviceState);\n\n\tconst newState: IHardwareTestState = {\n\t\t...state,\n\t\tcameraState: deviceState,\n\t\thardwareTestTab: { tab: hardwareTestTab, isAutoSelected: true },\n\t};\n\treturn newState;\n}\n\nexport function setMicrophoneState(state: IHardwareTestState, deviceState: IDeviceState): IHardwareTestState {\n\tconst hardwareTestTab = getTestTabForDeviceState(state, deviceState);\n\n\tconst newState: IHardwareTestState = {\n\t\t...state,\n\t\tmicrophoneState: deviceState,\n\t\thardwareTestTab: { tab: hardwareTestTab, isAutoSelected: true },\n\t};\n\treturn newState;\n}\n\nexport function setSpeakerState(state: IHardwareTestState, deviceState: IDeviceState): IHardwareTestState {\n\tconst hardwareTestTab = getTestTabForDeviceState(state, deviceState);\n\n\tconst newState: IHardwareTestState = {\n\t\t...state,\n\t\tspeakerState: deviceState,\n\t\thardwareTestTab: { tab: hardwareTestTab, isAutoSelected: true },\n\t};\n\treturn newState;\n}\n\nexport function setCameraSuccess(state: IHardwareTestState): IHardwareTestState {\n\tlet newState: IHardwareTestState = {\n\t\t...state,\n\t\tcameraState: {\n\t\t\tstatus: DeviceStatus.success,\n\t\t\terrorType: DeviceStatusSubtype.none,\n\t\t},\n\t};\n\tnewState = clearVendorErrorIfNecessary(newState);\n\treturn newState;\n}\n\nexport function setMicrophoneSuccess(state: IHardwareTestState): IHardwareTestState {\n\tlet newState: IHardwareTestState = {\n\t\t...state,\n\t\tmicrophoneState: {\n\t\t\tstatus: DeviceStatus.success,\n\t\t\terrorType: DeviceStatusSubtype.none,\n\t\t},\n\t};\n\tnewState = clearVendorErrorIfNecessary(newState);\n\treturn newState;\n}\n\nexport function setHardwareTestTab(state: IHardwareTestState, newTab: HardwareTestTab): IHardwareTestState {\n\tif (state.hardwareTestTab.tab === newTab && !state.hardwareTestTab.isAutoSelected) {\n\t\treturn state;\n\t}\n\treturn { ...state, hardwareTestTab: { tab: newTab, isAutoSelected: false } };\n}\n\nexport function setSpeakerSuccess(state: IHardwareTestState): IHardwareTestState {\n\tlet newState: IHardwareTestState = {\n\t\t...state,\n\t\tspeakerState: {\n\t\t\tstatus: DeviceStatus.success,\n\t\t\terrorType: DeviceStatusSubtype.none,\n\t\t},\n\t};\n\tnewState = clearVendorErrorIfNecessary(newState);\n\treturn newState;\n}\n\n/**\n * This helper function is called by the setSuccess functions to update\n * VendorError to be nothing in the case that there was an error,\n * but an update fixed the error to create a passing state\n * @param state - current state\n */\nfunction clearVendorErrorIfNecessary(state: IHardwareTestState): IHardwareTestState {\n\tlet { vendorError } = state;\n\t// pass false for allowOneError to make sure the error is only cleared when there are no device errors\n\t// don't care about iOS version for determining Vendor Error state\n\tif (\n\t\tvendorError &&\n\t\tgetTestStatus(state, { allowOneError: false, isStandalone: false }) === HardwareTestStatus.passed\n\t) {\n\t\tvendorError = null;\n\t}\n\treturn { ...state, vendorError };\n}\n\nfunction setVendorError(state: IHardwareTestState, error: VendorError): IHardwareTestState {\n\tconst newState: IHardwareTestState = {\n\t\t...state,\n\t\tvendorError: error,\n\t};\n\treturn newState;\n}\n\nexport function setSkipHardwareTest(state: IHardwareTestState, flag: boolean): IHardwareTestState {\n\treturn state.skipHardwareTest === flag ? state : { ...state, skipHardwareTest: flag };\n}\n\nexport function setDisplaySkipHardwareTestToggleInLobby(\n\tstate: IHardwareTestState,\n\tflag: boolean,\n): IHardwareTestState {\n\treturn state.displaySkipHardwareTestToggleInLobby === flag\n\t\t? state\n\t\t: { ...state, displaySkipHardwareTestToggleInLobby: flag };\n}\n\nexport function setIsFirstHardwareTestSkip(state: IHardwareTestState, flag: boolean): IHardwareTestState {\n\treturn state.notFirstSkip === flag ? state : { ...state, notFirstSkip: flag };\n}\n\nexport function setIsIPadCameraBugged(state: IHardwareTestState): IHardwareTestState {\n\tif (state.isIPadCameraBugged) {\n\t\treturn state;\n\t}\n\tconst newState = {\n\t\t...state,\n\t\tisIPadCameraBugged: true,\n\t\tcameraState: {\n\t\t\tstatus: DeviceStatus.unknown,\n\t\t\terrorType: DeviceStatusSubtype.unknown,\n\t\t},\n\t};\n\treturn newState;\n}\n\n/// SELECTORS ///\n\nfunction getHardwareTestTab(state: IHardwareTestState): IHardwareTestCurrentTab {\n\treturn state.hardwareTestTab;\n}\n\nfunction getCameraStatus(state: IHardwareTestState, allowOneError: boolean): DeviceStatus {\n\tconst { status } = state.cameraState;\n\tif (status !== DeviceStatus.error && status !== DeviceStatus.unknown) {\n\t\treturn status;\n\t}\n\t// treat camera failure as a warning, if we're allowing one device to fail (used by lobby)\n\treturn allowOneError && getNumDeviceErrors(state) === 1 ? DeviceStatus.warning : status;\n}\n\nfunction getCameraError(state: IHardwareTestState): DeviceStatusSubtype {\n\treturn state.cameraState.errorType;\n}\n\nfunction getMicrophoneStatus(state: IHardwareTestState, allowOneError: boolean): DeviceStatus {\n\tconst { status } = state.microphoneState;\n\tif (status !== DeviceStatus.error && status !== DeviceStatus.unknown) {\n\t\treturn status;\n\t}\n\t// treat microphone failure as a warning, if we're allowing one device to fail (used by lobby)\n\treturn allowOneError && getNumDeviceErrors(state) === 1 ? DeviceStatus.warning : status;\n}\n\nfunction getMicrophoneError(state: IHardwareTestState): DeviceStatusSubtype {\n\treturn state.microphoneState.errorType;\n}\n\nfunction getSpeakerStatus(state: IHardwareTestState): DeviceStatus {\n\treturn state.speakerState.status;\n}\n\nfunction getSpeakerError(state: IHardwareTestState): DeviceStatusSubtype {\n\treturn state.speakerState.errorType;\n}\n\nfunction getVendorError(state: IHardwareTestState): VendorError | null {\n\treturn state.vendorError;\n}\n\ninterface ITestStatusParams {\n\tallowOneError: boolean;\n\tisStandalone: boolean;\n}\n\n/**\n * Get the current hardware test status\n * @param allowOneError Flag to indicate one device specific error should be allowed, used by the lobby to allow continuing with camera or microphone disabled\n */\nfunction getTestStatus(state: IHardwareTestState, options: ITestStatusParams): HardwareTestStatus {\n\tconst anyTestsOngoing =\n\t\tstate.cameraState.status === DeviceStatus.testing ||\n\t\tstate.microphoneState.status === DeviceStatus.testing ||\n\t\tstate.speakerState.status === DeviceStatus.testing;\n\tif (anyTestsOngoing) {\n\t\treturn HardwareTestStatus.testing;\n\t}\n\n\tconst threshold = options.allowOneError ? 1 : 0;\n\n\t// consider the hardware test passed as long as either the camera or mic worked\n\tif (getNumDeviceErrors(state) > threshold) {\n\t\treturn HardwareTestStatus.failed;\n\t}\n\n\t// fail the standalone hardware test if on an affected iOS 14.2 device\n\tif (options.isStandalone && isOnIOSVersion(\"14_2\")) {\n\t\treturn HardwareTestStatus.failed;\n\t}\n\n\treturn HardwareTestStatus.passed;\n}\n\n/**\n * Checks if any devices have warnings or errors (or an unknown status, which could be an error). Similar to getNumDeviceErrors, except this reducer includes warning statuses\n * @param state Hardware test state for reducer\n * @returns true if hardware test has warnings or errors\n */\nfunction hasDetectedIssues(state: IHardwareTestState, skipSpeakerCheck: boolean): boolean {\n\treturn (\n\t\tisWarningOrError(state.cameraState.status) ||\n\t\tisWarningOrError(state.microphoneState.status) ||\n\t\t(!skipSpeakerCheck && isWarningOrError(state.speakerState.status))\n\t);\n}\n\n/**\n * Helper function to get the number of device errors\n */\nfunction getNumDeviceErrors(state: IHardwareTestState): number {\n\tlet errorCount = 0;\n\n\tif (\n\t\tstate.cameraState.status === DeviceStatus.error ||\n\t\tstate.cameraState.status === DeviceStatus.unknown\n\t) {\n\t\terrorCount += 1;\n\t}\n\n\tif (\n\t\tstate.microphoneState.status === DeviceStatus.error ||\n\t\tstate.microphoneState.status === DeviceStatus.unknown\n\t) {\n\t\terrorCount += 1;\n\t}\n\n\tif (\n\t\tstate.speakerState.status === DeviceStatus.error ||\n\t\tstate.speakerState.status === DeviceStatus.unknown\n\t) {\n\t\terrorCount += 1;\n\t}\n\n\treturn errorCount;\n}\n\nfunction getTabButtonsNeedingFocus(state: IHardwareTestState): HardwareTestTab[] {\n\treturn state.tabButtonNeedingFocus;\n}\n\n// Calculates the error type that should be displayed on the main card\nfunction getHardwareTestError(state: IHardwareTestState): HardwareTestError {\n\tconst { cameraState, microphoneState } = state;\n\n\t// Determine which device has the error to display\n\tlet errorType: DeviceStatusSubtype;\n\tlet errorIsCamera = false;\n\tif (cameraState.status === DeviceStatus.error) {\n\t\terrorType = cameraState.errorType;\n\t\terrorIsCamera = true;\n\t} else if (microphoneState.status === DeviceStatus.error) {\n\t\terrorType = microphoneState.errorType;\n\t} else {\n\t\treturn HardwareTestError.none;\n\t}\n\n\tswitch (errorType) {\n\t\tcase DeviceStatusSubtype.general:\n\t\t\treturn HardwareTestError.generalError;\n\t\tcase DeviceStatusSubtype.hardwareError:\n\t\t\treturn errorIsCamera ? HardwareTestError.cameraError : HardwareTestError.microphoneError;\n\t\tcase DeviceStatusSubtype.permissionsError:\n\t\t\treturn HardwareTestError.permissionsError;\n\t\tcase DeviceStatusSubtype.unknown:\n\t\t\treturn HardwareTestError.unknown;\n\t}\n\n\treturn HardwareTestError.none;\n}\n\nfunction getSkipHardwareTest(state: IHardwareTestState): boolean {\n\treturn state.skipHardwareTest;\n}\n\nfunction getDisplaySkipHardwareTestToggleInLobby(state: IHardwareTestState): boolean {\n\treturn state.displaySkipHardwareTestToggleInLobby;\n}\n\nfunction getIsFirstHardwareTestSkip(state: IHardwareTestState): boolean {\n\treturn state.notFirstSkip;\n}\n\nfunction getIsIPadCameraBugged(state: IHardwareTestState): boolean {\n\treturn state.isIPadCameraBugged;\n}\n\n/// BUILD IT ///\n\nconst builtState = buildSharedState({\n\tinit: getInitialState,\n\treducers: {\n\t\tsetCameraState,\n\t\tsetMicrophoneState,\n\t\tsetCameraSuccess,\n\t\tsetMicrophoneSuccess,\n\t\tsetVendorError,\n\t\tsetHardwareTestTab,\n\t\tremoveElementNeedsFocus,\n\t\taddElementNeedsFocus,\n\t\tsetSkipHardwareTest,\n\t\tsetDisplaySkipHardwareTestToggleInLobby,\n\t\tsetIsFirstHardwareTestSkip,\n\t\tsetInitialHardwareState,\n\t\tcloseTabAndFocusTabButton,\n\t\tsetIsIPadCameraBugged,\n\t},\n\tselectors: {\n\t\tgetCameraStatus,\n\t\tgetMicrophoneStatus,\n\t\tgetSpeakerStatus,\n\t\tgetCameraError,\n\t\tgetMicrophoneError,\n\t\tgetSpeakerError,\n\t\tgetVendorError,\n\t\tgetTestStatus,\n\t\tgetNumDeviceErrors,\n\t\tgetHardwareTestError,\n\t\tgetHardwareTestTab,\n\t\thasDetectedIssues,\n\t\tgetTabButtonsNeedingFocus,\n\t\tgetSkipHardwareTest,\n\t\tgetDisplaySkipHardwareTestToggleInLobby,\n\t\tgetIsFirstHardwareTestSkip,\n\t\tgetIsIPadCameraBugged,\n\t},\n});\nstore.addSharedState(builtState.sharedState, \"hardwareTest\");\n\nexport const {\n\tactionCreators: hardwareTestActions,\n\tuseSharedState: useHardwareTestState,\n\tsharedState: state,\n} = builtState;\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file Shared state for local tracks\n * @author Matt Panico\n * @module Epic.VideoApp.State.LocalTracks\n */\n\nimport { buildSharedState } from \"@epic/react-redux-booster\";\nimport store from \"~/app/store\";\nimport { TrackAcquisitionStatus } from \"~/types\";\n\n/// TYPES ///\n\nexport interface ILocalTrackState {\n\t// Initial track acquisition status\n\treadonly localTrackAcquisitionStatus: TrackAcquisitionStatus;\n\n\t// Shell camera device stored when user manually disables their camera\n\t// reducers should ensure this never has a value at the same time as videoTrack\n\treadonly disabledCamera: IDevice | null;\n\n\treadonly videoDeviceId: string | null;\n\n\t// Indicates if the camera is currently being toggled\n\treadonly togglingCamera: CameraTogglingState;\n\n\treadonly audioDeviceId: string | null;\n\n\t// Indication of whether or not auto selection has been attempted\n\treadonly hasAutoSelected: { video: boolean; audio: boolean };\n\n\t// is AudioContext currently running\n\treadonly audioContextRunning: boolean;\n\n\t// Can we start creating audio context? useSingletonAudioContext uses this flag to not create\n\t// audio context until getUserMedia call succeeds at least once for either audio or video.\n\treadonly canCreateAudioContext: boolean;\n}\n\n// Device interface, shares properties with MediaDeviceInfo\nexport interface IDevice {\n\treadonly deviceId: string | null;\n\treadonly label: string | null;\n\treadonly kind: MediaDeviceKind | null;\n}\n\nexport enum CameraTogglingState {\n\tnotToggling = 0,\n\ttogglingOn = 1,\n\ttogglingOff = 2,\n}\n\n/// INIT ///\n\nexport function getInitialState(): ILocalTrackState {\n\treturn {\n\t\tlocalTrackAcquisitionStatus: \"notStarted\",\n\t\tdisabledCamera: null,\n\t\ttogglingCamera: CameraTogglingState.notToggling,\n\t\thasAutoSelected: { video: false, audio: false },\n\t\taudioContextRunning: false,\n\t\tcanCreateAudioContext: false,\n\t\tvideoDeviceId: null,\n\t\taudioDeviceId: null,\n\t};\n}\n\n/// REDUCERS - only for use by /hooks/localTracks ///\n\nfunction setLocalTrackAcquisitionStatus(\n\tstate: ILocalTrackState,\n\tstatus: TrackAcquisitionStatus,\n): ILocalTrackState {\n\tconst newState: ILocalTrackState = {\n\t\t...state,\n\t\tlocalTrackAcquisitionStatus: status,\n\t};\n\treturn newState;\n}\n\n/**\n * Change the device that should be acquired on enabling the camera\n */\nfunction setDisabledCamera(state: ILocalTrackState, camera: IDevice): ILocalTrackState {\n\treturn { ...state, disabledCamera: camera };\n}\n\nexport function setTogglingCamera(\n\tstate: ILocalTrackState,\n\tisToggling: CameraTogglingState,\n): ILocalTrackState {\n\treturn { ...state, togglingCamera: isToggling };\n}\n\nexport function setHasAutoSelectedVideo(state: ILocalTrackState): ILocalTrackState {\n\tconst { hasAutoSelected: newHasAutoSelected } = state;\n\tnewHasAutoSelected.video = true;\n\treturn { ...state, hasAutoSelected: newHasAutoSelected };\n}\n\nexport function setHasAutoSelectedAudio(state: ILocalTrackState): ILocalTrackState {\n\tconst { hasAutoSelected: newHasAutoSelected } = state;\n\tnewHasAutoSelected.audio = true;\n\treturn { ...state, hasAutoSelected: newHasAutoSelected };\n}\n\nfunction setAudioContextRunning(state: ILocalTrackState, running: boolean): ILocalTrackState {\n\treturn { ...state, audioContextRunning: running };\n}\n\nfunction setCanCreateAudioContext(state: ILocalTrackState, canCreate: boolean): ILocalTrackState {\n\tif (state.canCreateAudioContext === canCreate) {\n\t\treturn state; // No need to create new state if it's not changing.\n\t}\n\treturn { ...state, canCreateAudioContext: canCreate };\n}\n\nexport function switchVideoDevice(state: ILocalTrackState, device?: MediaDeviceInfo): ILocalTrackState {\n\tconst newDeviceId = device?.deviceId ?? state.videoDeviceId;\n\treturn {\n\t\t...state,\n\t\tcanCreateAudioContext: true,\n\t\tdisabledCamera: { deviceId: null, label: null, kind: null },\n\t\tvideoDeviceId: newDeviceId,\n\t};\n}\n\n/// SELECTORS ///\n\nfunction getLocalTrackAcquisitionStatus(state: ILocalTrackState): TrackAcquisitionStatus {\n\treturn state.localTrackAcquisitionStatus;\n}\n\nfunction getDisabledCamera(state: ILocalTrackState): IDevice | null {\n\treturn state.disabledCamera;\n}\n\nfunction getTogglingCamera(state: ILocalTrackState): CameraTogglingState {\n\treturn state.togglingCamera;\n}\n\nfunction getAudioDeviceId(state: ILocalTrackState): string | null {\n\treturn state.audioDeviceId;\n}\n\nfunction getHasAutoSelected(state: ILocalTrackState): boolean {\n\tconst { hasAutoSelected } = state;\n\treturn hasAutoSelected.video && hasAutoSelected.audio;\n}\n\nfunction getIsAudioContextRunning(state: ILocalTrackState): boolean {\n\treturn state.audioContextRunning;\n}\n\nfunction getCanCreateAudioContext(state: ILocalTrackState): boolean {\n\treturn state.canCreateAudioContext;\n}\n\n/// BUILD IT ///\n\nconst builtState = buildSharedState({\n\tinit: getInitialState,\n\treducers: {\n\t\tsetLocalTrackAcquisitionStatus,\n\t\tsetDisabledCamera,\n\t\tsetTogglingCamera,\n\t\tsetHasAutoSelectedVideo,\n\t\tsetHasAutoSelectedAudio,\n\t\tsetAudioContextRunning,\n\t\tsetCanCreateAudioContext,\n\t},\n\tselectors: {\n\t\tgetLocalTrackAcquisitionStatus,\n\t\tgetDisabledCamera,\n\t\tgetTogglingCamera,\n\t\tgetHasAutoSelected,\n\t\tgetIsAudioContextRunning,\n\t\tgetCanCreateAudioContext,\n\t\tgetAudioDeviceId,\n\t},\n});\nstore.addSharedState(builtState.sharedState, \"localTracks\");\n\nexport const {\n\tactionCreators: localTrackActions,\n\tuseSharedState: useLocalTrackState,\n\tsharedState: state,\n} = builtState;\n","module.exports={\"tl-us\":{LanguageSelectorButton_AriaLabel:\"Palitan ang wika\",GenericError_TooEarlyBody:\"Hindi kayo maaaring sumali sa video visit na ito sa ngayon. Mangyaring sumali ulit sa oras na nalalapit sa nakatakdang oras. \",LanguageSelectorButton_Tooltip:\"Palitan ang wika (Alt+G)\",Shared_ConnectingToOrganization:\"Kumukonekta sa inyong organisasyon\",LanguageSelectorButton_LabelNoHotkey:\"Palitan ang wika\",useVideoCallAuthentication_AlreadyConnectedAlert:\"Nakakonekta na kayo sa is pang video call. {0}Aling tawag ang nais ninyong manatili?\",Troubleshooting_Android12Step1:\"Magbukas ng bagong tab sa inyong web browser at pumunta sa chrome://flags.\",GenericError_SomethingWentWrong:\"May maling nangyari\",BrowserCompatibilityError_ThisBrowserNotRecommended:\"Ang browser na ito ay hindi inirerekomenda.\",Troubleshooting_Android12Header:\"Ayusin ang isyu sa video\",useVideoCallAuthentication_AlreadyConnectedConfirm:\"Manatili sa naunang tawag\",GenericError_ReturnToOngoingCallHeader:\"Bumalik sa kasalukuyang tawag\",DisconnectionPage_BodyText:\"Muling ilunsad ang tawag kung nais ninyong sumali ulit.\",NotFound_Header:\"Sorry, hindi namin mahanap ang page na iyon\",GenericError_AuthRemovedBody:\"Tinanggal kayo sa pagbisita noong nakaraan at hindi na kayo maaaring sumali ulit. \",LoadingLanguageToast_LoadingLanguage:\"Inilo-load ang mga pagsasalin...\",GenericError_VisitExpiredHeader:\"Nag-expire na ang Video Visit\",GenericError_AuthRemovedHeader:\"Hindi maaaring sumali sa tawag\",BrowserCompatibilityError_UseSupportedBrowser:\"Gamitin ang isa sa mga nirerekomendang browser para sumali sa video call.\",DisconnectionPage_Title:\"Nakaalis na kayo sa video call\",GenericError_ReturnToOngoingCallMessage:\"Nasa tawag pa rin kayo sa kabilang tab. Bumalik sa tab para sa inyong kasalukuyang tawag.\",GenericError_RelaunchTheTest:\"Muling ilunsad ang test para subukan ulit.\",Troubleshooting_Android12Step3:\"Palitan ang setting sa Naka-disable.\",BrowserCompatibilityError_IOSChangeDefaultStep2:\"Piliin ang browser na ginagamit ninyo ngayon.\",Troubleshooting_Android12BodyText:\"Mayroong isyu sa pagpapadala ng video sa inyong device. Sundin ang mga sumusunod na hakbang para maayos ito.\",GenericError_VisitExpiredBody:\"Hindi na kayo maaaring sumali sa video visit na ito. \",BrowserCompatibilityError_BrowserNotSupported:\"Hindi suportado ang browser\",Alerts_ExistingConnectionAlertLabel:\"Babala tungkol sa umiiral na koneksyon\",BrowserCompatibilityError_IOSChangeDefaultStep3:\"Piliin ang Safari sa setting na Default Browser App.\",BrowserCompatibilityError_LegacyError:\"Luma na ang bersyon ng Microsoft Edge. I-update sa pinakabagong bersyon para makasali sa video call.\",NotFound_PageNotFound:\"Hindi nahanap ang page\",Shared_DefaultPageTitle:\"Epic Telehealth\",Spinner_Loading:\"Loading\",BrowserCompatibilityError_IOSChangeDefaultStep1:\"Pumunta sa Mga Setting\",useVideoCallAuthentication_AlreadyConnectedCancel:\"Tumuloy gamit ang tawag na ito\",BrowserCompatibilityError_BrowserNotRecommended:\"Ang browser ay hindi inirerekomenda.\",BrowserCompatibilityError_IOSError:\"Safari ang nirerekomenda naming browser para sa device na ito. Kung nakararanas kayo ng mga problema sa inyong tawag, subukan ninyo ang ibang device o gawing Safari ang inyong default browser at muling ilunsad ang tawag. Para palitan ang inyong default browser:\",NotFound_BodyText:\"Kung sinusubukan ninyong kumonekta sa isang video call, bumalik sa link ng tawag at muli itong ilunsad.\",GenericError_RelaunchTheCall:\"Muling ilunsad ang tawag para subukan ulit\",BrowserCompatibilityError_BrowserDoesNotSupportVideo:\"Hindi sinusuportahan ng browser na ito ang video calling\",GenericError_FailedToConnect:\"Hindi makakonekta sa tawag. Muling ilunsad ang tawag para subukan ulit.\",LanguageSelectorButton_ButtonLabel:\"Wika\",GenericError_TooEarlyHeader:\"Maaga Kayo\",Troubleshooting_Android12Step2:'I-search ang \"WebRTC hardware video encoding\"'},\"en-us\":{ChatView_NewMessage:\"New message\",AccessibilityAlert_AdmittanceAlert:\"You have joined the call\",ToggleButtonTrayButton_AriaLabel:\"Hide buttons\",WaitingParticipantRow_Decline:\"Decline\",WaitingCard_EstimatedAppointmentDateAndTime:\"Estimated appointment time: {0} at {1}\",DisableCameraButton_EnableCamera:\"Enable camera\",LobbyHardwareTest_TestFailed:\"Hardware test failed\",useSaveImageToChart_Retry:\"Retry\",Toasts_UnreadMessagesText:\"You have unread messages.\",Survey_OthersNotSeeMe:\"Others could not see me\",BackgroundGalleryNoneOption_BackgroundNoneOption:\"No background\",ChoiceAlertBase_ChoiceWithHotkey:\"{0} (Alt+{1})\",ToggleRow_KeyboardShortcut:\"(Alt+{0})\",AlertLocalTimer_TimerSecondsAriaLabel:\"{0} seconds remaining\",Shared_DefaultPageTitle:\"Epic Telehealth\",ToggleRow_SettingsAriaLabel:\"Settings\",useMenuPages_ParticipantListBackButtonLabel:\"Participant list. Click to return to the main menu.\",BackgroundGallery_Space:\"space\",Android12VideoWarning_Title:\"Video issue\",ScreenShareWarning_MacInstructionMessage:\"After you select continue and allow the browser to record your screen, it will be shared with the call.\",AdmitOptionsMenu_AllowAudio:\"Allow participant microphone use upon admission\",LanguageSelectorButton_AriaLabel:\"Change language\",useVideoTrackActions_DefaultError:\"There was a problem connecting to your camera. Try another camera.\",ToggleRow_OpenBackgroundsNoHotkey:\"Open background effects\",Survey_OtherGroup:\"Other\",GenericError_VisitExpiredBody:\"You can no longer join this video visit.\",BackgroundGalleryToggleRow_BlurOnlyLabel:\"Blur Background\",ConfirmScreenSharing_ContinueHeader:\"Screen sharing is paused. Do you want to continue sharing this screen?\",ParticipantControlMenu_RemoveAlertText:\"Remove {0} from the call? They will not be able to rejoin the call once removed.\",MuteButton_MicrophoneDisabled:\"Your microphone has been disabled.\",Alerts_RemoveParticipantAlertLabel:\"Remove participant alert\",DisconnectionPage_BodyText:\"If you wish to rejoin, launch the call again.\",InlineVideoPreview_UnnamedCameraDetected:\"Video feed for your camera\",Toasts_RemoteScreenShare:\"{0} is sharing their screen\",Toasts_VideoAndAudioModerated:\"Your microphone and camera have been disabled.\",DevicePermissionWarning_Connecting:\"Connecting to your microphone and camera...\",ToggleRow_OpenBackgrounds:\"Open background effects\",SurveyWorkflow_Back:\"Back\",ToggleRow_OpenSettings:\"Open settings\",PictureInPictureButton_LeavePiPWithHotkey:\"Return video (Alt+K)\",ParticipantNameBar_PinAnotherVideo:\"Pin another person's video.\",ScreenShareButton_NotEnabled:\"Screen share not enabled\",SurveyWorkflow_Submit:\"Submit\",ParticipantMenuSection_AllowAllAriaLabel:\"Allow all audio access for all patients and guests.\",ToggleRow_CloseSettingsNoHotkey:\"Close settings\",LockParticipantScreenShareButton_AllowShare:\"Allow screen share\",Toasts_AdmitButton:\"Admit\",DisableCameraButton_DisableCameraWithHotkey:\"Disable camera (Alt+R)\",HardwareTest_DefaultHeader:\"Hardware Test\",ApplyBackgroundButton_BackgroundNoCamera:\"Connect a camera to use background effects\",ParticipantRow_CamLocked:\"Camera locked\",ParticipantRow_CamDisabled:\"Camera off\",MicSetup_RecentAudio:\"Microphone output recently detected\",InactivityChoiceAlert_LeaveCall:\"Leave call\",VideoPreview_ButtonTitle:\"Shrink this video feed (Alt+V)\",LobbyHardwareTest_Close:\"Close\",IntroQuestion_FeedbackLinkText:\"Report a technical issue with this call\",BackgroundGallery_Dark:\"dark\",ParticipantsButton_NotificationText:\"There are actions to take in this menu.\",WaitingCard_AppointmentDateAndTime:\"Appointment time: {0} at {1}\",Toasts_ImageCaptureFailure:\"Image capture failed\",TrackSwitchedOffOverlay_IconText:\"Poor network connection. This paused video will resume automatically when the connection improves.\",Toasts_UserWaiting:\"{0} is waiting to join the call.\",VideoOutput_Loading:\"Loading...\",WaitingCard_AdmitContextMessage:\"You will need to admit patients into the call once they connect.\",ParticipantRow_ParticipantRequested:\"{0} has requested permissions.\",Survey_IsAudioLowQuality:\"Poor audio quality\",HardwareTest_DefaultError_Call:\"Could not connect. Relaunch the call to try again.\",BackgroundGallery_None:\"None\",RetakeButton_RetakeButton:\"Retake\",HardwareTest_PermissionsErrorContent_Call:\"Check your media permissions settings, relaunch the call, and allow access to your audio and video devices.\",ScreenShareWarning_CautionHeader:\"You are about to share your screen\",InactivityChoiceAlert_TimeoutWarningMessage:\"You will be disconnected from the call due to inactivity\",AccessibilityAlert_BackgroundSet:\"{0} Background Set\",HardwareTest_Welcome:\"Welcome!\",ChatView_SendingMessageStatus:\"Sending...\",LobbyHardwareTest_JoinWithoutCamera:\"Join without camera\",HardwareTest_MicrophoneError_Test:\"Could not connect to microphone. Verify that the microphone is not in use by another application. Relaunch the test to try again.\",Survey_AudioGroup:\"Audio\",GenericError_RelaunchTheCall:\"Relaunch the call to try again\",ParticipantNameBar_ScreenOfAnotherPersonWithName:\"Screen of {0}\",NotFound_Header:\"Sorry, we can't find that page\",AccessibilityAlert_BackgroundCleared:\"Background Cleared\",MoreMenuButton_AriaLabel:\"More options\",SkipHardwareTestLoadingScreen_Joining:\"Joining visit\",useAudioTrackActions_NotAllowedError:\"There was a problem connecting to your microphone. Allow this browser to use your microphone to continue.\",ManageDevicesButton_Devices:\"Devices\",FullscreenButton_StopLabel:\"Exit fullscreen mode\",Android12VideoWarning_MessageChrome:\"If you use this device for your video visit, your video might not look right to other people, even though it looks OK in your video preview. You can fix this issue by updating Google Chrome to the latest version.\",HardwareSetupRow_Warning:\"Warning\",Troubleshooting_Android12BodyText:\"There is an issue with sending video on your device. To resolve the issue, follow these steps:\",ParticipantRow_MicDisabled:\"Microphone off\",ScreenShareWarning_DismissTime:\"Do not show for {0} days\",SettingsButton_SettingsHotkey:\"Settings (Alt+S)\",ChoiceAlertBase_Yes:\"Yes\",LeaveCallButton_StayConnected:\"Stay connected\",DisableCameraButton_CameraDisabled:\"Your camera has been disabled.\",SaveButton_AccessibleLabelNoPatient:\"Save captured image to the patient's chart\",ConfirmScreenSharing_StartButtonLabel:\"Start sharing\",CameraSetup_NoCameraDetected:\"No camera detected.\",LanguageSelectorButton_ButtonLabel:\"Language\",DisplayModeButton_ToggleBase:\"Switch to speaker view\",RemoveParticipantChoiceAlert_ErrorMessage:\"Failed to remove the participant.\",Alerts_ImageCaptureAlertLabel:\"Image capture alert\",LoadingLanguageToast_LoadingLanguage:\"Loading translations...\",NotFound_BodyText:\"If you're trying to connect to a video call, go back to the call link and launch it again.\",useMenuPages_AdmitOptionsBackButtonLabel:\"Admission options menu. Click to return to the main menu.\",HardwareTest_MicrophoneErrorContent_Test:\"Verify that the microphone is not in use by another application. Relaunch the test to try again.\",DisableCameraButton_DisableCamera:\"Disable camera\",Troubleshooting_Android12Step1:\"Open a new tab in your web browser and go to chrome://flags.\",SpeakerSetup_Speaker:\"Speaker\",HardwareTest_SuccessMessage:\"You're ready for your video call\",Toasts_ImageCaptured_DefaultName:\"A clinician captured an image of your video feed.\",Toasts_ImageCaptureSuccess:\"Image capture successful\",MicSelector_Microphone:\"Microphone\",ToggleRow_CloseSettings:\"Close settings\",SaveButton_LabelNoPatient:\"Save to patient's chart\",VideoPreview_ButtonTitleGrowAltZ:\"Grow this video feed (Alt+Z)\",BrowserSupportWarning_ButtonLabel:\"View recommended browsers\",ImagePreviewPane_Title:\"Save image to chart\",CameraSetup_DisableCamera:\"Disable camera\",ToggleRow_AudioToggle:\"Toggle microphone\",ParticipantNameBar_YouAreMuted:\"You are muted.\",SkipHardwareTestSection_StartMessage:\"Use these settings and skip the hardware test for the rest of the day\",CopyrightLinkButton_ClosePopup:\"Back\",useMenuPages_BackgroundBackButtonLabel:\"Background effects. Click to return to the main menu.\",ToggleRow_AudioToggleTooltip:\"Toggle microphone\",EndVisitAlert_Stay:\"Stay connected\",SurveyWorkflow_LeaveSurveyWarning:\"You have unsaved answers, are you sure you want to leave?\",InlineVideoPreview_NoCamera:\"Video feed, camera disabled\",ParticipantNameBar_PinAnotherVideoWithName:\"Pin {0}'s video.\",ParticipantControlMenu_Remove:\"Remove\",BrowserSupportWarning_Title:\"This browser is not recommended.\",InHeaderControls_NetworkWarning:\"Network connection warning. Some videos may be paused.\",ParticipantRow_MicLocked:\"Microphone locked\",MicSetup_MicrophoneQuiet:\"Your microphone is quiet. It may have stopped working.\",EmbeddedWaitingRoom_Title:\"Waiting Room\",HeadphoneAudioWarning_Message:\"You may experience audio issues if you change headphones or Bluetooth speakers during the call. If you encounter audio issues, relaunch this call. Switching to a device other than an iPhone or iPad on iOS 15 will avoid this issue.\",DevicePermissionWarning_AllowSentence:\"{0} this page to use your devices.\",EndVisitAlert_Leave:\"Leave call\",Toasts_AudioAndVideoRequest:\"{0} has requested microphone and camera access.\",LobbyHardwareTest_JoinCall:\"Join call\",MicSetup_NoRecentAudio:\"No microphone output recently detected\",ParticipantMenuSection_PatientsHeader:\"Patients and guests\",BackgroundPreview_Preview:\"Preview\",IntroQuestion_NegativeLabel:\"Issues\",InlineVideoPreview_CameraDetected:\"Video feed for your camera: {0}\",Toasts_DenyAll:\"Deny all\",BrowserCompatibilityError_IOSChangeDefaultStep1:\"Go to Settings. \",ChatButton_ChatEnabledHoverText:\"Chat (Alt+C)\",CameraSelector_Camera:\"Camera\",MicSetup_CouldNotConnect:\"Could not connect to your microphone.\",Toasts_MultipleModerated:\"Some of your permissions have been disabled.\",Shared_FormatLabelWithHotkey:\"{0} {1}\",DisconnectionPage_Title:\"You have left the video call\",LockParticipantMicrophoneButton_AudioAriaLabel:\"This user has requested access to their microphone.\",GenericError_FailedToReconnect:\"Failed to reconnect to the call. Relaunch the call to try again.\",Toasts_VideoRequest:\"{0} has requested camera access.\",RequestOptions_LabelGeneric:\"Request access to your disabled permissions\",PageSelector_CurrentPage:\"On page {0} of {1} \",ScreenShareButton_StopSharingScreenWithHotkey:\"Stop sharing screen (Alt+S)\",SurveyPage_Title:\"What issues did you have in your call?\",LockParticipantScreenShareButton_TurnOffShare:\"Turn off shared screen\",ParticipantNameBar_PinAnotherScreenWithName:\"Pin {0}'s screen.\",ParticipantControlMenu_AudioAriaLabel:\"This user has requested access to their microphone.\",DevicePermissionWarning_Allow:\"Allow\",EndVisitAlert_Message:\"Do you want to leave the call, or end the call for everyone?\",ParticipantMenuSection_DisableAllAriaLabel:\"Mute all patients and guests.\",ParticipantRow_ScreenEnabled:\"Screen share on\",BrowserCompatibilityError_UseSupportedBrowser:\"Use one of these recommended browsers to join the video call.\",Toasts_MultipleRequests:\"{0} participants have requested audio or video access.\",ParticipantNameBar_CallerIsMutedWithName:\"{0} is muted.\",ExitButton_CloseWindowTooltip:\"Exit (Alt+X)\",Survey_WasDisconnected:\"I was accidentally disconnected\",BackgroundGalleryToggleRow_FailedLoad:\"Failed to load background effects.\",AboutEvcButton_Label:\"About Epic Video Client\",DevicePermissionWarning_WeNeedDevices:\"For your video visit, we need to connect to your microphone and camera.\",Toasts_CameraSwitchFailed_Browser:\"There was a problem connecting to your camera. Allow this browser to use your camera to continue.\",ChatView_MultipleUsersAreTyping:\"Multiple people are typing\",Shared_LocalParticipantIndicator:\"{0} (You)\",ScreenShareWarning_Continue:\"Continue\",LockParticipantScreenShareButton_DeviceCannotShare:\"Device does not support screen share\",Android12VideoWarning_MessageNonChrome:\"If you use this device for your video visit, your video might not look right to other people, even though it looks OK in your video preview. To avoid this issue, use the latest version of Google Chrome as your browser.\",BackgroundGallery_BackgroundEffectAltText:\"Background option {0}\",RequestOptions_TooltipTextGeneric:\"Request access to your disabled permissions (Alt+Q)\",MuteButton_UnmuteMicrophoneHotkey:\"Unmute microphone (Alt+M)\",DocumentTypeSelector_ImageType:\"Image type {0}\",HardwareSetupRow_Success:\"Success\",AdmitOptionsMenu_AllowVideo:\"Allow participant camera use upon admission\",ImageCaptureButton_TakeCapture:\"Take an image capture of the remote participant\",ParticipantsButton_Tooltip:\"Participant list (Alt+P)\",Troubleshooting_Android12Header:\"Resolve the video issue\",GenericError_LaunchCallAgainMessage:\"Launch this call again to join. \",Alerts_LeaveCallAlertLabel:\"Leave call confirmation\",ChatView_UnknownSenderName:\"Unknown\",SaveButton_Label:\"Save to {0}'s chart\",useMenuPages_AboutEvcTitle:\"About Epic Video Client\",SettingsPanel_BackgroundsLabel:\"Background effects\",CameraSetup_NoPermissions:\"Browser permissions denied for camera.\",useVideoCallAuthentication_AlreadyConnectedCancel:\"Continue to this call\",ParticipantNameBar_ClickToPinScreen:\"Click to pin this screen.\",NetworkQualityIndicator_QualityLevel:\"Connection strength {0} of {1} bars.\",EndVisitAlert_Confirmation:\"Are you sure you want to end the call for everyone? Every person in the call will be disconnected.\",BackgroundGallery_Summer:\"summer\",EndVisitAlert_End:\"End call for all\",ChatToastButtonGroup_OpenChatButtonText:\"Open chat\",ScreenShareAudioIndicator_LocalSharedAudioLabel:\"You are sharing audio.\",ApplyBackgroundButton_ApplyBackground:\"Apply background\",useSaveImageToChart_FailedToSaveAfterRetry:\"Failed to save the image to the patient's chart. To resolve the issue, relaunch the call and try again, or contact your administrator.\",LobbyHardwareTest_JoinWithoutMicrophone:\"Join without microphone\",ScreenShareBanner_MuteButtonLabel:\"Mute screen share audio\",ToggleRow_VideoToggleTooltipAltR:\"Toggle camera\",GenericError_CallEndedBody:\"The call was ended for everyone.\",BackgroundGallery_BackgroundEffectAltTextDefault:\"Background option\",SpeakerSetup_NoSpeakerDetected:\"No speaker detected.\",LockParticipantCameraButton_VideoAriaLabel:\"This user has requested access to their camera.\",GenericError_ParticipantRemovedBody:\"You will not be able to rejoin.\",GenericError_CallEndedHeader:\"Call ended\",ScreenShareBanner_UnmuteButtonLabel:\"Unmute screen share audio\",DevicePermissionWarning_Continue:\"Continue\",SpeakerSetup_IssueResolution:\"If you didn't hear the test sound, try turning up your volume, choosing a different speaker, or using a different device.\",PageSelector_SwitchToPage:\"Switch to page {0}\",ConfirmScreenSharing_ChangeScreenButtonLabel:\"Change screen\",GenericError_ReturnToOngoingCallHeader:\"Return to the ongoing call\",LockParticipantCameraButton_AllowCamera:\"Allow camera\",ParticipantMenuSection_AllowAll:\"Allow all audio\",HardwareTest_GeneralError_Call:\"Could not connect to camera, microphone, or speaker. Verify that devices are not in use by another application. Relaunch the call to try again.\",ParticipantNameBar_ClickToUnpinVideo:\"This video is pinned. Click to unpin.\",HardwareTest_CameraErrorContent_Test:\"Verify that the camera is not in use by another application. Relaunch the test to try again.\",useScreenShareTrackActions_ProblemSharingScreen:\"There was a problem sharing your screen.\",ExitButton_Cancel:\"Cancel\",IPadVideoBugWarning_Title:\"Video issue\",HardwareTest_MicrophoneErrorContent_Call:\"Relaunch the call to try again.\",ScreenShareWarning_InstructionMessage:\"After you select Continue, use the preview window to make sure you share the correct screen.\",HardwareTest_StandaloneTestSuccessTip:\"You can close the page now\",Toasts_CameraSwitchFailed:\"There was a problem connecting to your camera. Try another camera.\",useParticipantName_DefaultName_Generic:\"Caller\",HardwareTest_SuccessHeader:\"Hardware Test: Success\",ChatButton_ChatEnabledTooltip:\"Chat\",useSendVisitAccessMessage_AdmitFailed:\"Failed to admit {0} due to a media server error.\",SurveyWorkflow_Exit:\"Exit\",BrowserCompatibilityError_BrowserNotSupported:\"Browser not supported\",ChangeBackgroundButton_Backgrounds:\"Background effects\",MoreParticipantsIndicator_ButtonLabel:\"+{0}\",Toasts_ScreenShareModerated:\"Your screen share has been disabled.\",ScreenShareButton_Locked:\"Your screen share has been disabled.\",ScreenShareBanner_ChangeButtonLabel:\"Change screen\",RetakeButton_RetakeButtonAria:\"Retake the image capture\",InlineVideoPreview_RecentAudio:\"Microphone output recently detected\",MuteButton_MuteMicrophoneHotkey:\"Mute microphone (Alt+M)\",Toasts_RemoteScreenShare_DefaultName:\"Another participant is sharing their screen\",AccessibilityAlert_WaitingRoomAlert:\"You are now in the waiting room, a care team member will let you in when they're ready to begin\",Alerts_ScreenSharingAlertLabel:\"Screen sharing alert\",BrowserSuggestion_HelpText:\"For the best experience, use one of these supported browsers.\",ToggleRow_EnableVideo:\"Enable camera\",Toasts_Deny:\"Deny request\",VideoPreview_ButtonTitleGrow:\"Grow this video feed (Alt+V)\",HardwareTest_ReadyMessageWithTime:\"Get ready for your call at {0}\",Shared_WarningIconAriaLabel:\"Alert: \",VideoPreview_AriaLabelWithName:\"Shrink {0}'s video feed.\",Alerts_GenericAlertLabel:\"Alert\",WaitingCard_ConnectionStrength:\"Connection strength:\",WaitingCard_Header:\"Waiting for others to connect...\",HardwareTest_OutdatedOSFailure:\"Your operating system is out of date.\",ParticipantControlMenu_Cancel:\"Cancel\",DisabledCameraIndicator_UserCameraLocked:\"This user has had their camera disabled.\",ParticipantNameBar_VideoOfAnotherPersonWithName:\"Video of {0}\",ChatView_SelfSenderName:\"You\",ConfirmScreenSharing_CancelButtonLabel:\"Cancel\",PictureInPictureButton_LeavePiPHeader:\"Return video\",Toasts_GridBandwidthMessage:\"Additional videos will be shown on each page when the connection improves.\",WaitingCard_WaitingContextMessage:\"A care team member will allow you to join your video visit when it is ready to begin.\",GenericError_ParticipantRemovedHeader:\"You were removed from the call\",ParticipantRow_ClickToPin:\"Select to pin.\",LeaveCallButton_LeaveCallHotkey:\"Leave call (Alt+L)\",ToggleRow_VideoToggleTooltip:\"Toggle camera\",VideoPreview_ButtonTitleNoHotkey:\"Shrink this video feed\",RequestOptions_AudioRequest:\"Request microphone access\",ScreenShareAudioIndicator_RemoteSharedAudio:\"This caller is sharing audio.\",ChangeBackgroundButton_ChangeBackground:\"Background effects\",EndVisitAlert_ErrorMessage:\"Failed to end the call for everyone.\",ToggleRow_CloseBackgroundsNoHotkey:\"Close background effects\",SaveButton_AccessibleLabel:\"Save captured image to {0}'s chart\",ParticipantRow_ClickToUnPin:\"Select to unpin.\",useStringsTest_TestString1:\"Hello World!\",Survey_CanNotShareScreen:\"I could not share my screen\",ParticipantNameBar_ClickToUnpinScreen:\"This screen is pinned. Click to unpin.\",ScreenShareWarning_HideForever:\"Do not show again\",useVideoCallAuthentication_AlreadyConnectedAlert:\"You are already connected to a video call. {0}Which call would you like to keep?\",GenericError_CallFullBody:\"The video call has too many people in it. Relaunch the call to try again.\",PictureInPictureButton_EnterPiPHeader:\"Float video\",ParticipantNameBar_SharingAudio:\"Sharing audio\",DisplayModeButton_GridViewShown:\"Grid view shown\",DiscardButton_DiscardButtonTooltip:\"Discard (Alt+T)\",Toasts_UsersWaiting:\"{0} participants are waiting to join the call.\",ParticipantRow_ModeratorAction:\"Select to access moderation options.\",ParticipantMenuSection_DisableAll:\"Mute all\",IntroQuestion_PositiveLabel:\"No issues\",WaitingParticipantRow_Prevent:\"Prevent\",Toasts_SingleParticipantMultiRequest:\"{0} has requested permissions.\",GenericError_AuthRemovedHeader:\"Unable to join the call\",HardwareTest_CameraErrorTitle:\"Could not connect to camera\",ScreenShareButton_StopSharingScreen:\"Stop sharing screen\",BackgroundGallery_Fall:\"fall\",SpeakerSetup_IssueResolution_Mobile:\"If you didn't hear the test sound, try turning up your volume, choosing a different speaker in your device's settings, or using a different device.\",ParticipantControlMenu_Mute:\"Disable audio\",ChatWarning_ChatWarningBannerText:\"Cannot connect to chat. Retrying...\",DisabledCameraIndicator_UserDisabledTheirCamera:\"This user has disabled their camera\",Troubleshooting_Android12Step3:\"Change the setting to Disabled.\",useAudioTrackActions_DefaultError:\"There was a problem connecting to your microphone. Try another microphone.\",DiscardButton_Tooltip:\"Discard\",HardwareTest_CameraError_Test:\"Could not connect to camera. Verify that the camera is not in use by another application. Relaunch the test to try again.\",HeadphoneAudioWarning_Title:\"Potential audio issue\",HardwareTest_GeneralErrorContent_Test:\"Verify that devices are not in use by another application. Relaunch the test to try again.\",LockParticipantScreenShareButton_ShareBlocked:\"Screen sharing has been disabled by an administrator\",ParticipantNameBar_ClickToPinVideo:\"Click to pin this video.\",CameraSetup_Camera:\"Camera\",MicSetup_NoAudioDetected:\"No audio has been detected from your microphone.\",ImageCaptureButton_CancelButton:\"Cancel the image capture\",useVideoTrackActions_NotAllowedError:\"There was a problem connecting to your camera. Allow this browser to use your camera to continue.\",useParticipantName_DefaultName_Numbered:\"Caller {0}\",Toasts_LowBandwidthWarning:\"Paused videos will resume automatically when network conditions improve.\",IPadVideoBugWarning_WarningMessage:\"Check that your browser permissions for camera access are set to Allow and then refresh the page.\",BackgroundSelector_PreviewFailed:\"There was an issue creating the video preview.\",HardwareTest_FailureHeader:\"Hardware Test: Failure\",ParticipantNameBar_PinAnotherScreen:\"Pin another person's screen.\",ToggleRow_BackgroundsLabel:\"Background effects\",ConfirmScreenSharing_StopButtonLabel:\"Stop sharing\",InlineVideoPreview_NoRecentAudio:\"No microphone output recently detected\",WaitingParticipantRow_Cancel:\"Cancel\",DisconnectionPage_PostSurveyMessage:\"Thank you for your response!\",Shared_SystemDefault:\"System Default\",AdmitOptionsMenu_AllowScreenShare:\"Allow participants to share their screen upon admission\",HardwareTest_EstimatedReadyMessageWithTime:\"Get ready for your call estimated to start at {0}\",LobbyHardwareTest_Joining:\"Joining...\",Toasts_AudioRequest:\"{0} has requested microphone access.\",DiscardButton_DiscardButtonAria:\"Discard the captured image without saving.\",WaitingParticipantRow_ConfirmationMessage:\"Prevent {0} from joining this call?\",MuteButton_MuteMicrophone:\"Mute microphone\",BrowserCompatibilityError_ThisBrowserNotRecommended:\"This browser is not recommended\",FullscreenButton_AriaLabel:\"Toggle fullscreen mode\",LanguageSelectorButton_Tooltip:\"Change language (Alt+G)\",WaitingCard_AdmitHeader:\"Patients are ready to be admitted\",ParticipantMenuSection_CareTeamHeader:\"Care team\",RequestOptions_AriaLabel:\"Request access to your microphone or camera\",ParticipantControlMenu_UnMute:\"Allow audio access\",Troubleshooting_Android12Step2:'Search for \"WebRTC hardware video encoding.\"',Alerts_ScreenSharingWarningLabel:\"Screen sharing instructional alert\",Alerts_SessionTimeoutAlertLabel:\"Session timeout alert\",ParticipantControlMenu_PinParticipant:\"Pin\",ScreenShareWarning_Cancel:\"Cancel\",Toasts_RequestAccess:\"Request access\",ExitButton_Discard:\"Discard\",AudioWarningBanner_Header:\"iOS 14.2 issue\",ParticipantNameBar_YourVideoFeed:\"{0} (you) video feed\",InlineVideoPreview_AudioIndicatorLabel:\"Microphone volume indicator, microphone level is {0}%\",ParticipantNameBar_Muted:\"Muted\",AccessibilityAlert_EmptyCall:\"You are the only person in the call.\",HardwareTest_MicrophoneErrorTitle:\"Could not connect to microphone\",ChatView_RetryMessageStatus:\"Message failed to send. Press here to retry\",Survey_OthersNotHearMe:\"Others could not hear me\",useMenuPages_LanguagesTitle:\"Language\",BackgroundGallery_Office:\"office\",LockParticipantMicrophoneButton_AllowMicrophone:\"Allow microphone\",ChatView_OverLimitCharacterCounter:\"This message goes over the length limit by {0} characters\",Toasts_ActiveSpeaker:\"{0} is speaking\",BrowserCompatibilityError_IOSChangeDefaultStep2:\"Select your current browser.\",ConfirmScreenSharing_ConfirmHeader:\"You are about to share this screen.\",HardwareTest_GeneralErrorTitle:\"Could not connect to camera, microphone, or speaker\",Survey_OtherIssue:\"Something else happened\",SkipHardwareTestSection_StopMessage:\"Continue to skip the hardware test for the rest of the day using the same settings \",Toasts_IPadCameraBug:\"There was a problem with your camera. Check that your browser permissions for camera access are set to Allow and then refresh the page.\",SettingsButton_Settings:\"Settings\",MoreMenuButton_Tooltip:\"More options (Alt+O)\",ToggleRow_EnableAudio:\"Enable microphone\",ApplyBackgroundButton_BackgroundCameraOff:\"Other participants will not see your video until applied\",GenericError_ReturnToOngoingCallMessage:\"You are still in the call in another tab. Return to that tab for your ongoing call.\",Survey_CanNotHearOthers:\"I could not hear others\",HeadphoneAudioWarning_UpgradeMessage:\"This device is using an outdated version of iOS and may experience audio issues in video calls. Update your device to the latest version to prevent these issues on future calls.\",VideoPreview_AriaLabel:\"Shrink your video feed.\",SurveyPage_Heading:\"We use your feedback to help improve call quality.\",DescriptionInput_DescriptionHelpText:\"Description\",AudioWarningBanner_HardwareTestText:\"This device is using an outdated IOS version that causes severe audio issue in video calls. Update your device to iOS 14.3 or higher.\",ChatView_UnderLimitCharacterCounter:\"{0} characters remaining\",StandaloneHardwareTest_CheckingYourHardware:\"Checking your hardware...\",RequestOptions_VideoRequest:\"Request camera access\",ParticipantsButton_Label:\"Participants\",LeaveCallButton_Message:\"Are you sure you want to leave the call?\",DescriptionInput_AllowedCharactersWarning:\"Note: Description must be written using letters in the English alphabet.\",Toasts_AudioModerated:\"Your microphone has been disabled.\",ScreenShareBanner_PauseButtonLabel:\"Pause sharing\",GenericError_CallFullHeader:\"The video call is full\",DocumentTypeSelector_DocumentType:\"Document type\",useMenuPages_DevicesTitle:\"Devices\",GenericAlert_OK:\"OK\",HardwareTest_IOSWarningMessage:\"Your operating system is out of date.\",ParticipantsButton_TooltipNoHotkey:\"Participant list\",HardwareTest_MultipleErrorsWarningMessage:\"Verify your hardware before joining the call.\",useStringsTest_TestString2:\"This is an EVC test string.\",BackgroundGalleryToggleRow_ToggleRowLabel:\"Background effects\",Toasts_ImageCaptureReady:\"Ready to capture image\",Toasts_Dismiss:\"Dismiss the notification.\",Alerts_EndVisitAlertLabel:\"End call alert\",MoreParticipantsIndicator_AriaLabel:\"There are {0} additional participants in the call. Click to view all participants.\",ChatView_BlankMessageError:\"Cannot send a blank message\",MoreMenuButton_Label:\"More options\",DisplayModeButton_SpeakerViewShown:\"Speaker view shown\",DescriptionInput_DescriptionLength:\"Characters remaining: {0}\",LeaveCallButton_LeaveCall:\"Leave call\",BrowserCompatibilityError_BrowserNotRecommended:\"Browser not recommended\",SurveyWorkflow_Next:\"Next\",HardwareTest_MicrophoneError_Call:\"Could not connect to microphone. Verify that the microphone is not in use by another application. Relaunch the call to try again.\",ImagePreviewPane_CapturePreviewNoPtName:\"Image capture preview\",LobbyHardwareTest_TimeoutAlert:\"You must join the call in the next minute or else you will be disconnected.\",Alerts_EndCallConfirmationAlertLabel:\"End call confirmation\",GenericError_AuthRemovedBody:\"You were previously removed and cannot join this visit again.\",ParticipantControlMenu_Requested:\"Requested\",DisplayNameInput_Label:\"Display name\",PictureInPictureButton_EnterPiPWithHotkey:\"Float video (Alt+K)\",SkipHardwareTestLoadingScreen_Devices:\"Checking devices\",HardwareTest_ReadyMessage:\"Get ready for your call\",PictureInPictureButton_EnterPiPParticipant:\"Float participant video\",useVideoCallAuthentication_AlreadyConnectedConfirm:\"Keep previous call\",SpeakerSelector_Speaker:\"Speaker\",ChatButton_ChatNotEnabledHoverText:\"Chat not enabled\",AccessibilityAlert_LanguageChanged:\"Language changed to {0}\",ParticipantNameBar_PinYourVideo:\"Pin your video.\",GenericError_ConnectionClosed:\"Connection closed\",ShowMoreButton_AriaLabel:\"Participant control\",ChatDisclaimer_DisclaimerText:\"You will not be able to view the chat after this video visit has ended.\",ParticipantControlMenu_RemoveParticipant:\"Remove from call\",NotFound_PageNotFound:\"Page not found\",ExitButton_CloseWindowTooltipNoHotkey:\"Exit\",useDisconnectHandler_DisconnectWarning:\"Are you sure you want to disconnect?\",DisconnectionPage_FeedbackHeading:\"Let us know if you had problems with audio or video. We use your feedback to help improve call quality.\",ImageCaptureButton_CaptureImageTooltipNoHotkey:\"Capture image\",BackgroundGallery_Winter:\"winter\",ParticipantRow_ScreenLocked:\"Screen share locked\",GenericError_LaunchCallAgainHeader:\"Your session timed out due to inactivity\",HardwareTest_CameraErrorContent_Call:\"Verify that the camera is not in use by another application. Relaunch the Call to try again.\",LobbyHardwareTest_JoinWithAudioIssue:\"Join call with temporary audio issue\",ParticipantControlMenu_DisableCamera:\"Disable video\",ChatButton_NewMessageAriaAlertText:\"New message\",ParticipantsButton_AriaLabel:\"Participant list.\",AudioWarningBanner_LobbyText:\"This device is using an outdated iOS version that causes a severe audio issue in video calls. In the beginning of your call, you will hear distorted audio. Update your device to iOS 14.3 or higher to prevent this issue in future calls.\",WaitingParticipantMenuSection_WaitingHeader:\"Waiting to join\",HardwareTest_CameraError_Call:\"Could not connect to camera. Verify that the camera is not in use by another application. Relaunch the call to try again.\",GenericError_RelaunchTheTest:\"Relaunch the test to try again.\",useMenuPages_DevicesBackButtonLabel:\"Devices menu. Click to return to the main menu.\",ImageCaptureButton_CaptureMode:\"Enter preview mode for image capture\",ToggleRow_VideoToggle:\"Toggle camera\",RequestOptions_TooltipText:\"Request access to your microphone or camera (Alt+Q)\",WaitingParticipantRow_Admit:\"Admit\",Alerts_ExistingConnectionAlertLabel:\"Existing connection alert\",useSaveImageToChart_Discard:\"Discard image\",GenericError_ReturnToOtherOpenCall:\"Return to your other open video call.\",BackgroundGalleryToggleRow_EnableBackgroundEffects:\"Enable background effects\",ApplyBackgroundButton_ApplyBackgroundCamera:\"Apply background and turn on camera\",ShowMoreButton_Title:\"See more options for this user\",Toasts_ScreenShareRequest:\"{0} has requested screen share access.\",BrowserCompatibilityError_LegacyError:\"This version of Microsoft Edge is out of date. Update to the latest version to join the video call.\",GenericError_TooEarlyHeader:\"You're Early\",ManageDevicesButton_ManageDevices:\"Manage devices\",SettingsPanel_SettingsLabel:\"Settings\",ApplyBackgroundButton_BackgroundNotApplied:\"Selected background is not visible to others until applied\",HardwareSetupRow_Error:\"Error\",Spinner_Loading:\"Loading\",ParticipantControlMenu_UnPinParticipant:\"Unpin\",ScreenShareButton_StartSharingScreenWithHotkey:\"Start sharing screen (Alt+S)\",DisconnectionPage_FeedbackPrompt:\"Did you have technical issues?\",MicSetup_MuteMicrophone:\"Mute microphone\",WaitingParticipantMenuSection_AdmitAll:\"Admit all\",useMenuPages_AdmitOptionsTitle:\"Admit options\",GenericError_VisitExpiredHeader:\"Video Visit Expired\",ImageCaptureButton_CaptureImageTooltip:\"Capture image (Alt+I)\",ScreenShareWarning_InterruptParticipantWithName:\"This will stop {0}'s screen share.\",InlineVideoPreview_FrontCamera:\"Video feed for your front camera: {0}\",AccessibilityAlert_BackgroundSetDefault:\"Background Set\",Toasts_DismissText:\"Dismiss\",LockParticipantMicrophoneButton_TurnOffMicrophone:\"Turn off microphone\",Shared_LocalScreenShareIndicator:\"You are sharing this screen\",ChangeCameraButton_Label:\"Change camera\",BackgroundGallery_Planks:\"planks\",GenericError_ParticipantRemovedBodyRejoin:\"If you need to rejoin, launch this call again.\",InactivityChoiceAlert_Extend:\"Extend\",ParticipantNameBar_CallerIsMuted:\"This caller is muted.\",useMenuPages_ParticipantOptionsBackButtonLabel:\"Participant control menu. Click to return to the previous menu. \",LanguageSelectorButton_LabelNoHotkey:\"Change language\",HardwareTest_PermissionsErrorTitle:\"Could not connect to microphone or camera\",HardwareTest_ReadyMessageStandaloneTest:\"Test your hardware settings\",Toasts_ImageCaptured:\"{0} captured an image of your video feed.\",VideoPreview_ButtonTitleAltZ:\"Shrink this video feed (Alt+Z)\",DevicePermissionWarning_AccessibleInstruction:\"When you click Continue, your browser will ask you to allow this page to use your microphone and camera.\",ChatButton_ChatEnabledHoverNoHotkeyText:\"Chat\",WaitingCard_WaitingHeader:\"Waiting for the call to begin...\",MuteButton_UnmuteMicrophone:\"Unmute microphone\",BackgroundGallery_NoneAriaLabel:\"Clear current background\",ImagePreviewPane_CapturePreview:\"Image capture preview\",RequestOptions_Label:\"Request access to your camera or microphone\",ChatView_SentMessageStatus:\"Sent\",HardwareTest_DefaultMessage:\"Let's make sure your hardware is ready for the call.\",HardwareTest_DefaultError_Test:\"Could not connect. Relaunch the test to try again.\",BackgroundGallery_Spring:\"spring\",FullscreenButton_StartLabel:\"Fullscreen mode\",Toasts_UnreadMessageText:\"You have an unread message.\",ChatView_PlaceholderMessage:\"Type a message\",ScreenShareWarning_InterruptParticipant:\"This will stop the current screen share.\",BrowserCompatibilityError_IOSError:\"Safari is our recommended browser for this device. If you experience problems with the call, try using another device or change your default browser to Safari and relaunch the call. To change your default browser:\",ScreenShareButton_StartSharingScreen:\"Start sharing screen\",HardwareTest_PermissionsErrorContent_Test:\"Check your media permissions settings, relaunch the test, and allow access to your audio and video devices.\",ParticipantRow_MutedParticipant:\"{0}, muted.\",ChoiceAlertBase_No:\"No\",AudioWarningBanner_AriaLabel:\"Hide or show warning for iOS version 14.2\",ScreenShareAudioIndicator_RemoteSharedAudioWithName:\"{0} is sharing audio.\",ChangeCameraButton_LabelWithHotkey:\"Change camera (Alt+H)\",useMenuPages_AboutEvcBackButtonLabel:\"About Epic Video Client. Click to return to the main menu.\",AdmitOptionsButton_Label:\"Admit options\",BrowserSupportWarning_Message:\"If you experience any audio or video issues during your call, consider trying one of our recommended browsers.\",StandaloneHardwareTest_TestAgain:\"Test again\",ParticipantControlMenu_EnableCamera:\"Allow video access\",ParticipantNameBar_ScreenOfAnotherPerson:\"Screen of another person\",BaseMenu_OptionLabel:\" option {0} of {1}\",LockParticipantCameraButton_TurnOffCamera:\"Turn off camera\",DisableCameraButton_EnableCameraWithHotkey:\"Enable camera (Alt+R)\",ExitButton_CloseWindowAria:\"Close the image capture preview\",GenericError_SomethingWentWrong:\"Something went wrong\",useMenuPages_BackgroundTitle:\"Background effects\",MenuPage_BackLabel:\"select to return to the main menu\",ScreenShareButton_Label:\"Share screen\",useFeedbackTimeoutWarning_TimeoutWarningMessage:\"The feedback survey will end soon. Time remaining:\",BrowserCompatibilityError_IOSChangeDefaultStep3:\"In the Default Browser App setting, select Safari.\",Alerts_InactivityAlertLabel:\"Inactivity alert\",RequestOptions_AriaLabelGeneric:\"Request access to your disabled permissions\",BackgroundGallery_Blur:\"Blur\",Survey_IsVideoLowQuality:\"Poor video quality\",MicSetup_NoPermissions:\"Browser permissions denied for microphone.\",ParticipantNameBar_VideoOfAnotherPerson:\"Video of another person.\",CameraSetup_CouldNotConnect:\"Could not connect to your camera.\",ParticipantControlMenu_VideoAriaLabel:\"This user has requested access to their camera.\",Toasts_VideoModerated:\"Your camera has been disabled.\",VideoPreview_AriaLabelOthers:\"Shrink the other caller's video feed.\",WaitingCard_AppointmentTime:\"Appointment time: {0}\",MicSetup_Microphone:\"Microphone\",MicSetup_NoMicrophoneDetected:\"No microphone detected.\",HardwareTest_GeneralError_Test:\"Could not connect to camera, microphone, or speaker. Verify that devices are not in use by another application. Relaunch the test to try again.\",ScreenShareBanner_StopButtonLabel:\"Stop sharing\",useMenuPages_ParticipantListTitle:\"Participants\",HardwareTest_PermissionsError_Test:\"Could not connect to microphone or camera. Check your browser's microphone and camera permissions, allow your microphone and camera to be used, and relaunch the test.\",AboutEvc_Subtitle:\"Copyright notice\",BrowserCompatibilityError_BrowserDoesNotSupportVideo:\"This browser does not support video calling\",TestSpeakerButton_ButtonLabel:\"Test speaker\",HardwareTest_WarningHeader:\"Hardware Test: Warning\",DisplayModeButton_ToggleGrid:\"Switch to grid view\",PagingSection_NextPage:\"Advance to the next page\",HardwareTest_PermissionsError_Call:\"Could not connect to microphone or camera. Check your browser's microphone and camera permissions, allow your microphone and camera to be used, and relaunch the call.\",HardwareTest_GeneralErrorContent_Call:\"Verify that devices are not in use by another application. Relaunch the call to try again.\",Toasts_ActiveSpeaker_DefaultName:\"Another participant is speaking\",ExitButton_DiscardConfirm:\"The image will be discarded and not saved to the patient's chart. Are you sure you want to proceed?\",useMenuPages_LanguagesBackButtonLabel:\"Language list. Click to return to the main menu.\",GenericError_TooEarlyBody:\"You may not join the video visit at this time. Please rejoin closer to the scheduled time.\",Survey_CanNotSeeOthers:\"I could not see others\",DevicePermissionWarning_AllowDevices:\"Allow this page to use your devices.\",ChatView_SingleUserIsTyping:\"{0} is typing\",Shared_ConnectingToOrganization:\"Connecting to your organization\",PictureInPictureButton_PiPDisabled:\"Float video unavailable\",Toasts_Enable:\"Unlock\",TextInput_InvalidCharactersMessage:\"Some of the text you've entered cannot be submitted. Please remove the following characters: {0}\",WaitingCard_PatientName:\"Patient name: {0}\",ToggleRow_OpenSettingsNoHotkey:\"Open settings\",ConfirmScreenSharing_ContinueButtonLabel:\"Continue sharing\",RequestOptions_ScreenShareRequest:\"Request screen share access\",useSaveImageToChart_FailedToSave:\"Failed to save the image to the patient's chart. You may attempt to save this image again, or discard it and try again later.\",ParticipantControlMenu_RemoveAlertTextCareTeam:\"Remove {0} from the call?\",LobbyHardwareTest_CheckingHardware:\"Checking your hardware...\",Toasts_GrantAccess:\"Allow\",VideoPreview_ButtonTitleGrowNoTooltip:\"Grow this video feed\",Toasts_OpenMenu:\"Open menu\",ChatView_SystemSenderName:\"System\",Survey_VideoGroup:\"Video\",GenericError_FailedToConnect:\"Failed to connect to the call. Relaunch the call to try again.\",ChatView_SendButtonText:\"Send\",ScreenShareBanner_Header:\"You are sharing your screen.\",PagingSection_PreviousPage:\"Return to the previous page\"},\"da-dk\":{LanguageSelectorButton_AriaLabel:\"Skift sprog\",GenericError_TooEarlyBody:\"Du kan ikke deltage i videobesøget på nuværende tidspunkt. Prøv igen tættere på det planlagte tidspunkt.\",LanguageSelectorButton_Tooltip:\"Skift sprog (Alt+G)\",Shared_ConnectingToOrganization:\"Opretter forbindelse til din organisation\",LanguageSelectorButton_LabelNoHotkey:\"Skift sprog\",useVideoCallAuthentication_AlreadyConnectedAlert:\"Du er allerede forbundet til et videoopkald. {0}Hvilket opkald vil du beholde?\",Troubleshooting_Android12Step1:\"Åbn en ny fane i din webbrowser, og gå til chrome://flags.\",GenericError_SomethingWentWrong:\"Noget gik galt\",BrowserCompatibilityError_ThisBrowserNotRecommended:\"Denne browser anbefales ikke\",Troubleshooting_Android12Header:\"Løs problemet med videoen\",useVideoCallAuthentication_AlreadyConnectedConfirm:\"Behold forrige opkald\",GenericError_ReturnToOngoingCallHeader:\"Vend tilbage til det igangværende opkald\",DisconnectionPage_BodyText:\"Hvis du vil deltage igen, skal du åbne opkaldet igen.\",NotFound_Header:\"Beklager, vi kan ikke finde den side\",GenericError_AuthRemovedBody:\"Du er tidligere blevet fjernet og kan ikke deltage i dette besøg igen.\",LoadingLanguageToast_LoadingLanguage:\"Indlæser oversættelser...\",GenericError_VisitExpiredHeader:\"Videobesøg udløbet\",GenericError_AuthRemovedHeader:\"Kan ikke deltage i opkaldet\",BrowserCompatibilityError_UseSupportedBrowser:\"Brug en af disse anbefalede browsere til at deltage i videoopkaldet.\",DisconnectionPage_Title:\"Du har forladt videoopkaldet\",GenericError_ReturnToOngoingCallMessage:\"Du er stadig med i opkaldet på en anden fane. Gå tilbage til den fane for dit igangværende opkald.\",GenericError_RelaunchTheTest:\"Genstart testen for at prøve igen.\",Troubleshooting_Android12Step3:\"Skift indstillingen til Disabled.\",BrowserCompatibilityError_IOSChangeDefaultStep2:\"Vælg din aktuelle browser.\",Troubleshooting_Android12BodyText:\"Der er et problem med at sende video på din enhed. Følg disse trin for at løse problemet:\",GenericError_VisitExpiredBody:\"Du kan ikke længere deltage i dette videobesøg.\",BrowserCompatibilityError_BrowserNotSupported:\"Browser understøttes ikke\",Alerts_ExistingConnectionAlertLabel:\"Eksisterende forbindelsesadvarsel\",BrowserCompatibilityError_IOSChangeDefaultStep3:\"Vælg Safari i standardindstillingen for browserapp.\",BrowserCompatibilityError_LegacyError:\"Denne version af Microsoft Edge er forældet. Opdater til den seneste version for at deltage i videoopkaldet.\",NotFound_PageNotFound:\"Siden blev ikke fundet\",Shared_DefaultPageTitle:\"Epic Telesundhed\",Spinner_Loading:\"Indlæser\",BrowserCompatibilityError_IOSChangeDefaultStep1:\"Gå til indstillinger. \",useVideoCallAuthentication_AlreadyConnectedCancel:\"Fortsæt til dette opkald\",BrowserCompatibilityError_BrowserNotRecommended:\"Browser anbefales ikke\",BrowserCompatibilityError_IOSError:\"Safari er vores anbefalede browser til denne enhed. Hvis du oplever problemer med opkaldet, så prøv at bruge en anden enhed eller skift din standardbrowser til Safari og genstart opkaldet. Du kan ændre din standardbrowser således:\",NotFound_BodyText:\"Hvis du forsøger at oprette forbindelse til et videoopkald, skal du gå tilbage til opkaldslinket og starte det igen.\",GenericError_RelaunchTheCall:\"Genstart opkaldet for at prøve igen\",BrowserCompatibilityError_BrowserDoesNotSupportVideo:\"Denne browser understøtter ikke videoopkald\",GenericError_FailedToConnect:\"Kunne ikke oprette forbindelse til opkaldet. Genstart opkaldet for at prøve igen.\",LanguageSelectorButton_ButtonLabel:\"Sprog\",GenericError_TooEarlyHeader:\"Det er lidt for tidligt\",Troubleshooting_Android12Step2:'Søg efter \"WebRTC hardware video encoding.\"'},\"de-de\":{LanguageSelectorButton_AriaLabel:\"Sprache ändern\",GenericError_TooEarlyBody:\"Sie können momentan nicht am Videotermin teilnehmen. Näher am geplanten Termin erneut versuchen.\",LanguageSelectorButton_Tooltip:\"Sprache ändern (Alt+G)\",Shared_ConnectingToOrganization:\"Verbindung zu Ihrer Organisation wird hergestellt\",LanguageSelectorButton_LabelNoHotkey:\"Sprache ändern\",useVideoCallAuthentication_AlreadyConnectedAlert:\"Sie sind bereits mit einem Videoanruf verbunden. {0}Welchen Anruf möchten Sie beibehalten?\",Troubleshooting_Android12Step1:\"Öffnen Sie ein neues Register in Ihrem Webbrowser und gehen Sie zu chrome://flags.\",GenericError_SomethingWentWrong:\"Da hat etwas nicht geklappt\",BrowserCompatibilityError_ThisBrowserNotRecommended:\"Dieser Browser wird nicht empfohlen\",Troubleshooting_Android12Header:\"Videoproblem lösen\",useVideoCallAuthentication_AlreadyConnectedConfirm:\"Vorherigen Anruf beibehalten\",GenericError_ReturnToOngoingCallHeader:\"Zum laufenden Anruf zurückkehren\",DisconnectionPage_BodyText:\"Wenn Sie erneut teilnehmen möchten, starten Sie den Anruf erneut.\",NotFound_Header:\"Diese Seite konnte leider nicht gefunden werden\",GenericError_AuthRemovedBody:\"Sie wurden zuvor entfernt und können nicht erneut an diesem Termin teilnehmen.\",LoadingLanguageToast_LoadingLanguage:\"Übersetzungen werden geladen...\",GenericError_VisitExpiredHeader:\"Videotermin abgelaufen\",GenericError_AuthRemovedHeader:\"Teilnahme am Anruf nicht möglich\",BrowserCompatibilityError_UseSupportedBrowser:\"Verwenden Sie einen dieser empfohlenen Browser, um am Videoanruf teilzunehmen.\",DisconnectionPage_Title:\"Sie haben den Videoanruf verlassen\",GenericError_ReturnToOngoingCallMessage:\"Sie befinden sich noch immer im Anruf in einem anderen Register. Kehren Sie für Ihren laufenden Anruf zu diesem Register zurück.\",GenericError_RelaunchTheTest:\"Test erneut starten, um es noch einmal zu versuchen.\",Troubleshooting_Android12Step3:\"Ändern Sie die Einstellung auf „Deaktiviert“.\",BrowserCompatibilityError_IOSChangeDefaultStep2:\"Wählen Sie Ihren aktuellen Browser aus.\",Troubleshooting_Android12BodyText:\"Beim Senden des Videos auf Ihrem Gerät ist ein Problem aufgetreten. Befolgen Sie diese Schritte, um das Problem zu beheben:\",GenericError_VisitExpiredBody:\"Sie können nicht mehr an diesem Videotermin teilnehmen.\",BrowserCompatibilityError_BrowserNotSupported:\"Browser wird nicht unterstützt\",Alerts_ExistingConnectionAlertLabel:\"Benachrichtigung zur bestehenden Verbindung\",BrowserCompatibilityError_IOSChangeDefaultStep3:\"Wählen Sie in der Einstellung für die Standardbrowser-App „Safari“ aus.\",BrowserCompatibilityError_LegacyError:\"Diese Version von Microsoft Edge ist veraltet. Aktualisieren Sie auf die neueste Version, um am Videoanruf teilzunehmen.\",NotFound_PageNotFound:\"Seite nicht gefunden\",Shared_DefaultPageTitle:\"Epic-Telemedizin\",Spinner_Loading:\"Wird geladen\",BrowserCompatibilityError_IOSChangeDefaultStep1:\"Zu „Einstellungen“ wechseln. \",useVideoCallAuthentication_AlreadyConnectedCancel:\"Mit diesem Anruf fortfahren\",BrowserCompatibilityError_BrowserNotRecommended:\"Browser wird nicht empfohlen\",BrowserCompatibilityError_IOSError:\"Safari ist unser empfohlener Browser für dieses Gerät. Wenn Probleme mit dem Anruf auftreten, versuchen Sie es mit einem anderen Gerät oder ändern Sie Ihren Standardbrowser auf Safari und starten Sie den Anruf neu. So ändern Sie Ihren Standardbrowser:\",NotFound_BodyText:\"Wenn Sie versuchen, eine Verbindung zu einem Videoanruf herzustellen, wechseln Sie zurück zum Anruflink und starten Sie ihn erneut.\",GenericError_RelaunchTheCall:\"Starten Sie den Anruf erneut, um es noch einmal zu versuchen\",BrowserCompatibilityError_BrowserDoesNotSupportVideo:\"Dieser Browser unterstützt keine Videoanrufe\",GenericError_FailedToConnect:\"Verbindung fehlgeschlagen. Starten Sie den Anruf erneut, um es noch einmal zu versuchen.\",LanguageSelectorButton_ButtonLabel:\"Sprache\",GenericError_TooEarlyHeader:\"Sie sind etwas zu früh\",Troubleshooting_Android12Step2:\"Nach „WebRTC-Hardware-Videocodierung“ suchen.\"},\"nb-no\":{LanguageSelectorButton_AriaLabel:\"Endre språk\",GenericError_TooEarlyBody:\"Du kan ikke delta i videobesøket på dette tidspunktet. Bli med på nytt nærmere det bestilte tidspunktet.\",LanguageSelectorButton_Tooltip:\"Endre språk (Alt+G)\",Shared_ConnectingToOrganization:\"Kobler til organisasjonen din\",LanguageSelectorButton_LabelNoHotkey:\"Endre språk\",useVideoCallAuthentication_AlreadyConnectedAlert:\"Du er allerede tilkoblet et videoanrop. {0}Hvilket anrop vil du beholde?\",Troubleshooting_Android12Step1:\"Åpne en ny fane i nettleseren og gå til chrome://flags.\",GenericError_SomethingWentWrong:\"Det oppstod en feil\",BrowserCompatibilityError_ThisBrowserNotRecommended:\"Denne nettleseren anbefales ikke\",Troubleshooting_Android12Header:\"Løs videoproblemet\",useVideoCallAuthentication_AlreadyConnectedConfirm:\"Behold forrige anrop\",GenericError_ReturnToOngoingCallHeader:\"Gå tilbake til det pågående anropet\",DisconnectionPage_BodyText:\"Hvis du vil bli med igjen, starter du anropet på nytt.\",NotFound_Header:\"Beklager, vi finner ikke den siden\",GenericError_AuthRemovedBody:\"Du ble fjernet tidligere og kan ikke bli med i dette besøket igjen.\",LoadingLanguageToast_LoadingLanguage:\"Laster inn oversettelser …\",GenericError_VisitExpiredHeader:\"Videobesøk utløpt\",GenericError_AuthRemovedHeader:\"Kan ikke bli med i anropet\",BrowserCompatibilityError_UseSupportedBrowser:\"Bruk en av følgende anbefalte nettlesere for å bli med i videoanropet.\",DisconnectionPage_Title:\"Du har forlatt videoanropet\",GenericError_ReturnToOngoingCallMessage:\"Du er fortsatt i anropet på en annen fane. Gå tilbake til den fanen for det pågående anropet ditt.\",GenericError_RelaunchTheTest:\"Start testen på nytt for å prøve igjen.\",Troubleshooting_Android12Step3:\"Endre innstillingen til Disabled (deaktivert).\",BrowserCompatibilityError_IOSChangeDefaultStep2:\"Velg din gjeldende nettleser.\",Troubleshooting_Android12BodyText:\"Det er et problem med sending av video på enheten din. Følg disse trinnene for å løse problemet:\",GenericError_VisitExpiredBody:\"Du kan ikke lenger bli med i dette videobesøket.\",BrowserCompatibilityError_BrowserNotSupported:\"Nettleser ikke støttet\",Alerts_ExistingConnectionAlertLabel:\"Varsel om eksisterende tilkobling\",BrowserCompatibilityError_IOSChangeDefaultStep3:\"Velg Safari i innstillingen Standard nettleserapp.\",BrowserCompatibilityError_LegacyError:\"Denne versjonen av Microsoft Edge er utdatert. Oppdater til den nyeste versjonen for å bli med i videoanropet.\",NotFound_PageNotFound:\"Side ikke funnet\",Shared_DefaultPageTitle:\"Epic Telemedisin\",Spinner_Loading:\"Laster inn\",BrowserCompatibilityError_IOSChangeDefaultStep1:\"Gå til Innstillinger. \",useVideoCallAuthentication_AlreadyConnectedCancel:\"Fortsett til dette anropet\",BrowserCompatibilityError_BrowserNotRecommended:\"Nettleser ikke anbefalt\",BrowserCompatibilityError_IOSError:\"Safari er vår anbefalte nettleser for denne enheten. Hvis du opplever problemer med anropet, kan du prøve å bruke en annen enhet eller endre standardnettleser til Safari og starte anropet på nytt. Slik endrer du standardnettleser:\",NotFound_BodyText:\"Hvis du prøver å koble til et videoanrop, går du tilbake til anropskoblingen og åpner den på nytt.\",GenericError_RelaunchTheCall:\"Start anropet på nytt for å prøve igjen\",BrowserCompatibilityError_BrowserDoesNotSupportVideo:\"Denne nettleseren støtter ikke videoanrop\",GenericError_FailedToConnect:\"Kunne ikke koble til anropet. Start anropet på nytt for å prøve igjen.\",LanguageSelectorButton_ButtonLabel:\"Språk\",GenericError_TooEarlyHeader:\"Du er tidlig ute\",Troubleshooting_Android12Step2:\"Søk etter «WebRTC hardware video encoding».\"},\"ar-ae\":{LanguageSelectorButton_AriaLabel:\"تغيير اللغة\",GenericError_TooEarlyBody:\"لا يمكنك الانضمام إلى زيارة الفيديو في هذا الوقت. الرجاء إعادة الانضمام أقرب إلى الوقت المحدد.\",LanguageSelectorButton_Tooltip:\"تغيير اللغة (Alt+G)\",Shared_ConnectingToOrganization:\"الاتصال مع منظمتك\",LanguageSelectorButton_LabelNoHotkey:\"تغيير اللغة\",useVideoCallAuthentication_AlreadyConnectedAlert:\"أنت متصل بالفعل بمكالمة فيديو. {0}ما هي المكالمة التي ترغب في الاحتفاظ بها؟\",Troubleshooting_Android12Step1:\"افتح علامة تبويب جديدة في المتصفح وانتقل إلى chrome://flags.\",GenericError_SomethingWentWrong:\"حصل خطأ ما\",BrowserCompatibilityError_ThisBrowserNotRecommended:\"هذا المتصفح لا يُنصح به\",Troubleshooting_Android12Header:\"حل مشكلة الفيديو\",useVideoCallAuthentication_AlreadyConnectedConfirm:\"احتفظ بالمكالمة السابقة\",GenericError_ReturnToOngoingCallHeader:\"العودة إلى المكالمة الجارية\",DisconnectionPage_BodyText:\"إذا كنت ترغب في الانضمام مرة أخرى، ابدأ المكالمة مرة أخرى.\",NotFound_Header:\"عذراً، لا يمكننا العثور على تلك الصفحة\",GenericError_AuthRemovedBody:\"تمت إزالتك سابقًا ولا يمكنك الانضمام إلى هذه الزيارة مرة أخرى.\",LoadingLanguageToast_LoadingLanguage:\"جارٍ تحميل الترجمات...\",GenericError_VisitExpiredHeader:\"انتهت زيارة الفيديو\",GenericError_AuthRemovedHeader:\"غير قادر على الانضمام إلى المكالمة\",BrowserCompatibilityError_UseSupportedBrowser:\"استخدم أحد هذه المتصفحات الموصى بها للانضمام إلى مكالمة الفيديو.\",DisconnectionPage_Title:\"لقد قمت بمغادرة زيارة الفيديو\",GenericError_ReturnToOngoingCallMessage:\"أنت لا تزال في المكالمة في علامة تبويب أخرى. ارجع إلى علامة التبويب تلك لإجراء مكالمتك الجارية.\",GenericError_RelaunchTheTest:\"أعد تشغيل الاختبار للمحاولة مرة أخرى.\",Troubleshooting_Android12Step3:\"قم بتغيير الإعداد إلى معطل.\",BrowserCompatibilityError_IOSChangeDefaultStep2:\"اختر متصفحك الحالي.\",Troubleshooting_Android12BodyText:\"هناك مشكلة في إرسال الفيديو على جهازك. لحل المشكلة، اتبع الخطوات التالية:\",GenericError_VisitExpiredBody:\"لم يعد بإمكانك الانضمام إلى زيارة الفيديو هذه.\",BrowserCompatibilityError_BrowserNotSupported:\"متصفح غير مدعوم\",Alerts_ExistingConnectionAlertLabel:\"تنبيه الاتصال الحالي\",BrowserCompatibilityError_IOSChangeDefaultStep3:\"في إعداد تطبيق المتصفح الافتراضي، حدد سفاري.\",BrowserCompatibilityError_LegacyError:\"هذا الإصدار من Microsoft Edge قديم. قم بالتحديث إلى أحدث إصدار للانضمام إلى مكالمة الفيديو.\",NotFound_PageNotFound:\"الصفحة غير موجودة\",Shared_DefaultPageTitle:\"Epic Telehealth\",Spinner_Loading:\"جاري التحميل\",BrowserCompatibilityError_IOSChangeDefaultStep1:\"اذهب إلى الإعدادات. \",useVideoCallAuthentication_AlreadyConnectedCancel:\"استمر في هذا الاتصال\",BrowserCompatibilityError_BrowserNotRecommended:\"متصفح لا يُنصح به\",BrowserCompatibilityError_IOSError:\"سفاري هو متصفحنا الموصى به لهذا الجهاز. إذا كنت تواجه مشكلات مع المكالمة، فحاول استخدام جهاز آخر أو قم بتغيير متصفحك الافتراضي إلى سفاري وأعد تشغيل المكالمة. لتغيير متصفحك الافتراضي:\",NotFound_BodyText:\"إذا كنت تحاول الاتصال بمكالمة فيديو، فارجع إلى رابط الاتصال وقم بتشغيله مرة أخرى.\",GenericError_RelaunchTheCall:\"أعد تشغيل المكالمة للمحاولة مرة أخرى\",BrowserCompatibilityError_BrowserDoesNotSupportVideo:\"هذا المتصفح لا يدعم اتصال الفيديو\",GenericError_FailedToConnect:\"فشل الاتصال بالمكالمة. أعد تشغيل المكالمة للمحاولة مرة أخرى.\",LanguageSelectorButton_ButtonLabel:\"اللغة\",GenericError_TooEarlyHeader:\"أتيت مبكراً\",Troubleshooting_Android12Step2:'ابحث عن \"WebRTC hardware video encoding.\"'},\"es-us\":{LanguageSelectorButton_AriaLabel:\"Cambiar idioma\",GenericError_TooEarlyBody:\"No puede unirse a la teleconsulta en este momento. Vuelva a unirse más cerca de la hora programada.\",LanguageSelectorButton_Tooltip:\"Cambiar idioma (Alt+G)\",Shared_ConnectingToOrganization:\"Conectándose a su organización\",LanguageSelectorButton_LabelNoHotkey:\"Cambiar idioma\",useVideoCallAuthentication_AlreadyConnectedAlert:\"Ya está conectado/a a una videollamada. {0}¿Qué llamada quiere mantener?\",Troubleshooting_Android12Step1:\"Abra una pestaña nueva en su navegador de internet y vaya a chrome://flags.\",GenericError_SomethingWentWrong:\"Algo falló\",BrowserCompatibilityError_ThisBrowserNotRecommended:\"Este navegador no es compatible\",Troubleshooting_Android12Header:\"Resolver el problema de video\",useVideoCallAuthentication_AlreadyConnectedConfirm:\"Mantener la llamada previa\",GenericError_ReturnToOngoingCallHeader:\"Volver a la llamada activa\",DisconnectionPage_BodyText:\"Si desea unirse otra vez, vuelva a abrir la llamada.\",NotFound_Header:\"Disculpe, no pudimos encontrar esa página\",GenericError_AuthRemovedBody:\"Usted fue previamente quitado/a y no puede volver a unirse a esta visita.\",LoadingLanguageToast_LoadingLanguage:\"Cargando traducciones...\",GenericError_VisitExpiredHeader:\"Teleconsulta caducada\",GenericError_AuthRemovedHeader:\"No puede unirse a la llamada\",BrowserCompatibilityError_UseSupportedBrowser:\"Use uno de los navegadores compatibles para unirse a la videollamada.\",DisconnectionPage_Title:\"Salió de la videollamada\",GenericError_ReturnToOngoingCallMessage:\"Todavía está conectado/a a la llamada en otra pestaña. Regrese a la pestaña con la llamada activa.\",GenericError_RelaunchTheTest:\"Reinicie la prueba para intentar de nuevo.\",Troubleshooting_Android12Step3:\"Cambie la configuración a Disabled.\",BrowserCompatibilityError_IOSChangeDefaultStep2:\"Seleccionar su navegador actual.\",Troubleshooting_Android12BodyText:\"Hay un problema mandando video a su dispositivo. Para resolver este problema, siga estos pasos:\",GenericError_VisitExpiredBody:\"Ya no puede unirse a esta teleconsulta.\",BrowserCompatibilityError_BrowserNotSupported:\"El navegador no es compatible\",Alerts_ExistingConnectionAlertLabel:\"Alerta de una conexión existente\",BrowserCompatibilityError_IOSChangeDefaultStep3:\"Seleccionar Safari en la configuración de Navegador predeterminado.\",BrowserCompatibilityError_LegacyError:\"Su versión de Microsoft Edge es anticuada. Actualice a la versión más reciente para unirse a la videollamada.\",NotFound_PageNotFound:\"Página no encontrada\",Shared_DefaultPageTitle:\"Epic Telesalud\",Spinner_Loading:\"Cargando\",BrowserCompatibilityError_IOSChangeDefaultStep1:\"Ir a Configuración. \",useVideoCallAuthentication_AlreadyConnectedCancel:\"Continuar a esta llamada\",BrowserCompatibilityError_BrowserNotRecommended:\"Este navegador no es recomendado\",BrowserCompatibilityError_IOSError:\"Se recomienda Safari como navegador para este dispositivo. Si tiene problemas con la llamada, use otro dispositivo o cambie su navegador predeterminado a Safari e intente la llamada otra vez. Para cambiar su navegador predeterminado:\",NotFound_BodyText:\"Si está tratando de conectarse a una videollamada, regrese al vínculo de la llamada y vuelva a iniciarla.\",GenericError_RelaunchTheCall:\"Reinicie la llamada para intentarlo otra vez\",BrowserCompatibilityError_BrowserDoesNotSupportVideo:\"El navegador no es compatible con videollamadas\",GenericError_FailedToConnect:\"No se pudo conectar a la llamada. Reinicie la llamada para intentarla otra vez.\",LanguageSelectorButton_ButtonLabel:\"Idioma\",GenericError_TooEarlyHeader:\"Llegó temprano\",Troubleshooting_Android12Step2:'Busque \"WebRTC hardware video encoding.\"'},\"zh-ushans\":{LanguageSelectorButton_AriaLabel:\"更改语言\",GenericError_TooEarlyBody:\"您此时无法加入视频就诊。请在接近预定的时间时再重新加入。\",LanguageSelectorButton_Tooltip:\"更改语言(Alt+G)\",Shared_ConnectingToOrganization:\"正在连接您的机构\",LanguageSelectorButton_LabelNoHotkey:\"更改语言\",useVideoCallAuthentication_AlreadyConnectedAlert:\"您已经连接了视频就诊。{0}您想要保留哪个通话?\",Troubleshooting_Android12Step1:\"在您的浏览器中打开一个新的标签页,前往chrome://flags。\",GenericError_SomethingWentWrong:\"出错啦\",BrowserCompatibilityError_ThisBrowserNotRecommended:\"不推荐使用此浏览器\",Troubleshooting_Android12Header:\"解决视频问题\",useVideoCallAuthentication_AlreadyConnectedConfirm:\"保留前一个通话\",GenericError_ReturnToOngoingCallHeader:\"返回正在进行的通话\",DisconnectionPage_BodyText:\"如果您想要重新加入,请再次启动这个通话。\",NotFound_Header:\"对不起,我们找不到那个页面\",GenericError_AuthRemovedBody:\"您之前被删除,无法再次加入此次就诊。\",LoadingLanguageToast_LoadingLanguage:\"正在加载翻译……\",GenericError_VisitExpiredHeader:\"视频就诊已过期\",GenericError_AuthRemovedHeader:\"无法加入通话。\",BrowserCompatibilityError_UseSupportedBrowser:\"使用这些推荐的浏览器之一以加入视频通话。\",DisconnectionPage_Title:\"您已离开视频通话\",GenericError_ReturnToOngoingCallMessage:\"您仍然在另一个标签页的通话中。返回那个标签页继续您正在进行的通话。\",GenericError_RelaunchTheTest:\"重新启动测试以再次尝试。\",Troubleshooting_Android12Step3:\"更改设置为禁用。\",BrowserCompatibilityError_IOSChangeDefaultStep2:\"选择您当前的浏览器。\",Troubleshooting_Android12BodyText:\"在您的设备上发送视频出现问题。要解决这个问题,请遵循以下步骤:\",GenericError_VisitExpiredBody:\"您无法再加入这次视频就诊。\",BrowserCompatibilityError_BrowserNotSupported:\"浏览器不支持\",Alerts_ExistingConnectionAlertLabel:\"现有连接警告\",BrowserCompatibilityError_IOSChangeDefaultStep3:\"在默认浏览器设置中,选择Safari。\",BrowserCompatibilityError_LegacyError:\"这个版本的Microsoft Edge已经过时。更新到最新版本以加入视频通话。\",NotFound_PageNotFound:\"无法找到该页\",Shared_DefaultPageTitle:\"Epic远程医疗\",Spinner_Loading:\"加载中\",BrowserCompatibilityError_IOSChangeDefaultStep1:\"前往设置。 \",useVideoCallAuthentication_AlreadyConnectedCancel:\"继续这个通话\",BrowserCompatibilityError_BrowserNotRecommended:\"浏览器不推荐\",BrowserCompatibilityError_IOSError:\"Safari是我们为此设备推荐的浏览器。如果您在通话中遇到问题,请尝试使用其他设备或更换您的默认浏览器为Safari,然后重新启动通话。要更改您的默认浏览器:\",NotFound_BodyText:\"如果您试图连接到一个视频通话,请返回通话连接并再次启动。\",GenericError_RelaunchTheCall:\"重新启动通话以再次尝试\",BrowserCompatibilityError_BrowserDoesNotSupportVideo:\"这个浏览器不支持视频通话\",GenericError_FailedToConnect:\"连接到通话失败。重新启动通话以再次尝试。\",LanguageSelectorButton_ButtonLabel:\"语言\",GenericError_TooEarlyHeader:\"您来早了\",Troubleshooting_Android12Step2:\"搜索“WebRTC硬件视频编码”。\"},\"ht-us\":{LanguageSelectorButton_AriaLabel:\"Chanje lang\",GenericError_TooEarlyBody:\"Ou pa kapab patisipe nan vizit videyo a nan lè sa a. Tanpri rejwenn pi pre lè pwograme a.\",LanguageSelectorButton_Tooltip:\"Chanje lang (Alt+G)\",Shared_ConnectingToOrganization:\"Nap konekte nan òganizasyon w la\",LanguageSelectorButton_LabelNoHotkey:\"Chanje lang\",useVideoCallAuthentication_AlreadyConnectedAlert:\"Ou deja konekte nan yon apèl videyo. {0}Ki apèl ou vle kenbe?\",Troubleshooting_Android12Step1:\"Louvri yon nouvo tab nan navigatè entènèt ou an epi ale nan chrome://flags.\",GenericError_SomethingWentWrong:\"Gen yon bagay ki pase mal\",BrowserCompatibilityError_ThisBrowserNotRecommended:\"Navigatè sa a pa rekòmande\",Troubleshooting_Android12Header:\"Rezoud pwoblèm videyo a\",useVideoCallAuthentication_AlreadyConnectedConfirm:\"Kenbe apèl anvan\",GenericError_ReturnToOngoingCallHeader:\"Retounen nan apèl la kounye a\",DisconnectionPage_BodyText:\"Si w bezwen rejwenn, lanse apèl sa a ankò.\",NotFound_Header:\"Padon, nou pa ka jwenn paj sa a\",GenericError_AuthRemovedBody:\"Yo te deja retire ou anvan sa kidonk ou pa kapab rantre nan apèl la ankò.\",LoadingLanguageToast_LoadingLanguage:\"Nou ap chaje tradiksyon yo...\",GenericError_VisitExpiredHeader:\"Vizit Videyo Ekspire\",GenericError_AuthRemovedHeader:\"Ou pa kapab rantre nan apèl la\",BrowserCompatibilityError_UseSupportedBrowser:\"Sèvi ak youn nan navigatè ki rekòmande pou rantre nan apèl videyo.\",DisconnectionPage_Title:\"Ou te kite apèl videyo a\",GenericError_ReturnToOngoingCallMessage:\"Ou toujou sou apèl la nan yon lòt tab. Retounen nan tab sa a pou apèl ou ye kounye a.\",GenericError_RelaunchTheTest:\"Relanse tès la pou eseye ankò.\",Troubleshooting_Android12Step3:\"Chanje konfigirasyon an a Desaktive.\",BrowserCompatibilityError_IOSChangeDefaultStep2:\"Chwazi navigatè ou ap itilize kounye a.\",Troubleshooting_Android12BodyText:\"Gen yon pwoblèm avèk voye videyo nan aparèy ou an. Pou rezoud pwoblèm nan, swiv etap sa yo:\",GenericError_VisitExpiredBody:\"Ou pa ka patisipe nan vizit videyo sa a ankò.\",BrowserCompatibilityError_BrowserNotSupported:\"Navigatè sa pa sipòte\",Alerts_ExistingConnectionAlertLabel:\"Alèt pou koneksyon ki deja egziste\",BrowserCompatibilityError_IOSChangeDefaultStep3:\"Nan konfigirasyon de baz Navigatè ou, chwazi Safari.\",BrowserCompatibilityError_LegacyError:\"Vèsyon sa a nan Microsoft Edge pa ajou. Mete li ajou nan vèsyon ki pi resan pou ou ka rantre nan apèl videyo.\",NotFound_PageNotFound:\"Nou pa jwenn paj la\",Shared_DefaultPageTitle:\"Epic Telehealth\",Spinner_Loading:\"Nap chaje mesaj yo\",BrowserCompatibilityError_IOSChangeDefaultStep1:\"Ale nan Konfigirasyon.\",useVideoCallAuthentication_AlreadyConnectedCancel:\"Kontinye apèl sa a\",BrowserCompatibilityError_BrowserNotRecommended:\"Navigatè pa rekòmande\",BrowserCompatibilityError_IOSError:\"Safari se navigatè a nou rekòmande pou aparèy sa a. Si ou gen pwoblèm ak apèl la, eseye sèvi avèk yon aparèy diferan oswa chanje navigatè ou pou Safari epi rekòmanse apèl la. Pou chanje navigatè default ou:\",NotFound_BodyText:\"Si w ap eseye konekte nan yon apèl videyo, fè bak nan lyen apèl la epi lanse li ankò.\",GenericError_RelaunchTheCall:\"Rekòmanse apèl la pou eseye ankò\",BrowserCompatibilityError_BrowserDoesNotSupportVideo:\"Navigatè sa a pa sipòte apèl videyo\",GenericError_FailedToConnect:\"Nou pa reyisi rekonekte ak apèl la. Rekòmanse apèl la pou eseye ankò.\",LanguageSelectorButton_ButtonLabel:\"Lang\",GenericError_TooEarlyHeader:\"Ou twò Bonè\",Troubleshooting_Android12Step2:'Chèche \"WebRTC hardware video encoding.\"'},\"vi-us\":{LanguageSelectorButton_AriaLabel:\"Thay đổi ngôn ngữ\",GenericError_TooEarlyBody:\"Quý vị không thể tham gia cuộc khám video vào lúc này. Vui lòng tham gia lại gần hơn với thời gian hẹn.\",LanguageSelectorButton_Tooltip:\"Thay đổi ngôn ngữ (Alt+G)\",Shared_ConnectingToOrganization:\"Đang kết nối với tố chức của quý vị\",LanguageSelectorButton_LabelNoHotkey:\"Thay đổi ngôn ngữ\",useVideoCallAuthentication_AlreadyConnectedAlert:\"Quý vị đã kết nối với một cuộc gọi video. {0} Quý vị muốn giữ cuộc gọi nào?\",Troubleshooting_Android12Step1:\"Mở một trang mới trên trình duyệt của quý vị và đi tới chrome://flags.\",GenericError_SomethingWentWrong:\"Có lỗi đã xảy ra\",BrowserCompatibilityError_ThisBrowserNotRecommended:\"Trình duyệt này không được đề xuất\",Troubleshooting_Android12Header:\"Giải quyết vấn đề về video\",useVideoCallAuthentication_AlreadyConnectedConfirm:\"Giữ cuộc gọi trước\",GenericError_ReturnToOngoingCallHeader:\"Quay lại cuộc gọi đang diễn ra\",DisconnectionPage_BodyText:\"Nếu quý vị muốn tham gia lại, hãy thực hiện lại cuộc gọi.\",NotFound_Header:\"Xin lỗi, chúng tôi không tìm thấy trang này\",GenericError_AuthRemovedBody:\"Quý vị đã bị xóa trước đây và không thể tham gia lại lần khám này.\",LoadingLanguageToast_LoadingLanguage:\"Đang tải phiên dịch...\",GenericError_VisitExpiredHeader:\"Cuộc Khám Qua Video Đã Hết Hạn\",GenericError_AuthRemovedHeader:\"Không thể kết nối cuộc gọi\",BrowserCompatibilityError_UseSupportedBrowser:\"Sử dụng một trong những trình duyệt được đề xuất này để tham gia cuộc gọi video.\",DisconnectionPage_Title:\"Quý vị đã rời khỏi cuộc gọi video\",GenericError_ReturnToOngoingCallMessage:\"Quý vị vẫn đang tham gia cuộc gọi ở một trang khác. Quay lại trang đó cho cuộc gọi đang diễn ra của bạn.\",GenericError_RelaunchTheTest:\"Thực hiện lại cuộc gọi để thử lại.\",Troubleshooting_Android12Step3:\"Thay đổi cài đặt thành Tắt.\",BrowserCompatibilityError_IOSChangeDefaultStep2:\"Chọn trình duyệt hiện tại của quý vị.\",Troubleshooting_Android12BodyText:\"Đã xảy ra sự cố khi gửi video trên thiết bị của quý vị. Để giải quyết vấn đề này, hãy làm theo các bước sau:\",GenericError_VisitExpiredBody:\"Quý vị không thể tham gia cuộc khám video này nữa.\",BrowserCompatibilityError_BrowserNotSupported:\"Trình duyệt không hỗ trợ\",Alerts_ExistingConnectionAlertLabel:\"Cảnh báo kết nối hiện có\",BrowserCompatibilityError_IOSChangeDefaultStep3:\"Trong cài đặt Ứng Dụng Trình Duyệt Mặc Định, chọn Safari.\",BrowserCompatibilityError_LegacyError:\"Phiên bản Microsoft Edge này đã lỗi thời. Cập nhật lên phiên bản mới nhất để tham gia cuộc gọi video.\",NotFound_PageNotFound:\"Không tìm thấy trang\",Shared_DefaultPageTitle:\"Epic Telehealth\",Spinner_Loading:\"Đang tải\",BrowserCompatibilityError_IOSChangeDefaultStep1:\"Đến Cài Đặt\",useVideoCallAuthentication_AlreadyConnectedCancel:\"Tiếp tục cuộc gọi này\",BrowserCompatibilityError_BrowserNotRecommended:\"Trình duyệt không được đề xuất\",BrowserCompatibilityError_IOSError:\"Safari là trình duyệt chúng tôi khuyên dùng cho thiết bị này. Nếu quý vị gặp sự cố với cuộc gọi, hãy thử sử dụng thiết bị khác hoặc thay đổi trình duyệt mặc định của quý vị thành Safari và khởi động lại cuộc gọi. Để thay đổi trình duyệt mặc định của bạn:\",NotFound_BodyText:\"Nếu quý vị đang cố gắng kết nối với cuộc gọi video, hãy quay lại liên kết cuộc gọi và nhấn vào liên kết lần nữa.\",GenericError_RelaunchTheCall:\"Thực hiện lại cuộc gọi để thử lại\",BrowserCompatibilityError_BrowserDoesNotSupportVideo:\"Trình duyệt này không hỗ trợ cuộc gọi video\",GenericError_FailedToConnect:\"Thực hiện lại cuộc gọi để thử lại.\",LanguageSelectorButton_ButtonLabel:\"Ngôn ngữ\",GenericError_TooEarlyHeader:\"Quý vị đến trước hẹn\",Troubleshooting_Android12Step2:'Tìm kiếm \"Mã hóa video phần cứng WebRTC.\"'},\"ko-us\":{LanguageSelectorButton_AriaLabel:\"언어 변경\",GenericError_TooEarlyBody:\"지금은 영상 방문에 참여할 수 없습니다. 예정된 시간에 더 가깝게 다시 참여해 주시기 바랍니다.\",LanguageSelectorButton_Tooltip:\"언어 변경 (Alt+G)\",Shared_ConnectingToOrganization:\"페이지를 찾을 수 없습니다\",LanguageSelectorButton_LabelNoHotkey:\"언어 변경\",useVideoCallAuthentication_AlreadyConnectedAlert:\"이미 화상 통화에 연결되어 있습니다. {0}어떤 통화를 유지하시겠습니까?\",Troubleshooting_Android12Step1:\"웹 브라우저에서 새 탭을 열고 chrome://flags로 이동하십시오.\",GenericError_SomethingWentWrong:\"무언가 잘못되었습니다\",BrowserCompatibilityError_ThisBrowserNotRecommended:\"이 브라우저는 추천하지 않습니다\",Troubleshooting_Android12Header:\"영상 문제 해결하기\",useVideoCallAuthentication_AlreadyConnectedConfirm:\"전 통화를 유지합니다\",GenericError_ReturnToOngoingCallHeader:\"진행중인 통화로 돌아가기\",DisconnectionPage_BodyText:\"다시 참여하고 싶으시다면, 통화를 다시 켜주십시오.\",NotFound_Header:\"죄송합니다, 페이지를 찾을 수 없습니다\",GenericError_AuthRemovedBody:\"이전에 방문에서 제거된 적이 있어서 이 방문에 다시 참여할 수 없습니다.\",LoadingLanguageToast_LoadingLanguage:\"번역본 로딩 중...\",GenericError_VisitExpiredHeader:\"영상 방문 만료\",GenericError_AuthRemovedHeader:\"통화에 참여 할 수 없습니다\",BrowserCompatibilityError_UseSupportedBrowser:\"추천하는 브라우저들 중 하나를 사용하여 영상 통화에 참여하십시오.\",DisconnectionPage_Title:\"영상 통화를 나가셨습니다\",GenericError_ReturnToOngoingCallMessage:\"당신은 여전히 다른 탭에서 통화하고 있습니다. 계속하려면 해당 탭으로 돌아가십시오.\",GenericError_RelaunchTheTest:\"테스트를 다시 껐다 켜주시길 바랍니다.\",Troubleshooting_Android12Step3:\"설정을 사용 비활성화로 변경합니다.\",BrowserCompatibilityError_IOSChangeDefaultStep2:\"현재 브라우저를 선택하십시오.\",Troubleshooting_Android12BodyText:\"장치에서 비디오를 보내는 데 문제가 있습니다. 문제를 해결하려면 다음 단계를 수행하십시오:\",GenericError_VisitExpiredBody:\"당신은 더 이상 이 영상 방문에 참여할 수 없습니다.\",BrowserCompatibilityError_BrowserNotSupported:\"지원되지 않는 브라우저\",Alerts_ExistingConnectionAlertLabel:\"기존 연결 경고\",BrowserCompatibilityError_IOSChangeDefaultStep3:\"기본값 브라우저 앱 설정에서, Safari를 선택하십시오.\",BrowserCompatibilityError_LegacyError:\"이 버전의 Microsoft Edge는 최신 버전이 아닙니다. 영상 통화에 참여하려면 최신 버전으로 업데이트하십시오.\",NotFound_PageNotFound:\"페이지를 찾을 수 없습니다\",Shared_DefaultPageTitle:\"에픽 원격 의료\",Spinner_Loading:\"로딩 중\",BrowserCompatibilityError_IOSChangeDefaultStep1:\"설정으로 가기.\",useVideoCallAuthentication_AlreadyConnectedCancel:\"이 통화를 계속합니다\",BrowserCompatibilityError_BrowserNotRecommended:\"추천되지 않는 브라우저\",BrowserCompatibilityError_IOSError:\"이 기기는 Safari를 사용하는 것이 추천됩니다. 만약 통화 도중 문제가 생긴다면 다른 기기를 사용해보거나 기본 브라우저를 Safari로 바꾼 후 통화를 재시작해보십시오. 기본 브라우저를 바꾸는 방법:\",NotFound_BodyText:\"언어 변경 (Alt+G)\",GenericError_RelaunchTheCall:\"통화를 다시 껐다 켜주시길 바랍니다\",BrowserCompatibilityError_BrowserDoesNotSupportVideo:\"이 브라우저는 영상 통화를 지원하지 않습니다\",GenericError_FailedToConnect:\"통화에 연결하지 못했습니다. 통화를 껐다 킨 후 다시 시도해주시길 바랍니다.\",LanguageSelectorButton_ButtonLabel:\"언어\",GenericError_TooEarlyHeader:\"일찍 오셨습니다\",Troubleshooting_Android12Step2:'\"WebRTC hardware video encoding\" 검색하시오.'},\"fi-fi\":{LanguageSelectorButton_AriaLabel:\"Vaihda kieltä\",GenericError_TooEarlyBody:\"Et voi liittyä videokäyntiin juuri nyt. Liity uudelleen lähempänä varattua aikaa.\",LanguageSelectorButton_Tooltip:\"Vaihda kieltä (Alt+G)\",Shared_ConnectingToOrganization:\"Yhdistetään organisaatioosi\",LanguageSelectorButton_LabelNoHotkey:\"Vaihda kieltä\",useVideoCallAuthentication_AlreadyConnectedAlert:\"Olet jo yhteydessä videopuheluun. {0}Mitä puhelua haluat jatkaa?\",Troubleshooting_Android12Step1:\"Avaa uusi välilehti verkkoselaimessa ja siirry osoitteeseen chrome://flags.\",GenericError_SomethingWentWrong:\"Jokin meni vikaan\",BrowserCompatibilityError_ThisBrowserNotRecommended:\"Tätä selainta ei suositella\",Troubleshooting_Android12Header:\"Ratkaise videoon liittyvä ongelma\",useVideoCallAuthentication_AlreadyConnectedConfirm:\"Jatka aiempaa puhelua\",GenericError_ReturnToOngoingCallHeader:\"Palaa meneillään olevaan puheluun\",DisconnectionPage_BodyText:\"Jos haluat liittyä uudelleen, aloita puhelu uudelleen.\",NotFound_Header:\"Sivua ei valitettavasti löytynyt\",GenericError_AuthRemovedBody:\"Sinut poistettiin aiemmin, etkä voi liittyä tähän käyntiin uudelleen.\",LoadingLanguageToast_LoadingLanguage:\"Ladataan käännöksiä...\",GenericError_VisitExpiredHeader:\"Videokäynti vanhentui\",GenericError_AuthRemovedHeader:\"Puheluun liittyminen ei onnistu\",BrowserCompatibilityError_UseSupportedBrowser:\"Käytä videopuhelussa yhtä näistä suositelluista selaimista.\",DisconnectionPage_Title:\"Olet poistunut videopuhelusta\",GenericError_ReturnToOngoingCallMessage:\"Olet edelleen puhelussa toisella välilehdellä. Palaa meneillään olevaan puhelun siirtymällä välilehdelle.\",GenericError_RelaunchTheTest:\"Tee testi uudelleen.\",Troubleshooting_Android12Step3:\"Ota asetus pois käytöstä.\",BrowserCompatibilityError_IOSChangeDefaultStep2:\"Valitse nykyinen selain.\",Troubleshooting_Android12BodyText:\"Videon lähettämisessä laitteellasi on ongelma. Voit ratkaista sen seuraavasti:\",GenericError_VisitExpiredBody:\"Et voi enää liittyä tähän videokäyntiin.\",BrowserCompatibilityError_BrowserNotSupported:\"Selainta ei tueta\",Alerts_ExistingConnectionAlertLabel:\"Aiemmin luotu yhteysheräte\",BrowserCompatibilityError_IOSChangeDefaultStep3:\"Valitse Oletusselainappi-asetukseksi Safari.\",BrowserCompatibilityError_LegacyError:\"Tämä Microsoft Edgen versio on vanhentunut. Päivitä uusimpaan versioon liittyäksesi videopuheluun.\",NotFound_PageNotFound:\"Sivua ei löytynyt\",Shared_DefaultPageTitle:\"Epic-etäpalvelut\",Spinner_Loading:\"Ladataan\",BrowserCompatibilityError_IOSChangeDefaultStep1:\"Siirry asetuksiin.\",useVideoCallAuthentication_AlreadyConnectedCancel:\"Jatka tätä puhelua\",BrowserCompatibilityError_BrowserNotRecommended:\"Selainta ei suositella\",BrowserCompatibilityError_IOSError:\"Safari on suositeltu selain tälle laitteelle. Jos puhelun aikana ilmenee ongelmia, kokeile toista laitetta tai muuta oletusselaimeksi Safari ja käynnistä puhelu uudelleen. Oletusselain muutetaan näin:\",NotFound_BodyText:\"Jos yrität muodostaa yhteyttä videopuheluun, palaa puhelulinkkiin ja käynnistä se uudelleen.\",GenericError_RelaunchTheCall:\"Käynnistä puhelu uudelleen\",BrowserCompatibilityError_BrowserDoesNotSupportVideo:\"Tämä selain ei tue videopuheluita\",GenericError_FailedToConnect:\"Yhteyden muodostaminen puheluun epäonnistui. Käynnistä puhelu uudelleen.\",LanguageSelectorButton_ButtonLabel:\"Kieli\",GenericError_TooEarlyHeader:\"Olet etuajassa\",Troubleshooting_Android12Step2:\"Tee seuraava haku: WebRTC hardware video encoding.\"},\"pt-br\":{LanguageSelectorButton_AriaLabel:\"Alterar Idioma\",GenericError_TooEarlyBody:\"Você não pode entrar na consulta por vídeo neste momento. Por favor, tente novamente mais próximo do horário agendado.\",LanguageSelectorButton_Tooltip:\"Alterar Idioma (Alt+G)\",Shared_ConnectingToOrganization:\"Conectando-se à sua organização\",LanguageSelectorButton_LabelNoHotkey:\"Alterar idioma\",useVideoCallAuthentication_AlreadyConnectedAlert:\"Você já está conectado a uma chamada de vídeo. {0}Qual chamada você gostaria de manter?\",Troubleshooting_Android12Step1:\"Abra uma nova aba no seu navegador e vá para chrome://flags.\",GenericError_SomethingWentWrong:\"Algo deu errado\",BrowserCompatibilityError_ThisBrowserNotRecommended:\"Este navegador não é recomendado\",Troubleshooting_Android12Header:\"Resolver o problema de vídeo\",useVideoCallAuthentication_AlreadyConnectedConfirm:\"Manter chamada anterior\",GenericError_ReturnToOngoingCallHeader:\"Retornar à chamada em andamento\",DisconnectionPage_BodyText:\"Se desejar retornar, reinicie a chamada novamente.\",NotFound_Header:\"Não foi possível encontrar esta página\",GenericError_AuthRemovedBody:\"Você foi removido e não pode participar desta consulta novamente.\",LoadingLanguageToast_LoadingLanguage:\"Carregando traduções...\",GenericError_VisitExpiredHeader:\"Consulta em Vídeo Expirada\",GenericError_AuthRemovedHeader:\"Não é possível entrar na chamada\",BrowserCompatibilityError_UseSupportedBrowser:\"Use um desses navegadores recomendados para participar da chamada de vídeo.\",DisconnectionPage_Title:\"Você saiu da chamada de vídeo\",GenericError_ReturnToOngoingCallMessage:\"Você ainda está na chamada em outra aba. Retorne a aba para continuar sua chamada em andamento.\",GenericError_RelaunchTheTest:\"Reinicie o teste para tentar novamente.\",Troubleshooting_Android12Step3:'Altere a configuração para \"Disabled\".',BrowserCompatibilityError_IOSChangeDefaultStep2:\"Selecione seu navegador atual.\",Troubleshooting_Android12BodyText:\"Há um problema ao enviar vídeo no seu dispositivo. Para resolver o problema, siga estes passos:\",GenericError_VisitExpiredBody:\"Você não pode entrar nesta consulta por vídeo.\",BrowserCompatibilityError_BrowserNotSupported:\"Navegador não suportado\",Alerts_ExistingConnectionAlertLabel:\"Alerta de conexão existente\",BrowserCompatibilityError_IOSChangeDefaultStep3:\"Na configuração de Aplicativo de Navegador Padrão, selecione Safari.\",BrowserCompatibilityError_LegacyError:\"Esta versão do Microsoft Edge está desatualizada. Atualize para a versão mais recente para participar da chamada de vídeo.\",NotFound_PageNotFound:\"Página não encontrada\",Shared_DefaultPageTitle:\"Epic Telemedicina\",Spinner_Loading:\"Carregando\",BrowserCompatibilityError_IOSChangeDefaultStep1:\"Vá à Configurações.\",useVideoCallAuthentication_AlreadyConnectedCancel:\"Continuar para esta chamada\",BrowserCompatibilityError_BrowserNotRecommended:\"Navegador não recomendado\",BrowserCompatibilityError_IOSError:\"O Safari é o navegador recomendado para este dispositivo. Se você enfrentar problemas com a chamada, tente usar outro dispositivo ou altere seu navegador padrão para o Safari e reinicie a chamada. Para alterar seu navegador padrão:\",NotFound_BodyText:\"Se você está tentando se conectar a uma chamada de vídeo, volte ao link da chamada e inicie-a novamente.\",GenericError_RelaunchTheCall:\"Reinicie a chamada para tentar novamente\",BrowserCompatibilityError_BrowserDoesNotSupportVideo:\"Este navegador não suporta chamadas de vídeo\",GenericError_FailedToConnect:\"Falha ao conectar à chamada. Reinicie a chamada para tentar novamente.\",LanguageSelectorButton_ButtonLabel:\"Idioma\",GenericError_TooEarlyHeader:\"Você chegou cedo\",Troubleshooting_Android12Step2:'Pesquise por \"WebRTC hardware video encoding.\"'},\"zh-ushant\":{LanguageSelectorButton_AriaLabel:\"切換語言\",GenericError_TooEarlyBody:\"您還無法在此時加入視訊會診。請稍後接近預約時間時再加入。\",LanguageSelectorButton_Tooltip:\"切換語言(Alt+G)\",Shared_ConnectingToOrganization:\"與您的機構連接中\",LanguageSelectorButton_LabelNoHotkey:\"切換語言\",useVideoCallAuthentication_AlreadyConnectedAlert:\"您已連接到一個視訊。{0}請問您要保留哪一個視訊?\",Troubleshooting_Android12Step1:\"在您的網路瀏覽器中開啟一個新的頁面,並進入chrome://flags。\",GenericError_SomethingWentWrong:\"發生錯誤\",BrowserCompatibilityError_ThisBrowserNotRecommended:\"不推薦此瀏覽器\",Troubleshooting_Android12Header:\"解決視訊問題\",useVideoCallAuthentication_AlreadyConnectedConfirm:\"保留上個視訊通話\",GenericError_ReturnToOngoingCallHeader:\"返回至現正進行的通話\",DisconnectionPage_BodyText:\"如果您想重新加入,請重啟通話。\",NotFound_Header:\"抱歉,我們找不到此頁面\",GenericError_AuthRemovedBody:\"您已被移除,且無法再加入此視訊通話。\",LoadingLanguageToast_LoadingLanguage:\"載入翻譯……\",GenericError_VisitExpiredHeader:\"視訊會診已逾期\",GenericError_AuthRemovedHeader:\"無法加入視訊通話\",BrowserCompatibilityError_UseSupportedBrowser:\"請使用推薦的瀏覽器加入視訊通話。\",DisconnectionPage_Title:\"您已離開此視訊通話\",GenericError_ReturnToOngoingCallMessage:\"您仍在另一個頁面裡的通話。請返回到該頁面裡正在進行的通話。\",GenericError_RelaunchTheTest:\"請重啟測試。\",Troubleshooting_Android12Step3:\"把設定改為停用(Disabled)。\",BrowserCompatibilityError_IOSChangeDefaultStep2:\"選擇您使用的瀏覽器。\",Troubleshooting_Android12BodyText:\"我們在傳送視訊到您的裝置時碰到了一些問題。請照著以下步驟來解決此問題:\",GenericError_VisitExpiredBody:\"您已無法加入視訊會診。\",BrowserCompatibilityError_BrowserNotSupported:\"不支援瀏覽器\",Alerts_ExistingConnectionAlertLabel:\"已存在的連線警示\",BrowserCompatibilityError_IOSChangeDefaultStep3:\"在預設瀏覽器程序設定中,選擇 Safari。\",BrowserCompatibilityError_LegacyError:\"此版本的 Microsoft Edge 已終止支援。請更新至最新版本以加入視訊通話。\",NotFound_PageNotFound:\"未找到此頁面\",Shared_DefaultPageTitle:\"Epic遠端醫療\",Spinner_Loading:\"載入中\",BrowserCompatibilityError_IOSChangeDefaultStep1:\"進入設定。\",useVideoCallAuthentication_AlreadyConnectedCancel:\"繼續此視訊通話\",BrowserCompatibilityError_BrowserNotRecommended:\"不推薦瀏覽器\",BrowserCompatibilityError_IOSError:\"Safari 是我們為此裝置推薦的瀏覽器。如果您在通話時遇到問題,請嘗試使用其他裝置或將您的預設瀏覽器更改為 Safari,然後重啟通話。要更改您的預設瀏覽器:\",NotFound_BodyText:\"您若正嘗試與視訊連接,請重新點選連結來開啟視訊。\",GenericError_RelaunchTheCall:\"請重啟通話來重試\",BrowserCompatibilityError_BrowserDoesNotSupportVideo:\"該瀏覽器不支援視訊通話\",GenericError_FailedToConnect:\"無法連接,請重啟通話再試一次。\",LanguageSelectorButton_ButtonLabel:\"語言\",GenericError_TooEarlyHeader:\"您來早了\",Troubleshooting_Android12Step2:\"搜尋「WebRTC hardware video encoding」。\"},\"sv-se\":{LanguageSelectorButton_AriaLabel:\"Byt språk\",GenericError_TooEarlyBody:\"Du får inte ansluta till videobesöket just nu. Ansluta igen närmare den bokade tiden.\",LanguageSelectorButton_Tooltip:\"Byt språk (Alt+G)\",Shared_ConnectingToOrganization:\"Ansluter till din organisation\",LanguageSelectorButton_LabelNoHotkey:\"Ändra språk\",useVideoCallAuthentication_AlreadyConnectedAlert:\"Du är redan ansluten till ett videosamtal. {0}Vilket samtal vill du behålla?\",Troubleshooting_Android12Step1:\"Öppna en ny flik i din webbläsare och gå till chrome://flags.\",GenericError_SomethingWentWrong:\"Något gick fel\",BrowserCompatibilityError_ThisBrowserNotRecommended:\"Denna webbläsare rekommenderas inte\",Troubleshooting_Android12Header:\"Lös videoproblemet\",useVideoCallAuthentication_AlreadyConnectedConfirm:\"Behåll tidigare samtal\",GenericError_ReturnToOngoingCallHeader:\"Återvända till det pågående samtalet\",DisconnectionPage_BodyText:\"Om du vill återansluta startar du samtalet igen.\",NotFound_Header:\"Vi kan tyvärr inte hitta den sidan\",GenericError_AuthRemovedBody:\"Du har tidigare tagits bort och kan inte ansluta dig till detta besök igen.\",LoadingLanguageToast_LoadingLanguage:\"Läser in översättningar …\",GenericError_VisitExpiredHeader:\"Videobesök utlöpt\",GenericError_AuthRemovedHeader:\"Kan inte ansluta till samtalet\",BrowserCompatibilityError_UseSupportedBrowser:\"Använd en av dessa rekommenderade webbläsare för att ansluta till videosamtalet.\",DisconnectionPage_Title:\"Du har lämnat videobesöket\",GenericError_ReturnToOngoingCallMessage:\"Du är fortfarande i samtalet på en annan flik. Återvänd till den fliken för ditt pågående samtal.\",GenericError_RelaunchTheTest:\"Starta om testet för att försöka igen.\",Troubleshooting_Android12Step3:\"Ändra inställningen till Disabled (inaktiverad).\",BrowserCompatibilityError_IOSChangeDefaultStep2:\"Välj din aktuella webbläsare.\",Troubleshooting_Android12BodyText:\"Det finns ett problem med att skicka video på din enhet. Följ dessa steg för att lösa problemet:\",GenericError_VisitExpiredBody:\"Du kan inte längre ansluta dig till detta videobesök.\",BrowserCompatibilityError_BrowserNotSupported:\"Webbläsaren stöds inte\",Alerts_ExistingConnectionAlertLabel:\"Avisering om existerande anslutning\",BrowserCompatibilityError_IOSChangeDefaultStep3:\"Välj Safari i inställningen Förvald app för webbläsare.\",BrowserCompatibilityError_LegacyError:\"Denna version av Microsoft Edge är inaktuell. Uppdatera till den senaste versionen för att ansluta till videosamtalet.\",NotFound_PageNotFound:\"Sidan hittas inte\",Shared_DefaultPageTitle:\"Epic Telehealth\",Spinner_Loading:\"Läser in\",BrowserCompatibilityError_IOSChangeDefaultStep1:\"Gå till Inställningar. \",useVideoCallAuthentication_AlreadyConnectedCancel:\"Fortsätt till detta samtal\",BrowserCompatibilityError_BrowserNotRecommended:\"Webbläsaren rekommenderas inte\",BrowserCompatibilityError_IOSError:\"Safari är webbläsaren som vi rekommenderar för den här enheten. Om du får problem med samtalet kan du försöka använda en annan enhet eller ändra din standardwebbläsare till Safari och starta om samtalet. Så här ändrar du din standardwebbläsare:\",NotFound_BodyText:\"Om du försöker ansluta till ett videosamtal måste du gå tillbaka till samtalslänken och öppna den igen.\",GenericError_RelaunchTheCall:\"Starta om samtalet för att försöka igen\",BrowserCompatibilityError_BrowserDoesNotSupportVideo:\"Den här webbläsaren stöder inte videosamtal\",GenericError_FailedToConnect:\"Det gick inte att ansluta till samtalet. Starta om samtalet för att försöka igen.\",LanguageSelectorButton_ButtonLabel:\"Språk\",GenericError_TooEarlyHeader:\"Du är tidigt ute\",Troubleshooting_Android12Step2:\"Sök efter ”WebRTC hardware video encoding”.\"},\"nl-nl\":{LanguageSelectorButton_AriaLabel:\"Taal wijzigen\",GenericError_TooEarlyBody:\"U kunt momenteel nog niet deelnemen aan het videobezoek. Start het gesprek opnieuw dichter bij het geplande tijdstip.\",LanguageSelectorButton_Tooltip:\"Taal wijzigen (Alt+G)\",Shared_ConnectingToOrganization:\"Verbinden met uw organisatie\",LanguageSelectorButton_LabelNoHotkey:\"Taal wijzigen\",useVideoCallAuthentication_AlreadyConnectedAlert:\"U bent al verbonden met een videogesprek. {0}Welk gesprek wilt u behouden?\",Troubleshooting_Android12Step1:\"Open een nieuw tabblad in uw webbrowser en ga naar chrome://flags.\",GenericError_SomethingWentWrong:\"Er ging iets fout\",BrowserCompatibilityError_ThisBrowserNotRecommended:\"Deze browser is niet aanbevolen\",Troubleshooting_Android12Header:\"Het videoprobleem oplossen\",useVideoCallAuthentication_AlreadyConnectedConfirm:\"Vorig gesprek behouden\",GenericError_ReturnToOngoingCallHeader:\"Ga terug naar het actieve gesprek\",DisconnectionPage_BodyText:\"Start het gesprek opnieuw als u weer wilt deelnemen.\",NotFound_Header:\"Sorry, we kunnen deze pagina niet vinden\",GenericError_AuthRemovedBody:\"U bent eerder verwijderd en kan niet nogmaals deelnemen aan dit bezoek.\",LoadingLanguageToast_LoadingLanguage:\"Vertalingen worden geladen...\",GenericError_VisitExpiredHeader:\"Videobezoek is vervallen\",GenericError_AuthRemovedHeader:\"Kan niet deelnemen aan het gesprek\",BrowserCompatibilityError_UseSupportedBrowser:\"Gebruik één van deze aanbevolen browsers om deel te nemen aan het videogesprek.\",DisconnectionPage_Title:\"U heeft het videogesprek verlaten\",GenericError_ReturnToOngoingCallMessage:\"Er is nog een gesprek actief op een ander tabblad. Ga terug naar dat tabblad voor uw actieve gesprek.\",GenericError_RelaunchTheTest:\"Start de test opnieuw om het nogmaals te proberen.\",Troubleshooting_Android12Step3:\"Wijzig de instelling naar Uitgeschakeld.\",BrowserCompatibilityError_IOSChangeDefaultStep2:\"Selecteer uw huidige browser.\",Troubleshooting_Android12BodyText:\"Er is een probleem met het verzenden van video op uw apparaat. Volg de volgende stappen om het probleem op te lossen:\",GenericError_VisitExpiredBody:\"U kunt niet meer deelnemen aan dit videobezoek.\",BrowserCompatibilityError_BrowserNotSupported:\"Browser niet ondersteund\",Alerts_ExistingConnectionAlertLabel:\"Waarschuwing bestaande verbinding\",BrowserCompatibilityError_IOSChangeDefaultStep3:\"Selecteer Safari in de instelling Standaard browserapp.\",BrowserCompatibilityError_LegacyError:\"Deze versie van Microsoft Edge is verouderd. Werk bij naar de laatste versie om deel te nemen aan het videogesprek.\",NotFound_PageNotFound:\"Pagina niet gevonden\",Shared_DefaultPageTitle:\"Epic Telegeneeskunde\",Spinner_Loading:\"Laden\",BrowserCompatibilityError_IOSChangeDefaultStep1:\"Ga naar Instellingen.\",useVideoCallAuthentication_AlreadyConnectedCancel:\"Doorgaan met dit gesprek\",BrowserCompatibilityError_BrowserNotRecommended:\"Browser niet aanbevolen\",BrowserCompatibilityError_IOSError:\"Safari is onze aanbevolen browser voor dit apparaat. Probeer als er problemen met het gesprek zijn een ander apparaat te gebruiken of wijzig uw browser naar Safari en start het gesprek opnieuw. U kunt uw standaard browser zo wijzigen:\",NotFound_BodyText:\"Ga als u probeert deel te nemen aan een videogesprek terug naar de link voor het gesprek en start het opnieuw.\",GenericError_RelaunchTheCall:\"Start het gesprek opnieuw om het nogmaals te proberen\",BrowserCompatibilityError_BrowserDoesNotSupportVideo:\"Deze browser ondersteunt videogesprekken niet\",GenericError_FailedToConnect:\"Kon geen verbinding maken met het gesprek. Start het gesprek opnieuw om het nogmaals te proberen.\",LanguageSelectorButton_ButtonLabel:\"Taal\",GenericError_TooEarlyHeader:\"U bent te vroeg\",Troubleshooting_Android12Step2:'Zoek naar \"WebRTC hardware video encoding\".'},\"ru-us\":{LanguageSelectorButton_AriaLabel:\"Изменить язык\",GenericError_TooEarlyBody:\"Вы не можете присоединиться к видео визиту сейчас. Пожалуйста присоединитесь ближе к запланированному времени.\",LanguageSelectorButton_Tooltip:\"Изменить язык (Alt+G)\",Shared_ConnectingToOrganization:\"Подсоединяемся к вашей организации\",LanguageSelectorButton_LabelNoHotkey:\"Изменить язык\",useVideoCallAuthentication_AlreadyConnectedAlert:\"Вы уже подсоединены к видео звонку. {0}Какой звонок вы хотите продолжить?\",Troubleshooting_Android12Step1:\"Откройте новую вкладку в вашем браузере и перейдите к chrome://flags.\",GenericError_SomethingWentWrong:\"Возникла ошибка\",BrowserCompatibilityError_ThisBrowserNotRecommended:\"Этот браузер не рекомендуется\",Troubleshooting_Android12Header:\"Разрешить проблему с видео\",useVideoCallAuthentication_AlreadyConnectedConfirm:\"Продолжить предыдущий звонок\",GenericError_ReturnToOngoingCallHeader:\"Вернуться к текущему звонку\",DisconnectionPage_BodyText:\"Если вы хотите заново присоединиться, запустите звонок ещё раз.\",NotFound_Header:\"К сожалению мы не можем найти эту страницу\",GenericError_AuthRemovedBody:\"Вас ранее убрали и вы не можете присоединиться к этому визиту снова.\",LoadingLanguageToast_LoadingLanguage:\"Загружаем перевод...\",GenericError_VisitExpiredHeader:\"Видео визит просрочен\",GenericError_AuthRemovedHeader:\"Не получается присоединиться к звонку\",BrowserCompatibilityError_UseSupportedBrowser:\"Используйте один из рекомендуемых браузеров чтобы присоединиться к видео звонку.\",DisconnectionPage_Title:\"Вы вышли из видеозвонка\",GenericError_ReturnToOngoingCallMessage:\"Вы всё ещё подсоединены к звонку в другой вкладке. Вернитесь к этой вкладке для текущего звонка.\",GenericError_RelaunchTheTest:\"Перезапустите тест чтобы попробовать ещё раз.\",Troubleshooting_Android12Step3:\"Измените настройку на Dibabled.\",BrowserCompatibilityError_IOSChangeDefaultStep2:\"Выберите ваш текущий браузер.\",Troubleshooting_Android12BodyText:\"Произошла ошибка при передачи видео с вашего устройства. Чтобы разрешить эту проблему, следуйте этим инструкциям:\",GenericError_VisitExpiredBody:\"Вы больше не можете присоединиться к этому видео-звонку.\",BrowserCompatibilityError_BrowserNotSupported:\"Браузер не поддерживается\",Alerts_ExistingConnectionAlertLabel:\"Предупреждение о существующем подсоединении\",BrowserCompatibilityError_IOSChangeDefaultStep3:\"В настройке для браузера по умолчанию выберите Safari.\",BrowserCompatibilityError_LegacyError:\"Эта версия Microsoft Edge устарела. Обновите на самую новую версию чтобы присоединиться к видеозвонку.\",NotFound_PageNotFound:\"Страница не найдена\",Shared_DefaultPageTitle:\"Epic Telehealth\",Spinner_Loading:\"Загружается\",BrowserCompatibilityError_IOSChangeDefaultStep1:\"Зайдите в настройки. \",useVideoCallAuthentication_AlreadyConnectedCancel:\"Продолжить этот звонок\",BrowserCompatibilityError_BrowserNotRecommended:\"Браузер не рекомендуется\",BrowserCompatibilityError_IOSError:\"Safari наш рекомендуемый браузер для этого устройства. Если у вас будут проблемы со звонком, попробуйте использовать другое устройство или измените ваш браузер по умолчанию на Safari и перезапустите звонок. Чтобы изменить ваш браузер по умолчанию:\",NotFound_BodyText:\"Если вы пытаетесь подсоединиться к видео звонку, вернитесь к ссылке звонка и откройте её ещё раз.\",GenericError_RelaunchTheCall:\"Перезапустите звонок чтобы попробовать ещё раз\",BrowserCompatibilityError_BrowserDoesNotSupportVideo:\"Этот браузер не поддерживает видеозвонки\",GenericError_FailedToConnect:\"Не получилось подсоединиться к звонку. Перезапустите звонок чтобы попробовать ещё раз.\",LanguageSelectorButton_ButtonLabel:\"Язык\",GenericError_TooEarlyHeader:\"Вы подсоединились рано\",Troubleshooting_Android12Step2:'Ищите \"WebRTC hardware video encoding.\"'},\"fr-fr\":{LanguageSelectorButton_AriaLabel:\"Changer de langue\",GenericError_TooEarlyBody:\"Vous ne pouvez pas rejoindre la consultation vidéo pour le moment. Veuillez faire une nouvelle tentative plus près de l'heure planifiée.\",LanguageSelectorButton_Tooltip:\"Changer la langue (Alt+G)\",Shared_ConnectingToOrganization:\"Connexion à votre établissement en cours\",LanguageSelectorButton_LabelNoHotkey:\"Changer de langue\",useVideoCallAuthentication_AlreadyConnectedAlert:\"Vous êtes déjà connecté à un appel vidéo. {0}Quel appel voulez-vous conserver?\",Troubleshooting_Android12Step1:\"Ouvrir un nouvel onglet dans votre navigateur Web et aller sur chrome://flags.\",GenericError_SomethingWentWrong:\"Une erreur est survenue\",BrowserCompatibilityError_ThisBrowserNotRecommended:\"Ce navigateur n'est pas recommandé\",Troubleshooting_Android12Header:\"Résoudre le problème avec la vidéo\",useVideoCallAuthentication_AlreadyConnectedConfirm:\"Conserver l'appel précédent\",GenericError_ReturnToOngoingCallHeader:\"Revenir à l'appel en cours\",DisconnectionPage_BodyText:\"Si vous souhaitez rejoindre à nouveau l'appel, veuillez le relancer.\",NotFound_Header:\"Désolé, nous ne pouvons pas trouver cette page\",GenericError_AuthRemovedBody:\"Vous avez été retiré(e) de cette visite précédemment et ne pouvez plus la rejoindre.\",LoadingLanguageToast_LoadingLanguage:\"Chargement des traductions en cours...\",GenericError_VisitExpiredHeader:\"Consultation vidéo expirée\",GenericError_AuthRemovedHeader:\"Impossible de rejoindre l'appel\",BrowserCompatibilityError_UseSupportedBrowser:\"Utiliser l'un de ces navigateurs recommandés pour rejoindre l'appel vidéo.\",DisconnectionPage_Title:\"Vous avez quitté l'appel vidéo\",GenericError_ReturnToOngoingCallMessage:\"Vous participez toujours à l'appel dans un autre onglet. Veuillez revenir à cet onglet-là pour participer à votre appel en cours.\",GenericError_RelaunchTheTest:\"Relancer le test pour réessayer.\",Troubleshooting_Android12Step3:\"Définir le paramètre comme Désactivé.\",BrowserCompatibilityError_IOSChangeDefaultStep2:\"Sélectionner votre navigateur actuel.\",Troubleshooting_Android12BodyText:\"Un problème est survenu lors de l'envoi de la vidéo sur votre appareil. Pour résoudre le problème, veuillez suivre ces étapes:\",GenericError_VisitExpiredBody:\"Vous ne pouvez plus rejoindre cette consultation vidéo.\",BrowserCompatibilityError_BrowserNotSupported:\"Navigateur non pris en charge\",Alerts_ExistingConnectionAlertLabel:\"Alerte de connexion existante\",BrowserCompatibilityError_IOSChangeDefaultStep3:\"Dans le paramètre Application de navigateur par défaut, sélectionner Safari.\",BrowserCompatibilityError_LegacyError:\"Cette version de Microsoft Edge est obsolète. Veuillez mettre à jour avec la dernière version pour rejoindre l'appel vidéo.\",NotFound_PageNotFound:\"Page introuvable\",Shared_DefaultPageTitle:\"Télémédecine Epic\",Spinner_Loading:\"Chargement en cours\",BrowserCompatibilityError_IOSChangeDefaultStep1:\"Accéder à Paramètres. \",useVideoCallAuthentication_AlreadyConnectedCancel:\"Continuer vers cet appel\",BrowserCompatibilityError_BrowserNotRecommended:\"Navigateur non recommandé\",BrowserCompatibilityError_IOSError:\"Safari est le navigateur recommandé pour cet appareil. En cas de problèmes avec l'appel, veuillez essayer d'utiliser un autre appareil ou modifier votre navigateur par défaut sur Safari et relancer l'appel. Pour modifier votre navigateur par défaut:\",NotFound_BodyText:\"Pour vous connecter à un appel vidéo, revenir au lien d'appel et le relancer.\",GenericError_RelaunchTheCall:\"Relancer l'appel pour réessayer\",BrowserCompatibilityError_BrowserDoesNotSupportVideo:\"Ce navigateur ne prend pas en charge les appels vidéo\",GenericError_FailedToConnect:\"Échec de la connexion à l'appel. Relancer l'appel pour réessayer.\",LanguageSelectorButton_ButtonLabel:\"Langue\",GenericError_TooEarlyHeader:\"Vous êtes en avance\",Troubleshooting_Android12Step2:'Rechercher \"WebRTC hardware video encoding\".'},\"pl-pl\":{LanguageSelectorButton_AriaLabel:\"Zmień język\",GenericError_TooEarlyBody:\"Nie możesz dołączyć do telewizyty w tej chwili. Proszę dołączyć bliżej planowanego czasu.\",LanguageSelectorButton_Tooltip:\"Zmień język (Alt+G)\",Shared_ConnectingToOrganization:\"Łączenie z twoją organizacją\",LanguageSelectorButton_LabelNoHotkey:\"Zmiana języka\",useVideoCallAuthentication_AlreadyConnectedAlert:\"Jesteś obecnie połączony z rozmową wideo. {0}Które połączenie chciał byś zachować?\",Troubleshooting_Android12Step1:\"Otwórz nową zakładkę w swojej przeglądarce i przejdź do chrome://flags.\",GenericError_SomethingWentWrong:\"Wystąpił błąd\",BrowserCompatibilityError_ThisBrowserNotRecommended:\"Ta przeglądarka nie jest rekomendowana\",Troubleshooting_Android12Header:\"Rozwiąż problem z obrazem wideo\",useVideoCallAuthentication_AlreadyConnectedConfirm:\"Zachowaj poprzednią rozmowę\",GenericError_ReturnToOngoingCallHeader:\"Wróć do bieżącej rozmowy wideo\",DisconnectionPage_BodyText:\"Jeżeli chcesz wrócić do rozmowy, rozpocznij połączenie ponownie.\",NotFound_Header:\"Przepraszamy, nie mogliśmy znaleźć tej strony\",GenericError_AuthRemovedBody:\"Zostałeś poprzednio usunięty i nie możesz już dołączyć do tej telewizyty.\",LoadingLanguageToast_LoadingLanguage:\"Ładowanie tłumaczeń...\",GenericError_VisitExpiredHeader:\"Telewizyta Wygasła\",GenericError_AuthRemovedHeader:\"Nie można dołączyć do rozmowy wideo.\",BrowserCompatibilityError_UseSupportedBrowser:\"Użyj jednej z rekomendowanych przeglądarek by dołączyć do rozmowy wideo.\",DisconnectionPage_Title:\"Opuściłeś rozmowę wideo\",GenericError_ReturnToOngoingCallMessage:\"Nadal jesteś w rozmowie w innej zakładce. Wróć do tej zakładki by powrócić do bieżącej rozmowy.\",GenericError_RelaunchTheTest:\"Rozpocznij ponownie test by spróbować jeszcze raz.\",Troubleshooting_Android12Step3:\"Zmień ustawienie na wyłączone („Disabled”).\",BrowserCompatibilityError_IOSChangeDefaultStep2:\"Wybierz swoją obecną przeglądarkę.\",Troubleshooting_Android12BodyText:\"Twoje urządzenie ma problem z wysyłaniem wideo. By rozwiązać ten problem, wykonaj następujące kroki:\",GenericError_VisitExpiredBody:\"Nie możesz już dołączyć do tej telewizyty.\",BrowserCompatibilityError_BrowserNotSupported:\"Przeglądarka nieobsługiwana\",Alerts_ExistingConnectionAlertLabel:\"Powiadomienie o bieżącym połączeniu\",BrowserCompatibilityError_IOSChangeDefaultStep3:\"W ustawieniach Domyślnych Przeglądarek, wybierz Safari.\",BrowserCompatibilityError_LegacyError:\"Ta wersja Microsoft Edge jest przestarzała. Uaktualnij przeglądarkę do najnowszej wersji by dołączyć do rozmowy wideo.\",NotFound_PageNotFound:\"Nie znaleziono strony\",Shared_DefaultPageTitle:\"Epic Telehealth\",Spinner_Loading:\"Ładowanie\",BrowserCompatibilityError_IOSChangeDefaultStep1:\"Przejdź do Ustawień\",useVideoCallAuthentication_AlreadyConnectedCancel:\"Kontynuuj tą rozmowę\",BrowserCompatibilityError_BrowserNotRecommended:\"Przeglądarka nie jest rekomendowana\",BrowserCompatibilityError_IOSError:\"Safari jest rekomendowaną przez nas przeglądarką dla tego urządzenia. Jeżeli napotkasz problemy techniczne z tą rozmową wideo, spróbuj innego urządzenia lub zmień domyślną przeglądarkę na Safari i uruchom połączenie ponownie. By zmienić domyślną przeglądarkę:\",NotFound_BodyText:\"Jeżeli próbujesz połączyć się z rozmową wideo, wróć do linka rozmowy i uruchom go ponownie.\",GenericError_RelaunchTheCall:\"Rozpocznij ponownie połączenie by spróbować jeszcze raz\",BrowserCompatibilityError_BrowserDoesNotSupportVideo:\"Ta przeglądarka nie obsługuje rozmów wideo\",GenericError_FailedToConnect:\"Nie można połączyć się z rozmową wideo. Rozpocznij ponownie połączenie by spróbować jeszcze raz.\",LanguageSelectorButton_ButtonLabel:\"Język\",GenericError_TooEarlyHeader:\"Jesteś za Wcześnie\",Troubleshooting_Android12Step2:'Wyszukaj \"WebRTC hardware video encoding.\"'}};","/**\n * @copyright Copyright 2021-2024 Epic Systems Corporation\n * @file Utils file for i18n\n * @author Razi Rais\n * @module Epic.VideoApp.Utils.I18n.I18nUtils\n */\n\nimport { IDomElements } from \"~/types/locale\";\nimport { IUserPreferences } from \"~/types/user\";\nimport { getCookie, recentLanguageKey } from \"../cookies\";\nimport preAuthStrings from \"./locales/strings.json\";\n\n/**\n * Normalizes the locale by replacing underscores and converting the characters to lowercase\n *\n * @param locale the input locale\n *\n * @return the normalized locale\n */\nexport function normalize(locale: string): string {\n\treturn locale.replace(\"_\", \"-\").toLowerCase();\n}\n\n/**\n * Gets the language code from the locale\n *\n * @param locale the input locale\n *\n * @return the language code\n */\nexport function languageCode(locale: string): string {\n\treturn locale.split(\"-\")[0];\n}\n\n/**\n * Determine the locale that should be used based on user preference, cookies, and browser language\n *\n * @param userPreferences optional user preferences to get the preferred language from\n *\n * @return the language code\n */\nexport function getPreferredLocale(userPreferences?: IUserPreferences): string {\n\t// prefer user preference value, then cookie value, then browser locale\n\treturn (\n\t\tuserPreferences?.preferredLocale ||\n\t\tgetCookie(recentLanguageKey) ||\n\t\tresolveLocale(navigator.language) ||\n\t\t\"en-us\"\n\t);\n}\n\n/**\n * Gets the language code from the locale\n *\n * @param supportedLocales array of possible locales\n * @param localeCode the input locale\n *\n * @return The closest matching locale in supportedLocales to locale or null if there is none\n */\nexport function resolveLocale(localeCode: string): string | null {\n\tconst supportedLocales = getSupportedLocales();\n\tconst normalizedLocale = normalize(localeCode);\n\n\tconst exactMatch = supportedLocales.find(\n\t\t(currentLocale) => normalize(currentLocale) === normalizedLocale,\n\t);\n\n\tif (exactMatch) {\n\t\treturn exactMatch;\n\t}\n\n\tconst userLanguageCode = languageCode(normalizedLocale);\n\n\tconst languageCodeMatch = supportedLocales.find(\n\t\t(currentLocale) => normalize(languageCode(currentLocale)) === userLanguageCode,\n\t);\n\n\tif (languageCodeMatch) {\n\t\treturn languageCodeMatch;\n\t}\n\n\treturn null;\n}\n\n/**\n * Gets translations from strings.json\n *\n * @return pre-auth strings from strings.json\n */\nexport function getTranslationJson(): Record> {\n\treturn preAuthStrings;\n}\n\n/**\n * Gets the language code from the locale\n *\n * @return List of supported locales from strings.json\n */\nexport function getSupportedLocales(): string[] {\n\treturn Object.keys(preAuthStrings);\n}\n\n/**\n * Gets references to this page's HTML header and stylesheet link element.\n *\n * @returns Required HTMLElements and attributes.\n */\nexport function getDomElements(): IDomElements {\n\treturn {\n\t\thtmlEl: document.querySelector(\"html\"),\n\t};\n}\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file Shared state for the user's local settings\n * @author Razi Rais\n * @module Epic.VideoApp.State.Settings\n */\n\nimport { buildSharedState } from \"@epic/react-redux-booster\";\nimport store from \"~/app/store\";\nimport { getPreferredLocale } from \"~/utils/i18n/i18nUtils\";\n\n/// TYPES ///\n\nexport interface ISettingsState {\n\treadonly locale: string;\n\tloadingLocale: string | null;\n}\n\n/// INIT ///\n\nexport function getInitialState(): ISettingsState {\n\tconst locale = getPreferredLocale();\n\treturn { locale, loadingLocale: null };\n}\n\n/// REDUCERS ///\n\nexport function setLocale(state: ISettingsState, newLocale: string): ISettingsState {\n\treturn { ...state, locale: newLocale, loadingLocale: null };\n}\n\nexport function setLoadingLocale(state: ISettingsState, locale: string | null): ISettingsState {\n\treturn { ...state, loadingLocale: locale };\n}\n\n/// SELECTORS ///\n\nfunction getLocale(state: ISettingsState): string {\n\treturn state.locale;\n}\n\nfunction getLoadingLocale(state: ISettingsState): string | null {\n\treturn state.loadingLocale;\n}\n\n/// BUILD IT ///\n\nconst builtState = buildSharedState({\n\tinit: getInitialState,\n\tselectors: { getLocale, getLoadingLocale },\n\treducers: { setLoadingLocale },\n});\n\nstore.addSharedState(builtState.sharedState, \"settings\");\n\nexport const {\n\tactionCreators: settingsActions,\n\tuseSharedState: useSettingsState,\n\tsharedState: state,\n} = builtState;\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file Shared state for the speakers\n * @author Colin Walters\n * @module Epic.VideoApp.State.Speakers\n */\n\nimport { buildSharedState } from \"@epic/react-redux-booster\";\nimport store from \"~/app/store\";\n\n/// TYPES ///\n\ninterface ISpeaker {\n\tid: string | null;\n\tlabel: string | null;\n}\n\nexport interface ISpeakerState {\n\tselectedSpeaker: ISpeaker | null;\n}\n\n/// INIT ///\n\nexport function getInitialState(): ISpeakerState {\n\treturn { selectedSpeaker: null };\n}\n\n/// REDUCERS ///\n\n// set both the device ID and label at the same time, but don't store the whole MediaDeviceInfo because we don't need all of it's properties\nexport function setSelectedSpeaker(state: ISpeakerState, newSpeaker: MediaDeviceInfo | null): ISpeakerState {\n\treturn {\n\t\t...state,\n\t\tselectedSpeaker: {\n\t\t\tid: newSpeaker?.deviceId ?? null,\n\t\t\tlabel: newSpeaker?.label ?? null,\n\t\t},\n\t};\n}\n\n/// SELECTORS ///\n\nfunction getSelectedSpeakerId(state: ISpeakerState): string | null {\n\treturn state.selectedSpeaker?.id ?? null;\n}\n\nfunction getSelectedSpeakerLabel(state: ISpeakerState): string | null {\n\treturn state.selectedSpeaker?.label ?? null;\n}\n\n/// BUILD IT ///\n\nconst builtState = buildSharedState({\n\tinit: getInitialState,\n\tselectors: { getSelectedSpeakerId, getSelectedSpeakerLabel },\n});\nstore.addSharedState(builtState.sharedState, \"speakers\");\n\nexport const { useSharedState: useSpeakerState, sharedState: state } = builtState;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file combined state for disconnection\n * @author Colin Walters\n * @module Epic.VideoApp.State.Combined.Disconnect\n */\n\nimport { withSharedStates } from \"@epic/react-redux-booster\";\nimport * as alerts from \"../alerts\";\nimport * as auth from \"../auth\";\nimport * as backgroundProcessors from \"../backgroundProcessors\";\nimport * as branding from \"../branding\";\nimport * as errorPage from \"../errorPage\";\nimport * as feedbackSurvey from \"../feedbackSurvey\";\nimport * as hardwareTest from \"../hardwareTest\";\nimport * as imageCapture from \"../imageCapture\";\nimport * as localTracks from \"../localTracks\";\nimport * as room from \"../room\";\nimport * as settings from \"../settings\";\nimport * as speakers from \"../speakers\";\nimport * as ui from \"../ui\";\nimport * as user from \"../user\";\n\n/// COMBINED STATE TYPES ///\n\ntype CombinedState = [\n\talerts.IAlertState,\n\tauth.IAuthState,\n\tbackgroundProcessors.IBackgroundProcessorsState,\n\tbranding.IBrandingState,\n\terrorPage.IErrorPageState,\n\thardwareTest.IHardwareTestState,\n\timageCapture.IImageCaptureState,\n\tlocalTracks.ILocalTrackState,\n\troom.IRoomState,\n\tsettings.ISettingsState,\n\tspeakers.ISpeakerState,\n\tui.IUIState,\n\tuser.IUserState,\n\tfeedbackSurvey.IFeedbackSurveyState,\n];\n\n/// COMBINED REDUCERS ///\n\n/**\n * Reset shared state back to its initial values, except values needed for error/disconnected screens\n * @param state shared state prior to this action\n * @returns the new shared state after this action is applied\n */\nfunction clearStateForDisconnect(state: CombinedState): CombinedState {\n\tconst [\n\t\t,\n\t\tauthState,\n\t\t,\n\t\tbrandingState,\n\t\terrorPageState,\n\t\t,\n\t\t,\n\t\t,\n\t\troomState,\n\t\tsettingsState,\n\t\t,\n\t\t,\n\t\tuserState,\n\t\tfeedbackSurveyState,\n\t] = state;\n\treturn [\n\t\talerts.getInitialState(),\n\t\tauth.getInitialState(),\n\t\tbackgroundProcessors.getInitialState(),\n\t\tbrandingState,\n\t\terrorPageState,\n\t\thardwareTest.getInitialState(true),\n\t\timageCapture.getInitialState(),\n\t\tlocalTracks.getInitialState(),\n\t\troom.getInitialState(true, roomState),\n\t\tsettingsState,\n\t\tspeakers.getInitialState(),\n\t\tui.getInitialState(),\n\t\tuser.setDisconnectedState(userState),\n\t\t// Move the current JWT into the feedback survey state, to use as a back up if failures/timeouts happen while retrieving a survey-specific JWT\n\t\tfeedbackSurvey.setFeedbackJWT(feedbackSurveyState, authState.jwt),\n\t];\n}\n\n/// BUILD IT ///\n\nexport const disconnectCombinedReducers = {\n\tclearStateForDisconnect: withSharedStates(\n\t\talerts.state,\n\t\tauth.state,\n\t\tbackgroundProcessors.state,\n\t\tbranding.state,\n\t\terrorPage.state,\n\t\thardwareTest.state,\n\t\timageCapture.state,\n\t\tlocalTracks.state,\n\t\troom.state,\n\t\tsettings.state,\n\t\tspeakers.state,\n\t\tui.state,\n\t\tuser.state,\n\t\tfeedbackSurvey.state,\n\t).buildReducer(clearStateForDisconnect),\n};\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file Combined localTrack / speaker / hardwareTest state\n * @author Colin Walters\n * @module Epic.VideoApp.State.Combined.Hardware\n */\n\nimport { withSharedStates } from \"@epic/react-redux-booster\";\nimport { DeviceStatus, DeviceStatusSubtype, IStreamDevices } from \"~/types\";\nimport * as alerts from \"../alerts\";\nimport * as hardwareTest from \"../hardwareTest\";\nimport * as localTracks from \"../localTracks\";\nimport * as speaker from \"../speakers\";\n\n/// COMBINED STATE TYPES ///\n\ntype SpeakerStatusState = [speaker.ISpeakerState, hardwareTest.IHardwareTestState];\ntype DeviceStatusState = [\n\tlocalTracks.ILocalTrackState,\n\tspeaker.ISpeakerState,\n\thardwareTest.IHardwareTestState,\n];\ntype NewDeviceState = [localTracks.ILocalTrackState, hardwareTest.IHardwareTestState, alerts.IAlertState];\ntype StreamDeviceState = [localTracks.ILocalTrackState, hardwareTest.IHardwareTestState];\n\n/// COMBINED REDUCERS ///\n\n/**\n * Set the selected speaker into shared state and update the speaker status to reflect the newly selected speaker\n *\n * @param state shared state prior to this action\n * @param newSpeaker the new speaker media device to use, or null to indicate there is no selected speaker\n * @returns the new shared state after this action is applied\n */\nfunction setSelectedSpeaker(\n\tstate: SpeakerStatusState,\n\tnewSpeaker: MediaDeviceInfo | null,\n): SpeakerStatusState {\n\tconst [prevSpeakerState, prevHardwareTestState] = state;\n\n\t// if there is no old or new speaker and the status is already error, don't make any updates\n\tif (\n\t\t!newSpeaker &&\n\t\t!prevSpeakerState.selectedSpeaker &&\n\t\tprevHardwareTestState.speakerState.status === DeviceStatus.warning\n\t) {\n\t\treturn [prevSpeakerState, prevHardwareTestState];\n\t}\n\n\tconst newSpeakerState = speaker.setSelectedSpeaker(prevSpeakerState, newSpeaker);\n\n\tlet newHardwareTestState: hardwareTest.IHardwareTestState;\n\tif (newSpeaker) {\n\t\t// if there is a speaker, update status to success\n\t\tnewHardwareTestState = hardwareTest.setSpeakerSuccess(prevHardwareTestState);\n\t} else {\n\t\t// otherwise, indicate that there is an error\n\t\tnewHardwareTestState = hardwareTest.setSpeakerState(prevHardwareTestState, {\n\t\t\tstatus: DeviceStatus.warning,\n\t\t\terrorType: DeviceStatusSubtype.noDevice,\n\t\t});\n\t}\n\n\treturn [newSpeakerState, newHardwareTestState];\n}\n\n/**\n * When successfully switching the video device, update the local track state and hardware test state to reflect the new device\n *\n * @param state shared state prior to this action\n * @param device new device switched to. If undefined, then assume we're still using the existing device.\n * @returns new shared state after this action is applied\n */\nfunction switchVideoDevice(state: NewDeviceState, device: MediaDeviceInfo | undefined): NewDeviceState {\n\tconst [prevLocalTracksState, prevHardwareTestState, prevAlertState] = state;\n\tconst newLocalTrackState = localTracks.switchVideoDevice(prevLocalTracksState, device);\n\tconst newHardwareTestState = hardwareTest.setCameraSuccess(prevHardwareTestState);\n\tconst newAlertState = alerts.clearToasts(prevAlertState, \"camera-switch-failed\");\n\n\treturn [newLocalTrackState, newHardwareTestState, newAlertState];\n}\n\n/**\n * Mark devices as having been auto-selected (allowing flow to proceed as usual when auto-selection may not be desirable)\n *\n * @param state shared state prior to this action\n * @returns the new shared state after this action is applied\n */\nfunction setHasAutoSelectedDevicesIOS(state: DeviceStatusState): DeviceStatusState {\n\tconst [prevLocalTracksState, ...prevSpeakerStatusState] = state;\n\n\t// mark auto-selection as having occurred (for a consistent flow, even though we're not auto-selecting on iOS)\n\tlet newLocalTrackState = localTracks.setHasAutoSelectedVideo(prevLocalTracksState);\n\tnewLocalTrackState = localTracks.setHasAutoSelectedAudio(newLocalTrackState);\n\n\t// for speaker, use this combined state's reducer (so any changes implemented above are utilized here)\n\tconst newSpeakerStatusState = setSelectedSpeaker(prevSpeakerStatusState, null);\n\n\treturn [newLocalTrackState, ...newSpeakerStatusState];\n}\n\n/**\n * Sets the initial hardware test state based on the initial state of the user's devices\n *\n * @param state shared state prior to this action\n * @param initialDeviceInfo the initial device info used for setting the initial hardware test state\n * @returns the new shared state after this action is applied\n */\nfunction setInitialHardwareTestState(\n\tstate: StreamDeviceState,\n\tinitialDeviceInfo: IStreamDevices,\n): StreamDeviceState {\n\tconst [prevLocalTracksState, prevHardwareTestState] = state;\n\n\tlet newHardwareTestState = { ...prevHardwareTestState };\n\n\tif (initialDeviceInfo.isAudioEnabled) {\n\t\tnewHardwareTestState = hardwareTest.setMicrophoneState(prevHardwareTestState, {\n\t\t\tstatus: DeviceStatus.success,\n\t\t\terrorType: DeviceStatusSubtype.none,\n\t\t});\n\t}\n\n\tif (initialDeviceInfo.isVideoEnabled) {\n\t\tnewHardwareTestState = hardwareTest.setCameraSuccess(newHardwareTestState);\n\t}\n\n\treturn [prevLocalTracksState, newHardwareTestState];\n}\n\n/// BUILD IT ///\n\nexport const hardwareCombinedReducers = {\n\tsetSelectedSpeaker: withSharedStates(speaker.state, hardwareTest.state).buildReducer(setSelectedSpeaker),\n\tsetHasAutoSelectedDevicesIOS: withSharedStates(\n\t\tlocalTracks.state,\n\t\tspeaker.state,\n\t\thardwareTest.state,\n\t).buildReducer(setHasAutoSelectedDevicesIOS),\n\tswitchVideoDevice: withSharedStates(localTracks.state, hardwareTest.state, alerts.state).buildReducer(\n\t\tswitchVideoDevice,\n\t),\n\tsetInitialHardwareTestState: withSharedStates(localTracks.state, hardwareTest.state).buildReducer(\n\t\tsetInitialHardwareTestState,\n\t),\n};\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file Combined State for Image Capture actions\n * @author Will Cooper\n * @module Epic.VideoApp.State.Combined.ImageCapture\n */\n\nimport { withSharedStates } from \"@epic/react-redux-booster\";\nimport { IParticipantVideo, Toast } from \"~/types\";\nimport * as alerts from \"../alerts\";\nimport * as image from \"../imageCapture\";\nimport * as ui from \"../ui\";\n\n/// COMBINED STATE TYPES ///\n\ntype UIActionState = [ui.IUIState, alerts.IAlertState, image.IImageCaptureState];\n\n/// COMBINED REDUCERS ///\n\ninterface IImageCaptureActiveParams {\n\t/** Identifier of new potential pin source */\n\tnewPin: IParticipantVideo | null;\n}\n\n/**\n * Set ImageCapture state active. Control toasts\n * @param state shared state prior to this action\n * @param params new data to set for pinning / toasts\n * @returns the new shared state after this action is applied\n */\nfunction setImageCaptureActive(state: UIActionState, params: IImageCaptureActiveParams): UIActionState {\n\tconst [prevUIState, prevAlertState, prevImageState] = state;\n\n\tlet newUIState = ui.setImCapHovered(prevUIState, true);\n\n\t// Pin the video on-hover / on-click if they are is not already\n\tif (!prevUIState.pinningState.pinnedVideo && params.newPin) {\n\t\tnewUIState = ui.toggleVideoPinned(newUIState, {\n\t\t\tpinnedVideo: params.newPin,\n\t\t\tupdateSource: \"ImageCapture\",\n\t\t});\n\t}\n\n\tconst newAlertState = alerts.postToastAlert(prevAlertState, getImageCaptureReadyToast());\n\n\treturn [newUIState, newAlertState, prevImageState];\n}\n\n/**\n * Clear ImageCapture state active. Remove toasts and image capture highlight\n * @param state shared state prior to this action\n * @returns the new shared state after this action is applied\n */\nfunction clearImageCaptureActive(state: UIActionState): UIActionState {\n\tconst [prevUIState, prevAlertState, prevImageState] = state;\n\n\tlet newUIState = ui.setImCapHovered(prevUIState, false);\n\n\t// If we pinned from activating the image capture button, release the pin here\n\tif (prevUIState.pinningState.updateSource === \"ImageCapture\") {\n\t\tnewUIState = ui.toggleVideoPinned(newUIState, null);\n\t}\n\n\tconst newAlertState = alerts.clearToasts(prevAlertState, \"image-capture-ready\");\n\n\treturn [newUIState, newAlertState, prevImageState];\n}\n\nfunction clearImageCaptureAlert(state: UIActionState): UIActionState {\n\tconst [prevUIState, prevAlertState, prevImageState] = state;\n\n\tconst newAlertState = alerts.clearAlert(prevAlertState);\n\tconst newImageState = image.setImageData(prevImageState, null);\n\n\treturn [prevUIState, newAlertState, newImageState];\n}\n\n/**\n * Helper function to get a remote screen sharing toast\n * @returns image capture ready toast\n */\nfunction getImageCaptureReadyToast(): Toast {\n\tconst messageToken = \"ImageCaptureReady\";\n\treturn {\n\t\ttype: \"image-capture-ready\",\n\t\tmessageToken,\n\t};\n}\n\n/// BUILD IT ///\n\nexport const imageCaptureCombinedReducers = {\n\tsetImageCaptureActive: withSharedStates(ui.state, alerts.state, image.state).buildReducer(\n\t\tsetImageCaptureActive,\n\t),\n\tclearImageCaptureActive: withSharedStates(ui.state, alerts.state, image.state).buildReducer(\n\t\tclearImageCaptureActive,\n\t),\n\tclearImageCaptureAlert: withSharedStates(ui.state, alerts.state, image.state).buildReducer(\n\t\tclearImageCaptureAlert,\n\t),\n};\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file Combined settings / userPreferences state\n * @author Spencer Eanes\n * @module Epic.VideoApp.State.Combined.Locale\n */\n\nimport { withSharedStates } from \"@epic/react-redux-booster\";\nimport * as settings from \"../settings\";\nimport * as user from \"../user\";\n\n/// COMBINED STATE TYPES ///\n\ntype CombinedState = [settings.ISettingsState, user.IUserState];\n\n/// COMBINED REDUCERS ///\n\n/**\n * Update a users current and preferred language and publishes user preferences to local storage\n * @param state shared state prior to this action\n * @param newJwt the new locale to set into state\n * @returns the new shared state after this action is applied\n */\nfunction setLocale(state: CombinedState, newLocale: string): CombinedState {\n\tif (!newLocale) {\n\t\treturn state;\n\t}\n\n\tconst [prevSettingState, prevPrefState] = state;\n\tconst newSettingState = settings.setLocale(prevSettingState, newLocale);\n\tconst newPrefState = user.setPreferredLocale(prevPrefState, newLocale);\n\n\treturn [newSettingState, newPrefState];\n}\n\n/// BUILD IT ///\n\nexport const localeCombinedReducers = {\n\tsetLocale: withSharedStates(settings.state, user.state).buildReducer(setLocale),\n};\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file Combined local track / room / ui / alerts state for screen sharing\n * @author Colin Walters\n * @module Epic.VideoApp.State.Combined.ScreenSharing\n */\n\nimport { withSharedStates } from \"@epic/react-redux-booster\";\nimport { IParticipantInfo, Toast } from \"~/types\";\nimport * as alerts from \"../alerts\";\nimport * as room from \"../room\";\nimport * as ui from \"../ui\";\n\n/// COMBINED STATE TYPES ///\n\ntype RemoteScreenShareState = [room.IRoomState, ui.IUIState, alerts.IAlertState];\n\n/// COMBINED REDUCERS ///\n\ninterface IRemoteSharingParams {\n\t/** ID of the participant that started or stopped sharing */\n\tid: string;\n\n\t/** whether or not the participant is currently sharing */\n\tactive: boolean;\n}\n\n/**\n * Pin shared screen and post a toast message that a user is sharing their screen, name used in alert will come from participant info\n * If no participant is sharing, clearing the toast and unpin the shared screen\n * @param state shared state prior to this action\n * @param params sid of participant that started or stopped sharing their screen and which of those actions too place\n * @returns the new shared state after this action is applied\n */\nfunction setRemoteSharingParticipant(\n\tstate: RemoteScreenShareState,\n\tparams: IRemoteSharingParams,\n): RemoteScreenShareState {\n\tconst { id, active } = params;\n\tconst [prevRoomState, prevUIState, prevAlertState] = state;\n\n\tlet newUIState = prevUIState;\n\tlet newAlertState: alerts.IAlertState;\n\n\tif (active) {\n\t\t// pin the shared screen\n\t\tnewUIState = ui.toggleVideoPinned(newUIState, {\n\t\t\tpinnedVideo: { identity: id, videoType: \"screen\" },\n\t\t\tupdateSource: \"Default\",\n\t\t});\n\n\t\t// grab the user's name from participant info to be used in the toast\n\t\tconst info = prevRoomState.participantInfo.find((p) => p.identity === id);\n\t\tnewAlertState = alerts.postToastAlert(prevAlertState, getRemoteScreenShareToast(id, info));\n\t} else {\n\t\t// usePinnedParticipant handles unpinning when feeds no longer exist, but\n\t\t// won't for screens to avoid a race condition when someone takes over sharing\n\t\tif (newUIState.pinningState.pinnedVideo?.identity === id) {\n\t\t\tnewUIState = ui.toggleVideoPinned(newUIState, null);\n\t\t}\n\n\t\t// clear the toast that the user was sharing\n\t\tnewAlertState = alerts.clearToasts(prevAlertState, \"remote-screen-shared\");\n\t}\n\n\treturn [prevRoomState, newUIState, newAlertState];\n}\n\n/**\n * Helper function to get a remote screen sharing toast\n * @param identity participant identity\n * @param info participant info, if known\n * @returns remote screen sharing toast that should be posted\n */\nexport function getRemoteScreenShareToast(id: string, info?: IParticipantInfo): Toast {\n\tlet messageToken = \"RemoteScreenShare_DefaultName\";\n\tlet messageArgs: string[] | undefined;\n\tif (info?.displayName) {\n\t\tmessageToken = \"RemoteScreenShare\";\n\t\tmessageArgs = [info.displayName];\n\t}\n\treturn {\n\t\ttype: \"remote-screen-shared\",\n\t\tmessageToken,\n\t\tmessageArgs,\n\t\textraInfo: { identity: id },\n\t};\n}\n\n/// BUILD IT ///\n\nexport const screenSharingCombinedReducers = {\n\tsetRemoteSharingParticipant: withSharedStates(room.state, ui.state, alerts.state).buildReducer(\n\t\tsetRemoteSharingParticipant,\n\t),\n};\n","/**\n * @copyright Copyright 2022 Epic Systems Corporation\n * @file Combined reducer for setting participant specific information\n * @author Will Cooper\n * @module Epic.VideoApp.State.Combined.Participant\n */\n\nimport { withSharedStates } from \"@epic/react-redux-booster\";\nimport { IParticipantInfo } from \"~/types\";\nimport * as alerts from \"../alerts\";\nimport * as moderation from \"../moderation\";\nimport * as room from \"../room\";\nimport { getRemoteScreenShareToast } from \"./screenSharing\";\n\n/// COMBINED STATE TYPES ///\n\ntype CombinedParticipantState = [room.IRoomState, alerts.IAlertState, moderation.IModerationState];\n/// COMBINED REDUCERS ///\n\n/**\n * Set a participant's info in shared state and update any toasts that belong to that user\n * @param state shared state prior to this action\n * @param info participant info to update\n * @returns the new shared state after this action is applied\n */\nfunction setParticipantInfo(\n\tstate: CombinedParticipantState,\n\tinfo: IParticipantInfo,\n): CombinedParticipantState {\n\tconst [prevRoomState, prevAlertState, prevModerationState] = state;\n\n\tconst newRoomState = room.setParticipantInfo(prevRoomState, info);\n\n\t// if there is a toast that this user is sharing their screen, update it with their new name\n\tlet newAlertState = prevAlertState;\n\tconst toast = Object.values(prevAlertState.toasts).find(\n\t\t(toast) => toast.type === \"remote-screen-shared\" && toast.extraInfo.identity === info.identity,\n\t);\n\tif (toast) {\n\t\tnewAlertState = alerts.postToastAlert(prevAlertState, getRemoteScreenShareToast(info.identity, info));\n\t}\n\n\tconst oldRequest = prevModerationState.requestedParticipants.find(\n\t\t(participant) => participant.identity === info.identity,\n\t);\n\n\tlet newModerationState;\n\n\t// Manage requests when we received stateful updates\n\tif (oldRequest) {\n\t\tconst { audio, video, screenShare } = oldRequest;\n\t\tconst newRequestEntry: room.IParticipantRequest = {\n\t\t\tidentity: info.identity,\n\t\t\taudio: audio,\n\t\t\tvideo: video,\n\t\t\tscreenShare: screenShare,\n\t\t};\n\n\t\t// Check individual update status\n\t\tif (audio && !info.micLocked) {\n\t\t\tnewRequestEntry.audio = false;\n\t\t}\n\t\tif (video && !info.cameraLocked) {\n\t\t\tnewRequestEntry.video = false;\n\t\t}\n\t\tif (screenShare && !info.screenShareLocked) {\n\t\t\tnewRequestEntry.screenShare = false;\n\t\t}\n\t\tif (!newRequestEntry.audio && !newRequestEntry.video && !newRequestEntry.screenShare) {\n\t\t\t// Clear state if we are there are no unfilled requests\n\t\t\tnewModerationState = moderation.clearParticipantRequest(prevModerationState, info.identity);\n\t\t} else {\n\t\t\t// Update state otherwise\n\t\t\tnewModerationState = moderation.postParticipantRequest(prevModerationState, newRequestEntry);\n\t\t}\n\t}\n\n\treturn [newRoomState, newAlertState, newModerationState || prevModerationState];\n}\n\n/// BUILD IT ///\n\nexport const participantCombinedReducers = {\n\tsetParticipantInfo: withSharedStates(room.state, alerts.state, moderation.state).buildReducer(\n\t\tsetParticipantInfo,\n\t),\n};\n","/**\n * @copyright Copyright 2022 Epic Systems Corporation\n * @file Combined survey state\n * @author Max Harkins\n * @module Epic.VideoApp.State.Combined.Survey\n */\n\nimport { withSharedStates } from \"@epic/react-redux-booster\";\nimport { FeedbackPageStep } from \"~/types/survey\";\nimport * as feedbackSurvey from \"../feedbackSurvey\";\nimport * as user from \"../user\";\n\n/// COMBINED STATE TYPES ///\n\ntype CombinedState = [user.IUserState, feedbackSurvey.IFeedbackSurveyState];\n\n/// COMBINED REDUCERS ///\n\n/**\n * Clears unneeded state and leaves the user feedback workflow\n * @param state shared state prior to this action\n * @returns the new shared state after this action is applied\n */\nfunction clearSurveyState(state: CombinedState, hasSubmittedSurvey: boolean): CombinedState {\n\tconst [, prevFeedbackSurveyState] = state;\n\n\tconst newUserState = user.getInitialState();\n\tconst newFeedbackSurveyState = feedbackSurvey.setFeedbackStep(\n\t\tprevFeedbackSurveyState,\n\t\thasSubmittedSurvey ? FeedbackPageStep.completed : FeedbackPageStep.hidden,\n\t);\n\n\treturn [newUserState, newFeedbackSurveyState];\n}\n\n/// BUILD IT ///\n\nexport const surveyCombinedReducers = {\n\tclearSurveyState: withSharedStates(user.state, feedbackSurvey.state).buildReducer(clearSurveyState),\n};\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file Combined State\n * @author Colin Walters\n * @module Epic.VideoApp.State.Combined.Index\n */\n\nimport { buildCombinedReducers, buildCombinedSelectors } from \"@epic/react-redux-booster\";\nimport store from \"~/app/store\";\nimport { chatCombinedReducers } from \"./chat\";\nimport { configurationCombinedReducers, configurationCombinedSelectors } from \"./configuration\";\nimport { connectionCombinedReducers } from \"./connection\";\nimport { disconnectCombinedReducers } from \"./disconnect\";\nimport { hardwareCombinedReducers } from \"./hardware\";\nimport { imageCaptureCombinedReducers } from \"./imageCapture\";\nimport { localeCombinedReducers } from \"./locale\";\nimport { participantCombinedReducers } from \"./participant\";\nimport { screenSharingCombinedReducers } from \"./screenSharing\";\nimport { surveyCombinedReducers } from \"./survey\";\n\n/// BUILD IT ///\n\nexport const combinedActions = buildCombinedReducers({\n\t...connectionCombinedReducers,\n\t...disconnectCombinedReducers,\n\t...hardwareCombinedReducers,\n\t...screenSharingCombinedReducers,\n\t...imageCaptureCombinedReducers,\n\t...localeCombinedReducers,\n\t...participantCombinedReducers,\n\t...configurationCombinedReducers,\n\t...surveyCombinedReducers,\n\t...chatCombinedReducers,\n});\n\nexport const useCombinedSelectors = buildCombinedSelectors({\n\t...configurationCombinedSelectors,\n});\n\nstore.addCombinedReducers(combinedActions);\nstore.addCombinedSelectors(useCombinedSelectors);\n","/**\n * @copyright Copyright 2023 Epic Systems Corporation\n * @file Shared state for Picture-in-Picture feature\n * @author Arun Vasireddy\n * @module Epic.VideoApp.State.PictureInPicture\n */\n\nimport { buildSharedState } from \"@epic/react-redux-booster\";\nimport store from \"~/app/store\";\nimport { VideoType } from \"~/web-core/types\";\n\n/// TYPES ///\n\ntype PiPSource = \"Auto\" | \"Manual\";\n\nexport interface IPictureInPictureState {\n\tisPiPModeEnabled: boolean;\n\tisActiveParticipantInPiP: boolean;\n\tvideoID: string;\n\tvideoType: VideoType | \"\";\n\tpipSource: PiPSource;\n}\n\n/// INIT ///\n\nfunction getInitialState(): IPictureInPictureState {\n\treturn {\n\t\tisPiPModeEnabled: false,\n\t\tisActiveParticipantInPiP: false,\n\t\tvideoID: \"\",\n\t\tvideoType: \"\",\n\t\tpipSource: \"Manual\",\n\t};\n}\n\n/// REDUCERS ///\n\nfunction togglePiPMode(\n\tstate: IPictureInPictureState,\n\tvalue: { videoID?: string; videoType?: VideoType; activeMode: boolean; source?: PiPSource },\n): IPictureInPictureState {\n\tif (value.activeMode) {\n\t\treturn {\n\t\t\t...state,\n\t\t\tvideoID: value.videoID ? value.videoID : state.videoID,\n\t\t\tvideoType: value.videoType ? value.videoType : state.videoType,\n\t\t\tisPiPModeEnabled: !state.isActiveParticipantInPiP,\n\t\t\tisActiveParticipantInPiP: !state.isActiveParticipantInPiP,\n\t\t\tpipSource: value?.source ?? \"Manual\",\n\t\t};\n\t} else if (\n\t\t(state.videoID && value.videoID && value.videoID !== state.videoID) ||\n\t\t(state.videoType && value.videoType && value.videoType !== state.videoType)\n\t) {\n\t\treturn {\n\t\t\t...state,\n\t\t\tvideoID: value.videoID ? value.videoID : \"\",\n\t\t\tvideoType: value.videoType ? value.videoType : \"\",\n\t\t\tisPiPModeEnabled: true,\n\t\t\tisActiveParticipantInPiP: false,\n\t\t\tpipSource: value?.source ?? \"Manual\",\n\t\t};\n\t}\n\treturn {\n\t\t...state,\n\t\tvideoID: value.videoID ? value.videoID : \"\",\n\t\tvideoType: value.videoType ? value.videoType : \"\",\n\t\tisPiPModeEnabled: !state.isPiPModeEnabled,\n\t\tisActiveParticipantInPiP: false,\n\t\tpipSource: value?.source ?? \"Manual\",\n\t};\n}\n\nfunction enterPiPMode(\n\tstate: IPictureInPictureState,\n\tvalue: { newVideoID: string; newVideoType: VideoType },\n): IPictureInPictureState {\n\treturn { ...state, videoID: value.newVideoID, videoType: value.newVideoType, isPiPModeEnabled: true };\n}\n\nfunction leavePiPMode(\n\tstate: IPictureInPictureState,\n\tvalue: { videoID?: string; videoType?: string; isMainParticipant: boolean },\n): IPictureInPictureState {\n\treturn {\n\t\t...state,\n\t\tisPiPModeEnabled:\n\t\t\tvalue.videoID === state.videoID && value.videoType === state.videoType\n\t\t\t\t? false\n\t\t\t\t: state.isPiPModeEnabled,\n\t\tisActiveParticipantInPiP:\n\t\t\tvalue.isMainParticipant ||\n\t\t\t(value.videoID === state.videoID && value.videoType === state.videoType) ||\n\t\t\t!state.isPiPModeEnabled\n\t\t\t\t? false\n\t\t\t\t: state.isActiveParticipantInPiP,\n\t};\n}\n\nfunction leaveAutoPiPMode(state: IPictureInPictureState): IPictureInPictureState {\n\tif (state.pipSource === \"Auto\") {\n\t\treturn {\n\t\t\t...state,\n\t\t\tisPiPModeEnabled: false,\n\t\t\tisActiveParticipantInPiP: false,\n\t\t\tvideoID: \"\",\n\t\t\tvideoType: \"\",\n\t\t\tpipSource: \"Manual\",\n\t\t};\n\t}\n\n\treturn state;\n}\n\n/// SELECTORS ///\n\nfunction getPipStatus(state: IPictureInPictureState): boolean {\n\treturn state.isPiPModeEnabled;\n}\n\nfunction getPipVideoID(state: IPictureInPictureState): string {\n\treturn state.videoID;\n}\n\nfunction getPipVideoType(state: IPictureInPictureState): string {\n\treturn state.videoType;\n}\n\nfunction getInActiveParticipantMode(state: IPictureInPictureState): boolean {\n\treturn state.isActiveParticipantInPiP;\n}\n\n/// BUILD IT ///\n\nconst builtState = buildSharedState({\n\tinit: getInitialState,\n\treducers: {\n\t\ttogglePiPMode,\n\t\tenterPiPMode,\n\t\tleavePiPMode,\n\t\tleaveAutoPiPMode,\n\t},\n\tselectors: {\n\t\tgetPipStatus,\n\t\tgetPipVideoID,\n\t\tgetPipVideoType,\n\t\tgetInActiveParticipantMode,\n\t},\n});\n\nstore.addSharedState(builtState.sharedState, \"pictureInPicture\");\n\nexport const {\n\tactionCreators: pipActions,\n\tuseSharedState: usePictureInPictureState,\n\tsharedState: state,\n} = builtState;\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file State exports\n * @author Matt Panico\n * @module Epic.VideoApp.State.Index\n */\n\nexport { alertActions, useAlertState } from \"./alerts\";\nexport { authActions, useAuthState } from \"./auth\";\nexport { backgroundProcessorsActions, useBackgroundProcessorsState } from \"./backgroundProcessors\";\nexport { brandingActions, useBrandingState } from \"./branding\";\nexport { chatUserActions, useChatUserState } from \"./chatUsers\";\nexport { combinedActions } from \"./combined\";\nexport { errorPageActions, useErrorPageState } from \"./errorPage\";\nexport { hardwareTestActions, useHardwareTestState } from \"./hardwareTest\";\nexport { imageActions, useImageState } from \"./imageCapture\";\nexport { useLocalTrackState } from \"./localTracks\";\nexport { messageActions, useMessageState } from \"./messages\";\nexport { moderationActions, useModerationState } from \"./moderation\";\nexport { pipActions, usePictureInPictureState } from \"./pictureInPicture\";\nexport { roomActions, useRoomState } from \"./room\";\nexport { settingsActions, useSettingsState } from \"./settings\";\nexport { useSpeakerState } from \"./speakers\";\nexport { uiActions, useUIState } from \"./ui\";\nexport { useUserState, userActions } from \"./user\";\n","/**\n * @copyright Copyright 2022 Epic Systems Corporation\n * @file types used for branding\n * @author Colin Walters\n * @module Epic.VideoApp.Types.Branding\n */\n\nexport interface IBrandingConfig {\n\tlogo: string | null;\n\tbackgroundImage: string | null;\n\tcolors: IBrandedColors | null;\n\tvirtualBackgroundImages: IRemoteResource[] | null;\n}\n\nexport interface IRemoteResource {\n\tname: string;\n\tid: string;\n}\n\nexport interface IBrandedColors {\n\tbrandPrimary: string | null;\n\tbrandAccentBack: string | null;\n\tbrandBackground: string | null;\n\toverridePalette: string | null;\n}\n\nenum MyChartColor {\n\tbrandPrimary = \"--WPColor-BrandPrimary\",\n\tbrandAccentBack = \"--WPColor-BrandAccentBack\",\n\tbrandBackground = \"--WPColor-BrandBackground\",\n}\n\nenum PaletteColor {\n\theaderBack = \"--EVCColor-HeaderBack\",\n\theaderButtonFore = \"--EVCColor-HeaderButtonFore\",\n\theaderButtonBack = \"--EVCColor-HeaderButtonBack\",\n\theaderButtonHoverBack = \"--EVCColor-HeaderButtonHoverBack\",\n\theaderButtonHoverBorder = \"--EVCColor-HeaderButtonHoverBorder\",\n\tmenuBack = \"--EVCColor-MenuBack\",\n\tmenuButtonBack = \"--EVCColor-MenuButtonBack\",\n\tmenuButtonHoverBack = \"--EVCColor-MenuButtonHoverBack\",\n\tmenuButtonHoverBorder = \"--EVCColor-MenuButtonHoverBorder\",\n}\n\nexport type BrandedColor = MyChartColor | PaletteColor;\nexport const BrandedColor = { ...MyChartColor, ...PaletteColor };\n\nexport enum PaletteName {\n\tblack = \"black\",\n\tred = \"red\",\n\torange = \"orange\",\n\tyellow = \"yellow\",\n\tgreen = \"green\",\n\tblue = \"blue\",\n\tpurple = \"purple\",\n\tpink = \"pink\",\n}\n\nexport type Palette = Record;\n\nconst DEFAULT_PALETTE: Palette = {\n\t[BrandedColor.headerBack]: \"#000000\",\n\t[BrandedColor.headerButtonFore]: \"#ffffff\",\n\t[BrandedColor.headerButtonBack]: \"#000000\",\n\t[BrandedColor.headerButtonHoverBack]: \"#111111\",\n\t[BrandedColor.headerButtonHoverBorder]: \"#333333\",\n\t[BrandedColor.menuBack]: \"#222222\",\n\t[BrandedColor.menuButtonBack]: \"#222222\",\n\t[BrandedColor.menuButtonHoverBack]: \"#333333\",\n\t[BrandedColor.menuButtonHoverBorder]: \"#444444\",\n};\n\nconst RED_PALETTE: Palette = {\n\t[BrandedColor.headerBack]: \"#2a1012\",\n\t[BrandedColor.headerButtonFore]: \"#ffffff\",\n\t[BrandedColor.headerButtonBack]: \"#2a1012\",\n\t[BrandedColor.headerButtonHoverBack]: \"#5d3f3b\",\n\t[BrandedColor.headerButtonHoverBorder]: \"#5b4446\",\n\t[BrandedColor.menuBack]: \"#442a26\",\n\t[BrandedColor.menuButtonBack]: \"#442a26\",\n\t[BrandedColor.menuButtonHoverBack]: \"#5d3f3b\",\n\t[BrandedColor.menuButtonHoverBorder]: \"#5b4446\",\n};\n\nconst ORANGE_PALETTE: Palette = {\n\t[BrandedColor.headerBack]: \"#342210\",\n\t[BrandedColor.headerButtonFore]: \"#ffffff\",\n\t[BrandedColor.headerButtonBack]: \"#342210\",\n\t[BrandedColor.headerButtonHoverBack]: \"#584d3c\",\n\t[BrandedColor.headerButtonHoverBorder]: \"#695c47\",\n\t[BrandedColor.menuBack]: \"#413626\",\n\t[BrandedColor.menuButtonBack]: \"#413626\",\n\t[BrandedColor.menuButtonHoverBack]: \"#584d3c\",\n\t[BrandedColor.menuButtonHoverBorder]: \"#695c47\",\n};\n\nconst YELLOW_PALETTE: Palette = {\n\t[BrandedColor.headerBack]: \"#2a2a10\",\n\t[BrandedColor.headerButtonFore]: \"#ffffff\",\n\t[BrandedColor.headerButtonBack]: \"#2a2a10\",\n\t[BrandedColor.headerButtonHoverBack]: \"#58583c\",\n\t[BrandedColor.headerButtonHoverBorder]: \"#696647\",\n\t[BrandedColor.menuBack]: \"#414026\",\n\t[BrandedColor.menuButtonBack]: \"#414026\",\n\t[BrandedColor.menuButtonHoverBack]: \"#58583c\",\n\t[BrandedColor.menuButtonHoverBorder]: \"#696647\",\n};\n\nconst GREEN_PALETTE: Palette = {\n\t[BrandedColor.headerBack]: \"#0b2715\",\n\t[BrandedColor.headerButtonFore]: \"#ffffff\",\n\t[BrandedColor.headerButtonBack]: \"#0b2715\",\n\t[BrandedColor.headerButtonHoverBack]: \"#394b3a\",\n\t[BrandedColor.headerButtonHoverBorder]: \"#445945\",\n\t[BrandedColor.menuBack]: \"#243425\",\n\t[BrandedColor.menuButtonBack]: \"#243425\",\n\t[BrandedColor.menuButtonHoverBack]: \"#394b3a\",\n\t[BrandedColor.menuButtonHoverBorder]: \"#445945\",\n};\n\nconst BLUE_PALETTE: Palette = {\n\t[BrandedColor.headerBack]: \"#0b233a\",\n\t[BrandedColor.headerButtonFore]: \"#ffffff\",\n\t[BrandedColor.headerButtonBack]: \"#0b233a\",\n\t[BrandedColor.headerButtonHoverBack]: \"#3c4758\",\n\t[BrandedColor.headerButtonHoverBorder]: \"#475469\",\n\t[BrandedColor.menuBack]: \"#263141\",\n\t[BrandedColor.menuButtonBack]: \"#263141\",\n\t[BrandedColor.menuButtonHoverBack]: \"#3c4758\",\n\t[BrandedColor.menuButtonHoverBorder]: \"#475469\",\n};\n\nconst PURPLE_PALETTE: Palette = {\n\t[BrandedColor.headerBack]: \"#310B4A\",\n\t[BrandedColor.headerButtonFore]: \"#ffffff\",\n\t[BrandedColor.headerButtonBack]: \"#310B4A\",\n\t[BrandedColor.headerButtonHoverBack]: \"#4e4256\",\n\t[BrandedColor.headerButtonHoverBorder]: \"#5d4e66\",\n\t[BrandedColor.menuBack]: \"#372c3f\",\n\t[BrandedColor.menuButtonBack]: \"#372c3f\",\n\t[BrandedColor.menuButtonHoverBack]: \"#4e4256\",\n\t[BrandedColor.menuButtonHoverBorder]: \"#5d4e66\",\n};\n\nconst PINK_PALETTE: Palette = {\n\t[BrandedColor.headerBack]: \"#2f0c26\",\n\t[BrandedColor.headerButtonFore]: \"#ffffff\",\n\t[BrandedColor.headerButtonBack]: \"#2f0c26\",\n\t[BrandedColor.headerButtonHoverBack]: \"#4b2b41\",\n\t[BrandedColor.headerButtonHoverBorder]: \"#5a374d\",\n\t[BrandedColor.menuBack]: \"#341d2c\",\n\t[BrandedColor.menuButtonBack]: \"#341d2c\",\n\t[BrandedColor.menuButtonHoverBack]: \"#4b2b41\",\n\t[BrandedColor.menuButtonHoverBorder]: \"#5a374d\",\n};\n\nexport const PALETTE_MAP: Record = {\n\tblack: DEFAULT_PALETTE,\n\tblue: BLUE_PALETTE,\n\tgreen: GREEN_PALETTE,\n\torange: ORANGE_PALETTE,\n\tpink: PINK_PALETTE,\n\tpurple: PURPLE_PALETTE,\n\tred: RED_PALETTE,\n\tyellow: YELLOW_PALETTE,\n};\n\nexport const ALL_COLOR_PALETTES = Object.entries(PALETTE_MAP)\n\t.filter(([paletteName]) => paletteName !== \"black\")\n\t.map(([, palette]) => palette);\n","/**\n * @copyright Copyright 2022 Epic Systems Corporation\n * @file color utilities\n * @author Colin Walters\n * @module Epic.VideoApp.Utils.Color\n */\n\ntype ColorDefinition = [number, number, number, number];\n\nexport const BLACK: ColorDefinition = [0, 0, 0, 1];\nexport const WHITE: ColorDefinition = [255, 255, 255, 1];\n\n/**\n * Parse a hex code or rgba color into a color definition\n * @param colorString color string to parse into a color definition\n * @param defaultColor default color to fall back on if parsing fails\n * @returns parsed color definition if successful, default color if unsuccessful\n */\nexport function parseColor(\n\tcolorString: string,\n\tdefaultColor: \"black\" | \"white\" | ColorDefinition = \"black\",\n): ColorDefinition {\n\tconst fallback =\n\t\ttypeof defaultColor !== \"string\" ? defaultColor : defaultColor === \"black\" ? BLACK : WHITE;\n\n\tif (colorString.startsWith(\"#\")) {\n\t\treturn parseHexColor(colorString) ?? fallback;\n\t}\n\tif (colorString.startsWith(\"rgb\")) {\n\t\treturn parseRgbaString(colorString) ?? fallback;\n\t}\n\treturn fallback;\n}\n\n/**\n * Parse a hex code string into a color definition\n * @param hexString hex code string to parse into a color definition\n * @returns parsed color definition if successful, null otherwise\n */\nfunction parseHexColor(hexString: string): ColorDefinition | null {\n\tif (!/^#(([\\da-f]{3}){1,2}|([\\da-f]{4}){1,2})$/i.test(hexString)) {\n\t\treturn null;\n\t}\n\n\tconst chunkSize = Math.floor((hexString.length - 1) / 3);\n\tconst hexPieces = hexString.slice(1).match(new RegExp(`.{${chunkSize}}`, \"g\")); //eslint-disable-line @typescript-eslint/prefer-regexp-exec\n\tif (!hexPieces) {\n\t\treturn null;\n\t}\n\n\tconst [red, green, blue, alpha] = hexPieces.map((piece) => parseInt(piece.repeat(2 / piece.length), 16));\n\treturn [red, green, blue, getAlphaFloat(alpha)];\n}\n\n/**\n * Get the fractional alpha value for a color definition\n * @param a decimal alpha value from hex code to get fractional value from\n * @returns fractional alpha value for color def\n */\nfunction getAlphaFloat(a?: number): number {\n\tif (typeof a !== \"undefined\") {\n\t\treturn a / 255;\n\t}\n\treturn 1;\n}\n\n/**\n * Parse an RGBA color string into a color definition\n * @param rgbaString rgba(RR, GG, BB, AA) string to parse into a color definition\n * @returns parsed color definition if successful, null otherwise\n */\nfunction parseRgbaString(rgbaString: string): ColorDefinition | null {\n\tif (!rgbaString?.startsWith(\"rgb(\") && !rgbaString?.startsWith(\"rgba(\")) {\n\t\treturn null;\n\t}\n\n\tconst openIndex = rgbaString.indexOf(\"(\");\n\tconst closeIndex = rgbaString.indexOf(\")\");\n\n\tconst pieces = rgbaString\n\t\t.substring(openIndex + 1, closeIndex)\n\t\t.split(\",\")\n\t\t.map((piece) => parseFloat(piece.trim()));\n\n\tif (pieces.length < 3 || pieces.length > 4) {\n\t\treturn null;\n\t}\n\n\tconst [red, green, blue, alpha] = pieces;\n\treturn [red, green, blue, alpha ?? 1];\n}\n\n/**\n * Parse a color string into a color definition, if it is not already a color definition\n * @param color the color to convert to a color definition\n * @returns the provided color, parsed into a color definition\n */\nfunction toColorDefinition(color: string | ColorDefinition): ColorDefinition {\n\treturn typeof color === \"string\" ? parseColor(color) : color;\n}\n\n/**\n * Get a color's hue (or the wavelength in the visible light spectrum where energy output from the source is greatest)\n * Hue is an indication by position (in degrees) on the RGB color wheel [0, 360] and can be calculated\n * using the following (when r, b, and g are the color's hex component / 255):\n * \t\tif r is max: H = 60 * (g - b) / (max(r, g, b) - min(r, g, b))\n * \t\tif g is max: H = 60 * (2 + (b - r) / (max(r, g, b) - min(r, g, b)))\n * \t\tif b is max: H = 60 * (4 + (r - g) / (max(r, g, b) - min(r, g, b)))\n * Note: the output is an angle, so 360 should be added to negative values\n * Source: https://donatbalipapp.medium.com/colours-maths-90346fb5abda\n *\n * @param color the color to calculate the hue of\n * @returns hue of the provided color\n */\nexport function getHue(color: string | ColorDefinition): number {\n\tcolor = toColorDefinition(color);\n\n\tconst [red, green, blue] = color;\n\tconst redFractional = red / 255;\n\tconst greenFractional = green / 255;\n\tconst blueFractional = blue / 255;\n\n\tconst max = Math.max(redFractional, greenFractional, blueFractional);\n\tconst min = Math.min(redFractional, greenFractional, blueFractional);\n\n\tlet hue: number;\n\tif (redFractional === max) {\n\t\thue = (greenFractional - blueFractional) / (max - min);\n\t} else if (greenFractional === max) {\n\t\thue = 2 + (blueFractional - redFractional) / (max - min);\n\t} else {\n\t\thue = 4 + (redFractional - greenFractional) / (max - min);\n\t}\n\n\thue *= 60;\n\treturn hue < 0 ? hue + 360 : hue;\n}\n\n/**\n * Get a color's luminosity (or brightness)\n * Luminosity is basically how light a color is, is measured on a scale [0, 1], and can be\n * calculated using the following (when r, b, and g are that color's hex component / 255):\n * \t\tL = 0.5 * (max(r, b, g) + min(r, g, b))\n * Source: https://donatbalipapp.medium.com/colours-maths-90346fb5abda\n *\n * @param color the color to calculate the luminosity of\n * @returns luminosity of the provided color\n */\nexport function getLuminosity(color: string | ColorDefinition): number {\n\tconst [red, green, blue] = toColorDefinition(color);\n\n\tconst redFractional = red / 255;\n\tconst greenFractional = green / 255;\n\tconst blueFractional = blue / 255;\n\n\treturn (\n\t\t0.5 *\n\t\t(Math.max(redFractional, greenFractional, blueFractional) +\n\t\t\tMath.min(redFractional, greenFractional, blueFractional))\n\t);\n}\n\n/**\n * Get a color's saturation (or the relative bandwidth of the visible output from a light source)\n * Saturation indicates how \"pure\" a color is (lower values appear more washed out), is measured on a [0, 1]\n * scale, and can be calculated using the following (when r, b, and g are that color's hex component / 255):\n * \t\tif L < 1: S = (max(r, g, b) - min(r, g, b)) / (1 - |2L - 1|)\n * \t\tif L == 1: S = 0\n * Source: https://donatbalipapp.medium.com/colours-maths-90346fb5abda\n *\n * @param color the color to calculate the saturation of\n * @returns saturation of the provided color\n */\nexport function getSaturation(color: string | ColorDefinition): number {\n\tconst [red, green, blue] = toColorDefinition(color);\n\n\tconst redFractional = red / 255;\n\tconst greenFractional = green / 255;\n\tconst blueFractional = blue / 255;\n\n\tconst luminosity = getLuminosity(color);\n\n\tif (luminosity === 1) {\n\t\treturn 0;\n\t}\n\n\treturn (\n\t\t(Math.max(redFractional, greenFractional, blueFractional) -\n\t\t\tMath.min(redFractional, greenFractional, blueFractional)) /\n\t\t(1 - Math.abs(2 * luminosity - 1))\n\t);\n}\n\n/**\n * Determine whether or not the provided color is black\n * @param color color to check if it is black\n * @returns true if the color is black, false otherwise\n */\nexport function isBlack(color: string): boolean {\n\tconst [red, green, blue] = parseColor(color);\n\treturn red === 0 && green === 0 && blue === 0;\n}\n","/**\n * @copyright Copyright 2022 Epic Systems Corporation\n * @file utility functions used to brand the page\n * @author Colin Walters\n * @module Epic.VideoApp.Utils.Branding\n */\n\nimport {\n\tALL_COLOR_PALETTES,\n\tBrandedColor,\n\tIBrandedColors,\n\tPalette,\n\tPaletteName,\n\tPALETTE_MAP,\n} from \"~/types/branding\";\nimport { getHue, getSaturation, isBlack } from \"./color\";\n\n/** Threshold used to determine when the default (gray-scale) header palette should be used */\nconst SATURATION_THRESHOLD = 0.2;\n\n/**\n * Get color variables that should be applied based on the organization's branding\n * @param brandedColors map of organizations branded colors\n * @returns map of color variables that should be applied to the page\n */\nexport function getEVCColorsFromBrandedColors(brandedColors: IBrandedColors): Record {\n\treturn { ...getPaletteColors(brandedColors), ...getBrandedColors(brandedColors) };\n}\n\n/**\n * Get the set of branded colors that are used and any colors derived from an organization's branding\n * @param brandedColors the organization's branded colors\n * @returns set of colors derived directly from branded colors\n */\nfunction getBrandedColors(brandedColors: IBrandedColors): Record {\n\tconst { brandPrimary, brandAccentBack, brandBackground } = brandedColors;\n\n\tconst colors: Record = {};\n\n\tif (brandPrimary) {\n\t\tcolors[BrandedColor.brandPrimary] = brandPrimary;\n\t}\n\tif (brandAccentBack) {\n\t\tcolors[BrandedColor.brandAccentBack] = brandAccentBack;\n\t}\n\tif (brandBackground) {\n\t\tcolors[BrandedColor.brandBackground] = brandBackground;\n\t}\n\n\treturn colors;\n}\n\n/**\n * Get the palette to used given an organization's branding\n * @param brandedColors organization's branded colors\n * @returns the palette to use\n */\nfunction getPaletteColors(brandedColors: IBrandedColors): Palette | null {\n\tconst { brandBackground, overridePalette } = brandedColors;\n\n\t// first check for a valid override palette\n\tconst lowerOverridePalette = overridePalette?.toLowerCase();\n\tif (lowerOverridePalette && lowerOverridePalette in PALETTE_MAP) {\n\t\treturn PALETTE_MAP[lowerOverridePalette as PaletteName];\n\t}\n\n\t// if no color was provided or saturation is too low, don't return a palette to use the default\n\tif (!brandBackground || shouldUseDefaultPalette(brandBackground)) {\n\t\treturn null;\n\t}\n\n\t// for all color palettes, determine the header with the closest hue to the provided color\n\tconst [firstPalette, ...otherPalettes] = ALL_COLOR_PALETTES;\n\n\tconst backgroundHue = getHue(brandBackground);\n\tlet closestPaletteInHue = firstPalette;\n\tlet smallestHueDiff = getHueDiffWithPalette(backgroundHue, firstPalette);\n\n\totherPalettes.forEach((palette) => {\n\t\tconst diff = getHueDiffWithPalette(backgroundHue, palette);\n\n\t\tif (diff < smallestHueDiff) {\n\t\t\tclosestPaletteInHue = palette;\n\t\t\tsmallestHueDiff = diff;\n\t\t}\n\t});\n\n\treturn closestPaletteInHue;\n}\n\n/**\n * Determine whether or not the default, gray-scale header palette should be used\n * @param color the organization's branded color being used to determine the header palette to use\n * @returns true if the default, gray-scale palette should be used, false otherwise\n */\nfunction shouldUseDefaultPalette(color: string): boolean {\n\treturn isBlack(color) || getSaturation(color) < SATURATION_THRESHOLD;\n}\n\n/**\n * Get the difference between a given hue and a color palette's header color\n * @param hue the hue to compare\n * @param palette the color palette whose header color should be compared\n * @returns the angle difference between the provided hue and the palette's header color's hue\n */\nfunction getHueDiffWithPalette(hue: number, palette: Palette): number {\n\tconst headerBackHue = getHue(palette[BrandedColor.headerBack]);\n\treturn Math.abs(calculateAngleDiff(hue, headerBackHue));\n}\n\n/**\n * Calculate the difference between two angles\n * @param degA the first angle to compare (in degrees)\n * @param degB the second angle to compare (in degrees)\n * @returns the difference between the angles\n */\nfunction calculateAngleDiff(degA: number, degB: number): number {\n\tconst radA = (degA * Math.PI) / 180;\n\tconst radB = (degB * Math.PI) / 180;\n\n\tconst minAngle = Math.atan2(Math.sin(radA - radB), Math.cos(radA - radB));\n\n\treturn (minAngle * 180) / Math.PI;\n}\n","/**\n * @copyright Copyright 2022 Epic Systems Corporation\n * @file component that injects branding CSS variables into the page's header\n * @author Colin Walters\n * @module Epic.VideoApp.Components.Branding.BrandingStyleSheet\n */\n\nimport React, { FC, useEffect, useState } from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { useBrandingState } from \"~/state\";\nimport { getEVCColorsFromBrandedColors } from \"~/utils/branding\";\n\n/**\n * The BrandingStyleSheet component\n */\nconst BrandingStyleSheet: FC = () => {\n\tconst brandedColors = useBrandingState((sel) => sel.getColors(), []);\n\tconst [colorCss, setColorCss] = useState();\n\n\tconst headEl = document.getElementsByTagName(\"head\");\n\n\tuseEffect(() => {\n\t\tif (brandedColors) {\n\t\t\tconst allColors = getEVCColorsFromBrandedColors(brandedColors);\n\t\t\tsetColorCss(generateColorCss(allColors));\n\t\t}\n\t}, [brandedColors]);\n\n\treturn headEl.length && colorCss ? ReactDOM.createPortal(, headEl[0]) : null;\n};\n\n/**\n * Generate the branded stylesheet contents from branded colors\n * @param brandedColors map of all branded colors to be applied\n * @returns the branded colors converted into a stylesheet\n */\nfunction generateColorCss(brandedColors: Record): string {\n\tconst css = Object.entries(brandedColors)\n\t\t.filter(([, value]) => !!value)\n\t\t.map(([key, value]) => `\\t${key}: ${value};\\r\\n`)\n\t\t.reduce((concatenated, val) => concatenated + val, \"\");\n\n\treturn css && `:root {\\r\\n${css}}\\r\\n`;\n}\n\nBrandingStyleSheet.displayName = \"BrandingStyleSheet\";\n\nexport default BrandingStyleSheet;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file hook to get a function that will audit the use of a feature\n * @author Colin Walters\n * @module Epic.VideoApp.Hooks.Auditing.UseAuditFeatureUse\n */\n\nimport { useCallback } from \"react\";\nimport { useAuthState } from \"~/state\";\nimport { EventFlag, EventType } from \"~/types\";\nimport { makeRequest } from \"~/utils/request\";\n\ntype FeatureAudit = AuditEvent[];\n/**\n * Get a function to audit feature use\n * @returns a function to audit feature usage\n */\nexport function useAuditFeatureUse(): (featureInput: FeatureAudit) => Promise {\n\tconst jwt = useAuthState((selectors) => selectors.getJWT(), []);\n\n\tconst auditUse = useCallback(\n\t\tasync (audit: FeatureAudit) => {\n\t\t\t// if room.isDisconnecting is used to not log events, ensure it works with screen sharing stopped\n\t\t\t// being audited in useScreenShareTrackActions.removeScreenShareTrack when called via useDisconnect\n\t\t\tif (!jwt) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tawait auditFeatureUse(jwt, audit);\n\t\t\t} catch {\n\t\t\t\t// don't allow feature use auditing to crash the client\n\t\t\t}\n\t\t},\n\t\t[jwt],\n\t);\n\n\treturn auditUse;\n}\n\ninterface IAuditParams {\n\t/** timestamp that the action occurred, defaults to current time */\n\ttimestamp?: number;\n\t/** The unique participant identifier that an event targets. This should correspond the the Twilio identity field (session.UniqueUserId) */\n\ttargetParticipantId?: string;\n}\n\ntype AuditEvent = IBasicAuditEvent | IScreenShareAuditEvent;\n\nexport interface IBasicAuditEvent extends IAuditParams {\n\tfeature: EventType;\n}\n\nexport interface IScreenShareAuditEvent extends IBasicAuditEvent {\n\tfeature: EventType.screenSharingStarted | EventType.screenSharingStopped;\n\teventFlags: EventFlag.hasScreenShareAudio[];\n}\n\n/**\n * Make a web server call to audit a feature use for the current user\n * @param jwt current session JWT\n * @param feature feature to audit\n * @param params additional details about the feature being audited\n */\nasync function auditFeatureUse(jwt: string, audit: FeatureAudit): Promise {\n\treturn makeRequest(\"/api/VideoCall/AuditFeatureUse\", \"POST\", jwt, { events: audit });\n}\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file hook to manage saving client logs at a set interval\n * @author Colin Walters\n * @module Epic.VideoApp.Hooks.Auditing.UseClientLogging\n */\n\nimport { useEffect } from \"react\";\nimport { useAuthState, useRoomState } from \"~/state\";\nimport { secondsToMs } from \"~/utils/dateTime\";\nimport { saveClientLogs, warn } from \"~/utils/logging\";\n\nexport function useClientLogging(): void {\n\tconst JWT = useAuthState((selectors) => selectors.getJWT(), []);\n\tconst clientLoggingInterval = useRoomState((selectors) => selectors.getClientLoggingInterval(), []);\n\n\tuseEffect(() => {\n\t\tif (!JWT || clientLoggingInterval < 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet handle = 0;\n\t\tfunction storeClientLogs(): void {\n\t\t\tif (JWT) {\n\t\t\t\tsaveClientLogs(JWT)\n\t\t\t\t\t.then((_result) => {\n\t\t\t\t\t\tif (clientLoggingInterval > 0) {\n\t\t\t\t\t\t\thandle = window.setTimeout(storeClientLogs, secondsToMs(clientLoggingInterval));\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.catch((error: Error) => {\n\t\t\t\t\t\twarn(error);\n\t\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\thandle = window.setTimeout(storeClientLogs, secondsToMs(clientLoggingInterval));\n\n\t\treturn (): void => {\n\t\t\t// when unmounting, try to log anything after the previous interval\n\t\t\tif (handle !== 0) {\n\t\t\t\tclearTimeout(handle);\n\t\t\t}\n\t\t\tvoid saveClientLogs(JWT);\n\t\t};\n\t}, [JWT, clientLoggingInterval]);\n}\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file exports for auditing hooks\n * @author Colin Walters\n * @module Epic.VideoApp.Hooks.Auditing.Index\n */\n\nexport * from \"./useAuditFeatureUse\";\nexport * from \"./useClientLogging\";\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file resolve complex classNames\n * @author Colin Walters\n * @module Epic.VideoApp.Utils.ClassName\n */\n\ninterface IStyleModule {\n\t[className: string]: string;\n}\n\ninterface IOptionalClassNames {\n\t[className: string]: boolean | undefined;\n}\n\n/**\n * Resolve a set of optional classNames to a single className string.\n * Class names passed to optionalClassNames should be included as { : } (ex: { disabled: true })\n * For variable class names this can be done as { [classNameVariable]: }\n * @param styles style module that the classNames come from\n * @param optionalClasses classNames to be optionally included in the className string\n * @param rawClassName base className that should always be included in className string, but doesn't come from styles module\n * @returns className string\n */\nexport function resolveClassName(\n\tstyles: IStyleModule,\n\toptionalClasses: IOptionalClassNames,\n\trawClassName?: string,\n): string {\n\tconst classNames = Object.keys(optionalClasses)\n\t\t.filter((className) => optionalClasses[className])\n\t\t.map((className) => styles[className]);\n\n\tif (rawClassName) {\n\t\tclassNames.push(rawClassName);\n\t}\n\n\treturn classNames.join(\" \");\n}\n","/**\n * @copyright Copyright 2023 Epic Systems Corporation\n * @file the BackgroundStyleContext Context\n * @author Max Harkins\n * @module Epic.VideoApp.Components.Utilities.BackgroundStyleContext\n */\n\nimport React, { FC } from \"react\";\nimport { StyleContext } from \"../../types/layout\";\n\nexport const BackgroundStyleContext = React.createContext(StyleContext.dark);\n\n/**\n * Props for StyleContextProvider Component\n */\ninterface IProps {\n\tstyle: StyleContext;\n}\n\n/**\n * Context to determine whether light or dark themed components should be used\n * @param props the props ;)\n */\nexport const BackgroundStyleContextProvider: FC = (props) => {\n\tconst { style, children } = props;\n\n\treturn {children};\n};\nBackgroundStyleContextProvider.displayName = \"BackgroundStyleContextProvider\";\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file Card component\n * @author Matt Panico\n * @module Epic.VideoApp.Components.Cards.Card\n */\n\nimport React, { FC } from \"react\";\nimport { resolveClassName } from \"~/utils/className\";\nimport { BackgroundStyleContextProvider } from \"../Utilities/BackgroundStyleContext\";\nimport styles from \"./Card.module.scss\";\n\nimport { StyleContext } from \"../../types/layout\";\n\ninterface IProps {\n\t/* If there's a button at the bottom of this card */\n\thasButton?: boolean;\n\t/* If the card should always be centered, rather than moving out of the way of video previews */\n\tcentered?: boolean;\n\t/* If a rawClass is provided, it is used as a class for the card element to style the card*/\n\trawClass?: string;\n}\n\nexport enum CardTestIds {\n\tself = \"Card\",\n}\n\n/**\n * The Card component\n * @param _props The props ;)\n */\nconst Card: FC = (props) => {\n\tconst { hasButton, centered, rawClass, children } = props;\n\tconst className = resolveClassName(styles, { card: true, hasButton, centered }, rawClass);\n\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t{children}\n\t\t\t
\n\t\t
\n\t);\n};\n\nCard.displayName = \"Card\";\n\nexport default Card;\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file the CardContainer component\n * @author Colin Walters\n * @module Epic.VideoApp.Components.Cards.CardContainer\n */\n\nimport React, { FC } from \"react\";\nimport { resolveClassName } from \"~/utils/className\";\nimport styles from \"./CardContainer.module.scss\";\n\ninterface IProps {\n\thidden?: boolean;\n\t/* If the card inside the container can be assumed to be short, for calculating overlap */\n\tshortCard?: boolean;\n\t/* If the card should be extra wide */\n\twideCard?: boolean;\n}\n\n/**\n * The CardContainer component\n * @param props The props ;)\n */\nconst CardContainer: FC = (props) => {\n\tconst { children, hidden, shortCard, wideCard } = props;\n\n\tconst className = resolveClassName(styles, { cardContainer: true, shortCard, wideCard });\n\n\treturn (\n\t\t
\n\t\t\t{children}\n\t\t
\n\t);\n};\n\nCardContainer.displayName = \"CardContainer\";\n\nexport default CardContainer;\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file the SimpleCard component\n * @author Colin Walters\n * @module Epic.VideoApp.Components.Cards.SimpleCard\n */\n\nimport React, { FC } from \"react\";\nimport Card from \"./Card\";\nimport CardContainer from \"./CardContainer\";\n\ninterface IProps {\n\t/* If the card should always be centered, rather than moving out of the way of video previews */\n\tcentered?: boolean;\n}\n\n/**\n * The SimpleCard component\n * @param props The props ;)\n */\nconst SimpleCard: FC = (props) => {\n\tconst { centered = true, children } = props;\n\n\treturn (\n\t\t\n\t\t\t{children}\n\t\t\n\t);\n};\n\nSimpleCard.displayName = \"SimpleCard\";\n\nexport default SimpleCard;\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file the Error Card component\n * @author Spencer Eanes\n * @module Epic.VideoApp.Components.Cards.ErrorCard\n */\n\nimport React, { FC, useCallback, useMemo } from \"react\";\nimport Card from \"./Card\";\nimport styles from \"./ErrorCard.module.scss\";\nimport SimpleCard from \"./SimpleCard\";\n\n/**\n * Props for ErrorCard Component\n */\ninterface IProps {\n\ttitleText: string;\n\tbodyText?: string;\n\tskipFocus?: boolean;\n\tskipPositioning?: boolean;\n}\n\nexport enum ErrorCardTestIds {\n\theader = \"ErrorCardHeader\",\n\tbody = \"ErrorCardBody\",\n}\n\n/**\n * The ErrorCard component\n * @param _props The props ;)\n */\nconst ErrorCard: FC = (props) => {\n\tconst { titleText, bodyText, skipFocus = false, skipPositioning = false, children } = props;\n\n\tconst focusHeader = useCallback((headerRef: HTMLHeadingElement) => headerRef && headerRef.focus(), []);\n\n\tconst cardContent = useMemo(() => {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t\n\t\t\t\t\t{titleText}\n\t\t\t\t\n\n\t\t\t\t{bodyText &&

{bodyText}

}\n\t\t\t\t{children}\n\t\t\t\n\t\t);\n\t}, [bodyText, children, focusHeader, skipFocus, titleText]);\n\n\treturn skipPositioning ? {cardContent} : {cardContent};\n};\n\nErrorCard.displayName = \"ErrorCard\";\n\nexport default ErrorCard;\n","/**\n * @copyright Copyright 2022 Epic Systems Corporation\n * @file KeyboardShortcutText component\n * @author Colin Walters and Liam Liden\n * @module Epic.VideoApp.Components.Utilities.KeyboardShortcutText\n */\n\nimport React, { FC } from \"react\";\nimport { isMobile } from \"~/utils/os\";\nimport style from \"./KeyboardShortcutText.module.scss\";\n\nexport enum KeyboardShortCutTextTestIds {\n\tself = \"KeyboardShortcutText\",\n}\n\n/**\n * Props for KeyboardShortcutText Component\n */\ninterface IProps {\n\ttext: string;\n\tkeyCombination?: string[];\n\tclassName?: string;\n}\n\n// modifier keys to ignore when finding the key to underline\nconst modifierKeys = [\"alt\", \"control\", \"shift\"];\n\n/**\n * The KeyboardShortcutText component\n * @param props The props ;)\n */\nconst KeyboardShortcutText: FC = (props) => {\n\tconst { keyCombination, text, className } = props;\n\n\tif (!keyCombination) {\n\t\treturn {text};\n\t}\n\n\t// use the first non-modifier key as the letter to underline\n\tconst underlineKey = keyCombination\n\t\t.find((key) => !modifierKeys.includes(key.toLowerCase()))\n\t\t?.toLowerCase();\n\n\t// if that character isn't included for some reason (translation?) just return the text\n\tconst textLower = text.toLowerCase();\n\tif (isMobile() || !underlineKey || !textLower.includes(underlineKey)) {\n\t\treturn {text};\n\t}\n\n\t// if there's a full word starting with the hotkey, use that otherwise underline first occurrence\n\tconst fullWord = textLower.split(\" \").find((word) => word.startsWith(underlineKey));\n\tconst keyIndex = textLower.indexOf(fullWord || underlineKey);\n\tconst beforeKey = text.slice(0, keyIndex);\n\tconst afterKey = text.slice(keyIndex + 1);\n\n\treturn (\n\t\t\n\t\t\t{beforeKey}\n\t\t\t{text[keyIndex]}\n\t\t\t{afterKey}\n\t\t\n\t);\n};\n\nKeyboardShortcutText.displayName = \"KeyboardShortcutText\";\n\nexport default KeyboardShortcutText;\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file keyboard shortcut component\n * @author Colin Walters\n * @module Epic.VideoApp.Components.Utilities.KeyboardShortcut\n */\n\nimport React, { FC } from \"react\";\nimport { useKeyboardShortcut } from \"~/hooks\";\nimport KeyboardShortcutText from \"./KeyboardShortcutText\";\n\n/**\n * Props for KeyboardShortcut Component\n */\ninterface IProps {\n\tkeyCombination: string[];\n\tcallback: () => void;\n\tforModalAlert?: boolean;\n\tforImagePreviewPane?: boolean;\n\tclassName?: string;\n\ttext?: string;\n}\n\n/**\n * The KeyboardShortcut component\n * @param props The props ;)\n */\nconst KeyboardShortcut: FC = (props) => {\n\tconst { keyCombination, callback, forModalAlert, forImagePreviewPane, text, className } = props;\n\tuseKeyboardShortcut(keyCombination, callback, { forModalAlert, forImagePreviewPane });\n\tif (!text) {\n\t\treturn null;\n\t}\n\n\treturn ;\n};\n\nKeyboardShortcut.displayName = \"KeyboardShortcut\";\n\nexport default KeyboardShortcut;\n","/**\n * @copyright Copyright 2023-2024 Epic Systems Corporation\n * @file types used for language and locale\n * @author Hanita Haller\n * @module Epic.VideoApp.Types.Locale\n */\n\nexport interface ILocale {\n\t/** The locale code for the locale (i.e. en-us) */\n\tlocaleCode: string;\n\t/** The name of the language to display to users */\n\tdisplayName: string;\n\t/** The string to use for the aria label */\n\tariaLabel?: string;\n}\n\nexport type Direction = \"ltr\" | \"rtl\";\n\nexport interface IDomElements {\n\thtmlEl: HTMLHtmlElement | null;\n}\n\nexport interface ILanguageInfo {\n\tdisplayName: string;\n\tariaLabel?: string;\n\tisRtl?: boolean;\n\tincludesPostAuth?: boolean;\n\tisWin1252Incompatible?: boolean;\n}\n\nexport interface ITranslationInfo extends ILanguageInfo {\n\tisRtl: boolean;\n\ttranslation: Record;\n}\n\nexport const ENGLISH_US_LOCALE = \"en-us\";\nexport const ENABLED_LOCALES: Record = {\n\t[ENGLISH_US_LOCALE]: {\n\t\tdisplayName: \"English\",\n\t\tincludesPostAuth: true,\n\t},\n\t\"ar-ae\": {\n\t\tdisplayName: \"العربية\",\n\t\tariaLabel: \"Arabic\",\n\t\tisRtl: true,\n\t\tisWin1252Incompatible: true,\n\t},\n\t\"da-dk\": {\n\t\tdisplayName: \"Dansk\",\n\t},\n\t\"de-de\": {\n\t\tdisplayName: \"Deutsch\",\n\t},\n\t\"es-us\": {\n\t\tdisplayName: \"Español\",\n\t},\n\t\"fi-fi\": {\n\t\tdisplayName: \"Suomi\",\n\t},\n\t\"fr-fr\": {\n\t\tdisplayName: \"Français\",\n\t},\n\t\"ht-us\": {\n\t\tdisplayName: \"Kreyòl Ayisyen\",\n\t},\n\t\"pt-br\": {\n\t\tdisplayName: \"Português\",\n\t},\n\t\"pl-pl\": {\n\t\tdisplayName: \"Polski\",\n\t},\n\t\"ko-us\": {\n\t\tdisplayName: \"한국어\",\n\t},\n\t\"nb-no\": {\n\t\tdisplayName: \"Norsk\",\n\t},\n\t\"nl-nl\": {\n\t\tdisplayName: \"Nederlands\",\n\t},\n\t\"ru-us\": {\n\t\tdisplayName: \"Русский\",\n\t\tariaLabel: \"Russian\",\n\t\tisWin1252Incompatible: true,\n\t},\n\t\"sv-se\": {\n\t\tdisplayName: \"Svenska\",\n\t},\n\t\"tl-us\": {\n\t\tdisplayName: \"Tagalog\",\n\t},\n\t\"vi-us\": {\n\t\tdisplayName: \"Tiếng Việt\",\n\t},\n\t\"zh-ushans\": {\n\t\tdisplayName: \"简体中文\",\n\t\tariaLabel: \"Simplified Chinese\",\n\t\tisWin1252Incompatible: true,\n\t},\n\t\"zh-ushant\": {\n\t\tdisplayName: \"繁體中文\",\n\t\tariaLabel: \"Traditional Chinese\",\n\t\tisWin1252Incompatible: true,\n\t},\n\t\"zz-epic\": {\n\t\tdisplayName: \"Gibberish\",\n\t},\n\t\"zz-epicid\": {\n\t\tdisplayName: \"String IDs\",\n\t},\n};\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file tooltip for any element\n * @author Colin Walters\n * @module Epic.VideoApp.Components.Utilities.Tooltip\n */\n\nimport React, { FC, useLayoutEffect, useState } from \"react\";\nimport { resolveClassName } from \"~/utils/className\";\nimport styles from \"./Tooltip.module.scss\";\nimport { useSettingsState } from \"~/state\";\nimport { ENABLED_LOCALES } from \"~/types/locale\";\n\nexport type OffsetSafeDirection = \"left\" | \"right\";\n\n/**\n * Props for Tooltip Component\n */\ninterface IProps extends ITooltipInfo {\n\t/** Parent element that the tooltip belongs to. MUST USE `position: relative` FOR THE TOOLTIP TO CENTER ON THE ELEMENT */\n\telementWithTooltip: HTMLElement | null;\n}\n\nexport interface ITooltipInfo {\n\t/** Text of the tooltip */\n\ttext: string;\n\n\t/** Direction of the screen that the tooltip should be prevented from going off */\n\tdirection: OffsetSafeDirection;\n}\n\n/**\n * The Tooltip component.\n * @param props The props ;)\n */\nconst Tooltip: FC = (props) => {\n\tconst { elementWithTooltip, text, direction } = props;\n\n\tconst locale = useSettingsState((selectors) => selectors.getLocale(), []);\n\tconst isRtl = !!ENABLED_LOCALES[locale]?.isRtl;\n\n\tconst fixDirection = directionTransform(direction, isRtl);\n\tconst offsetParent = elementWithTooltip?.offsetParent;\n\tconst [tooltipStyle, setTooltipStyle] = useState({});\n\tconst [pointerStyle, setPointerStyle] = useState({});\n\n\tuseLayoutEffect(() => {\n\t\tif (!elementWithTooltip || !offsetParent) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst parentRect = offsetParent.getBoundingClientRect();\n\t\tconst elementRect = elementWithTooltip.getBoundingClientRect();\n\t\tconst elementHeight = elementRect.height;\n\n\t\tconst transform = getTooltipTransform(parentRect, elementRect, fixDirection);\n\t\tsetTooltipStyle({ transform, top: elementHeight + 5 });\n\t\tsetPointerStyle({ top: elementHeight - 5 });\n\t}, [elementWithTooltip, fixDirection, offsetParent, text, isRtl]); // include text to ensure offset is recalculated when language is changed\n\n\tconst tooltipClassName = resolveClassName(styles, {\n\t\ttooltip: true,\n\t\tleft: fixDirection === \"left\",\n\t\tright: fixDirection === \"right\",\n\t});\n\n\treturn (\n\t\t<>\n\t\t\t
\n\t\t\t\n\t\t\t\t{text}\n\t\t\t\n\t\t\n\t);\n};\n\nfunction directionTransform(direction: OffsetSafeDirection, isRtl: boolean): OffsetSafeDirection {\n\tif (!isRtl) {\n\t\treturn direction;\n\t}\n\tif (direction === \"right\") {\n\t\treturn \"left\";\n\t}\n\treturn \"right\";\n}\n\n/**\n * Determines the transform string for the css translation in x-direction of a tooltip\n *\n * @param elementRect - element with tooltip's containing rect\n * @param parentRect - element's parent's containing rect\n * @param offsetDirection - the direction in which the tooltip could go offscreen, will be offset in the opposite direction\n * @param margin - the minimum distance the button should be from the edge in offsetDirection\n * @returns transform that should be applied to the tooltip\n */\nfunction getTooltipTransform(\n\tparentRect: DOMRect,\n\telementRect: DOMRect,\n\toffsetDirection: OffsetSafeDirection,\n\tmargin: number = 10,\n): string {\n\t// Right and left elements start out with \"right: 50%\" and \"left: 50%\" in CSS respectively. This starts\n\t// their right or left edges in the middle of their parent element. Applying \"translate(50%)\" or\n\t// \"translate(-50%)\" will then translate the tooltip 50% of its own width in either direction,\n\t// centering the button. The math below calculates the distance the tooltip needs to be translated\n\t// to avoid overflowing the parentRect and translates the smaller distance via min/max.\n\n\tif (offsetDirection === \"right\") {\n\t\tconst pixelsToRight = Math.ceil(\n\t\t\tparentRect.right - margin - elementRect.right + elementRect.width / 2,\n\t\t);\n\t\treturn `translate(min(50%, ${pixelsToRight}px), 0)`;\n\t}\n\n\tconst pixelsToLeft = Math.ceil(parentRect.left + margin - elementRect.left - elementRect.width / 2);\n\treturn `translate(max(-50%, ${pixelsToLeft}px), 0)`;\n}\n\nTooltip.displayName = \"Tooltip\";\n\nexport default Tooltip;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file Button component with icon and keyboard shortcut\n * @author Spencer Eanes\n * @module Epic.VideoApp.Components.Utilities.BaseButton\n */\n\nimport React, { ComponentType, FC, ReactElement, RefObject, useRef } from \"react\";\nimport { ITestable } from \"~/types\";\nimport { resolveClassName } from \"~/utils/className\";\nimport { noOp } from \"~/utils/general\";\nimport { IconProps } from \"../../icons\";\nimport styles from \"./BaseButton.module.scss\";\nimport KeyboardShortcut from \"./KeyboardShortcut\";\nimport KeyboardShortcutText from \"./KeyboardShortcutText\";\nimport Tooltip, { ITooltipInfo } from \"./Tooltip\";\n\nexport enum BaseButtonTestIds {\n\tself = \"BaseButton\",\n}\n\n/**\n * Core props for BaseButton Component\n */\nexport interface IButtonProps extends ITestable {\n\ticon?: ComponentType;\n\tonClick: (event?: React.MouseEvent) => void;\n\tkeyboardShortcut?: string[];\n\ttext?: string;\n\tbuttonRef?: RefObject;\n\tforImagePreviewPane?: boolean;\n\ttooltipInfo?: ITooltipInfo;\n\tid?: string;\n\t// Will disable functionality of the button but keep it present in the tab order and read it as 'unavailable'\n\tdisabledTabbable?: boolean;\n\ttitle?: string;\n\tisLTR?: boolean;\n}\n\n/**\n * Full set of base button props that includes various values including props to overrides styles\n */\nexport interface IBaseButtonProps extends IButtonProps, React.ButtonHTMLAttributes {\n\tlabelClassName?: string;\n\trawClass?: string;\n\tnoStyle?: boolean;\n\ticonClassName?: string;\n\tonClick: (event?: React.MouseEvent) => void;\n}\n\n/**\n * The BaseButton component\n *\n * A note on focus: The focus behavior for this element is different between tabbing and clicking!\n * - When the button is focused by tabbing, focus will be applied to the \n\t);\n};\n\nBaseButton.displayName = \"BaseButton\";\n\nexport default BaseButton;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file Contains copyright notice strings, which don't need to be translated\n * @author Sasha Chackalackal\n * @module Epic.VideoApp.Utils.Copyright\n */\n\n// Copyright notice at the bottom of the screen\nexport const copyrightNotice = \"© 2020-2024 Epic Systems Corporation.\";\n\nexport const fullCopyrightNotice =\n\tcopyrightNotice + \" Epic® is a registered trademark of Epic Systems Corporation.\";\n\nexport const fullCopyrightNoticeAriaLabel =\n\t\"Copyright 2020-2024 Epic Systems Corporation. Epic is a registered trademark of Epic Systems Corporation.\";\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file Focus trap for modals\n * @author Tara Feldstein\n * @module Epic.VideoApp.Components.Alerts.FocusTrap\n */\n/* eslint-disable jsx-a11y/no-noninteractive-tabindex */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, RefObject, useCallback, useEffect, useRef, useState } from \"react\";\nimport { uiActions, useUIState } from \"~/state\";\nimport { getPseudoRandomId } from \"~/utils/general\";\nimport styles from \"./FocusTrap.module.scss\";\n\ninterface IProps {\n\tfirstElement: RefObject;\n\tlastElement?: RefObject;\n\tdefaultElement?: RefObject;\n}\n\nexport enum FocusTrapTestIds {\n\tself = \"FocusTrap\",\n}\n\n/**\n * Focus trap component\n *\n * Wraps its children in a focus trap, to keep the user from tabbing out of the section\n */\nconst FocusTrap: FC = (props) => {\n\tconst { firstElement, children } = props;\n\tconst previousFocus = useRef();\n\n\tconst [id] = useState(getPseudoRandomId());\n\tconst dispatch = useDispatch();\n\n\t// only generate an id and add it to the list once\n\tuseEffect(() => {\n\t\tdispatch(uiActions.addFocusTrap(id));\n\t\treturn () => {\n\t\t\tdispatch(uiActions.removeFocusTrap(id));\n\t\t};\n\t}, [dispatch, id]);\n\n\tconst activeFocusTrapId = useUIState((selectors) => selectors.getActiveFocusTrap(), []);\n\n\t// These two are optional, and default to firstElement if unspecified\n\tconst lastElement = props.lastElement ?? firstElement;\n\tconst defaultElement = props.defaultElement ?? firstElement;\n\n\t// Re-focus the appropriate button when tabbing away\n\tconst focusFirst = useCallback(() => {\n\t\tfirstElement.current?.focus();\n\t}, [firstElement]);\n\n\tconst focusLast = useCallback(() => {\n\t\tlastElement.current?.focus();\n\t}, [lastElement]);\n\n\tuseEffect(() => {\n\t\tconst onKeyDown = (event: KeyboardEvent): void => {\n\t\t\tif (event.key.toLowerCase() !== \"tab\") {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (activeFocusTrapId !== id) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Check the children to see if any match the document's active element\n\t\t\tconst childNodes = Array.from(childRef.current?.querySelectorAll(\"*\") ?? []);\n\t\t\tconst isFocusingChildren = childNodes.some((node) =>\n\t\t\t\t(node as Node)?.isEqualNode(document.activeElement),\n\t\t\t);\n\n\t\t\t// If the active element is not in the focus trap's children, focus the default button\n\t\t\tif (!isFocusingChildren) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tdefaultElement.current?.focus();\n\t\t\t}\n\t\t};\n\n\t\twindow.addEventListener(\"keydown\", onKeyDown, true);\n\t\treturn () => window.removeEventListener(\"keydown\", onKeyDown, true);\n\t}, [defaultElement, children, activeFocusTrapId, id]);\n\n\tuseEffect(() => {\n\t\t// Focus the default button\n\t\tpreviousFocus.current = document.activeElement as HTMLElement;\n\t\tdefaultElement.current?.focus();\n\n\t\treturn () => {\n\t\t\t// Restore focus on unload\n\t\t\tpreviousFocus.current?.focus();\n\t\t};\n\t}, [defaultElement]);\n\n\tconst childRef = useRef(null);\n\n\treturn (\n\t\t<>\n\t\t\t
\n\t\t\t
\n\t\t\t\t{children}\n\t\t\t
\n\t\t\t
\n\t\t\n\t);\n};\n\nFocusTrap.displayName = \"FocusTrap\";\n\nexport default FocusTrap;\n","/**\n * @copyright Copyright 2022 Epic Systems Corporation\n * @file #MyChart button component\n * @author Colin Walters\n * @module Epic.VideoApp.Components.Utilities.ActionButton\n */\n\nimport React, { FC, useContext } from \"react\";\nimport { StyleContext } from \"~/types\";\nimport { resolveClassName } from \"~/utils/className\";\nimport styles from \"./ActionButton.module.scss\";\nimport { BackgroundStyleContext } from \"./BackgroundStyleContext\";\nimport BaseButton, { IButtonProps } from \"./BaseButton\";\n\nexport enum ActionButtonTestIds {\n\tself = \"ActionButton\",\n}\n\n/**\n * Props for ActionButton Component\n */\ninterface IProps extends IButtonProps {\n\t/** The tone of the button, hinting at the impact of the action */\n\ttone: \"positive\" | \"neutral\" | \"negative\";\n\t/** The importance of the button. Pulse is the most important, and uses primary styling with additional pulsing effects */\n\tpriority: \"primary\" | \"secondary\" | \"pulse\"; // MyChart also has tertiary\n\t/** Whether or not the button is disabled */\n\tdisabled?: boolean;\n\t/** Whether or not the button should have narrower padding than default */\n\tslim?: boolean;\n\t/** Whether the button is in an active state/pressed */\n\tactive?: boolean;\n\t/** Event to run when the button is pressed */\n\tonKeyDown?: React.KeyboardEventHandler;\n}\n\n/**\n * The ActionButton component\n * This component is designed to replicate the MyChart action button:\n * https://uxguide/MyChart/components__buttons_mychart.php?mode=standard&version=current&designer=false\n *\n * @param props The props ;)\n */\nconst ActionButton: FC = (props) => {\n\tconst {\n\t\ttone,\n\t\tpriority,\n\t\tdisabled = false,\n\t\tslim = false,\n\t\tactive = false,\n\t\tchildren,\n\t\tonKeyDown,\n\t\tdisabledTabbable,\n\t\t...baseButtonProps\n\t} = props;\n\n\tconst buttonStyle = useContext(BackgroundStyleContext);\n\n\tconst visualPriority = priority === \"pulse\" ? \"primary\" : priority;\n\tconst isIconOnly = !!(baseButtonProps?.icon && !children && !baseButtonProps?.text);\n\n\tconst classNames: Record = {\n\t\tactionButton: true,\n\t\t[visualPriority]: true,\n\t\tdisabled: disabledTabbable || disabled,\n\t\tdark: buttonStyle === StyleContext.dark,\n\t\tslim,\n\t\tactive,\n\t\tpulse: priority === \"pulse\",\n\t\ticonOnly: isIconOnly,\n\t};\n\tif (tone !== \"neutral\") {\n\t\tclassNames[tone] = true;\n\t}\n\tconst buttonClassName = resolveClassName(styles, classNames);\n\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t{children}\n\t\t\t
\n\t\t\n\t);\n};\n\nActionButton.displayName = \"ActionButton\";\n\nexport default ActionButton;\n","/**\n * @copyright Copyright 2020-2021 Epic Systems Corporation\n * @file A generic popup that can contain a message and children\n * @author Sasha Chackalackal\n * @module Epic.VideoApp.Components.Utilities.GenericPopup\n */\n\nimport React, { FC, useRef } from \"react\";\nimport { useStrings } from \"~/hooks\";\nimport { ITestable, StyleContext } from \"~/types\";\nimport styles from \"../Alerts/Alerts.module.scss\";\nimport FocusTrap from \"../Alerts/FocusTrap\";\nimport ActionButton from \"./ActionButton\";\nimport { BackgroundStyleContextProvider } from \"./BackgroundStyleContext\";\nimport KeyboardShortcut from \"./KeyboardShortcut\";\n\nexport enum GenericPopupTestIds {\n\tself = \"GenericPopup\",\n\tmessage = \"GenericPopupMessage\",\n\tconfirmButton = \"GenericPopupConfirmButton\",\n}\n\nenum TokenNames {\n\tok = \"OK\",\n}\n\ninterface IProps extends ITestable {\n\tmessage?: string;\n\tconfirmText?: string;\n\tconfirmHotkey?: string;\n\tisOpen: boolean;\n\tonClose: () => void;\n\tariaLabel?: string;\n\tisLTR?: boolean;\n}\n\n/**\n * Generic popup component\n *\n * Renders a popup with the given message and additional children. Includes an action button that can be bound to close the popup.\n * CopyrightLinkButton contains a usage example\n */\nconst GenericPopup: FC = (props) => {\n\tconst { message, confirmText, confirmHotkey, isOpen, onClose, ariaLabel, children, isLTR } = props;\n\n\tconst confirmRef = useRef(null);\n\n\t// Reusing string from to prevent the need for re-translation\n\tconst strings = useStrings(\"GenericAlert\", Object.values(TokenNames));\n\n\treturn isOpen ? (\n\t\t\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{children}\n\t\t\t\t\t\n\t\t\t\t\t\t{message ?? \"\"}\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{confirmHotkey ? (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\tconfirmText ?? strings[TokenNames.ok]\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t) : null;\n};\n\nGenericPopup.displayName = \"GenericPopup\";\n\nexport default GenericPopup;\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Copyright notice at the bottom of the screen\n * @author Jason Guo + Sasha Chackalackal\n * @module Epic.VideoApp.Components.Copyright.CopyrightLinkButton\n */\n\nimport React, { FC, useCallback, useState } from \"react\";\nimport BaseButton from \"~/components/Utilities/BaseButton\";\nimport { useStrings } from \"~/hooks\";\nimport { resolveClassName } from \"~/utils/className\";\nimport { copyrightNotice, fullCopyrightNotice, fullCopyrightNoticeAriaLabel } from \"~/utils/copyright\";\nimport GenericPopup from \"../Utilities/GenericPopup\";\nimport styles from \"./Copyright.module.scss\";\n\ninterface IProps {\n\thardwareTestStyling?: boolean;\n}\n\nenum TokenNames {\n\tclosePopup = \"ClosePopup\",\n}\n\n/**\n * Copyright notice at the bottom of the screen\n */\nconst CopyrightLinkButton: FC = (props: IProps) => {\n\tconst { hardwareTestStyling } = props;\n\tconst [isPopupOpen, setIsPopupOpen] = useState(false);\n\n\tconst onClick = useCallback(() => {\n\t\tsetIsPopupOpen(true);\n\t}, []);\n\n\tconst onPopupClose = useCallback(() => {\n\t\tsetIsPopupOpen(false);\n\t}, []);\n\n\tconst strings = useStrings(\"CopyrightLinkButton\", Object.values(TokenNames));\n\n\tconst styling = resolveClassName(styles, { copyright: true, isMobile: hardwareTestStyling });\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nCopyrightLinkButton.displayName = \"CopyrightLinkButton\";\n\nexport default CopyrightLinkButton;\n","/**\n * @copyright Copyright 2021-2024 Epic Systems Corporation\n * @file Handler that requests and stores translations from the server\n * @author Razi Rais\n * @module Epic.VideoApp.Utils.I18n.I18n\n */\n\nimport { IAction } from \"@epic/react-redux-booster\";\nimport { combinedActions } from \"~/state\";\nimport { ENABLED_LOCALES, ENGLISH_US_LOCALE, IDomElements, ILocale, ITranslationInfo } from \"~/types/locale\";\nimport { makeRequest } from \"~/utils/request\";\nimport { recentLanguageKey, setCookie } from \"../cookies\";\nimport { hoursToMs } from \"../dateTime\";\nimport { debug } from \"../logging\";\nimport {\n\tgetDomElements,\n\tgetPreferredLocale,\n\tgetTranslationJson,\n\tlanguageCode,\n\tresolveLocale,\n} from \"./i18nUtils\";\n\nexport class I18nClass {\n\tprivate _fallbackLocale: string;\n\tprivate _translations: Record;\n\tprivate _domElements: IDomElements;\n\tprivate _currDirIsRtl: boolean;\n\n\tconstructor() {\n\t\tthis._fallbackLocale = ENGLISH_US_LOCALE;\n\t\tthis._translations = {};\n\t\tthis._domElements = getDomElements();\n\t\tthis._currDirIsRtl = false; // default direction\n\n\t\tObject.entries(getTranslationJson()).forEach(([key, value]) => {\n\t\t\tconst languageInfo = ENABLED_LOCALES[key];\n\t\t\tconst displayName = languageInfo?.displayName ?? key.toUpperCase();\n\t\t\tconst ariaLabel = languageInfo?.ariaLabel\n\t\t\t\t? `${displayName} ${languageInfo?.ariaLabel}`\n\t\t\t\t: displayName;\n\n\t\t\tthis._translations[key] = {\n\t\t\t\tdisplayName: displayName,\n\t\t\t\tariaLabel: ariaLabel,\n\t\t\t\tisRtl: !!languageInfo?.isRtl,\n\t\t\t\ttranslation: value,\n\t\t\t\tincludesPostAuth: !!languageInfo?.includesPostAuth,\n\t\t\t};\n\t\t});\n\n\t\t// Set the direction based on the user's preferred locale\n\t\tconst preferredLocale = getPreferredLocale();\n\t\tthis._setDirection(this._translations[preferredLocale]?.isRtl || false);\n\t}\n\n\t/**\n\t * Get a list of the available locales\n\t * @returns a list of the locales that are available\n\t */\n\tgetLocales(): ILocale[] {\n\t\tconst locales: ILocale[] = Object.entries(this._translations).map(([key, value]) => ({\n\t\t\tlocaleCode: key,\n\t\t\tdisplayName: value.displayName,\n\t\t\tariaLabel: value.ariaLabel,\n\t\t}));\n\t\treturn locales.sort(compareLocale);\n\t}\n\n\t/**\n\t * Determine whether or not changing locales should be enabled\n\t * @returns true if there is more than one supported locale, false otherwise\n\t */\n\tcanChangeLocales(): boolean {\n\t\treturn Object.keys(this._translations).length > 1;\n\t}\n\n\t/**\n\t * Returns the translation string for a token\n\t *\n\t * @param key The token name for the string being accessed.\n\t * @param localeCode The locale to use when obtaining the string\n\t * @returns The string in the desired locale\n\t */\n\tgetString(key: string, localeCode: string): string {\n\t\treturn (\n\t\t\tthis._translations[localeCode]?.translation[key] ||\n\t\t\tthis._translations[this._fallbackLocale]?.translation[key] ||\n\t\t\tkey\n\t\t);\n\t}\n\n\t/**\n\t * Sets the new locale and saves the new translation json, dispatches the update to state and subsequently updates local storage.\n\t * @param localeCode the locale to be set\n\t */\n\tasync setLocale(localeCode: string, dispatch: (action: T) => T): Promise {\n\t\tconst resolvedLocale = resolveLocale(localeCode);\n\t\tif (!resolvedLocale) {\n\t\t\tdebug(`Locale ${localeCode} is not supported `);\n\t\t\treturn;\n\t\t}\n\t\tsetCookie(recentLanguageKey, resolvedLocale, hoursToMs(1));\n\n\t\tthis._setHTMLAttribute(localeCode);\n\n\t\t// request translation json from the server\n\t\tawait this._getLocaleInfo(resolvedLocale);\n\t\tconst directionProperlySet = this._setDirection(this._translations[resolvedLocale].isRtl);\n\t\tif (directionProperlySet) {\n\t\t\tdispatch(combinedActions.setLocale(resolvedLocale));\n\t\t}\n\t\tthis._setHTMLAttribute(localeCode);\n\t}\n\n\t/**\n\t * Check if translations have been loaded for the locale and if not, make the request to load both translations and text direction.\n\t * @param localeCode the locale to get direction and translations for\n\t */\n\tasync _getLocaleInfo(localeCode: string): Promise {\n\t\t// if translation has already been loaded to the client, no need to make server request\n\t\tif (this._translations[localeCode] && this._translations[localeCode].includesPostAuth) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst postAuthTranslation = await loadPostAuthStrings(localeCode);\n\t\tif (postAuthTranslation) {\n\t\t\tthis._translations[localeCode].translation = {\n\t\t\t\t...this._translations[localeCode]?.translation,\n\t\t\t\t...postAuthTranslation,\n\t\t\t};\n\t\t\tthis._translations[localeCode].includesPostAuth = true;\n\t\t}\n\t}\n\n\t/**\n\t * Check if the current direction is already set to the desired UI direction and if not, set the UI to the given direction.\n\t * @param direction the text direction of the current locale.\n\t */\n\t_setDirection(isRtl: boolean): boolean {\n\t\t// If this direction is already set don't re-set direction info\n\t\tif (isRtl === this._currDirIsRtl) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (this._domElements.htmlEl) {\n\t\t\tconst directionKey = isRtl ? \"rtl\" : \"ltr\";\n\t\t\tthis._domElements.htmlEl.setAttribute(\"dir\", directionKey);\n\t\t\tthis._currDirIsRtl = isRtl;\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t * Update the HTML Lang element based on the locale that has been selected\n\t * @param locale the locale that is currently being set\n\t */\n\t_setHTMLAttribute(locale: string): void {\n\t\tif (this._domElements.htmlEl) {\n\t\t\tif (locale === \"zh-ushans\") {\n\t\t\t\tthis._domElements.htmlEl.setAttribute(\"lang\", \"zh-Hans\");\n\t\t\t} else if (locale === \"zh-ushant\") {\n\t\t\t\tthis._domElements.htmlEl.setAttribute(\"lang\", \"zh-Hant\");\n\t\t\t} else {\n\t\t\t\tthis._domElements.htmlEl.setAttribute(\"lang\", languageCode(locale));\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport const I18n = new I18nClass();\n\n/**\n * Loads a boolean indicating whether the locale is rtl and a json containing the translation strings for a specified locale\n * @param localeCode The locale to load information from\n * @returns an ILocaleResponse with the desired direction and translation information\n */\nasync function loadPostAuthStrings(localeCode: string): Promise> {\n\treturn makeRequest>(\"/api/Locale\", \"GET\", null, undefined, {\n\t\tqueryStringData: { locale: localeCode },\n\t});\n}\n\n/**\n * Compare two locales for sorting\n * @param a first locale in the comparison\n * @param b second locale in the comparison\n * @returns -1 if a should come before b, 1 if b should come before a, 0 if neutral\n */\nfunction compareLocale(a: ILocale, b: ILocale): number {\n\tif (a.localeCode === ENGLISH_US_LOCALE) {\n\t\treturn -1;\n\t}\n\tif (b.localeCode === ENGLISH_US_LOCALE) {\n\t\treturn 1;\n\t}\n\tif (a.localeCode.startsWith(\"zz-epic\")) {\n\t\treturn 1;\n\t}\n\tif (b.localeCode.startsWith(\"zz-epic\")) {\n\t\treturn -1;\n\t}\n\treturn a.localeCode.localeCompare(b.localeCode);\n}\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file functions to export from i18n\n * @author Razi Rais\n * @module Epic.VideoApp.Utils.I18n.Index\n */\n\nexport * from \"./i18n\";\nexport * from \"./i18nUtils\";\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file Util to obtain strings saved in i18n\n * @author Razi Rais\n * @module Epic.VideoApp.Utils.Strings\n */\nimport React from \"react\";\nimport { I18n } from \"./i18n\";\n\nexport enum SharedStringTokens {\n\t// pre-auth\n\tconnectingToOrganization = \"ConnectingToOrganization\",\n\tdefaultPageTitle = \"DefaultPageTitle\",\n\n\t// post-auth\n\tlocalParticipantIndicator = \"LocalParticipantIndicator\",\n\tlocalScreenShareIndicator = \"LocalScreenShareIndicator\",\n\tscreenShareWarning = \"ScreenShareWarning\",\n\tsystemDefault = \"SystemDefault\",\n\twarningIconAriaLabel = \"WarningIconAriaLabel\",\n\tformatLabelWithHotkey = \"FormatLabelWithHotkey\",\n}\n\n/**\n * Helper function to get a dictionary of strings for a given namespace\n *\n * @param namespace Namespace of the strings (i.e. the name of the component or \"Shared\")\n * @param tokenNames The strings that should be loaded for that namespace\n * @param locale The locale to get the strings in\n * @returns A dictionary containing the string values for each token\n */\nfunction getStringsInternal(namespace: string, tokenNames: string[], locale: string): Record {\n\tconst strings: Record = {};\n\n\ttokenNames.forEach((tokenName: string) => {\n\t\tconst formattedTokenName = `${namespace}_${tokenName}`;\n\t\tstrings[tokenName] = I18n.getString(formattedTokenName, locale);\n\t});\n\n\treturn strings;\n}\n\n/**\n * Get a dictionary of translated strings that are shared between components\n *\n * @param tokenNames The shared strings that should be loaded\n * @param locale The locale to get the strings in\n * @returns A dictionary containing the string values for each token\n */\nexport function getSharedStrings(tokenNames: string[], locale: string): Record {\n\treturn getStringsInternal(\"Shared\", tokenNames, locale);\n}\n\n/**\n * Get a dictionary of translated strings for a component\n *\n * @param component the component name\n * @param tokenNames A string array of the token names\n * @param sharedTokenNames a string array of token names shared between components\n * @returns A dictionary containing the string values for each token\n */\nexport function getStrings(\n\tcomponent: string,\n\ttokenNames: string[],\n\tsharedTokenNames: string[] = [],\n\tlocale: string,\n): Record {\n\tconst componentStrings = getStringsInternal(component, tokenNames, locale);\n\tconst sharedStrings = getSharedStrings(sharedTokenNames, locale);\n\n\treturn { ...componentStrings, ...sharedStrings };\n}\n\n/**\n * Function used to format template strings\n *\n * @param template the template string\n * @param args the strings to be inserted into the placeholder values\n * @returns the formatted string\n */\nexport function stringFormat(template: string, ...args: (number | string | undefined)[]): string {\n\ttemplate = `${template}`;\n\treturn template.replace(/{(\\d+)}/g, (match: string, number: number): string => {\n\t\tconst value = args[number];\n\t\treturn typeof value === \"undefined\" ? match : typeof value !== \"string\" ? value.toString() : value;\n\t});\n}\n\n/**\n * Function used to format template strings with JSX content inside the string\n * Returns an array of content, which should be added into jsx via the spread operator\n * Ex.
{...formattedJSX}
\n *\n * @param template The template string, with {0}, {1}, ...{9} for the placeholder slots\n * @param args The elements to be inserted in the corresponding placeholder values\n * @returns An array of JSX content (elements, string, and numbers)\n */\nexport type JSXPiece = JSX.Element | string | number;\nexport function jsxFormat(template: string, ...args: JSXPiece[]): JSXPiece[] {\n\tconst regex = /{\\d+}/g;\n\tconst textSegments = template.split(regex);\n\tconst patternSegments = template.match(regex)?.map((match) => parseInt(match.slice(1, -1), 10)) ?? [];\n\n\tconst result: JSXPiece[] = [];\n\tfor (let index = 0; index < textSegments.length; index++) {\n\t\tresult.push(textSegments[index]);\n\t\tif (index < textSegments.length - 1) {\n\t\t\tconst element = args[patternSegments[index]] ?? index.toString();\n\t\t\t// Wrap the element in a fragment so we can assign it a key\n\t\t\tconst fragment = React.createElement(React.Fragment, { key: index }, element);\n\t\t\tresult.push(fragment);\n\t\t}\n\t}\n\treturn result;\n}\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file A hidden div used to read screen reader only accessibility alerts\n * @author Jonathon Moore\n * @module Epic.VideoApp.Components.Alerts.AccessibilityAlert\n */\n\nimport React, { FC, useEffect, useMemo, useState } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport { Action } from \"redux\";\nimport { useStrings } from \"~/hooks\";\nimport { useSettingsState } from \"~/state\";\nimport { alertActions, useAlertState } from \"~/state/alerts\";\nimport { I18n } from \"~/utils/i18n\";\nimport { stringFormat } from \"~/utils/strings\";\nimport styles from \"./Alerts.module.scss\";\n\nexport enum AccessibilityAlertTestingIds {\n\tself = \"AccessibilityAlert\",\n}\n\nenum TokenNames {\n\tbackgroundSet = \"BackgroundSet\",\n\tbackgroundCleared = \"BackgroundCleared\",\n\tadmittanceAlert = \"AdmittanceAlert\",\n\tbackgroundSetDefault = \"BackgroundSetDefault\",\n\tlanguageChanged = \"LanguageChanged\",\n\twaitingRoomAlert = \"WaitingRoomAlert\",\n\temptyCall = \"EmptyCall\",\n}\n\n/*\nThe accessibility alert is used to add screen reader alerts to workflows that are ad-hoc. Here are the steps to add an alert\n\n1. Create a new alert state in src/state/alerts.ts\n * Add the alert to IAlertState and initialize it in getInitialState()\n * Create a getter and setter for this new alert state\n * In buildShareState() add the setter to reducers and getter to selectors\n\n2. Add a string for the AccessibilityAlert component to read in postAuth.resx\n\n3. In AccessibilityAlert.tsx\n * Add the new alert string to TokenNames\n * Get the alert state and store it to a local variable\n * call useAlert with the following values as inputs\n * Add the logic for when the alert should be read out\n\t* Add an array of actions that should be taken when resetting the state to it's initial value\n\t* Add the string that should be read out\n\t* Add the setText state call for use in the hook\n\t* Add the optional delay you want to be present before the alert is read (this may be necessary based on workflow / platform)\n\t* Add the optional amount of time you want the string to be present before removed \n\t\n4. In AccessibilityAlert.test.tsx\n * Add the new alert to mockAlertSelectors\n * Add a unit test case for the new alert\n*/\n\nconst AccessibilityAlert: FC = () => {\n\t// Get alert states\n\tconst alertAdmitted = useAlertState((selectors) => selectors.getAdmittedAlert(), []);\n\n\tconst alertBackground = useAlertState((selectors) => selectors.getBackgroundChangedAlert(), []);\n\tconst backgroundName = useAlertState((selectors) => selectors.getBackgroundName(), []);\n\n\tconst alertBackgroundCleared = useAlertState((selectors) => selectors.getBackgroundClearedAlert(), []);\n\n\tconst displayModeAlert = useAlertState((selectors) => selectors.getDisplayModeAlert(), []);\n\n\tconst languageChangedAlert = useAlertState((selectors) => selectors.getLanguageChangedAlert(), []);\n\tconst loadingLocale = useSettingsState((selectors) => selectors.getLoadingLocale(), []);\n\tconst currentLocale = useSettingsState((selectors) => selectors.getLocale(), []);\n\tconst locale = loadingLocale ?? currentLocale;\n\tconst supportedLocales = useMemo(() => I18n.getLocales(), []);\n\tconst languageName = supportedLocales.find((l) => l.localeCode === locale)?.ariaLabel;\n\n\tconst waitingRoomAlert = useAlertState((selectors) => selectors.getWaitingRoomAlert(), []);\n\n\tconst emptyRoomAlert = useAlertState((selectors) => selectors.getEmptyRoomAlert(), []);\n\n\tconst [text, setText] = useState(\"\");\n\tconst strings = useStrings(\"AccessibilityAlert\", Object.values(TokenNames));\n\n\t// Set up alerts\n\tuseAlert(\n\t\talertAdmitted,\n\t\t[alertActions.setAdmittedAlert(false)],\n\t\tstrings[TokenNames.admittanceAlert],\n\t\tsetText,\n\t\t1,\n\t\t200,\n\t);\n\n\tuseAlert(\n\t\talertBackground,\n\t\t[alertActions.setBackgroundChangedAlert(false), alertActions.setBackgroundName(\"\")],\n\t\tbackgroundName !== \"unknown\"\n\t\t\t? stringFormat(strings[TokenNames.backgroundSet], backgroundName)\n\t\t\t: strings[TokenNames.backgroundSetDefault],\n\t\tsetText,\n\t);\n\n\tuseAlert(\n\t\talertBackgroundCleared,\n\t\t[alertActions.setBackgroundClearedAlert(false), alertActions.setBackgroundName(\"\")],\n\t\tstrings[TokenNames.backgroundCleared],\n\t\tsetText,\n\t);\n\n\tuseAlert(displayModeAlert?.length > 0, [alertActions.setDisplayModeAlert(\"\")], displayModeAlert, setText);\n\n\tuseAlert(\n\t\tlanguageChangedAlert,\n\t\t[alertActions.setLanguageChangedAlert(false)],\n\t\tstringFormat(strings[TokenNames.languageChanged], languageName),\n\t\tsetText,\n\t);\n\n\tuseAlert(\n\t\twaitingRoomAlert,\n\t\t[alertActions.setWaitingRoomAlert(false)],\n\t\tstrings[TokenNames.waitingRoomAlert],\n\t\tsetText,\n\t\t1,\n\t);\n\n\tuseAlert(emptyRoomAlert, [alertActions.setEmptyRoomAlert(false)], strings[TokenNames.emptyCall], setText);\n\n\treturn (\n\t\t\n\t\t\t{text}\n\t\t
\n\t);\n};\n\n/**\n * Checks to see if an alert should be read out by a screenreader if so show the alert for a specified amount of time before resetting the text and state.\n * @param alertState The boolean statement that should be checked to trigger the alert\n * @param clearActions The array of values that need to be reset when the value is cleared\n * @param text The string to be read out aloud by the screen reader\n * @param setText The setText State function that is used to update the aria-live div\n * @param initialDelay how long to delay the initial setting of the string.\n * @param removalDelay how long to leave the string visible before removing it.\n */\nconst useAlert = (\n\talertState: boolean,\n\tclearActions: Action[],\n\ttext: string,\n\tsetText: (arg0: string) => void,\n\tinitialDelay = 0,\n\tremovalDelay = 200,\n): void => {\n\tconst dispatch = useDispatch();\n\tuseEffect(() => {\n\t\tif (alertState) {\n\t\t\tif (initialDelay > 0) {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tsetText(text);\n\t\t\t\t}, initialDelay);\n\t\t\t} else {\n\t\t\t\tsetText(text);\n\t\t\t}\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tfor (const action of clearActions) {\n\t\t\t\t\tdispatch(action);\n\t\t\t\t}\n\n\t\t\t\tsetText(\"\");\n\t\t\t}, removalDelay);\n\t\t}\n\t}, [alertState, text, setText, dispatch, initialDelay, removalDelay, clearActions]);\n};\n\nAccessibilityAlert.displayName = \"AccessibilityAlert\";\n\nexport default AccessibilityAlert;\n","/**\n * @copyright Copyright 2021 - 2024 Epic Systems Corporation\n * @file SpinnerIcon component\n * @author Razi Rais\n * @module Epic.VideoApp.Components.Loading.SpinnerIcon\n */\n\nimport React, { FC } from \"react\";\nimport styles from \"./SpinnerIcon.module.scss\";\n\n/**\n * Props for the SpinnerIcon Component\n */\ninterface IProps {\n\tsmall?: boolean;\n}\n\nexport enum SpinnerIconTestIds {\n\tself = \"SpinnerIcon\",\n}\n\n/**\n * The SpinnerIconIcon component\n */\nconst SpinnerIcon: FC = (props) => {\n\tconst { small } = props;\n\n\tconst spinnerClass = small ? styles[\"spinnerIconSmall\"] : styles[\"spinnerIconLarge\"];\n\n\t//The following returns a div containing an array of 12 divs.\n\t// Each of the 12 divs corresponds to a \"spoke\" on the Spinner wheel\n\treturn (\n\t\t
\n\t\t\t{[...Array(12).keys()].map((key) => (\n\t\t\t\t
\n\t\t\t))}\n\t\t
\n\t);\n};\n\nSpinnerIcon.displayName = \"SpinnerIcon\";\n\nexport default SpinnerIcon;\n","/**\n * @copyright Copyright 2021-2024 Epic Systems Corporation\n * @file an option to be displayed in the language selector component\n * @author Colin Walters\n * @module Epic.VideoApp.Components.LanguageSelector.LanguageOption\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback, useEffect, useRef } from \"react\";\nimport { alertActions, useSettingsState } from \"~/state\";\nimport { ILocale } from \"~/types/locale\";\nimport { resolveClassName } from \"~/utils/className\";\nimport SpinnerIcon from \"../Loading/SpinnerIcon\";\nimport styles from \"./LanguageSelector.module.scss\";\n\n/**\n * Props for LanguageOption Component\n */\ninterface IProps {\n\t/** The locale */\n\tlocale: ILocale;\n\t/** Whether or not this option is currently selected */\n\tisSelected: boolean;\n\t/** Callback function for when this language is selected */\n\tonSelected: (localeCode: string) => Promise;\n}\n\nexport enum LanguageOptionTestIds {\n\tself = \"LanguageOption\",\n\tradioButton = \"RadioButton\",\n}\n\n/**\n * The LanguageOption component\n * @param props The props ;)\n */\nconst LanguageOption: FC = (props) => {\n\tconst { locale, isSelected, onSelected } = props;\n\tconst { localeCode, displayName, ariaLabel } = locale;\n\tconst loadingLocale = useSettingsState((selectors) => selectors.getLoadingLocale(), []);\n\tconst isLoading = loadingLocale === localeCode;\n\tconst greyOutOption = !!loadingLocale && loadingLocale !== localeCode;\n\tconst dispatch = useDispatch();\n\n\tconst onButtonClick = useCallback(() => onSelected(localeCode), [onSelected, localeCode]);\n\tconst radioButtonClass = resolveClassName(styles, {\n\t\ticon: true,\n\t\tfilled: isSelected,\n\t\tdisabled: greyOutOption,\n\t});\n\tconst languageRowClass = resolveClassName(styles, { languageRow: true, disabled: greyOutOption });\n\tconst isLoadingRef = useRef(isLoading);\n\n\tuseEffect(() => {\n\t\tisLoadingRef.current = isLoading;\n\t}, [isLoading]);\n\n\tuseEffect(() => {\n\t\tfunction setLoadingToast(): void {\n\t\t\tif (isLoadingRef.current) {\n\t\t\t\tdispatch(\n\t\t\t\t\talertActions.postToastAlert({\n\t\t\t\t\t\ttype: \"language-loading\",\n\t\t\t\t\t\tmessageToken: \"LoadingLanguage\",\n\t\t\t\t\t\tmessageArgs: [localeCode, displayName],\n\t\t\t\t\t\ttoastStyle: \"language-loading\",\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (isLoadingRef.current) {\n\t\t\tsetTimeout(setLoadingToast, 400);\n\t\t}\n\t}, [dispatch, displayName, localeCode, isLoading]);\n\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t{isLoading ? (\n\t\t\t\t\t\n\t\t\t\t) : (\n\t\t\t\t\t
\n\t\t\t\t)}\n\t\t\t\t{displayName}\n\t\t\t
\n\t\t\n\t);\n};\n\nLanguageOption.displayName = \"LanguageOption\";\n\nexport default LanguageOption;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file LanguageSelector component\n * @author Razi Rais\n * @module Epic.VideoApp.Components.LanguageSelector.LanguageSelector\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback, useMemo } from \"react\";\nimport { alertActions, uiActions, useSettingsState } from \"~/state\";\nimport { settingsActions } from \"~/state/settings\";\nimport { I18n } from \"~/utils/i18n\";\nimport LanguageOption from \"./LanguageOption\";\nimport styles from \"./LanguageSelector.module.scss\";\n\n/**\n * The LanguageSelector component\n */\nconst LanguageSelector: FC = () => {\n\tconst supportedLocales = useMemo(() => I18n.getLocales(), []);\n\tconst locale = useSettingsState((selectors) => selectors.getLocale(), []);\n\tconst dispatch = useDispatch();\n\n\tconst onLocaleSelected = useCallback(\n\t\tasync (newLocale: string) => {\n\t\t\t// Ignore if the locale is already selected\n\t\t\tif (locale === newLocale) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tdispatch(settingsActions.setLoadingLocale(newLocale));\n\t\t\tdispatch(alertActions.setLanguageChangedAlert(true));\n\n\t\t\t// Close menu after apply button is clicked\n\t\t\tdispatch(uiActions.toggleVisibleMenu({ menu: null }));\n\n\t\t\ttry {\n\t\t\t\tawait I18n.setLocale(newLocale, dispatch);\n\t\t\t} catch {\n\t\t\t\tdispatch(settingsActions.setLoadingLocale(null));\n\t\t\t}\n\t\t\tdispatch(alertActions.clearToasts(\"language-loading\"));\n\t\t},\n\t\t[dispatch, locale],\n\t);\n\n\treturn (\n\t\t
    \n\t\t\t{supportedLocales.map((localeOption) => (\n\t\t\t\t
  • \n\t\t\t\t\t\n\t\t\t\t
  • \n\t\t\t))}\n\t\t
\n\t);\n};\n\nLanguageSelector.displayName = \"LanguageSelector\";\n\nexport default LanguageSelector;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file hook to update string token values\n * @author Razi Rais\n * @module Epic.VideoApp.Hooks.UseStrings\n */\n\nimport { useMemo } from \"react\";\nimport { useSettingsState } from \"~/state\";\nimport { getSharedStrings, getStrings } from \"~/utils/strings\";\n\n/**\n * Obtains a memoized dictionary of the string translations for a component\n * @param component the component name\n * @param tokenNames A string array of the token names\n * @param sharedTokenNames a string array of token names shared between components\n * @param hardCodedLocale an optional locale override\n * @returns A dictionary containing the string values for each token\n */\nexport function useStrings(\n\tcomponent: string,\n\ttokenNames: string[],\n\tsharedTokenNames: string[] = [],\n\thardCodedLocale?: string,\n): Record {\n\tconst locale = useSettingsState((selectors) => selectors.getLocale(), []);\n\tlet localeToUse = locale;\n\tif (hardCodedLocale) {\n\t\tlocaleToUse = hardCodedLocale;\n\t}\n\n\treturn useMemo(() => {\n\t\treturn getStrings(component, tokenNames, sharedTokenNames, localeToUse);\n\t}, [component, tokenNames, sharedTokenNames, localeToUse]);\n}\n\n/**\n * Get a dictionary of strings that are shared between components\n * @param tokenNames A string array of the shared strings to get\n * @returns A dictionary containing the string values for each shared string token\n */\nexport function useSharedStrings(tokenNames: string[]): Record {\n\tconst locale = useSettingsState((selectors) => selectors.getLocale(), []);\n\n\treturn useMemo(() => getSharedStrings(tokenNames, locale), [tokenNames, locale]);\n}\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file hook to apply a hotkey to tooltips when appropriate\n * @author Trevor Roussel\n * @module Epic.VideoApp.Hooks.UseGetFormattedHotkeyString\n */\n\nimport { useMemo } from \"react\";\nimport { isMobile } from \"~/utils/os\";\nimport { SharedStringTokens, stringFormat } from \"~/utils/strings\";\nimport { capitalizeFirstLetter } from \"~/utils/text\";\nimport { useSharedStrings } from \"./useStrings\";\n\nexport function useGetFormattedHotkeyString(baseString: string | undefined, hotkey: string[]): string {\n\tconst shouldAppendHotkey = useMemo(() => {\n\t\treturn !isMobile();\n\t}, []);\n\tconst hotkeyString = useMemo(() => getHotkeyString(hotkey), [hotkey]);\n\tconst formattingString = useSharedStrings([SharedStringTokens.formatLabelWithHotkey])[\n\t\tSharedStringTokens.formatLabelWithHotkey\n\t];\n\n\tif (!baseString) {\n\t\treturn \"\";\n\t}\n\n\tif (!shouldAppendHotkey || hotkey.length === 0) {\n\t\treturn baseString;\n\t}\n\n\treturn stringFormat(formattingString, baseString, hotkeyString);\n}\n\n/**\n * Given a string of keys in a hotkey, return a string that can be used in a tooltip\n * @param hotkey String array of keys in a hotkey.\n * @returns Hotkey string formatted like (Ctrl+Shift+A)\n */\nfunction getHotkeyString(hotkey: string[]): string {\n\tconst formattedHotkey = hotkey.map((key) => capitalizeFirstLetter(key));\n\tconst internalString = formattedHotkey.join(\"+\");\n\treturn `(${internalString})`;\n}\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file globe icon\n * @author Colin Walters\n * @module Epic.VideoApp.Icons.Globe\n */\n\nimport React, { FC, memo } from \"react\";\nimport { IconProps } from \".\";\n\n/**\n * The Globe component\n * @param props The props ;)\n */\nconst Globe: FC = memo((props) => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n});\n\nGlobe.displayName = \"Globe\";\n\nexport default Globe;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file chevron icon\n * @author Colin Walters\n * @module Epic.VideoApp.Icons.Chevron\n */\n\nimport React, { FC } from \"react\";\nimport { resolveClassName } from \"~/utils/className\";\nimport { IconProps } from \".\";\nimport styles from \"./chevron.module.scss\";\n\nexport type Direction = \"down\" | \"up\" | \"left\" | \"right\";\n\ninterface IProps extends IconProps {\n\t/** The direction of the point of the chevron */\n\t// this must be optional or it will break ToggleButtonTrayButton\n\tchevronDirection?: Direction;\n}\n\nexport enum ChevronTestIds {\n\tself = \"Chevron\",\n}\n\n/**\n * The Chevron component\n * @param props The props ;)\n */\nconst Chevron: FC = (props) => {\n\tconst { chevronDirection, className, ...iconProps } = props;\n\n\tconst iconClassName = resolveClassName(styles, { [chevronDirection ?? \"down\"]: true }, className);\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nChevron.displayName = \"Chevron\";\n\nexport default React.memo(Chevron);\n","/**\n * @copyright Copyright 2020-2024 Epic Systems Corporation\n * @file in call control button\n * @author Colin Walters\n * @module Epic.VideoApp.Components.Header.Buttons.ControlButton\n */\n\nimport React, { ComponentType, FC } from \"react\";\nimport { IconProps } from \"~/icons\";\nimport Chevron, { Direction } from \"~/icons/chevron\";\nimport { resolveClassName } from \"~/utils/className\";\nimport BaseButton from \"../../Utilities/BaseButton\";\nimport { ITooltipInfo } from \"../../Utilities/Tooltip\";\nimport styles from \"../ControlsHeader.module.scss\";\n\n// when using style modules CSS class names are modified to remain unique between modules\n// export the actual selector that can be used to find ControlButton elements in the DOM\nconst baseClassName = \"controlButton\";\nexport const controlButtonSelector = `.${styles[baseClassName]}`;\n\ntype SupplementaryIcon = \"continue\" | \"chevron-up\" | \"chevron-down\";\n\n/**\n * Props for ControlButton Component\n */\ninterface IProps {\n\ticon: ComponentType;\n\tonClick: (event?: React.MouseEvent) => void | Promise;\n\ttone?: \"neutral\" | \"negative\";\n\tariaLabel: string;\n\tpressed?: boolean;\n\tbuttonClassName?: string;\n\tkeyboardShortcut: string[];\n\tbuttonText?: string;\n\ttooltipText?: string;\n\tsupplementaryIcon?: SupplementaryIcon | null;\n\tid?: string;\n\tonKeyDown?: React.KeyboardEventHandler;\n\tariaExpanded?: boolean;\n\tdisabledTabbable?: boolean;\n}\n\n/**\n * Base component for control buttons that can be used in the button tray and header\n * @param props the props ;)\n */\nconst ControlButton: FC = (props) => {\n\tconst {\n\t\ticon: Icon,\n\t\tbuttonText,\n\t\tonClick,\n\t\ttone,\n\t\tpressed,\n\t\tariaLabel,\n\t\tbuttonClassName,\n\t\tkeyboardShortcut,\n\t\tsupplementaryIcon,\n\t\ttooltipText,\n\t\tid,\n\t\tonKeyDown,\n\t\tariaExpanded,\n\t\tdisabledTabbable,\n\t} = props;\n\n\tconst className = resolveClassName(\n\t\tstyles,\n\t\t{ [baseClassName]: true, negative: tone === \"negative\" },\n\t\tbuttonClassName,\n\t);\n\n\tlet tooltipInfo: ITooltipInfo | undefined;\n\tif (tooltipText) {\n\t\ttooltipInfo = { text: tooltipText, direction: \"right\" };\n\t}\n\n\treturn (\n\t\t\n\t\t\t{getSupplementaryIcon(supplementaryIcon)}\n\t\t\n\t);\n};\n\n/**\n * Get the supplementary icon to include on the ControlButton.\n * This icon will be displayed on the right side of the button to help add context.\n *\n * @param icon which supplementary icon should be included, if any\n * @returns the ReactNode to include for the supplement icon\n */\nfunction getSupplementaryIcon(icon?: SupplementaryIcon | null): React.ReactNode {\n\tif (!icon) {\n\t\treturn null;\n\t}\n\n\tlet direction: Direction;\n\tlet iconSize = 20;\n\tif (icon === \"continue\") {\n\t\tdirection = \"right\";\n\t\ticonSize = 15;\n\t} else if (icon === \"chevron-up\") {\n\t\tdirection = \"up\";\n\t} else {\n\t\tdirection = \"down\";\n\t}\n\n\treturn ;\n}\n\nControlButton.displayName = \"ControlButton\";\n\nexport default ControlButton;\n","/**\n * @copyright Copyright 2021-2024 Epic Systems Corporation\n * @file language selector button\n * @author Razi Rais\n * @module Epic.VideoApp.Components.Header.Buttons.LanguageSelectorButton\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback, useMemo } from \"react\";\nimport { useStrings, useWindowSize } from \"~/hooks\";\nimport { useGetFormattedHotkeyString } from \"~/hooks/useGetFormattedHotkeyString\";\nimport Globe from \"~/icons/globe\";\nimport { uiActions, useUIState } from \"~/state\";\nimport { I18n } from \"~/utils/i18n\";\nimport ControlButton from \"./ControlButton\";\n\n/**\n * Props for LanguageSelectorButton component\n */\ninterface IProps {\n\t/** The context that the language selector button is being displayed in */\n\tcontext: \"menu\" | \"header\";\n\n\t/** Information on where the button exists in the tab order of the more options menu */\n\ttabString?: string;\n}\n\n// button's ID in HTML used to focus it from BaseMenu\nexport const languagesButtonId = \"languages-button\";\n\n// the minimum width that the full button label should be shown when the button is in the header\nconst MinWidthForLabelInHeader = 1600;\n\n/** String tokens used by the LanguageSelectorButton component */\nenum TokenNames {\n\tdropdownButtonLabel = \"ButtonLabel\",\n\tusageLabel = \"LabelNoHotkey\",\n}\n\n/**\n * language selector button\n */\nconst LanguageSelectorButton: FC = (props: IProps) => {\n\tconst { context, tabString } = props;\n\tconst { width } = useWindowSize();\n\tconst visibleMenu = useUIState((selectors) => selectors.getVisibleMenu(), []);\n\tconst canChangeLocales = useMemo(() => I18n.canChangeLocales(), []);\n\tconst dispatch = useDispatch();\n\n\tconst strings = useStrings(\"LanguageSelectorButton\", Object.values(TokenNames));\n\n\tconst keyboardShortcut = [\"alt\", \"g\"];\n\t// The formatted label with more information and hotkeys should only be used in the header\n\tconst usageLabelFormatted = useGetFormattedHotkeyString(strings[TokenNames.usageLabel], keyboardShortcut);\n\n\tconst onClick = useCallback(() => {\n\t\tdispatch(uiActions.toggleVisibleMenu({ menu: \"languages\" }));\n\t}, [dispatch]);\n\n\tif (!canChangeLocales) {\n\t\treturn null;\n\t}\n\n\tconst pressed = visibleMenu === \"languages\";\n\tconst showText = context === \"menu\" || width >= MinWidthForLabelInHeader;\n\n\treturn (\n\t\t\n\t);\n};\n\nLanguageSelectorButton.displayName = \"LanguageSelectorButton\";\n\nexport default LanguageSelectorButton;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file globe icon\n * @author Colin Walters\n * @module Epic.VideoApp.Icons.EpicLogo\n */\n\nimport React, { FC, memo } from \"react\";\nimport { IconProps } from \".\";\n\n/**\n * The EpicLogo component\n * @param props The props ;)\n */\nconst EpicLogo: FC = memo((props) => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n});\n\nEpicLogo.displayName = \"EpicLogo\";\n\nexport default EpicLogo;\n","/**\n * @copyright Copyright 2022 - 2024 Epic Systems Corporation\n * @file the organization's branded logo\n * @author Colin Walters\n * @module Epic.VideoApp.Components.Branding.BrandedLogo\n */\n\nimport React, { FC, useCallback, useState } from \"react\";\nimport { useBrandingState } from \"~/state\";\nimport styles from \"./BrandedLogo.module.scss\";\n\nexport enum BrandedLogoTestIds {\n\tself = \"BrandedBackground\",\n}\n\n/**\n * The BrandedLogo component\n */\nconst BrandedLogo: FC = () => {\n\tconst brandedLogoPath = useBrandingState((sel) => sel.getLogo(), []);\n\tconst [hideLogo, setHideLogo] = useState(false);\n\n\tconst loadFailed = useCallback(() => setHideLogo(true), []);\n\n\tif (!brandedLogoPath || hideLogo) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t
\n\t\t\t\n\t\t
\n\t);\n};\n\nBrandedLogo.displayName = \"BrandedLogo\";\n\nexport default BrandedLogo;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file Component used to react to clicks made outside of the component\n * @author Razi Rais\n * @module Epic.VideoApp.Components.Utilities.ClickOutsideSection\n */\n\nimport React, { FC, useEffect, useRef } from \"react\";\n\n/**\n * Props for ClickOutsideSectionComponent\n */\ninterface IProps {\n\tonClickOutside: () => void;\n}\n\n/**\n * The ClickOutsideSection component\n * @param props The props ;)\n */\nconst ClickOutsideSection: FC = (props) => {\n\tconst { onClickOutside, children } = props;\n\n\tconst ref = useRef(null);\n\n\tuseEffect(() => {\n\t\tconst listener = (event: { target: any }): void => {\n\t\t\t// Do nothing if clicking ref's element or descendent elements\n\t\t\tif (!ref.current || ref.current.contains(event.target)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t//Run event handler if click is detected outside ref\n\t\t\tonClickOutside();\n\t\t};\n\n\t\tdocument.addEventListener(\"click\", listener);\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"click\", listener);\n\t\t};\n\t}, [onClickOutside]);\n\n\treturn
{children}
;\n};\n\nClickOutsideSection.displayName = \"ClickOutsideSection\";\n\nexport default ClickOutsideSection;\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file A wrapper to collapse/expand content smoothly\n * @author Tara Feldstein\n * @module Epic.VideoApp.Components.Utilities.Collapse\n */\nimport React, { FC, useEffect, useRef, useState } from \"react\";\nimport { resolveClassName } from \"~/utils/className\";\nimport styles from \"./Collapse.module.scss\";\n\ninterface IProps {\n\t/** Whether or not the collapsible section is currently collapsed */\n\tcollapsed: boolean;\n\t/** Class name for the inner div of the collapse section */\n\tinnerClassName?: string;\n\t/** Callback for when the collapse section has finished animating */\n\tonAnimationFinished?: (collapsed: boolean) => void;\n\t/** HTML ID to apply to the outer div */\n\tid?: string;\n}\n\nexport enum CollapseTestIds {\n\tself = \"Collapse\",\n\tinner = \"CollapseInner\",\n}\n\n/**\n * Collapsing section\n *\n * Collapses/expands its children smoothly by transitioning the height in css\n */\nconst Collapse: FC = (props) => {\n\tconst { collapsed, innerClassName, onAnimationFinished, id, children } = props;\n\tconst [isFullyExpanded, setFullyExpanded] = useState(!collapsed);\n\n\tconst inner = useRef(null);\n\tconst innerHeight = (inner.current?.clientHeight || 202) - 2; // Remove 2px because of some trickery with padding to account for the margins in the children\n\n\t// Update isFullyExpanded so we can let the contents change in size\n\tuseEffect(() => {\n\t\tsetFullyExpanded(false);\n\n\t\tconst handle = setTimeout(() => {\n\t\t\tif (!collapsed) {\n\t\t\t\tsetFullyExpanded(true);\n\t\t\t}\n\t\t\tonAnimationFinished?.(collapsed);\n\t\t}, 400); // The expand/collapse animation lasts 400ms / 0.4s\n\n\t\treturn () => clearTimeout(handle);\n\t}, [collapsed, onAnimationFinished]);\n\n\tconst outerClass = resolveClassName(styles, { outer: true, collapsed });\n\tconst style: React.CSSProperties = {\n\t\tmaxHeight: collapsed ? (isFullyExpanded ? innerHeight : 0) : isFullyExpanded ? \"none\" : innerHeight,\n\t\tvisibility: collapsed ? \"hidden\" : \"visible\",\n\t};\n\n\tconst innerClass = resolveClassName(styles, { inner: true }, innerClassName);\n\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t{children}\n\t\t\t
\n\t\t
\n\t);\n};\n\nCollapse.displayName = \"Collapse\";\n\nexport default Collapse;\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file Non-stateful messaging functions\n * @author Will Cooper\n * @module Epic.VideoApp.Utils.Messaging\n */\n\nimport {\n\tEpicUserType,\n\tIAccessRequestPayload,\n\tIDataTrackMessage,\n\tIModeratorPayload,\n\tMessageActionType,\n\tMessageType,\n} from \"../types\";\nimport { log } from \"./logging\";\n\n/**\n * Validates a message has the proper metadata and payload contents based on its type before sending it out\n * @returns true if the message is in the proper format, false otherwise\n */\nexport function isValidDataTrackMessage(message: IDataTrackMessage): boolean {\n\t// Verify data packet is non-null\n\tif (!message || (!message.messageSID && message.needsACK)) {\n\t\treturn false;\n\t}\n\n\t// Verify message type and payload contents include all expected values\n\tswitch (message.type) {\n\t\tcase MessageType.participantInfo:\n\t\t\tif (!message.payload || !Object.values(EpicUserType).includes(message.payload.userType)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase MessageType.infoRequest:\n\t\tcase MessageType.visitEnded:\n\t\t\tif (message.payload) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase MessageType.namelessParticipantSyncRequest:\n\t\t\tif (\n\t\t\t\tmessage.payload.namelessParticipantData.idList.length !== 0 &&\n\t\t\t\tmessage.payload.namelessParticipantData.idList.length !== 1\n\t\t\t) {\n\t\t\t\t// Sync request needs to have a list of exactly 0 or 1 members\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (message.payload.namelessParticipantData.dataIsShared === true) {\n\t\t\t\t// Data shouldn't be already shared\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase MessageType.namelessParticipantSyncResponse:\n\t\t\tif (message.payload.namelessParticipantData.timestamp === 0) {\n\t\t\t\t// Responses can't be sent with a timestamp of 0\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (message.payload.namelessParticipantData.dataIsShared === false) {\n\t\t\t\t// Data should be flagged as shared already\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase MessageType.moderate:\n\t\t\tif (!validateModeratorMessage(message.payload)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase MessageType.visitAccess:\n\t\tcase MessageType.imageCaptured:\n\t\t\tif (!message.recipients) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase MessageType.accessRequest:\n\t\t\tif (!validateAccessRequest(message.payload)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault:\n\t\t\treturn false;\n\t}\n\n\t//Verify message action and recipient format match\n\tif (!verifyMessageFormatAndAction(message)) {\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n\nfunction verifyMessageFormatAndAction(message: IDataTrackMessage): boolean {\n\tif (\n\t\t(message.action === MessageActionType.broadcast && message.recipients) ||\n\t\t(message.action === MessageActionType.request && !message.recipients)\n\t) {\n\t\treturn false;\n\t}\n\treturn true;\n}\n\n/**\n * Helper function to validate the payload of a moderator message\n * @param payload - Current message\n * @returns - True if the payload matches a moderator action\n */\nfunction validateModeratorMessage(payload: IModeratorPayload): boolean {\n\tif (\n\t\t!payload ||\n\t\t(payload.audioLock === undefined &&\n\t\t\tpayload.videoLock === undefined &&\n\t\t\tpayload.screenShareLock === undefined)\n\t) {\n\t\treturn false;\n\t}\n\treturn true;\n}\n\n/**\n * Helper function to validate the payload of a request message\n * @param payload - Current message\n * @returns True if the payload contains a display name\n */\nfunction validateAccessRequest(payload: IAccessRequestPayload): boolean {\n\tif (!payload) {\n\t\treturn false;\n\t}\n\treturn true;\n}\n\n/**\n * Verifies the the JSON string can be parsed into a data track object before we attempt to access its properties\n * @returns the parsed object, or null if the JSON parse failed\n */\nexport function tryParseJSON(json: string): IDataTrackMessage | null {\n\ttry {\n\t\tconst data: IDataTrackMessage = JSON.parse(json) as IDataTrackMessage;\n\t\tif (data && typeof data === \"object\") {\n\t\t\treturn data;\n\t\t}\n\t} catch (e) {\n\t\tlog(e);\n\t\tlog(\"Failed to parse JSON from inter-client communication\");\n\t}\n\treturn null;\n}\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file hook to handle sending out messages on a TwilioDataTrack\n * @author Will Cooper\n * @module Epic.VideoApp.Utils.SendMessage\n */\n\nimport { warn } from \"~/utils/logging\";\nimport { isValidDataTrackMessage } from \"~/utils/messaging\";\nimport { ISession } from \"~/web-core/interfaces\";\nimport { IDataTrackMessage } from \"../types\";\n\n/**\n * Function to access messaging state for the purpose of sending out data track messages to remote participants.\n * Validates message fields before sending them out.\n * When needing to respond to a request-based message in the future, we should require this hook to return a promise to be properly awaited.\n * @returns the function to send any properly formatted data track message out to remote participants.\n */\nexport function sendMessage(session: ISession | undefined, message: IDataTrackMessage): void {\n\t// Anything request based (display name request, image capture) needs to know when its requested data is available.\n\tif (!session) {\n\t\treturn;\n\t}\n\n\t//Setup messageSID (unique value for each message sent)\n\tmessage.messageSID =\n\t\tsession.localUser.getUserIdentity() + Math.random().toString() + Date.now().toString();\n\n\tif (!isValidDataTrackMessage(message)) {\n\t\twarn(\"Invalid data track message:\", message);\n\t\treturn;\n\t}\n\n\t// Send the message using vendor-specific logic\n\tconst stringMessage = JSON.stringify(message);\n\tsession.sendDataMessage(stringMessage);\n\n\t// Broadcast type messages do not need ACK's, we can resolve after we send the message out on the data track.\n\tif (!message.needsACK) {\n\t\treturn;\n\t}\n}\n","/**\n * @copyright Copyright 2021-2024 Epic Systems Corporation\n * @file Data Track hook to send broadcast messages to all moderators when a patient wishes to \"raise their hand\" and request media access\n * @author Will Cooper\n * @module Epic.VideoApp.Hooks.Messaging.Moderation.UseBroadcastMediaAccessRequest\n */\n\nimport { useCallback, useContext } from \"react\";\nimport { IBasicAuditEvent, useAuditFeatureUse } from \"~/hooks\";\nimport { EventType, IMediaAccessRequestMessage, MessageActionType, MessageType } from \"~/types\";\nimport { VideoSessionContext } from \"~/web-core/components\";\nimport { sendMessage } from \"../../../utils/sendMessage\";\n\ninterface IRequestOptions {\n\taudio?: boolean;\n\tvideo?: boolean;\n\tscreenShare?: boolean;\n}\n\nexport interface IBroadcastAccessRequest {\n\t(params: IRequestOptions): void;\n}\n\nexport function useBroadcastMediaAccessRequest(): IBroadcastAccessRequest {\n\tconst { session } = useContext(VideoSessionContext);\n\tconst auditFeatureUse = useAuditFeatureUse();\n\n\tconst broadcastRequest = useCallback(\n\t\t(params: IRequestOptions) => {\n\t\t\tconst events: IBasicAuditEvent[] = [];\n\n\t\t\tconst requestAudio = params.audio;\n\t\t\tconst requestVideo = params.video;\n\t\t\tconst requestScreenShare = params.screenShare;\n\n\t\t\tif (requestVideo) {\n\t\t\t\tevents.push({\n\t\t\t\t\tfeature: EventType.participantVideoRequest,\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (requestAudio) {\n\t\t\t\tevents.push({\n\t\t\t\t\tfeature: EventType.participantAudioRequest,\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (requestScreenShare) {\n\t\t\t\tevents.push({\n\t\t\t\t\tfeature: EventType.participantScreenShareRequest,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (events.length > 0) {\n\t\t\t\tvoid auditFeatureUse(events);\n\t\t\t}\n\t\t\tconst message: IMediaAccessRequestMessage = {\n\t\t\t\taction: MessageActionType.broadcast,\n\t\t\t\tpayload: {\n\t\t\t\t\taudioRequest: requestAudio,\n\t\t\t\t\tvideoRequest: requestVideo,\n\t\t\t\t\tscreenShareRequest: requestScreenShare,\n\t\t\t\t},\n\t\t\t\ttype: MessageType.accessRequest,\n\t\t\t\tneedsACK: false,\n\t\t\t};\n\n\t\t\tsendMessage(session, message);\n\t\t},\n\t\t[auditFeatureUse, session],\n\t);\n\n\treturn broadcastRequest;\n}\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file Data Track hook to send messages that mute or disable the camera of remote participants\n * @author Will Cooper\n * @module Epic.VideoApp.Hooks.Messaging.Moderation.UseSendModeratorAction\n */\n\nimport { useCallback, useContext } from \"react\";\nimport { IBasicAuditEvent, useAuditFeatureUse } from \"~/hooks\";\nimport {\n\tEventType,\n\tIModeratorActionMessage,\n\tIModeratorPayload,\n\tMessageActionType,\n\tMessageType,\n} from \"~/types\";\nimport { VideoSessionContext } from \"~/web-core/components\";\nimport { sendMessage } from \"../../../utils/sendMessage\";\n\nexport interface ISendModeratorMessage {\n\t(moderatorAction: IModeratorPayload, recipientID: string, shouldAudit?: boolean): void;\n}\n\n/**\n * Sends a data track message to a specific participant to have them lock or unlock various media\n * @returns a function used to send moderator data track messages\n */\nexport function useSendModeratorAction(): ISendModeratorMessage {\n\tconst { session } = useContext(VideoSessionContext);\n\n\tconst auditFeatureUse = useAuditFeatureUse();\n\n\tconst requestModeratorAction = useCallback(\n\t\t(moderatorAction: IModeratorPayload, recipientID: string, shouldAudit?: boolean) => {\n\t\t\t// Determine payload type\n\t\t\tconst { videoLock, audioLock, screenShareLock } = moderatorAction;\n\n\t\t\t// Only audit built in events when they happen individually to save on out-going web requests\n\t\t\tif (shouldAudit) {\n\t\t\t\tconst events: IBasicAuditEvent[] = [];\n\n\t\t\t\t// Audit features (an undefined value is a no-op so don't log an event)\n\t\t\t\tif (audioLock !== undefined) {\n\t\t\t\t\tevents.push({\n\t\t\t\t\t\tfeature: audioLock ? EventType.microphoneLocked : EventType.microphoneUnlocked,\n\t\t\t\t\t\ttargetParticipantId: recipientID,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (videoLock !== undefined) {\n\t\t\t\t\tevents.push({\n\t\t\t\t\t\tfeature: videoLock ? EventType.cameraLocked : EventType.cameraUnlocked,\n\t\t\t\t\t\ttargetParticipantId: recipientID,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (screenShareLock !== undefined) {\n\t\t\t\t\tevents.push({\n\t\t\t\t\t\tfeature: screenShareLock\n\t\t\t\t\t\t\t? EventType.screenSharingLocked\n\t\t\t\t\t\t\t: EventType.screenSharingUnlocked,\n\t\t\t\t\t\ttargetParticipantId: recipientID,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (events.length > 0) {\n\t\t\t\t\tvoid auditFeatureUse(events);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst message: IModeratorActionMessage = {\n\t\t\t\taction: MessageActionType.request,\n\t\t\t\tpayload: moderatorAction,\n\t\t\t\trecipients: [recipientID],\n\t\t\t\ttype: MessageType.moderate,\n\t\t\t\tneedsACK: false,\n\t\t\t};\n\t\t\tsendMessage(session, message);\n\t\t},\n\t\t[auditFeatureUse, session],\n\t);\n\n\treturn requestModeratorAction;\n}\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file Interface for sending messages that will allow participants to join the full visit\n * @author Will Cooper\n * @module Epic.VideoApp.Hooks.Messaging.Moderation.UseSendVisitAccessMessage\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport { useCallback, useContext } from \"react\";\nimport { useStrings } from \"~/hooks/useStrings\";\nimport { alertActions, useAuthState, useModerationState } from \"~/state\";\nimport { IModeratorPayload, IVisitAccessMessage, MessageActionType, MessageType } from \"~/types\";\nimport { stringFormat } from \"~/utils/strings\";\nimport { VideoSessionContext } from \"~/web-core/components\";\nimport { sendMessage } from \"../../../utils/sendMessage\";\n\nexport interface ISendAccessMessage {\n\t(recipientIdentity: string, displayName: string): Promise;\n}\n\nenum TokenNames {\n\tadmitFailed = \"AdmitFailed\",\n}\n\n/**\n * A function that defines the data message send operation for allowing waiting participants to join the call\n * @returns a function to send access messages for the visit\n */\nexport function useSendVisitAccessMessage(): ISendAccessMessage {\n\tconst { session } = useContext(VideoSessionContext);\n\tconst dispatch = useDispatch();\n\tconst strings = useStrings(\"useSendVisitAccessMessage\", Object.values(TokenNames));\n\n\t// Check flags in state for deny audio / deny video\n\tconst audioLock = useModerationState((selectors) => selectors.getAudioAdmitOption(), []);\n\tconst videoLock = useModerationState((selectors) => selectors.getVideoAdmitOption(), []);\n\tconst screenShareLock = useModerationState((selectors) => selectors.getScreenShareAdmitOption(), []);\n\tconst JWT = useAuthState((selectors) => selectors.getJWT(), []);\n\n\tconst requestVisitAccess = useCallback(\n\t\tasync (recipientIdentity: string, displayName: string) => {\n\t\t\tif (!JWT || !session) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!(await session.enableUserMedia(recipientIdentity, JWT))) {\n\t\t\t\tdispatch(\n\t\t\t\t\talertActions.postGenericAlert(stringFormat(strings[TokenNames.admitFailed], displayName)),\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst payload: IModeratorPayload = { audioLock, videoLock, screenShareLock };\n\t\t\tconst message: IVisitAccessMessage = {\n\t\t\t\taction: MessageActionType.request,\n\t\t\t\tpayload: payload,\n\t\t\t\trecipients: [recipientIdentity],\n\t\t\t\ttype: MessageType.visitAccess,\n\t\t\t\tneedsACK: false,\n\t\t\t};\n\n\t\t\tsendMessage(session, message);\n\t\t},\n\t\t[JWT, audioLock, dispatch, screenShareLock, session, strings, videoLock],\n\t);\n\n\treturn requestVisitAccess;\n}\n","function e(e,t){if(null==e)return{};var n,r,i=function(e,t){if(null==e)return{};var n,r,i={},o=Object.keys(e);for(r=0;r=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}function t(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function n(e){return n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},n(e)}function r(e){var t=function(e,t){if(\"object\"!==n(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var i=r.call(e,t||\"default\");if(\"object\"!==n(i))return i;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===t?String:Number)(e)}(e,\"string\");return\"symbol\"===n(t)?t:String(t)}function i(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&a.length>i&&!a.warned){a.warned=!0;var c=new Error(\"Possible EventEmitter memory leak detected. \"+a.length+\" \"+String(t)+\" listeners added. Use emitter.setMaxListeners() to increase limit\");c.name=\"MaxListenersExceededWarning\",c.emitter=e,c.type=t,c.count=a.length,s=c,console&&console.warn&&console.warn(s)}return e}function T(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function O(e,t,n){var r={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},i=T.bind(r);return i.listener=n,r.wrapFn=i,i}function P(e,t,n){var r=e._events;if(void 0===r)return[];var i=r[t];return void 0===i?[]:\"function\"==typeof i?n?[i.listener||i]:[i]:n?function(e){for(var t=new Array(e.length),n=0;n0&&(o=t[0]),o instanceof Error)throw o;var a=new Error(\"Unhandled error.\"+(o?\" (\"+o.message+\")\":\"\"));throw a.context=o,a}var s=i[e];if(void 0===s)return!1;if(\"function\"==typeof s)b(s,this,t);else{var c=s.length,l=D(s,c);for(n=0;n=0;o--)if(n[o]===t||n[o].listener===t){a=n[o].listener,i=o;break}if(i<0)return this;0===i?n.shift():function(e,t){for(;t+1=0;r--)this.removeListener(e,t[r]);return this},S.prototype.listeners=function(e){return P(this,e,!0)},S.prototype.rawListeners=function(e){return P(this,e,!1)},S.listenerCount=function(e,t){return\"function\"==typeof e.listenerCount?e.listenerCount(t):A.call(e,t)},S.prototype.listenerCount=A,S.prototype.eventNames=function(){return this._eventsCount>0?v(this._events):[]};var x=Object.prototype.hasOwnProperty;function L(e,t,n){for(n of e.keys())if(I(n,t))return n}function I(e,t){var n,r,i;if(e===t)return!0;if(e&&t&&(n=e.constructor)===t.constructor){if(n===Date)return e.getTime()===t.getTime();if(n===RegExp)return e.toString()===t.toString();if(n===Array){if((r=e.length)===t.length)for(;r--&&I(e[r],t[r]););return-1===r}if(n===Set){if(e.size!==t.size)return!1;for(r of e){if((i=r)&&\"object\"==typeof i&&!(i=L(t,i)))return!1;if(!t.has(i))return!1}return!0}if(n===Map){if(e.size!==t.size)return!1;for(r of e){if((i=r[0])&&\"object\"==typeof i&&!(i=L(t,i)))return!1;if(!I(r[1],t.get(i)))return!1}return!0}if(n===ArrayBuffer)e=new Uint8Array(e),t=new Uint8Array(t);else if(n===DataView){if((r=e.byteLength)===t.byteLength)for(;r--&&e.getInt8(r)===t.getInt8(r););return-1===r}if(ArrayBuffer.isView(e)){if((r=e.byteLength)===t.byteLength)for(;r--&&e[r]===t[r];);return-1===r}if(!n||\"object\"==typeof e){for(n in r=0,e){if(x.call(e,n)&&++r&&!x.call(t,n))return!1;if(!(n in t)||!I(e[n],t[n]))return!1}return Object.keys(t).length===r}}return e!=e&&t!=t}const N={\"Amazon Silk\":\"amazon_silk\",\"Android Browser\":\"android\",Bada:\"bada\",BlackBerry:\"blackberry\",Chrome:\"chrome\",Chromium:\"chromium\",Electron:\"electron\",Epiphany:\"epiphany\",Firefox:\"firefox\",Focus:\"focus\",Generic:\"generic\",\"Google Search\":\"google_search\",Googlebot:\"googlebot\",\"Internet Explorer\":\"ie\",\"K-Meleon\":\"k_meleon\",Maxthon:\"maxthon\",\"Microsoft Edge\":\"edge\",\"MZ Browser\":\"mz\",\"NAVER Whale Browser\":\"naver\",Opera:\"opera\",\"Opera Coast\":\"opera_coast\",PhantomJS:\"phantomjs\",Puffin:\"puffin\",QupZilla:\"qupzilla\",QQ:\"qq\",QQLite:\"qqlite\",Safari:\"safari\",Sailfish:\"sailfish\",\"Samsung Internet for Android\":\"samsung_internet\",SeaMonkey:\"seamonkey\",Sleipnir:\"sleipnir\",Swing:\"swing\",Tizen:\"tizen\",\"UC Browser\":\"uc\",Vivaldi:\"vivaldi\",\"WebOS Browser\":\"webos\",WeChat:\"wechat\",\"Yandex Browser\":\"yandex\",Roku:\"roku\"},R={amazon_silk:\"Amazon Silk\",android:\"Android Browser\",bada:\"Bada\",blackberry:\"BlackBerry\",chrome:\"Chrome\",chromium:\"Chromium\",electron:\"Electron\",epiphany:\"Epiphany\",firefox:\"Firefox\",focus:\"Focus\",generic:\"Generic\",googlebot:\"Googlebot\",google_search:\"Google Search\",ie:\"Internet Explorer\",k_meleon:\"K-Meleon\",maxthon:\"Maxthon\",edge:\"Microsoft Edge\",mz:\"MZ Browser\",naver:\"NAVER Whale Browser\",opera:\"Opera\",opera_coast:\"Opera Coast\",phantomjs:\"PhantomJS\",puffin:\"Puffin\",qupzilla:\"QupZilla\",qq:\"QQ Browser\",qqlite:\"QQ Browser Lite\",safari:\"Safari\",sailfish:\"Sailfish\",samsung_internet:\"Samsung Internet for Android\",seamonkey:\"SeaMonkey\",sleipnir:\"Sleipnir\",swing:\"Swing\",tizen:\"Tizen\",uc:\"UC Browser\",vivaldi:\"Vivaldi\",webos:\"WebOS Browser\",wechat:\"WeChat\",yandex:\"Yandex Browser\"},B={tablet:\"tablet\",mobile:\"mobile\",desktop:\"desktop\",tv:\"tv\"},F={WindowsPhone:\"Windows Phone\",Windows:\"Windows\",MacOS:\"macOS\",iOS:\"iOS\",Android:\"Android\",WebOS:\"WebOS\",BlackBerry:\"BlackBerry\",Bada:\"Bada\",Tizen:\"Tizen\",Linux:\"Linux\",ChromeOS:\"Chrome OS\",PlayStation4:\"PlayStation 4\",Roku:\"Roku\"},U={EdgeHTML:\"EdgeHTML\",Blink:\"Blink\",Trident:\"Trident\",Presto:\"Presto\",Gecko:\"Gecko\",WebKit:\"WebKit\"};class V{static getFirstMatch(e,t){const n=t.match(e);return n&&n.length>0&&n[1]||\"\"}static getSecondMatch(e,t){const n=t.match(e);return n&&n.length>1&&n[2]||\"\"}static matchAndReturnConst(e,t,n){if(e.test(t))return n}static getWindowsVersionName(e){switch(e){case\"NT\":return\"NT\";case\"XP\":case\"NT 5.1\":return\"XP\";case\"NT 5.0\":return\"2000\";case\"NT 5.2\":return\"2003\";case\"NT 6.0\":return\"Vista\";case\"NT 6.1\":return\"7\";case\"NT 6.2\":return\"8\";case\"NT 6.3\":return\"8.1\";case\"NT 10.0\":return\"10\";default:return}}static getMacOSVersionName(e){const t=e.split(\".\").splice(0,2).map((e=>parseInt(e,10)||0));if(t.push(0),10===t[0])switch(t[1]){case 5:return\"Leopard\";case 6:return\"Snow Leopard\";case 7:return\"Lion\";case 8:return\"Mountain Lion\";case 9:return\"Mavericks\";case 10:return\"Yosemite\";case 11:return\"El Capitan\";case 12:return\"Sierra\";case 13:return\"High Sierra\";case 14:return\"Mojave\";case 15:return\"Catalina\";default:return}}static getAndroidVersionName(e){const t=e.split(\".\").splice(0,2).map((e=>parseInt(e,10)||0));if(t.push(0),!(1===t[0]&&t[1]<5))return 1===t[0]&&t[1]<6?\"Cupcake\":1===t[0]&&t[1]>=6?\"Donut\":2===t[0]&&t[1]<2?\"Eclair\":2===t[0]&&2===t[1]?\"Froyo\":2===t[0]&&t[1]>2?\"Gingerbread\":3===t[0]?\"Honeycomb\":4===t[0]&&t[1]<1?\"Ice Cream Sandwich\":4===t[0]&&t[1]<4?\"Jelly Bean\":4===t[0]&&t[1]>=4?\"KitKat\":5===t[0]?\"Lollipop\":6===t[0]?\"Marshmallow\":7===t[0]?\"Nougat\":8===t[0]?\"Oreo\":9===t[0]?\"Pie\":void 0}static getVersionPrecision(e){return e.split(\".\").length}static compareVersions(e,t,n=!1){const r=V.getVersionPrecision(e),i=V.getVersionPrecision(t);let o=Math.max(r,i),a=0;const s=V.map([e,t],(e=>{const t=o-V.getVersionPrecision(e),n=e+new Array(t+1).join(\".0\");return V.map(n.split(\".\"),(e=>new Array(20-e.length).join(\"0\")+e)).reverse()}));for(n&&(a=o-Math.min(r,i)),o-=1;o>=a;){if(s[0][o]>s[1][o])return 1;if(s[0][o]===s[1][o]){if(o===a)return 0;o-=1}else if(s[0][o]{n[t]=e[t]}))}}return e}static getBrowserAlias(e){return N[e]}static getBrowserTypeByAlias(e){return R[e]||\"\"}}const J=/version\\/(\\d+(\\.?_?\\d+)+)/i,$=[{test:[/googlebot/i],describe(e){const t={name:\"Googlebot\"},n=V.getFirstMatch(/googlebot\\/(\\d+(\\.\\d+))/i,e)||V.getFirstMatch(J,e);return n&&(t.version=n),t}},{test:[/opera/i],describe(e){const t={name:\"Opera\"},n=V.getFirstMatch(J,e)||V.getFirstMatch(/(?:opera)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/opr\\/|opios/i],describe(e){const t={name:\"Opera\"},n=V.getFirstMatch(/(?:opr|opios)[\\s/](\\S+)/i,e)||V.getFirstMatch(J,e);return n&&(t.version=n),t}},{test:[/SamsungBrowser/i],describe(e){const t={name:\"Samsung Internet for Android\"},n=V.getFirstMatch(J,e)||V.getFirstMatch(/(?:SamsungBrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/Whale/i],describe(e){const t={name:\"NAVER Whale Browser\"},n=V.getFirstMatch(J,e)||V.getFirstMatch(/(?:whale)[\\s/](\\d+(?:\\.\\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/MZBrowser/i],describe(e){const t={name:\"MZ Browser\"},n=V.getFirstMatch(/(?:MZBrowser)[\\s/](\\d+(?:\\.\\d+)+)/i,e)||V.getFirstMatch(J,e);return n&&(t.version=n),t}},{test:[/focus/i],describe(e){const t={name:\"Focus\"},n=V.getFirstMatch(/(?:focus)[\\s/](\\d+(?:\\.\\d+)+)/i,e)||V.getFirstMatch(J,e);return n&&(t.version=n),t}},{test:[/swing/i],describe(e){const t={name:\"Swing\"},n=V.getFirstMatch(/(?:swing)[\\s/](\\d+(?:\\.\\d+)+)/i,e)||V.getFirstMatch(J,e);return n&&(t.version=n),t}},{test:[/coast/i],describe(e){const t={name:\"Opera Coast\"},n=V.getFirstMatch(J,e)||V.getFirstMatch(/(?:coast)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/opt\\/\\d+(?:.?_?\\d+)+/i],describe(e){const t={name:\"Opera Touch\"},n=V.getFirstMatch(/(?:opt)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||V.getFirstMatch(J,e);return n&&(t.version=n),t}},{test:[/yabrowser/i],describe(e){const t={name:\"Yandex Browser\"},n=V.getFirstMatch(/(?:yabrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||V.getFirstMatch(J,e);return n&&(t.version=n),t}},{test:[/ucbrowser/i],describe(e){const t={name:\"UC Browser\"},n=V.getFirstMatch(J,e)||V.getFirstMatch(/(?:ucbrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/Maxthon|mxios/i],describe(e){const t={name:\"Maxthon\"},n=V.getFirstMatch(J,e)||V.getFirstMatch(/(?:Maxthon|mxios)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/epiphany/i],describe(e){const t={name:\"Epiphany\"},n=V.getFirstMatch(J,e)||V.getFirstMatch(/(?:epiphany)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/puffin/i],describe(e){const t={name:\"Puffin\"},n=V.getFirstMatch(J,e)||V.getFirstMatch(/(?:puffin)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/sleipnir/i],describe(e){const t={name:\"Sleipnir\"},n=V.getFirstMatch(J,e)||V.getFirstMatch(/(?:sleipnir)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/k-meleon/i],describe(e){const t={name:\"K-Meleon\"},n=V.getFirstMatch(J,e)||V.getFirstMatch(/(?:k-meleon)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/micromessenger/i],describe(e){const t={name:\"WeChat\"},n=V.getFirstMatch(/(?:micromessenger)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||V.getFirstMatch(J,e);return n&&(t.version=n),t}},{test:[/qqbrowser/i],describe(e){const t={name:/qqbrowserlite/i.test(e)?\"QQ Browser Lite\":\"QQ Browser\"},n=V.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\\d+(\\.?_?\\d+)+)/i,e)||V.getFirstMatch(J,e);return n&&(t.version=n),t}},{test:[/msie|trident/i],describe(e){const t={name:\"Internet Explorer\"},n=V.getFirstMatch(/(?:msie |rv:)(\\d+(\\.?_?\\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/\\sedg\\//i],describe(e){const t={name:\"Microsoft Edge\"},n=V.getFirstMatch(/\\sedg\\/(\\d+(\\.?_?\\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/edg([ea]|ios)/i],describe(e){const t={name:\"Microsoft Edge\"},n=V.getSecondMatch(/edg([ea]|ios)\\/(\\d+(\\.?_?\\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/vivaldi/i],describe(e){const t={name:\"Vivaldi\"},n=V.getFirstMatch(/vivaldi\\/(\\d+(\\.?_?\\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/seamonkey/i],describe(e){const t={name:\"SeaMonkey\"},n=V.getFirstMatch(/seamonkey\\/(\\d+(\\.?_?\\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/sailfish/i],describe(e){const t={name:\"Sailfish\"},n=V.getFirstMatch(/sailfish\\s?browser\\/(\\d+(\\.\\d+)?)/i,e);return n&&(t.version=n),t}},{test:[/silk/i],describe(e){const t={name:\"Amazon Silk\"},n=V.getFirstMatch(/silk\\/(\\d+(\\.?_?\\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/phantom/i],describe(e){const t={name:\"PhantomJS\"},n=V.getFirstMatch(/phantomjs\\/(\\d+(\\.?_?\\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/slimerjs/i],describe(e){const t={name:\"SlimerJS\"},n=V.getFirstMatch(/slimerjs\\/(\\d+(\\.?_?\\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/blackberry|\\bbb\\d+/i,/rim\\stablet/i],describe(e){const t={name:\"BlackBerry\"},n=V.getFirstMatch(J,e)||V.getFirstMatch(/blackberry[\\d]+\\/(\\d+(\\.?_?\\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/(web|hpw)[o0]s/i],describe(e){const t={name:\"WebOS Browser\"},n=V.getFirstMatch(J,e)||V.getFirstMatch(/w(?:eb)?[o0]sbrowser\\/(\\d+(\\.?_?\\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/bada/i],describe(e){const t={name:\"Bada\"},n=V.getFirstMatch(/dolfin\\/(\\d+(\\.?_?\\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/tizen/i],describe(e){const t={name:\"Tizen\"},n=V.getFirstMatch(/(?:tizen\\s?)?browser\\/(\\d+(\\.?_?\\d+)+)/i,e)||V.getFirstMatch(J,e);return n&&(t.version=n),t}},{test:[/qupzilla/i],describe(e){const t={name:\"QupZilla\"},n=V.getFirstMatch(/(?:qupzilla)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||V.getFirstMatch(J,e);return n&&(t.version=n),t}},{test:[/firefox|iceweasel|fxios/i],describe(e){const t={name:\"Firefox\"},n=V.getFirstMatch(/(?:firefox|iceweasel|fxios)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/electron/i],describe(e){const t={name:\"Electron\"},n=V.getFirstMatch(/(?:electron)\\/(\\d+(\\.?_?\\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/MiuiBrowser/i],describe(e){const t={name:\"Miui\"},n=V.getFirstMatch(/(?:MiuiBrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/chromium/i],describe(e){const t={name:\"Chromium\"},n=V.getFirstMatch(/(?:chromium)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||V.getFirstMatch(J,e);return n&&(t.version=n),t}},{test:[/chrome|crios|crmo/i],describe(e){const t={name:\"Chrome\"},n=V.getFirstMatch(/(?:chrome|crios|crmo)\\/(\\d+(\\.?_?\\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/GSA/i],describe(e){const t={name:\"Google Search\"},n=V.getFirstMatch(/(?:GSA)\\/(\\d+(\\.?_?\\d+)+)/i,e);return n&&(t.version=n),t}},{test(e){const t=!e.test(/like android/i),n=e.test(/android/i);return t&&n},describe(e){const t={name:\"Android Browser\"},n=V.getFirstMatch(J,e);return n&&(t.version=n),t}},{test:[/playstation 4/i],describe(e){const t={name:\"PlayStation 4\"},n=V.getFirstMatch(J,e);return n&&(t.version=n),t}},{test:[/safari|applewebkit/i],describe(e){const t={name:\"Safari\"},n=V.getFirstMatch(J,e);return n&&(t.version=n),t}},{test:[/.*/i],describe(e){const t=-1!==e.search(\"\\\\(\")?/^(.*)\\/(.*)[ \\t]\\((.*)/:/^(.*)\\/(.*) /;return{name:V.getFirstMatch(t,e),version:V.getSecondMatch(t,e)}}}];var G=[{test:[/Roku\\/DVP/],describe(e){const t=V.getFirstMatch(/Roku\\/DVP-(\\d+\\.\\d+)/i,e);return{name:F.Roku,version:t}}},{test:[/windows phone/i],describe(e){const t=V.getFirstMatch(/windows phone (?:os)?\\s?(\\d+(\\.\\d+)*)/i,e);return{name:F.WindowsPhone,version:t}}},{test:[/windows /i],describe(e){const t=V.getFirstMatch(/Windows ((NT|XP)( \\d\\d?.\\d)?)/i,e),n=V.getWindowsVersionName(t);return{name:F.Windows,version:t,versionName:n}}},{test:[/Macintosh(.*?) FxiOS(.*?)\\//],describe(e){const t={name:F.iOS},n=V.getSecondMatch(/(Version\\/)(\\d[\\d.]+)/,e);return n&&(t.version=n),t}},{test:[/macintosh/i],describe(e){const t=V.getFirstMatch(/mac os x (\\d+(\\.?_?\\d+)+)/i,e).replace(/[_\\s]/g,\".\"),n=V.getMacOSVersionName(t),r={name:F.MacOS,version:t};return n&&(r.versionName=n),r}},{test:[/(ipod|iphone|ipad)/i],describe(e){const t=V.getFirstMatch(/os (\\d+([_\\s]\\d+)*) like mac os x/i,e).replace(/[_\\s]/g,\".\");return{name:F.iOS,version:t}}},{test(e){const t=!e.test(/like android/i),n=e.test(/android/i);return t&&n},describe(e){const t=V.getFirstMatch(/android[\\s/-](\\d+(\\.\\d+)*)/i,e),n=V.getAndroidVersionName(t),r={name:F.Android,version:t};return n&&(r.versionName=n),r}},{test:[/(web|hpw)[o0]s/i],describe(e){const t=V.getFirstMatch(/(?:web|hpw)[o0]s\\/(\\d+(\\.\\d+)*)/i,e),n={name:F.WebOS};return t&&t.length&&(n.version=t),n}},{test:[/blackberry|\\bbb\\d+/i,/rim\\stablet/i],describe(e){const t=V.getFirstMatch(/rim\\stablet\\sos\\s(\\d+(\\.\\d+)*)/i,e)||V.getFirstMatch(/blackberry\\d+\\/(\\d+([_\\s]\\d+)*)/i,e)||V.getFirstMatch(/\\bbb(\\d+)/i,e);return{name:F.BlackBerry,version:t}}},{test:[/bada/i],describe(e){const t=V.getFirstMatch(/bada\\/(\\d+(\\.\\d+)*)/i,e);return{name:F.Bada,version:t}}},{test:[/tizen/i],describe(e){const t=V.getFirstMatch(/tizen[/\\s](\\d+(\\.\\d+)*)/i,e);return{name:F.Tizen,version:t}}},{test:[/linux/i],describe:()=>({name:F.Linux})},{test:[/CrOS/],describe:()=>({name:F.ChromeOS})},{test:[/PlayStation 4/],describe(e){const t=V.getFirstMatch(/PlayStation 4[/\\s](\\d+(\\.\\d+)*)/i,e);return{name:F.PlayStation4,version:t}}}],q=[{test:[/googlebot/i],describe:()=>({type:\"bot\",vendor:\"Google\"})},{test:[/huawei/i],describe(e){const t=V.getFirstMatch(/(can-l01)/i,e)&&\"Nova\",n={type:B.mobile,vendor:\"Huawei\"};return t&&(n.model=t),n}},{test:[/nexus\\s*(?:7|8|9|10).*/i],describe:()=>({type:B.tablet,vendor:\"Nexus\"})},{test:[/ipad/i],describe:()=>({type:B.tablet,vendor:\"Apple\",model:\"iPad\"})},{test:[/Macintosh(.*?) FxiOS(.*?)\\//],describe:()=>({type:B.tablet,vendor:\"Apple\",model:\"iPad\"})},{test:[/kftt build/i],describe:()=>({type:B.tablet,vendor:\"Amazon\",model:\"Kindle Fire HD 7\"})},{test:[/silk/i],describe:()=>({type:B.tablet,vendor:\"Amazon\"})},{test:[/tablet(?! pc)/i],describe:()=>({type:B.tablet})},{test(e){const t=e.test(/ipod|iphone/i),n=e.test(/like (ipod|iphone)/i);return t&&!n},describe(e){const t=V.getFirstMatch(/(ipod|iphone)/i,e);return{type:B.mobile,vendor:\"Apple\",model:t}}},{test:[/nexus\\s*[0-6].*/i,/galaxy nexus/i],describe:()=>({type:B.mobile,vendor:\"Nexus\"})},{test:[/[^-]mobi/i],describe:()=>({type:B.mobile})},{test:e=>\"blackberry\"===e.getBrowserName(!0),describe:()=>({type:B.mobile,vendor:\"BlackBerry\"})},{test:e=>\"bada\"===e.getBrowserName(!0),describe:()=>({type:B.mobile})},{test:e=>\"windows phone\"===e.getBrowserName(),describe:()=>({type:B.mobile,vendor:\"Microsoft\"})},{test(e){const t=Number(String(e.getOSVersion()).split(\".\")[0]);return\"android\"===e.getOSName(!0)&&t>=3},describe:()=>({type:B.tablet})},{test:e=>\"android\"===e.getOSName(!0),describe:()=>({type:B.mobile})},{test:e=>\"macos\"===e.getOSName(!0),describe:()=>({type:B.desktop,vendor:\"Apple\"})},{test:e=>\"windows\"===e.getOSName(!0),describe:()=>({type:B.desktop})},{test:e=>\"linux\"===e.getOSName(!0),describe:()=>({type:B.desktop})},{test:e=>\"playstation 4\"===e.getOSName(!0),describe:()=>({type:B.tv})},{test:e=>\"roku\"===e.getOSName(!0),describe:()=>({type:B.tv})}],Y=[{test:e=>\"microsoft edge\"===e.getBrowserName(!0),describe(e){if(/\\sedg\\//i.test(e))return{name:U.Blink};const t=V.getFirstMatch(/edge\\/(\\d+(\\.?_?\\d+)+)/i,e);return{name:U.EdgeHTML,version:t}}},{test:[/trident/i],describe(e){const t={name:U.Trident},n=V.getFirstMatch(/trident\\/(\\d+(\\.?_?\\d+)+)/i,e);return n&&(t.version=n),t}},{test:e=>e.test(/presto/i),describe(e){const t={name:U.Presto},n=V.getFirstMatch(/presto\\/(\\d+(\\.?_?\\d+)+)/i,e);return n&&(t.version=n),t}},{test(e){const t=e.test(/gecko/i),n=e.test(/like gecko/i);return t&&!n},describe(e){const t={name:U.Gecko},n=V.getFirstMatch(/gecko\\/(\\d+(\\.?_?\\d+)+)/i,e);return n&&(t.version=n),t}},{test:[/(apple)?webkit\\/537\\.36/i],describe:()=>({name:U.Blink})},{test:[/(apple)?webkit/i],describe(e){const t={name:U.WebKit},n=V.getFirstMatch(/webkit\\/(\\d+(\\.?_?\\d+)+)/i,e);return n&&(t.version=n),t}}];class z{constructor(e,t=!1){if(null==e||\"\"===e)throw new Error(\"UserAgent parameter can't be empty\");this._ua=e,this.parsedResult={},!0!==t&&this.parse()}getUA(){return this._ua}test(e){return e.test(this._ua)}parseBrowser(){this.parsedResult.browser={};const e=V.find($,(e=>{if(\"function\"==typeof e.test)return e.test(this);if(e.test instanceof Array)return e.test.some((e=>this.test(e)));throw new Error(\"Browser's test function is not valid\")}));return e&&(this.parsedResult.browser=e.describe(this.getUA())),this.parsedResult.browser}getBrowser(){return this.parsedResult.browser?this.parsedResult.browser:this.parseBrowser()}getBrowserName(e){return e?String(this.getBrowser().name).toLowerCase()||\"\":this.getBrowser().name||\"\"}getBrowserVersion(){return this.getBrowser().version}getOS(){return this.parsedResult.os?this.parsedResult.os:this.parseOS()}parseOS(){this.parsedResult.os={};const e=V.find(G,(e=>{if(\"function\"==typeof e.test)return e.test(this);if(e.test instanceof Array)return e.test.some((e=>this.test(e)));throw new Error(\"Browser's test function is not valid\")}));return e&&(this.parsedResult.os=e.describe(this.getUA())),this.parsedResult.os}getOSName(e){const{name:t}=this.getOS();return e?String(t).toLowerCase()||\"\":t||\"\"}getOSVersion(){return this.getOS().version}getPlatform(){return this.parsedResult.platform?this.parsedResult.platform:this.parsePlatform()}getPlatformType(e=!1){const{type:t}=this.getPlatform();return e?String(t).toLowerCase()||\"\":t||\"\"}parsePlatform(){this.parsedResult.platform={};const e=V.find(q,(e=>{if(\"function\"==typeof e.test)return e.test(this);if(e.test instanceof Array)return e.test.some((e=>this.test(e)));throw new Error(\"Browser's test function is not valid\")}));return e&&(this.parsedResult.platform=e.describe(this.getUA())),this.parsedResult.platform}getEngine(){return this.parsedResult.engine?this.parsedResult.engine:this.parseEngine()}getEngineName(e){return e?String(this.getEngine().name).toLowerCase()||\"\":this.getEngine().name||\"\"}parseEngine(){this.parsedResult.engine={};const e=V.find(Y,(e=>{if(\"function\"==typeof e.test)return e.test(this);if(e.test instanceof Array)return e.test.some((e=>this.test(e)));throw new Error(\"Browser's test function is not valid\")}));return e&&(this.parsedResult.engine=e.describe(this.getUA())),this.parsedResult.engine}parse(){return this.parseBrowser(),this.parseOS(),this.parsePlatform(),this.parseEngine(),this}getResult(){return V.assign({},this.parsedResult)}satisfies(e){const t={};let n=0;const r={};let i=0;if(Object.keys(e).forEach((o=>{const a=e[o];\"string\"==typeof a?(r[o]=a,i+=1):\"object\"==typeof a&&(t[o]=a,n+=1)})),n>0){const e=Object.keys(t),n=V.find(e,(e=>this.isOS(e)));if(n){const e=this.satisfies(t[n]);if(void 0!==e)return e}const r=V.find(e,(e=>this.isPlatform(e)));if(r){const e=this.satisfies(t[r]);if(void 0!==e)return e}}if(i>0){const e=Object.keys(r),t=V.find(e,(e=>this.isBrowser(e,!0)));if(void 0!==t)return this.compareVersion(r[t])}}isBrowser(e,t=!1){const n=this.getBrowserName().toLowerCase();let r=e.toLowerCase();const i=V.getBrowserTypeByAlias(r);return t&&i&&(r=i.toLowerCase()),r===n}compareVersion(e){let t=[0],n=e,r=!1;const i=this.getBrowserVersion();if(\"string\"==typeof i)return\">\"===e[0]||\"<\"===e[0]?(n=e.substr(1),\"=\"===e[1]?(r=!0,n=e.substr(2)):t=[],\">\"===e[0]?t.push(1):t.push(-1)):\"=\"===e[0]?n=e.substr(1):\"~\"===e[0]&&(r=!0,n=e.substr(1)),t.indexOf(V.compareVersions(i,n,r))>-1}isOS(e){return this.getOSName(!0)===String(e).toLowerCase()}isPlatform(e){return this.getPlatformType(!0)===String(e).toLowerCase()}isEngine(e){return this.getEngineName(!0)===String(e).toLowerCase()}is(e,t=!1){return this.isBrowser(e,t)||this.isOS(e)||this.isPlatform(e)}some(e=[]){return e.some((e=>this.is(e)))}}\n/*!\n * Bowser - a browser detector\n * https://github.com/lancedikson/bowser\n * MIT License | (c) Dustin Diaz 2012-2015\n * MIT License | (c) Denis Demchenko 2015-2019\n */class W{static getParser(e,t=!1){if(\"string\"!=typeof e)throw new Error(\"UserAgent should be a string\");return new z(e,t)}static parse(e){return new z(e).getResult()}static get BROWSER_MAP(){return R}static get ENGINE_MAP(){return U}static get OS_MAP(){return F}static get PLATFORMS_MAP(){return B}}function H(){return Date.now()+Math.random().toString()}function Q(){throw new Error(\"Method must be implemented in subclass\")}function K(e,t){return null!=t&&t.proxyUrl?t.proxyUrl+(\"/\"===t.proxyUrl.slice(-1)?\"\":\"/\")+e.substring(8):e}function X(e){return null!=e&&e.callObjectBundleUrlOverride?e.callObjectBundleUrlOverride:K(\"https://c.daily.co/call-machine/versioned/\".concat(\"0.72.2\",\"/static/call-machine-object-bundle.js\"),e)}function Z(e){try{new URL(e)}catch(e){return!1}return!0}const ee=Object.prototype.toString;function te(e){switch(ee.call(e)){case\"[object Error]\":case\"[object Exception]\":case\"[object DOMException]\":return!0;default:return ue(e,Error)}}function ne(e,t){return ee.call(e)===`[object ${t}]`}function re(e){return ne(e,\"ErrorEvent\")}function ie(e){return ne(e,\"DOMError\")}function oe(e){return ne(e,\"String\")}function ae(e){return null===e||\"object\"!=typeof e&&\"function\"!=typeof e}function se(e){return ne(e,\"Object\")}function ce(e){return\"undefined\"!=typeof Event&&ue(e,Event)}function le(e){return Boolean(e&&e.then&&\"function\"==typeof e.then)}function ue(e,t){try{return e instanceof t}catch(e){return!1}}function de(e,t=0){return\"string\"!=typeof e||0===t||e.length<=t?e:`${e.slice(0,t)}...`}function he(e,t){if(!Array.isArray(e))return\"\";const n=[];for(let t=0;tpe(e,t,n)))}function ge(e,t,n=250,r,i,o,a){if(!(o.exception&&o.exception.values&&a&&ue(a.originalException,Error)))return;const s=o.exception.values.length>0?o.exception.values[o.exception.values.length-1]:void 0;var c,l;s&&(o.exception.values=(c=ve(e,t,i,a.originalException,r,o.exception.values,s,0),l=n,c.map((e=>(e.value&&(e.value=de(e.value,l)),e)))))}function ve(e,t,n,r,i,o,a,s){if(o.length>=n+1)return o;let c=[...o];if(ue(r[i],Error)){me(a,s);const o=e(t,r[i]),l=c.length;ye(o,i,l,s),c=ve(e,t,n,r[i],i,[o,...c],o,l)}return Array.isArray(r.errors)&&r.errors.forEach(((r,o)=>{if(ue(r,Error)){me(a,s);const l=e(t,r),u=c.length;ye(l,`errors[${o}]`,u,s),c=ve(e,t,n,r,i,[l,...c],l,u)}})),c}function me(e,t){e.mechanism=e.mechanism||{type:\"generic\",handled:!0},e.mechanism={...e.mechanism,is_exception_group:!0,exception_id:t}}function ye(e,t,n,r){e.mechanism=e.mechanism||{type:\"generic\",handled:!0},e.mechanism={...e.mechanism,type:\"chained\",source:t,exception_id:n,parent_id:r}}function _e(e){return e&&e.Math==Math?e:void 0}const be=\"object\"==typeof globalThis&&_e(globalThis)||\"object\"==typeof window&&_e(window)||\"object\"==typeof self&&_e(self)||\"object\"==typeof global&&_e(global)||function(){return this}()||{};function we(){return be}function Se(e,t,n){const r=n||be,i=r.__SENTRY__=r.__SENTRY__||{};return i[e]||(i[e]=t())}const ke=we(),Ee=80;function Ce(e,t={}){try{let n=e;const r=5,i=[];let o=0,a=0;const s=\" > \",c=s.length;let l;const u=Array.isArray(t)?t:t.keyAttrs,d=!Array.isArray(t)&&t.maxStringLength||Ee;for(;n&&o++1&&a+i.length*c+l.length>=d));)i.push(l),a+=l.length,n=n.parentNode;return i.reverse().join(s)}catch(e){return\"\"}}function Me(e,t){const n=e,r=[];let i,o,a,s,c;if(!n||!n.tagName)return\"\";r.push(n.tagName.toLowerCase());const l=t&&t.length?t.filter((e=>n.getAttribute(e))).map((e=>[e,n.getAttribute(e)])):null;if(l&&l.length)l.forEach((e=>{r.push(`[${e[0]}=\"${e[1]}\"]`)}));else if(n.id&&r.push(`#${n.id}`),i=n.className,i&&oe(i))for(o=i.split(/\\s+/),c=0;c{const r=t[e]&&t[e].__sentry_original__;e in t&&r&&(n[e]=t[e],t[e]=r)}));try{return e()}finally{Object.keys(n).forEach((e=>{t[e]=n[e]}))}}function Pe(){let e=!1;const t={enable:()=>{e=!0},disable:()=>{e=!1}};return\"undefined\"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__?Te.forEach((n=>{t[n]=(...t)=>{e&&Oe((()=>{be.console[n](`Sentry Logger [${n}]:`,...t)}))}})):Te.forEach((e=>{t[e]=()=>{}})),t}let Ae;Ae=\"undefined\"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__?Se(\"logger\",Pe):Pe();const De=/^(?:(\\w+):)\\/\\/(?:(\\w+)(?::(\\w+)?)?@)([\\w.-]+)(?::(\\d+))?\\/(.+)/;function je(e,t=!1){const{host:n,path:r,pass:i,port:o,projectId:a,protocol:s,publicKey:c}=e;return`${s}://${c}${t&&i?`:${i}`:\"\"}@${n}${o?`:${o}`:\"\"}/${r?`${r}/`:r}${a}`}function xe(e){return{protocol:e.protocol,publicKey:e.publicKey||\"\",pass:e.pass||\"\",host:e.host,port:e.port||\"\",path:e.path||\"\",projectId:e.projectId}}function Le(e){const t=\"string\"==typeof e?function(e){const t=De.exec(e);if(!t)return void console.error(`Invalid Sentry Dsn: ${e}`);const[n,r,i=\"\",o,a=\"\",s]=t.slice(1);let c=\"\",l=s;const u=l.split(\"/\");if(u.length>1&&(c=u.slice(0,-1).join(\"/\"),l=u.pop()),l){const e=l.match(/^\\d+/);e&&(l=e[0])}return xe({host:o,pass:i,path:c,projectId:l,port:a,protocol:n,publicKey:r})}(e):xe(e);if(t&&function(e){if(\"undefined\"!=typeof __SENTRY_DEBUG__&&!__SENTRY_DEBUG__)return!0;const{port:t,projectId:n,protocol:r}=e;return!([\"protocol\",\"publicKey\",\"host\",\"projectId\"].find((t=>!e[t]&&(Ae.error(`Invalid Sentry Dsn: ${t} missing`),!0)))||(n.match(/^\\d+$/)?function(e){return\"http\"===e||\"https\"===e}(r)?t&&isNaN(parseInt(t,10))&&(Ae.error(`Invalid Sentry Dsn: Invalid port ${t}`),1):(Ae.error(`Invalid Sentry Dsn: Invalid protocol ${r}`),1):(Ae.error(`Invalid Sentry Dsn: Invalid projectId ${n}`),1)))}(t))return t}class Ie extends Error{constructor(e,t=\"warn\"){super(e),this.message=e,this.name=new.target.prototype.constructor.name,Object.setPrototypeOf(this,new.target.prototype),this.logLevel=t}}function Ne(e,t,n){if(!(t in e))return;const r=e[t],i=n(r);if(\"function\"==typeof i)try{Be(i,r)}catch(e){}e[t]=i}function Re(e,t,n){Object.defineProperty(e,t,{value:n,writable:!0,configurable:!0})}function Be(e,t){const n=t.prototype||{};e.prototype=t.prototype=n,Re(e,\"__sentry_original__\",t)}function Fe(e){return e.__sentry_original__}function Ue(e){if(te(e))return{message:e.message,name:e.name,stack:e.stack,...Je(e)};if(ce(e)){const t={type:e.type,target:Ve(e.target),currentTarget:Ve(e.currentTarget),...Je(e)};return\"undefined\"!=typeof CustomEvent&&ue(e,CustomEvent)&&(t.detail=e.detail),t}return e}function Ve(e){try{return t=e,\"undefined\"!=typeof Element&&ue(t,Element)?Ce(e):Object.prototype.toString.call(e)}catch(e){return\"\"}var t}function Je(e){if(\"object\"==typeof e&&null!==e){const t={};for(const n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t}return{}}function $e(e){return Ge(e,new Map)}function Ge(e,t){if(se(e)){const n=t.get(e);if(void 0!==n)return n;const r={};t.set(e,r);for(const n of Object.keys(e))void 0!==e[n]&&(r[n]=Ge(e[n],t));return r}if(Array.isArray(e)){const n=t.get(e);if(void 0!==n)return n;const r=[];return t.set(e,r),e.forEach((e=>{r.push(Ge(e,t))})),r}return e}const qe=\"\";function Ye(e){try{return e&&\"function\"==typeof e&&e.name||qe}catch(e){return qe}}const ze=we();function We(e){return e&&/^function fetch\\(\\)\\s+\\{\\s+\\[native code\\]\\s+\\}$/.test(e.toString())}function He(){if(!function(){if(!(\"fetch\"in ze))return!1;try{return new Headers,new Request(\"http://www.example.com\"),new Response,!0}catch(e){return!1}}())return!1;if(We(ze.fetch))return!0;let e=!1;const t=ze.document;if(t&&\"function\"==typeof t.createElement)try{const n=t.createElement(\"iframe\");n.hidden=!0,t.head.appendChild(n),n.contentWindow&&n.contentWindow.fetch&&(e=We(n.contentWindow.fetch)),t.head.removeChild(n)}catch(e){(\"undefined\"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__)&&Ae.warn(\"Could not create sandbox iframe for pure fetch check, bailing to window.fetch: \",e)}return e}const Qe=we();const Ke=we(),Xe=\"__sentry_xhr_v2__\",Ze={},et={};function tt(e){if(!et[e])switch(et[e]=!0,e){case\"console\":!function(){if(!(\"console\"in Ke))return;Te.forEach((function(e){e in Ke.console&&Ne(Ke.console,e,(function(t){return function(...n){rt(\"console\",{args:n,level:e}),t&&t.apply(Ke.console,n)}}))}))}();break;case\"dom\":!function(){if(!(\"document\"in Ke))return;const e=rt.bind(null,\"dom\"),t=ut(e,!0);Ke.document.addEventListener(\"click\",t,!1),Ke.document.addEventListener(\"keypress\",t,!1),[\"EventTarget\",\"Node\"].forEach((t=>{const n=Ke[t]&&Ke[t].prototype;n&&n.hasOwnProperty&&n.hasOwnProperty(\"addEventListener\")&&(Ne(n,\"addEventListener\",(function(t){return function(n,r,i){if(\"click\"===n||\"keypress\"==n)try{const r=this,o=r.__sentry_instrumentation_handlers__=r.__sentry_instrumentation_handlers__||{},a=o[n]=o[n]||{refCount:0};if(!a.handler){const r=ut(e);a.handler=r,t.call(this,n,r,i)}a.refCount++}catch(e){}return t.call(this,n,r,i)}})),Ne(n,\"removeEventListener\",(function(e){return function(t,n,r){if(\"click\"===t||\"keypress\"==t)try{const n=this,i=n.__sentry_instrumentation_handlers__||{},o=i[t];o&&(o.refCount--,o.refCount<=0&&(e.call(this,t,o.handler,r),o.handler=void 0,delete i[t]),0===Object.keys(i).length&&delete n.__sentry_instrumentation_handlers__)}catch(e){}return e.call(this,t,n,r)}})))}))}();break;case\"xhr\":!function(){if(!(\"XMLHttpRequest\"in Ke))return;const e=XMLHttpRequest.prototype;Ne(e,\"open\",(function(e){return function(...t){const n=t[1],r=this[Xe]={method:oe(t[0])?t[0].toUpperCase():t[0],url:t[1],request_headers:{}};oe(n)&&\"POST\"===r.method&&n.match(/sentry_key/)&&(this.__sentry_own_request__=!0);const i=()=>{const e=this[Xe];if(e&&4===this.readyState){try{e.status_code=this.status}catch(e){}rt(\"xhr\",{args:t,endTimestamp:Date.now(),startTimestamp:Date.now(),xhr:this})}};return\"onreadystatechange\"in this&&\"function\"==typeof this.onreadystatechange?Ne(this,\"onreadystatechange\",(function(e){return function(...t){return i(),e.apply(this,t)}})):this.addEventListener(\"readystatechange\",i),Ne(this,\"setRequestHeader\",(function(e){return function(...t){const[n,r]=t,i=this[Xe];return i&&(i.request_headers[n.toLowerCase()]=r),e.apply(this,t)}})),e.apply(this,t)}})),Ne(e,\"send\",(function(e){return function(...t){const n=this[Xe];return n&&void 0!==t[0]&&(n.body=t[0]),rt(\"xhr\",{args:t,startTimestamp:Date.now(),xhr:this}),e.apply(this,t)}}))}();break;case\"fetch\":!function(){if(!He())return;Ne(Ke,\"fetch\",(function(e){return function(...t){const{method:n,url:r}=function(e){if(0===e.length)return{method:\"GET\",url:\"\"};if(2===e.length){const[t,n]=e;return{url:ot(t),method:it(n,\"method\")?String(n.method).toUpperCase():\"GET\"}}const t=e[0];return{url:ot(t),method:it(t,\"method\")?String(t.method).toUpperCase():\"GET\"}}(t),i={args:t,fetchData:{method:n,url:r},startTimestamp:Date.now()};return rt(\"fetch\",{...i}),e.apply(Ke,t).then((e=>(rt(\"fetch\",{...i,endTimestamp:Date.now(),response:e}),e)),(e=>{throw rt(\"fetch\",{...i,endTimestamp:Date.now(),error:e}),e}))}}))}();break;case\"history\":!function(){if(!function(){const e=Qe.chrome,t=e&&e.app&&e.app.runtime,n=\"history\"in Qe&&!!Qe.history.pushState&&!!Qe.history.replaceState;return!t&&n}())return;const e=Ke.onpopstate;function t(e){return function(...t){const n=t.length>2?t[2]:void 0;if(n){const e=at,t=String(n);at=t,rt(\"history\",{from:e,to:t})}return e.apply(this,t)}}Ke.onpopstate=function(...t){const n=Ke.location.href,r=at;if(at=n,rt(\"history\",{from:r,to:n}),e)try{return e.apply(this,t)}catch(e){}},Ne(Ke.history,\"pushState\",t),Ne(Ke.history,\"replaceState\",t)}();break;case\"error\":dt=Ke.onerror,Ke.onerror=function(e,t,n,r,i){return rt(\"error\",{column:r,error:i,line:n,msg:e,url:t}),!(!dt||dt.__SENTRY_LOADER__)&&dt.apply(this,arguments)},Ke.onerror.__SENTRY_INSTRUMENTED__=!0;break;case\"unhandledrejection\":ht=Ke.onunhandledrejection,Ke.onunhandledrejection=function(e){return rt(\"unhandledrejection\",e),!(ht&&!ht.__SENTRY_LOADER__)||ht.apply(this,arguments)},Ke.onunhandledrejection.__SENTRY_INSTRUMENTED__=!0;break;default:return void((\"undefined\"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__)&&Ae.warn(\"unknown instrumentation type:\",e))}}function nt(e,t){Ze[e]=Ze[e]||[],Ze[e].push(t),tt(e)}function rt(e,t){if(e&&Ze[e])for(const n of Ze[e]||[])try{n(t)}catch(t){(\"undefined\"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__)&&Ae.error(`Error while triggering instrumentation handler.\\nType: ${e}\\nName: ${Ye(n)}\\nError:`,t)}}function it(e,t){return!!e&&\"object\"==typeof e&&!!e[t]}function ot(e){return\"string\"==typeof e?e:e?it(e,\"url\")?e.url:e.toString?e.toString():\"\":\"\"}let at;const st=1e3;let ct,lt;function ut(e,t=!1){return n=>{if(!n||lt===n)return;if(function(e){if(\"keypress\"!==e.type)return!1;try{const t=e.target;if(!t||!t.tagName)return!0;if(\"INPUT\"===t.tagName||\"TEXTAREA\"===t.tagName||t.isContentEditable)return!1}catch(e){}return!0}(n))return;const r=\"keypress\"===n.type?\"input\":n.type;(void 0===ct||function(e,t){if(!e)return!0;if(e.type!==t.type)return!0;try{if(e.target!==t.target)return!0}catch(e){}return!1}(lt,n))&&(e({event:n,name:r,global:t}),lt=n),clearTimeout(ct),ct=Ke.setTimeout((()=>{ct=void 0}),st)}}let dt=null;let ht=null;function pt(){const e=be,t=e.crypto||e.msCrypto;if(t&&t.randomUUID)return t.randomUUID().replace(/-/g,\"\");const n=t&&t.getRandomValues?()=>t.getRandomValues(new Uint8Array(1))[0]:()=>16*Math.random();return([1e7]+1e3+4e3+8e3+1e11).replace(/[018]/g,(e=>(e^(15&n())>>e/4).toString(16)))}function ft(e){return e.exception&&e.exception.values?e.exception.values[0]:void 0}function gt(e){const{message:t,event_id:n}=e;if(t)return t;const r=ft(e);return r?r.type&&r.value?`${r.type}: ${r.value}`:r.type||r.value||n||\"\":n||\"\"}function vt(e,t,n){const r=e.exception=e.exception||{},i=r.values=r.values||[],o=i[0]=i[0]||{};o.value||(o.value=t||\"\"),o.type||(o.type=n||\"Error\")}function mt(e,t){const n=ft(e);if(!n)return;const r=n.mechanism;if(n.mechanism={type:\"generic\",handled:!0,...r,...t},t&&\"data\"in t){const e={...r&&r.data,...t.data};n.mechanism.data=e}}function yt(e){if(e&&e.__sentry_captured__)return!0;try{Re(e,\"__sentry_captured__\",!0)}catch(e){}return!1}function _t(e,t=100,n=1/0){try{return wt(\"\",e,t,n)}catch(e){return{ERROR:`**non-serializable** (${e})`}}}function bt(e,t=3,n=102400){const r=_t(e,t);return i=r,function(e){return~-encodeURI(e).split(/%..|./).length}(JSON.stringify(i))>n?bt(e,t-1,n):r;var i}function wt(e,t,n=1/0,r=1/0,i=function(){const e=\"function\"==typeof WeakSet,t=e?new WeakSet:[];return[function(n){if(e)return!!t.has(n)||(t.add(n),!1);for(let e=0;e=r){d[e]=\"[MaxProperties ~]\";break}const t=p[e];d[e]=wt(e,t,l-1,r,i),h++}return a(t),d}var St;function kt(e){return new Ct((t=>{t(e)}))}function Et(e){return new Ct(((t,n)=>{n(e)}))}!function(e){e[e.PENDING=0]=\"PENDING\";e[e.RESOLVED=1]=\"RESOLVED\";e[e.REJECTED=2]=\"REJECTED\"}(St||(St={}));class Ct{__init(){this._state=St.PENDING}__init2(){this._handlers=[]}constructor(e){Ct.prototype.__init.call(this),Ct.prototype.__init2.call(this),Ct.prototype.__init3.call(this),Ct.prototype.__init4.call(this),Ct.prototype.__init5.call(this),Ct.prototype.__init6.call(this);try{e(this._resolve,this._reject)}catch(e){this._reject(e)}}then(e,t){return new Ct(((n,r)=>{this._handlers.push([!1,t=>{if(e)try{n(e(t))}catch(e){r(e)}else n(t)},e=>{if(t)try{n(t(e))}catch(e){r(e)}else r(e)}]),this._executeHandlers()}))}catch(e){return this.then((e=>e),e)}finally(e){return new Ct(((t,n)=>{let r,i;return this.then((t=>{i=!1,r=t,e&&e()}),(t=>{i=!0,r=t,e&&e()})).then((()=>{i?n(r):t(r)}))}))}__init3(){this._resolve=e=>{this._setResult(St.RESOLVED,e)}}__init4(){this._reject=e=>{this._setResult(St.REJECTED,e)}}__init5(){this._setResult=(e,t)=>{this._state===St.PENDING&&(le(t)?t.then(this._resolve,this._reject):(this._state=e,this._value=t,this._executeHandlers()))}}__init6(){this._executeHandlers=()=>{if(this._state===St.PENDING)return;const e=this._handlers.slice();this._handlers=[],e.forEach((e=>{e[0]||(this._state===St.RESOLVED&&e[1](this._value),this._state===St.REJECTED&&e[2](this._value),e[0]=!0)}))}}}function Mt(e){const t=[];function n(e){return t.splice(t.indexOf(e),1)[0]}return{$:t,add:function(r){if(!(void 0===e||t.lengthn(i))).then(null,(()=>n(i).then(null,(()=>{})))),i},drain:function(e){return new Ct(((n,r)=>{let i=t.length;if(!i)return n(!0);const o=setTimeout((()=>{e&&e>0&&n(!1)}),e);t.forEach((e=>{kt(e).then((()=>{--i||(clearTimeout(o),n(!0))}),r)}))}))}}}function Tt(e){if(!e)return{};const t=e.match(/^(([^:/?#]+):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);if(!t)return{};const n=t[6]||\"\",r=t[8]||\"\";return{host:t[4],path:t[5],protocol:t[2],search:n,hash:r,relative:t[5]+n+r}}const Ot=[\"fatal\",\"error\",\"warning\",\"log\",\"info\",\"debug\"];const Pt=we(),At={nowSeconds:()=>Date.now()/1e3};const Dt=\"undefined\"!=typeof __SENTRY_BROWSER_BUNDLE__&&__SENTRY_BROWSER_BUNDLE__||\"[object process]\"!==Object.prototype.toString.call(\"undefined\"!=typeof process?process:0)?function(){const{performance:e}=Pt;if(!e||!e.now)return;return{now:()=>e.now(),timeOrigin:Date.now()-e.now()}}():function(){try{return(e=module,t=\"perf_hooks\",e.require(t)).performance}catch(e){return}var e,t}(),jt=void 0===Dt?At:{nowSeconds:()=>(Dt.timeOrigin+Dt.now())/1e3},xt=At.nowSeconds.bind(At),Lt=jt.nowSeconds.bind(jt);function It(e,t=[]){return[e,t]}function Nt(e,t){const[n,r]=e;return[n,[...r,t]]}function Rt(e,t){const n=e[1];for(const e of n){if(t(e,e[0].type))return!0}return!1}function Bt(e,t){return(t||new TextEncoder).encode(e)}function Ft(e,t){const[n,r]=e;let i=JSON.stringify(n);function o(e){\"string\"==typeof i?i=\"string\"==typeof e?i+e:[Bt(i,t),e]:i.push(\"string\"==typeof e?Bt(e,t):e)}for(const e of r){const[t,n]=e;if(o(`\\n${JSON.stringify(t)}\\n`),\"string\"==typeof n||n instanceof Uint8Array)o(n);else{let e;try{e=JSON.stringify(n)}catch(t){e=JSON.stringify(_t(n))}o(e)}}return\"string\"==typeof i?i:function(e){const t=e.reduce(((e,t)=>e+t.length),0),n=new Uint8Array(t);let r=0;for(const t of e)n.set(t,r),r+=t.length;return n}(i)}function Ut(e,t){const n=\"string\"==typeof e.data?Bt(e.data,t):e.data;return[$e({type:\"attachment\",length:n.length,filename:e.filename,content_type:e.contentType,attachment_type:e.attachmentType}),n]}(()=>{const{performance:e}=Pt;if(!e||!e.now)return;const t=36e5,n=e.now(),r=Date.now(),i=e.timeOrigin?Math.abs(e.timeOrigin+n-r):t,o=ifunction(e){return $e({sid:`${e.sid}`,init:e.init,started:new Date(1e3*e.started).toISOString(),timestamp:new Date(1e3*e.timestamp).toISOString(),status:e.status,errors:e.errors,did:\"number\"==typeof e.did||\"string\"==typeof e.did?`${e.did}`:void 0,duration:e.duration,attrs:{release:e.release,environment:e.environment,ip_address:e.ipAddress,user_agent:e.userAgent}})}(n)};return e&&Wt(n,e),n}function Wt(e,t={}){if(t.user&&(!e.ipAddress&&t.user.ip_address&&(e.ipAddress=t.user.ip_address),e.did||t.did||(e.did=t.user.id||t.user.email||t.user.username)),e.timestamp=t.timestamp||Lt(),t.ignoreDuration&&(e.ignoreDuration=t.ignoreDuration),t.sid&&(e.sid=32===t.sid.length?t.sid:pt()),void 0!==t.init&&(e.init=t.init),!e.did&&t.did&&(e.did=`${t.did}`),\"number\"==typeof t.started&&(e.started=t.started),e.ignoreDuration)e.duration=void 0;else if(\"number\"==typeof t.duration)e.duration=t.duration;else{const t=e.timestamp-e.started;e.duration=t>=0?t:0}t.release&&(e.release=t.release),t.environment&&(e.environment=t.environment),!e.ipAddress&&t.ipAddress&&(e.ipAddress=t.ipAddress),!e.userAgent&&t.userAgent&&(e.userAgent=t.userAgent),\"number\"==typeof t.errors&&(e.errors=t.errors),t.status&&(e.status=t.status)}class Ht{constructor(){this._notifyingListeners=!1,this._scopeListeners=[],this._eventProcessors=[],this._breadcrumbs=[],this._attachments=[],this._user={},this._tags={},this._extra={},this._contexts={},this._sdkProcessingMetadata={},this._propagationContext=Xt()}static clone(e){const t=new Ht;return e&&(t._breadcrumbs=[...e._breadcrumbs],t._tags={...e._tags},t._extra={...e._extra},t._contexts={...e._contexts},t._user=e._user,t._level=e._level,t._span=e._span,t._session=e._session,t._transactionName=e._transactionName,t._fingerprint=e._fingerprint,t._eventProcessors=[...e._eventProcessors],t._requestSession=e._requestSession,t._attachments=[...e._attachments],t._sdkProcessingMetadata={...e._sdkProcessingMetadata},t._propagationContext={...e._propagationContext}),t}addScopeListener(e){this._scopeListeners.push(e)}addEventProcessor(e){return this._eventProcessors.push(e),this}setUser(e){return this._user=e||{},this._session&&Wt(this._session,{user:e}),this._notifyScopeListeners(),this}getUser(){return this._user}getRequestSession(){return this._requestSession}setRequestSession(e){return this._requestSession=e,this}setTags(e){return this._tags={...this._tags,...e},this._notifyScopeListeners(),this}setTag(e,t){return this._tags={...this._tags,[e]:t},this._notifyScopeListeners(),this}setExtras(e){return this._extra={...this._extra,...e},this._notifyScopeListeners(),this}setExtra(e,t){return this._extra={...this._extra,[e]:t},this._notifyScopeListeners(),this}setFingerprint(e){return this._fingerprint=e,this._notifyScopeListeners(),this}setLevel(e){return this._level=e,this._notifyScopeListeners(),this}setTransactionName(e){return this._transactionName=e,this._notifyScopeListeners(),this}setContext(e,t){return null===t?delete this._contexts[e]:this._contexts[e]=t,this._notifyScopeListeners(),this}setSpan(e){return this._span=e,this._notifyScopeListeners(),this}getSpan(){return this._span}getTransaction(){const e=this.getSpan();return e&&e.transaction}setSession(e){return e?this._session=e:delete this._session,this._notifyScopeListeners(),this}getSession(){return this._session}update(e){if(!e)return this;if(\"function\"==typeof e){const t=e(this);return t instanceof Ht?t:this}return e instanceof Ht?(this._tags={...this._tags,...e._tags},this._extra={...this._extra,...e._extra},this._contexts={...this._contexts,...e._contexts},e._user&&Object.keys(e._user).length&&(this._user=e._user),e._level&&(this._level=e._level),e._fingerprint&&(this._fingerprint=e._fingerprint),e._requestSession&&(this._requestSession=e._requestSession),e._propagationContext&&(this._propagationContext=e._propagationContext)):se(e)&&(this._tags={...this._tags,...e.tags},this._extra={...this._extra,...e.extra},this._contexts={...this._contexts,...e.contexts},e.user&&(this._user=e.user),e.level&&(this._level=e.level),e.fingerprint&&(this._fingerprint=e.fingerprint),e.requestSession&&(this._requestSession=e.requestSession),e.propagationContext&&(this._propagationContext=e.propagationContext)),this}clear(){return this._breadcrumbs=[],this._tags={},this._extra={},this._user={},this._contexts={},this._level=void 0,this._transactionName=void 0,this._fingerprint=void 0,this._requestSession=void 0,this._span=void 0,this._session=void 0,this._notifyScopeListeners(),this._attachments=[],this._propagationContext=Xt(),this}addBreadcrumb(e,t){const n=\"number\"==typeof t?t:100;if(n<=0)return this;const r={timestamp:xt(),...e};return this._breadcrumbs=[...this._breadcrumbs,r].slice(-n),this._notifyScopeListeners(),this}getLastBreadcrumb(){return this._breadcrumbs[this._breadcrumbs.length-1]}clearBreadcrumbs(){return this._breadcrumbs=[],this._notifyScopeListeners(),this}addAttachment(e){return this._attachments.push(e),this}getAttachments(){return this._attachments}clearAttachments(){return this._attachments=[],this}applyToEvent(e,t={}){if(this._extra&&Object.keys(this._extra).length&&(e.extra={...this._extra,...e.extra}),this._tags&&Object.keys(this._tags).length&&(e.tags={...this._tags,...e.tags}),this._user&&Object.keys(this._user).length&&(e.user={...this._user,...e.user}),this._contexts&&Object.keys(this._contexts).length&&(e.contexts={...this._contexts,...e.contexts}),this._level&&(e.level=this._level),this._transactionName&&(e.transaction=this._transactionName),this._span){e.contexts={trace:this._span.getTraceContext(),...e.contexts};const t=this._span.transaction;if(t){e.sdkProcessingMetadata={dynamicSamplingContext:t.getDynamicSamplingContext(),...e.sdkProcessingMetadata};const n=t.name;n&&(e.tags={transaction:n,...e.tags})}}return this._applyFingerprint(e),e.breadcrumbs=[...e.breadcrumbs||[],...this._breadcrumbs],e.breadcrumbs=e.breadcrumbs.length>0?e.breadcrumbs:void 0,e.sdkProcessingMetadata={...e.sdkProcessingMetadata,...this._sdkProcessingMetadata,propagationContext:this._propagationContext},this._notifyEventProcessors([...Qt(),...this._eventProcessors],e,t)}setSDKProcessingMetadata(e){return this._sdkProcessingMetadata={...this._sdkProcessingMetadata,...e},this}setPropagationContext(e){return this._propagationContext=e,this}getPropagationContext(){return this._propagationContext}_notifyEventProcessors(e,t,n,r=0){return new Ct(((i,o)=>{const a=e[r];if(null===t||\"function\"!=typeof a)i(t);else{const s=a({...t},n);(\"undefined\"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__)&&a.id&&null===s&&Ae.log(`Event processor \"${a.id}\" dropped event`),le(s)?s.then((t=>this._notifyEventProcessors(e,t,n,r+1).then(i))).then(null,o):this._notifyEventProcessors(e,s,n,r+1).then(i).then(null,o)}}))}_notifyScopeListeners(){this._notifyingListeners||(this._notifyingListeners=!0,this._scopeListeners.forEach((e=>{e(this)})),this._notifyingListeners=!1)}_applyFingerprint(e){var t;e.fingerprint=e.fingerprint?(t=e.fingerprint,Array.isArray(t)?t:[t]):[],this._fingerprint&&(e.fingerprint=e.fingerprint.concat(this._fingerprint)),e.fingerprint&&!e.fingerprint.length&&delete e.fingerprint}}function Qt(){return Se(\"globalEventProcessors\",(()=>[]))}function Kt(e){Qt().push(e)}function Xt(){return{traceId:pt(),spanId:pt().substring(16),sampled:!1}}const Zt=4,en=100;class tn{constructor(e,t=new Ht,n=Zt){this._version=n,this._stack=[{scope:t}],e&&this.bindClient(e)}isOlderThan(e){return this._version{i.captureException(e,{originalException:e,syntheticException:r,...t,event_id:n},o)})),n}captureMessage(e,t,n){const r=this._lastEventId=n&&n.event_id?n.event_id:pt(),i=new Error(e);return this._withClient(((o,a)=>{o.captureMessage(e,t,{originalException:e,syntheticException:i,...n,event_id:r},a)})),r}captureEvent(e,t){const n=t&&t.event_id?t.event_id:pt();return e.type||(this._lastEventId=n),this._withClient(((r,i)=>{r.captureEvent(e,{...t,event_id:n},i)})),n}lastEventId(){return this._lastEventId}addBreadcrumb(e,t){const{scope:n,client:r}=this.getStackTop();if(!r)return;const{beforeBreadcrumb:i=null,maxBreadcrumbs:o=en}=r.getOptions&&r.getOptions()||{};if(o<=0)return;const a={timestamp:xt(),...e},s=i?Oe((()=>i(a,t))):a;null!==s&&(r.emit&&r.emit(\"beforeAddBreadcrumb\",s,t),n.addBreadcrumb(s,o))}setUser(e){this.getScope().setUser(e)}setTags(e){this.getScope().setTags(e)}setExtras(e){this.getScope().setExtras(e)}setTag(e,t){this.getScope().setTag(e,t)}setExtra(e,t){this.getScope().setExtra(e,t)}setContext(e,t){this.getScope().setContext(e,t)}configureScope(e){const{scope:t,client:n}=this.getStackTop();n&&e(t)}run(e){const t=rn(this);try{e(this)}finally{rn(t)}}getIntegration(e){const t=this.getClient();if(!t)return null;try{return t.getIntegration(e)}catch(t){return(\"undefined\"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__)&&Ae.warn(`Cannot retrieve integration ${e.id} from the current Hub`),null}}startTransaction(e,t){const n=this._callExtensionMethod(\"startTransaction\",e,t);return\"undefined\"!=typeof __SENTRY_DEBUG__&&!__SENTRY_DEBUG__||n||console.warn(\"Tracing extension 'startTransaction' has not been added. Call 'addTracingExtensions' before calling 'init':\\nSentry.addTracingExtensions();\\nSentry.init({...});\\n\"),n}traceHeaders(){return this._callExtensionMethod(\"traceHeaders\")}captureSession(e=!1){if(e)return this.endSession();this._sendSessionUpdate()}endSession(){const e=this.getStackTop().scope,t=e.getSession();t&&function(e,t){let n={};t?n={status:t}:\"ok\"===e.status&&(n={status:\"exited\"}),Wt(e,n)}(t),this._sendSessionUpdate(),e.setSession()}startSession(e){const{scope:t,client:n}=this.getStackTop(),{release:r,environment:i=Yt}=n&&n.getOptions()||{},{userAgent:o}=be.navigator||{},a=zt({release:r,environment:i,user:t.getUser(),...o&&{userAgent:o},...e}),s=t.getSession&&t.getSession();return s&&\"ok\"===s.status&&Wt(s,{status:\"exited\"}),this.endSession(),t.setSession(a),a}shouldSendDefaultPii(){const e=this.getClient(),t=e&&e.getOptions();return Boolean(t&&t.sendDefaultPii)}_sendSessionUpdate(){const{scope:e,client:t}=this.getStackTop(),n=e.getSession();n&&t&&t.captureSession&&t.captureSession(n)}_withClient(e){const{scope:t,client:n}=this.getStackTop();n&&e(n,t)}_callExtensionMethod(e,...t){const n=nn().__SENTRY__;if(n&&n.extensions&&\"function\"==typeof n.extensions[e])return n.extensions[e].apply(this,t);(\"undefined\"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__)&&Ae.warn(`Extension method ${e} couldn't be found, doing nothing.`)}}function nn(){return be.__SENTRY__=be.__SENTRY__||{extensions:{},hub:void 0},be}function rn(e){const t=nn(),n=an(t);return sn(t,e),n}function on(){const e=nn();if(e.__SENTRY__&&e.__SENTRY__.acs){const t=e.__SENTRY__.acs.getCurrentHub();if(t)return t}return function(e=nn()){t=e,t&&t.__SENTRY__&&t.__SENTRY__.hub&&!an(e).isOlderThan(Zt)||sn(e,new tn);var t;return an(e)}(e)}function an(e){return Se(\"hub\",(()=>new tn),e)}function sn(e,t){if(!e)return!1;return(e.__SENTRY__=e.__SENTRY__||{}).hub=t,!0}const cn=\"7\";function ln(e,t){return n={sentry_key:e.publicKey,sentry_version:cn,...t&&{sentry_client:`${t.name}/${t.version}`}},Object.keys(n).map((e=>`${encodeURIComponent(e)}=${encodeURIComponent(n[e])}`)).join(\"&\");var n}function un(e,t,n,r){const i=$t(n),o=e.type&&\"replay_event\"!==e.type?e.type:\"event\";!function(e,t){t&&(e.sdk=e.sdk||{},e.sdk.name=e.sdk.name||t.name,e.sdk.version=e.sdk.version||t.version,e.sdk.integrations=[...e.sdk.integrations||[],...t.integrations||[]],e.sdk.packages=[...e.sdk.packages||[],...t.packages||[]])}(e,n&&n.sdk);const a=function(e,t,n,r){const i=e.sdkProcessingMetadata&&e.sdkProcessingMetadata.dynamicSamplingContext;return{event_id:e.event_id,sent_at:(new Date).toISOString(),...t&&{sdk:t},...!!n&&{dsn:je(r)},...i&&{trace:$e({...i})}}}(e,i,r,t);delete e.sdkProcessingMetadata;return It(a,[[{type:o},e]])}const dn=[];function hn(e,t){t[e.name]=e,-1===dn.indexOf(e.name)&&(e.setupOnce(Kt,on),dn.push(e.name),(\"undefined\"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__)&&Ae.log(`Integration installed: ${e.name}`))}function pn(e,t,n,r){const{normalizeDepth:i=3,normalizeMaxBreadth:o=1e3}=e,a={...t,event_id:t.event_id||n.event_id||pt(),timestamp:t.timestamp||xt()},s=n.integrations||e.integrations.map((e=>e.name));!function(e,t){const{environment:n,release:r,dist:i,maxValueLength:o=250}=t;\"environment\"in e||(e.environment=\"environment\"in t?n:Yt);void 0===e.release&&void 0!==r&&(e.release=r);void 0===e.dist&&void 0!==i&&(e.dist=i);e.message&&(e.message=de(e.message,o));const a=e.exception&&e.exception.values&&e.exception.values[0];a&&a.value&&(a.value=de(a.value,o));const s=e.request;s&&s.url&&(s.url=de(s.url,o))}(a,e),function(e,t){t.length>0&&(e.sdk=e.sdk||{},e.sdk.integrations=[...e.sdk.integrations||[],...t])}(a,s),void 0===t.type&&function(e,t){const n=be._sentryDebugIds;if(!n)return;let r;const i=fn.get(t);i?r=i:(r=new Map,fn.set(t,r));const o=Object.keys(n).reduce(((e,i)=>{let o;const a=r.get(i);a?o=a:(o=t(i),r.set(i,o));for(let t=o.length-1;t>=0;t--){const r=o[t];if(r.filename){e[r.filename]=n[i];break}}return e}),{});try{e.exception.values.forEach((e=>{e.stacktrace.frames.forEach((e=>{e.filename&&(e.debug_id=o[e.filename])}))}))}catch(e){}}(a,e.stackParser);let c=r;n.captureContext&&(c=Ht.clone(c).update(n.captureContext));let l=kt(a);if(c){if(c.getAttachments){const e=[...n.attachments||[],...c.getAttachments()];e.length&&(n.attachments=e)}l=c.applyToEvent(a,n)}return l.then((e=>(e&&function(e){const t={};try{e.exception.values.forEach((e=>{e.stacktrace.frames.forEach((e=>{e.debug_id&&(e.abs_path?t[e.abs_path]=e.debug_id:e.filename&&(t[e.filename]=e.debug_id),delete e.debug_id)}))}))}catch(e){}if(0===Object.keys(t).length)return;e.debug_meta=e.debug_meta||{},e.debug_meta.images=e.debug_meta.images||[];const n=e.debug_meta.images;Object.keys(t).forEach((e=>{n.push({type:\"sourcemap\",code_file:e,debug_id:t[e]})}))}(e),\"number\"==typeof i&&i>0?function(e,t,n){if(!e)return null;const r={...e,...e.breadcrumbs&&{breadcrumbs:e.breadcrumbs.map((e=>({...e,...e.data&&{data:_t(e.data,t,n)}})))},...e.user&&{user:_t(e.user,t,n)},...e.contexts&&{contexts:_t(e.contexts,t,n)},...e.extra&&{extra:_t(e.extra,t,n)}};e.contexts&&e.contexts.trace&&r.contexts&&(r.contexts.trace=e.contexts.trace,e.contexts.trace.data&&(r.contexts.trace.data=_t(e.contexts.trace.data,t,n)));e.spans&&(r.spans=e.spans.map((e=>(e.data&&(e.data=_t(e.data,t,n)),e))));return r}(e,i,o):e)))}const fn=new WeakMap;const gn=\"Not capturing exception because it's already been captured.\";class vn{__init(){this._integrations={}}__init2(){this._integrationsInitialized=!1}__init3(){this._numProcessing=0}__init4(){this._outcomes={}}__init5(){this._hooks={}}constructor(e){if(vn.prototype.__init.call(this),vn.prototype.__init2.call(this),vn.prototype.__init3.call(this),vn.prototype.__init4.call(this),vn.prototype.__init5.call(this),this._options=e,e.dsn?this._dsn=Le(e.dsn):(\"undefined\"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__)&&Ae.warn(\"No DSN provided, client will not do anything.\"),this._dsn){const t=function(e,t={}){const n=\"string\"==typeof t?t:t.tunnel,r=\"string\"!=typeof t&&t._metadata?t._metadata.sdk:void 0;return n||`${function(e){return`${function(e){const t=e.protocol?`${e.protocol}:`:\"\",n=e.port?`:${e.port}`:\"\";return`${t}//${e.host}${n}${e.path?`/${e.path}`:\"\"}/api/`}(e)}${e.projectId}/envelope/`}(e)}?${ln(e,r)}`}(this._dsn,e);this._transport=e.transport({recordDroppedEvent:this.recordDroppedEvent.bind(this),...e.transportOptions,url:t})}}captureException(e,t,n){if(yt(e))return void((\"undefined\"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__)&&Ae.log(gn));let r=t&&t.event_id;return this._process(this.eventFromException(e,t).then((e=>this._captureEvent(e,t,n))).then((e=>{r=e}))),r}captureMessage(e,t,n,r){let i=n&&n.event_id;const o=ae(e)?this.eventFromMessage(String(e),t,n):this.eventFromException(e,n);return this._process(o.then((e=>this._captureEvent(e,n,r))).then((e=>{i=e}))),i}captureEvent(e,t,n){if(t&&t.originalException&&yt(t.originalException))return void((\"undefined\"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__)&&Ae.log(gn));let r=t&&t.event_id;return this._process(this._captureEvent(e,t,n).then((e=>{r=e}))),r}captureSession(e){this._isEnabled()?\"string\"!=typeof e.release?(\"undefined\"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__)&&Ae.warn(\"Discarded session because of missing or non-string release\"):(this.sendSession(e),Wt(e,{init:!1})):(\"undefined\"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__)&&Ae.warn(\"SDK not enabled, will not capture session.\")}getDsn(){return this._dsn}getOptions(){return this._options}getSdkMetadata(){return this._options._metadata}getTransport(){return this._transport}flush(e){const t=this._transport;return t?this._isClientDoneProcessing(e).then((n=>t.flush(e).then((e=>n&&e)))):kt(!0)}close(e){return this.flush(e).then((e=>(this.getOptions().enabled=!1,e)))}setupIntegrations(){this._isEnabled()&&!this._integrationsInitialized&&(this._integrations=function(e){const t={};return e.forEach((e=>{e&&hn(e,t)})),t}(this._options.integrations),this._integrationsInitialized=!0)}getIntegrationById(e){return this._integrations[e]}getIntegration(e){try{return this._integrations[e.id]||null}catch(t){return(\"undefined\"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__)&&Ae.warn(`Cannot retrieve integration ${e.id} from the current Client`),null}}addIntegration(e){hn(e,this._integrations)}sendEvent(e,t={}){if(this._dsn){let n=un(e,this._dsn,this._options._metadata,this._options.tunnel);for(const e of t.attachments||[])n=Nt(n,Ut(e,this._options.transportOptions&&this._options.transportOptions.textEncoder));const r=this._sendEnvelope(n);r&&r.then((t=>this.emit(\"afterSendEvent\",e,t)),null)}}sendSession(e){if(this._dsn){const t=function(e,t,n,r){const i=$t(n);return It({sent_at:(new Date).toISOString(),...i&&{sdk:i},...!!r&&{dsn:je(t)}},[\"aggregates\"in e?[{type:\"sessions\"},e]:[{type:\"session\"},e.toJSON()]])}(e,this._dsn,this._options._metadata,this._options.tunnel);this._sendEnvelope(t)}}recordDroppedEvent(e,t,n){if(this._options.sendClientReports){const n=`${e}:${t}`;(\"undefined\"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__)&&Ae.log(`Adding outcome: \"${n}\"`),this._outcomes[n]=this._outcomes[n]+1||1}}on(e,t){this._hooks[e]||(this._hooks[e]=[]),this._hooks[e].push(t)}emit(e,...t){this._hooks[e]&&this._hooks[e].forEach((e=>e(...t)))}_updateSessionFromEvent(e,t){let n=!1,r=!1;const i=t.exception&&t.exception.values;if(i){r=!0;for(const e of i){const t=e.mechanism;if(t&&!1===t.handled){n=!0;break}}}const o=\"ok\"===e.status;(o&&0===e.errors||o&&n)&&(Wt(e,{...n&&{status:\"crashed\"},errors:e.errors||Number(r||n)}),this.captureSession(e))}_isClientDoneProcessing(e){return new Ct((t=>{let n=0;const r=setInterval((()=>{0==this._numProcessing?(clearInterval(r),t(!0)):(n+=1,e&&n>=e&&(clearInterval(r),t(!1)))}),1)}))}_isEnabled(){return!1!==this.getOptions().enabled&&void 0!==this._dsn}_prepareEvent(e,t,n){const r=this.getOptions(),i=Object.keys(this._integrations);return!t.integrations&&i.length>0&&(t.integrations=i),pn(r,e,t,n).then((e=>{if(null===e)return e;const{propagationContext:t}=e.sdkProcessingMetadata||{};if(!(e.contexts&&e.contexts.trace)&&t){const{traceId:r,spanId:i,parentSpanId:o,dsc:a}=t;e.contexts={trace:{trace_id:r,span_id:i,parent_span_id:o},...e.contexts};const s=a||function(e,t,n){const r=t.getOptions(),{publicKey:i}=t.getDsn()||{},{segment:o}=n&&n.getUser()||{},a=$e({environment:r.environment||Yt,release:r.release,user_segment:o,public_key:i,trace_id:e});return t.emit&&t.emit(\"createDsc\",a),a}(r,this,n);e.sdkProcessingMetadata={dynamicSamplingContext:s,...e.sdkProcessingMetadata}}return e}))}_captureEvent(e,t={},n){return this._processEvent(e,t,n).then((e=>e.event_id),(e=>{if(\"undefined\"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__){const t=e;\"log\"===t.logLevel?Ae.log(t.message):Ae.warn(t)}}))}_processEvent(e,t,n){const r=this.getOptions(),{sampleRate:i}=r;if(!this._isEnabled())return Et(new Ie(\"SDK not enabled, will not capture event.\",\"log\"));const o=yn(e),a=mn(e),s=e.type||\"error\",c=`before send for type \\`${s}\\``;if(a&&\"number\"==typeof i&&Math.random()>i)return this.recordDroppedEvent(\"sample_rate\",\"error\",e),Et(new Ie(`Discarding event because it's not included in the random sample (sampling rate = ${i})`,\"log\"));const l=\"replay_event\"===s?\"replay\":s;return this._prepareEvent(e,t,n).then((n=>{if(null===n)throw this.recordDroppedEvent(\"event_processor\",l,e),new Ie(\"An event processor returned `null`, will not send event.\",\"log\");if(t.data&&!0===t.data.__sentry__)return n;const i=function(e,t,n){const{beforeSend:r,beforeSendTransaction:i}=e;if(mn(t)&&r)return r(t,n);if(yn(t)&&i)return i(t,n);return t}(r,n,t);return function(e,t){const n=`${t} must return \\`null\\` or a valid event.`;if(le(e))return e.then((e=>{if(!se(e)&&null!==e)throw new Ie(n);return e}),(e=>{throw new Ie(`${t} rejected with ${e}`)}));if(!se(e)&&null!==e)throw new Ie(n);return e}(i,c)})).then((r=>{if(null===r)throw this.recordDroppedEvent(\"before_send\",l,e),new Ie(`${c} returned \\`null\\`, will not send event.`,\"log\");const i=n&&n.getSession();!o&&i&&this._updateSessionFromEvent(i,r);const a=r.transaction_info;if(o&&a&&r.transaction!==e.transaction){const e=\"custom\";r.transaction_info={...a,source:e}}return this.sendEvent(r,t),r})).then(null,(e=>{if(e instanceof Ie)throw e;throw this.captureException(e,{data:{__sentry__:!0},originalException:e}),new Ie(`Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event.\\nReason: ${e}`)}))}_process(e){this._numProcessing++,e.then((e=>(this._numProcessing--,e)),(e=>(this._numProcessing--,e)))}_sendEnvelope(e){if(this._transport&&this._dsn)return this.emit(\"beforeEnvelope\",e),this._transport.send(e).then(null,(e=>{(\"undefined\"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__)&&Ae.error(\"Error while sending event:\",e)}));(\"undefined\"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__)&&Ae.error(\"Transport disabled\")}_clearOutcomes(){const e=this._outcomes;return this._outcomes={},Object.keys(e).map((t=>{const[n,r]=t.split(\":\");return{reason:n,category:r,quantity:e[t]}}))}}function mn(e){return void 0===e.type}function yn(e){return\"transaction\"===e.type}const _n=30;function bn(e,t,n=Mt(e.bufferSize||_n)){let r={};function i(i){const o=[];if(Rt(i,((t,n)=>{const i=Jt(n);if(function(e,t,n=Date.now()){return function(e,t){return e[t]||e.all||0}(e,t)>n}(r,i)){const r=wn(t,n);e.recordDroppedEvent(\"ratelimit_backoff\",i,r)}else o.push(t)})),0===o.length)return kt();const a=It(i[0],o),s=t=>{Rt(a,((n,r)=>{const i=wn(n,r);e.recordDroppedEvent(t,Jt(r),i)}))};return n.add((()=>t({body:Ft(a,e.textEncoder)}).then((e=>(void 0!==e.statusCode&&(e.statusCode<200||e.statusCode>=300)&&(\"undefined\"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__)&&Ae.warn(`Sentry responded with status code ${e.statusCode} to sent event.`),r=qt(r,e),e)),(e=>{throw s(\"network_error\"),e})))).then((e=>e),(e=>{if(e instanceof Ie)return(\"undefined\"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__)&&Ae.error(\"Skipped sending event because buffer is full.\"),s(\"queue_overflow\"),kt();throw e}))}return i.__sentry__baseTransport__=!0,{send:i,flush:e=>n.drain(e)}}function wn(e,t){if(\"event\"===t||\"transaction\"===t)return Array.isArray(e)?e[1]:void 0}const Sn=\"7.60.1\";let kn;class En{constructor(){En.prototype.__init.call(this)}static __initStatic(){this.id=\"FunctionToString\"}__init(){this.name=En.id}setupOnce(){kn=Function.prototype.toString;try{Function.prototype.toString=function(...e){const t=Fe(this)||this;return kn.apply(t,e)}}catch(e){}}}En.__initStatic();const Cn=[/^Script error\\.?$/,/^Javascript error: Script error\\.? on line 0$/],Mn=[/^.*healthcheck.*$/,/^.*healthy.*$/,/^.*live.*$/,/^.*ready.*$/,/^.*heartbeat.*$/,/^.*\\/health$/,/^.*\\/healthz$/];class Tn{static __initStatic(){this.id=\"InboundFilters\"}__init(){this.name=Tn.id}constructor(e={}){this._options=e,Tn.prototype.__init.call(this)}setupOnce(e,t){const n=e=>{const n=t();if(n){const t=n.getIntegration(Tn);if(t){const r=n.getClient(),i=r?r.getOptions():{},o=function(e={},t={}){return{allowUrls:[...e.allowUrls||[],...t.allowUrls||[]],denyUrls:[...e.denyUrls||[],...t.denyUrls||[]],ignoreErrors:[...e.ignoreErrors||[],...t.ignoreErrors||[],...e.disableErrorDefaults?[]:Cn],ignoreTransactions:[...e.ignoreTransactions||[],...t.ignoreTransactions||[],...e.disableTransactionDefaults?[]:Mn],ignoreInternal:void 0===e.ignoreInternal||e.ignoreInternal}}(t._options,i);return function(e,t){if(t.ignoreInternal&&function(e){try{return\"SentryError\"===e.exception.values[0].type}catch(e){}return!1}(e))return(\"undefined\"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__)&&Ae.warn(`Event dropped due to being internal Sentry Error.\\nEvent: ${gt(e)}`),!0;if(function(e,t){if(e.type||!t||!t.length)return!1;return function(e){if(e.message)return[e.message];if(e.exception){const{values:t}=e.exception;try{const{type:e=\"\",value:n=\"\"}=t&&t[t.length-1]||{};return[`${n}`,`${e}: ${n}`]}catch(t){return(\"undefined\"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__)&&Ae.error(`Cannot extract message for event ${gt(e)}`),[]}}return[]}(e).some((e=>fe(e,t)))}(e,t.ignoreErrors))return(\"undefined\"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__)&&Ae.warn(`Event dropped due to being matched by \\`ignoreErrors\\` option.\\nEvent: ${gt(e)}`),!0;if(function(e,t){if(\"transaction\"!==e.type||!t||!t.length)return!1;const n=e.transaction;return!!n&&fe(n,t)}(e,t.ignoreTransactions))return(\"undefined\"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__)&&Ae.warn(`Event dropped due to being matched by \\`ignoreTransactions\\` option.\\nEvent: ${gt(e)}`),!0;if(function(e,t){if(!t||!t.length)return!1;const n=On(e);return!!n&&fe(n,t)}(e,t.denyUrls))return(\"undefined\"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__)&&Ae.warn(`Event dropped due to being matched by \\`denyUrls\\` option.\\nEvent: ${gt(e)}.\\nUrl: ${On(e)}`),!0;if(!function(e,t){if(!t||!t.length)return!0;const n=On(e);return!n||fe(n,t)}(e,t.allowUrls))return(\"undefined\"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__)&&Ae.warn(`Event dropped due to not being matched by \\`allowUrls\\` option.\\nEvent: ${gt(e)}.\\nUrl: ${On(e)}`),!0;return!1}(e,o)?null:e}}return e};n.id=this.name,e(n)}}function On(e){try{let t;try{t=e.exception.values[0].stacktrace.frames}catch(e){}return t?function(e=[]){for(let t=e.length-1;t>=0;t--){const n=e[t];if(n&&\"\"!==n.filename&&\"[native code]\"!==n.filename)return n.filename||null}return null}(t):null}catch(t){return(\"undefined\"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__)&&Ae.error(`Cannot extract url for event ${gt(e)}`),null}}Tn.__initStatic();var Pn=Object.freeze({__proto__:null,FunctionToString:En,InboundFilters:Tn});const An=be;let Dn=0;function jn(){return Dn>0}function xn(e,t={},n){if(\"function\"!=typeof e)return e;try{const t=e.__sentry_wrapped__;if(t)return t;if(Fe(e))return e}catch(t){return e}const r=function(){const r=Array.prototype.slice.call(arguments);try{n&&\"function\"==typeof n&&n.apply(this,arguments);const i=r.map((e=>xn(e,t)));return e.apply(this,i)}catch(e){throw Dn++,setTimeout((()=>{Dn--})),i=n=>{var i,o;n.addEventProcessor((e=>(t.mechanism&&(vt(e,void 0,void 0),mt(e,t.mechanism)),e.extra={...e.extra,arguments:r},e))),i=e,on().captureException(i,{captureContext:o})},on().withScope(i),e}var i};try{for(const t in e)Object.prototype.hasOwnProperty.call(e,t)&&(r[t]=e[t])}catch(e){}Be(r,e),Re(e,\"__sentry_wrapped__\",r);try{Object.getOwnPropertyDescriptor(r,\"name\").configurable&&Object.defineProperty(r,\"name\",{get:()=>e.name})}catch(e){}return r}function Ln(e,t){const n=Nn(e,t),r={type:t&&t.name,value:Bn(t)};return n.length&&(r.stacktrace={frames:n}),void 0===r.type&&\"\"===r.value&&(r.value=\"Unrecoverable error caught\"),r}function In(e,t){return{exception:{values:[Ln(e,t)]}}}function Nn(e,t){const n=t.stacktrace||t.stack||\"\",r=function(e){if(e){if(\"number\"==typeof e.framesToPop)return e.framesToPop;if(Rn.test(e.message))return 1}return 0}(t);try{return e(n,r)}catch(e){}return[]}const Rn=/Minified React error #\\d+;/i;function Bn(e){const t=e&&e.message;return t?t.error&&\"string\"==typeof t.error.message?t.error.message:t:\"No error message\"}function Fn(e,t,n,r,i){let o;if(re(t)&&t.error){return In(e,t.error)}if(ie(t)||ne(t,\"DOMException\")){const i=t;if(\"stack\"in t)o=In(e,t);else{const t=i.name||(ie(i)?\"DOMError\":\"DOMException\"),a=i.message?`${t}: ${i.message}`:t;o=Un(e,a,n,r),vt(o,a)}return\"code\"in i&&(o.tags={...o.tags,\"DOMException.code\":`${i.code}`}),o}if(te(t))return In(e,t);if(se(t)||ce(t)){return o=function(e,t,n,r){const i=on().getClient(),o=i&&i.getOptions().normalizeDepth,a={exception:{values:[{type:ce(t)?t.constructor.name:r?\"UnhandledRejection\":\"Error\",value:Vn(t,{isUnhandledRejection:r})}]},extra:{__serialized__:bt(t,o)}};if(n){const t=Nn(e,n);t.length&&(a.exception.values[0].stacktrace={frames:t})}return a}(e,t,n,i),mt(o,{synthetic:!0}),o}return o=Un(e,t,n,r),vt(o,`${t}`,void 0),mt(o,{synthetic:!0}),o}function Un(e,t,n,r){const i={message:t};if(r&&n){const r=Nn(e,n);r.length&&(i.exception={values:[{value:t,stacktrace:{frames:r}}]})}return i}function Vn(e,{isUnhandledRejection:t}){const n=function(e,t=40){const n=Object.keys(Ue(e));if(n.sort(),!n.length)return\"[object has no keys]\";if(n[0].length>=t)return de(n[0],t);for(let e=n.length;e>0;e--){const r=n.slice(0,e).join(\", \");if(!(r.length>t))return e===n.length?r:de(r,t)}return\"\"}(e),r=t?\"promise rejection\":\"exception\";if(re(e))return`Event \\`ErrorEvent\\` captured as ${r} with message \\`${e.message}\\``;if(ce(e)){return`Event \\`${function(e){try{const t=Object.getPrototypeOf(e);return t?t.constructor.name:void 0}catch(e){}}(e)}\\` (type=${e.type}) captured as ${r}`}return`Object captured as ${r} with keys: ${n}`}const Jn=1024,$n=\"Breadcrumbs\";class Gn{static __initStatic(){this.id=$n}__init(){this.name=Gn.id}constructor(e){Gn.prototype.__init.call(this),this.options={console:!0,dom:!0,fetch:!0,history:!0,sentry:!0,xhr:!0,...e}}setupOnce(){this.options.console&&nt(\"console\",qn),this.options.dom&&nt(\"dom\",function(e){function t(t){let n,r=\"object\"==typeof e?e.serializeAttribute:void 0,i=\"object\"==typeof e&&\"number\"==typeof e.maxStringLength?e.maxStringLength:void 0;i&&i>Jn&&((\"undefined\"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__)&&Ae.warn(`\\`dom.maxStringLength\\` cannot exceed 1024, but a value of ${i} was configured. Sentry will use 1024 instead.`),i=Jn),\"string\"==typeof r&&(r=[r]);try{const e=t.event;n=function(e){return!!e&&!!e.target}(e)?Ce(e.target,{keyAttrs:r,maxStringLength:i}):Ce(e,{keyAttrs:r,maxStringLength:i})}catch(e){n=\"\"}0!==n.length&&on().addBreadcrumb({category:`ui.${t.name}`,message:n},{event:t.event,name:t.name,global:t.global})}return t}(this.options.dom)),this.options.xhr&&nt(\"xhr\",Yn),this.options.fetch&&nt(\"fetch\",zn),this.options.history&&nt(\"history\",Wn)}addSentryBreadcrumb(e){this.options.sentry&&on().addBreadcrumb({category:\"sentry.\"+(\"transaction\"===e.type?\"transaction\":\"event\"),event_id:e.event_id,level:e.level,message:gt(e)},{event:e})}}function qn(e){for(let t=0;t{\"hidden\"===An.document.visibilityState&&this._flushOutcomes()}))}eventFromException(e,t){return function(e,t,n,r){const i=Fn(e,t,n&&n.syntheticException||void 0,r);return mt(i),i.level=\"error\",n&&n.event_id&&(i.event_id=n.event_id),kt(i)}(this._options.stackParser,e,t,this._options.attachStacktrace)}eventFromMessage(e,t=\"info\",n){return function(e,t,n=\"info\",r,i){const o=Un(e,t,r&&r.syntheticException||void 0,i);return o.level=n,r&&r.event_id&&(o.event_id=r.event_id),kt(o)}(this._options.stackParser,e,t,n,this._options.attachStacktrace)}sendEvent(e,t){const n=this.getIntegrationById($n);n&&n.addSentryBreadcrumb&&n.addSentryBreadcrumb(e),super.sendEvent(e,t)}captureUserFeedback(e){if(!this._isEnabled())return void((\"undefined\"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__)&&Ae.warn(\"SDK not enabled, will not capture user feedback.\"));const t=function(e,{metadata:t,tunnel:n,dsn:r}){const i={event_id:e.event_id,sent_at:(new Date).toISOString(),...t&&t.sdk&&{sdk:{name:t.sdk.name,version:t.sdk.version}},...!!n&&!!r&&{dsn:je(r)}},o=function(e){return[{type:\"user_report\"},e]}(e);return It(i,[o])}(e,{metadata:this.getSdkMetadata(),dsn:this.getDsn(),tunnel:this.getOptions().tunnel});this._sendEnvelope(t)}_prepareEvent(e,t,n){return e.platform=e.platform||\"javascript\",super._prepareEvent(e,t,n)}_flushOutcomes(){const e=this._clearOutcomes();if(0===e.length)return void((\"undefined\"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__)&&Ae.log(\"No outcomes to send\"));if(!this._dsn)return void((\"undefined\"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__)&&Ae.log(\"No dsn provided, will not send outcomes\"));(\"undefined\"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__)&&Ae.log(\"Sending outcomes:\",e);const t=(n=e,It((r=this._options.tunnel&&je(this._dsn))?{dsn:r}:{},[[{type:\"client_report\"},{timestamp:i||xt(),discarded_events:n}]]));var n,r,i;this._sendEnvelope(t)}}let Qn;function Kn(e,t=function(){if(Qn)return Qn;if(We(An.fetch))return Qn=An.fetch.bind(An);const e=An.document;let t=An.fetch;if(e&&\"function\"==typeof e.createElement)try{const n=e.createElement(\"iframe\");n.hidden=!0,e.head.appendChild(n);const r=n.contentWindow;r&&r.fetch&&(t=r.fetch),e.head.removeChild(n)}catch(e){(\"undefined\"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__)&&Ae.warn(\"Could not create sandbox iframe for pure fetch check, bailing to window.fetch: \",e)}return Qn=t.bind(An)}()){let n=0,r=0;return bn(e,(function(i){const o=i.body.length;n+=o,r++;const a={body:i.body,method:\"POST\",referrerPolicy:\"origin\",headers:e.headers,keepalive:n<=6e4&&r<15,...e.fetchOptions};try{return t(e.url,a).then((e=>(n-=o,r--,{statusCode:e.status,headers:{\"x-sentry-rate-limits\":e.headers.get(\"X-Sentry-Rate-Limits\"),\"retry-after\":e.headers.get(\"Retry-After\")}})))}catch(e){return Qn=void 0,n-=o,r--,Et(e)}}))}class Xn{static __initStatic(){this.id=\"GlobalHandlers\"}__init(){this.name=Xn.id}__init2(){this._installFunc={onerror:Zn,onunhandledrejection:er}}constructor(e){Xn.prototype.__init.call(this),Xn.prototype.__init2.call(this),this._options={onerror:!0,onunhandledrejection:!0,...e}}setupOnce(){Error.stackTraceLimit=50;const e=this._options;for(const n in e){const r=this._installFunc[n];r&&e[n]&&(t=n,(\"undefined\"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__)&&Ae.log(`Global Handler attached: ${t}`),r(),this._installFunc[n]=void 0)}var t}}function Zn(){nt(\"error\",(e=>{const[t,n,r]=rr();if(!t.getIntegration(Xn))return;const{msg:i,url:o,line:a,column:s,error:c}=e;if(jn()||c&&c.__sentry_own_request__)return;const l=void 0===c&&oe(i)?function(e,t,n,r){const i=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i;let o=re(e)?e.message:e,a=\"Error\";const s=o.match(i);s&&(a=s[1],o=s[2]);const c={exception:{values:[{type:a,value:o}]}};return tr(c,t,n,r)}(i,o,a,s):tr(Fn(n,c||i,void 0,r,!1),o,a,s);l.level=\"error\",nr(t,c,l,\"onerror\")}))}function er(){nt(\"unhandledrejection\",(e=>{const[t,n,r]=rr();if(!t.getIntegration(Xn))return;let i=e;try{\"reason\"in e?i=e.reason:\"detail\"in e&&\"reason\"in e.detail&&(i=e.detail.reason)}catch(e){}if(jn()||i&&i.__sentry_own_request__)return!0;const o=ae(i)?{exception:{values:[{type:\"UnhandledRejection\",value:`Non-Error promise rejection captured with value: ${String(i)}`}]}}:Fn(n,i,void 0,r,!0);o.level=\"error\",nr(t,i,o,\"onunhandledrejection\")}))}function tr(e,t,n,r){const i=e.exception=e.exception||{},o=i.values=i.values||[],a=o[0]=o[0]||{},s=a.stacktrace=a.stacktrace||{},c=s.frames=s.frames||[],l=isNaN(parseInt(r,10))?void 0:r,u=isNaN(parseInt(n,10))?void 0:n,d=oe(t)&&t.length>0?t:function(){try{return ke.document.location.href}catch(e){return\"\"}}();return 0===c.length&&c.push({colno:l,filename:d,function:\"?\",in_app:!0,lineno:u}),e}function nr(e,t,n,r){mt(n,{handled:!1,type:r}),e.captureEvent(n,{originalException:t})}function rr(){const e=on(),t=e.getClient(),n=t&&t.getOptions()||{stackParser:()=>[],attachStacktrace:!1};return[e,n.stackParser,n.attachStacktrace]}Xn.__initStatic();const ir=[\"EventTarget\",\"Window\",\"Node\",\"ApplicationCache\",\"AudioTrackList\",\"ChannelMergerNode\",\"CryptoOperation\",\"EventSource\",\"FileReader\",\"HTMLUnknownElement\",\"IDBDatabase\",\"IDBRequest\",\"IDBTransaction\",\"KeyOperation\",\"MediaController\",\"MessagePort\",\"ModalWindow\",\"Notification\",\"SVGElementInstance\",\"Screen\",\"TextTrack\",\"TextTrackCue\",\"TextTrackList\",\"WebSocket\",\"WebSocketWorker\",\"Worker\",\"XMLHttpRequest\",\"XMLHttpRequestEventTarget\",\"XMLHttpRequestUpload\"];class or{static __initStatic(){this.id=\"TryCatch\"}__init(){this.name=or.id}constructor(e){or.prototype.__init.call(this),this._options={XMLHttpRequest:!0,eventTarget:!0,requestAnimationFrame:!0,setInterval:!0,setTimeout:!0,...e}}setupOnce(){this._options.setTimeout&&Ne(An,\"setTimeout\",ar),this._options.setInterval&&Ne(An,\"setInterval\",ar),this._options.requestAnimationFrame&&Ne(An,\"requestAnimationFrame\",sr),this._options.XMLHttpRequest&&\"XMLHttpRequest\"in An&&Ne(XMLHttpRequest.prototype,\"send\",cr);const e=this._options.eventTarget;if(e){(Array.isArray(e)?e:ir).forEach(lr)}}}function ar(e){return function(...t){const n=t[0];return t[0]=xn(n,{mechanism:{data:{function:Ye(e)},handled:!0,type:\"instrument\"}}),e.apply(this,t)}}function sr(e){return function(t){return e.apply(this,[xn(t,{mechanism:{data:{function:\"requestAnimationFrame\",handler:Ye(e)},handled:!0,type:\"instrument\"}})])}}function cr(e){return function(...t){const n=this;return[\"onload\",\"onerror\",\"onprogress\",\"onreadystatechange\"].forEach((e=>{e in n&&\"function\"==typeof n[e]&&Ne(n,e,(function(t){const n={mechanism:{data:{function:e,handler:Ye(t)},handled:!0,type:\"instrument\"}},r=Fe(t);return r&&(n.mechanism.data.handler=Ye(r)),xn(t,n)}))})),e.apply(this,t)}}function lr(e){const t=An,n=t[e]&&t[e].prototype;n&&n.hasOwnProperty&&n.hasOwnProperty(\"addEventListener\")&&(Ne(n,\"addEventListener\",(function(t){return function(n,r,i){try{\"function\"==typeof r.handleEvent&&(r.handleEvent=xn(r.handleEvent,{mechanism:{data:{function:\"handleEvent\",handler:Ye(r),target:e},handled:!0,type:\"instrument\"}}))}catch(e){}return t.apply(this,[n,xn(r,{mechanism:{data:{function:\"addEventListener\",handler:Ye(r),target:e},handled:!0,type:\"instrument\"}}),i])}})),Ne(n,\"removeEventListener\",(function(e){return function(t,n,r){const i=n;try{const n=i&&i.__sentry_wrapped__;n&&e.call(this,t,n,r)}catch(e){}return e.call(this,t,i,r)}})))}or.__initStatic();class ur{static __initStatic(){this.id=\"LinkedErrors\"}__init(){this.name=ur.id}constructor(e={}){ur.prototype.__init.call(this),this._key=e.key||\"cause\",this._limit=e.limit||5}setupOnce(e,t){e(((e,n)=>{const r=t(),i=r.getClient(),o=r.getIntegration(ur);if(!i||!o)return e;const a=i.getOptions();return ge(Ln,a.stackParser,a.maxValueLength,o._key,o._limit,e,n),e}))}}ur.__initStatic();class dr{constructor(){dr.prototype.__init.call(this)}static __initStatic(){this.id=\"HttpContext\"}__init(){this.name=dr.id}setupOnce(){Kt((e=>{if(on().getIntegration(dr)){if(!An.navigator&&!An.location&&!An.document)return e;const t=e.request&&e.request.url||An.location&&An.location.href,{referrer:n}=An.document||{},{userAgent:r}=An.navigator||{},i={...e.request&&e.request.headers,...n&&{Referer:n},...r&&{\"User-Agent\":r}},o={...e.request,...t&&{url:t},headers:i};return{...e,request:o}}return e}))}}dr.__initStatic();class hr{constructor(){hr.prototype.__init.call(this)}static __initStatic(){this.id=\"Dedupe\"}__init(){this.name=hr.id}setupOnce(e,t){const n=e=>{if(e.type)return e;const n=t().getIntegration(hr);if(n){try{if(function(e,t){if(!t)return!1;if(function(e,t){const n=e.message,r=t.message;if(!n&&!r)return!1;if(n&&!r||!n&&r)return!1;if(n!==r)return!1;if(!fr(e,t))return!1;if(!pr(e,t))return!1;return!0}(e,t))return!0;if(function(e,t){const n=gr(t),r=gr(e);if(!n||!r)return!1;if(n.type!==r.type||n.value!==r.value)return!1;if(!fr(e,t))return!1;if(!pr(e,t))return!1;return!0}(e,t))return!0;return!1}(e,n._previousEvent))return(\"undefined\"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__)&&Ae.warn(\"Event dropped due to being a duplicate of previously captured event.\"),null}catch(t){return n._previousEvent=e}return n._previousEvent=e}return e};n.id=this.name,e(n)}}function pr(e,t){let n=vr(e),r=vr(t);if(!n&&!r)return!0;if(n&&!r||!n&&r)return!1;if(r.length!==n.length)return!1;for(let e=0;e=75;case\"Safari\":return RTCRtpTransceiver.prototype.hasOwnProperty(\"currentDirection\")&&!(13===t.major&&0===t.minor&&0===t.point);case\"Firefox\":return t.major>=67}return!0}(Lo(),Io())||Eo())}function To(){if(Eo())return!1;if(!document)return!1;var e=document.createElement(\"iframe\");return!!e.requestFullscreen||!!e.webkitRequestFullscreen}var Oo=function(){try{var e=document.createElement(\"canvas\"),t=null!=e.getContext(\"webgl2\");return e.remove(),t}catch(e){return!1}}();function Po(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return!Eo()&&(!!Oo&&(e?function(){if(xo())return!1;return[\"Chrome\",\"Firefox\"].includes(Lo())}():function(){if(xo())return!1;var e=Lo();if(\"Safari\"===e){var t=Fo();if(t.major<15||15===t.major&&t.minor<4)return!1}if(\"Chrome\"===e){return No().major>=77}if(\"Firefox\"===e){return Uo().major>=97}return[\"Chrome\",\"Firefox\",\"Safari\"].includes(e)}()))}function Ao(){if(Eo())return!1;if(jo())return!1;if(\"undefined\"==typeof AudioWorkletNode)return!1;switch(Lo()){case\"Chrome\":case\"Firefox\":return!0;case\"Safari\":return Io().major>=17}return!1}function Do(){return Co()&&!function(){var e,t=Lo();if(!ko())return!0;switch(t){case\"Chrome\":return(e=No()).major&&e.major>0&&e.major<75;case\"Firefox\":return(e=Uo()).major<91;case\"Safari\":return(e=Fo()).major<13||13===e.major&&e.minor<1;default:return!0}}()}function jo(){return ko().match(/Linux; Android/)}function xo(){var e,t,n=ko(),r=n.match(/Mac/)&&(!Eo()&&\"undefined\"!=typeof window&&null!==(e=window)&&void 0!==e&&null!==(t=e.navigator)&&void 0!==t&&t.maxTouchPoints?window.navigator.maxTouchPoints:0)>=5;return!!(n.match(/Mobi/)||n.match(/Android/)||r)||(!!ko().match(/DailyAnd\\//)||void 0)}function Lo(){if(\"undefined\"!=typeof window){var e=ko();return Ro()?\"Safari\":e.indexOf(\"Edge\")>-1?\"Edge\":e.match(/Chrome\\//)?\"Chrome\":e.indexOf(\"Safari\")>-1||Bo()?\"Safari\":e.indexOf(\"Firefox\")>-1?\"Firefox\":e.indexOf(\"MSIE\")>-1||e.indexOf(\".NET\")>-1?\"IE\":\"Unknown Browser\"}}function Io(){switch(Lo()){case\"Chrome\":return No();case\"Safari\":return Fo();case\"Firefox\":return Uo();case\"Edge\":return function(){var e=0,t=0;if(\"undefined\"!=typeof window){var n=ko().match(/Edge\\/(\\d+).(\\d+)/);if(n)try{e=parseInt(n[1]),t=parseInt(n[2])}catch(e){}}return{major:e,minor:t}}()}}function No(){var e=0,t=0,n=0,r=0,i=!1;if(\"undefined\"!=typeof window){var o=ko(),a=o.match(/Chrome\\/(\\d+).(\\d+).(\\d+).(\\d+)/);if(a)try{e=parseInt(a[1]),t=parseInt(a[2]),n=parseInt(a[3]),r=parseInt(a[4]),i=o.indexOf(\"OPR/\")>-1}catch(e){}}return{major:e,minor:t,build:n,patch:r,opera:i}}function Ro(){return!!ko().match(/iPad|iPhone|iPod/i)&&Co()}function Bo(){return ko().indexOf(\"AppleWebKit/605.1.15\")>-1}function Fo(){var e=0,t=0,n=0;if(\"undefined\"!=typeof window){var r=ko().match(/Version\\/(\\d+).(\\d+)(.(\\d+))?/);if(r)try{e=parseInt(r[1]),t=parseInt(r[2]),n=parseInt(r[4])}catch(e){}else(Ro()||Bo())&&(e=14,t=0,n=3)}return{major:e,minor:t,point:n}}function Uo(){var e=0,t=0;if(\"undefined\"!=typeof window){var n=ko().match(/Firefox\\/(\\d+).(\\d+)/);if(n)try{e=parseInt(n[1]),t=parseInt(n[2])}catch(e){}}return{major:e,minor:t}}var Vo=function(){function e(){t(this,e)}return o(e,[{key:\"addListenerForMessagesFromCallMachine\",value:function(e,t,n){Q()}},{key:\"addListenerForMessagesFromDailyJs\",value:function(e,t,n){Q()}},{key:\"sendMessageToCallMachine\",value:function(e,t,n,r){Q()}},{key:\"sendMessageToDailyJs\",value:function(e,t){Q()}},{key:\"removeListener\",value:function(e){Q()}}]),e}();function Jo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function $o(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:{},r=n.data,i=n.mergeStrategy,o=void 0===i?Ho:i;t(this,e),e._validateMergeStrategy(o),e._validateData(r,o),this.mergeStrategy=o,this.data=r}return o(e,[{key:\"isNoOp\",value:function(){return e.isNoOpUpdate(this.data,this.mergeStrategy)}}],[{key:\"isNoOpUpdate\",value:function(e,t){return 0===Object.keys(e).length&&t===Qo}},{key:\"_validateMergeStrategy\",value:function(e){if(!Ko.includes(e))throw Error(\"Unrecognized mergeStrategy provided. Options are: [\".concat(Ko,\"]\"))}},{key:\"_validateData\",value:function(e,t){if(!function(e){if(null==e||\"object\"!==n(e))return!1;var t=Object.getPrototypeOf(e);return null==t||t===Object.prototype}(e))throw Error(\"Meeting session data must be a plain (map-like) object\");var r;try{if(r=JSON.stringify(e),t===Ho){var i=JSON.parse(r);I(i,e)||console.warn(\"The meeting session data provided will be modified when serialized.\",i,e)}else if(t===Qo)for(var o in e)if(Object.hasOwnProperty.call(e,o)&&void 0!==e[o]){var a=JSON.parse(JSON.stringify(e[o]));I(e[o],a)||console.warn(\"At least one key in the meeting session data provided will be modified when serialized.\",a,e[o])}}catch(e){throw Error(\"Meeting session data must be serializable to JSON: \".concat(e))}if(r.length>co)throw Error(\"Meeting session data is too large (\".concat(r.length,\" characters). Maximum size suppported is \").concat(co,\".\"))}}]),e}();function Zo(e,t,n){return Zo=function(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}()?Reflect.construct.bind():function(e,t,n){var r=[null];r.push.apply(r,t);var i=new(Function.bind.apply(e,r));return n&&s(i,n.prototype),i},Zo.apply(null,arguments)}function ea(e){var t=\"function\"==typeof Map?new Map:void 0;return ea=function(e){if(null===e||(n=e,-1===Function.toString.call(n).indexOf(\"[native code]\")))return e;var n;if(\"function\"!=typeof e)throw new TypeError(\"Super expression must either be null or a function\");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,r)}function r(){return Zo(e,arguments,u(this).constructor)}return r.prototype=Object.create(e.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),s(r,e)},ea(e)}function ta(e){var t=function(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=u(e);if(t){var i=u(this).constructor;n=Reflect.construct(r,arguments,i)}else n=r.apply(this,arguments);return l(this,n)}}function na(e){var t,n=null===(t=window._daily)||void 0===t?void 0:t.pendings;if(n){var r=n.indexOf(e);-1!==r&&n.splice(r,1)}}var ra=function(){function e(n){t(this,e),this._currentLoad=null,this._callClientId=n}return o(e,[{key:\"load\",value:function(){var e,t=this,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=arguments.length>1?arguments[1]:void 0,i=arguments.length>2?arguments[2]:void 0;if(this.loaded)return window._daily.instances[this._callClientId].callMachine.reset(),void r(!0);e=this._callClientId,window._daily.pendings.push(e),this._currentLoad&&this._currentLoad.cancel(),this._currentLoad=new ia(n,(function(){r(!1)}),(function(e,n){n||na(t._callClientId),i(e,n)})),this._currentLoad.start()}},{key:\"cancel\",value:function(){this._currentLoad&&this._currentLoad.cancel(),na(this._callClientId)}},{key:\"loaded\",get:function(){return this._currentLoad&&this._currentLoad.succeeded}}]),e}(),ia=function(){function e(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=arguments.length>1?arguments[1]:void 0,i=arguments.length>2?arguments[2]:void 0;t(this,e),this._attemptsRemaining=3,this._currentAttempt=null,this._dailyConfig=n,this._successCallback=r,this._failureCallback=i}return o(e,[{key:\"start\",value:function(){var e=this;if(!this._currentAttempt){this._currentAttempt=new sa(this._dailyConfig,this._successCallback,(function t(n){e._currentAttempt.cancelled||(e._attemptsRemaining--,e._failureCallback(n,e._attemptsRemaining>0),e._attemptsRemaining<=0||setTimeout((function(){e._currentAttempt.cancelled||(e._currentAttempt=new sa(e._dailyConfig,e._successCallback,t),e._currentAttempt.start())}),3e3))})),this._currentAttempt.start()}}},{key:\"cancel\",value:function(){this._currentAttempt&&this._currentAttempt.cancel()}},{key:\"cancelled\",get:function(){return this._currentAttempt&&this._currentAttempt.cancelled}},{key:\"succeeded\",get:function(){return this._currentAttempt&&this._currentAttempt.succeeded}}]),e}(),oa=function(e){c(r,ea(Error));var n=ta(r);function r(){return t(this,r),n.apply(this,arguments)}return o(r)}(),aa=2e4,sa=function(){function e(n,r,i){t(this,e),this._loadAttemptImpl=Eo()||!n.avoidEval?new ca(n,r,i):new la(n,r,i)}var n;return o(e,[{key:\"start\",value:(n=p((function*(){return this._loadAttemptImpl.start()})),function(){return n.apply(this,arguments)})},{key:\"cancel\",value:function(){this._loadAttemptImpl.cancel()}},{key:\"cancelled\",get:function(){return this._loadAttemptImpl.cancelled}},{key:\"succeeded\",get:function(){return this._loadAttemptImpl.succeeded}}]),e}(),ca=function(){function e(n,r,i){t(this,e),this.cancelled=!1,this.succeeded=!1,this._networkTimedOut=!1,this._networkTimeout=null,this._iosCache=\"undefined\"!=typeof iOSCallObjectBundleCache&&iOSCallObjectBundleCache,this._refetchHeaders=null,this._dailyConfig=n,this._successCallback=r,this._failureCallback=i}var n,r,i,a;return o(e,[{key:\"start\",value:(a=p((function*(){var e=X(this._dailyConfig);!(yield this._tryLoadFromIOSCache(e))&&this._loadFromNetwork(e)})),function(){return a.apply(this,arguments)})},{key:\"cancel\",value:function(){clearTimeout(this._networkTimeout),this.cancelled=!0}},{key:\"_tryLoadFromIOSCache\",value:(i=p((function*(e){if(!this._iosCache)return!1;try{var t=yield this._iosCache.get(e);return!!this.cancelled||!!t&&(t.code?(Function('\"use strict\";'+t.code)(),this.succeeded=!0,this._successCallback(),!0):(this._refetchHeaders=t.refetchHeaders,!1))}catch(e){return!1}})),function(e){return i.apply(this,arguments)})},{key:\"_loadFromNetwork\",value:(r=p((function*(e){var t=this;this._networkTimeout=setTimeout((function(){t._networkTimedOut=!0,t._failureCallback({msg:\"Timed out (>\".concat(aa,\" ms) when loading call object bundle \").concat(e),type:\"timeout\"})}),aa);try{var n=this._refetchHeaders?{headers:this._refetchHeaders}:{},r=yield fetch(e,n);if(clearTimeout(this._networkTimeout),this.cancelled||this._networkTimedOut)throw new oa;var i=yield this._getBundleCodeFromResponse(e,r);if(this.cancelled)throw new oa;Function('\"use strict\";'+i)(),this._iosCache&&this._iosCache.set(e,i,r.headers),this.succeeded=!0,this._successCallback()}catch(t){if(clearTimeout(this._networkTimeout),t instanceof oa||this.cancelled||this._networkTimedOut)return;this._failureCallback({msg:\"Failed to load call object bundle \".concat(e,\": \").concat(t),type:t.message})}})),function(e){return r.apply(this,arguments)})},{key:\"_getBundleCodeFromResponse\",value:(n=p((function*(e,t){if(t.ok)return yield t.text();if(this._iosCache&&304===t.status)return(yield this._iosCache.renew(e,t.headers)).code;throw new Error(\"Received \".concat(t.status,\" response\"))})),function(e,t){return n.apply(this,arguments)})}]),e}(),la=function(){function e(n,r,i){t(this,e),this.cancelled=!1,this.succeeded=!1,this._dailyConfig=n,this._successCallback=r,this._failureCallback=i,this._attemptId=H(),this._networkTimeout=null,this._scriptElement=null}return o(e,[{key:\"start\",value:function(){window._dailyCallMachineLoadWaitlist||(window._dailyCallMachineLoadWaitlist=new Set);var e=X(this._dailyConfig);\"object\"===(\"undefined\"==typeof document?\"undefined\":n(document))?this._startLoading(e):this._failureCallback({msg:\"Call object bundle must be loaded in a DOM/web context\",type:\"missing context\"})}},{key:\"cancel\",value:function(){this._stopLoading(),this.cancelled=!0}},{key:\"_startLoading\",value:function(e){var t=this;this._signUpForCallMachineLoadWaitlist(),this._networkTimeout=setTimeout((function(){t._stopLoading(),t._failureCallback({msg:\"Timed out (>\".concat(aa,\" ms) when loading call object bundle \").concat(e),type:\"timeout\"})}),aa);var n=document.getElementsByTagName(\"head\")[0],r=document.createElement(\"script\");this._scriptElement=r,r.onload=function(){t._stopLoading(),t.succeeded=!0,t._successCallback()},r.onerror=function(e){t._stopLoading(),t._failureCallback({msg:\"Failed to load call object bundle \".concat(e.target.src),type:e.message})},r.src=e,n.appendChild(r)}},{key:\"_stopLoading\",value:function(){this._withdrawFromCallMachineLoadWaitlist(),clearTimeout(this._networkTimeout),this._scriptElement&&(this._scriptElement.onload=null,this._scriptElement.onerror=null)}},{key:\"_signUpForCallMachineLoadWaitlist\",value:function(){window._dailyCallMachineLoadWaitlist.add(this._attemptId)}},{key:\"_withdrawFromCallMachineLoadWaitlist\",value:function(){window._dailyCallMachineLoadWaitlist.delete(this._attemptId)}}]),e}(),ua=function(e,t,n){return!0===pa(e.local,t,n)},da=function(e,t,n){return e.local.streams&&e.local.streams[t]&&e.local.streams[t].stream&&e.local.streams[t].stream[\"get\".concat(\"video\"===n?\"Video\":\"Audio\",\"Tracks\")]()[0]},ha=function(e,t,n,r){var i=fa(e,t,n,r);return i&&i.pendingTrack},pa=function(e,t,n){if(!e)return!1;var r=function(e){switch(e){case\"avatar\":return!0;case\"staged\":return e;default:return!!e}},i=e.public.subscribedTracks;return i&&i[t]?-1===[\"cam-audio\",\"cam-video\",\"screen-video\",\"screen-audio\",\"rmpAudio\",\"rmpVideo\"].indexOf(n)&&i[t].custom?[!0,\"staged\"].includes(i[t].custom)?r(i[t].custom):r(i[t].custom[n]):r(i[t][n]):!i||r(i.ALL)},fa=function(e,t,n,r){var i=Object.values(e.streams||{}).filter((function(e){return e.participantId===t&&e.type===n&&e.pendingTrack&&e.pendingTrack.kind===r})).sort((function(e,t){return new Date(t.starttime)-new Date(e.starttime)}));return i&&i[0]},ga=function(e,t){var n=e.local.public.customTracks;if(n&&n[t])return n[t].track};function va(e,t){for(var n=t.getState(),r=0,i=[\"cam\",\"screen\"];r=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var o,a=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){s=!0,o=e},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function wa(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var o,a=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){s=!0,o=e},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function Ca(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var o,a=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){s=!0,o=e},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function Ua(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n49)return console.error(\"grid.maxTilesPerPage can't be larger than 49 without sacrificing browser performance. Please contact us at https://www.daily.co/contact to talk about your use case.\"),!1}if(\"minTilesPerPage\"in t){if(!Number.isInteger(t.minTilesPerPage))return console.error(\"grid.minTilesPerPage should be an integer. You passed \".concat(t.minTilesPerPage,\".\")),!1;if(t.minTilesPerPage<1)return console.error(\"grid.minTilesPerPage can't be lower than 1.\"),!1;if(\"maxTilesPerPage\"in t&&t.minTilesPerPage>t.maxTilesPerPage)return console.error(\"grid.minTilesPerPage can't be higher than grid.maxTilesPerPage.\"),!1}}return!0},help:\"unsupported layoutConfig. Check error logs for detailed info.\"},receiveSettings:{validate:function(e){return hs(e,{allowAllParticipantsKey:!1})},help:vs({allowAllParticipantsKey:!1})},sendSettings:{validate:function(e,t){return!!function(e,t){try{return t.validateUpdateSendSettings(e),!0}catch(e){return console.error(\"Failed to validate send settings\",e),!1}}(e,t)&&(t._preloadCache.sendSettings=e,!0)},help:\"Invalid sendSettings provided. Check error logs for detailed info.\"},inputSettings:{validate:function(e,t){var n;return!!ps(e)&&(t._preloadCache.inputSettings||(t._preloadCache.inputSettings={}),fs(e,null===(n=t.properties)||void 0===n?void 0:n.dailyConfig),e.audio&&(t._preloadCache.inputSettings.audio=e.audio),e.video&&(t._preloadCache.inputSettings.video=e.video),!0)},help:gs()},layout:{validate:function(e){return\"custom-v1\"===e||\"browser\"===e||\"none\"===e},help:'layout may only be set to \"custom-v1\"',queryString:\"layout\"},emb:{queryString:\"emb\"},embHref:{queryString:\"embHref\"},dailyJsVersion:{queryString:\"dailyJsVersion\"},proxy:{queryString:\"proxy\"},strictMode:!0,allowMultipleCallInstances:!0},Za={styles:{validate:function(e){for(var t in e)if(\"cam\"!==t&&\"screen\"!==t)return!1;if(e.cam)for(var n in e.cam)if(\"div\"!==n&&\"video\"!==n)return!1;if(e.screen)for(var r in e.screen)if(\"div\"!==r&&\"video\"!==r)return!1;return!0},help:\"styles format should be a subset of: { cam: {div: {}, video: {}}, screen: {div: {}, video: {}} }\"},setSubscribedTracks:{validate:function(e,t){if(t._preloadCache.subscribeToTracksAutomatically)return!1;var n=[!0,!1,\"staged\"];if(n.includes(e)||!Eo()&&\"avatar\"===e)return!0;var r=[\"audio\",\"video\",\"screenAudio\",\"screenVideo\",\"rmpAudio\",\"rmpVideo\"];return function e(t){var i=arguments.length>1&&void 0!==arguments[1]&&arguments[1];for(var o in t)if(\"custom\"===o){if(!n.includes(t[o])&&!e(t[o],!0))return!1}else{var a=!i&&!r.includes(o),s=!n.includes(t[o]);if(a||s)return!1}return!0}(e)},help:\"setSubscribedTracks cannot be used when setSubscribeToTracksAutomatically is enabled, and should be of the form: \"+\"true\".concat(Eo()?\"\":\" | 'avatar'\",\" | false | 'staged' | { [audio: true|false|'staged'], [video: true|false|'staged'], [screenAudio: true|false|'staged'], [screenVideo: true|false|'staged'] }\")},setAudio:!0,setVideo:!0,setScreenShare:{validate:function(e){return!1===e},help:\"setScreenShare must be false, as it's only meant for stopping remote participants' screen shares\"},eject:!0,updatePermissions:{validate:function(e){for(var t=0,n=Object.entries(e);t1&&void 0!==arguments[1]?arguments[1]:{};if(t(this,te),d(a(r=ee.call(this)),\"startListeningForDeviceChanges\",(function(){Pa(r.handleDeviceChange)})),d(a(r),\"stopListeningForDeviceChanges\",(function(){Aa(r.handleDeviceChange)})),d(a(r),\"handleDeviceChange\",(function(e){e=e.map((function(e){return JSON.parse(JSON.stringify(e))})),r.emitDailyJSEvent({action:\"available-devices-updated\",availableDevices:e})})),d(a(r),\"handleNativeAppStateChange\",function(){var e=p((function*(e){if(\"destroyed\"===e)return console.warn(\"App has been destroyed before leaving the meeting. Cleaning up all the resources!\"),void(yield r.destroy());var t=\"active\"===e;r.disableReactNativeAutoDeviceManagement(\"video\")||(t?r.camUnmutedBeforeLosingNativeActiveState&&r.setLocalVideo(!0):(r.camUnmutedBeforeLosingNativeActiveState=r.localVideo(),r.camUnmutedBeforeLosingNativeActiveState&&r.setLocalVideo(!1)))}));return function(t){return e.apply(this,arguments)}}()),d(a(r),\"handleNativeAudioFocusChange\",(function(e){r.disableReactNativeAutoDeviceManagement(\"audio\")||(r._hasNativeAudioFocus=e,r.toggleParticipantAudioBasedOnNativeAudioFocus(),r._hasNativeAudioFocus?r.micUnmutedBeforeLosingNativeAudioFocus&&r.setLocalAudio(!0):(r.micUnmutedBeforeLosingNativeAudioFocus=r.localAudio(),r.setLocalAudio(!1)))})),d(a(r),\"handleNativeSystemScreenCaptureStop\",(function(){r.stopScreenShare()})),r.strictMode=void 0===o.strictMode||o.strictMode,r.allowMultipleCallInstances=null!==(n=o.allowMultipleCallInstances)&&void 0!==n&&n,Object.keys(Va).length&&(r._logDuplicateInstanceAttempt(),!r.allowMultipleCallInstances)){if(r.strictMode)throw new Error(\"Duplicate DailyIframe instances are not allowed\");console.warn(\"Using strictMode: false to allow multiple call instances is now deprecated. Set `allowMultipleCallInstances: true`\")}if(window._daily||(window._daily={pendings:[],instances:{}}),r.callClientId=H(),i=a(r),Va[i.callClientId]=i,window._daily.instances[r.callClientId]={},r._sharedTracks={},window._daily.instances[r.callClientId].tracks=r._sharedTracks,o.dailyJsVersion=te.version(),r._iframe=e,r._callObjectMode=\"none\"===o.layout&&!r._iframe,r._preloadCache={subscribeToTracksAutomatically:!0,audioDeviceId:null,videoDeviceId:null,outputDeviceId:null,inputSettings:null,sendSettings:null,videoTrackForNetworkConnectivityTest:null,videoTrackForConnectionQualityTest:null},void 0!==o.showLocalVideo?r._callObjectMode?console.error(\"showLocalVideo is not available in call object mode\"):r._showLocalVideo=!!o.showLocalVideo:r._showLocalVideo=!0,void 0!==o.showParticipantsBar?r._callObjectMode?console.error(\"showParticipantsBar is not available in call object mode\"):r._showParticipantsBar=!!o.showParticipantsBar:r._showParticipantsBar=!0,void 0!==o.customIntegrations?r._callObjectMode?console.error(\"customIntegrations is not available in call object mode\"):r._customIntegrations=o.customIntegrations:r._customIntegrations={},void 0!==o.customTrayButtons?r._callObjectMode?console.error(\"customTrayButtons is not available in call object mode\"):r._customTrayButtons=o.customTrayButtons:r._customTrayButtons={},void 0!==o.activeSpeakerMode?r._callObjectMode?console.error(\"activeSpeakerMode is not available in call object mode\"):r._activeSpeakerMode=!!o.activeSpeakerMode:r._activeSpeakerMode=!1,o.receiveSettings?r._callObjectMode?r._receiveSettings=o.receiveSettings:console.error(\"receiveSettings is only available in call object mode\"):r._receiveSettings={},r.validateProperties(o),r.properties=Ra({},o),r._preloadCache.inputSettings||(r._preloadCache.inputSettings={}),o.inputSettings&&o.inputSettings.audio&&(r._preloadCache.inputSettings.audio=o.inputSettings.audio),o.inputSettings&&o.inputSettings.video&&(r._preloadCache.inputSettings.video=o.inputSettings.video),r._callObjectLoader=r._callObjectMode?new ra(r.callClientId):null,r._callState=br,r._isPreparingToJoin=!1,r._accessState={access:xr},r._meetingSessionSummary={},r._finalSummaryOfPrevSession={},r._meetingSessionState=Es(Ga,r._callObjectMode),r._nativeInCallAudioMode=Ja,r._participants={},r._isScreenSharing=!1,r._participantCounts=qa,r._rmpPlayerState={},r._waitingParticipants={},r._network={threshold:\"good\",quality:100},r._activeSpeaker={},r._localAudioLevel=0,r._isLocalAudioLevelObserverRunning=!1,r._remoteParticipantsAudioLevel={},r._isRemoteParticipantsAudioLevelObserverRunning=!1,r._maxAppMessageSize=so,r._messageChannel=Eo()?new Wo:new qo,r._iframe&&(r._iframe.requestFullscreen?r._iframe.addEventListener(\"fullscreenchange\",(function(){document.fullscreenElement===r._iframe?(r.emitDailyJSEvent({action:Qi}),r.sendMessageToCallMachine({action:Qi})):(r.emitDailyJSEvent({action:Ki}),r.sendMessageToCallMachine({action:Ki}))})):r._iframe.webkitRequestFullscreen&&r._iframe.addEventListener(\"webkitfullscreenchange\",(function(){document.webkitFullscreenElement===r._iframe?(r.emitDailyJSEvent({action:Qi}),r.sendMessageToCallMachine({action:Qi})):(r.emitDailyJSEvent({action:Ki}),r.sendMessageToCallMachine({action:Ki}))}))),Eo()){var s=r.nativeUtils();s.addAudioFocusChangeListener&&s.removeAudioFocusChangeListener&&s.addAppStateChangeListener&&s.removeAppStateChangeListener&&s.addSystemScreenCaptureStopListener&&s.removeSystemScreenCaptureStopListener||console.warn(\"expected (add|remove)(AudioFocusChange|AppActiveStateChange|SystemScreenCaptureStop)Listener to be available in React Native\"),r._hasNativeAudioFocus=!0,s.addAudioFocusChangeListener(r.handleNativeAudioFocusChange),s.addAppStateChangeListener(r.handleNativeAppStateChange),s.addSystemScreenCaptureStopListener(r.handleNativeSystemScreenCaptureStop)}return r._callObjectMode&&r.startListeningForDeviceChanges(),r._messageChannel.addListenerForMessagesFromCallMachine(r.handleMessageFromCallMachine,r.callClientId,a(r)),r}return o(te,[{key:\"destroy\",value:(Z=p((function*(){var e,t;try{yield this.leave()}catch(e){}var n=this._iframe;if(n){var r=n.parentElement;r&&r.removeChild(n)}if(this._messageChannel.removeListener(this.handleMessageFromCallMachine),Eo()){var i=this.nativeUtils();i.removeAudioFocusChangeListener(this.handleNativeAudioFocusChange),i.removeAppStateChangeListener(this.handleNativeAppStateChange),i.removeSystemScreenCaptureStopListener(this.handleNativeSystemScreenCaptureStop)}this._callObjectMode&&this.stopListeningForDeviceChanges(),this.resetMeetingDependentVars(),this._destroyed=!0,this.emitDailyJSEvent({action:\"call-instance-destroyed\"}),delete Va[this.callClientId],(null===(e=window)||void 0===e||null===(t=e._daily)||void 0===t?void 0:t.instances)&&delete window._daily.instances[this.callClientId],this.strictMode&&(this.callClientId=void 0)})),function(){return Z.apply(this,arguments)})},{key:\"isDestroyed\",value:function(){return!!this._destroyed}},{key:\"loadCss\",value:function(e){var t=e.bodyClass,n=e.cssFile,r=e.cssText;return ls(),this.sendMessageToCallMachine({action:\"load-css\",cssFile:this.absoluteUrl(n),bodyClass:t,cssText:r}),this}},{key:\"iframe\",value:function(){return ls(),this._iframe}},{key:\"meetingState\",value:function(){return this._callState}},{key:\"accessState\",value:function(){return ss(this._callObjectMode,\"accessState()\"),this._accessState}},{key:\"participants\",value:function(){return this._participants}},{key:\"participantCounts\",value:function(){return this._participantCounts}},{key:\"waitingParticipants\",value:function(){return ss(this._callObjectMode,\"waitingParticipants()\"),this._waitingParticipants}},{key:\"validateParticipantProperties\",value:function(e,t){for(var n in t){if(!Za[n])throw new Error(\"unrecognized updateParticipant property \".concat(n));if(Za[n].validate&&!Za[n].validate(t[n],this,this._participants[e]))throw new Error(Za[n].help)}}},{key:\"updateParticipant\",value:function(e,t){return this._participants.local&&this._participants.local.session_id===e&&(e=\"local\"),e&&t&&(this.validateParticipantProperties(e,t),this.sendMessageToCallMachine({action:\"update-participant\",id:e,properties:t})),this}},{key:\"updateParticipants\",value:function(e){var t=this._participants.local&&this._participants.local.session_id;for(var n in e)n===t&&(n=\"local\"),n&&e[n]&&this.validateParticipantProperties(n,e[n]);return this.sendMessageToCallMachine({action:\"update-participants\",participants:e}),this}},{key:\"updateWaitingParticipant\",value:(Q=p((function*(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(ss(this._callObjectMode,\"updateWaitingParticipant()\"),ns(this._callState,\"updateWaitingParticipant()\"),\"string\"!=typeof t||\"object\"!==n(r))throw new Error(\"updateWaitingParticipant() must take an id string and a updates object\");return new Promise((function(n,i){e.sendMessageToCallMachine({action:\"daily-method-update-waiting-participant\",id:t,updates:r},(function(e){e.error&&i(e.error),e.id||i(new Error(\"unknown error in updateWaitingParticipant()\")),n({id:e.id})}))}))})),function(){return Q.apply(this,arguments)})},{key:\"updateWaitingParticipants\",value:(z=p((function*(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(ss(this._callObjectMode,\"updateWaitingParticipants()\"),ns(this._callState,\"updateWaitingParticipants()\"),\"object\"!==n(t))throw new Error(\"updateWaitingParticipants() must take a mapping between ids and update objects\");return new Promise((function(n,r){e.sendMessageToCallMachine({action:\"daily-method-update-waiting-participants\",updatesById:t},(function(e){e.error&&r(e.error),e.ids||r(new Error(\"unknown error in updateWaitingParticipants()\")),n({ids:e.ids})}))}))})),function(){return z.apply(this,arguments)})},{key:\"requestAccess\",value:(Y=p((function*(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t.access,r=void 0===n?{level:Lr}:n,i=t.name,o=void 0===i?\"\":i;return ss(this._callObjectMode,\"requestAccess()\"),ns(this._callState,\"requestAccess()\"),new Promise((function(t,n){e.sendMessageToCallMachine({action:\"daily-method-request-access\",access:r,name:o},(function(e){e.error&&n(e.error),e.access||n(new Error(\"unknown error in requestAccess()\")),t({access:e.access,granted:e.granted})}))}))})),function(){return Y.apply(this,arguments)})},{key:\"localAudio\",value:function(){return this._participants.local?![\"blocked\",\"off\"].includes(this._participants.local.tracks.audio.state):null}},{key:\"localVideo\",value:function(){return this._participants.local?![\"blocked\",\"off\"].includes(this._participants.local.tracks.video.state):null}},{key:\"setLocalAudio\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return\"forceDiscardTrack\"in t&&(Eo()?(console.warn(\"forceDiscardTrack option not supported in React Native; ignoring\"),t={}):e&&(console.warn(\"forceDiscardTrack option only supported when calling setLocalAudio(false); ignoring\"),t={})),this.sendMessageToCallMachine({action:\"local-audio\",state:e,options:t}),this}},{key:\"localScreenAudio\",value:function(){return this._participants.local?![\"blocked\",\"off\"].includes(this._participants.local.tracks.screenAudio.state):null}},{key:\"localScreenVideo\",value:function(){return this._participants.local?![\"blocked\",\"off\"].includes(this._participants.local.tracks.screenVideo.state):null}},{key:\"updateScreenShare\",value:function(e){if(this._isScreenSharing)return this.sendMessageToCallMachine({action:\"local-screen-update\",options:e}),this;console.warn(\"There is no screen share in progress. Try calling startScreenShare first.\")}},{key:\"setLocalVideo\",value:function(e){return this.sendMessageToCallMachine({action:\"local-video\",state:e}),this}},{key:\"getReceiveSettings\",value:(q=p((function*(e){var t=this,r=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).showInheritedValues,i=void 0!==r&&r;if(ss(this._callObjectMode,\"getReceiveSettings()\"),!this._callMachineInitialized)return this._receiveSettings;switch(n(e)){case\"string\":return new Promise((function(n){t.sendMessageToCallMachine({action:\"get-single-participant-receive-settings\",id:e,showInheritedValues:i},(function(e){n(e.receiveSettings)}))}));case\"undefined\":return this._receiveSettings;default:throw new Error('first argument to getReceiveSettings() must be a participant id (or \"base\"), or there should be no arguments')}})),function(e){return q.apply(this,arguments)})},{key:\"updateReceiveSettings\",value:(G=p((function*(e){var t=this;if(ss(this._callObjectMode,\"updateReceiveSettings()\"),!hs(e,{allowAllParticipantsKey:!0}))throw new Error(vs({allowAllParticipantsKey:!0}));return ns(this._callState,\"updateReceiveSettings()\",\"To specify receive settings earlier, use the receiveSettings config property.\"),new Promise((function(n){t.sendMessageToCallMachine({action:\"update-receive-settings\",receiveSettings:e},(function(e){n({receiveSettings:e.receiveSettings})}))}))})),function(e){return G.apply(this,arguments)})},{key:\"_prepInputSettingsToPresentToUser\",value:function(e){var t,n,r,i,o,a,s,c;if(e){var l={},u=\"none\"===(null===(t=e.audio)||void 0===t||null===(n=t.processor)||void 0===n?void 0:n.type)&&(null===(r=e.audio)||void 0===r||null===(i=r.processor)||void 0===i?void 0:i._isDefaultWhenNone);if(e.audio&&!u){var d=Ra({},e.audio.processor);delete d._isDefaultWhenNone,l.audio=Ra(Ra({},e.audio),{},{processor:d})}var h=\"none\"===(null===(o=e.video)||void 0===o||null===(a=o.processor)||void 0===a?void 0:a.type)&&(null===(s=e.video)||void 0===s||null===(c=s.processor)||void 0===c?void 0:c._isDefaultWhenNone);if(e.video&&!h){var p=Ra({},e.video.processor);delete p._isDefaultWhenNone,l.video=Ra(Ra({},e.video),{},{processor:p})}return l}}},{key:\"getInputSettings\",value:function(){var e=this;return ls(),new Promise((function(t){t(e._getInputSettings())}))}},{key:\"_getInputSettings\",value:function(){var e,t,n,r,i,o,a,s,c={processor:{type:\"none\",_isDefaultWhenNone:!0}};this._inputSettings?(e=(null===(n=this._inputSettings)||void 0===n?void 0:n.video)||c,t=(null===(r=this._inputSettings)||void 0===r?void 0:r.audio)||c):(e=(null===(i=this._preloadCache)||void 0===i||null===(o=i.inputSettings)||void 0===o?void 0:o.video)||c,t=(null===(a=this._preloadCache)||void 0===a||null===(s=a.inputSettings)||void 0===s?void 0:s.audio)||c);var l={audio:t,video:e};return this._prepInputSettingsToPresentToUser(l)}},{key:\"updateInputSettings\",value:($=p((function*(e){var t=this;return ls(),ps(e)?(e&&(this._preloadCache.inputSettings||(this._preloadCache.inputSettings={}),fs(e,this.properties.dailyConfig),e.audio&&(this._preloadCache.inputSettings.audio=e.audio),e.video&&(this._preloadCache.inputSettings.video=e.video)),e.video||e.audio?this._callObjectMode&&!this._callMachineInitialized?this._getInputSettings():new Promise((function(n,r){t.sendMessageToCallMachine({action:\"update-input-settings\",inputSettings:e},(function(e){e.error?r(e.error):n({inputSettings:t._prepInputSettingsToPresentToUser(e.inputSettings)})}))})):this._getInputSettings()):(console.error(gs()),Promise.reject(gs()))})),function(e){return $.apply(this,arguments)})},{key:\"setBandwidth\",value:function(e){var t=e.kbs,n=e.trackConstraints;if(ls(),this._callMachineInitialized)return this.sendMessageToCallMachine({action:\"set-bandwidth\",kbs:t,trackConstraints:n}),this}},{key:\"getDailyLang\",value:function(){var e=this;if(ls(),this._callMachineInitialized)return new Promise((function(t){e.sendMessageToCallMachine({action:\"get-daily-lang\"},(function(e){delete e.action,delete e.callbackStamp,t(e)}))}))}},{key:\"setDailyLang\",value:function(e){return ls(),this.sendMessageToCallMachine({action:\"set-daily-lang\",lang:e}),this}},{key:\"setProxyUrl\",value:function(e){return this.sendMessageToCallMachine({action:\"set-proxy-url\",proxyUrl:e}),this}},{key:\"setIceConfig\",value:function(e){return this.sendMessageToCallMachine({action:\"set-ice-config\",iceConfig:e}),this}},{key:\"meetingSessionSummary\",value:function(){return[Cr,Mr].includes(this._callState)?this._finalSummaryOfPrevSession:this._meetingSessionSummary}},{key:\"getMeetingSession\",value:(J=p((function*(){var e=this;return console.warn(\"getMeetingSession() is deprecated: use meetingSessionSummary(), which will return immediately\"),ns(this._callState,\"getMeetingSession()\"),new Promise((function(t){e.sendMessageToCallMachine({action:\"get-meeting-session\"},(function(e){delete e.action,delete e.callbackStamp,t(e)}))}))})),function(){return J.apply(this,arguments)})},{key:\"meetingSessionState\",value:function(){return ns(this._callState,\"meetingSessionState\"),this._meetingSessionState}},{key:\"setMeetingSessionData\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"replace\";ss(this._callObjectMode,\"setMeetingSessionData()\"),ns(this._callState,\"setMeetingSessionData\");try{!function(e,t){new Xo({data:e,mergeStrategy:t})}(e,t)}catch(e){throw console.error(e),e}try{this.sendMessageToCallMachine({action:\"set-session-data\",data:e,mergeStrategy:t})}catch(e){throw new Error(\"Error setting meeting session data: \".concat(e))}}},{key:\"setUserName\",value:function(e,t){var n=this;return this.properties.userName=e,new Promise((function(r){n.sendMessageToCallMachine({action:\"set-user-name\",name:null!=e?e:\"\",thisMeetingOnly:Eo()||!!t&&!!t.thisMeetingOnly},(function(e){delete e.action,delete e.callbackStamp,r(e)}))}))}},{key:\"setUserData\",value:(V=p((function*(e){var t=this;try{ds(e)}catch(e){throw console.error(e),e}if(this.properties.userData=e,this._callMachineInitialized)return new Promise((function(n){try{t.sendMessageToCallMachine({action:\"set-user-data\",userData:e},(function(e){delete e.action,delete e.callbackStamp,n(e)}))}catch(e){throw new Error(\"Error setting user data: \".concat(e))}}))})),function(e){return V.apply(this,arguments)})},{key:\"validateAudioLevelInterval\",value:function(e){if(e&&(e<100||\"number\"!=typeof e))throw new Error(\"The interval must be a number greater than or equal to 100 milliseconds.\")}},{key:\"startLocalAudioLevelObserver\",value:function(e){var t=this;if(\"undefined\"==typeof AudioWorkletNode&&!Eo())throw new Error(\"startLocalAudioLevelObserver() is not supported on this browser\");if(this.validateAudioLevelInterval(e),this._callMachineInitialized)return this._isLocalAudioLevelObserverRunning=!0,new Promise((function(n,r){t.sendMessageToCallMachine({action:\"start-local-audio-level-observer\",interval:e},(function(e){t._isLocalAudioLevelObserverRunning=!e.error,e.error?r({error:e.error}):n()}))}));this._preloadCache.localAudioLevelObserver={enabled:!0,interval:e}}},{key:\"isLocalAudioLevelObserverRunning\",value:function(){return this._isLocalAudioLevelObserverRunning}},{key:\"stopLocalAudioLevelObserver\",value:function(){this._preloadCache.localAudioLevelObserver=null,this._localAudioLevel=0,this._isLocalAudioLevelObserverRunning=!1,this.sendMessageToCallMachine({action:\"stop-local-audio-level-observer\"})}},{key:\"startRemoteParticipantsAudioLevelObserver\",value:function(e){var t=this;if(this.validateAudioLevelInterval(e),this._callMachineInitialized)return this._isRemoteParticipantsAudioLevelObserverRunning=!0,new Promise((function(n,r){t.sendMessageToCallMachine({action:\"start-remote-participants-audio-level-observer\",interval:e},(function(e){t._isRemoteParticipantsAudioLevelObserverRunning=!e.error,e.error?r({error:e.error}):n()}))}));this._preloadCache.remoteParticipantsAudioLevelObserver={enabled:!0,interval:e}}},{key:\"isRemoteParticipantsAudioLevelObserverRunning\",value:function(){return this._isRemoteParticipantsAudioLevelObserverRunning}},{key:\"stopRemoteParticipantsAudioLevelObserver\",value:function(){this._preloadCache.remoteParticipantsAudioLevelObserver=null,this._remoteParticipantsAudioLevel={},this._isRemoteParticipantsAudioLevelObserverRunning=!1,this.sendMessageToCallMachine({action:\"stop-remote-participants-audio-level-observer\"})}},{key:\"startCamera\",value:(U=p((function*(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(ss(this._callObjectMode,\"startCamera()\"),is(this._callState,this._isPreparingToJoin,\"startCamera()\",\"Did you mean to use setLocalAudio() and/or setLocalVideo() instead?\"),this.needsLoad())try{yield this.load(t)}catch(e){return Promise.reject(e)}else{if(this._didPreAuth){if(t.url&&t.url!==this.properties.url)return console.error(\"url in startCamera() is different than the one used in preAuth()\"),Promise.reject();if(t.token&&t.token!==this.properties.token)return console.error(\"token in startCamera() is different than the one used in preAuth()\"),Promise.reject()}this.validateProperties(t),this.properties=Ra(Ra({},this.properties),t)}return new Promise((function(t){e.sendMessageToCallMachine({action:\"start-camera\",properties:ts(e.properties,e.callClientId),preloadCache:ts(e._preloadCache,e.callClientId)},(function(e){delete e.action,delete e.callbackStamp,t(e)}))}))})),function(){return U.apply(this,arguments)})},{key:\"validateCustomTrack\",value:function(e,t,n){if(n&&n.length>50)throw new Error(\"Custom track `trackName` must not be more than 50 characters\");if(t&&\"music\"!==t&&\"speech\"!==t&&!(t instanceof Object))throw new Error(\"Custom track `mode` must be either `music` | `speech` | `DailyMicAudioModeSettings` or `undefined`\");if(!!n&&[\"cam-audio\",\"cam-video\",\"screen-video\",\"screen-audio\",\"rmpAudio\",\"rmpVideo\",\"customVideoDefaults\"].includes(n))throw new Error(\"Custom track `trackName` must not match a track name already used by daily: cam-audio, cam-video, customVideoDefaults, screen-video, screen-audio, rmpAudio, rmpVideo\");if(!(e instanceof MediaStreamTrack))throw new Error(\"Custom tracks provided must be instances of MediaStreamTrack\")}},{key:\"startCustomTrack\",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{track:track,mode:mode,trackName:trackName};return ls(),ns(this._callState,\"startCustomTrack()\"),this.validateCustomTrack(t.track,t.mode,t.trackName),new Promise((function(n,r){e._sharedTracks.customTrack=t.track,t.track=fo,e.sendMessageToCallMachine({action:\"start-custom-track\",properties:t},(function(e){e.error?r({error:e.error}):n(e.mediaTag)}))}))}},{key:\"stopCustomTrack\",value:function(e){var t=this;return ls(),ns(this._callState,\"stopCustomTrack()\"),new Promise((function(n){t.sendMessageToCallMachine({action:\"stop-custom-track\",mediaTag:e},(function(e){n(e.mediaTag)}))}))}},{key:\"setCamera\",value:function(e){var t=this;return us(),os(this._callMachineInitialized,\"setCamera()\"),new Promise((function(n){t.sendMessageToCallMachine({action:\"set-camera\",cameraDeviceId:e},(function(e){n({device:e.device})}))}))}},{key:\"setAudioDevice\",value:(F=p((function*(e){return us(),this.nativeUtils().setAudioDevice(e),{deviceId:yield this.nativeUtils().getAudioDevice()}})),function(e){return F.apply(this,arguments)})},{key:\"cycleCamera\",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return new Promise((function(n){e.sendMessageToCallMachine({action:\"cycle-camera\",properties:t},(function(e){n({device:e.device})}))}))}},{key:\"cycleMic\",value:function(){var e=this;return ls(),new Promise((function(t){e.sendMessageToCallMachine({action:\"cycle-mic\"},(function(e){t({device:e.device})}))}))}},{key:\"getCameraFacingMode\",value:function(){var e=this;return us(),new Promise((function(t){e.sendMessageToCallMachine({action:\"get-camera-facing-mode\"},(function(e){t(e.facingMode)}))}))}},{key:\"setInputDevicesAsync\",value:(B=p((function*(e){var t=this,n=e.audioDeviceId,r=e.videoDeviceId,i=e.audioSource,o=e.videoSource;return ls(),void 0!==i&&(n=i),void 0!==o&&(r=o),n&&(this._preloadCache.audioDeviceId=n,this._sharedTracks.audioDeviceId=n),r&&(this._preloadCache.videoDeviceId=r,this._sharedTracks.videoDeviceId=r),this._callObjectMode&&this.needsLoad()?{camera:{deviceId:this._preloadCache.videoDeviceId},mic:{deviceId:this._preloadCache.audioDeviceId},speaker:{deviceId:this._preloadCache.outputDeviceId}}:(n instanceof MediaStreamTrack&&(n=fo),r instanceof MediaStreamTrack&&(r=fo),new Promise((function(e){t.sendMessageToCallMachine({action:\"set-input-devices\",audioDeviceId:n,videoDeviceId:r},(function(n){delete n.action,delete n.callbackStamp,n.returnPreloadCache?e({camera:{deviceId:t._preloadCache.videoDeviceId},mic:{deviceId:t._preloadCache.audioDeviceId},speaker:{deviceId:t._preloadCache.outputDeviceId}}):e(n)}))})))})),function(e){return B.apply(this,arguments)})},{key:\"setOutputDeviceAsync\",value:(R=p((function*(e){var t=this,n=e.outputDeviceId;return ls(),n&&(this._preloadCache.outputDeviceId=n),this._callObjectMode&&this.needsLoad()?{camera:{deviceId:this._preloadCache.videoDeviceId},mic:{deviceId:this._preloadCache.audioDeviceId},speaker:{deviceId:this._preloadCache.outputDeviceId}}:new Promise((function(e){t.sendMessageToCallMachine({action:\"set-output-device\",outputDeviceId:n},(function(n){delete n.action,delete n.callbackStamp,n.returnPreloadCache?e({camera:{deviceId:t._preloadCache.videoDeviceId},mic:{deviceId:t._preloadCache.audioDeviceId},speaker:{deviceId:t._preloadCache.outputDeviceId}}):e(n)}))}))})),function(e){return R.apply(this,arguments)})},{key:\"getInputDevices\",value:(N=p((function*(){var e=this;return this._callObjectMode&&this.needsLoad()?{camera:{deviceId:this._preloadCache.videoDeviceId},mic:{deviceId:this._preloadCache.audioDeviceId},speaker:{deviceId:this._preloadCache.outputDeviceId}}:new Promise((function(t){e.sendMessageToCallMachine({action:\"get-input-devices\"},(function(n){delete n.action,delete n.callbackStamp,n.returnPreloadCache?t({camera:{deviceId:e._preloadCache.videoDeviceId},mic:{deviceId:e._preloadCache.audioDeviceId},speaker:{deviceId:e._preloadCache.outputDeviceId}}):t(n)}))}))})),function(){return N.apply(this,arguments)})},{key:\"nativeInCallAudioMode\",value:function(){return us(),this._nativeInCallAudioMode}},{key:\"setNativeInCallAudioMode\",value:function(e){if(us(),[Ja,$a].includes(e)){if(e!==this._nativeInCallAudioMode)return this._nativeInCallAudioMode=e,!this.disableReactNativeAutoDeviceManagement(\"audio\")&&rs(this._callState,this._isPreparingToJoin)&&this.nativeUtils().setAudioMode(this._nativeInCallAudioMode),this}else console.error(\"invalid in-call audio mode specified: \",e)}},{key:\"preAuth\",value:(L=p((function*(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(ss(this._callObjectMode,\"preAuth()\"),is(this._callState,this._isPreparingToJoin,\"preAuth()\"),this.needsLoad()&&(yield this.load(t)),!t.url)throw new Error(\"preAuth() requires at least a url to be provided\");return this.validateProperties(t),this.properties=Ra(Ra({},this.properties),t),new Promise((function(t,n){e.sendMessageToCallMachine({action:\"daily-method-preauth\",properties:ts(e.properties,e.callClientId),preloadCache:ts(e._preloadCache,e.callClientId)},(function(r){return r.error?n(r.error):r.access?(e._didPreAuth=!0,void t({access:r.access})):n(new Error(\"unknown error in preAuth()\"))}))}))})),function(){return L.apply(this,arguments)})},{key:\"load\",value:(x=p((function*(e){var t=this;if(this.needsLoad()){if(this._destroyed&&(this._logUseAfterDestroy(),this.strictMode))throw new Error(\"Use after destroy\");if(e&&(this.validateProperties(e),this.properties=Ra(Ra({},this.properties),e)),!this._callObjectMode&&!this.properties.url)throw new Error(\"can't load iframe meeting because url property isn't set\");return this._updateCallState(wr),this.emitDailyJSEvent({action:ai}),this._callObjectMode?new Promise((function(e,n){t._callObjectLoader.cancel();var r=Date.now();t._callObjectLoader.load(t.properties.dailyConfig,(function(n){t._bundleLoadTime=n?\"no-op\":Date.now()-r,t._updateCallState(Sr),n&&t.emitDailyJSEvent({action:ci}),e()}),(function(e,r){if(t.emitDailyJSEvent({action:si}),!r){t._updateCallState(Mr),t.resetMeetingDependentVars();var i={action:ao,errorMsg:e.msg,error:{type:\"connection-error\",msg:\"Failed to load call object bundle.\",details:{on:\"load\",sourceError:e,bundleUrl:X(t.properties.dailyConfig)}}};t._maybeSendToSentry(i),t.emitDailyJSEvent(i),n(e.msg)}}))})):(this._iframe.src=K(this.assembleMeetingUrl(),this.properties.dailyConfig),new Promise((function(e,n){t._loadedCallback=function(r){t._callState!==Mr?(t._updateCallState(Sr),(t.properties.cssFile||t.properties.cssText)&&t.loadCss(t.properties),e()):n(r)}})))}})),function(e){return x.apply(this,arguments)})},{key:\"join\",value:(j=p((function*(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this._testCallInProgress&&this.stopTestCallQuality();var n=!1;if(this.needsLoad()){this.updateIsPreparingToJoin(!0);try{yield this.load(t)}catch(e){return this.updateIsPreparingToJoin(!1),Promise.reject(e)}}else{if(n=!(!this.properties.cssFile&&!this.properties.cssText),this._didPreAuth){if(t.url&&t.url!==this.properties.url)return console.error(\"url in join() is different than the one used in preAuth()\"),this.updateIsPreparingToJoin(!1),Promise.reject();if(t.token&&t.token!==this.properties.token)return console.error(\"token in join() is different than the one used in preAuth()\"),this.updateIsPreparingToJoin(!1),Promise.reject()}if(t.url&&!this._callObjectMode&&t.url&&t.url!==this.properties.url)return console.error(\"url in join() is different than the one used in load() (\".concat(this.properties.url,\" -> \").concat(t.url,\")\")),this.updateIsPreparingToJoin(!1),Promise.reject();this.validateProperties(t),this.properties=Ra(Ra({},this.properties),t)}return void 0!==t.showLocalVideo&&(this._callObjectMode?console.error(\"showLocalVideo is not available in callObject mode\"):this._showLocalVideo=!!t.showLocalVideo),void 0!==t.showParticipantsBar&&(this._callObjectMode?console.error(\"showParticipantsBar is not available in callObject mode\"):this._showParticipantsBar=!!t.showParticipantsBar),this._callState===Er||this._callState===kr?(console.warn(\"already joined meeting, call leave() before joining again\"),void this.updateIsPreparingToJoin(!1)):(this._updateCallState(kr,!1),this.emitDailyJSEvent({action:di}),this._preloadCache.inputSettings||(this._preloadCache.inputSettings={}),t.inputSettings&&t.inputSettings.audio&&(this._preloadCache.inputSettings.audio=t.inputSettings.audio),t.inputSettings&&t.inputSettings.video&&(this._preloadCache.inputSettings.video=t.inputSettings.video),this.sendMessageToCallMachine({action:\"join-meeting\",properties:ts(this.properties,this.callClientId),preloadCache:ts(this._preloadCache,this.callClientId)}),new Promise((function(t,r){e._joinedCallback=function(i,o){if(e._callState!==Mr){if(e._updateCallState(Er),i)for(var a in i){if(e._callObjectMode){var s=e._callMachine().store;va(i[a],s),ma(i[a],s),_a(i[a],e._participants[a],s)}e._participants[a]=Ra({},i[a]),e.toggleParticipantAudioBasedOnNativeAudioFocus()}n&&e.loadCss(e.properties),t(i)}else r(o)}})))})),function(){return j.apply(this,arguments)})},{key:\"leave\",value:(D=p((function*(){var e=this;return this._testCallInProgress&&this.stopTestCallQuality(),new Promise((function(t){e._callState===Cr||e._callState===Mr?t():e._callObjectLoader&&!e._callObjectLoader.loaded?(e._callObjectLoader.cancel(),e._updateCallState(Cr),e.resetMeetingDependentVars(),e.emitDailyJSEvent({action:Cr}),t()):(e._resolveLeave=t,e.sendMessageToCallMachine({action:\"leave-meeting\"}))}))})),function(){return D.apply(this,arguments)})},{key:\"startScreenShare\",value:(A=p((function*(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(os(this._callMachineInitialized,\"startScreenShare()\"),t.screenVideoSendSettings&&this._validateVideoSendSettings(\"screenVideo\",t.screenVideoSendSettings),t.mediaStream&&(this._sharedTracks.screenMediaStream=t.mediaStream,t.mediaStream=fo),\"undefined\"!=typeof DailyNativeUtils&&void 0!==DailyNativeUtils.isIOS&&DailyNativeUtils.isIOS){var n=this.nativeUtils();if(yield n.isScreenBeingCaptured())return void this.emitDailyJSEvent({action:oo,type:\"screen-share-error\",errorMsg:\"Could not start the screen sharing. The screen is already been captured!\"});n.setSystemScreenCaptureStartCallback((function(){n.setSystemScreenCaptureStartCallback(null),e.sendMessageToCallMachine({action:uo,captureOptions:t})})),n.presentSystemScreenCapturePrompt()}else this.sendMessageToCallMachine({action:uo,captureOptions:t})})),function(){return A.apply(this,arguments)})},{key:\"stopScreenShare\",value:function(){os(this._callMachineInitialized,\"stopScreenShare()\"),this.sendMessageToCallMachine({action:\"local-screen-stop\"})}},{key:\"startRecording\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.sendMessageToCallMachine(Ra({action:\"local-recording-start\"},e))}},{key:\"updateRecording\",value:function(e){var t=e.layout,n=void 0===t?{preset:\"default\"}:t,r=e.instanceId;this.sendMessageToCallMachine({action:\"daily-method-update-recording\",layout:n,instanceId:r})}},{key:\"stopRecording\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.sendMessageToCallMachine(Ra({action:\"local-recording-stop\"},e))}},{key:\"startLiveStreaming\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.sendMessageToCallMachine(Ra({action:\"daily-method-start-live-streaming\"},e))}},{key:\"updateLiveStreaming\",value:function(e){var t=e.layout,n=void 0===t?{preset:\"default\"}:t,r=e.instanceId;this.sendMessageToCallMachine({action:\"daily-method-update-live-streaming\",layout:n,instanceId:r})}},{key:\"addLiveStreamingEndpoints\",value:function(e){var t=e.endpoints,n=e.instanceId;this.sendMessageToCallMachine({action:ho,endpointsOp:bo,endpoints:t,instanceId:n})}},{key:\"removeLiveStreamingEndpoints\",value:function(e){var t=e.endpoints,n=e.instanceId;this.sendMessageToCallMachine({action:ho,endpointsOp:wo,endpoints:t,instanceId:n})}},{key:\"stopLiveStreaming\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.sendMessageToCallMachine(Ra({action:\"daily-method-stop-live-streaming\"},e))}},{key:\"validateDailyConfig\",value:function(e){e.camSimulcastEncodings&&(console.warn(\"camSimulcastEncodings is deprecated. Use sendSettings, found in DailyCallOptions, to provide camera simulcast settings.\"),this.validateSimulcastEncodings(e.camSimulcastEncodings)),e.screenSimulcastEncodings&&console.warn(\"screenSimulcastEncodings is deprecated. Use sendSettings, found in DailyCallOptions, to provide screen simulcast settings.\"),jo()&&e.noAutoDefaultDeviceChange&&console.warn(\"noAutoDefaultDeviceChange is not supported on Android, and will be ignored.\")}},{key:\"validateSimulcastEncodings\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(e){if(!(e instanceof Array||Array.isArray(e)))throw new Error(\"encodings must be an Array\");if(!ks(e.length,1,3))throw new Error(\"encodings must be an Array with between 1 to \".concat(3,\" layers\"));for(var r=0;r=200)throw new Error(\"Error starting dial out: displayName length must be less than 200\")}if(e.userId){if(\"string\"!=typeof e.userId)throw new Error(\"Error starting dial out: userId must be a string\");if(e.userId.length>36)throw new Error(\"Error starting dial out: userId length must be less than or equal to 36\")}return new Promise((function(n,r){t.sendMessageToCallMachine(Ra({action:\"dialout-start\"},e),(function(e){e.error?r(e.error):n(e)}))}))})),function(e){return M.apply(this,arguments)})},{key:\"stopDialOut\",value:function(e){var t=this;return ns(this._callState,\"stopDialOut()\"),new Promise((function(n,r){t.sendMessageToCallMachine(Ra({action:\"dialout-stop\"},e),(function(e){e.error?r(e.error):n(e)}))}))}},{key:\"sipCallTransfer\",value:(C=p((function*(e){var t=this;if(ns(this._callState,\"sipCallTransfer()\"),!e)throw new Error(\"sipCallTransfer() requires a sessionId and toEndPoint\");return e.useSipRefer=!1,ws(e,\"sipCallTransfer\"),new Promise((function(n,r){t.sendMessageToCallMachine(Ra({action:So},e),(function(e){e.error?r(e.error):n(e)}))}))})),function(e){return C.apply(this,arguments)})},{key:\"sipRefer\",value:(E=p((function*(e){var t=this;if(ns(this._callState,\"sipRefer()\"),!e)throw new Error(\"sessionId and toEndPoint are mandatory parameter\");return e.useSipRefer=!0,ws(e,\"sipRefer\"),new Promise((function(n,r){t.sendMessageToCallMachine(Ra({action:So},e),(function(e){e.error?r(e.error):n(e)}))}))})),function(e){return E.apply(this,arguments)})},{key:\"sendDTMF\",value:(k=p((function*(e){var t=this;return ns(this._callState,\"sendDTMF()\"),function(e){var t=e.sessionId,n=e.tones;if(!t||!n)throw new Error(\"sessionId and tones are mandatory parameter\");if(\"string\"!=typeof t||\"string\"!=typeof n)throw new Error(\"sessionId and tones should be of string type\");if(n.length>20)throw new Error(\"tones string must be upto 20 characters\");var r=/[^0-9A-D*#]/g,i=n.match(r);if(i&&i[0])throw new Error(\"\".concat(i[0],\" is not valid DTMF tone\"))}(e),new Promise((function(n,r){t.sendMessageToCallMachine(Ra({action:\"send-dtmf\"},e),(function(e){e.error?r(e.error):n(e)}))}))})),function(e){return k.apply(this,arguments)})},{key:\"getNetworkStats\",value:function(){var e=this;if(this._callState!==Er){return{stats:{latest:{}}}}return new Promise((function(t){e.sendMessageToCallMachine({action:\"get-calc-stats\"},(function(n){t(Ra({stats:n.stats},e._network))}))}))}},{key:\"testWebsocketConnectivity\",value:(S=p((function*(){var e=this;if(as(this._testCallInProgress,\"testWebsocketConnectivity()\"),this.needsLoad())try{yield this.load()}catch(e){return Promise.reject(e)}return new Promise((function(t,n){e.sendMessageToCallMachine({action:\"test-websocket-connectivity\"},(function(e){e.error?n(e.error):t(e.results)}))}))})),function(){return S.apply(this,arguments)})},{key:\"abortTestWebsocketConnectivity\",value:function(){this.sendMessageToCallMachine({action:\"abort-test-websocket-connectivity\"})}},{key:\"_validateVideoTrackForNetworkTests\",value:function(e){return e?e instanceof MediaStreamTrack?!!xa(e,{isLocalScreenVideo:!1})||(console.error(\"Video track is not playable. This test needs a live video track.\"),!1):(console.error(\"Video track needs to be of type `MediaStreamTrack`.\"),!1):(console.error(\"Missing video track. You must provide a video track in order to run this test.\"),!1)}},{key:\"testCallQuality\",value:(w=p((function*(){var t=this;ls(),ss(this._callObjectMode,\"testCallQuality()\"),os(this._callMachineInitialized,\"testCallQuality()\",null,!0),is(this._callState,this._isPreparingToJoin,\"testCallQuality()\");var n=this._testCallAlreadyInProgress,r=function(e){n||(t._testCallInProgress=e)};if(r(!0),this.needsLoad())try{var i=this._callState;yield this.load(),this._callState=i}catch(e){return r(!1),Promise.reject(e)}return new Promise((function(n){t.sendMessageToCallMachine({action:\"test-call-quality\",dailyJsVersion:t.properties.dailyJsVersion},(function(i){var o=i.results,a=o.result,s=e(o,La);if(\"failed\"===a){var c,l=Ra({},s);null!==(c=s.error)&&void 0!==c&&c.details?(s.error.details=JSON.parse(s.error.details),l.error=Ra(Ra({},l.error),{},{details:Ra({},l.error.details)}),l.error.details.duringTest=\"testCallQuality\"):(l.error=l.error?Ra({},l.error):{},l.error.details={duringTest:\"testCallQuality\"}),t._maybeSendToSentry(l)}r(!1),n(Ra({result:a},s))}))}))})),function(){return w.apply(this,arguments)})},{key:\"stopTestCallQuality\",value:function(){this.sendMessageToCallMachine({action:\"stop-test-call-quality\"})}},{key:\"testConnectionQuality\",value:(b=p((function*(e){var t;Eo()?(console.warn(\"testConnectionQuality() is deprecated: use testPeerToPeerCallQuality() instead\"),t=yield this.testPeerToPeerCallQuality(e)):(console.warn(\"testConnectionQuality() is deprecated: use testCallQuality() instead\"),t=yield this.testCallQuality());var n={result:t.result,secondsElapsed:t.secondsElapsed};return t.data&&(n.data={maxRTT:t.data.maxRoundTripTime,packetLoss:t.data.avgRecvPacketLoss}),n})),function(e){return b.apply(this,arguments)})},{key:\"testPeerToPeerCallQuality\",value:(_=p((function*(e){var t=this;if(as(this._testCallInProgress,\"testPeerToPeerCallQuality()\"),this.needsLoad())try{yield this.load()}catch(e){return Promise.reject(e)}var n=e.videoTrack,r=e.duration;if(!this._validateVideoTrackForNetworkTests(n))throw new Error(\"Video track error\");return this._sharedTracks.videoTrackForConnectionQualityTest=n,new Promise((function(e,n){t.sendMessageToCallMachine({action:\"test-p2p-call-quality\",duration:r},(function(t){t.error?n(t.error):e(t.results)}))}))})),function(e){return _.apply(this,arguments)})},{key:\"stopTestConnectionQuality\",value:function(){Eo()?(console.warn(\"stopTestConnectionQuality() is deprecated: use testPeerToPeerCallQuality() and stopTestPeerToPeerCallQuality() instead\"),this.stopTestPeerToPeerCallQuality()):(console.warn(\"stopTestConnectionQuality() is deprecated: use testCallQuality() and stopTestCallQuality() instead\"),this.stopTestCallQuality())}},{key:\"stopTestPeerToPeerCallQuality\",value:function(){this.sendMessageToCallMachine({action:\"stop-test-p2p-call-quality\"})}},{key:\"testNetworkConnectivity\",value:(y=p((function*(e){var t=this;if(as(this._testCallInProgress,\"testNetworkConnectivity()\"),this.needsLoad())try{yield this.load()}catch(e){return Promise.reject(e)}if(!this._validateVideoTrackForNetworkTests(e))throw new Error(\"Video track error\");return this._sharedTracks.videoTrackForNetworkConnectivityTest=e,new Promise((function(e,n){t.sendMessageToCallMachine({action:\"test-network-connectivity\"},(function(t){t.error?n(t.error):e(t.results)}))}))})),function(e){return y.apply(this,arguments)})},{key:\"abortTestNetworkConnectivity\",value:function(){this.sendMessageToCallMachine({action:\"abort-test-network-connectivity\"})}},{key:\"getCpuLoadStats\",value:function(){var e=this;return new Promise((function(t){if(e._callState===Er){e.sendMessageToCallMachine({action:\"get-cpu-load-stats\"},(function(e){t(e.cpuStats)}))}else t({cpuLoadState:void 0,cpuLoadStateReason:void 0,stats:{}})}))}},{key:\"_validateEncodingLayerHasValidProperties\",value:function(e){var t;if(!((null===(t=Object.keys(e))||void 0===t?void 0:t.length)>0))throw new Error(\"Empty encoding is not allowed. At least one of these valid keys should be specified:\"+Object.values(za))}},{key:\"_validateVideoSendSettings\",value:function(e,t){var r=\"screenVideo\"===e?[\"default-screen-video\",\"detail-optimized\",\"motion-optimized\",\"motion-and-detail-balanced\"]:[\"default-video\",\"bandwidth-optimized\",\"bandwidth-and-quality-balanced\",\"quality-optimized\",\"adaptive-2-layers\",\"adaptive-3-layers\"],i=\"Video send settings should be either an object or one of the supported presets: \".concat(r.join());if(\"string\"==typeof t){if(!r.includes(t))throw new Error(i)}else{if(\"object\"!==n(t))throw new Error(i);if(!t.maxQuality&&!t.encodings&&void 0===t.allowAdaptiveLayers)throw new Error(\"Video send settings must contain at least maxQuality, allowAdaptiveLayers or encodings attribute\");if(t.maxQuality&&-1===[\"low\",\"medium\",\"high\"].indexOf(t.maxQuality))throw new Error(\"maxQuality must be either low, medium or high\");if(t.encodings){var o=!1;switch(Object.keys(t.encodings).length){case 1:o=!t.encodings.low;break;case 2:o=!t.encodings.low||!t.encodings.medium;break;case 3:o=!t.encodings.low||!t.encodings.medium||!t.encodings.high;break;default:o=!0}if(o)throw new Error(\"Encodings must be defined as: low, low and medium, or low, medium and high.\");t.encodings.low&&this._validateEncodingLayerHasValidProperties(t.encodings.low),t.encodings.medium&&this._validateEncodingLayerHasValidProperties(t.encodings.medium),t.encodings.high&&this._validateEncodingLayerHasValidProperties(t.encodings.high)}}}},{key:\"validateUpdateSendSettings\",value:function(e){var t=this;if(!e||0===Object.keys(e).length)throw new Error(\"Send settings must contain at least information for one track!\");Object.entries(e).forEach((function(e){var n=g(e,2),r=n[0],i=n[1];t._validateVideoSendSettings(r,i)}))}},{key:\"updateSendSettings\",value:function(e){var t=this;return this.validateUpdateSendSettings(e),this.needsLoad()?(this._preloadCache.sendSettings=e,{sendSettings:this._preloadCache.sendSettings}):new Promise((function(n,r){t.sendMessageToCallMachine({action:\"update-send-settings\",sendSettings:e},(function(e){e.error?r(e.error):n(e.sendSettings)}))}))}},{key:\"getSendSettings\",value:function(){return this._sendSettings||this._preloadCache.sendSettings}},{key:\"getLocalAudioLevel\",value:function(){return this._localAudioLevel}},{key:\"getRemoteParticipantsAudioLevel\",value:function(){return this._remoteParticipantsAudioLevel}},{key:\"getActiveSpeaker\",value:function(){return ls(),this._activeSpeaker}},{key:\"setActiveSpeakerMode\",value:function(e){return ls(),this.sendMessageToCallMachine({action:\"set-active-speaker-mode\",enabled:e}),this}},{key:\"activeSpeakerMode\",value:function(){return ls(),this._activeSpeakerMode}},{key:\"subscribeToTracksAutomatically\",value:function(){return this._preloadCache.subscribeToTracksAutomatically}},{key:\"setSubscribeToTracksAutomatically\",value:function(e){return ns(this._callState,\"setSubscribeToTracksAutomatically()\",\"Use the subscribeToTracksAutomatically configuration property.\"),this._preloadCache.subscribeToTracksAutomatically=e,this.sendMessageToCallMachine({action:\"daily-method-subscribe-to-tracks-automatically\",enabled:e}),this}},{key:\"enumerateDevices\",value:(v=p((function*(){var e=this;if(this._callObjectMode){var t=yield navigator.mediaDevices.enumerateDevices();return\"Firefox\"===Lo()&&Io().major>115&&Io().major<123&&(t=t.filter((function(e){return\"audiooutput\"!==e.kind}))),{devices:t.map((function(e){var t=JSON.parse(JSON.stringify(e));if(!Eo()&&\"videoinput\"===e.kind&&e.getCapabilities){var n,r=e.getCapabilities();t.facing=(null==r||null===(n=r.facingMode)||void 0===n?void 0:n.length)>=1?r.facingMode[0]:void 0}return t}))}}return new Promise((function(t){e.sendMessageToCallMachine({action:\"enumerate-devices\"},(function(e){t({devices:e.devices})}))}))})),function(){return v.apply(this,arguments)})},{key:\"sendAppMessage\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"*\";if(ns(this._callState,\"sendAppMessage()\"),JSON.stringify(e).length>this._maxAppMessageSize)throw new Error(\"Message data too large. Max size is \"+this._maxAppMessageSize);return this.sendMessageToCallMachine({action:\"app-msg\",data:e,to:t}),this}},{key:\"addFakeParticipant\",value:function(e){return ls(),ns(this._callState,\"addFakeParticipant()\"),this.sendMessageToCallMachine(Ra({action:\"add-fake-participant\"},e)),this}},{key:\"setShowNamesMode\",value:function(e){return cs(this._callObjectMode,\"setShowNamesMode()\"),ls(),e&&\"always\"!==e&&\"never\"!==e?(console.error('setShowNamesMode argument should be \"always\", \"never\", or false'),this):(this.sendMessageToCallMachine({action:\"set-show-names\",mode:e}),this)}},{key:\"setShowLocalVideo\",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return cs(this._callObjectMode,\"setShowLocalVideo()\"),ls(),ns(this._callState,\"setShowLocalVideo()\"),\"boolean\"!=typeof e?(console.error(\"setShowLocalVideo only accepts a boolean value\"),this):(this.sendMessageToCallMachine({action:\"set-show-local-video\",show:e}),this._showLocalVideo=e,this)}},{key:\"showLocalVideo\",value:function(){return cs(this._callObjectMode,\"showLocalVideo()\"),ls(),this._showLocalVideo}},{key:\"setShowParticipantsBar\",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return cs(this._callObjectMode,\"setShowParticipantsBar()\"),ls(),ns(this._callState,\"setShowParticipantsBar()\"),\"boolean\"!=typeof e?(console.error(\"setShowParticipantsBar only accepts a boolean value\"),this):(this.sendMessageToCallMachine({action:\"set-show-participants-bar\",show:e}),this._showParticipantsBar=e,this)}},{key:\"showParticipantsBar\",value:function(){return cs(this._callObjectMode,\"showParticipantsBar()\"),ls(),this._showParticipantsBar}},{key:\"customIntegrations\",value:function(){return ls(),cs(this._callObjectMode,\"customIntegrations()\"),this._customIntegrations}},{key:\"setCustomIntegrations\",value:function(e){return ls(),cs(this._callObjectMode,\"setCustomIntegrations()\"),ns(this._callState,\"setCustomIntegrations()\"),_s(e)?(this.sendMessageToCallMachine({action:\"set-custom-integrations\",integrations:e}),this._customIntegrations=e,this):this}},{key:\"startCustomIntegrations\",value:function(e){var t=this;if(ls(),cs(this._callObjectMode,\"startCustomIntegrations()\"),ns(this._callState,\"startCustomIntegrations()\"),Array.isArray(e)&&e.some((function(e){return\"string\"!=typeof e}))||!Array.isArray(e)&&\"string\"!=typeof e)return console.error(\"startCustomIntegrations() only accepts string | string[]\"),this;var n=\"string\"==typeof e?[e]:e,r=n.filter((function(e){return!(e in t._customIntegrations)}));return r.length?(console.error(\"Can't find custom integration(s): \\\"\".concat(r.join(\", \"),'\"')),this):(this.sendMessageToCallMachine({action:\"start-custom-integrations\",ids:n}),this)}},{key:\"stopCustomIntegrations\",value:function(e){var t=this;if(ls(),cs(this._callObjectMode,\"stopCustomIntegrations()\"),ns(this._callState,\"stopCustomIntegrations()\"),Array.isArray(e)&&e.some((function(e){return\"string\"!=typeof e}))||!Array.isArray(e)&&\"string\"!=typeof e)return console.error(\"stopCustomIntegrations() only accepts string | string[]\"),this;var n=\"string\"==typeof e?[e]:e,r=n.filter((function(e){return!(e in t._customIntegrations)}));return r.length?(console.error(\"Can't find custom integration(s): \\\"\".concat(r.join(\", \"),'\"')),this):(this.sendMessageToCallMachine({action:\"stop-custom-integrations\",ids:n}),this)}},{key:\"customTrayButtons\",value:function(){return cs(this._callObjectMode,\"customTrayButtons()\"),ls(),this._customTrayButtons}},{key:\"updateCustomTrayButtons\",value:function(e){return cs(this._callObjectMode,\"updateCustomTrayButtons()\"),ls(),ns(this._callState,\"updateCustomTrayButtons()\"),ys(e)?(this.sendMessageToCallMachine({action:\"update-custom-tray-buttons\",btns:e}),this._customTrayButtons=e,this):(console.error(\"updateCustomTrayButtons only accepts a dictionary of the type \".concat(JSON.stringify(Qa))),this)}},{key:\"theme\",value:function(){return cs(this._callObjectMode,\"theme()\"),this.properties.theme}},{key:\"setTheme\",value:function(e){var t=this;return cs(this._callObjectMode,\"setTheme()\"),new Promise((function(n,r){try{t.validateProperties({theme:e}),t.properties.theme=Ra({},e),t.sendMessageToCallMachine({action:\"set-theme\",theme:t.properties.theme});try{t.emitDailyJSEvent({action:oi,theme:t.properties.theme})}catch(e){console.log(\"could not emit 'theme-updated'\",e)}n(t.properties.theme)}catch(e){r(e)}}))}},{key:\"requestFullscreen\",value:(f=p((function*(){if(ls(),this._iframe&&!document.fullscreenElement&&To())try{(yield this._iframe.requestFullscreen)?this._iframe.requestFullscreen():this._iframe.webkitRequestFullscreen()}catch(e){console.log(\"could not make video call fullscreen\",e)}})),function(){return f.apply(this,arguments)})},{key:\"exitFullscreen\",value:function(){ls(),document.fullscreenElement?document.exitFullscreen():document.webkitFullscreenElement&&document.webkitExitFullscreen()}},{key:\"getSidebarView\",value:(h=p((function*(){var e=this;return this._callObjectMode?(console.error(\"getSidebarView is not available in callObject mode\"),Promise.resolve(null)):new Promise((function(t){e.sendMessageToCallMachine({action:\"get-sidebar-view\"},(function(e){t(e.view)}))}))})),function(){return h.apply(this,arguments)})},{key:\"setSidebarView\",value:function(e){return this._callObjectMode?(console.error(\"setSidebarView is not available in callObject mode\"),this):(this.sendMessageToCallMachine({action:\"set-sidebar-view\",view:e}),this)}},{key:\"room\",value:(u=p((function*(){var e=this,t=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).includeRoomConfigDefaults,n=void 0===t||t;return this._accessState.access===xr||this.needsLoad()?this.properties.url?{roomUrlPendingJoin:this.properties.url}:null:new Promise((function(t){e.sendMessageToCallMachine({action:\"lib-room-info\",includeRoomConfigDefaults:n},(function(e){delete e.action,delete e.callbackStamp,t(e)}))}))})),function(){return u.apply(this,arguments)})},{key:\"geo\",value:(l=p((function*(){try{var e=yield fetch(\"https://gs.daily.co/_ks_/x-swsl/:\");return{current:(yield e.json()).geo}}catch(e){return console.error(\"geo lookup failed\",e),{current:\"\"}}})),function(){return l.apply(this,arguments)})},{key:\"setNetworkTopology\",value:(s=p((function*(e){var t=this;return ls(),ns(this._callState,\"setNetworkTopology()\"),new Promise((function(n,r){t.sendMessageToCallMachine({action:\"set-network-topology\",opts:e},(function(e){e.error?r({error:e.error}):n({workerId:e.workerId})}))}))})),function(e){return s.apply(this,arguments)})},{key:\"getNetworkTopology\",value:(i=p((function*(){var e=this;return new Promise((function(t,n){e.needsLoad()&&t({topology:\"none\"}),e.sendMessageToCallMachine({action:\"get-network-topology\"},(function(e){e.error?n({error:e.error}):t({topology:e.topology})}))}))})),function(){return i.apply(this,arguments)})},{key:\"setPlayNewParticipantSound\",value:function(e){if(ls(),\"number\"!=typeof e&&!0!==e&&!1!==e)throw new Error(\"argument to setShouldPlayNewParticipantSound should be true, false, or a number, but is \".concat(e));this.sendMessageToCallMachine({action:\"daily-method-set-play-ding\",arg:e})}},{key:\"on\",value:function(e,t){return m.prototype.on.call(this,e,t)}},{key:\"once\",value:function(e,t){return m.prototype.once.call(this,e,t)}},{key:\"off\",value:function(e,t){return m.prototype.off.call(this,e,t)}},{key:\"validateProperties\",value:function(e){for(var t in e){if(!Xa[t])throw new Error(\"unrecognized property '\".concat(t,\"'\"));if(Xa[t].validate&&!Xa[t].validate(e[t],this))throw new Error(\"property '\".concat(t,\"': \").concat(Xa[t].help))}}},{key:\"assembleMeetingUrl\",value:function(){var e,t,n=Ra(Ra({},this.properties),{},{emb:this.callClientId,embHref:encodeURIComponent(window.location.href),proxy:null!==(e=this.properties.dailyConfig)&&void 0!==e&&e.proxyUrl?encodeURIComponent(null===(t=this.properties.dailyConfig)||void 0===t?void 0:t.proxyUrl):void 0}),r=n.url.match(/\\?/)?\"&\":\"?\";return n.url+r+Object.keys(Xa).filter((function(e){return Xa[e].queryString&&void 0!==n[e]})).map((function(e){return\"\".concat(Xa[e].queryString,\"=\").concat(n[e])})).join(\"&\")}},{key:\"needsLoad\",value:function(){return[br,wr,Cr,Mr].includes(this._callState)}},{key:\"sendMessageToCallMachine\",value:function(e,t){if(this._destroyed&&(this._logUseAfterDestroy(),this.strictMode))throw new Error(\"Use after destroy\");this._messageChannel.sendMessageToCallMachine(e,t,this.callClientId,this._iframe)}},{key:\"forwardPackagedMessageToCallMachine\",value:function(e){this._messageChannel.forwardPackagedMessageToCallMachine(e,this._iframe,this.callClientId)}},{key:\"addListenerForPackagedMessagesFromCallMachine\",value:function(e){return this._messageChannel.addListenerForPackagedMessagesFromCallMachine(e,this.callClientId)}},{key:\"removeListenerForPackagedMessagesFromCallMachine\",value:function(e){this._messageChannel.removeListenerForPackagedMessagesFromCallMachine(e)}},{key:\"handleMessageFromCallMachine\",value:function(t){switch(t.action){case ri:this.sendMessageToCallMachine(Ra({action:ii},this.properties));break;case\"call-machine-initialized\":this._callMachineInitialized=!0;var n={action:po,level:\"log\",code:1011,stats:{event:\"bundle load\",time:\"no-op\"===this._bundleLoadTime?0:this._bundleLoadTime,preLoaded:\"no-op\"===this._bundleLoadTime,url:X(this.properties.dailyConfig)}};this.sendMessageToCallMachine(n),this._delayDuplicateInstanceLog&&this._logDuplicateInstanceAttempt();break;case ci:this._loadedCallback&&(this._loadedCallback(),this._loadedCallback=null),this.emitDailyJSEvent(t);break;case hi:var r,i=Ra({},t);delete i.internal,this._maxAppMessageSize=(null===(r=t.internal)||void 0===r?void 0:r._maxAppMessageSize)||so,this._joinedCallback&&(this._joinedCallback(t.participants),this._joinedCallback=null),this.emitDailyJSEvent(i);break;case fi:case gi:if(this._callState===Cr)return;if(t.participant&&t.participant.session_id){var o=t.participant.local?\"local\":t.participant.session_id;if(this._callObjectMode){var a=this._callMachine().store;va(t.participant,a),ma(t.participant,a),_a(t.participant,this._participants[o],a)}try{this.maybeParticipantTracksStopped(this._participants[o],t.participant),this.maybeParticipantTracksStarted(this._participants[o],t.participant),this.maybeEventRecordingStopped(this._participants[o],t.participant),this.maybeEventRecordingStarted(this._participants[o],t.participant)}catch(e){console.error(\"track events error\",e)}this.compareEqualForParticipantUpdateEvent(t.participant,this._participants[o])||(this._participants[o]=Ra({},t.participant),this.toggleParticipantAudioBasedOnNativeAudioFocus(),this.emitDailyJSEvent(t))}break;case vi:if(t.participant&&t.participant.session_id){var s=this._participants[t.participant.session_id];s&&this.maybeParticipantTracksStopped(s,null),delete this._participants[t.participant.session_id],this.emitDailyJSEvent(t)}break;case mi:I(this._participantCounts,t.participantCounts)||(this._participantCounts=t.participantCounts,this.emitDailyJSEvent(t));break;case yi:var c={access:t.access};t.awaitingAccess&&(c.awaitingAccess=t.awaitingAccess),I(this._accessState,c)||(this._accessState=c,this.emitDailyJSEvent(t));break;case _i:if(t.meetingSession){this._meetingSessionSummary=t.meetingSession,this.emitDailyJSEvent(t);var l=Ra(Ra({},t),{},{action:\"meeting-session-updated\"});this.emitDailyJSEvent(l)}break;case ao:var u;this._iframe&&!t.preserveIframe&&(this._iframe.src=\"\"),this._updateCallState(Mr),this.resetMeetingDependentVars(),this._loadedCallback&&(this._loadedCallback(t.errorMsg),this._loadedCallback=null),t.preserveIframe;var d=e(t,Ia);null!=d&&null!==(u=d.error)&&void 0!==u&&u.details&&(d.error.details=JSON.parse(d.error.details)),this._maybeSendToSentry(t),this._joinedCallback&&(this._joinedCallback(null,d),this._joinedCallback=null),this.emitDailyJSEvent(d);break;case pi:this._callState!==Mr&&this._updateCallState(Cr),this.resetMeetingDependentVars(),this._resolveLeave&&(this._resolveLeave(),this._resolveLeave=null),this.emitDailyJSEvent(t);break;case\"selected-devices-updated\":t.devices&&this.emitDailyJSEvent(t);break;case Yi:var h=t.threshold,p=t.quality;h===this._network.threshold&&p===this._network.quality||(this._network.quality=p,this._network.threshold=h,this.emitDailyJSEvent(t));break;case Wi:t&&t.cpuLoadState&&this.emitDailyJSEvent(t);break;case Hi:t&&void 0!==t.faceCounts&&this.emitDailyJSEvent(t);break;case Gi:var f=t.activeSpeaker;this._activeSpeaker.peerId!==f.peerId&&(this._activeSpeaker.peerId=f.peerId,this.emitDailyJSEvent({action:t.action,activeSpeaker:this._activeSpeaker}));break;case\"show-local-video-changed\":if(this._callObjectMode)return;var g=t.show;this._showLocalVideo=g,this.emitDailyJSEvent({action:t.action,show:g});break;case qi:var v=t.enabled;this._activeSpeakerMode!==v&&(this._activeSpeakerMode=v,this.emitDailyJSEvent({action:t.action,enabled:this._activeSpeakerMode}));break;case Si:case ki:case Ei:this._waitingParticipants=t.allWaitingParticipants,this.emitDailyJSEvent({action:t.action,participant:t.participant});break;case ro:I(this._receiveSettings,t.receiveSettings)||(this._receiveSettings=t.receiveSettings,this.emitDailyJSEvent({action:t.action,receiveSettings:t.receiveSettings}));break;case io:if(!I(this._inputSettings,t.inputSettings)){var m=this._getInputSettings();this._inputSettings=t.inputSettings,this._preloadCache.inputSettings={},I(m,this._getInputSettings())||this.emitDailyJSEvent({action:t.action,inputSettings:this._getInputSettings()})}break;case\"send-settings-updated\":I(this._sendSettings,t.sendSettings)||(this._sendSettings=t.sendSettings,this._preloadCache.sendSettings=null,this.emitDailyJSEvent({action:t.action,sendSettings:t.sendSettings}));break;case\"local-audio-level\":this._localAudioLevel=t.audioLevel,this._preloadCache.localAudioLevelObserver=null,this.emitDailyJSEvent(t);break;case\"remote-participants-audio-level\":this._remoteParticipantsAudioLevel=t.participantsAudioLevel,this._preloadCache.remoteParticipantsAudioLevelObserver=null,this.emitDailyJSEvent(t);break;case Bi:var y=t.session_id;this._rmpPlayerState[y]=t.playerState,this.emitDailyJSEvent(t);break;case Ui:delete this._rmpPlayerState[t.session_id],this.emitDailyJSEvent(t);break;case Fi:var _=t.session_id,b=this._rmpPlayerState[_];b&&this.compareEqualForRMPUpdateEvent(b,t.remoteMediaPlayerState)||(this._rmpPlayerState[_]=t.remoteMediaPlayerState,this.emitDailyJSEvent(t));break;case\"custom-button-click\":case\"sidebar-view-changed\":this.emitDailyJSEvent(t);break;case bi:var w=this._meetingSessionState.topology!==(t.meetingSessionState&&t.meetingSessionState.topology);this._meetingSessionState=Es(t.meetingSessionState,this._callObjectMode),(this._callObjectMode||w)&&this.emitDailyJSEvent(t);break;case Vi:this._isScreenSharing=!0,this.emitDailyJSEvent(t);break;case Ji:case $i:this._isScreenSharing=!1,this.emitDailyJSEvent(t);break;case Ai:case Di:case ji:case xi:case Li:case Ti:case Oi:case Pi:case li:case ui:case Ni:case Ri:case\"test-completed\":case zi:case Ii:case Xi:case Zi:case eo:case to:case oo:case no:case\"dialin-ready\":case\"dialin-connected\":case\"dialin-error\":case\"dialin-stopped\":case\"dialin-warning\":case\"dialout-connected\":case\"dialout-answered\":case\"dialout-error\":case\"dialout-stopped\":case\"dialout-warning\":this.emitDailyJSEvent(t);break;case\"request-fullscreen\":this.requestFullscreen();break;case\"request-exit-fullscreen\":this.exitFullscreen()}}},{key:\"maybeEventRecordingStopped\",value:function(e,t){var n=\"record\";e&&(t.local||!1!==t[n]||e[n]===t[n]||this.emitDailyJSEvent({action:Di}))}},{key:\"maybeEventRecordingStarted\",value:function(e,t){var n=\"record\";e&&(t.local||!0!==t[n]||e[n]===t[n]||this.emitDailyJSEvent({action:Ai}))}},{key:\"maybeEventTrackStopped\",value:function(e,t,n,r){e&&(\"ended\"!==e.readyState&&t&&e.id===t.id||this.emitDailyJSEvent({action:Mi,track:e,participant:n,type:r}))}},{key:\"maybeEventTrackStarted\",value:function(e,t,n,r){t&&(e&&\"ended\"!==e.readyState&&t.id===e.id||this.emitDailyJSEvent({action:Ci,track:t,participant:n,type:r}))}},{key:\"maybeParticipantTracksStopped\",value:function(e,t){if(e)for(var n in e.tracks)this.maybeEventTrackStopped(e.tracks[n].track,t&&t.tracks[n]?t.tracks[n].track:null,t,n)}},{key:\"maybeParticipantTracksStarted\",value:function(e,t){if(t)for(var n in t.tracks)this.maybeEventTrackStarted(e&&e.tracks[n]?e.tracks[n].track:null,t.tracks[n].track,t,n)}},{key:\"compareEqualForRMPUpdateEvent\",value:function(e,t){var n,r;return e.state===t.state&&(null===(n=e.settings)||void 0===n?void 0:n.volume)===(null===(r=t.settings)||void 0===r?void 0:r.volume)}},{key:\"emitDailyJSEvent\",value:function(e){try{e.callClientId=this.callClientId,this.emit(e.action,e)}catch(t){console.log(\"could not emit\",e,t)}}},{key:\"compareEqualForParticipantUpdateEvent\",value:function(e,t){return!!I(e,t)&&((!e.videoTrack||!t.videoTrack||e.videoTrack.id===t.videoTrack.id&&e.videoTrack.muted===t.videoTrack.muted&&e.videoTrack.enabled===t.videoTrack.enabled)&&(!e.audioTrack||!t.audioTrack||e.audioTrack.id===t.audioTrack.id&&e.audioTrack.muted===t.audioTrack.muted&&e.audioTrack.enabled===t.audioTrack.enabled))}},{key:\"nativeUtils\",value:function(){return Eo()?\"undefined\"==typeof DailyNativeUtils?(console.warn(\"in React Native, DailyNativeUtils is expected to be available\"),null):DailyNativeUtils:null}},{key:\"updateIsPreparingToJoin\",value:function(e){this._updateCallState(this._callState,e)}},{key:\"_updateCallState\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._isPreparingToJoin;if(e!==this._callState||t!==this._isPreparingToJoin){var n=this._callState,r=this._isPreparingToJoin;this._callState=e,this._isPreparingToJoin=t;var i=rs(n,r),o=rs(this._callState,this._isPreparingToJoin);i!==o&&(this.updateKeepDeviceAwake(o),this.updateDeviceAudioMode(o),this.updateShowAndroidOngoingMeetingNotification(o),this.updateNoOpRecordingEnsuringBackgroundContinuity(o))}}},{key:\"resetMeetingDependentVars\",value:function(){this._participants={},this._participantCounts=qa,this._waitingParticipants={},this._activeSpeaker={},this._activeSpeakerMode=!1,this._didPreAuth=!1,this._accessState={access:xr},this._finalSummaryOfPrevSession=this._meetingSessionSummary,this._meetingSessionSummary={},this._meetingSessionState=Es(Ga,this._callObjectMode),this._isScreenSharing=!1,this._receiveSettings={},this._inputSettings=void 0,this._sendSettings={},this._localAudioLevel=0,this._isLocalAudioLevelObserverRunning=!1,this._remoteParticipantsAudioLevel={},this._isRemoteParticipantsAudioLevelObserverRunning=!1,this._maxAppMessageSize=so,this._callMachineInitialized=!1,this._bundleLoadTime=void 0,this._preloadCache}},{key:\"updateKeepDeviceAwake\",value:function(e){Eo()&&this.nativeUtils().setKeepDeviceAwake(e,this.callClientId)}},{key:\"updateDeviceAudioMode\",value:function(e){if(Eo()&&!this.disableReactNativeAutoDeviceManagement(\"audio\")){var t=e?this._nativeInCallAudioMode:\"idle\";this.nativeUtils().setAudioMode(t)}}},{key:\"updateShowAndroidOngoingMeetingNotification\",value:function(e){if(Eo()&&this.nativeUtils().setShowOngoingMeetingNotification){var t,n,r,i;if(this.properties.reactNativeConfig&&this.properties.reactNativeConfig.androidInCallNotification){var o=this.properties.reactNativeConfig.androidInCallNotification;t=o.title,n=o.subtitle,r=o.iconName,i=o.disableForCustomOverride}i&&(e=!1),this.nativeUtils().setShowOngoingMeetingNotification(e,t,n,r,this.callClientId)}}},{key:\"updateNoOpRecordingEnsuringBackgroundContinuity\",value:function(e){Eo()&&this.nativeUtils().enableNoOpRecordingEnsuringBackgroundContinuity&&this.nativeUtils().enableNoOpRecordingEnsuringBackgroundContinuity(e)}},{key:\"toggleParticipantAudioBasedOnNativeAudioFocus\",value:function(){var e,t;if(Eo()){var n=null===(e=this._callMachine())||void 0===e||null===(t=e.store)||void 0===t?void 0:t.getState();for(var r in null==n?void 0:n.streams){var i=n.streams[r];i&&i.pendingTrack&&\"audio\"===i.pendingTrack.kind&&(i.pendingTrack.enabled=this._hasNativeAudioFocus)}}}},{key:\"disableReactNativeAutoDeviceManagement\",value:function(e){return this.properties.reactNativeConfig&&this.properties.reactNativeConfig.disableAutoDeviceManagement&&this.properties.reactNativeConfig.disableAutoDeviceManagement[e]}},{key:\"absoluteUrl\",value:function(e){if(void 0!==e){var t=document.createElement(\"a\");return t.href=e,t.href}}},{key:\"sayHello\",value:function(){var e=\"hello, world.\";return console.log(e),e}},{key:\"_logUseAfterDestroy\",value:function(){var e=Object.values(Va)[0];if(this.needsLoad()){if(e&&!e.needsLoad()){var t={action:po,level:\"error\",code:this.strictMode?9995:9997};e.sendMessageToCallMachine(t)}else if(!this.strictMode){console.error(\"You are are attempting to use a call instance that was previously destroyed, which is unsupported. Please remove `strictMode: false` from your constructor properties to enable strict mode to track down and fix this unsupported usage.\")}}else{var n={action:po,level:\"error\",code:this.strictMode?9995:9997};this._messageChannel.sendMessageToCallMachine(n,null,this.callClientId,this._iframe)}}},{key:\"_logDuplicateInstanceAttempt\",value:function(){for(var e=0,t=Object.values(Va);e0&&void 0!==arguments[0]?arguments[0]:{};return e.layout=\"none\",new te(null,e)}},{key:\"wrap\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(ls(),!e||!e.contentWindow||\"string\"!=typeof e.src)throw new Error(\"DailyIframe::Wrap needs an iframe-like first argument\");return t.layout||(t.customLayout?t.layout=\"custom-v1\":t.layout=\"browser\"),new te(e,t)}},{key:\"createFrame\",value:function(e,t){var n,r;ls(),e&&t?(n=e,r=t):e&&e.append?(n=e,r={}):(n=document.body,r=e||{});var i=r.iframeStyle;i||(i=n===document.body?{position:\"fixed\",border:\"1px solid black\",backgroundColor:\"white\",width:\"375px\",height:\"450px\",right:\"1em\",bottom:\"1em\"}:{border:0,width:\"100%\",height:\"100%\"});var o=document.createElement(\"iframe\");window.navigator&&window.navigator.userAgent.match(/Chrome\\/61\\./)?o.allow=\"microphone, camera\":o.allow=\"microphone; camera; autoplay; display-capture; screen-wake-lock\",o.style.visibility=\"hidden\",n.appendChild(o),o.style.visibility=null,Object.keys(i).forEach((function(e){return o.style[e]=i[e]})),r.layout||(r.customLayout?r.layout=\"custom-v1\":r.layout=\"browser\");try{return new te(o,r)}catch(e){throw n.removeChild(o),e}}},{key:\"createTransparentFrame\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};ls();var t=document.createElement(\"iframe\");return t.allow=\"microphone; camera; autoplay\",t.style.cssText=\"\\n position: fixed;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%;\\n border: 0;\\n pointer-events: none;\\n \",document.body.appendChild(t),e.layout||(e.layout=\"custom-v1\"),te.wrap(t,e)}},{key:\"getCallInstance\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0;return e?Va[e]:Object.values(Va)[0]}}]),te}();function ts(e,t){var n={};for(var r in e)if(e[r]instanceof MediaStreamTrack)n[r]=fo;else if(\"dailyConfig\"===r){if(e[r].modifyLocalSdpHook){var i=window._daily.instances[t].customCallbacks||{};i.modifyLocalSdpHook=e[r].modifyLocalSdpHook,window._daily.instances[t].customCallbacks=i,delete e[r].modifyLocalSdpHook}if(e[r].modifyRemoteSdpHook){var o=window._daily.instances[t].customCallbacks||{};o.modifyRemoteSdpHook=e[r].modifyRemoteSdpHook,window._daily.instances[t].customCallbacks=o,delete e[r].modifyRemoteSdpHook}n[r]=e[r]}else n[r]=e[r];return n}function ns(e){var t=arguments.length>2?arguments[2]:void 0;if(e!==Er){var n=\"\".concat(arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"This daily-js method\",\" only supported after join.\");throw t&&(n+=\" \".concat(t)),console.error(n),new Error(n)}}function rs(e,t){return[kr,Er].includes(e)||t}function is(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"This daily-js method\",r=arguments.length>3?arguments[3]:void 0;if(rs(e,t)){var i=\"\".concat(n,\" not supported after joining a meeting.\");throw r&&(i+=\" \".concat(r)),console.error(i),new Error(i)}}function os(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"This daily-js method\",n=arguments.length>2?arguments[2]:void 0;if(!e){var r=\"\".concat(t,arguments.length>3&&void 0!==arguments[3]&&arguments[3]?\" requires preAuth() or startCamera() to initialize call state.\":\" requires preAuth(), startCamera(), or join() to initialize call state.\");throw n&&(r+=\" \".concat(n)),console.error(r),new Error(r)}}function as(e){if(e){var t=\"A pre-call quality test is in progress. Please try \".concat(arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"This daily-js method\",\" again once testing has completed. Use stopTestCallQuality() to end it early.\");throw console.error(t),new Error(t)}}function ss(e){if(!e){var t=\"\".concat(arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"This daily-js method\",\" is only supported on custom callObject instances\");throw console.error(t),new Error(t)}}function cs(e){if(e){var t=\"\".concat(arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"This daily-js method\",\" is only supported as part of Daily's Prebuilt\");throw console.error(t),new Error(t)}}function ls(){if(Eo())throw new Error(\"This daily-js method is not currently supported in React Native\")}function us(){if(!Eo())throw new Error(\"This daily-js method is only supported in React Native\")}function ds(e){if(void 0===e)return!0;var t;if(\"string\"==typeof e)t=e;else try{t=JSON.stringify(e),I(JSON.parse(t),e)||console.warn(\"The userData provided will be modified when serialized.\")}catch(e){throw Error(\"userData must be serializable to JSON: \".concat(e))}if(t.length>4096)throw Error(\"userData is too large (\".concat(t.length,\" characters). Maximum size suppported is \").concat(4096,\".\"));return!0}function hs(e,t){for(var n=t.allowAllParticipantsKey,r=function(e){var t=[\"local\"];return n||t.push(\"*\"),e&&!t.includes(e)},i=function(e){return!!(void 0===e.layer||Number.isInteger(e.layer)&&e.layer>=0||\"inherit\"===e.layer)},o=function(e){return!!e&&(!(e.video&&!i(e.video))&&!(e.screenVideo&&!i(e.screenVideo)))},a=0,s=Object.entries(e);a video -> processor -> config\";switch(e){case go.BGBLUR:return n.length>1||\"strength\"!==n[0]?(console.error(r),!1):!(\"number\"!=typeof t.strength||t.strength<=0||t.strength>1||isNaN(t.strength))||(console.error(\"\".concat(r,\"; expected: {0 < strength <= 1}, got: \").concat(t.strength)),!1);case go.BGIMAGE:return!(void 0!==t.source&&!function(e){if(\"default\"===e.source)return e.type=\"default\",!0;if(e.source instanceof ArrayBuffer)return!0;if(Z(e.source))return e.type=\"url\",!!function(e){var t=new URL(e),n=t.pathname;if(\"data:\"===t.protocol)try{var r=n.substring(n.indexOf(\":\")+1,n.indexOf(\";\")).split(\"/\")[1];return _o.includes(r)}catch(e){return console.error(\"failed to deduce blob content type\",e),!1}var i=n.split(\".\").at(-1).toLowerCase().trim();return _o.includes(i)}(e.source)||(console.error(\"invalid image type; supported types: [\".concat(_o.join(\", \"),\"]\")),!1);return t=e.source,n=Number(t),isNaN(n)||!Number.isInteger(n)||n<=0||n>yo?(console.error(\"invalid image selection; must be an int, > 0, <= \".concat(yo)),!1):(e.type=\"daily-preselect\",!0);var t,n}(t));default:return!0}}(e.type,e.config))return!1}return Object.keys(e).filter((function(e){return!t.includes(e)})).forEach((function(t){console.warn(\"invalid key inputSettings -> video -> processor : \".concat(t)),delete e[t]})),!0}(e.video.processor)))&&!(e.audio&&(\"object\"!==n(e.audio)||(r=e.audio.processor,i=[\"type\"],!r||\"object\"!==n(r)||(Object.keys(r).filter((function(e){return!i.includes(e)})).forEach((function(e){console.warn(\"invalid key inputSettings -> audio -> processor : \".concat(e)),delete r[e]})),t=r.type,\"string\"!=typeof t||!Object.values(vo).includes(t)&&(console.error(\"inputSettings audio processor type invalid\"),1))))));var t,r,i}function fs(e,t){var n,r=[];e.video&&!Po(null!==(n=null==t?void 0:t.useLegacyVideoProcessor)&&void 0!==n&&n)&&(delete e.video,r.push(\"video\")),e.audio&&!Ao()&&(delete e.audio,r.push(\"audio\")),r.length>0&&console.error(\"Ignoring settings for browser- or platform-unsupported input processor(s): \".concat(r.join(\", \")))}function gs(){var e=Object.values(go).join(\" | \"),t=Object.values(vo).join(\" | \");return\"inputSettings must be of the form: { video?: { processor: { type: [ \".concat(e,\" ], config?: {} } }, audio?: { processor: {type: [ \").concat(t,\" ] } } }\")}function vs(e){var t=e.allowAllParticipantsKey;return\"receiveSettings must be of the form { [ | \".concat(Rr).concat(t?' | \"'.concat(Br,'\"'):\"\",\"]: \")+'{ [video: [{ layer: [ | \"inherit\"] } | \"inherit\"]], [screenVideo: [{ layer: [ | \"inherit\"] } | \"inherit\"]] }}}'}function ms(){return\"customIntegrations should be an object of type \".concat(JSON.stringify(Ka),\".\")}function ys(e){if(e&&\"object\"!==n(e)||Array.isArray(e))return console.error(\"customTrayButtons should be an Object of the type \".concat(JSON.stringify(Qa),\".\")),!1;if(e)for(var t=0,r=Object.entries(e);t2)throw new Error(\"RemoteMediaPlayerSettings.volume: must be between 0.0 - 2.0\")}}function ks(e,t,n){return!(\"number\"!=typeof e||en)}function Es(e,t){return e&&!t&&delete e.data,e}export{Lr as DAILY_ACCESS_LEVEL_FULL,Ir as DAILY_ACCESS_LEVEL_LOBBY,Nr as DAILY_ACCESS_LEVEL_NONE,xr as DAILY_ACCESS_UNKNOWN,Kr as DAILY_CAMERA_ERROR_CAM_AND_MIC_IN_USE,Hr as DAILY_CAMERA_ERROR_CAM_IN_USE,ti as DAILY_CAMERA_ERROR_CONSTRAINTS,Qr as DAILY_CAMERA_ERROR_MIC_IN_USE,ei as DAILY_CAMERA_ERROR_NOT_FOUND,Xr as DAILY_CAMERA_ERROR_PERMISSIONS,Zr as DAILY_CAMERA_ERROR_UNDEF_MEDIADEVICES,ni as DAILY_CAMERA_ERROR_UNKNOWN,yi as DAILY_EVENT_ACCESS_STATE_UPDATED,Gi as DAILY_EVENT_ACTIVE_SPEAKER_CHANGE,qi as DAILY_EVENT_ACTIVE_SPEAKER_MODE_CHANGE,Ni as DAILY_EVENT_APP_MSG,ui as DAILY_EVENT_CAMERA_ERROR,Wi as DAILY_EVENT_CPU_LOAD_CHANGE,ao as DAILY_EVENT_ERROR,Ki as DAILY_EVENT_EXIT_FULLSCREEN,Hi as DAILY_EVENT_FACE_COUNTS_UPDATED,Qi as DAILY_EVENT_FULLSCREEN,ii as DAILY_EVENT_IFRAME_LAUNCH_CONFIG,ri as DAILY_EVENT_IFRAME_READY_FOR_LAUNCH_CONFIG,io as DAILY_EVENT_INPUT_SETTINGS_UPDATED,hi as DAILY_EVENT_JOINED_MEETING,di as DAILY_EVENT_JOINING_MEETING,no as DAILY_EVENT_LANG_UPDATED,pi as DAILY_EVENT_LEFT_MEETING,to as DAILY_EVENT_LIVE_STREAMING_ERROR,Xi as DAILY_EVENT_LIVE_STREAMING_STARTED,eo as DAILY_EVENT_LIVE_STREAMING_STOPPED,Zi as DAILY_EVENT_LIVE_STREAMING_UPDATED,ci as DAILY_EVENT_LOADED,ai as DAILY_EVENT_LOADING,si as DAILY_EVENT_LOAD_ATTEMPT_FAILED,$i as DAILY_EVENT_LOCAL_SCREEN_SHARE_CANCELED,Vi as DAILY_EVENT_LOCAL_SCREEN_SHARE_STARTED,Ji as DAILY_EVENT_LOCAL_SCREEN_SHARE_STOPPED,wi as DAILY_EVENT_MEETING_SESSION_DATA_ERROR,bi as DAILY_EVENT_MEETING_SESSION_STATE_UPDATED,_i as DAILY_EVENT_MEETING_SESSION_SUMMARY_UPDATED,zi as DAILY_EVENT_NETWORK_CONNECTION,Yi as DAILY_EVENT_NETWORK_QUALITY_CHANGE,oo as DAILY_EVENT_NONFATAL_ERROR,mi as DAILY_EVENT_PARTICIPANT_COUNTS_UPDATED,fi as DAILY_EVENT_PARTICIPANT_JOINED,vi as DAILY_EVENT_PARTICIPANT_LEFT,gi as DAILY_EVENT_PARTICIPANT_UPDATED,ro as DAILY_EVENT_RECEIVE_SETTINGS_UPDATED,Ii as DAILY_EVENT_RECORDING_DATA,xi as DAILY_EVENT_RECORDING_ERROR,Ai as DAILY_EVENT_RECORDING_STARTED,ji as DAILY_EVENT_RECORDING_STATS,Di as DAILY_EVENT_RECORDING_STOPPED,Li as DAILY_EVENT_RECORDING_UPLOAD_COMPLETED,Bi as DAILY_EVENT_REMOTE_MEDIA_PLAYER_STARTED,Ui as DAILY_EVENT_REMOTE_MEDIA_PLAYER_STOPPED,Fi as DAILY_EVENT_REMOTE_MEDIA_PLAYER_UPDATED,li as DAILY_EVENT_STARTED_CAMERA,oi as DAILY_EVENT_THEME_UPDATED,Ci as DAILY_EVENT_TRACK_STARTED,Mi as DAILY_EVENT_TRACK_STOPPED,Pi as DAILY_EVENT_TRANSCRIPTION_ERROR,Ri as DAILY_EVENT_TRANSCRIPTION_MSG,Ti as DAILY_EVENT_TRANSCRIPTION_STARTED,Oi as DAILY_EVENT_TRANSCRIPTION_STOPPED,Si as DAILY_EVENT_WAITING_PARTICIPANT_ADDED,Ei as DAILY_EVENT_WAITING_PARTICIPANT_REMOVED,ki as DAILY_EVENT_WAITING_PARTICIPANT_UPDATED,Wr as DAILY_FATAL_ERROR_CONNECTION,Fr as DAILY_FATAL_ERROR_EJECTED,Yr as DAILY_FATAL_ERROR_EOL,Jr as DAILY_FATAL_ERROR_EXP_ROOM,$r as DAILY_FATAL_ERROR_EXP_TOKEN,qr as DAILY_FATAL_ERROR_MEETING_FULL,Ur as DAILY_FATAL_ERROR_NBF_ROOM,Vr as DAILY_FATAL_ERROR_NBF_TOKEN,zr as DAILY_FATAL_ERROR_NOT_ALLOWED,Gr as DAILY_FATAL_ERROR_NO_ROOM,Br as DAILY_RECEIVE_SETTINGS_ALL_PARTICIPANTS_KEY,Rr as DAILY_RECEIVE_SETTINGS_BASE_KEY,Mr as DAILY_STATE_ERROR,Er as DAILY_STATE_JOINED,kr as DAILY_STATE_JOINING,Cr as DAILY_STATE_LEFT,br as DAILY_STATE_NEW,Tr as DAILY_TRACK_STATE_BLOCKED,Dr as DAILY_TRACK_STATE_INTERRUPTED,Ar as DAILY_TRACK_STATE_LOADING,Or as DAILY_TRACK_STATE_OFF,jr as DAILY_TRACK_STATE_PLAYABLE,Pr as DAILY_TRACK_STATE_SENDABLE,es as default};\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Returns whether the current browser matches the vendor's recommendations\n * @author Chance Overberg\n * @module Epic.VideoApp.WebCore.Hooks.UseIsVideoSupported\n */\n\nimport Daily from \"@daily-co/daily-js\";\nimport { isSupported } from \"twilio-video\";\nimport { useRoomState } from \"~/state\";\nimport { VideoVendor } from \"../types\";\n\nexport function useIsVideoSupported(): boolean {\n\tconst vendor = useRoomState((selectors) => selectors.getVendor(), []);\n\n\tswitch (vendor) {\n\t\tcase VideoVendor.twilio:\n\t\t\treturn isSupported;\n\t\tcase VideoVendor.daily:\n\t\t\treturn Daily.supportedBrowser().supported;\n\t\tdefault:\n\t\t\treturn false;\n\t}\n}\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Returns whether screen sharing is supported for the current device\n * @author Chance Overberg\n * @module Epic.VideoApp.WebCore.Hooks.UseIsScreenShareSupported\n */\n\nimport { useIsVideoSupported } from \"./useIsVideoSupported\";\n\nexport function useIsScreenShareSupported(): boolean {\n\tconst isVideoSupported = useIsVideoSupported();\n\n\treturn isVideoSupported && !!navigator.mediaDevices?.getDisplayMedia;\n}\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file hook to encapsulate the logic of sending a participant information to all other users in the call\n * @author Will Cooper\n * @module Epic.VideoApp.Hooks.Messaging.UseBroadcastParticipantInfo\n */\n\nimport { useCallback, useContext } from \"react\";\nimport { useRoomState, useUserState } from \"~/state\";\nimport { IInfoUpdateMessage, MessageActionType, MessageType } from \"~/types\";\nimport { VideoSessionContext } from \"~/web-core/components\";\nimport { useIsScreenShareSupported } from \"~/web-core/hooks/useIsScreenShareSupported\";\nimport { sendMessage } from \"../../utils/sendMessage\";\n\nexport interface IBroadcastInfo {\n\t(params?: IStatusParams): void;\n}\n\ninterface IStatusParams {\n\tnewMutedState?: boolean;\n\tnewDisabledState?: boolean;\n\tnewWaitingState?: boolean;\n\tnewScreenState?: boolean;\n}\n\n/**\n * Broadcasts display names and other participant information to all others users within the call. Does not expect a response.\n * We apply a delay before sending out these values so we can ensure remote parties have a listener ready.\n * Uses the underlying sendMessage hook to send a specific message format\n * @returns a function to broadcast display names to all other users in the video visit.\n */\nexport function useBroadcastParticipantInfo(): IBroadcastInfo {\n\tconst { session } = useContext(VideoSessionContext);\n\tconst displayName = useRoomState((selectors) => selectors.getLocalDisplayName(), []);\n\tconst userType = useUserState((selectors) => selectors.getUserType(), []);\n\tconst usingWaitingRoom = useUserState((selectors) => selectors.getIsUserInWaitingRoom(), []);\n\tconst cameraLocked = useUserState((selectors) => selectors.getCameraLock(), []);\n\tconst micLock = useUserState((selectors) => selectors.getMicLock(), []);\n\tconst screenShareLock = useUserState((selectors) => selectors.getScreenShareLock(), []);\n\t// Configuration allows screen sharing\n\tconst screenShareAllowed = useUserState((selectors) => selectors.getUserPermission(\"canShareScreen\"), []);\n\t// Device supports screen share\n\tconst screenShareSupport = useIsScreenShareSupported();\n\n\t// This user type will need to be pulled from each user's FDI as part of launching the call\n\t// We don't check user type anywhere at the moment so a hardcoded value is fine.\n\tconst broadcastInfo = useCallback(\n\t\t(params?: IStatusParams) => {\n\t\t\t// Use the new state, or the previously saved value if we haven't made an explicit change\n\t\t\tconst newMicValue = params?.newMutedState ?? micLock;\n\t\t\tconst newCamValue = params?.newDisabledState ?? cameraLocked;\n\t\t\tconst newWaitingValue = params?.newWaitingState ?? usingWaitingRoom;\n\t\t\tconst newScreenValue = params?.newScreenState ?? screenShareLock;\n\t\t\tconst message: IInfoUpdateMessage = {\n\t\t\t\taction: MessageActionType.broadcast,\n\t\t\t\tpayload: {\n\t\t\t\t\tdisplayName: displayName,\n\t\t\t\t\tuserType: userType,\n\t\t\t\t\tmessageID: \"\",\n\t\t\t\t\tmicLocked: newMicValue,\n\t\t\t\t\tcameraLocked: newCamValue,\n\t\t\t\t\tscreenShareLocked: newScreenValue,\n\t\t\t\t\tscreenShareAllowed: screenShareAllowed,\n\t\t\t\t\tdeviceSupportsScreenShare: screenShareSupport,\n\t\t\t\t\tinWaitingRoom: newWaitingValue,\n\t\t\t\t},\n\t\t\t\ttype: MessageType.participantInfo,\n\t\t\t\tneedsACK: false,\n\t\t\t};\n\t\t\t// If a remote participant does not have information from the local user, they will request it, triggering another broadcast\n\t\t\tsendMessage(session, message);\n\t\t},\n\t\t[\n\t\t\tmicLock,\n\t\t\tcameraLocked,\n\t\t\tusingWaitingRoom,\n\t\t\tscreenShareLock,\n\t\t\tdisplayName,\n\t\t\tuserType,\n\t\t\tscreenShareAllowed,\n\t\t\tscreenShareSupport,\n\t\t\tsession,\n\t\t],\n\t);\n\n\treturn broadcastInfo;\n}\n","/**\n * @copyright Copyright 2023 Epic Systems Corporation\n * @file Hook that provides the callback to run when a participant's image is captured\n * @author Chance Overberg\n * @module Epic.VideoApp.Components.ImageCapture.Hooks.UseImageCapturedHandler\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport { useCallback, useRef } from \"react\";\nimport { alertActions } from \"~/state\";\nimport { Timeout } from \"~/types\";\n\nexport interface IImageCapturedHandled {\n\t(displayName: string): void;\n}\n\n/**\n * Sends a data track message to a specific participant, notifying them that a provider captured\n * an image of their video feed. Provider's display name is included if it isn't empty.\n * @returns a function used to send image captured data track messages.\n */\nexport function useImageCapturedHandler(): IImageCapturedHandled {\n\tconst timeoutRef = useRef();\n\tconst dispatch = useDispatch();\n\tconst handleImageCapturedMessage = useCallback(\n\t\t(displayName: string) => {\n\t\t\tdispatch(\n\t\t\t\talertActions.postToastAlert({\n\t\t\t\t\ttype: \"image-captured\",\n\t\t\t\t\tmessageToken: displayName ? \"ImageCaptured\" : \"ImageCaptured_DefaultName\",\n\t\t\t\t\tmessageArgs: displayName ? [displayName] : undefined,\n\t\t\t\t\tdismissTimeMS: 0,\n\t\t\t\t}),\n\t\t\t);\n\n\t\t\t/**\n\t\t\t * If there is already a timeout running, clear it before setting a new one.\n\t\t\t * This prevents toasts after the first one from clearing too soon.\n\t\t\t */\n\t\t\tif (timeoutRef.current) {\n\t\t\t\tclearTimeout(timeoutRef.current);\n\t\t\t}\n\n\t\t\ttimeoutRef.current = setTimeout(() => {\n\t\t\t\tdispatch(alertActions.clearToasts(\"image-captured\"));\n\t\t\t}, 7000);\n\t\t},\n\t\t[dispatch],\n\t);\n\n\treturn handleImageCapturedMessage;\n}\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file Centralized handler to reinit audio for iOS backgrounding/Siri interruptions\n * @author Gavin Lefebvre\n * @module Epic.VideoApp.Hooks.UseHandleAudioContext\n */\n\nimport { useCallback, useContext } from \"react\";\nimport { DeviceContext } from \"~/components/VideoCall/DeviceContext\";\nimport { iOSDetectedAtVersion } from \"~/utils/os\";\n\nexport default function useHandleAudioContext(): (forceRestart?: boolean) => Promise {\n\tconst { audioContext, restartAudioContext } = useContext(DeviceContext);\n\n\tconst tryHandleAudioContext = useCallback(\n\t\tasync (forceRestart?: boolean): Promise => {\n\t\t\t// we sometimes did not get ASD after backgrounding on iOS14 as well\n\t\t\tif (iOSDetectedAtVersion(\"14+\")) {\n\t\t\t\t/**\tif we don't have an AudioContext, or it is closed, or we got a shouldRestart argument,\n\t\t\t\t\ttrigger restartAudioContext to have useSingletonAudioContext generate a new one */\n\t\t\t\tif (!audioContext || audioContext.state === \"closed\" || forceRestart) {\n\t\t\t\t\tawait restartAudioContext();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t/**\totherwise, look to resume; if that fails, use the restart function */\n\t\t\t\ttry {\n\t\t\t\t\tswitch (audioContext.state) {\n\t\t\t\t\t\tcase \"suspended\":\n\t\t\t\t\t\t\tawait audioContext.resume();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"interrupted\":\n\t\t\t\t\t\t\tawait audioContext.close();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\tawait restartAudioContext();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[audioContext, restartAudioContext],\n\t);\n\n\treturn tryHandleAudioContext;\n}\n","/**\n * @copyright Copyright 2022 Epic Systems Corporation\n * @file Mobile-specific handling of visibilitychange events (i.e. backgrounding & returning)\n * Must be a descendant of the DeviceContext Provider for consumed hooks to access that Context\n * @author Gavin Lefebvre\n * @module Epic.VideoApp.Components.VideoCall.MobileBackgroundingHandler\n */\n\nimport React, { FC, useCallback, useContext, useEffect, useRef } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport { useLocalAudioToggle, useLocalVideoToggle } from \"~/hooks\";\nimport useHandleAudioContext from \"~/hooks/useHandleAudioContext\";\nimport { useRoomState } from \"~/state\";\nimport { IDevice, localTrackActions } from \"~/state/localTracks\";\nimport { iOSVerAudioGainWorkarounds, isWkWebView } from \"~/utils/os\";\nimport { VideoSessionContext } from \"~/web-core/components\";\nimport { TwilioLocalStream } from \"~/web-core/vendor/twilio/implementations\";\n\ninterface IProps {\n\tisVisible: boolean;\n}\n\n/** This component must be an ancestor of the DeviceContext Provider in order for its hooks to be able to derive needed\n * \tobjects from useContext(DeviceContext) - in this case, 'useHandleAudioContext' needs to access the 'audioContext'\n * \tfrom that Context Provider.\t */\nconst MobileBackgroundingHandler: FC = (props) => {\n\tconst { isVisible } = props;\n\n\tconst isDisconnecting = useRoomState((selectors) => selectors.getIsDisconnecting(), []);\n\tconst [, toggleCameraEnabled] = useLocalVideoToggle();\n\tconst [isMicEnabled, toggleMicEnabled] = useLocalAudioToggle();\n\tconst dispatch = useDispatch();\n\n\tconst { localDeviceStream } = useContext(VideoSessionContext);\n\tconst localVideoTrack = (localDeviceStream as TwilioLocalStream)?.localVideoTrack ?? null;\n\tconst localAudioTrack = (localDeviceStream as TwilioLocalStream)?.localAudioTrack ?? null;\n\n\tconst enableCameraOnVisible = useRef(false);\n\tconst enableMicOnVisible = useRef(false);\n\tconst tryHandleAudioContext = useHandleAudioContext();\n\n\t/** Handle document becoming hidden */\n\tconst handleHidden = useCallback((): void => {\n\t\t// mark whether mic & camera were enabled when backgrounded\n\t\tenableCameraOnVisible.current = localDeviceStream?.isEnabled(\"video\") ?? false;\n\t\tenableMicOnVisible.current = isMicEnabled;\n\n\t\tif (isWkWebView) {\n\t\t\t/** iOS Workaround: run directly rather than getting caught up in recovery logic in the toggle hooks\n\t\t\t * as we need to keep the camera published for WkWebView audio recovery */\n\t\t\tlocalDeviceStream?.toggleState(\"video\", false);\n\t\t\tlocalDeviceStream?.toggleState(\"audio\", false);\n\t\t\tconst disabledCamera: IDevice = localDeviceStream?.getDeviceInfo(\"video\") ?? {\n\t\t\t\tdeviceId: null,\n\t\t\t\tlabel: null,\n\t\t\t\tkind: null,\n\t\t\t};\n\t\t\tdispatch(localTrackActions.setDisabledCamera(disabledCamera));\n\t\t\treturn;\n\t\t}\n\t\tvoid toggleCameraEnabled(\"off\");\n\t}, [localDeviceStream, isMicEnabled, toggleCameraEnabled, dispatch]);\n\n\t/** Handle camera when document becomes visible */\n\tconst handleCameraOnVisible = useCallback(async (): Promise => {\n\t\t// avoid potential race condition w/ twilio functionality by restarting while video is disabled:\n\t\t// https://github.com/twilio/twilio-video.js/blob/d97a4d91696bb79edb34716892c79f2c38707888/lib/media/track/localvideotrack.js#L289\n\t\tif (localVideoTrack) {\n\t\t\tawait localVideoTrack.restart();\n\t\t}\n\t\t// handle camera (if it had been enabled previously)\n\t\tif (enableCameraOnVisible.current) {\n\t\t\tenableCameraOnVisible.current = false;\n\t\t\tawait toggleCameraEnabled(\"on\");\n\t\t}\n\t}, [localVideoTrack, toggleCameraEnabled]);\n\n\t/** Handle microphone when document becomes visible */\n\tconst handleMicOnVisible = useCallback(async (): Promise => {\n\t\t// handle mic (only on iOS non-Safari browsers) restart it to clear any muted/hardware access issue state\n\t\tif (isWkWebView) {\n\t\t\tawait localAudioTrack?.restart();\n\t\t\t// if mic wasn't enabled, defer reacquiring until the user manually re-enables\n\t\t\tif (enableMicOnVisible.current) {\n\t\t\t\tenableMicOnVisible.current = false;\n\t\t\t\tawait toggleMicEnabled(\"on\");\n\t\t\t}\n\t\t}\n\t}, [localAudioTrack, toggleMicEnabled]);\n\n\t/** Promise chain when document becomes visible */\n\tconst nowVisible = useCallback((): void => {\n\t\tvoid handleCameraOnVisible()\n\t\t\t.then(() => handleMicOnVisible())\n\t\t\t.then(() => tryHandleAudioContext(iOSVerAudioGainWorkarounds));\n\t}, [handleCameraOnVisible, handleMicOnVisible, tryHandleAudioContext]);\n\n\t/** Final useRef */\n\tconst nowVisibleRef = useRef(nowVisible);\n\tconst nowHiddenRef = useRef(handleHidden);\n\tconst isDisconnectingRef = useRef(isDisconnecting);\n\n\t/** Keep useRefs updated */\n\tuseEffect(() => {\n\t\tisDisconnectingRef.current = isDisconnecting;\n\t\tnowHiddenRef.current = handleHidden;\n\t\tnowVisibleRef.current = nowVisible;\n\t}, [handleHidden, isDisconnecting, nowVisible]);\n\n\t/** VisibilityChange event handling logic */\n\tuseEffect(() => {\n\t\t/** From Twilio: When an application that is running on a mobile browser is backgrounded,\n\t\t * \tit will not have access to the video feed from the camera until it is foregrounded.\n\t\t * \tSo, we recommend that you stop and unpublish the camera's LocalVideoTrack,\n\t\t * \tand publish a new LocalVideoTrack once your application is foregrounded.\n\t\t */\n\n\t\t// handle hidden\n\t\tif (!isVisible) {\n\t\t\tnowHiddenRef.current();\n\t\t}\n\t\t// handle visible\n\t\telse if (!isDisconnectingRef.current) {\n\t\t\twindow.setTimeout(() => {\n\t\t\t\tnowVisibleRef.current();\n\t\t\t}, 500);\n\t\t}\n\t}, [isVisible]);\n\n\treturn null;\n};\n\nMobileBackgroundingHandler.displayName = \"MobileBackgroundingHandler\";\n\n/**\n * @description This component must be an ancestor of the DeviceContext Provider in order for its hooks to be able to derive needed\n * \tobjects from useContext(DeviceContext) - in this case, 'useHandleAudioContext' needs to access the 'audioContext'\n * \tfrom that Context Provider.\t */\nexport default React.memo(MobileBackgroundingHandler);\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file camera icon\n * @author Colin Walters\n * @module Epic.VideoApp.Icons.Camera\n */\n\nimport React, { FC, memo } from \"react\";\nimport { IconProps } from \".\";\n\nexport enum CameraIconTestIds {\n\tself = \"Camera\",\n}\n\n/**\n * The Camera component\n * @param props The props ;)\n */\nconst Camera: FC = memo((props) => {\n\tconst { title } = props;\n\treturn (\n\t\t\n\t\t\t{title && {title}}\n\t\t\t\n\t\t\t\n\t\t\n\t);\n});\n\nCamera.displayName = \"Camera\";\n\nexport default Camera;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file disabled camera icon\n * @author Colin Walters\n * @module Epic.VideoApp.Icons.DisabledCamera\n */\n\nimport React, { FC, memo } from \"react\";\nimport { IconProps } from \".\";\n\nexport enum DisabledCameraIconTestIds {\n\tself = \"DisabledCamera\",\n}\n\n/**\n * The DisabledCamera component\n * @param props The props ;)\n */\nconst DisabledCamera: FC = memo((props) => {\n\tconst { title } = props;\n\treturn (\n\t\t\n\t\t\t{title && {title}}\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t);\n});\n\nDisabledCamera.displayName = \"DisabledCamera\";\n\nexport default DisabledCamera;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file disabled mic icon\n * @author Colin Walters\n * @module Epic.VideoApp.Icons.DisabledMic\n */\n\nimport React, { FC, memo } from \"react\";\nimport { IconProps } from \".\";\n\nexport enum DisabledMicIconTestIds {\n\tself = \"DisabledMic\",\n}\n\n/**\n * The DisabledMic component\n * @param props The props ;)\n */\nconst DisabledMic: FC = memo((props) => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t);\n});\n\nDisabledMic.displayName = \"DisabledMic\";\n\nexport default DisabledMic;\n","/**\n * @copyright Copyright 2023 Epic Systems Corporation\n * @file disabled speaker icon\n * @author Trevor Roussel\n * @module Epic.VideoApp.Icons.DisabledSpeaker\n */\n\nimport React, { FC, memo } from \"react\";\nimport { IconProps } from \".\";\n\nexport enum DisabledSpeakerTestIds {\n\tself = \"DisabledSpeaker\",\n}\n\n/**\n * The DisabledSpeaker component\n * @param props The props ;)\n */\nconst DisabledSpeaker: FC = memo((props) => {\n\tconst { title } = props;\n\treturn (\n\t\t\n\t\t\t{title && {title}}\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n});\n\nDisabledSpeaker.displayName = \"DisabledSpeaker\";\n\nexport default DisabledSpeaker;\n","/**\n * @copyright Copyright 2023 Epic Systems Corporation\n * @file Enter pip icon\n * @author Arun Vasireddy\n * @module Epic.VideoApp.Icons.EnterPiP\n */\n\nimport React, { FC } from \"react\";\nimport { IconProps } from \".\";\nimport styles from \"../styles/_directional.scss\";\n\n/**\n * The EnterPiP component\n * @param props The props ;)\n */\nconst EnterPiP: FC = (props) => {\n\t//const iconClassName = resolveClassName(styles, { [chevronDirection ?? \"down\"]: true }, className);\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nEnterPiP.displayName = \"EnterPiP\";\n\nexport default React.memo(EnterPiP);\n","/**\n * @copyright Copyright 2023 Epic Systems Corporation\n * @file Exit pip icon\n * @author Arun Vasireddy\n * @module Epic.VideoApp.Icons.ExitPiP\n */\n\nimport React, { FC } from \"react\";\nimport { IconProps } from \".\";\nimport styles from \"../styles/_directional.scss\";\n\n/**\n * The ExitPiP component\n * @param props The props ;)\n */\nconst ExitPiP: FC = (props) => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nExitPiP.displayName = \"ExitPiP\";\n\nexport default React.memo(ExitPiP);\n","/**\n * @copyright Copyright 2023 Epic Systems Corporation\n * @file Locked Camera Icon\n * @author Will Cooper\n * @module Epic.VideoApp.Icons.LockedCamera\n */\n\nimport React, { FC, memo } from \"react\";\nimport { IconProps } from \".\";\n\nexport enum LockedCameraIconTestIds {\n\tself = \"LockedCamera\",\n}\n\n/**\n * The LockedCamera component\n * @param props The props ;)\n */\nconst LockedCamera: FC = memo((props) => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n});\n\nLockedCamera.displayName = \"LockedCamera\";\n\nexport default LockedCamera;\n","/**\n * @copyright Copyright 2022 Epic Systems Corporation\n * @file Locked Camera Icon\n * @author Will Cooper\n * @module Epic.VideoApp.Icons.LockedMicrophone\n */\n\nimport React, { FC, memo } from \"react\";\nimport { IconProps } from \".\";\n\nexport enum LockedMicrophoneIconTestIds {\n\tself = \"LockedMicrophone\",\n}\n\n/**\n * The LockedMicrophone component\n * @param props The props ;)\n */\nconst LockedMicrophone: FC = memo(() => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n});\n\nLockedMicrophone.displayName = \"LockedMicrophone\";\n\nexport default LockedMicrophone;\n","/**\n * @copyright Copyright 2023 Epic Systems Corporation\n * @file Locked Screen Share Icon\n * @author Trevor Roussel\n * @module Epic.VideoApp.Icons.LockedScreenShare\n */\n\nimport React, { FC, memo } from \"react\";\nimport { IconProps } from \".\";\n\nexport enum LockedScreenShareIconTestIds {\n\tself = \"LockedScreenShare\",\n}\n\n/**\n * The LockedScreenShare component\n * @param props The props ;)\n */\nconst LockedScreenShare: FC = memo((props) => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n});\n\nLockedScreenShare.displayName = \"LockedScreenShare\";\n\nexport default LockedScreenShare;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file mic icon\n * @author Colin Walters\n * @module Epic.VideoApp.Icons.Mic\n */\n\nimport React, { FC, memo } from \"react\";\nimport { IconProps } from \".\";\n\nexport enum MicIconTestIds {\n\tself = \"Mic\",\n}\n\n/**\n * The Mic component\n * @param props The props ;)\n */\nconst Mic: FC = memo((props) => {\n\tconst { title } = props;\n\treturn (\n\t\t\n\t\t\t{title && {title}}\n\t\t\t\n\t\t\t\n\t\t\n\t);\n});\n\nMic.displayName = \"Mic\";\n\nexport default Mic;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file start screen sharing icon\n * @author Colin Walters\n * @module Epic.VideoApp.Icons.ScreenShareStart\n */\n\nimport React, { FC, memo } from \"react\";\nimport { IconProps } from \".\";\n\nexport enum ScreenShareStartIconTestIds {\n\tself = \"ScreenShareStart\",\n}\n\n/**\n * The ScreenShareStart component\n * @param props The props ;)\n */\nconst ScreenShareStart: FC = memo((props) => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n});\n\nScreenShareStart.displayName = \"ScreenShareStart\";\n\nexport default ScreenShareStart;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file stop screen sharing icon\n * @author Colin Walters\n * @module Epic.VideoApp.Icons.ScreenShareStop\n */\n\nimport React, { FC, memo } from \"react\";\nimport { IconProps } from \".\";\n\nexport enum ScreenShareStopIconTestIds {\n\tself = \"ScreenShareStop\",\n}\n\n/**\n * The ScreenShareStop component\n * @param props The props ;)\n */\nconst ScreenShareStop: FC = memo((props) => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n});\n\nScreenShareStop.displayName = \"ScreenShareStop\";\n\nexport default ScreenShareStop;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file speaker icon\n * @author Colin Walters\n * @module Epic.VideoApp.Icons.Speaker\n */\n\nimport React, { FC, memo } from \"react\";\nimport { IconProps } from \".\";\n\nexport enum SpeakerTestIds {\n\tself = \"Speaker\",\n}\n\n/**\n * The Speaker component\n * @param props The props ;)\n */\nconst Speaker: FC = memo((props) => {\n\tconst { title } = props;\n\treturn (\n\t\t\n\t\t\t{title && {title}}\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n});\n\nSpeaker.displayName = \"Speaker\";\n\nexport default Speaker;\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file Device utilities\n * @author Colin Walters\n * @module Epic.VideoApp.Utils.Device\n */\n\nimport React from \"react\";\nimport Camera from \"~/icons/camera\";\nimport DisabledCamera from \"~/icons/disabledCamera\";\nimport DisabledMic from \"~/icons/disabledMic\";\nimport disabledSpeaker from \"~/icons/disabledSpeaker\";\nimport enterPiP from \"~/icons/enterPiP\";\nimport exitPiP from \"~/icons/exitPiP\";\nimport LockedCamera from \"~/icons/lockedCamera\";\nimport LockedMicrophone from \"~/icons/lockedMicrophone\";\nimport LockedScreenShare from \"~/icons/lockedScreenShare\";\nimport Mic from \"~/icons/mic\";\nimport ScreenShareStart from \"~/icons/screenShareStart\";\nimport ScreenShareStop from \"~/icons/screenShareStop\";\nimport speaker from \"~/icons/speaker\";\nimport { isMobile } from \"./os\";\n\n/**\n * Determine if the device is an audio device that was created by the OS\n * Some OS/Browser combos include a duplicate of their \"default\" and \"communications\" devices\n * with a deviceId of \"default\" or \"communications\"\n *\n * @param device device to check\n */\nexport function isOSDefinedAudioDevice(device: MediaDeviceInfo): boolean {\n\t// can't be an OS-defined audio device, if not an audio device\n\tif (!device.kind.includes(\"audio\")) {\n\t\treturn false;\n\t}\n\n\t// some non-mobile OS/Browser combos create duplicates of \"default\" and \"communications\" devices\n\treturn !isMobile() && [\"communications\", \"default\"].includes(device.deviceId);\n}\n\n/**\n * Determine if the device is a video device that has a label containing 'infrared'\n *\n * @param device device to check\n */\nexport function isInfraredLabeledVideoDevice(device: MediaDeviceInfo): boolean {\n\t// can't be an infrared video device, if not a video device\n\tif (!device.kind.includes(\"video\")) {\n\t\treturn false;\n\t}\n\n\treturn device.label.toLowerCase().includes(\"infrared\");\n}\n\n/**\n * Convenience method to check isOSDefinedAudioDevice && isInfraredLabeledVideoDevice\n *\n * @param device device to check\n */\nexport function isExcludedDevice(device: MediaDeviceInfo): boolean {\n\treturn isOSDefinedAudioDevice(device) || isInfraredLabeledVideoDevice(device);\n}\n\ninterface IDevicePreference {\n\tlabel: string;\n\tid: string;\n}\n\nexport interface IGetDevicePreference {\n\t(): IDevicePreference | null;\n}\n\n// local storage keys used for different device preferences\nconst cameraPreferenceKey = \"camera-preference\";\nconst micPreferenceKey = \"mic-preference\";\nconst speakerPreferenceKey = \"speaker-preference\";\n\n/**\n * Get a device preference from local storage\n * @param key local storage key\n * @returns device preference or null if there is none\n */\nfunction getDevicePreference(key: string): IDevicePreference | null {\n\tconst value = localStorage.getItem(key);\n\tif (!value) {\n\t\treturn null;\n\t}\n\ttry {\n\t\treturn JSON.parse(value) as IDevicePreference;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\n/**\n * Set a device preference in local storage\n * @param key local storage key\n * @param device the new preferred device\n */\nfunction setDevicePreference(key: string, deviceOrLabel: MediaDeviceInfo): void {\n\tconst { deviceId: id, label } = deviceOrLabel;\n\tlocalStorage.setItem(key, JSON.stringify({ id, label }));\n}\n\n/**\n * Get the ID of the preferred camera (the last manually selected camera) from cookies\n * @returns ID of the preferred camera\n */\nexport function getCameraPreference(): IDevicePreference | null {\n\treturn getDevicePreference(cameraPreferenceKey);\n}\n\n/**\n * Set the cookie for the preferred camera\n * @param camera camera that is the new preferred camera\n */\nexport function setCameraPreference(camera?: MediaDeviceInfo): void {\n\tif (!camera) {\n\t\treturn;\n\t}\n\tsetDevicePreference(cameraPreferenceKey, camera);\n}\n\n/**\n * Get the ID of the preferred microphone (the last manually selected mic) from cookies\n * @returns ID of the preferred mic\n */\nexport function getMicPreference(): IDevicePreference | null {\n\treturn getDevicePreference(micPreferenceKey);\n}\n\n/**\n * Set the cookie for the preferred mic\n * @param mic microphone that is the new preferred microphone\n */\nexport function setMicPreference(mic?: MediaDeviceInfo): void {\n\tif (!mic) {\n\t\treturn;\n\t}\n\tsetDevicePreference(micPreferenceKey, mic);\n}\n\n/**\n * Get the ID of the preferred speaker (the last manually selected speaker) from cookies\n * @returns ID of the preferred speaker\n */\nexport function getSpeakerPreference(): IDevicePreference | null {\n\treturn getDevicePreference(speakerPreferenceKey);\n}\n\n/**\n * Set the cookie for the preferred speaker\n * @param speaker speaker that is the new preferred speaker\n */\nexport function setSpeakerPreference(speaker?: MediaDeviceInfo): void {\n\tif (!speaker) {\n\t\treturn;\n\t}\n\tsetDevicePreference(speakerPreferenceKey, speaker);\n}\n\n/**\n * Helper function to pick the proper microphone icon to render, based on the user's state\n * @param enabled - Whether the microphone is on or off\n * @param locked - Whether the microphone is locked by a moderator or not. Supersedes enabled status.\n * @returns The React icon to pass as a child\n */\nexport function getMicIcon(enabled: boolean, locked?: boolean): React.FC {\n\tif (locked) {\n\t\treturn LockedMicrophone;\n\t}\n\n\tif (!enabled) {\n\t\treturn DisabledMic;\n\t}\n\n\treturn Mic;\n}\n\n/**\n * Helper function to pick the proper camera icon to render, based on the user's state\n * @param enabled - Whether the camera is on or off\n * @param locked - Whether the camera is locked by a moderator or not. Supersedes enabled status.\n * @returns The React icon to pass as a child\n */\nexport function getCameraIcon(enabled: boolean, locked?: boolean): React.FC {\n\tif (locked) {\n\t\treturn LockedCamera;\n\t}\n\n\tif (!enabled) {\n\t\treturn DisabledCamera;\n\t}\n\n\treturn Camera;\n}\n\n/**\n * Helper function to pick the proper picture in picture icon to render, based on the user's state\n * @param enabled - Whether the video is in pip mode or not\n * @returns The React icon to pass as a child\n */\nexport function getPipIcon(isPIPOn: boolean): React.FC {\n\tif (!isPIPOn) {\n\t\treturn enterPiP;\n\t}\n\treturn exitPiP;\n}\n\nexport function getScreenShareIcon(enabled: boolean, locked: boolean): React.FC {\n\tif (locked) {\n\t\treturn LockedScreenShare;\n\t}\n\tif (enabled) {\n\t\treturn ScreenShareStop;\n\t}\n\treturn ScreenShareStart;\n}\n\nexport function getScreenShareAudioIcon(enabled: boolean): React.FC {\n\tif (enabled) {\n\t\treturn speaker;\n\t}\n\treturn disabledSpeaker;\n}\n","/**\n * @copyright Copyright 2025 Epic Systems Corporation\n * @file Function to detect if the device's video stream is interrupted\n * @module Epic.VideoApp.WebCore.Functions.DetectIPadCameraBug\n * @author Noah Allen\n */\n\nimport { secondsToMs } from \"~/utils/dateTime\";\nimport { ILocalStream, ISession } from \"../interfaces\";\n\nexport const MEDIA_TRACK_FIRST_TIMEOUT_MS = secondsToMs(5);\nexport const MEDIA_TRACK_SECOND_TIMEOUT_MS = secondsToMs(1);\n\n/**\n * Detects if the device's video stream is interrupted\n * @returns {boolean} - True if the track is interrupted, otherwise false.\n */\nexport function detectTrackInterrupted(deviceStream: ILocalStream): boolean {\n\tconst videoStreamTrack = deviceStream.getMediaStreamTrack(\"video\");\n\treturn videoStreamTrack?.muted ?? false;\n}\n\n/**\n * Detects if the iOS 17 camera bug is present.\n * Runs timers after camera initialization to check that track is in a playable state after a reasonable init period\n * Timers restart on visibility changes which induce the interrupted state and would otherwise cause false positives\n * @param {ISession} session - The session to check for the bug.\n * @returns {Promise} - True if the bug is detected, otherwise false.\n */\nexport async function detectIPadCameraBug(session: ISession): Promise {\n\tlet timeoutId: NodeJS.Timeout | null = null;\n\tlet secondTimeoutId: NodeJS.Timeout | null = null;\n\treturn new Promise((resolve) => {\n\t\tconst checkTrack = (): void => {\n\t\t\tconst isBuggedAt5Seconds = detectTrackInterrupted(session.localUser.deviceStream);\n\n\t\t\t// Second timeout checks one second out to avoid false positives for a transient camera error\n\t\t\tsecondTimeoutId = setTimeout(() => {\n\t\t\t\tconst isBuggedAt6Seconds = detectTrackInterrupted(session.localUser.deviceStream);\n\n\t\t\t\tdocument.removeEventListener(\"visibilitychange\", handleVisibilityChange);\n\t\t\t\tresolve(isBuggedAt5Seconds && isBuggedAt6Seconds);\n\t\t\t}, MEDIA_TRACK_SECOND_TIMEOUT_MS);\n\t\t};\n\n\t\tconst startTimeouts = (): void => {\n\t\t\ttimeoutId = setTimeout(checkTrack, MEDIA_TRACK_FIRST_TIMEOUT_MS);\n\t\t};\n\n\t\tconst clearTimeouts = (): void => {\n\t\t\tif (timeoutId) {\n\t\t\t\tclearTimeout(timeoutId);\n\t\t\t\ttimeoutId = null;\n\t\t\t}\n\t\t\tif (secondTimeoutId) {\n\t\t\t\tclearTimeout(secondTimeoutId);\n\t\t\t\tsecondTimeoutId = null;\n\t\t\t}\n\t\t};\n\n\t\tconst handleVisibilityChange = (): void => {\n\t\t\tif (document.visibilityState === \"visible\") {\n\t\t\t\tstartTimeouts();\n\t\t\t} else {\n\t\t\t\tclearTimeouts();\n\t\t\t}\n\t\t};\n\n\t\tdocument.addEventListener(\"visibilitychange\", handleVisibilityChange);\n\n\t\tif (document.visibilityState === \"visible\") {\n\t\t\tstartTimeouts();\n\t\t}\n\t});\n}\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Base interface for the video call session\n * @author Will Cooper\n * @module Epic.VideoApp.WebCore.Interfaces.Session\n */\n\nimport { IEVCEmitter, IEVCSessionEventMap } from \"../events\";\nimport { DeviceKind, SessionConnectionStatus } from \"../types\";\nimport { IConnectOptions } from \"../types/connectOptions\";\nimport { ILocalStream } from \"./localStream\";\nimport { ILocalUser } from \"./localUser\";\nimport { IRemoteUser } from \"./remoteUser\";\nimport { VendorError } from \"./vendorError\";\n\n/**\n * @interface ISession\n * @extends IEVCEmitter\n * @description Interface for a session in the video application. It extends the IEVCEmitter\n * interface and adds properties and methods related to session management, user interaction, and error handling.\n */\nexport interface ISession extends IEVCEmitter {\n\t/**\n\t * @property localUser\n\t * @type ILocalUser\n\t * @description The local user associated with this session.\n\t */\n\tlocalUser: ILocalUser;\n\n\t/**\n\t * @property roomGuid\n\t * @type string | undefined\n\t * @description The unique identifier for the room associated with this session. It can be undefined\n\t * if the session is not associated with a room.\n\t */\n\troomGuid?: string;\n\n\t/**\n\t * @property connectionStatus\n\t * @type SessionConnectionStatus\n\t * @description The current connection status of the session.\n\t */\n\tconnectionStatus: SessionConnectionStatus;\n\n\t/**\n\t * @method connect\n\t * @param {IConnectOptions} connectOptions - The options for connecting to the session.\n\t * @returns whether or not the connection was successful.\n\t * @description Connects to the session using the provided options.\n\t */\n\tconnect(connectOptions: IConnectOptions): Promise;\n\n\t/**\n\t * @method disconnect\n\t * @description Disconnects from the session.\n\t */\n\tdisconnect(): void;\n\n\t/**\n\t * @method refreshMedia\n\t * @description Refreshes the media in the session.\n\t */\n\trefreshMedia(): void;\n\n\t/**\n\t * @method publish\n\t * @param {DeviceKind} kind - The kind of the device to publish (audio or video).\n\t * @param {boolean} expectedState - Whether to publish or unpublish.\n\t * @param {ILocalStream} device - The local stream to publish.\n\t * @param {boolean | undefined} recycleMedia - Whether to recycle the media to ensure it's disabled.\n\t * @returns a boolean indicating whether the operation was successful.\n\t * @description Publishes or un-publishes a local stream to the session based on the provided kind,\n\t * expected state, and device.\n\t */\n\tpublish(\n\t\tkind: DeviceKind,\n\t\texpectedState: boolean,\n\t\tdevice: ILocalStream,\n\t\trecycleMedia?: boolean,\n\t): Promise;\n\n\t/**\n\t * @method getRoomInfo\n\t * @param {string} jwt - The JSON Web Token for the room.\n\t * @returns a Promise with information about the room.\n\t * @description Gets information about the room associated with the provided JSON Web Token and\n\t * returns it as a Promise.\n\t */\n\tgetRoomInfo(jwt: string): Promise;\n\n\t/**\n\t * @method getRemoteParticipants\n\t * @returns as array of IRemoteUser currently in the session.\n\t */\n\tgetRemoteParticipants(): IRemoteUser[];\n\n\t/**\n\t * @method getRemoteParticipant\n\t * @param Identity string for the user to attempt to fetch\n\t * @returns IRemoteUser | null\n\t * @description Gets the remote user with the provided identity. Returns null if the user is not found.\n\t */\n\tgetRemoteParticipant(identity: string): IRemoteUser | null;\n\n\t/**\n\t * @method getLocalParticipant\n\t * @returns the local user in the session or null if there is no local user.\n\t */\n\tgetLocalParticipant(): ILocalUser | null;\n\n\t/**\n\t * @method getDominantSpeaker\n\t * @returns the dominant speaker in the session or null if there is no dominant speaker.\n\t */\n\tgetDominantSpeaker(): IRemoteUser | null;\n\n\t/**\n\t * @method sendDataMessage\n\t * @param {string} message - The message to send.\n\t * @description Sends a data message to the session.\n\t */\n\tsendDataMessage(message: string): void;\n\n\t/**\n\t * @method addScreenShare\n\t * @param {ILocalStream} stream - The local stream to share.\n\t * @returns whether or not the operation was successful.\n\t * @description Adds a screen share to the session using the provided local stream.\n\t */\n\taddScreenShare(stream: ILocalStream): Promise;\n\n\t/**\n\t * @method removeScreenShare\n\t * @param {ILocalStream} stream - The local stream to stop sharing.\n\t * @param {boolean | undefined} removeAudio - Whether to also remove audio. It can be undefined, in\n\t * which case only the video is removed.\n\t * @returns whether or not the operation was successful.\n\t * @description Removes a screen share from the session using the provided local stream and optional\n\t * removeAudio parameter.\n\t */\n\tremoveScreenShare(stream: ILocalStream, removeAudio?: boolean): Promise;\n\n\t/**\n\t * @method enableUserMedia\n\t * @param {string} identity - The identity of the user.\n\t * @param {string} jwt - The JSON Web Token for the user.\n\t * @returns whether or not the operation was successful.\n\t * @description Enables media for the user associated with the provided identity and JSON Web Token,\n\t */\n\tenableUserMedia(identity: string, jwt: string): Promise;\n\n\t/**\n\t * @method processError\n\t * @param {unknown} error - The error to process.\n\t * @returns a VendorError or undefined if the error could not be processed.\n\t * @description Processes the provided error\n\t */\n\tprocessError(error: unknown): VendorError | undefined;\n}\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Interface for a local user\n * @author Will Cooper\n * @module Epic.VideoApp.WebCore.Interfaces.LocalUser\n */\n\nimport { BackgroundSettings } from \"../../types/backgrounds\";\nimport { ILocalStream } from \"./localStream\";\nimport { IUser } from \"./user\";\n\n/**\n * @interface ILocalUser\n * @extends IUser\n * @description Interface for a local user in the video application. It extends the IUser interface\n * and adds properties and methods related to device and share streams, video backgrounds, and virtual backgrounds.\n */\nexport interface ILocalUser extends IUser {\n\t/**\n\t * @property deviceStream\n\t * @type ILocalStream\n\t * @description The stream from the local user's device.\n\t */\n\tdeviceStream: ILocalStream;\n\n\t/**\n\t * @property shareStream\n\t * @type ILocalStream | null\n\t * @description The stream that the local user is sharing with others. It can be null if the user\n\t * is not currently sharing a stream.\n\t */\n\tshareStream: ILocalStream | null;\n\n\treadonly isLocal: true;\n\n\t/**\n\t * @method createDevicePreviewStream\n\t * @param {string | null} disabledCameraId - The ID of the user's disabled camera.\n\t * @param {BackgroundSettings | undefined} backgroundSettings - The initial background settings to apply to the preview stream.\n\t * @returns the stream\n\t * @description Creates a preview stream from the local user's device.\n\t */\n\tcreateDevicePreviewStream: (\n\t\tdisabledCameraId: string | null,\n\t\tbackgroundSettings?: BackgroundSettings,\n\t) => Promise;\n\n\t/**\n\t * @method applyVideoBackground\n\t * @param {BackgroundSettings | null} settings - The settings for the video background.\n\t * @param {ILocalStream | null} stream - The stream to which the background should be applied.\n\t * @returns Promise\n\t * @description Applies a video background to a stream based on the provided settings.\n\t */\n\tapplyVideoBackground: (settings: BackgroundSettings | null, stream: ILocalStream | null) => Promise;\n\n\t/**\n\t * @method createShareStream\n\t * @param {MediaStreamTrack} videoStream - The video stream to share.\n\t * @param {MediaStreamTrack | null} audioStream - The audio stream to share. It can be null if there is no audio to share.\n\t * @param {MediaStream} mediaStream - The media stream source of the tracks.\n\t * @returns Promise\n\t * @description Creates a share stream from the provided video and audio streams and returns it as a Promise.\n\t */\n\tcreateShareStream(\n\t\tvideoStream: MediaStreamTrack,\n\t\taudioStream: MediaStreamTrack | null,\n\t\tmediaStream: MediaStream,\n\t): Promise;\n\n\t/**\n\t * @method cleanupShareStream\n\t * @description Cleans up the share stream when it is no longer needed.\n\t */\n\tcleanupShareStream(): void;\n\n\t/**\n\t * @method initializeVirtualBackgrounds\n\t * @param {BackgroundSettings[] | undefined} backgroundSettings - An array of settings for the virtual backgrounds.\n\t * @param {number | undefined} availableBackgroundsCount - The number of available virtual backgrounds.\n\t * @description Initializes the virtual backgrounds based on the provided settings and count.\n\t */\n\tinitializeVirtualBackgrounds(\n\t\tbackgroundSettings?: BackgroundSettings[],\n\t\tavailableBackgroundsCount?: number,\n\t): void;\n\n\t/**\n\t * @method setAudioOutput\n\t * @param speaker The output device to switch to\n\t */\n\tsetAudioOutput(speaker: MediaDeviceInfo): void;\n}\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Interface for a remote video user\n * @author Will Cooper\n * @module Epic.VideoApp.WebCore.Interfaces.RemoteUser\n */\n\nimport { Quality, SubscriptionStatus, VideoType } from \"../types\";\nimport { IUser } from \"./user\";\n\n/**\n * @interface IRemoteUser\n * @extends IUser\n * @description Interface for a remote user in the video application. It extends the IUser interface and adds\n * properties to control subscription settings for attached streams.\n */\nexport interface IRemoteUser extends IUser {\n\treadonly isLocal: false;\n\n\t/**\n\t * Set the quality of the remote deviceStream. This may be unused on non-Daily vendors.\n\t * @param quality Enumerable quality value between low and high\n\t */\n\tsetStreamQuality(quality: Quality): void;\n\n\t/**\n\t * Set whether a remote stream is being subscribed to.\n\t * @param type Whether to target the participant's camera or screen share streams\n\t * @param subscribed What status to set the subscription to\n\t */\n\tsetStreamSubscribed(type: VideoType, subscribed: SubscriptionStatus): void;\n}\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Base interface for video call users\n * @author Will Cooper\n * @module Epic.VideoApp.WebCore.Interfaces.User\n */\n\nimport { IEVCEmitter, IEVCUserEventMap } from \"../events\";\nimport { IStream } from \"./stream\";\n\n/**\n * @interface IUser\n * @extends IEVCEmitter\n * @description Interface representing a video call user; to be extended by local and remote user interfaces.\n */\nexport interface IUser extends IEVCEmitter {\n\t/**\n\t * @property deviceStream\n\t * @type IStream\n\t * @description The stream from the user's device.\n\t */\n\tdeviceStream: IStream;\n\n\t/**\n\t * @property shareStream\n\t * @type IStream | null\n\t * @description The screen share stream that the user is sharing with others. It can be null if the user is not\n\t * currently sharing their screen.\n\t */\n\tshareStream: IStream | null;\n\n\treadonly isLocal: boolean;\n\n\t/**\n\t * @method getUserIdentity\n\t * @returns the unique identity of the user as a string.\n\t */\n\tgetUserIdentity: () => string;\n\n\t/**\n\t * @method getUserGuid\n\t * @returns the guid of the user as a string.\n\t */\n\tgetUserGuid: () => string;\n\n\t/**\n\t * @method isSharingScreen\n\t * @returns a boolean indicating whether the user is currently sharing their screen.\n\t */\n\tisSharingScreen: () => boolean;\n\n\t/**\n\t * @method getNetworkQualityLevel\n\t * @returns the user's current network quality level as a number.\n\t */\n\tgetNetworkQualityLevel: () => number;\n}\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Interface for a local user's media\n * @author Will Cooper\n * @module Epic.VideoApp.WebCore.Interfaces.LocalStream\n */\n\nimport { IDeviceInitialization } from \"~/state/hardwareTest\";\nimport { IDevice } from \"~/state/localTracks\";\nimport { DeviceKind, ISwitchDeviceResponse } from \"../types\";\nimport { IStream } from \"./stream\";\n\n/**\n * Interface for mocking a local user's audio/video and the underlying types that represent their devices.\n */\nexport interface ILocalStream extends IStream {\n\treadonly isLocal: true;\n\n\t/**\n\t * Get the device info for the active camera or microphone\n\t * @param kind Whether to get the camera or microphone device id\n\t * @returns Object with device id, label, and kind\n\t */\n\tgetDeviceInfo: (kind: DeviceKind) => IDevice;\n\n\t/**\n\t * Given a new device, switch the active camera\n\t * @param device the new camera\n\t * @param useLowBandwidth Configuration flag to use lower resolution video\n\t * @param constraints Additional override constraints for the new video track\n\t * @returns A response object indicating the result of the switch\n\t */\n\tswitchVideoDeviceAsync: (\n\t\tdevice: MediaDeviceInfo,\n\t\tuseLowBandwidth?: boolean,\n\t\tconstraints?: MediaTrackConstraintSet,\n\t) => Promise;\n\n\t/**\n\t * Disables the local video track and releases the camera\n\t * @returns Device info of the disabled camera\n\t */\n\tremoveLocalVideoTrack: () => Promise;\n\n\t/**\n\t * Given a new device, switch the active microphone\n\t * @param device the new microphone\n\t * @param constraints Additional override constraints for the new audio track\n\t * @returns A response object indicating the result of the switch\n\t */\n\tswitchAudioDeviceAsync: (\n\t\tdevice?: MediaDeviceInfo | undefined,\n\t\tconstraints?: MediaTrackConstraintSet,\n\t) => Promise;\n\n\t/**\n\t * Stops the local audio track\n\t */\n\tremoveLocalAudioTrack: () => void;\n\n\t/**\n\t * Toggles the enable / disable state of the audio or video track\n\t * @param kind Specifies whether to toggle the audio or video track\n\t * @param turnOn Specifies whether to force enable or disable the track\n\t */\n\ttoggleState: (kind: DeviceKind, turnOn: boolean) => void;\n\n\t/**\n\t * Get the underlying MediaStreamTrack for the audio or video tracks\n\t * @param kind Specifies whether to get the audio or video track\n\t * @returns MediaStreamTrack for the stream's audio or video\n\t */\n\tgetMediaStreamTrack: (kind: DeviceKind) => MediaStreamTrack | undefined;\n\n\t/**\n\t * Get the error object from device initialization if it exists\n\t * @returns Device initialization error object\n\t */\n\tgetDeviceInitializationError: () => IDeviceInitialization | undefined;\n\n\t/**\n\t * Remove all event listeners and stop all MediaStreamTracks\n\t */\n\tcleanUp: () => Promise;\n}\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Generic interface for remote media\n * @author Will Cooper\n * @module Epic.VideoApp.WebCore.Interfaces.RemoteStream\n */\n\nimport { IEVCEmitter, IEVCStreamEventMap } from \"../events\";\nimport { IStream } from \"./stream\";\n\n/**\n * Interface for mocking a remote user's audio/video and the underlying types that represent their devices.\n */\nexport interface IRemoteStream extends IEVCEmitter, IStream {\n\treadonly isLocal: false;\n\n\t/**\n\t * Method to check if a remote stream has had quality reduced due to low bandwidth\n\t * @returns true if the stream is bandwidth limited, false otherwise\n\t */\n\tisBandwidthLimited(): boolean;\n}\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Base interface for device streams\n * @author Will Cooper\n * @module Epic.VideoApp.WebCore.Interfaces.Stream\n */\n\nimport { IDimensions } from \"~/types\";\nimport { IEVCEmitter, IEVCStreamEventMap } from \"../events\";\nimport { DeviceKind } from \"../types\";\n\nexport interface IStream extends IEVCEmitter {\n\t/**\n\t * Property that will be true if a stream belongs to the local user, false otherwise\n\t */\n\treadonly isLocal: boolean;\n\n\t/**\n\t * Method to check if the specified audio or video stream is enabled\n\t * @param kind Specifies either audio or video\n\t * @returns true if the specified stream is enabled, false otherwise\n\t */\n\tisEnabled: (kind: DeviceKind) => boolean;\n\n\t/**\n\t * Method to check if a stream contains audio, used for some screen share features\n\t * @returns true if the stream has audio, false otherwise\n\t */\n\thasAudio: () => boolean;\n\n\t/**\n\t * Method to get the dimensions of a video stream\n\t * @returns a dimensions object with the width and height of the video\n\t */\n\tgetVideoDimensions: () => IDimensions | undefined;\n\n\t/**\n\t * Method to capture an image from the video stream\n\t * @returns the image as a base64 string, or null if the image could not be captured\n\t */\n\tcaptureImage(): Promise;\n\n\t/**\n\t * Renders a stream's video to the DOM in a specified HTMLVideoElement\n\t * @param element The HTMLVideoElement to render the video stream to\n\t */\n\trenderVideo(element: HTMLVideoElement): HTMLVideoElement | null;\n\n\t/**\n\t * Removes a stream's video from the DOM\n\t * @param element The HTMLVideoElement to remove the video stream from\n\t */\n\tcleanupVideo(element: HTMLVideoElement): HTMLVideoElement | null;\n\n\t/**\n\t * Attach stream to an audio element in the DOM\n\t * @param element\n\t */\n\tattachAudio(element: HTMLAudioElement): HTMLAudioElement | null;\n\n\t/**\n\t * Remove a stream from an audio element in the DOM\n\t * @param element\n\t */\n\tdetachAudio(element: HTMLAudioElement): HTMLAudioElement | null;\n\n\t/**\n\t * Method to get the media stream track from a stream\n\t */\n\tgetMediaStreamTrack(kind: DeviceKind): MediaStreamTrack | undefined;\n}\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Interface for client errors for video vendors\n * @author Will Cooper\n * @module Epic.VideoApp.WebCore.Interfaces.VendorError\n */\n\nexport class VendorError extends Error {\n\tvendorErrorCode: string; // error code from the vendor\n\tsessionErrorCode: SessionErrorCodes; // EVC client error we map it to\n\tmessage: string; // error message from the vendor\n\tupdateConnectionStatus?: boolean; // whether to update the connection status\n\tisJoinRoomError?: boolean; // whether the error occurred when trying to join the room\n\n\tconstructor(\n\t\tvendorErrorCode: string,\n\t\tsessionErrorCode: SessionErrorCodes,\n\t\tmessage: string,\n\t\tname?: string,\n\t\tupdateConnectionStatus?: boolean,\n\t\tisJoinRoomError?: boolean,\n\t) {\n\t\tsuper(message);\n\t\tthis.vendorErrorCode = vendorErrorCode;\n\t\tthis.sessionErrorCode = sessionErrorCode;\n\t\tthis.message = message;\n\t\tthis.name = name ?? \"\";\n\t\tthis.updateConnectionStatus = updateConnectionStatus;\n\t\tthis.isJoinRoomError = isJoinRoomError;\n\t}\n}\n\n/**\n * Error codes used to control certain client behavior, like showing the correct error card.\n */\nexport enum SessionErrorCodes {\n\tunknown = 0,\n\tparticipantDuplicateIdentityError = 1,\n\troomCompletedError = 2,\n\troomMaxParticipantsExceededError = 3,\n\tparticipantRemovedFromSession = 4,\n\tfailedToAcquireVendor = 5,\n\tfailedToJoinRoom = 6,\n}\n\n/**\n * Check if the provided vendor error code is a permissions denied error\n */\nexport function isPermissionsError(vendorErrorCode?: string): boolean {\n\tif (!vendorErrorCode) {\n\t\treturn false;\n\t}\n\treturn vendorErrorCode === \"permissions\" || vendorErrorCode === \"0\";\n}\n\nexport const vendorFailureCode = \"vendor-failure\";\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Index for core interfaces\n * @author Trevor Roussel\n * @module Epic.VideoApp.WebCore.Interfaces.Index\n */\n\nexport * from \"./session\";\n\nexport * from \"./localUser\";\nexport * from \"./remoteUser\";\nexport * from \"./user\";\n\nexport * from \"./localStream\";\nexport * from \"./remoteStream\";\nexport * from \"./stream\";\n\nexport * from \"./vendorError\";\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Shared utilites for unwrapping non-vendor specific errors\n * @author Will Cooper\n * @module Epic.VideoApp.WebCore.Functions.Errors\n */\n\nimport { SessionErrorCodes, VendorError, vendorFailureCode } from \"../interfaces\";\n\n/**\n * Handle errors to initialize the vendor connection.\n *\n * @param input error output, may be a string, error object, or other unknown type\n * @returns - A mocked out Vendor Error with as much information as we can parse\n */\nexport function unwrapInitializeError(input: unknown): VendorError {\n\t// Daily seems to spit out only a string that includes some useful info \"failed to load object bundle\"\n\t// Try to fill in Vendor Error information when possible, otherwise include the error string for more visibility\n\tif (typeof input === \"string\") {\n\t\treturn new VendorError(\n\t\t\tvendorFailureCode,\n\t\t\tSessionErrorCodes.failedToAcquireVendor,\n\t\t\tinput,\n\t\t\t\"\",\n\t\t\ttrue,\n\t\t\ttrue,\n\t\t);\n\t} else {\n\t\tconst inputError = input as Error;\n\t\treturn new VendorError(\n\t\t\tvendorFailureCode,\n\t\t\tSessionErrorCodes.failedToAcquireVendor,\n\t\t\tinputError?.message,\n\t\t\tinputError?.name,\n\t\t\ttrue,\n\t\t\ttrue,\n\t\t);\n\t}\n}\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Function to determine the layout of the call\n * @author Will Cooper\n * @module Epic.VideoApp.WebCore.Functions.DetermineCallLayout\n */\n\nimport { CallLayout } from \"~/types\";\nimport { IRemoteUser, IUser } from \"~/web-core/interfaces\";\n\n/**\n * Determines the layout of video feeds in the call\n * @param participants list of remote users in the call\n * @param screenShareParticipant the user who is sharing their screen\n * @param localShareExists whether the local user is sharing their screen\n * @returns the layout of video feeds in the call\n */\nexport function determineCallLayout(\n\tparticipants: IRemoteUser[],\n\tscreenShareParticipant: IUser | null,\n\tlocalShareExists: boolean,\n): CallLayout {\n\tif (participants.length > 1) {\n\t\treturn \"multi-feed\";\n\t}\n\n\tif (screenShareParticipant) {\n\t\treturn \"multi-feed\";\n\t}\n\n\tif (participants.length === 1 && localShareExists) {\n\t\treturn \"multi-feed\";\n\t}\n\n\treturn \"two-feeds\";\n}\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Utilities for interacting with WebRTC Core Layer / Vendors\n * @author Will Cooper\n * @module Epic.VideoApp.WebCore.Functions.Utils\n */\n\n// Helper to determine if we should show the warning message before we request device permissions\nexport function shouldShowPermissionWarning(deviceInfos: MediaDeviceInfo[]): boolean {\n\tconst cameraDevices = deviceInfos.filter((deviceInfo) => deviceInfo.kind === \"videoinput\");\n\tconst microphoneDevices = deviceInfos.filter((deviceInfo) => deviceInfo.kind === \"audioinput\");\n\n\tconst hasCamera = cameraDevices.length > 0;\n\tconst hasMicrophone = microphoneDevices.length > 0;\n\n\tconst cameraPermissionsAllowed = cameraDevices.filter((deviceInfo) => deviceInfo.label !== \"\").length > 0;\n\tconst microphonePermissionsAllowed =\n\t\tmicrophoneDevices.filter((deviceInfo) => deviceInfo.label !== \"\").length > 0;\n\n\t// Browsers don't seem to ask for permissions if devices are missing\n\tconst willAskForCamera = hasCamera && !cameraPermissionsAllowed;\n\tconst willAskForMicrophone = hasMicrophone && !microphonePermissionsAllowed;\n\n\treturn willAskForCamera || willAskForMicrophone;\n}\n\n/**\n * Given a ConstrainDOMString, returns a string (or undefined if given undefined)\n * @param constrain the ConstrainDOMString value\n * @returns A string representation of the given ConstrainDOMString value, or undefined if given undefined\n */\nexport function constrainToString(constrain: ConstrainDOMString | undefined): string | undefined {\n\tif (!constrain || typeof constrain === \"string\") {\n\t\treturn constrain;\n\t}\n\n\t//Constrain is an array\n\tif (Array.isArray(constrain) && constrain.length > 0) {\n\t\treturn constrain[0];\n\t}\n\n\tlet stringOrArray: string | string[] | undefined;\n\tif (Object.getPrototypeOf(constrain) === Object.prototype) {\n\t\tif (Object.keys(constrain).length === 0) {\n\t\t\t// Object is empty\n\t\t\treturn undefined;\n\t\t}\n\t\tif (\"exact\" in constrain) {\n\t\t\tstringOrArray = constrain.exact;\n\t\t} else if (\"ideal\" in constrain) {\n\t\t\tstringOrArray = constrain.ideal;\n\t\t} else {\n\t\t\t// Object is not empty, but doesn't have exact or ideal\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\tif (!stringOrArray) {\n\t\treturn undefined;\n\t}\n\n\tif (Array.isArray(stringOrArray)) {\n\t\treturn stringOrArray[0];\n\t}\n\n\treturn stringOrArray;\n}\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Core function export\n * @author Will Cooper\n * @module Epic.VideoApp.WebCore.Functions.Index\n */\n\nexport * from \"./determineCallLayout\";\nexport * from \"./initializeVendor\";\nexport * from \"./utils\";\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Event definitions for helper components\n * @author Trevor Roussel\n * @module Epic.VideoApp.WebCore.Events.HelperEvents\n */\n\nimport { IEVCEvent } from \"./interfaces/evcEmitter\";\n\n/* Audio level updated events (not used by Twilio implementation) */\nexport interface IEVCAudioLevelEvent extends IEVCEvent<\"audioLevelUpdated\"> {\n\tvolumeLevel: number;\n}\n\nexport interface IEVCAudioEventMap {\n\taudioLevelUpdated: IEVCAudioLevelEvent;\n}\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Implementation for typed event emitter class\n * @author Trevor Roussel\n * @module Epic.VideoApp.WebCore.Events.Implementations.EvcEmitter\n */\n\nimport { EventEmitter } from \"events\";\nimport { IEVCEmitter } from \"../interfaces/evcEmitter\";\n\nexport class EVCEmitter implements IEVCEmitter {\n\tprivate eventEmitter: EventEmitter;\n\n\tconstructor() {\n\t\tthis.eventEmitter = new EventEmitter();\n\t}\n\n\ton(\n\t\ttype: TEventType,\n\t\thandler: (args: TEventMap[TEventType]) => void,\n\t): void {\n\t\tthis.eventEmitter.on(type, handler);\n\t}\n\n\tonce(\n\t\ttype: TEventType,\n\t\thandler: (args: TEventMap[TEventType]) => void,\n\t): void {\n\t\tthis.eventEmitter.once(type, handler);\n\t}\n\n\toff(\n\t\ttype: TEventType,\n\t\thandler: (args: TEventMap[TEventType]) => void,\n\t): void {\n\t\tthis.eventEmitter.off(type, handler);\n\t}\n\n\tremoveAllListeners(type?: keyof TEventMap & string): void {\n\t\tthis.eventEmitter.removeAllListeners(type);\n\t}\n\n\temit(type: TEventType, event: TEventMap[TEventType]): void {\n\t\tthis.eventEmitter.emit(type, event);\n\t}\n\n\tlistenerCount(event: keyof TEventMap & string): number {\n\t\treturn this.eventEmitter.listenerCount(event);\n\t}\n}\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Interfaces for typed event emitter class\n * @author Trevor Roussel\n * @module Epic.VideoApp.WebCore.Events.Interfaces.EvcEmitter\n */\n\nexport interface IEVCEvent {\n\ttype: TType;\n}\n\nexport interface IEVCEmitter {\n\ton: (\n\t\ttype: TEventType,\n\t\thandler: (args: TEventMap[TEventType]) => void,\n\t) => void;\n\n\tonce: (\n\t\ttype: TEventType,\n\t\thandler: (args: TEventMap[TEventType]) => void,\n\t) => void;\n\n\toff: (\n\t\ttype: TEventType,\n\t\thandler: (args: TEventMap[TEventType]) => void,\n\t) => void;\n\n\tremoveAllListeners: (type?: keyof TEventMap & string) => void;\n\n\temit: (\n\t\ttype: TEventType,\n\t\tevent: TEventMap[TEventType],\n\t) => void;\n\n\tlistenerCount: (event: keyof TEventMap & string) => number;\n}\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Definitions for session events\n * @author Trevor Roussel\n * @module Epic.VideoApp.WebCore.Events.SessionEvents\n */\n\nimport { IRemoteUser, ISession } from \"../interfaces\";\nimport { VendorError } from \"../interfaces/vendorError\";\nimport { IEVCEvent } from \"./interfaces/evcEmitter\";\nimport { IEVCScreenShareEvent } from \"./userEvents\";\n\nexport interface IEVCSessionConnectionEvent extends IEVCEvent<\"sessionConnected\"> {\n\tsession: ISession;\n}\n\nexport interface IEVCRemoteParticipantUpdatedEvent extends IEVCEvent<\"remoteParticipantUpdated\"> {\n\tparticipant: IRemoteUser;\n}\n\nexport interface IEVCParticipantConnectionEvent\n\textends IEVCEvent {\n\tparticipant: IRemoteUser;\n}\n\nexport interface IEVCDominantSpeakerEvent extends IEVCEvent<\"dominantSpeakerChanged\"> {\n\tparticipant: IRemoteUser | null;\n}\n\nexport interface IEVCSessionDisconnectionEvent extends IEVCEvent<\"disconnected\"> {\n\terror?: VendorError;\n}\n\nexport interface IEVCSessionReconnectingEvent extends IEVCEvent<\"reconnecting\"> {\n\terror?: VendorError;\n\twasDisconnected?: boolean;\n}\n\nexport interface IEVCSessionDebugEvent extends IEVCEvent<\"debug\"> {\n\tmessage: string;\n}\n\nexport interface IEVCSessionEventMap {\n\tsessionConnected: IEVCSessionConnectionEvent;\n\tparticipantConnected: IEVCParticipantConnectionEvent<\"participantConnected\">;\n\tparticipantDisconnected: IEVCParticipantConnectionEvent<\"participantDisconnected\">;\n\tscreenShareStarted: IEVCScreenShareEvent<\"screenShareStarted\">;\n\tscreenShareStopped: IEVCScreenShareEvent<\"screenShareStopped\">;\n\tremoteParticipantUpdated: IEVCRemoteParticipantUpdatedEvent;\n\tdominantSpeakerChanged: IEVCDominantSpeakerEvent;\n\tdisconnected: IEVCSessionDisconnectionEvent;\n\treconnecting: IEVCSessionReconnectingEvent;\n\tdebug: IEVCSessionDebugEvent;\n}\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Definitions for stream events\n * @author Trevor Roussel\n * @module Epic.VideoApp.WebCore.Events.StreamEvents\n */\n\nimport { IDimensions } from \"~/types\";\nimport { IEVCAudioLevelEvent } from \"./helperEvents\";\nimport { IEVCEvent } from \"./interfaces/evcEmitter\";\n\nexport interface IEVCDimensionEvent extends IEVCEvent<\"videoDimensionsChanged\"> {\n\tnewDim: IDimensions;\n}\n\nexport interface IEVCMediaTrackEvent extends IEVCEvent<\"videoReady\" | \"audioReady\"> {\n\ttrack: MediaStreamTrack;\n}\n\nexport interface IEVCStreamEventMap {\n\tvideoEnabled: IEVCEvent<\"videoEnabled\">;\n\tvideoDisabled: IEVCEvent<\"videoDisabled\">;\n\tvideoDimensionsChanged: IEVCDimensionEvent;\n\taudioEnabled: IEVCEvent<\"audioEnabled\">;\n\taudioDisabled: IEVCEvent<\"audioDisabled\">;\n\taudioStopped: IEVCEvent<\"audioStopped\">;\n\tvideoReady: IEVCMediaTrackEvent;\n\taudioReady: IEVCMediaTrackEvent;\n\tvideoBandwidthLow: IEVCEvent<\"videoBandwidthLow\">;\n\tvideoBandwidthNormal: IEVCEvent<\"videoBandwidthNormal\">;\n\taudioDeviceChanged: IEVCEvent<\"audioDeviceChanged\">;\n\tvideoDeviceChanged: IEVCEvent<\"videoDeviceChanged\">;\n\taudioLevelUpdated: IEVCAudioLevelEvent;\n}\n\nexport type MediaEvent = \"videoEnabled\" | \"videoDisabled\" | \"audioEnabled\" | \"audioDisabled\";\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Definitions for user events\n * @author Trevor Roussel\n * @module Epic.VideoApp.WebCore.Events.UserEvents\n */\n\nimport { IRemoteUser, IUser } from \"../interfaces\";\nimport { VideoType } from \"../types\";\nimport { IEVCEvent } from \"./interfaces/evcEmitter\";\n\nexport interface IEVCParticipantNetworkQualityChangedEvent extends IEVCEvent<\"networkQualityLevelChanged\"> {\n\tnewValue: number;\n}\n\nexport interface IEVCParticipantUpdatedEvent extends IEVCEvent<\"participantUpdated\"> {\n\tparticipant: IUser;\n\tvideoType: VideoType;\n}\n\nexport interface IEVCScreenShareEvent\n\textends IEVCEvent {\n\tparticipant: IRemoteUser;\n}\n\nexport type BackgroundProcessorStatus = \"finished\" | \"failed\";\n\nexport interface IEVCBackgroundProcessorsDoneEvent extends IEVCEvent<\"backgroundProcessorsDone\"> {\n\tstatus: BackgroundProcessorStatus;\n\tsuccessfulProcessors: string[];\n}\n\nexport interface IEVCDataMessageEvent extends IEVCEvent<\"dataMessageReceived\"> {\n\tmessage: string;\n}\n\nexport interface IEVCUserEventMap {\n\tnetworkQualityLevelChanged: IEVCParticipantNetworkQualityChangedEvent;\n\tparticipantUpdated: IEVCParticipantUpdatedEvent;\n\tscreenShareStarted: IEVCScreenShareEvent<\"screenShareStarted\">;\n\tscreenShareStopped: IEVCScreenShareEvent<\"screenShareStopped\">;\n\tbackgroundProcessorsDone: IEVCBackgroundProcessorsDoneEvent;\n\tdataMessageReceived: IEVCDataMessageEvent;\n}\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Index for core events\n * @author Trevor Roussel\n * @module Epic.VideoApp.WebCore.Events.Index\n */\n\nexport * from \"./helperEvents\";\nexport * from \"./implementations/evcEmitter\";\nexport * from \"./interfaces/evcEmitter\";\nexport * from \"./sessionEvents\";\nexport * from \"./streamEvents\";\nexport * from \"./userEvents\";\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Core session API functions\n * @author Noah Allen\n * @module Epic.VideoApp.WebCore.Functions.Session\n */\n\nimport { makeRequest } from \"~/utils/request\";\n\n/**\n * Updates track subscription for the current user to allow them to receive data track messages\n */\nexport async function allowDataTrackMessages(jwt: string): Promise {\n\treturn makeRequest(\"api/VideoCall/MediaSubscriptions/DataOnly\", \"POST\", jwt);\n}\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Implements error handling utilities for Daily\n * @author Trevor Roussel\n * @module Epic.VideoApp.WebCore.Vendor.Daily.Functions.DailyErrorUtils\n */\n\nimport {\n\tDailyCamConstraintsError,\n\tDailyCamDeviceNotFoundError,\n\tDailyCameraErrorObject,\n\tDailyCameraErrorType,\n\tDailyCamInUseError,\n\tDailyCamPermissionsError,\n\tDailyCamTypeError,\n\tDailyCamUnknownError,\n\tDailyDeviceInfos,\n\tDailyEventObjectFatalError,\n\tDailyEventObjectGenericError,\n\tDailyFatalErrorType,\n\tDailyMediaDeviceInfo,\n} from \"@daily-co/daily-js\";\nimport { DeviceStatus, DeviceStatusSubtype } from \"~/types\";\nimport { SessionErrorCodes, VendorError } from \"~/web-core/interfaces\";\nimport { IDeviceUpdate } from \"../../twilio\";\n\nexport const DailyDuplicateErrorMessage = \"Duplicate user_id\";\n\n/**\n * Return a generic Error from a Daily camera switching error\n * @param error Error return type from attempts to switch a camera with the Daily API\n * @returns Daily error message wrapped in a generic Error\n */\nexport function makeDailyCamErrorGeneric(\n\terror:\n\t\t| DailyCamPermissionsError\n\t\t| DailyCamDeviceNotFoundError\n\t\t| DailyCamConstraintsError\n\t\t| DailyCamInUseError\n\t\t| DailyCamTypeError\n\t\t| DailyCamUnknownError\n\t\t| undefined,\n): Error | undefined {\n\tif (!error) {\n\t\treturn undefined;\n\t}\n\treturn new Error(error.msg);\n}\n\n/**\n * Process Daily errors into generic device updates\n */\nexport function processDailyError(\n\tdeviceErrors: DailyCameraErrorObject[],\n): IDeviceUpdate[] {\n\tconst updates: IDeviceUpdate[] = [];\n\tdeviceErrors.forEach((error) => {\n\t\tswitch (error.type) {\n\t\t\tcase \"permissions\":\n\t\t\t\tif (error.blockedMedia.includes(\"video\")) {\n\t\t\t\t\tupdates.push({\n\t\t\t\t\t\tdevice: \"camera\",\n\t\t\t\t\t\tstatus: DeviceStatus.error,\n\t\t\t\t\t\terrorType: DeviceStatusSubtype.permissionsError,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (error.blockedMedia.includes(\"audio\")) {\n\t\t\t\t\tupdates.push({\n\t\t\t\t\t\tdevice: \"mic\",\n\t\t\t\t\t\tstatus: DeviceStatus.error,\n\t\t\t\t\t\terrorType: DeviceStatusSubtype.permissionsError,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"not-found\":\n\t\t\t\tif (error.missingMedia.includes(\"video\")) {\n\t\t\t\t\tupdates.push({\n\t\t\t\t\t\tdevice: \"camera\",\n\t\t\t\t\t\tstatus: DeviceStatus.error,\n\t\t\t\t\t\terrorType: DeviceStatusSubtype.general,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (error.missingMedia.includes(\"audio\")) {\n\t\t\t\t\tupdates.push({\n\t\t\t\t\t\tdevice: \"mic\",\n\t\t\t\t\t\tstatus: DeviceStatus.error,\n\t\t\t\t\t\terrorType: DeviceStatusSubtype.general,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"cam-in-use\":\n\t\t\t\tupdates.push({\n\t\t\t\t\tdevice: \"camera\",\n\t\t\t\t\tstatus: DeviceStatus.error,\n\t\t\t\t\terrorType: DeviceStatusSubtype.hardwareError,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase \"mic-in-use\":\n\t\t\t\tupdates.push({\n\t\t\t\t\tdevice: \"mic\",\n\t\t\t\t\tstatus: DeviceStatus.error,\n\t\t\t\t\terrorType: DeviceStatusSubtype.hardwareError,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase \"cam-mic-in-use\":\n\t\t\t\tupdates.push({\n\t\t\t\t\tdevice: \"camera\",\n\t\t\t\t\tstatus: DeviceStatus.error,\n\t\t\t\t\terrorType: DeviceStatusSubtype.hardwareError,\n\t\t\t\t});\n\t\t\t\tupdates.push({\n\t\t\t\t\tdevice: \"mic\",\n\t\t\t\t\tstatus: DeviceStatus.error,\n\t\t\t\t\terrorType: DeviceStatusSubtype.hardwareError,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tupdates.push({\n\t\t\t\t\tdevice: \"camera\",\n\t\t\t\t\tstatus: DeviceStatus.error,\n\t\t\t\t\terrorType: DeviceStatusSubtype.unknown,\n\t\t\t\t});\n\t\t\t\tupdates.push({\n\t\t\t\t\tdevice: \"mic\",\n\t\t\t\t\tstatus: DeviceStatus.error,\n\t\t\t\t\terrorType: DeviceStatusSubtype.unknown,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t}\n\t});\n\treturn updates;\n}\n\n/**\n * Map errors from Daily workflows to generic error codes\n * @param error - A potentially any/unknown type (see DailyFatalError and DailyEventObjectFatalError) or a traditional Error\n * @returns - A VendorError object with the corresponding error code\n */\nexport function dailyErrorToVendorError(error: unknown): VendorError {\n\tif ((error as IDailyFatalError)?.type !== undefined) {\n\t\treturn dailyFatalErrorToVendorError(error as IDailyFatalError);\n\t} else if ((error as DailyEventObjectFatalError)?.action === \"error\") {\n\t\tconst dailyEventErrorObject = error as DailyEventObjectFatalError;\n\t\tif (dailyEventErrorObject?.error !== undefined) {\n\t\t\treturn dailyFatalErrorToVendorError(dailyEventErrorObject.error as IDailyFatalError);\n\t\t}\n\n\t\treturn new VendorError(\n\t\t\tdailyEventErrorObject.action,\n\t\t\tSessionErrorCodes.unknown,\n\t\t\tdailyEventErrorObject.errorMsg ?? \"Unknown error\",\n\t\t);\n\t} else if ((error as DailyEventObjectGenericError)?.action === \"load-attempt-failed\") {\n\t\tconst loadError = error as DailyEventObjectGenericError;\n\t\treturn new VendorError(\n\t\t\tloadError.action,\n\t\t\tSessionErrorCodes.failedToJoinRoom,\n\t\t\tloadError.errorMsg ?? \"Failed to join room\",\n\t\t\tloadError.action,\n\t\t);\n\t} else {\n\t\treturn new VendorError(\"\", SessionErrorCodes.unknown, \"Unknown error\", \"Unknown\");\n\t}\n}\n\n/**\n * Validate and report invalid devices in a Daily device info object\n * @param cameraInfo - The Daily device info object to validate\n * @param errorArr - An array of Daily errors to add to if invalid devices are found and are not already listed in the array\n */\nexport function validateAndReportInvalidDevices(\n\tcameraInfo: DailyDeviceInfos,\n\terrorArr: DailyCameraErrorObject[],\n): void {\n\t// Add a device not found error if there aren't other camera related errors reported by Daily but the camera device is invalid\n\tif ((errorArr.length === 0 || !isDailyCamError(errorArr[0])) && !hasDailyValidCam(cameraInfo)) {\n\t\taddDailyDeviceNotFoundError(errorArr, \"video\");\n\t}\n\t// Similarly, add a device not found error if there aren't other microphone related errors reported by Daily but the microphone device is invalid\n\tif ((errorArr.length === 0 || !isDailyMicError(errorArr[0])) && !hasDailyValidMic(cameraInfo)) {\n\t\taddDailyDeviceNotFoundError(errorArr, \"audio\");\n\t}\n}\n\n/**\n * Map error codes from Daily to the generic error types EVC runs on.\n * @param dailyErrorCode - The string code of the daily error\n * @returns - The corresponding EVC error code, or unknown if not found.\n */\nfunction dailyFatalErrorToVendorError(dailyError: IDailyFatalError): VendorError {\n\tswitch (dailyError.type) {\n\t\tcase \"ejected\":\n\t\t\treturn new VendorError(\n\t\t\t\tdailyError.type,\n\t\t\t\tdailyError.msg === \"Duplicate user_id\"\n\t\t\t\t\t? SessionErrorCodes.participantDuplicateIdentityError\n\t\t\t\t\t: SessionErrorCodes.participantRemovedFromSession,\n\t\t\t\tdailyError.msg ?? \"Participant removed from session\",\n\t\t\t);\n\t\tcase \"no-room\":\n\t\t\treturn new VendorError(\n\t\t\t\tdailyError.type,\n\t\t\t\tSessionErrorCodes.roomCompletedError,\n\t\t\t\tdailyError.msg ?? \"Room completed error\",\n\t\t\t);\n\t\tcase \"meeting-full\":\n\t\t\treturn new VendorError(\n\t\t\t\tdailyError.type,\n\t\t\t\tSessionErrorCodes.roomMaxParticipantsExceededError,\n\t\t\t\tdailyError.msg ?? \"Room max participants exceeded error\",\n\t\t\t);\n\t\tcase \"connection-error\":\n\t\t\treturn new VendorError(\n\t\t\t\tdailyError.type,\n\t\t\t\tSessionErrorCodes.failedToJoinRoom,\n\t\t\t\tdailyError.msg ?? \"Failed to join room\",\n\t\t\t);\n\t\tdefault:\n\t\t\treturn new VendorError(\n\t\t\t\tdailyError.type,\n\t\t\t\tSessionErrorCodes.unknown,\n\t\t\t\tdailyError.msg ?? \"Unknown error\",\n\t\t\t);\n\t}\n}\n\n/**\n * Check if a Daily device info object has a valid camera device\n * @param cameraInfo - The Daily device info object to check\n * @returns - True if the camera device has a valid deviceId, false otherwise\n */\nfunction hasDailyValidCam(cameraInfo: DailyDeviceInfos): boolean {\n\treturn (cameraInfo.camera as DailyMediaDeviceInfo).deviceId ? true : false;\n}\n\n/**\n * Check if a Daily device info object has a valid microphone device\n * @param cameraInfo - The Daily device info object to check\n * @returns - True if the microphone device has a valid deviceId, false otherwise\n */\nfunction hasDailyValidMic(cameraInfo: DailyDeviceInfos): boolean {\n\treturn (cameraInfo.mic as DailyMediaDeviceInfo).deviceId ? true : false;\n}\n\n/**\n * Check if a Daily error object is related to Camera device\n * @param error - The Daily error object to check\n * @returns - True if the error is related to a camera device, false otherwise\n */\nexport function isDailyCamError(error: DailyCameraErrorObject): boolean {\n\treturn (\n\t\t(error.type === \"permissions\" && error.blockedMedia.includes(\"video\")) ||\n\t\t(error.type === \"not-found\" && error.missingMedia.includes(\"video\")) ||\n\t\terror.type === \"cam-in-use\" ||\n\t\terror.type === \"cam-mic-in-use\"\n\t);\n}\n\n/**\n * Check if a Daily error object is related to Microphone device\n * @param error - The Daily error object to check\n * @returns - True if the error is related to a microphone device, false otherwise\n */\nexport function isDailyMicError(error: DailyCameraErrorObject): boolean {\n\treturn (\n\t\t(error.type === \"permissions\" && error.blockedMedia.includes(\"audio\")) ||\n\t\t(error.type === \"not-found\" && error.missingMedia.includes(\"audio\")) ||\n\t\terror.type === \"mic-in-use\" ||\n\t\terror.type === \"cam-mic-in-use\"\n\t);\n}\n\n/**\n * Add a Daily \"not found\" device error object to an array of Daily errors for a camera or microphone device\n */\nfunction addDailyDeviceNotFoundError(\n\terrorArr: DailyCameraErrorObject[],\n\tmediaType: \"audio\" | \"video\",\n): void {\n\terrorArr.push({\n\t\ttype: \"not-found\",\n\t\tmissingMedia: [mediaType],\n\t\tmsg: \"No \" + mediaType + \" devices found\",\n\t});\n}\nexport interface IDailyFatalError {\n\ttype: DailyFatalErrorType;\n\tmsg: string;\n}\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Utility functions for Daily implementation\n * @author Trevor Roussel\n * @module Epic.VideoApp.WebCore.Vendor.Daily.Functions.Utils\n */\n\nimport { DailyDeviceInfos } from \"@daily-co/daily-js\";\nimport { DeviceType } from \"~/web-core/types\";\n\n/**\n * Check if a MediaStreamTrack can play media\n * @param track MediaStreamTrack to check if it is enabled, or undefined if it doesn't exist\n * @returns True if the track is playing media, false otherwise\n */\nexport function isTrackEnabled(track: MediaStreamTrack | undefined): boolean {\n\tif (!track) {\n\t\treturn false;\n\t}\n\treturn track.enabled && track.readyState !== \"ended\";\n}\n\n/**\n * Returns a usable MediaDeviceInfo object from a DailyDeviceInfos object\n * @param info DailyDeviceInfos object to attempt to get a MediaDeviceInfo from\n * @param kind DeviceType (either \"camera\" or \"mic\") to get the MediaDeviceInfo for\n * @returns MediaDeviceInfo for the specified camera or mic, or undefined if the switch failed\n */\nexport function getMediaDeviceInfoFromDailyDeviceInfos(\n\tinfo: DailyDeviceInfos,\n\tkind: DeviceType,\n): MediaDeviceInfo | undefined {\n\t// Validate that this is not an empty object - if it isn't, assume it's a MediaDeviceInfo object\n\tif (\"deviceId\" in info[kind]) {\n\t\t// Need to make this assertion because otherwise the potential empty object return causes errors\n\t\treturn info[kind] as MediaDeviceInfo;\n\t} else {\n\t\treturn undefined;\n\t}\n}\n\n/**\n * Exponential backoff function for retrying operations.\n * @param baseMs The base delay in milliseconds\n * @param maxMs The maximum delay in milliseconds - we will clamp the delay to this value (rather than stop backoff).\n * @param attempts The retry attempt number\n * @param timerFinishedCallback A callback function to call when the timer finishes\n */\nexport function exponentialBackoff(\n\tbaseMs: number,\n\tmaxMs: number,\n\tattempts: number,\n\ttimerFinishedCallback: () => void,\n): void {\n\tconst delay = Math.min(baseMs * 2 ** attempts, maxMs);\n\tvoid setTimeout(timerFinishedCallback, delay);\n}\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Generic class that validates background processor images for any vendor\n * that loads virtual backgrounds using image urls\n * @author Trevor Roussel\n * @module Epic.VideoApp.WebCore.Helpers.VirtualBackgroundLoader\n */\n\nimport { BackgroundSettings } from \"~/types/backgrounds\";\nimport { EVCEmitter, IEVCUserEventMap } from \"../events\";\n\nexport type BlurBackgroundOnLoad = (background: BackgroundSettings) => Promise;\nexport type ImageBackgroundOnLoad = (\n\tbackground: BackgroundSettings,\n\timg: HTMLImageElement,\n) => Promise;\n\nexport class VirtualBackgroundLoader extends EVCEmitter {\n\tprivate _loadAttempts: number = 0;\n\tprivate _loadAttemptsSuccess: number = 0;\n\tprivate _totalBackgrounds: number = 0;\n\tprivate _loadedProcessors: string[] = [];\n\n\tconstructor() {\n\t\tsuper();\n\t}\n\n\t/**\n\t * Method to call to validate and optionally initialize processors\n\t * @param backgrounds Array of background metadata used to initialize a processor\n\t * @param availableBackgroundsCount Total number of backgrounds to attempt to load\n\t * @param blurOnLoad Optional callback to execute when a blur processor is loaded, can be used for extra initialization\n\t * The function should return 'true' if the processor should be considered loaded, 'false' otherwise\n\t * @param imgOnLoad Optional callback to execute when an image processor is loaded, can be used for extra initialization\n\t * The function should return 'true' if the processor should be considered loaded, 'false' otherwise\n\t */\n\tasync validateProcessors(\n\t\tbackgrounds: BackgroundSettings[],\n\t\tavailableBackgroundsCount: number,\n\t\tblurOnLoad?: BlurBackgroundOnLoad,\n\t\timgOnLoad?: ImageBackgroundOnLoad,\n\t): Promise {\n\t\tthis._totalBackgrounds = availableBackgroundsCount;\n\t\tconst promises = backgrounds.map(async (background) => {\n\t\t\tif (background.type === \"blur\") {\n\t\t\t\t// No validation needed for blur processors\n\t\t\t\tthis._loadedProcessors.push(background.path);\n\t\t\t\tif (blurOnLoad !== undefined) {\n\t\t\t\t\tthis.updateLoadStatus(await blurOnLoad(background));\n\t\t\t\t} else {\n\t\t\t\t\tthis.updateLoadStatus(true);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tif (await this.tryLoadImage(background, imgOnLoad)) {\n\t\t\t\t\tthis._loadedProcessors.push(background.path);\n\t\t\t\t\tthis.updateLoadStatus(true);\n\t\t\t\t} else {\n\t\t\t\t\tthis.updateLoadStatus(false);\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\tthis.updateLoadStatus(false);\n\t\t\t}\n\t\t});\n\t\tawait Promise.all(promises);\n\t}\n\n\t/**\n\t * Private method to attempt to load an image used for backgrounds\n\t * @param background Processor metadata\n\t * @param onLoad Optional callback to call after the image is loaded for additional initialization\n\t * @returns True if the image was loaded successfully, false otherwise\n\t */\n\tprivate tryLoadImage(background: BackgroundSettings, onLoad?: ImageBackgroundOnLoad): Promise {\n\t\t// This should be impossible but it makes typescript realize the setting has a src property\n\t\tif (background.type !== \"image\") {\n\t\t\tthrow new Error(\"Invalid background type\");\n\t\t}\n\t\tconst img = new Image();\n\t\treturn new Promise((resolve) => {\n\t\t\timg.onload = () => {\n\t\t\t\tif (onLoad !== undefined) {\n\t\t\t\t\tresolve(onLoad(background, img));\n\t\t\t\t} else {\n\t\t\t\t\tresolve(true);\n\t\t\t\t}\n\t\t\t};\n\t\t\timg.onerror = () => {\n\t\t\t\tresolve(false);\n\t\t\t};\n\t\t\timg.src = background.src;\n\t\t});\n\t}\n\n\t/**\n\t * Method to call to update the load status of the processors\n\t * When all processors have attempted to be loaded, emit an event so the app layer can handle the result\n\t * @param wasSuccessful Pass true to indicate a successful load, false otherwise\n\t */\n\tprivate updateLoadStatus(wasSuccessful: boolean): void {\n\t\tthis._loadAttempts++;\n\t\tif (wasSuccessful) {\n\t\t\tthis._loadAttemptsSuccess++;\n\t\t}\n\t\tif (this._loadAttempts === this._totalBackgrounds) {\n\t\t\tif (this._loadAttemptsSuccess === 0) {\n\t\t\t\tthis.emit(\"backgroundProcessorsDone\", {\n\t\t\t\t\ttype: \"backgroundProcessorsDone\",\n\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\tsuccessfulProcessors: this._loadedProcessors,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.emit(\"backgroundProcessorsDone\", {\n\t\t\t\t\ttype: \"backgroundProcessorsDone\",\n\t\t\t\t\tstatus: \"finished\",\n\t\t\t\t\tsuccessfulProcessors: this._loadedProcessors,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n}\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Implements virtual background initialization and management for Daily\n * @author Trevor Roussel\n * @module Epic.VideoApp.WebCore.Vendor.Daily.Helpers.DailyBackgroundManager\n */\n\nimport { DailyCall, DailyEventObjectNonFatalError } from \"@daily-co/daily-js\";\nimport { BackgroundSettings } from \"~/types/backgrounds\";\nimport { ImageBackgroundOnLoad, VirtualBackgroundLoader } from \"~/web-core/helpers/virtualBackgroundLoader\";\n\nexport class DailyBackgroundManager extends VirtualBackgroundLoader {\n\tstatic backgroundInitializationDone: boolean = false;\n\tbackgroundImageBytesMap: Map;\n\tprivate _testBackgroundCall: DailyCall;\n\n\tconstructor(testBackgroundCall: DailyCall) {\n\t\tsuper();\n\t\tthis.backgroundImageBytesMap = new Map();\n\t\tthis._testBackgroundCall = testBackgroundCall;\n\t}\n\n\t/**\n\t * Applies a test processor to the preview track to validate that backgrounds can load before displaying background options\n\t * @returns Promise that resolves true if a background is able to successfully apply, false otherwise\n\t */\n\tstatic async testApplyBackgroundProcessor(call: DailyCall): Promise {\n\t\tconst validateProcessorPromise = new Promise((resolve) => {\n\t\t\tconst removeBackgroundTestListeners = (): void => {\n\t\t\t\tcall.off(\"input-settings-updated\", onInputSettingsUpdated);\n\t\t\t\tcall.off(\"nonfatal-error\", onNonFatalError);\n\t\t\t};\n\n\t\t\tconst onInputSettingsUpdated = (): void => {\n\t\t\t\tremoveBackgroundTestListeners();\n\t\t\t\tresolve(true);\n\t\t\t};\n\n\t\t\tconst onNonFatalError = (event: DailyEventObjectNonFatalError): void => {\n\t\t\t\tif (event.type === \"input-settings-error\") {\n\t\t\t\t\tremoveBackgroundTestListeners();\n\t\t\t\t\tresolve(false);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// Background application success event\n\t\t\tcall.on(\"input-settings-updated\", onInputSettingsUpdated);\n\t\t\t// Background application failure event\n\t\t\tcall.on(\"nonfatal-error\", onNonFatalError);\n\t\t\tvoid call.updateInputSettings({\n\t\t\t\tvideo: { processor: { type: \"face-detection\" } },\n\t\t\t});\n\t\t});\n\n\t\tconst success = await validateProcessorPromise;\n\n\t\tvoid call.updateInputSettings({ video: { processor: { type: \"none\" } } });\n\t\treturn success;\n\t}\n\n\tprivate imageProcessorInitialize: ImageBackgroundOnLoad = async (\n\t\tbackground: BackgroundSettings,\n\t\t_img: HTMLImageElement,\n\t): Promise => {\n\t\tif (background.type !== \"image\") {\n\t\t\treturn false;\n\t\t}\n\t\ttry {\n\t\t\tconst backgroundImageBytes = await fetch(background.src).then((response) =>\n\t\t\t\tresponse.arrayBuffer(),\n\t\t\t);\n\t\t\tthis.backgroundImageBytesMap.set(background.path, backgroundImageBytes);\n\t\t\treturn true;\n\t\t} catch (error) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tasync initializeBackgroundProcessors(\n\t\tbackgrounds: BackgroundSettings[],\n\t\tavailableBackgroundsCount: number,\n\t\tmainCall: DailyCall,\n\t): Promise {\n\t\t// In order for failures to be caught, the camera must be started before applying the processor\n\t\tawait this._testBackgroundCall.startCamera();\n\t\tthis._testBackgroundCall.setLocalVideo(true);\n\n\t\t// First, apply a test processor to the test call machine to validate the network request can succeed\n\t\t// If this fails, we don't want to try to apply a background to the main call, since it will trigger aggressive privacy handling\n\t\t// that will prevent the user's camera from enabling. This validates that the network request can succeed and does preloading so the preview processor can apply quickly\n\t\tconst previewProcessorPreApplicationSucceeded =\n\t\t\tawait DailyBackgroundManager.testApplyBackgroundProcessor(this._testBackgroundCall);\n\t\tif (!previewProcessorPreApplicationSucceeded) {\n\t\t\tthis.emit(\"backgroundProcessorsDone\", {\n\t\t\t\ttype: \"backgroundProcessorsDone\",\n\t\t\t\tstatus: \"failed\",\n\t\t\t\tsuccessfulProcessors: [],\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tthis._testBackgroundCall.setLocalVideo(false);\n\n\t\t// This should succeed (based on our test with the preview call), but do this pre-loading logic here so that processor application can happen more quickly\n\t\tconst mainCallProcessorPreApplicationSucceeded =\n\t\t\tawait DailyBackgroundManager.testApplyBackgroundProcessor(mainCall);\n\t\tif (!mainCallProcessorPreApplicationSucceeded) {\n\t\t\tthis.emit(\"backgroundProcessorsDone\", {\n\t\t\t\ttype: \"backgroundProcessorsDone\",\n\t\t\t\tstatus: \"failed\",\n\t\t\t\tsuccessfulProcessors: [],\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\t// Validate that the image processors can be reached\n\t\tawait this.validateProcessors(\n\t\t\tbackgrounds,\n\t\t\tavailableBackgroundsCount,\n\t\t\tundefined,\n\t\t\tthis.imageProcessorInitialize,\n\t\t);\n\t\tDailyBackgroundManager.backgroundInitializationDone = true;\n\t}\n}\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Event handlers for Daily call events\n * @author Will Cooper\n * @module Epic.VideoApp.WebCore.Vendor.Daily.Implementations.DailyEventHandlers\n */\n\nimport {\n\tDailyEventObject,\n\tDailyEventObjectActiveSpeakerChange,\n\tDailyEventObjectFatalError,\n\tDailyEventObjectParticipant,\n\tDailyEventObjectTrack,\n} from \"@daily-co/daily-js\";\nimport { IInfoRequestMessage, MessageActionType, MessageType } from \"~/types\";\nimport { sendMessage } from \"~/utils/sendMessage\";\nimport { MediaEvent } from \"~/web-core/events\";\nimport { IUser } from \"~/web-core/interfaces\";\nimport { DeviceKind, VideoType } from \"~/web-core/types\";\nimport { DailyRemoteStream, DailyRemoteUser, DailySession } from \".\";\nimport { dailyErrorToVendorError } from \"../functions/dailyErrorUtils\";\nimport { DailyBackgroundManager } from \"../helpers/dailyBackgroundManager\";\n\n/**\n * Handles the event when a participant joins the call\n * @param event The event object for the participant joining\n * @param session The session object for the call\n * @returns void\n */\nexport function handleDailyParticipantJoined(\n\tevent: DailyEventObject<\"participant-joined\">,\n\tsession: DailySession,\n): void {\n\t// No need to handle local participants\n\tif (event.participant.local) {\n\t\treturn;\n\t}\n\tconst participant = event.participant;\n\tconst remoteUser = new DailyRemoteUser(participant, session.call);\n\n\t// Attempt to remove the user from the participant list if they were already connected from another session\n\t// This resolves a possible race condition where the wrong user is cleaned up when a duplicate user joins\n\tremoveUserIfDuplicate(event.participant.user_id, session);\n\n\tsession.participants.push(remoteUser);\n\n\tconst message: IInfoRequestMessage = {\n\t\taction: MessageActionType.request,\n\t\tpayload: null,\n\t\trecipients: [remoteUser.getUserIdentity()],\n\t\ttype: MessageType.infoRequest,\n\t\tneedsACK: false,\n\t};\n\n\tif (session.getIsAdmitted()) {\n\t\t// Assume screen share should always be shown, so subscribe automatically\n\t\tsession.call.updateParticipant(event.participant.session_id, {\n\t\t\tsetSubscribedTracks: { screenVideo: true, screenAudio: true, audio: true },\n\t\t});\n\t}\n\n\tsendMessage(session, message);\n\n\tsession.emit(\"participantConnected\", { type: \"participantConnected\", participant: remoteUser });\n}\n\n/**\n * Helper function to remove a user from the participants array if they are already connected\n * @param userIdentity Identity of the new connecting user. Used to determine if the user is a duplicate\n * @param session DailySession object to signal that the user has been removed\n */\nfunction removeUserIfDuplicate(userIdentity: string, session: DailySession): void {\n\tconst duplicateUserIndex = session.participants.findIndex(\n\t\t(participant) => participant.getUserIdentity() === userIdentity,\n\t);\n\n\tif (duplicateUserIndex !== -1) {\n\t\tsession.handleParticipantDisconnectFromArrayIndex(duplicateUserIndex);\n\t}\n}\n\n/**\n * Handles the event when a participant disconnects from the call\n * @param event The event object for the participant leaving\n * @param session The session object for the call\n * @returns void\n */\nexport function handleDailyParticipantDisconnected(\n\tevent: DailyEventObject<\"participant-left\">,\n\tsession: DailySession,\n): void {\n\tconst disconnectedUserIndex = session.participants.findIndex(\n\t\t(participant) => participant.getUserGuid() === event.participant.session_id,\n\t);\n\t// If the user is not found in the participants array, they have already been removed\n\tif (disconnectedUserIndex === -1) {\n\t\treturn;\n\t}\n\n\tsession.handleParticipantDisconnectFromArrayIndex(disconnectedUserIndex);\n}\n\n/**\n * Handles the event when a participant's information is updated\n * @param event The event object for the participant update\n * @param session The session object for the call\n * @returns void\n */\nexport function handleDailyParticipantUpdate(\n\tevent: DailyEventObjectParticipant,\n\tsession: DailySession,\n): void {\n\tif (event.participant.local) {\n\t\tsession.localUser.participant = event.participant;\n\t\treturn;\n\t}\n\tconst remoteUser = session.participants.find(\n\t\t(current) => current.getUserGuid() === event.participant.session_id,\n\t);\n\n\tif (!remoteUser) {\n\t\treturn;\n\t}\n\n\tremoteUser.participant = event.participant;\n}\n\n/**\n * Handles the event when the active speaker changes\n * @param event The event object for the active speaker change\n * @param session The session object for the call\n */\nexport function handleDailyActiveSpeakerChanged(\n\tevent: DailyEventObjectActiveSpeakerChange,\n\tsession: DailySession,\n): void {\n\tconst user = session.participants.find(\n\t\t(participant) => participant.getUserGuid() === event.activeSpeaker.peerId,\n\t);\n\n\tif (!user) {\n\t\treturn;\n\t}\n\n\tsession._dominantSpeaker = user;\n\tsession.emit(\"dominantSpeakerChanged\", { type: \"dominantSpeakerChanged\", participant: user });\n}\n\n/**\n * Handles the event when a fatal error occurs (will always disconnect the user)\n * @param event The event object for the fatal error\n * @param session The session object for the call\n */\nexport function handleDailyErrorEvent(event: DailyEventObjectFatalError, session: DailySession): void {\n\tconst vendorError = dailyErrorToVendorError(event.error);\n\tsession.emit(\"disconnected\", { type: \"disconnected\", error: vendorError });\n}\n\n/**\n * Handles the event when a message is received\n * @param event The event object for the message object\n * @param session The session object for the call\n */\nexport function handleDailyDataMessageEvent(\n\tevent: DailyEventObject<\"app-message\">,\n\tsession: DailySession,\n): void {\n\tconst userGuid = event.fromId;\n\tconst message = event.data as string;\n\tconst user = session.participants.find((participant) => participant.getUserGuid() === userGuid);\n\n\t// Don't surface a message if we can't determine who sent it\n\tif (!user) {\n\t\treturn;\n\t}\n\n\tuser.emit(\"dataMessageReceived\", {\n\t\ttype: \"dataMessageReceived\",\n\t\tmessage: message,\n\t});\n}\n\n/**\n * Handles the event when a track is updated (started or stopped)\n * @param event The event object for the track update\n * @param session The session object for the call\n * @returns void\n */\nexport function handleDailyTrackUpdatedEvent(event: DailyEventObjectTrack, session: DailySession): void {\n\t// Associate a track event with a user\n\tconst user = event.participant?.local\n\t\t? session.localUser\n\t\t: session.participants.find(\n\t\t\t\t(participant) => participant.getUserIdentity() === event.participant?.user_id,\n\t\t );\n\n\tif (!user || !event.participant) {\n\t\treturn;\n\t}\n\n\tconst type: VideoType = determineTrackType(event);\n\n\t// Update the user's device stream with the updated track\n\tif (type === \"camera\") {\n\t\tuser.deviceStream.videoDevice = event.participant.tracks?.video ?? null;\n\t\tuser.deviceStream.audioDevice = event.participant.tracks?.audio ?? null;\n\t} else if (type === \"screen\") {\n\t\tif (user instanceof DailyRemoteUser) {\n\t\t\tupdateScreenShareForUser(event, user, event.action === \"track-started\", session);\n\t\t}\n\t\tif (user.shareStream) {\n\t\t\tuser.shareStream.videoDevice = event.participant.tracks?.screenVideo ?? null;\n\t\t\tuser.shareStream.audioDevice = event.participant.tracks?.screenAudio ?? null;\n\t\t}\n\t}\n\n\t// Emit the various stream specific events and user-based events\n\temitStreamStatusEvents(event, user, event.action === \"track-started\", type);\n\tuser.emit(\"participantUpdated\", {\n\t\ttype: \"participantUpdated\",\n\t\tparticipant: user,\n\t\tvideoType: type,\n\t});\n}\n\nexport function handleCpuLoadChangeEvent(\n\tevent: DailyEventObject<\"cpu-load-change\">,\n\tsession: DailySession,\n): void {\n\tif (event.cpuLoadState === \"high\") {\n\t\tsession.setUseLowQualityMode(true);\n\t}\n\tif (event.cpuLoadState === \"low\") {\n\t\tsession.setUseLowQualityMode(false);\n\t}\n}\n\n/**\n * Handles a screen share track being published/unpublished\n * @param trackEvent The event object for the track update\n * @param user The user associated with the track event\n * @param started Whether the track was started or stopped\n * @param session The session object for the call\n */\nfunction updateScreenShareForUser(\n\ttrackEvent: DailyEventObjectTrack,\n\tuser: DailyRemoteUser,\n\tstarted: boolean,\n\tsession: DailySession,\n): void {\n\tif (started && trackEvent.participant?.tracks && !user.shareStream) {\n\t\tuser.shareStream = new DailyRemoteStream(trackEvent.participant?.tracks, \"screen\");\n\t\tsession.emit(\"screenShareStarted\", { type: \"screenShareStarted\", participant: user });\n\t} else if (!started && trackEvent.participant?.tracks.screenVideo.state === \"off\") {\n\t\tuser.shareStream = null;\n\t\tsession.emit(\"screenShareStopped\", { type: \"screenShareStopped\", participant: user });\n\t}\n}\n\n/**\n * Handles a emitting events for the track being started or stopped\n * @param trackEvent The event object for the track update\n * @param user The user associated with the track event\n * @param started Whether the track was started or stopped\n * @param videoType The type of video track that was updated\n */\nfunction emitStreamStatusEvents(\n\ttrackEvent: DailyEventObjectTrack,\n\tuser: IUser,\n\tstarted: boolean,\n\tvideoType: VideoType,\n): void {\n\tconst kind = determineTrackKind(trackEvent);\n\n\t// Daily sends track-stopped events whenever local tracks enable a background.\n\t// Catch those cases here so we don't emit app track status events for enabling/disabling backgrounds.\n\tif (\n\t\t!started &&\n\t\ttrackEvent.track.kind === \"video\" &&\n\t\ttrackEvent.participant?.local &&\n\t\ttrackEvent.track &&\n\t\t(\"canvas\" in trackEvent.track || trackEvent.track?.readyState === \"live\")\n\t) {\n\t\treturn;\n\t}\n\n\t// Emit the matching event for turning a specific track on/off\n\tconst eventType: MediaEvent = started ? `${kind}Enabled` : `${kind}Disabled`;\n\tconst trackType = kind === \"video\" ? \"videoReady\" : \"audioReady\";\n\tif (videoType === \"screen\") {\n\t\tuser.shareStream?.emit(eventType, { type: eventType });\n\t\tuser.shareStream?.emit(trackType, { type: trackType, track: trackEvent.track });\n\t} else {\n\t\t// Track if we have marked background initialization as done - if we haven't this is a test application and should not be displayed to the end user\n\t\tif (\n\t\t\tDailyBackgroundManager.backgroundInitializationDone === false &&\n\t\t\tkind === \"video\" &&\n\t\t\t\"canvas\" in trackEvent.track\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tuser.deviceStream.emit(eventType, { type: eventType });\n\t\tuser.deviceStream.emit(trackType, { type: trackType, track: trackEvent.track });\n\t}\n}\n\n/**\n * Determines if a track received in an event is a camera or screen share track\n * @param track Track object received in Daily event\n * @returns \"screen\" if the track is a screen share track, \"camera\" otherwise\n */\nfunction determineTrackType(track: DailyEventObjectTrack): VideoType {\n\tif (track.type === \"screenVideo\" || track.type === \"screenAudio\") {\n\t\treturn \"screen\";\n\t}\n\n\treturn \"camera\";\n}\n\n/**\n * Determines if a track received in an event is an audio or video track\n * @param track Track object received in Daily event\n * @returns \"audio\" if the track is an audio track, \"video\" otherwise\n */\nfunction determineTrackKind(track: DailyEventObjectTrack): DeviceKind {\n\tif (track.type === \"audio\" || track.type === \"screenAudio\") {\n\t\treturn \"audio\";\n\t}\n\n\treturn \"video\";\n}\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Interface for remote daily media.\n * @author Will Cooper\n * @module Epic.VideoApp.WebCore.Vendor.Daily.Implementations.DailyRemoteStream\n */\n\nimport { DailyParticipantTracks, DailyTrackState } from \"@daily-co/daily-js\";\nimport { IDimensions } from \"~/types\";\nimport { captureImage } from \"~/utils/imageCapture\";\nimport { EVCEmitter, IEVCStreamEventMap } from \"~/web-core/events\";\nimport { IRemoteStream } from \"~/web-core/interfaces\";\nimport { DeviceKind, VideoType } from \"~/web-core/types\";\n\nexport class DailyRemoteStream extends EVCEmitter implements IRemoteStream {\n\taudioDevice: DailyTrackState | null;\n\tvideoDevice: DailyTrackState | null;\n\treadonly isLocal: false = false;\n\n\tconstructor(tracks: DailyParticipantTracks, videoType?: VideoType) {\n\t\tsuper();\n\t\tif (videoType === \"screen\") {\n\t\t\tthis.videoDevice = tracks.screenVideo || null;\n\t\t\tthis.audioDevice = tracks.screenAudio || null;\n\t\t} else {\n\t\t\tthis.audioDevice = tracks?.audio || null;\n\t\t\tthis.videoDevice = tracks?.video || null;\n\t\t}\n\t}\n\n\tisBandwidthLimited(): boolean {\n\t\tconst videoTrackOffReasons = this.videoDevice?.off;\n\n\t\t// See here for accepted reasons for the track to be off: https://docs.daily.co/reference/daily-js/instance-methods/participants#participant-tracks-properties\n\t\tif (!videoTrackOffReasons) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn videoTrackOffReasons.byBandwidth || videoTrackOffReasons.byServerLimit || false;\n\t}\n\n\tisEnabled(kind: DeviceKind): boolean {\n\t\tif (kind === \"audio\") {\n\t\t\tconst state = this.audioDevice?.state;\n\t\t\treturn state === \"playable\" || state === \"sendable\";\n\t\t}\n\t\tif (kind === \"video\") {\n\t\t\tconst state = this.videoDevice?.state;\n\t\t\treturn state === \"playable\" || state === \"sendable\";\n\t\t}\n\t\treturn false;\n\t}\n\n\thasAudio(): boolean {\n\t\treturn this.audioDevice !== null;\n\t}\n\n\tgetVideoDimensions(): IDimensions | undefined {\n\t\tconst videoSettings = this.videoDevice?.persistentTrack?.getSettings();\n\t\tif (videoSettings?.height && videoSettings?.width) {\n\t\t\treturn {\n\t\t\t\theight: videoSettings.height,\n\t\t\t\twidth: videoSettings.width,\n\t\t\t};\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tasync captureImage(): Promise {\n\t\tif (this.videoDevice?.persistentTrack) {\n\t\t\treturn captureImage(this.videoDevice.persistentTrack);\n\t\t}\n\n\t\treturn Promise.resolve(null);\n\t}\n\n\tgetMediaStreamTrack(kind: DeviceKind): MediaStreamTrack | undefined {\n\t\treturn kind === \"audio\" ? this.audioDevice?.persistentTrack : this.videoDevice?.persistentTrack;\n\t}\n\n\trenderVideo(element: HTMLVideoElement): HTMLVideoElement | null {\n\t\tif (this.videoDevice?.persistentTrack) {\n\t\t\telement.srcObject = new MediaStream([this.videoDevice.persistentTrack]);\n\t\t\telement.load();\n\t\t}\n\n\t\telement.onresize = this.handleResizeEvent.bind(this);\n\t\treturn element;\n\t}\n\n\tcleanupVideo(element: HTMLVideoElement): HTMLVideoElement | null {\n\t\telement.srcObject = null;\n\t\telement.load();\n\t\treturn element;\n\t}\n\n\tattachAudio(element: HTMLAudioElement): HTMLAudioElement | null {\n\t\tif (this.audioDevice?.persistentTrack) {\n\t\t\telement.srcObject = new MediaStream([this.audioDevice.persistentTrack]);\n\t\t\telement.load();\n\t\t}\n\n\t\treturn element;\n\t}\n\n\tdetachAudio(element: HTMLAudioElement): HTMLAudioElement | null {\n\t\telement.srcObject = null;\n\t\treturn element;\n\t}\n\n\tprivate handleResizeEvent(): void {\n\t\tconst newDim = this.getVideoDimensions() ?? { height: 0, width: 0 };\n\t\tthis.emit(\"videoDimensionsChanged\", { type: \"videoDimensionsChanged\", newDim });\n\t}\n}\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Remote User in Daily Sessions\n * @author Will Cooper\n * @module Epic.VideoApp.WebCore.Vendor.Daily.Implementations.DailyRemoteUser\n */\n\nimport { DailyCall, DailyParticipant } from \"@daily-co/daily-js\";\nimport { EVCEmitter, IEVCUserEventMap } from \"~/web-core/events\";\nimport { IRemoteUser } from \"~/web-core/interfaces\";\nimport { IStreamSubscriptionStatus, Quality, SubscriptionStatus, VideoType } from \"~/web-core/types\";\nimport { DailyRemoteStream } from \"./dailyRemoteStream\";\n\nexport class DailyRemoteUser extends EVCEmitter implements IRemoteUser {\n\tprivate static qualityMap: Record = {\n\t\t[Quality.undefined]: undefined,\n\t\t[Quality.low]: 0,\n\t\t[Quality.standard]: 1,\n\t\t[Quality.high]: 2,\n\t};\n\n\tprivate static subscriptionMap: Record = {\n\t\t[SubscriptionStatus.subscribed]: true,\n\t\t[SubscriptionStatus.staged]: \"staged\",\n\t\t[SubscriptionStatus.unsubscribed]: false,\n\t};\n\n\tdeviceStream: DailyRemoteStream;\n\tshareStream: DailyRemoteStream | null;\n\tparticipant: DailyParticipant;\n\treadonly isLocal: false = false;\n\tprivate _subscriptionStatus: IStreamSubscriptionStatus;\n\tprivate _isUsingLowQualityMode: boolean = false;\n\tprivate _qualityStatus: number;\n\tcall: DailyCall;\n\n\tconstructor(participant: DailyParticipant, call: DailyCall) {\n\t\tsuper();\n\t\tthis.shareStream = null;\n\t\tthis.deviceStream = new DailyRemoteStream(participant.tracks);\n\t\tthis.participant = participant;\n\t\tthis._subscriptionStatus = {\n\t\t\tcamera: SubscriptionStatus.unsubscribed,\n\t\t\tscreen: SubscriptionStatus.unsubscribed,\n\t\t};\n\t\tthis._qualityStatus = DailyRemoteUser.qualityMap[Quality.standard] ?? -1;\n\t\tthis.call = call;\n\t}\n\n\t// Static method to be called if the session should reduce quality settings for mobile devices\n\tstatic setUseMobileQuality(): void {\n\t\tDailyRemoteUser.qualityMap[Quality.high] = 1;\n\t\t// TODO: 1 might be fine for standard quality, test this on a few devices\n\t\tDailyRemoteUser.qualityMap[Quality.standard] = 0;\n\t}\n\n\tgetUserIdentity(): string {\n\t\treturn this.participant.user_id;\n\t}\n\n\tisSharingScreen(): boolean {\n\t\treturn this.shareStream !== null;\n\t}\n\n\t// This isn't well-defined for remote participants for Daily.\n\tgetNetworkQualityLevel(): number {\n\t\treturn 4;\n\t}\n\n\tgetUserGuid(): string {\n\t\treturn this.participant.session_id;\n\t}\n\n\t/**\n\t * Semi-private. Switches low quality mode on or off, which will adjust the quality level of displayed streams\n\t * @param useLowQuality Whether to use low quality mode\n\t */\n\tsetUseLowQuality(useLowQuality: boolean): void {\n\t\tif (this._isUsingLowQualityMode === useLowQuality) {\n\t\t\treturn;\n\t\t}\n\t\tthis._isUsingLowQualityMode = useLowQuality;\n\t\tvoid this.setStreamQuality(this._qualityStatus);\n\t}\n\n\tasync setStreamQuality(quality: Quality): Promise {\n\t\t// If we're in low quality mode, drop the input quality by one level\n\t\tconst lowQualityModeAdjustment = this._isUsingLowQualityMode\n\t\t\t? (Math.max(quality - 1, Quality.low) as Quality)\n\t\t\t: quality;\n\t\t// Map the generic Quality enum to Daily's quality levels\n\t\t// If we're on mobile, the qualityMap is adjusted to reduce quality\n\t\tconst mappedQuality = DailyRemoteUser.qualityMap[lowQualityModeAdjustment];\n\t\tif (mappedQuality === undefined || mappedQuality === this._qualityStatus) {\n\t\t\treturn;\n\t\t}\n\t\tconst guid = this.getUserGuid();\n\t\tconst settings = await this.call.updateReceiveSettings({\n\t\t\t[guid]: { video: { layer: mappedQuality } },\n\t\t});\n\t\tconst layer = settings?.video?.video?.layer;\n\t\tif (layer !== undefined) {\n\t\t\tthis._qualityStatus = layer;\n\t\t}\n\t}\n\n\tsetStreamSubscribed(type: VideoType, subscribed: SubscriptionStatus): void {\n\t\tif (this._subscriptionStatus[type] === subscribed) {\n\t\t\treturn;\n\t\t}\n\t\tconst mappedSubscribed = DailyRemoteUser.subscriptionMap[subscribed];\n\t\tconst guid = this.getUserGuid();\n\t\tconst dailyVideoType = type === \"camera\" ? \"video\" : \"screenVideo\";\n\t\tthis.call.updateParticipant(guid, { setSubscribedTracks: { [dailyVideoType]: mappedSubscribed } });\n\t\tthis._subscriptionStatus[type] = subscribed;\n\t}\n}\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Session for Daily\n * @author Will Cooper\n * @module Epic.VideoApp.WebCore.Vendor.Daily.Implementations.DailySession\n */\n\nimport {\n\tDailyCall,\n\tDailyEventObject,\n\tDailyEventObjectActiveSpeakerChange,\n\tDailyEventObjectFatalError,\n\tDailyEventObjectParticipant,\n} from \"@daily-co/daily-js\";\nimport { makeRequest } from \"~/utils/request\";\nimport { EVCEmitter, IEVCSessionEventMap } from \"~/web-core/events\";\nimport { allowDataTrackMessages } from \"~/web-core/functions/session\";\nimport { ILocalStream, ILocalUser, ISession, VendorError } from \"~/web-core/interfaces\";\nimport { DeviceKind, IConnectOptions, IConnectResponseDTO, SessionConnectionStatus } from \"~/web-core/types\";\nimport { dailyErrorToVendorError } from \"../functions/dailyErrorUtils\";\nimport { exponentialBackoff } from \"../functions/utils\";\nimport {\n\thandleCpuLoadChangeEvent,\n\thandleDailyActiveSpeakerChanged,\n\thandleDailyDataMessageEvent,\n\thandleDailyErrorEvent,\n\thandleDailyParticipantDisconnected,\n\thandleDailyParticipantJoined,\n\thandleDailyParticipantUpdate,\n\thandleDailyTrackUpdatedEvent,\n} from \"./dailyEventHandlers\";\nimport { DailyLocalStream } from \"./dailyLocalStream\";\nimport { DailyLocalUser } from \"./dailyLocalUser\";\nimport { DailyRemoteUser } from \"./dailyRemoteUser\";\n\nexport class DailySession extends EVCEmitter implements ISession {\n\tstatic lowQualityBaseBackoffMs: number = 5000;\n\tstatic lowQualityMaxBackoffMs: number = 30000;\n\n\troomGuid?: string | undefined;\n\tlocalUserId?: string | undefined;\n\tconnectionStatus: SessionConnectionStatus;\n\tlocalUser: DailyLocalUser;\n\tcall: DailyCall;\n\tparticipants: DailyRemoteUser[] = [];\n\t_dominantSpeaker: DailyRemoteUser | null = null;\n\n\t// Handle shifting between low and high quality mode.\n\t// To avoid rapid oscillating between modes, use an exponential backoff to slow down changes for users who repeatedly hit high CPU load\n\tprivate _isCPULoadHigh: boolean = false;\n\tprivate _isInLowQualityBackoffPeriod: boolean = false;\n\tprivate _isInLowQualityMode: boolean = false;\n\tprivate _lowQualityModeOccurrences: number = 0;\n\n\tprivate _isAdmitted: boolean = false;\n\tprivate _cleanupEventListeners: () => void;\n\n\tconstructor(user: DailyLocalUser) {\n\t\tsuper();\n\t\tthis.localUser = user;\n\t\tthis.connectionStatus = \"not-connected\";\n\t\tthis.call = user.dailyCall;\n\t\tthis._cleanupEventListeners = this.setupEventListeners();\n\t}\n\n\tprocessError(error: unknown): VendorError {\n\t\treturn dailyErrorToVendorError(error);\n\t}\n\n\t// Not used in Daily\n\trefreshMedia(): void {\n\t\treturn;\n\t}\n\n\tsendDataMessage(message: string): void {\n\t\tthis.call.sendAppMessage(message);\n\t}\n\n\tasync addScreenShare(stream: DailyLocalStream): Promise {\n\t\tif (stream.mediaStream) {\n\t\t\tthis.call.startScreenShare({ mediaStream: stream.mediaStream });\n\t\t\treturn Promise.resolve(true);\n\t\t} else {\n\t\t\treturn Promise.resolve(false);\n\t\t}\n\t}\n\n\tasync removeScreenShare(_stream: ILocalStream, _removeAudio?: boolean | undefined): Promise {\n\t\tthis.call.stopScreenShare();\n\t\treturn Promise.resolve(true);\n\t}\n\n\t/**\n\t * Initialize subscription status for a user\n\t * @param _identity\n\t * @param _jwt\n\t * @returns True\n\t */\n\tenableUserMedia(_identity: string, _jwt: string): Promise {\n\t\tthis._isAdmitted = true;\n\t\tthis.participants.forEach((participant) => {\n\t\t\tthis.call.updateParticipant(participant.getUserGuid(), {\n\t\t\t\tsetSubscribedTracks: { screenVideo: true, audio: true, screenAudio: true },\n\t\t\t});\n\t\t});\n\t\treturn Promise.resolve(true);\n\t}\n\n\tasync connect(connectOptions: IConnectOptions): Promise {\n\t\tconst { jwt } = connectOptions;\n\n\t\tthis._isAdmitted = !connectOptions.isInWaitingRoom;\n\t\tawait this.call.join({\n\t\t\turl: connectOptions.info.roomIdentifier,\n\t\t\tsubscribeToTracksAutomatically: false,\n\t\t\ttoken: connectOptions.info.token,\n\t\t});\n\t\t// Setup participant monitoring\n\t\tthis.connectionStatus = \"connected\";\n\t\tconst participants = this.call.participants();\n\t\tconst keys = Object.keys(participants);\n\t\tconst roomInfo = await this.call.room();\n\t\tthis.roomGuid = roomInfo && \"id\" in roomInfo ? roomInfo.id : undefined;\n\t\tkeys.forEach((participantId) => {\n\t\t\tif (participantId !== \"local\") {\n\t\t\t\tconst remoteDailyParticipant = participants[participantId];\n\t\t\t\tconst remoteUser = new DailyRemoteUser(remoteDailyParticipant, this.call);\n\t\t\t\tthis.participants.push(remoteUser);\n\t\t\t}\n\t\t});\n\n\t\tif (connectOptions.isInWaitingRoom && jwt) {\n\t\t\t// We set the default subscribe rule to be none to ensure there isn't a race condition with receiving remote video/audio\n\t\t\t// Now allow data track messages to be subscribed to, in order to ensure we can catch a join call signal\n\t\t\tawait allowDataTrackMessages(jwt);\n\t\t}\n\t\tthis.emit(\"sessionConnected\", { type: \"sessionConnected\", session: this });\n\t\treturn Promise.resolve(true);\n\t}\n\n\tasync disconnect(): Promise {\n\t\tawait this.call.leave();\n\t\tthis._cleanupEventListeners();\n\t\tawait this.call.destroy();\n\t}\n\n\t// Daily has no publish concept, so this is unnecessary\n\tpublish(\n\t\t_kind: DeviceKind,\n\t\t_expectedState: boolean,\n\t\t_device: ILocalStream,\n\t\t_recycleMedia?: boolean,\n\t): Promise {\n\t\treturn Promise.resolve(true);\n\t}\n\n\tasync getRoomInfo(jwt: string): Promise {\n\t\tconst dto = await makeRequest(\"api/VideoCall/GetRoomInfo\", \"GET\", jwt);\n\t\tconst options: IConnectOptions = {\n\t\t\tlogLevel: 0,\n\t\t\tisLowBandwidth: false,\n\t\t\tisInWaitingRoom: false,\n\t\t\tjwt: jwt,\n\t\t\tinfo: dto,\n\t\t};\n\t\treturn options;\n\t}\n\n\tgetRemoteParticipants(): DailyRemoteUser[] {\n\t\treturn this.participants;\n\t}\n\n\tgetRemoteParticipant(identity: string): DailyRemoteUser | null {\n\t\tconst participant = this.participants.find((p) => p.getUserIdentity() === identity);\n\t\treturn participant ?? null;\n\t}\n\n\tgetLocalParticipant(): ILocalUser | null {\n\t\treturn this.localUser;\n\t}\n\n\tgetDominantSpeaker(): DailyRemoteUser | null {\n\t\treturn this._dominantSpeaker;\n\t}\n\n\tgetIsAdmitted(): boolean {\n\t\treturn this._isAdmitted;\n\t}\n\n\tsetUseLowQualityMode(isCPULoadHigh?: boolean): void {\n\t\tif (isCPULoadHigh !== undefined) {\n\t\t\tthis._isCPULoadHigh = isCPULoadHigh;\n\t\t}\n\n\t\tconst shouldUseLowQuality = this._isCPULoadHigh || this._isInLowQualityBackoffPeriod;\n\t\tif (shouldUseLowQuality === this._isInLowQualityMode) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (shouldUseLowQuality && !this._isInLowQualityMode) {\n\t\t\t// enter low quality mode\n\t\t\tthis._setAreRemoteParticipantsInLowQuality(true);\n\t\t\tvoid this.call.updateSendSettings({ video: \"bandwidth-optimized\" });\n\t\t\tthis._isInLowQualityMode = true;\n\t\t\tthis._isInLowQualityBackoffPeriod = true;\n\n\t\t\t// Start exponential backoff to prevent rapid oscillation between modes\n\t\t\texponentialBackoff(\n\t\t\t\tDailySession.lowQualityBaseBackoffMs,\n\t\t\t\tDailySession.lowQualityMaxBackoffMs,\n\t\t\t\tthis._lowQualityModeOccurrences,\n\t\t\t\t() => {\n\t\t\t\t\tthis._isInLowQualityBackoffPeriod = false;\n\t\t\t\t\t// Call setLowQualityMode to check if load dropped during backoff period\n\t\t\t\t\tthis.setUseLowQualityMode();\n\t\t\t\t},\n\t\t\t);\n\t\t\tthis._lowQualityModeOccurrences++;\n\t\t} else if (!shouldUseLowQuality && this._isInLowQualityMode) {\n\t\t\t// exit low quality mode\n\t\t\tthis._setAreRemoteParticipantsInLowQuality(false);\n\t\t\tvoid this.call.updateSendSettings({ video: \"bandwidth-and-quality-balanced\" });\n\t\t\tthis._isInLowQualityMode = false;\n\t\t}\n\t}\n\n\tprivate _setAreRemoteParticipantsInLowQuality(setToLowQuality: boolean): void {\n\t\tthis.participants.forEach((participant) => {\n\t\t\tparticipant.setUseLowQuality(setToLowQuality);\n\t\t});\n\t}\n\n\t/**\n\t * Sets up event listeners on a user for events that should bubble from the user to the session\n\t * @param user\n\t */\n\tsetupUserEventListeners(user: DailyRemoteUser): void {\n\t\tuser.on(\"screenShareStarted\", (args) => {\n\t\t\tthis.emit(\"screenShareStarted\", { type: \"screenShareStarted\", participant: args.participant });\n\t\t});\n\n\t\tuser.on(\"screenShareStopped\", (args) => {\n\t\t\tthis.emit(\"screenShareStopped\", { type: \"screenShareStopped\", participant: args.participant });\n\t\t});\n\t}\n\n\t/**\n\t * Clean up event listeners on a user\n\t * @param user\n\t */\n\tcleanupUserEventListener(user: DailyRemoteUser): void {\n\t\tuser.removeAllListeners(\"screenShareStarted\");\n\t\tuser.removeAllListeners(\"screenShareStopped\");\n\t}\n\n\t/**\n\t * Set up event listeners to transform Daily events into EVC-formatted events\n\t * @returns cleanup function to remove event listeners\n\t */\n\tsetupEventListeners(): () => void {\n\t\tconst participantJoined = (event: DailyEventObject<\"participant-joined\">): void => {\n\t\t\thandleDailyParticipantJoined(event, this);\n\t\t};\n\n\t\tconst participantDisconnected = (event: DailyEventObject<\"participant-left\">): void => {\n\t\t\thandleDailyParticipantDisconnected(event, this);\n\t\t};\n\n\t\tconst handleTrackEvent = (event: DailyEventObject<\"track-started\" | \"track-stopped\">): void => {\n\t\t\thandleDailyTrackUpdatedEvent(event, this);\n\t\t};\n\n\t\tconst handleActiveSpeakerChange = (event: DailyEventObjectActiveSpeakerChange): void => {\n\t\t\thandleDailyActiveSpeakerChanged(event, this);\n\t\t};\n\n\t\tconst handleErrorEvent = (event: DailyEventObjectFatalError): void => {\n\t\t\thandleDailyErrorEvent(event, this);\n\t\t};\n\n\t\tconst dataMessageReceived = (event: DailyEventObject<\"app-message\">): void => {\n\t\t\thandleDailyDataMessageEvent(event, this);\n\t\t};\n\n\t\tconst updateUser = (event: DailyEventObjectParticipant): void => {\n\t\t\thandleDailyParticipantUpdate(event, this);\n\t\t};\n\n\t\tconst handleCpuLoad = (event: DailyEventObject<\"cpu-load-change\">): void => {\n\t\t\thandleCpuLoadChangeEvent(event, this);\n\t\t};\n\n\t\tthis.call.on(\"participant-joined\", participantJoined.bind(this));\n\t\tthis.call.on(\"participant-left\", participantDisconnected.bind(this));\n\t\tthis.call.on(\"track-started\", handleTrackEvent.bind(this));\n\t\tthis.call.on(\"track-stopped\", handleTrackEvent.bind(this));\n\t\tthis.call.on(\"active-speaker-change\", handleActiveSpeakerChange.bind(this));\n\t\tthis.call.on(\"error\", handleErrorEvent.bind(this));\n\t\tthis.call.on(\"app-message\", dataMessageReceived.bind(this));\n\t\tthis.call.on(\"participant-updated\", updateUser.bind(this));\n\t\tthis.call.on(\"cpu-load-change\", handleCpuLoad.bind(this));\n\n\t\treturn () => {\n\t\t\tthis.call.off(\"participant-joined\", participantJoined);\n\t\t\tthis.call.off(\"participant-left\", participantDisconnected);\n\t\t\tthis.call.off(\"track-started\", handleTrackEvent);\n\t\t\tthis.call.off(\"track-stopped\", handleTrackEvent);\n\t\t\tthis.call.off(\"active-speaker-change\", handleActiveSpeakerChange);\n\t\t\tthis.call.off(\"error\", handleErrorEvent);\n\t\t\tthis.call.off(\"app-message\", dataMessageReceived);\n\t\t\tthis.call.off(\"participant-updated\", updateUser);\n\t\t};\n\t}\n\n\t/**\n\t * Remove a user from the backing participant array and update the application layer\n\t * @param index - The index of the user to remove\n\t */\n\thandleParticipantDisconnectFromArrayIndex(index: number): void {\n\t\tconst user = this.participants[index];\n\t\tthis.participants.splice(index, 1);\n\n\t\tif (user) {\n\t\t\tthis.emit(\"participantDisconnected\", {\n\t\t\t\ttype: \"participantDisconnected\",\n\t\t\t\tparticipant: user,\n\t\t\t});\n\n\t\t\tthis.cleanupUserEventListener(user);\n\t\t}\n\t}\n}\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Interface for local daily media.\n * @author Will Cooper\n * @module Epic.VideoApp.WebCore.Vendor.Daily.Implementations.DailyLocalStream\n */\n\nimport Daily, {\n\tDailyCall,\n\tDailyCallOptions,\n\tDailyCameraErrorObject,\n\tDailyCameraErrorType,\n\tDailyEventObjectCameraError,\n\tDailyEventObjectParticipant,\n\tDailyEventObjectTrack,\n\tDailyTrackState,\n} from \"@daily-co/daily-js\";\nimport { IDeviceInitialization } from \"~/state/hardwareTest\";\nimport { IDevice } from \"~/state/localTracks\";\nimport { IDimensions } from \"~/types\";\nimport { BackgroundSettings } from \"~/types/backgrounds\";\nimport { captureImage } from \"~/utils/imageCapture\";\nimport { EVCEmitter, IEVCStreamEventMap } from \"~/web-core/events\";\nimport { constrainToString } from \"~/web-core/functions\";\nimport { ILocalStream } from \"~/web-core/interfaces\";\nimport { DeviceKind, ISwitchDeviceResponse, VideoType } from \"~/web-core/types\";\nimport {\n\tisDailyCamError,\n\tisDailyMicError,\n\tmakeDailyCamErrorGeneric,\n\tvalidateAndReportInvalidDevices,\n} from \"../functions/dailyErrorUtils\";\nimport { getMediaDeviceInfoFromDailyDeviceInfos, isTrackEnabled } from \"../functions/utils\";\n\nexport class DailyLocalStream extends EVCEmitter implements ILocalStream {\n\tcall: DailyCall;\n\tvideoDevice?: DailyTrackState;\n\taudioDevice?: DailyTrackState;\n\t// This is used for screen share tracks to allow us to publish custom tracks with the screen share API\n\tmediaStream?: MediaStream;\n\treadonly isLocal: true = true;\n\tdeviceInitializationError?: IDeviceInitialization;\n\tprivate _type: VideoType;\n\t// It's necessary to internally track the in-use device info because when applying a virtual background the\n\t// MediaStreamTrack attached to the persistentTrack becomes a stand-in track that lacks real info\n\tprivate _deviceInfo: Record;\n\tprivate _onCustomCallParticipantUpdatedHandler: (event: DailyEventObjectParticipant) => void;\n\tprivate _backgroundInformation: {\n\t\tsettings: BackgroundSettings | null;\n\t\tarrayBuffer: ArrayBuffer | null;\n\t\tisApplied: boolean;\n\t};\n\n\t/**\n\t * DailyLocalStream constructor\n\t * @param type The type of stream to create (either camera or screen share)\n\t * @param customDailyCall A custom DailyCall object to use for the stream.\n\t * Should only be used for instances where the stream is not attached to the\n\t * DailyCall object used by the session (e.g. background preview)\n\t */\n\tconstructor(type?: VideoType, customDailyCall?: DailyCall) {\n\t\tsuper();\n\t\tthis._onCustomCallParticipantUpdatedHandler = this.handleCustomCallParticipantUpdated.bind(this);\n\t\tif (customDailyCall) {\n\t\t\tthis.call = customDailyCall;\n\t\t\tthis.call.on(\"participant-updated\", this._onCustomCallParticipantUpdatedHandler);\n\t\t} else {\n\t\t\tthis.call =\n\t\t\t\tDaily.getCallInstance() ?? Daily.createCallObject({ subscribeToTracksAutomatically: false });\n\t\t}\n\t\tthis._backgroundInformation = { settings: null, arrayBuffer: null, isApplied: false };\n\t\tthis._type = type ?? \"camera\";\n\t\tthis._deviceInfo = { audio: undefined, video: undefined };\n\t}\n\n\tgetDeviceInitializationError(): IDeviceInitialization | undefined {\n\t\treturn this.deviceInitializationError;\n\t}\n\n\tasync cleanUp(): Promise {\n\t\t// Turn off the background for camera streams\n\t\tif (this._type === \"camera\") {\n\t\t\tawait this.call.updateInputSettings({ video: { processor: { type: \"none\" } } });\n\t\t}\n\t\tthis.videoDevice?.persistentTrack?.stop();\n\t\tthis.audioDevice?.persistentTrack?.stop();\n\t\tthis.videoDevice?.track?.stop();\n\t\tthis.audioDevice?.track?.stop();\n\t\tthis.call.off(\"participant-updated\", this._onCustomCallParticipantUpdatedHandler);\n\t}\n\n\thasAudio(): boolean {\n\t\treturn !!this.audioDevice?.persistentTrack;\n\t}\n\n\trenderVideo(element: HTMLVideoElement): HTMLVideoElement | null {\n\t\tif (this.videoDevice?.persistentTrack) {\n\t\t\telement.srcObject = new MediaStream([this.videoDevice.persistentTrack]);\n\t\t\telement.load();\n\t\t}\n\n\t\telement.onresize = this.handleResizeEvent.bind(this);\n\t\treturn element;\n\t}\n\n\tcleanupVideo(element: HTMLVideoElement): HTMLVideoElement | null {\n\t\telement.srcObject = null;\n\t\telement.onresize = null;\n\t\treturn element;\n\t}\n\n\tattachAudio(element: HTMLAudioElement): HTMLAudioElement | null {\n\t\tif (this.audioDevice?.persistentTrack) {\n\t\t\telement.srcObject = new MediaStream([this.audioDevice?.persistentTrack]);\n\t\t\telement.load();\n\t\t}\n\n\t\treturn element;\n\t}\n\n\tdetachAudio(element: HTMLAudioElement): HTMLAudioElement | null {\n\t\telement.srcObject = null;\n\t\treturn element;\n\t}\n\n\tasync initialize(\n\t\tvideoId?: string,\n\t\taudioId?: string,\n\t): Promise[] | undefined> {\n\t\t// Call to StartCamera initializes the hardware test\n\t\tconst options: DailyCallOptions = {};\n\t\tvoid this.call.updateSendSettings({ video: \"bandwidth-and-quality-balanced\" });\n\t\tif (videoId) {\n\t\t\toptions.videoSource = videoId;\n\t\t}\n\n\t\tif (audioId) {\n\t\t\toptions.audioSource = audioId;\n\t\t}\n\n\t\tconst hwError: DailyCameraErrorObject[] = [];\n\t\tconst onError = (event: DailyEventObjectCameraError | undefined): void => {\n\t\t\tif (event?.error) {\n\t\t\t\thwError.push(event?.error);\n\t\t\t}\n\t\t};\n\t\tthis.call.on(\"camera-error\", onError);\n\n\t\tconst deviceInfo = await this.call.startCamera(options);\n\t\tthis._deviceInfo.video = getMediaDeviceInfoFromDailyDeviceInfos(deviceInfo, \"camera\");\n\t\tthis._deviceInfo.audio = getMediaDeviceInfoFromDailyDeviceInfos(deviceInfo, \"mic\");\n\n\t\t// Since Daily is only reporting one HW error at a time using \"camera-error\" event, we need to check for missing media separately so it's reported accurately in the HW test page\n\t\tvalidateAndReportInvalidDevices(deviceInfo, hwError);\n\n\t\tconst localUser = this.call.participants().local;\n\t\tthis.videoDevice = localUser.tracks.video;\n\t\tthis.audioDevice = localUser.tracks.audio;\n\n\t\tthis.call.off(\"camera-error\", onError);\n\t\treturn hwError;\n\t}\n\n\tgetDeviceInfo(kind: DeviceKind): IDevice {\n\t\tconst deviceKind = kind === \"audio\" ? \"audioinput\" : \"videoinput\";\n\t\treturn {\n\t\t\tdeviceId: this._deviceInfo[kind]?.deviceId ?? null,\n\t\t\tlabel: this._deviceInfo[kind]?.label ?? null,\n\t\t\tkind: deviceKind,\n\t\t};\n\t}\n\n\tasync switchVideoDeviceAsync(device: MediaDeviceInfo): Promise {\n\t\tconst deviceId = device.deviceId;\n\n\t\tconst info = await this.call.setInputDevicesAsync({\n\t\t\tvideoDeviceId: deviceId,\n\t\t\taudioDeviceId: null,\n\t\t});\n\n\t\tconst newDeviceInfo = getMediaDeviceInfoFromDailyDeviceInfos(info, \"camera\");\n\n\t\t// Don't attempt to publish if we don't have info about the new device\n\t\tif (!newDeviceInfo) {\n\t\t\tconst error = {\n\t\t\t\tname: \"CameraAcquisitionFailed\",\n\t\t\t\tmessage: \"Failed to acquire a camera\",\n\t\t\t};\n\t\t\tthis.call.setLocalVideo(false);\n\t\t\treturn { result: false, switchedDevices: false, error: error };\n\t\t}\n\n\t\t// Apply the current background effect before turning the camera on to prevent a flicker showing the real background\n\t\tawait this.applyVideoBackground(\n\t\t\tthis._backgroundInformation.settings,\n\t\t\tthis._backgroundInformation.arrayBuffer ?? undefined,\n\t\t);\n\n\t\t// If local video was already enabled, then setInputDevicesAsync already validated the camera switch, so we can return\n\t\tif (this.call.localVideo()) {\n\t\t\t// If we requested a new device but received a different device, then the switch failed\n\t\t\tif (newDeviceInfo.deviceId !== deviceId) {\n\t\t\t\tconst error = { name: \"CameraSwitchFailed\", message: \"Failed to switch to new camera\" };\n\t\t\t\treturn {\n\t\t\t\t\tresult: false,\n\t\t\t\t\tswitchedDevices: false,\n\t\t\t\t\terror: error,\n\t\t\t\t};\n\t\t\t}\n\t\t\tthis._deviceInfo.video = newDeviceInfo;\n\t\t\tthis.emit(\"videoDeviceChanged\", { type: \"videoDeviceChanged\" });\n\t\t\treturn { result: true, switchedDevices: false, error: undefined };\n\t\t}\n\n\t\t// Otherwise, we need to wait for a track-started or error event to confirm the switch was successful\n\t\treturn this.initializeDevice(newDeviceInfo, deviceId);\n\t}\n\n\tasync removeLocalVideoTrack(): Promise {\n\t\tif (this.call.isDestroyed()) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst oldDevice = this.getDeviceInfo(\"video\");\n\t\tthis.call.setLocalVideo(false);\n\t\tthis.emit(\"videoDisabled\", { type: \"videoDisabled\" });\n\n\t\tawait this.call.setInputDevicesAsync({\n\t\t\tvideoDeviceId: undefined,\n\t\t\taudioDeviceId: null,\n\t\t});\n\t\t// Update internal references\n\t\tthis.videoDevice = this.call.participants().local?.tracks?.video;\n\t\treturn oldDevice;\n\t}\n\n\tisEnabled(kind: DeviceKind): boolean {\n\t\tconst result =\n\t\t\tkind === \"audio\"\n\t\t\t\t? isTrackEnabled(this.audioDevice?.persistentTrack)\n\t\t\t\t: isTrackEnabled(this.videoDevice?.persistentTrack);\n\t\treturn result ?? false;\n\t}\n\n\ttoggleState(kind: DeviceKind, turnOn: boolean): void {\n\t\tif (this._type === \"camera\") {\n\t\t\tif (kind === \"audio\") {\n\t\t\t\tthis.call = this.call.setLocalAudio(turnOn);\n\t\t\t\tif (turnOn) {\n\t\t\t\t\tif (this.call.localAudio() && this.audioDevice?.persistentTrack?.enabled) {\n\t\t\t\t\t\tthis.emit(\"audioEnabled\", { type: \"audioEnabled\" });\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis.emit(\"audioDisabled\", { type: \"audioDisabled\" });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (kind === \"video\") {\n\t\t\t\tthis.call = this.call.setLocalVideo(turnOn);\n\t\t\t\tif (turnOn) {\n\t\t\t\t\tif (this.call.localVideo()) {\n\t\t\t\t\t\tthis.emit(\"videoEnabled\", { type: \"videoEnabled\" });\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis.emit(\"videoDisabled\", { type: \"videoDisabled\" });\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (kind === \"audio\") {\n\t\t\t\tthis.call.updateScreenShare({\n\t\t\t\t\tscreenVideo: { enabled: true },\n\t\t\t\t\tscreenAudio: { enabled: turnOn },\n\t\t\t\t});\n\t\t\t\tif (turnOn) {\n\t\t\t\t\tthis.emit(\"audioEnabled\", { type: \"audioEnabled\" });\n\t\t\t\t} else {\n\t\t\t\t\tthis.emit(\"audioDisabled\", { type: \"audioDisabled\" });\n\t\t\t\t}\n\t\t\t}\n\t\t\t// No current workflow temporarily disables screen share video\n\t\t}\n\t}\n\n\tgetMediaStreamTrack(kind: DeviceKind): MediaStreamTrack | undefined {\n\t\treturn kind === \"audio\" ? this.audioDevice?.persistentTrack : this.videoDevice?.persistentTrack;\n\t}\n\n\tasync switchAudioDeviceAsync(\n\t\tdevice?: MediaDeviceInfo | undefined,\n\t\tconstraints?: MediaTrackConstraintSet | undefined,\n\t): Promise {\n\t\ttry {\n\t\t\tconst deviceId = device?.deviceId ?? constrainToString(constraints?.deviceId) ?? undefined;\n\t\t\tconst currentGroupId = this.getMediaStreamTrack(\"audio\")?.getSettings()?.groupId || \"1\";\n\t\t\tconst newGroupId = device?.groupId || \"2\";\n\t\t\tconst switchedPhysicalDevices = currentGroupId !== newGroupId;\n\t\t\tlet newDeviceInfo: MediaDeviceInfo | undefined;\n\n\t\t\tif (!deviceId) {\n\t\t\t\tconst info = await this.call.cycleMic();\n\t\t\t\tnewDeviceInfo = info?.device ?? undefined;\n\t\t\t} else {\n\t\t\t\tconst micDevice = await this.call.setInputDevicesAsync({\n\t\t\t\t\tvideoDeviceId: null,\n\t\t\t\t\taudioDeviceId: deviceId,\n\t\t\t\t});\n\n\t\t\t\tnewDeviceInfo = getMediaDeviceInfoFromDailyDeviceInfos(micDevice, \"mic\");\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * If there is no established audio device, we don't know if the switch was successful or not.\n\t\t\t * In this case we need to handle starting the audio track manually and waiting to see if it\n\t\t\t * successfully starts.\n\t\t\t */\n\t\t\tconst shouldInitialize = this.getMediaStreamTrack(\"audio\") === undefined;\n\t\t\tif (shouldInitialize) {\n\t\t\t\t// If we do not have valid device info after the switch, we are unable to fully initialize said device\n\t\t\t\tif (!newDeviceInfo) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tresult: false,\n\t\t\t\t\t\tswitchedDevices: false,\n\t\t\t\t\t\terror: { message: \"Failed to switch microphones\", name: \"MicrophoneSwitchFailed\" },\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn this.initializeDevice(newDeviceInfo, deviceId);\n\t\t\t}\n\n\t\t\tconst wasEnabled = this.audioDevice?.persistentTrack?.enabled;\n\n\t\t\t// Ensure audio state matches the current device\n\t\t\tthis.call.setLocalAudio(wasEnabled ?? false);\n\t\t\tthis._deviceInfo.audio = newDeviceInfo;\n\t\t\tthis.emit(\"audioDeviceChanged\", { type: \"audioDeviceChanged\" });\n\n\t\t\t// Daily doesn't emit track events when switching to a new audio device that's muted, so emit it ourselves\n\t\t\tif (this.audioDevice?.persistentTrack && !this.isEnabled(\"audio\")) {\n\t\t\t\tthis.emit(\"audioDisabled\", { type: \"audioDisabled\" });\n\t\t\t\tthis.emit(\"audioReady\", {\n\t\t\t\t\ttype: \"audioReady\",\n\t\t\t\t\ttrack: this.audioDevice.persistentTrack,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn { result: true, switchedDevices: switchedPhysicalDevices, error: undefined };\n\t\t} catch (error) {\n\t\t\tconsole.error(\"Error switching audio device: \", error);\n\t\t\treturn { result: false, switchedDevices: false, error: error as Error };\n\t\t}\n\t}\n\n\tasync applyVideoBackground(\n\t\tsettings: BackgroundSettings | null,\n\t\tarrayBuffer?: ArrayBuffer,\n\t): Promise {\n\t\t// If the settings are the same as the current settings and the background is already applied, return\n\t\tif (\n\t\t\tthis._backgroundInformation.settings?.path === settings?.path &&\n\t\t\tthis._backgroundInformation.isApplied\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tthis._backgroundInformation.isApplied = true;\n\t\tif (settings === null) {\n\t\t\tawait this.call.updateInputSettings({ video: { processor: { type: \"none\" } } });\n\t\t\tthis._backgroundInformation.settings = null;\n\t\t\tthis._backgroundInformation.arrayBuffer = null;\n\t\t\treturn;\n\t\t}\n\t\tif (settings.type === \"image\") {\n\t\t\tif (!arrayBuffer) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait this.call.updateInputSettings({\n\t\t\t\tvideo: {\n\t\t\t\t\tprocessor: {\n\t\t\t\t\t\ttype: \"background-image\",\n\t\t\t\t\t\tconfig: {\n\t\t\t\t\t\t\tsource: arrayBuffer,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\t\t\tthis._backgroundInformation.settings = settings;\n\t\t\tthis._backgroundInformation.arrayBuffer = arrayBuffer;\n\n\t\t\treturn;\n\t\t}\n\t\tif (settings.type === \"blur\") {\n\t\t\tawait this.call.updateInputSettings({\n\t\t\t\tvideo: { processor: { type: \"background-blur\", config: { strength: 1 } } },\n\t\t\t});\n\t\t\tthis._backgroundInformation.settings = settings;\n\t\t\tthis._backgroundInformation.arrayBuffer = null;\n\n\t\t\treturn;\n\t\t}\n\t}\n\n\tasync removeLocalAudioTrack(): Promise {\n\t\tif (this.call.isDestroyed()) {\n\t\t\treturn;\n\t\t}\n\t\tawait this.call.setInputDevicesAsync({\n\t\t\tvideoDeviceId: null,\n\t\t\taudioDeviceId: undefined,\n\t\t});\n\n\t\t// Update internal references\n\t\tthis.audioDevice = this.call.participants().local?.tracks?.audio;\n\t\tthis._deviceInfo.audio = undefined;\n\t}\n\n\tgetVideoDimensions(): IDimensions | undefined {\n\t\tconst videoSettings = this.videoDevice?.persistentTrack?.getSettings();\n\t\tif (videoSettings?.height && videoSettings?.width) {\n\t\t\treturn {\n\t\t\t\theight: videoSettings.height,\n\t\t\t\twidth: videoSettings.width,\n\t\t\t};\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tcaptureImage(): Promise {\n\t\tif (this.videoDevice?.persistentTrack) {\n\t\t\treturn captureImage(this.videoDevice?.persistentTrack);\n\t\t}\n\n\t\treturn Promise.resolve(null);\n\t}\n\n\t/**\n\t * Set the background effect information for the stream\n\t * @param backgroundSettings the settings for the background\n\t * @param backgroundArrayBuffer the background image as an ArrayBuffer\n\t */\n\tsetBackgroundEffectInformation(\n\t\tbackgroundSettings: BackgroundSettings | null,\n\t\tbackgroundArrayBuffer: ArrayBuffer | null,\n\t): void {\n\t\tconst isApplied =\n\t\t\tthis._backgroundInformation.isApplied &&\n\t\t\tbackgroundSettings?.path === this._backgroundInformation.settings?.path;\n\t\tthis._backgroundInformation = {\n\t\t\tsettings: backgroundSettings,\n\t\t\tarrayBuffer: backgroundArrayBuffer,\n\t\t\tisApplied: isApplied,\n\t\t};\n\t}\n\n\t/**\n\t * This method is used to handle stream updates for the Daily background preview stream.\n\t * If the local user's video stream has been updated, then emit an event to update the rendered video on app level.\n\t * @param event Daily \"participant-updated\" event object\n\t */\n\tprivate handleCustomCallParticipantUpdated(event: DailyEventObjectParticipant): void {\n\t\tif (event.participant.local && event.participant.tracks.video.persistentTrack) {\n\t\t\tthis.videoDevice = event.participant.tracks.video;\n\t\t\tthis.emit(\"videoReady\", {\n\t\t\t\ttype: \"videoReady\",\n\t\t\t\ttrack: event.participant.tracks.video.persistentTrack,\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Event handler for the video element's resize event\n\t */\n\tprivate handleResizeEvent(): void {\n\t\tconst newDim = this.getVideoDimensions() ?? { height: 0, width: 0 };\n\t\tthis.emit(\"videoDimensionsChanged\", { type: \"videoDimensionsChanged\", newDim });\n\t}\n\n\t/**\n\t * Helper function to handle tracking if a device switch was successful in fully publishing to the call\n\t * @param newDeviceInfo - The MediaDeviceInfo of the new device\n\t * @param expectedDeviceId - The expected device we switched to\n\t * @returns - A promise that resolves with the result of the switch\n\t */\n\tprivate async initializeDevice(\n\t\tnewDeviceInfo: MediaDeviceInfo,\n\t\texpectedDeviceId?: string,\n\t): Promise {\n\t\tconst expectedType = newDeviceInfo.kind === \"videoinput\" ? \"video\" : \"audio\";\n\n\t\t// Wait for the expected device to throw an error or start playing before returning\n\t\treturn new Promise((resolve) => {\n\t\t\t// Create multiple started handlers so we can differentiate between video and audio events for device switching\n\t\t\tconst onVideoStarted = (event: DailyEventObjectTrack | undefined): void => {\n\t\t\t\tonStarted(event);\n\t\t\t};\n\n\t\t\tconst onAudioStarted = (event: DailyEventObjectTrack | undefined): void => {\n\t\t\t\tonStarted(event);\n\t\t\t};\n\n\t\t\tconst onStarted = (event: DailyEventObjectTrack | undefined): void => {\n\t\t\t\tif (!event?.participant?.local) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Confirm we have a matching event before cleaning up listeners\n\t\t\t\tif (event?.type === \"video\" && expectedType === \"video\") {\n\t\t\t\t\tthis.call.off(\"track-started\", onVideoStarted);\n\t\t\t\t\tthis.call.off(\"camera-error\", onVideoError);\n\t\t\t\t\tthis._deviceInfo.video = newDeviceInfo;\n\t\t\t\t\tthis.emit(\"videoEnabled\", { type: \"videoEnabled\" });\n\t\t\t\t\tthis.emit(\"videoDeviceChanged\", { type: \"videoDeviceChanged\" });\n\t\t\t\t} else if (event?.type === \"audio\" && expectedType === \"audio\") {\n\t\t\t\t\tthis.call.off(\"track-started\", onAudioStarted);\n\t\t\t\t\tthis.call.off(\"camera-error\", onAudioError);\n\t\t\t\t\tthis._deviceInfo.audio = newDeviceInfo;\n\t\t\t\t\tthis.emit(\"audioEnabled\", { type: \"audioEnabled\" });\n\t\t\t\t\tthis.emit(\"audioDeviceChanged\", { type: \"audioDeviceChanged\" });\n\t\t\t\t\tthis.audioDevice = this.call.participants().local?.tracks?.audio;\n\t\t\t\t} else {\n\t\t\t\t\t// If we didn't find an event, return so the promise doesn't yet resolve\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Validate we found the device we expected\n\t\t\t\tif (!!expectedDeviceId && newDeviceInfo?.deviceId !== expectedDeviceId) {\n\t\t\t\t\tconst error = {\n\t\t\t\t\t\tname: \"CameraSwitchFailed\",\n\t\t\t\t\t\tmessage: \"The selected device was not able to be selected\",\n\t\t\t\t\t};\n\t\t\t\t\tresolve({ result: false, switchedDevices: false, error: error });\n\t\t\t\t} else {\n\t\t\t\t\tresolve({ result: true, switchedDevices: true, error: undefined });\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// Create multiple error handlers so we can differentiate between video and audio errors for device switching\n\t\t\tconst onVideoError = (event: DailyEventObjectCameraError): void => {\n\t\t\t\tonError(event);\n\t\t\t};\n\n\t\t\tconst onAudioError = (event: DailyEventObjectCameraError): void => {\n\t\t\t\tonError(event);\n\t\t\t};\n\n\t\t\tconst onError = (event: DailyEventObjectCameraError): void => {\n\t\t\t\t// Daily sends a \"camera-error\" event for any type of device acquisition error (including microphone)\n\t\t\t\t// Verify that the error is specifically for the expected device type before proceeding\n\t\t\t\tconst eventType = isDailyCamError(event.error)\n\t\t\t\t\t? \"video\"\n\t\t\t\t\t: isDailyMicError(event.error)\n\t\t\t\t\t? \"audio\"\n\t\t\t\t\t: undefined;\n\n\t\t\t\t// Clean-up the corresponding event listeners\n\t\t\t\tif (eventType === \"video\" && expectedType === \"video\") {\n\t\t\t\t\tthis.call.off(\"track-started\", onVideoStarted);\n\t\t\t\t\tthis.call.off(\"camera-error\", onVideoError);\n\t\t\t\t} else if (eventType === \"audio\" && expectedType === \"audio\") {\n\t\t\t\t\tthis.call.off(\"track-started\", onAudioStarted);\n\t\t\t\t\tthis.call.off(\"camera-error\", onAudioError);\n\t\t\t\t} else {\n\t\t\t\t\t// If the error is not for the expected device type, ignore it\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst error = makeDailyCamErrorGeneric(event?.error);\n\t\t\t\tresolve({ result: false, switchedDevices: false, error: error });\n\t\t\t};\n\n\t\t\tif (expectedType === \"video\") {\n\t\t\t\tthis.call.on(\"track-started\", onVideoStarted);\n\t\t\t\tthis.call.on(\"camera-error\", onVideoError);\n\t\t\t\tthis.call.setLocalVideo(true);\n\t\t\t} else {\n\t\t\t\tthis.call.on(\"track-started\", onAudioStarted);\n\t\t\t\tthis.call.on(\"camera-error\", onAudioError);\n\t\t\t\tthis.call.setLocalAudio(true);\n\t\t\t}\n\t\t});\n\t}\n}\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Local User for Daily Sessions\n * @author Will Cooper\n * @module Epic.VideoApp.WebCore.Vendor.Daily.Implementations.DailyLocalUser\n */\n\nimport Daily, { DailyCall, DailyEventObjectNetworkQualityEvent, DailyParticipant } from \"@daily-co/daily-js\";\nimport { BackgroundSettings } from \"~/types/backgrounds\";\nimport { EVCEmitter, IEVCUserEventMap } from \"~/web-core/events\";\nimport { ILocalStream, ILocalUser } from \"~/web-core/interfaces\";\nimport { DailyBackgroundManager } from \"../helpers/dailyBackgroundManager\";\nimport { DailyLocalStream } from \"./dailyLocalStream\";\n\nexport class DailyLocalUser extends EVCEmitter implements ILocalUser {\n\tdeviceStream: DailyLocalStream;\n\tshareStream: DailyLocalStream | null;\n\tdailyCall: DailyCall;\n\tparticipant: DailyParticipant | null;\n\treadonly isLocal: true = true;\n\tprivate _networkQuality: number = 4;\n\t// A separate DailyCall instance will allow for preview tracks to be applied without publishing them\n\tprivate _previewTrackCall: DailyCall;\n\tprivate _backgroundLoader: DailyBackgroundManager;\n\n\tconstructor(stream: DailyLocalStream) {\n\t\tsuper();\n\t\tthis.deviceStream = stream;\n\t\tthis.shareStream = null;\n\t\tthis.dailyCall = stream.call;\n\t\tthis._previewTrackCall = Daily.createCallObject({\n\t\t\tallowMultipleCallInstances: true,\n\t\t\tsubscribeToTracksAutomatically: false,\n\t\t\tstartVideoOff: true,\n\t\t\tstartAudioOff: true,\n\t\t\tdailyConfig: { alwaysIncludeMicInPermissionPrompt: false },\n\t\t});\n\t\tthis._backgroundLoader = new DailyBackgroundManager(this._previewTrackCall);\n\t\tthis.participant = stream.call.participants().local;\n\t\tthis.constructEmitterInterface();\n\t}\n\n\t/**\n\t * Initializes the DailyLocalUser by starting the camera for the preview track call\n\t */\n\tasync initializeDaily(): Promise {\n\t\tawait this._previewTrackCall.startCamera();\n\t}\n\n\tasync createDevicePreviewStream(\n\t\tdisabledCameraId: string | null,\n\t\tbackgroundSettings?: BackgroundSettings,\n\t): Promise {\n\t\tconst stream = new DailyLocalStream(\"camera\", this._previewTrackCall);\n\t\tconst cameraDeviceId = disabledCameraId ?? this.deviceStream.getDeviceInfo(\"video\").deviceId;\n\t\tconst cameraDeviceInfo = await navigator.mediaDevices.enumerateDevices().then((devices) => {\n\t\t\treturn devices.find((device) => device.deviceId === cameraDeviceId);\n\t\t});\n\t\tif (!cameraDeviceInfo) {\n\t\t\tthrow new Error(\"No camera device found with the provided ID\");\n\t\t}\n\t\t// Passing the background settings early allow for a smaller delay to apply the background when making the preview\n\t\tconst arrayBuffer = this._backgroundLoader.backgroundImageBytesMap.get(\n\t\t\tbackgroundSettings?.path ?? \"\",\n\t\t);\n\t\tstream.setBackgroundEffectInformation(backgroundSettings ?? null, arrayBuffer ?? null);\n\t\tconst response = await stream.switchVideoDeviceAsync(cameraDeviceInfo);\n\t\tif (response.error) {\n\t\t\tthrow response.error;\n\t\t}\n\t\tthis._previewTrackCall.setLocalVideo(true);\n\t\tstream.videoDevice = this._previewTrackCall.participants().local.tracks.video;\n\t\treturn Promise.resolve(stream);\n\t}\n\n\tasync applyVideoBackground(\n\t\tsettings: BackgroundSettings | null,\n\t\tstream: ILocalStream | null,\n\t): Promise {\n\t\tconst arrayBuffer = this._backgroundLoader.backgroundImageBytesMap.get(settings?.path ?? \"\");\n\n\t\t/*\n\t\t * By always updating the device stream's background settings, even when working with a preview stream,\n\t\t * we don't have to apply a null background every time the camera is turned off since the background\n\t\t * settings will always be up to date. This improves behavior on low-end hardware.\n\t\t */\n\t\tthis.deviceStream.setBackgroundEffectInformation(settings, arrayBuffer ?? null);\n\n\t\tif (stream && stream instanceof DailyLocalStream) {\n\t\t\tawait stream.applyVideoBackground(settings, arrayBuffer);\n\t\t}\n\t}\n\n\tasync initializeVirtualBackgrounds(\n\t\tbackgroundSettings: BackgroundSettings[],\n\t\tavailableBackgroundsCount: number,\n\t): Promise {\n\t\tthis._backgroundLoader.once(\"backgroundProcessorsDone\", (args) => {\n\t\t\tthis.emit(\"backgroundProcessorsDone\", args);\n\t\t});\n\t\tawait this._backgroundLoader.initializeBackgroundProcessors(\n\t\t\tbackgroundSettings,\n\t\t\tavailableBackgroundsCount,\n\t\t\tthis.dailyCall,\n\t\t);\n\t}\n\n\tcreateShareStream(\n\t\tvideoStream: MediaStreamTrack,\n\t\taudioStream: MediaStreamTrack | null,\n\t\tmediaStream: MediaStream,\n\t): Promise {\n\t\tconst stream = new DailyLocalStream(\"screen\");\n\t\tstream.mediaStream = mediaStream;\n\t\tstream.videoDevice = { subscribed: \"staged\", state: \"playable\" };\n\t\tstream.videoDevice.persistentTrack = videoStream;\n\t\tif (audioStream) {\n\t\t\tstream.audioDevice = { subscribed: \"staged\", state: \"playable\" };\n\t\t\tstream.audioDevice.persistentTrack = audioStream;\n\t\t}\n\n\t\tthis.shareStream = stream;\n\t\tthis.emit(\"participantUpdated\", {\n\t\t\ttype: \"participantUpdated\",\n\t\t\tparticipant: this,\n\t\t\tvideoType: \"screen\",\n\t\t});\n\n\t\treturn Promise.resolve(stream);\n\t}\n\n\tcleanupShareStream(): void {\n\t\tvoid this.shareStream?.cleanUp();\n\t\tthis.shareStream = null;\n\t\tthis.emit(\"participantUpdated\", {\n\t\t\ttype: \"participantUpdated\",\n\t\t\tparticipant: this,\n\t\t\tvideoType: \"screen\",\n\t\t});\n\t}\n\n\tgetUserIdentity(): string {\n\t\treturn this.participant?.user_id ?? \"\";\n\t}\n\tisSharingScreen(): boolean {\n\t\treturn this.shareStream !== null;\n\t}\n\n\tgetNetworkQualityLevel(): number {\n\t\treturn this._networkQuality;\n\t}\n\n\tgetUserGuid(): string {\n\t\treturn this.participant?.session_id ?? \"\";\n\t}\n\n\tsetAudioOutput(speaker: MediaDeviceInfo): void {\n\t\tvoid this.dailyCall?.setOutputDeviceAsync({ outputDeviceId: speaker.deviceId });\n\t\tvoid this._previewTrackCall?.setOutputDeviceAsync({ outputDeviceId: speaker.deviceId });\n\t}\n\n\t/**\n\t * Constructs an interface layer to convert vendor-constructed events into shared events as defined by userEvents.ts\n\t */\n\tprivate constructEmitterInterface(): () => void {\n\t\tconst handleConnectionQualityChanged = (event?: DailyEventObjectNetworkQualityEvent): void => {\n\t\t\tlet EVCQuality = 4;\n\t\t\tif (event) {\n\t\t\t\tif (event.quality < 10) {\n\t\t\t\t\tEVCQuality = 0;\n\t\t\t\t} else if (event.quality < 25) {\n\t\t\t\t\tEVCQuality = 1;\n\t\t\t\t} else if (event.quality < 50) {\n\t\t\t\t\tEVCQuality = 2;\n\t\t\t\t} else if (event.quality < 75) {\n\t\t\t\t\tEVCQuality = 3;\n\t\t\t\t} else {\n\t\t\t\t\tEVCQuality = 4;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Only emit the event if the mapped quality has changed\n\t\t\tif (this._networkQuality === EVCQuality) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._networkQuality = EVCQuality;\n\t\t\tthis.emit(\"networkQualityLevelChanged\", {\n\t\t\t\ttype: \"networkQualityLevelChanged\",\n\t\t\t\tnewValue: EVCQuality,\n\t\t\t});\n\t\t};\n\n\t\tthis.dailyCall.on(\"network-quality-change\", handleConnectionQualityChanged.bind(this));\n\t\treturn () => {\n\t\t\tthis.dailyCall.off(\"network-quality-change\", handleConnectionQualityChanged);\n\t\t};\n\t}\n}\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Index for Daily Implementations\n * @author Trevor Roussel\n * @module Epic.VideoApp.WebCore.Vendor.Daily.Implementations.Index\n */\n\nexport * from \"./dailySession\";\n\nexport * from \"./dailyLocalUser\";\nexport * from \"./dailyRemoteUser\";\n\nexport * from \"./dailyLocalStream\";\nexport * from \"./dailyRemoteStream\";\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Initialization function to create Daily-specific session\n * @author Trevor Roussel\n * @module Epic.VideoApp.WebCore.Vendor.Daily.Functions.InitializeDailyAsVendor\n */\n\nimport { isMobile } from \"~/utils/os\";\nimport { constrainToString } from \"~/web-core/functions\";\nimport { SessionErrorCodes, VendorError } from \"~/web-core/interfaces\";\nimport { DailyLocalStream, DailyLocalUser, DailyRemoteUser, DailySession } from \"../implementations\";\nimport { processDailyError } from \"./dailyErrorUtils\";\n\nexport async function initializeDailyAsVendor(\n\tvideoDeviceId: ConstrainDOMString | undefined,\n\taudioDeviceId: ConstrainDOMString | undefined,\n): Promise {\n\tconst dailyStream = new DailyLocalStream();\n\tconst hwInitError = await dailyStream.initialize(\n\t\tconstrainToString(videoDeviceId),\n\t\tconstrainToString(audioDeviceId),\n\t);\n\n\tif (hwInitError && hwInitError.length > 0) {\n\t\tconst updates = processDailyError(hwInitError);\n\t\tdailyStream.deviceInitializationError = {\n\t\t\tdeviceUpdates: updates,\n\t\t\terror: new VendorError(hwInitError[0].type, SessionErrorCodes.unknown, hwInitError[0].msg),\n\t\t};\n\t}\n\n\tconst user = new DailyLocalUser(dailyStream);\n\tawait user.initializeDaily();\n\tconst session = new DailySession(user);\n\n\t// On mobile, use lower quality settings for received video\n\tif (isMobile()) {\n\t\tDailyRemoteUser.setUseMobileQuality();\n\t}\n\n\treturn session;\n}\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Shared constants for Twilio's vendor implementation\n * @author Will Cooper\n * @module Epic.VideoApp.WebCore.Vendor.Twilio.TwilioValues\n */\n\n// Common Twilio room error codes. See node_modules/twilio-video/lib/util/twilio-video-errors.js for codes\nexport enum RoomErrorCodes {\n\tparticipantDuplicateIdentityError = 53205,\n\troomCompletedError = 53118,\n\troomMaxParticipantsExceededError = 53105,\n}\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Processes Twilio-surfaced errors into meaningful errors for logging\n * @author Chance Overberg\n * @module Epic.VideoApp.WebCore.Vendor.Twilio.Functions.ProcessTwilioError\n */\n\nimport { TwilioError } from \"twilio-video\";\nimport { DeviceStatus, DeviceStatusSubtype, HardwareTestError } from \"~/types\";\nimport { warn } from \"~/utils/logging\";\nimport { SessionErrorCodes } from \"~/web-core/interfaces\";\nimport { DeviceType } from \"~/web-core/types\";\nimport { RoomErrorCodes } from \"../twilioValues\";\n\nexport function processTwilioError(error: TwilioError): IDeviceUpdate[] {\n\tconst { name, message } = error;\n\n\t// useAudioTrackActions & useVideoTrackActions will pass a source to indicate what devices should have errors\n\t// from useInitialLocalTracks, even specific errors will lead to the other device having an unknown status\n\tconst twilioError = parseTwilioError(message || \"\");\n\n\tconst updates = buildErrorResponse(twilioError);\n\n\twarn(`${name}: ${message}`);\n\n\treturn updates;\n}\n\nexport interface IDeviceUpdate {\n\tstatus: DeviceStatus;\n\terrorType: DeviceStatusSubtype;\n\tdevice: DeviceType;\n}\n\nexport function isTwilioError(error: unknown): boolean {\n\treturn (error as TwilioError).code !== undefined && (error as TwilioError).message !== undefined;\n}\n\nfunction buildErrorResponse(testError: HardwareTestError): IDeviceUpdate[] {\n\tconst errorUpdates: IDeviceUpdate[] = [];\n\tswitch (testError) {\n\t\tcase HardwareTestError.generalError:\n\t\t\terrorUpdates.push({\n\t\t\t\tdevice: \"camera\",\n\t\t\t\tstatus: DeviceStatus.error,\n\t\t\t\terrorType: DeviceStatusSubtype.general,\n\t\t\t});\n\n\t\t\terrorUpdates.push({\n\t\t\t\tdevice: \"mic\",\n\t\t\t\tstatus: DeviceStatus.error,\n\t\t\t\terrorType: DeviceStatusSubtype.general,\n\t\t\t});\n\t\t\tbreak;\n\t\tcase HardwareTestError.unknown:\n\t\t\terrorUpdates.push({\n\t\t\t\tdevice: \"camera\",\n\t\t\t\tstatus: DeviceStatus.error,\n\t\t\t\terrorType: DeviceStatusSubtype.unknown,\n\t\t\t});\n\t\t\terrorUpdates.push({\n\t\t\t\tdevice: \"mic\",\n\t\t\t\tstatus: DeviceStatus.error,\n\t\t\t\terrorType: DeviceStatusSubtype.unknown,\n\t\t\t});\n\t\t\tbreak;\n\t\tcase HardwareTestError.permissionsError:\n\t\t\terrorUpdates.push({\n\t\t\t\tdevice: \"camera\",\n\t\t\t\tstatus: DeviceStatus.error,\n\t\t\t\terrorType: DeviceStatusSubtype.permissionsError,\n\t\t\t});\n\t\t\terrorUpdates.push({\n\t\t\t\tdevice: \"mic\",\n\t\t\t\tstatus: DeviceStatus.error,\n\t\t\t\terrorType: DeviceStatusSubtype.permissionsError,\n\t\t\t});\n\t\t\tbreak;\n\t\tcase HardwareTestError.cameraError:\n\t\t\terrorUpdates.push({\n\t\t\t\tdevice: \"camera\",\n\t\t\t\tstatus: DeviceStatus.error,\n\t\t\t\terrorType: DeviceStatusSubtype.hardwareError,\n\t\t\t});\n\t\t\terrorUpdates.push({\n\t\t\t\tdevice: \"mic\",\n\t\t\t\tstatus: DeviceStatus.unknown,\n\t\t\t\terrorType: DeviceStatusSubtype.unknown,\n\t\t\t});\n\t\t\tbreak;\n\t\tcase HardwareTestError.microphoneError:\n\t\t\terrorUpdates.push({\n\t\t\t\tdevice: \"camera\",\n\t\t\t\tstatus: DeviceStatus.unknown,\n\t\t\t\terrorType: DeviceStatusSubtype.unknown,\n\t\t\t});\n\t\t\terrorUpdates.push({\n\t\t\t\tdevice: \"mic\",\n\t\t\t\tstatus: DeviceStatus.error,\n\t\t\t\terrorType: DeviceStatusSubtype.hardwareError,\n\t\t\t});\n\t\t\tbreak;\n\t}\n\n\treturn errorUpdates;\n}\n\nfunction parseTwilioError(twilioErrorMessage: string): HardwareTestError {\n\tswitch (twilioErrorMessage) {\n\t\t// Generic device acquisition\n\t\tcase \"The I/O read operation failed.\":\n\t\tcase \"Requested device not found\":\n\t\tcase \"Device in use\":\n\t\t\treturn HardwareTestError.generalError;\n\t\t// Microphone\n\t\tcase \"Could not start audio source\":\n\t\tcase \"Failed starting capture of a audio track\":\n\t\tcase \"Failed to allocate audiosource\":\n\t\t\treturn HardwareTestError.microphoneError;\n\t\t// Camera\n\t\tcase \"Could not start video source\":\n\t\tcase \"Failed starting capture of a video track\":\n\t\tcase \"Failed to allocate videosource\":\n\t\t\treturn HardwareTestError.cameraError;\n\t\t// Permissions\n\t\tcase \"Permission denied\":\n\t\tcase \"Permission dismissed\":\n\t\tcase \"The request is not allowed by the user agent or the platform in the current context, possibly because the user denied permission.\":\n\t\tcase \"The request is not allowed by the user agent or the platform in the current context.\":\n\t\t\treturn HardwareTestError.permissionsError;\n\t\t// Default\n\t\tdefault:\n\t\t\treturn HardwareTestError.unknown;\n\t}\n}\n\n/**\n * Map error codes from Twilio to the generic error types EVC runs on.\n * @param twilioErrorCode - The int value of the Twilio error code.\n * @returns - The corresponding EVC error code, or unknown if not found.\n */\nexport function twilioRoomErrorToSessionError(twilioErrorCode: RoomErrorCodes): SessionErrorCodes {\n\tswitch (twilioErrorCode) {\n\t\tcase RoomErrorCodes.participantDuplicateIdentityError:\n\t\t\treturn SessionErrorCodes.participantDuplicateIdentityError;\n\t\tcase RoomErrorCodes.roomCompletedError:\n\t\t\treturn SessionErrorCodes.roomCompletedError;\n\t\tcase RoomErrorCodes.roomMaxParticipantsExceededError:\n\t\t\treturn SessionErrorCodes.roomMaxParticipantsExceededError;\n\t\tdefault:\n\t\t\treturn SessionErrorCodes.unknown;\n\t}\n}\n","/**\n * @private\n * The [[Processor]] is an abstract class for building your own custom processors.\n */\nexport abstract class Processor {\n\n /**\n * Applies a transform to an input frame and draw the results to an output frame buffer.\n * The frame will be dropped if this method raises an exception.\n * @param inputFrameBuffer - The source of the input frame to process.\n * @param outputFrameBuffer - The output frame buffer to use to draw the processed frame.\n */\n abstract processFrame(\n inputFrameBuffer: OffscreenCanvas | HTMLCanvasElement | HTMLVideoElement,\n outputFrameBuffer: HTMLCanvasElement): Promise | void;\n}\n","import { Timing } from '../types';\n\n/**\n * @private\n */\nexport class Benchmark {\n\n // NOTE (csantos): How many timing information to save per benchmark.\n // This is about the amount of timing info generated on a 24fps input.\n // Enough samples to calculate fps\n static readonly cacheSize = 41;\n\n private _timingCache: Map;\n private _timings: Map;\n\n constructor() {\n this._timingCache = new Map();\n this._timings = new Map();\n }\n\n end(name: string) {\n const timing = this._timings.get(name);\n if (!timing) {\n return;\n }\n timing.end = Date.now();\n timing.delay = timing.end - timing.start!;\n this._save(name, {...timing});\n }\n\n getAverageDelay(name: string): number | undefined {\n const timingCache = this._timingCache.get(name);\n if (!timingCache || !timingCache.length) {\n return;\n }\n return timingCache.map(timing => timing.delay!)\n .reduce((total: number, value: number) => total += value, 0) / timingCache.length;\n }\n\n getNames(): string[] {\n return Array.from(this._timingCache.keys());\n }\n\n getRate(name: string): number | undefined {\n const timingCache = this._timingCache.get(name);\n if (!timingCache || timingCache.length < 2) {\n return;\n }\n const totalDelay = timingCache[timingCache.length - 1].end! - timingCache[0].start!;\n return (timingCache.length / totalDelay) * 1000;\n }\n\n start(name: string) {\n let timing = this._timings.get(name);\n if (!timing) {\n timing = {};\n this._timings.set(name, timing);\n }\n timing.start = Date.now();\n delete timing.end;\n delete timing.delay;\n }\n\n private _save(name: string, timing: Timing) {\n let timingCache = this._timingCache.get(name);\n if (!timingCache) {\n timingCache = [];\n this._timingCache.set(name, timingCache);\n }\n\n timingCache.push(timing);\n\n if (timingCache.length > Benchmark.cacheSize) {\n timingCache.splice(0, timingCache.length - Benchmark.cacheSize);\n }\n }\n}\n","// This file is generated on build. To make changes, see scripts/version.js\n\n/**\n * The current version of the library.\n */\nexport const version: string = '2.1.0';\n","/**\n * @private\n */\n declare global {\n interface Window {\n chrome: any;\n createTwilioTFLiteModule: () => Promise;\n createTwilioTFLiteSIMDModule: () => Promise;\n OffscreenCanvas: typeof OffscreenCanvas;\n Twilio: Object & { VideoProcessors?: any };\n }\n}\n\n/**\n * @private\n */\nexport enum WebGL2PipelineType {\n Blur = 'blur',\n Image = 'image',\n}\n\n/**\n * @private\n */\nexport interface Timing {\n delay?: number;\n end?: number;\n start?: number;\n}\n\n/**\n * @private\n */\nexport interface Dimensions {\n height: number;\n width: number;\n}\n\n/**\n * ImageFit specifies the positioning of an image inside a viewport.\n */\nexport enum ImageFit {\n /**\n * Scale the image up or down to fill the viewport while preserving the aspect ratio.\n * The image will be fully visible but will add empty space in the viewport if\n * aspect ratios do not match.\n */\n Contain = 'Contain',\n\n /**\n * Scale the image to fill both height and width of the viewport while preserving\n * the aspect ratio, but will crop the image if aspect ratios do not match.\n */\n Cover = 'Cover',\n\n /**\n * Stretches the image to fill the viewport regardless of aspect ratio.\n */\n Fill = 'Fill',\n\n /**\n * Ignore height and width and use the original size.\n */\n None = 'None'\n}\n\n/**\n * Specifies which pipeline to use when processing video frames.\n */\nexport enum Pipeline {\n /**\n * Use canvas 2d rendering context. Some browsers such as Safari do not\n * have full support of this feature. Please test your application to make sure it works as intented. See\n * [browser compatibility page](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D#browser_compatibility)\n * for reference.\n */\n Canvas2D = 'Canvas2D',\n\n /**\n * Use canvas webgl2 rendering context. Major browsers have support for this feature. However, this does not work\n * on some older versions of browsers. Please test your application to make sure it works as intented. See\n * [browser compatibility page](https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext#browser_compatibility)\n * for reference.\n */\n WebGL2 = 'WebGL2'\n}\n","export type InputResolution = '640x360' | '256x256' | '256x144' | '160x96' | string\n\nexport const inputResolutions: {\n [resolution in InputResolution]: [number, number]\n} = {\n '640x360': [640, 360],\n '256x256': [256, 256],\n '256x144': [256, 144],\n '160x96': [160, 96],\n}\n\nexport type SegmentationConfig = {\n inputResolution: InputResolution\n}\n","/**\n * Use it along with boyswan.glsl-literal VSCode extension\n * to get GLSL syntax highlighting.\n * https://marketplace.visualstudio.com/items?itemName=boyswan.glsl-literal\n *\n * On VSCode OSS, boyswan.glsl-literal requires slevesque.shader extension\n * to be installed as well.\n * https://marketplace.visualstudio.com/items?itemName=slevesque.shader\n */\nexport const glsl = String.raw\n\nexport function createPiplelineStageProgram(\n gl: WebGL2RenderingContext,\n vertexShader: WebGLShader,\n fragmentShader: WebGLShader,\n positionBuffer: WebGLBuffer,\n texCoordBuffer: WebGLBuffer\n) {\n const program = createProgram(gl, vertexShader, fragmentShader)\n\n const positionAttributeLocation = gl.getAttribLocation(program, 'a_position')\n gl.enableVertexAttribArray(positionAttributeLocation)\n gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer)\n gl.vertexAttribPointer(positionAttributeLocation, 2, gl.FLOAT, false, 0, 0)\n\n const texCoordAttributeLocation = gl.getAttribLocation(program, 'a_texCoord')\n gl.enableVertexAttribArray(texCoordAttributeLocation)\n gl.bindBuffer(gl.ARRAY_BUFFER, texCoordBuffer)\n gl.vertexAttribPointer(texCoordAttributeLocation, 2, gl.FLOAT, false, 0, 0)\n\n return program\n}\n\nexport function createProgram(\n gl: WebGL2RenderingContext,\n vertexShader: WebGLShader,\n fragmentShader: WebGLShader\n) {\n const program = gl.createProgram()!\n gl.attachShader(program, vertexShader)\n gl.attachShader(program, fragmentShader)\n gl.linkProgram(program)\n if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n throw new Error(\n `Could not link WebGL program: ${gl.getProgramInfoLog(program)}`\n )\n }\n return program\n}\n\nexport function compileShader(\n gl: WebGL2RenderingContext,\n shaderType: number,\n shaderSource: string\n) {\n const shader = gl.createShader(shaderType)!\n gl.shaderSource(shader, shaderSource)\n gl.compileShader(shader)\n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n throw new Error(`Could not compile shader: ${gl.getShaderInfoLog(shader)}`)\n }\n return shader\n}\n\nexport function createTexture(\n gl: WebGL2RenderingContext,\n internalformat: number,\n width: number,\n height: number,\n minFilter: GLint = gl.NEAREST,\n magFilter: GLint = gl.NEAREST\n) {\n const texture = gl.createTexture()\n gl.bindTexture(gl.TEXTURE_2D, texture)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, minFilter)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, magFilter)\n gl.texStorage2D(gl.TEXTURE_2D, 1, internalformat, width, height)\n return texture\n}\n\nexport async function readPixelsAsync(\n gl: WebGL2RenderingContext,\n x: number,\n y: number,\n width: number,\n height: number,\n format: number,\n type: number,\n dest: ArrayBufferView\n) {\n const buf = gl.createBuffer()!\n gl.bindBuffer(gl.PIXEL_PACK_BUFFER, buf)\n gl.bufferData(gl.PIXEL_PACK_BUFFER, dest.byteLength, gl.STREAM_READ)\n gl.readPixels(x, y, width, height, format, type, 0)\n gl.bindBuffer(gl.PIXEL_PACK_BUFFER, null!)\n\n await getBufferSubDataAsync(gl, gl.PIXEL_PACK_BUFFER, buf, 0, dest)\n\n gl.deleteBuffer(buf)\n return dest\n}\n\nasync function getBufferSubDataAsync(\n gl: WebGL2RenderingContext,\n target: number,\n buffer: WebGLBuffer,\n srcByteOffset: number,\n dstBuffer: ArrayBufferView,\n dstOffset?: GLuint,\n length?: number\n) {\n const sync = gl.fenceSync(gl.SYNC_GPU_COMMANDS_COMPLETE, 0)!\n gl.flush()\n const res = await clientWaitAsync(gl, sync)\n gl.deleteSync(sync)\n\n if (res !== gl.WAIT_FAILED) {\n gl.bindBuffer(target, buffer)\n gl.getBufferSubData(target, srcByteOffset, dstBuffer, dstOffset, length)\n gl.bindBuffer(target, null!)\n }\n}\n\nfunction clientWaitAsync(gl: WebGL2RenderingContext, sync: WebGLSync) {\n return new Promise((resolve) => {\n function test() {\n const res = gl.clientWaitSync(sync, 0, 0)\n if (res === gl.WAIT_FAILED) {\n resolve(res)\n return\n }\n if (res === gl.TIMEOUT_EXPIRED) {\n requestAnimationFrame(test)\n return\n }\n resolve(res)\n }\n requestAnimationFrame(test)\n })\n}\n","import {\n compileShader,\n createPiplelineStageProgram,\n createTexture,\n glsl,\n} from '../helpers/webglHelper'\n\nexport type BackgroundBlurStage = {\n render(): void\n updateCoverage(coverage: [number, number]): void\n cleanUp(): void\n}\n\nexport function buildBackgroundBlurStage(\n gl: WebGL2RenderingContext,\n vertexShader: WebGLShader,\n positionBuffer: WebGLBuffer,\n texCoordBuffer: WebGLBuffer,\n personMaskTexture: WebGLTexture,\n canvas: HTMLCanvasElement\n): BackgroundBlurStage {\n const blurPass = buildBlurPass(\n gl,\n vertexShader,\n positionBuffer,\n texCoordBuffer,\n personMaskTexture,\n canvas\n )\n const blendPass = buildBlendPass(gl, positionBuffer, texCoordBuffer, canvas)\n\n function render() {\n blurPass.render()\n blendPass.render()\n }\n\n function updateCoverage(coverage: [number, number]) {\n blendPass.updateCoverage(coverage)\n }\n\n function cleanUp() {\n blendPass.cleanUp()\n blurPass.cleanUp()\n }\n\n return {\n render,\n updateCoverage,\n cleanUp,\n }\n}\n\nfunction buildBlurPass(\n gl: WebGL2RenderingContext,\n vertexShader: WebGLShader,\n positionBuffer: WebGLBuffer,\n texCoordBuffer: WebGLBuffer,\n personMaskTexture: WebGLTexture,\n canvas: HTMLCanvasElement\n) {\n const fragmentShaderSource = glsl`#version 300 es\n\n precision highp float;\n\n uniform sampler2D u_inputFrame;\n uniform sampler2D u_personMask;\n uniform vec2 u_texelSize;\n\n in vec2 v_texCoord;\n\n out vec4 outColor;\n\n const float offset[5] = float[](0.0, 1.0, 2.0, 3.0, 4.0);\n const float weight[5] = float[](0.2270270270, 0.1945945946, 0.1216216216,\n 0.0540540541, 0.0162162162);\n\n void main() {\n vec4 centerColor = texture(u_inputFrame, v_texCoord);\n float personMask = texture(u_personMask, v_texCoord).a;\n\n vec4 frameColor = centerColor * weight[0] * (1.0 - personMask);\n\n for (int i = 1; i < 5; i++) {\n vec2 offset = vec2(offset[i]) * u_texelSize;\n\n vec2 texCoord = v_texCoord + offset;\n frameColor += texture(u_inputFrame, texCoord) * weight[i] *\n (1.0 - texture(u_personMask, texCoord).a);\n\n texCoord = v_texCoord - offset;\n frameColor += texture(u_inputFrame, texCoord) * weight[i] *\n (1.0 - texture(u_personMask, texCoord).a);\n }\n outColor = vec4(frameColor.rgb + (1.0 - frameColor.a) * centerColor.rgb, 1.0);\n }\n `\n\n const scale = 0.5\n const outputWidth = canvas.width * scale\n const outputHeight = canvas.height * scale\n const texelWidth = 1 / outputWidth\n const texelHeight = 1 / outputHeight\n\n const fragmentShader = compileShader(\n gl,\n gl.FRAGMENT_SHADER,\n fragmentShaderSource\n )\n const program = createPiplelineStageProgram(\n gl,\n vertexShader,\n fragmentShader,\n positionBuffer,\n texCoordBuffer\n )\n const inputFrameLocation = gl.getUniformLocation(program, 'u_inputFrame')\n const personMaskLocation = gl.getUniformLocation(program, 'u_personMask')\n const texelSizeLocation = gl.getUniformLocation(program, 'u_texelSize')\n const texture1 = createTexture(\n gl,\n gl.RGBA8,\n outputWidth,\n outputHeight,\n gl.NEAREST,\n gl.LINEAR\n )\n const texture2 = createTexture(\n gl,\n gl.RGBA8,\n outputWidth,\n outputHeight,\n gl.NEAREST,\n gl.LINEAR\n )\n\n const frameBuffer1 = gl.createFramebuffer()\n gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer1)\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n texture1,\n 0\n )\n\n const frameBuffer2 = gl.createFramebuffer()\n gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer2)\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n texture2,\n 0\n )\n\n gl.useProgram(program)\n gl.uniform1i(personMaskLocation, 1)\n\n function render() {\n gl.viewport(0, 0, outputWidth, outputHeight)\n gl.useProgram(program)\n gl.uniform1i(inputFrameLocation, 0)\n gl.activeTexture(gl.TEXTURE1)\n gl.bindTexture(gl.TEXTURE_2D, personMaskTexture)\n\n for (let i = 0; i < 8; i++) {\n gl.uniform2f(texelSizeLocation, 0, texelHeight)\n gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer1)\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4)\n\n gl.activeTexture(gl.TEXTURE2)\n gl.bindTexture(gl.TEXTURE_2D, texture1)\n gl.uniform1i(inputFrameLocation, 2)\n\n gl.uniform2f(texelSizeLocation, texelWidth, 0)\n gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer2)\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4)\n\n gl.bindTexture(gl.TEXTURE_2D, texture2)\n }\n }\n\n function cleanUp() {\n gl.deleteFramebuffer(frameBuffer2)\n gl.deleteFramebuffer(frameBuffer1)\n gl.deleteTexture(texture2)\n gl.deleteTexture(texture1)\n gl.deleteProgram(program)\n gl.deleteShader(fragmentShader)\n }\n\n return {\n render,\n cleanUp,\n }\n}\n\nfunction buildBlendPass(\n gl: WebGL2RenderingContext,\n positionBuffer: WebGLBuffer,\n texCoordBuffer: WebGLBuffer,\n canvas: HTMLCanvasElement\n) {\n const vertexShaderSource = glsl`#version 300 es\n\n in vec2 a_position;\n in vec2 a_texCoord;\n\n out vec2 v_texCoord;\n\n void main() {\n // Flipping Y is required when rendering to canvas\n gl_Position = vec4(a_position * vec2(1.0, -1.0), 0.0, 1.0);\n v_texCoord = a_texCoord;\n }\n `\n\n const fragmentShaderSource = glsl`#version 300 es\n\n precision highp float;\n\n uniform sampler2D u_inputFrame;\n uniform sampler2D u_personMask;\n uniform sampler2D u_blurredInputFrame;\n uniform vec2 u_coverage;\n\n in vec2 v_texCoord;\n\n out vec4 outColor;\n\n void main() {\n vec3 color = texture(u_inputFrame, v_texCoord).rgb;\n vec3 blurredColor = texture(u_blurredInputFrame, v_texCoord).rgb;\n float personMask = texture(u_personMask, v_texCoord).a;\n personMask = smoothstep(u_coverage.x, u_coverage.y, personMask);\n outColor = vec4(mix(blurredColor, color, personMask), 1.0);\n }\n `\n\n const { width: outputWidth, height: outputHeight } = canvas\n\n const vertexShader = compileShader(gl, gl.VERTEX_SHADER, vertexShaderSource)\n const fragmentShader = compileShader(\n gl,\n gl.FRAGMENT_SHADER,\n fragmentShaderSource\n )\n const program = createPiplelineStageProgram(\n gl,\n vertexShader,\n fragmentShader,\n positionBuffer,\n texCoordBuffer\n )\n const inputFrameLocation = gl.getUniformLocation(program, 'u_inputFrame')\n const personMaskLocation = gl.getUniformLocation(program, 'u_personMask')\n const blurredInputFrame = gl.getUniformLocation(\n program,\n 'u_blurredInputFrame'\n )\n const coverageLocation = gl.getUniformLocation(program, 'u_coverage')\n\n gl.useProgram(program)\n gl.uniform1i(inputFrameLocation, 0)\n gl.uniform1i(personMaskLocation, 1)\n gl.uniform1i(blurredInputFrame, 2)\n gl.uniform2f(coverageLocation, 0, 1)\n\n function render() {\n gl.viewport(0, 0, outputWidth, outputHeight)\n gl.useProgram(program)\n gl.bindFramebuffer(gl.FRAMEBUFFER, null)\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4)\n }\n\n function updateCoverage(coverage: [number, number]) {\n gl.useProgram(program)\n gl.uniform2f(coverageLocation, coverage[0], coverage[1])\n }\n\n function cleanUp() {\n gl.deleteProgram(program)\n gl.deleteShader(fragmentShader)\n gl.deleteShader(vertexShader)\n }\n\n return {\n render,\n updateCoverage,\n cleanUp,\n }\n}\n","import { BlendMode } from '../helpers/postProcessingHelper'\nimport {\n compileShader,\n createPiplelineStageProgram,\n createTexture,\n glsl,\n} from '../helpers/webglHelper'\n\nexport type BackgroundImageStage = {\n render(): void\n updateCoverage(coverage: [number, number]): void\n updateLightWrapping(lightWrapping: number): void\n updateBlendMode(blendMode: BlendMode): void\n cleanUp(): void\n}\n\nexport function buildBackgroundImageStage(\n gl: WebGL2RenderingContext,\n positionBuffer: WebGLBuffer,\n texCoordBuffer: WebGLBuffer,\n personMaskTexture: WebGLTexture,\n backgroundImage: HTMLImageElement | null,\n canvas: HTMLCanvasElement\n): BackgroundImageStage {\n const vertexShaderSource = glsl`#version 300 es\n\n uniform vec2 u_backgroundScale;\n uniform vec2 u_backgroundOffset;\n\n in vec2 a_position;\n in vec2 a_texCoord;\n\n out vec2 v_texCoord;\n out vec2 v_backgroundCoord;\n\n void main() {\n // Flipping Y is required when rendering to canvas\n gl_Position = vec4(a_position * vec2(1.0, -1.0), 0.0, 1.0);\n v_texCoord = a_texCoord;\n v_backgroundCoord = a_texCoord * u_backgroundScale + u_backgroundOffset;\n }\n `\n\n const fragmentShaderSource = glsl`#version 300 es\n\n precision highp float;\n\n uniform sampler2D u_inputFrame;\n uniform sampler2D u_personMask;\n uniform sampler2D u_background;\n uniform vec2 u_coverage;\n uniform float u_lightWrapping;\n uniform float u_blendMode;\n\n in vec2 v_texCoord;\n in vec2 v_backgroundCoord;\n\n out vec4 outColor;\n\n vec3 screen(vec3 a, vec3 b) {\n return 1.0 - (1.0 - a) * (1.0 - b);\n }\n\n vec3 linearDodge(vec3 a, vec3 b) {\n return a + b;\n }\n\n void main() {\n vec3 frameColor = texture(u_inputFrame, v_texCoord).rgb;\n vec3 backgroundColor = texture(u_background, v_backgroundCoord).rgb;\n float personMask = texture(u_personMask, v_texCoord).a;\n float lightWrapMask = 1.0 - max(0.0, personMask - u_coverage.y) / (1.0 - u_coverage.y);\n vec3 lightWrap = u_lightWrapping * lightWrapMask * backgroundColor;\n frameColor = u_blendMode * linearDodge(frameColor, lightWrap) +\n (1.0 - u_blendMode) * screen(frameColor, lightWrap);\n personMask = smoothstep(u_coverage.x, u_coverage.y, personMask);\n outColor = vec4(frameColor * personMask + backgroundColor * (1.0 - personMask), 1.0);\n }\n `\n\n const { width: outputWidth, height: outputHeight } = canvas\n const outputRatio = outputWidth / outputHeight\n\n const vertexShader = compileShader(gl, gl.VERTEX_SHADER, vertexShaderSource)\n const fragmentShader = compileShader(\n gl,\n gl.FRAGMENT_SHADER,\n fragmentShaderSource\n )\n const program = createPiplelineStageProgram(\n gl,\n vertexShader,\n fragmentShader,\n positionBuffer,\n texCoordBuffer\n )\n const backgroundScaleLocation = gl.getUniformLocation(\n program,\n 'u_backgroundScale'\n )\n const backgroundOffsetLocation = gl.getUniformLocation(\n program,\n 'u_backgroundOffset'\n )\n const inputFrameLocation = gl.getUniformLocation(program, 'u_inputFrame')\n const personMaskLocation = gl.getUniformLocation(program, 'u_personMask')\n const backgroundLocation = gl.getUniformLocation(program, 'u_background')\n const coverageLocation = gl.getUniformLocation(program, 'u_coverage')\n const lightWrappingLocation = gl.getUniformLocation(\n program,\n 'u_lightWrapping'\n )\n const blendModeLocation = gl.getUniformLocation(program, 'u_blendMode')\n\n gl.useProgram(program)\n gl.uniform2f(backgroundScaleLocation, 1, 1)\n gl.uniform2f(backgroundOffsetLocation, 0, 0)\n gl.uniform1i(inputFrameLocation, 0)\n gl.uniform1i(personMaskLocation, 1)\n gl.uniform2f(coverageLocation, 0, 1)\n gl.uniform1f(lightWrappingLocation, 0)\n gl.uniform1f(blendModeLocation, 0)\n\n let backgroundTexture: WebGLTexture | null = null\n // TODO Find a better to handle background being loaded\n if (backgroundImage?.complete) {\n updateBackgroundImage(backgroundImage)\n } else if (backgroundImage) {\n backgroundImage.onload = () => {\n updateBackgroundImage(backgroundImage)\n }\n }\n\n function render() {\n gl.viewport(0, 0, outputWidth, outputHeight)\n gl.useProgram(program)\n gl.activeTexture(gl.TEXTURE1)\n gl.bindTexture(gl.TEXTURE_2D, personMaskTexture)\n if (backgroundTexture !== null) {\n gl.activeTexture(gl.TEXTURE2)\n gl.bindTexture(gl.TEXTURE_2D, backgroundTexture)\n // TODO Handle correctly the background not loaded yet\n gl.uniform1i(backgroundLocation, 2)\n }\n gl.bindFramebuffer(gl.FRAMEBUFFER, null)\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4)\n }\n\n function updateBackgroundImage(backgroundImage: HTMLImageElement) {\n backgroundTexture = createTexture(\n gl,\n gl.RGBA8,\n backgroundImage.naturalWidth,\n backgroundImage.naturalHeight,\n gl.LINEAR,\n gl.LINEAR\n )\n gl.texSubImage2D(\n gl.TEXTURE_2D,\n 0,\n 0,\n 0,\n backgroundImage.naturalWidth,\n backgroundImage.naturalHeight,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n backgroundImage\n )\n\n let xOffset = 0\n let yOffset = 0\n let backgroundWidth = backgroundImage.naturalWidth\n let backgroundHeight = backgroundImage.naturalHeight\n const backgroundRatio = backgroundWidth / backgroundHeight\n if (backgroundRatio < outputRatio) {\n backgroundHeight = backgroundWidth / outputRatio\n yOffset = (backgroundImage.naturalHeight - backgroundHeight) / 2\n } else {\n backgroundWidth = backgroundHeight * outputRatio\n xOffset = (backgroundImage.naturalWidth - backgroundWidth) / 2\n }\n\n const xScale = backgroundWidth / backgroundImage.naturalWidth\n const yScale = backgroundHeight / backgroundImage.naturalHeight\n xOffset /= backgroundImage.naturalWidth\n yOffset /= backgroundImage.naturalHeight\n\n gl.uniform2f(backgroundScaleLocation, xScale, yScale)\n gl.uniform2f(backgroundOffsetLocation, xOffset, yOffset)\n }\n\n function updateCoverage(coverage: [number, number]) {\n gl.useProgram(program)\n gl.uniform2f(coverageLocation, coverage[0], coverage[1])\n }\n\n function updateLightWrapping(lightWrapping: number) {\n gl.useProgram(program)\n gl.uniform1f(lightWrappingLocation, lightWrapping)\n }\n\n function updateBlendMode(blendMode: BlendMode) {\n gl.useProgram(program)\n gl.uniform1f(blendModeLocation, blendMode === 'screen' ? 0 : 1)\n }\n\n function cleanUp() {\n gl.deleteTexture(backgroundTexture)\n gl.deleteProgram(program)\n gl.deleteShader(fragmentShader)\n gl.deleteShader(vertexShader)\n }\n\n return {\n render,\n updateCoverage,\n updateLightWrapping,\n updateBlendMode,\n cleanUp,\n }\n}\n","import {\n inputResolutions,\n SegmentationConfig,\n} from '../helpers/segmentationHelper'\nimport {\n compileShader,\n createPiplelineStageProgram,\n glsl,\n} from '../helpers/webglHelper'\n\nexport function buildJointBilateralFilterStage(\n gl: WebGL2RenderingContext,\n vertexShader: WebGLShader,\n positionBuffer: WebGLBuffer,\n texCoordBuffer: WebGLBuffer,\n inputTexture: WebGLTexture,\n segmentationConfig: SegmentationConfig,\n outputTexture: WebGLTexture,\n canvas: HTMLCanvasElement\n) {\n const fragmentShaderSource = glsl`#version 300 es\n\n precision highp float;\n\n uniform sampler2D u_inputFrame;\n uniform sampler2D u_segmentationMask;\n uniform vec2 u_texelSize;\n uniform float u_step;\n uniform float u_radius;\n uniform float u_offset;\n uniform float u_sigmaTexel;\n uniform float u_sigmaColor;\n\n in vec2 v_texCoord;\n\n out vec4 outColor;\n\n float gaussian(float x, float sigma) {\n float coeff = -0.5 / (sigma * sigma * 4.0 + 1.0e-6);\n return exp((x * x) * coeff);\n }\n\n void main() {\n vec2 centerCoord = v_texCoord;\n vec3 centerColor = texture(u_inputFrame, centerCoord).rgb;\n float newVal = 0.0;\n\n float spaceWeight = 0.0;\n float colorWeight = 0.0;\n float totalWeight = 0.0;\n\n vec2 leftTopCoord = vec2(centerCoord + vec2(-u_radius, -u_radius) * u_texelSize);\n vec2 rightTopCoord = vec2(centerCoord + vec2(u_radius, -u_radius) * u_texelSize);\n vec2 leftBottomCoord = vec2(centerCoord + vec2(-u_radius, u_radius) * u_texelSize);\n vec2 rightBottomCoord = vec2(centerCoord + vec2(u_radius, u_radius) * u_texelSize);\n\n float leftTopSegAlpha = texture(u_segmentationMask, leftTopCoord).a;\n float rightTopSegAlpha = texture(u_segmentationMask, rightTopCoord).a;\n float leftBottomSegAlpha = texture(u_segmentationMask, leftBottomCoord).a;\n float rightBottomSegAlpha = texture(u_segmentationMask, rightBottomCoord).a;\n float totalSegAlpha = leftTopSegAlpha + rightTopSegAlpha + leftBottomSegAlpha + rightBottomSegAlpha;\n\n if (totalSegAlpha <= 0.0) {\n outColor = vec4(vec3(0.0), 0.0);\n } else if (totalSegAlpha >= 4.0) {\n outColor = vec4(vec3(0.0), 1.0);\n } else {\n for (float i = -u_radius + u_offset; i <= u_radius; i += u_step) {\n for (float j = -u_radius + u_offset; j <= u_radius; j += u_step) {\n vec2 shift = vec2(j, i) * u_texelSize;\n vec2 coord = vec2(centerCoord + shift);\n vec3 frameColor = texture(u_inputFrame, coord).rgb;\n float outVal = texture(u_segmentationMask, coord).a;\n\n spaceWeight = gaussian(distance(centerCoord, coord), u_sigmaTexel);\n colorWeight = gaussian(distance(centerColor, frameColor), u_sigmaColor);\n totalWeight += spaceWeight * colorWeight;\n\n newVal += spaceWeight * colorWeight * outVal;\n }\n }\n newVal /= totalWeight;\n\n outColor = vec4(vec3(0.0), newVal);\n }\n }\n `\n\n const [segmentationWidth, segmentationHeight] = inputResolutions[\n segmentationConfig.inputResolution\n ]\n const { width: outputWidth, height: outputHeight } = canvas\n const texelWidth = 1 / outputWidth\n const texelHeight = 1 / outputHeight\n\n const fragmentShader = compileShader(\n gl,\n gl.FRAGMENT_SHADER,\n fragmentShaderSource\n )\n const program = createPiplelineStageProgram(\n gl,\n vertexShader,\n fragmentShader,\n positionBuffer,\n texCoordBuffer\n )\n const inputFrameLocation = gl.getUniformLocation(program, 'u_inputFrame')\n const segmentationMaskLocation = gl.getUniformLocation(\n program,\n 'u_segmentationMask'\n )\n const texelSizeLocation = gl.getUniformLocation(program, 'u_texelSize')\n const stepLocation = gl.getUniformLocation(program, 'u_step')\n const radiusLocation = gl.getUniformLocation(program, 'u_radius')\n const offsetLocation = gl.getUniformLocation(program, 'u_offset')\n const sigmaTexelLocation = gl.getUniformLocation(program, 'u_sigmaTexel')\n const sigmaColorLocation = gl.getUniformLocation(program, 'u_sigmaColor')\n\n const frameBuffer = gl.createFramebuffer()\n gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer)\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n outputTexture,\n 0\n )\n\n gl.useProgram(program)\n gl.uniform1i(inputFrameLocation, 0)\n gl.uniform1i(segmentationMaskLocation, 1)\n gl.uniform2f(texelSizeLocation, texelWidth, texelHeight)\n\n // Ensures default values are configured to prevent infinite\n // loop in fragment shader\n updateSigmaSpace(0)\n updateSigmaColor(0)\n\n function render() {\n gl.viewport(0, 0, outputWidth, outputHeight)\n gl.useProgram(program)\n gl.activeTexture(gl.TEXTURE1)\n gl.bindTexture(gl.TEXTURE_2D, inputTexture)\n gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer)\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4)\n }\n\n function updateSigmaSpace(sigmaSpace: number) {\n sigmaSpace *= Math.max(\n outputWidth / segmentationWidth,\n outputHeight / segmentationHeight\n )\n\n const kSparsityFactor = 0.66 // Higher is more sparse.\n const sparsity = Math.max(1, Math.sqrt(sigmaSpace) * kSparsityFactor)\n const step = sparsity\n const radius = sigmaSpace\n const offset = step > 1 ? step * 0.5 : 0\n const sigmaTexel = Math.max(texelWidth, texelHeight) * sigmaSpace\n\n gl.useProgram(program)\n gl.uniform1f(stepLocation, step)\n gl.uniform1f(radiusLocation, radius)\n gl.uniform1f(offsetLocation, offset)\n gl.uniform1f(sigmaTexelLocation, sigmaTexel)\n }\n\n function updateSigmaColor(sigmaColor: number) {\n gl.useProgram(program)\n gl.uniform1f(sigmaColorLocation, sigmaColor)\n }\n\n function cleanUp() {\n gl.deleteFramebuffer(frameBuffer)\n gl.deleteProgram(program)\n gl.deleteShader(fragmentShader)\n }\n\n return { render, updateSigmaSpace, updateSigmaColor, cleanUp }\n}\n","import {\n inputResolutions,\n SegmentationConfig,\n} from '../helpers/segmentationHelper'\nimport {\n compileShader,\n createPiplelineStageProgram,\n createTexture,\n glsl,\n} from '../helpers/webglHelper'\n\nexport function buildLoadSegmentationStage(\n gl: WebGL2RenderingContext,\n vertexShader: WebGLShader,\n positionBuffer: WebGLBuffer,\n texCoordBuffer: WebGLBuffer,\n segmentationConfig: SegmentationConfig,\n tflite: any,\n outputTexture: WebGLTexture\n) {\n const fragmentShaderSource = glsl`#version 300 es\n\n precision highp float;\n\n uniform sampler2D u_inputSegmentation;\n\n in vec2 v_texCoord;\n\n out vec4 outColor;\n\n void main() {\n float segmentation = texture(u_inputSegmentation, v_texCoord).r;\n outColor = vec4(vec3(0.0), segmentation);\n }\n `\n\n // TFLite memory will be accessed as float32\n const tfliteOutputMemoryOffset = tflite._getOutputMemoryOffset() / 4\n\n const [segmentationWidth, segmentationHeight] = inputResolutions[\n segmentationConfig.inputResolution\n ]\n\n const fragmentShader = compileShader(\n gl,\n gl.FRAGMENT_SHADER,\n fragmentShaderSource\n )\n const program = createPiplelineStageProgram(\n gl,\n vertexShader,\n fragmentShader,\n positionBuffer,\n texCoordBuffer\n )\n const inputLocation = gl.getUniformLocation(program, 'u_inputSegmentation')\n const inputTexture = createTexture(\n gl,\n gl.R32F,\n segmentationWidth,\n segmentationHeight\n )\n\n const frameBuffer = gl.createFramebuffer()\n gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer)\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n outputTexture,\n 0\n )\n\n gl.useProgram(program)\n gl.uniform1i(inputLocation, 1)\n\n function render() {\n gl.viewport(0, 0, segmentationWidth, segmentationHeight)\n gl.useProgram(program)\n gl.activeTexture(gl.TEXTURE1)\n gl.bindTexture(gl.TEXTURE_2D, inputTexture)\n gl.texSubImage2D(\n gl.TEXTURE_2D,\n 0,\n 0,\n 0,\n segmentationWidth,\n segmentationHeight,\n gl.RED,\n gl.FLOAT,\n tflite.HEAPF32,\n tfliteOutputMemoryOffset\n )\n gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer)\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4)\n }\n\n function cleanUp() {\n gl.deleteFramebuffer(frameBuffer)\n gl.deleteTexture(inputTexture)\n gl.deleteProgram(program)\n gl.deleteShader(fragmentShader)\n }\n\n return { render, cleanUp }\n}\n","import {\n inputResolutions,\n SegmentationConfig,\n} from '../helpers/segmentationHelper'\nimport {\n compileShader,\n createPiplelineStageProgram,\n createTexture,\n glsl,\n readPixelsAsync,\n} from '../helpers/webglHelper'\n\nexport function buildResizingStage(\n gl: WebGL2RenderingContext,\n vertexShader: WebGLShader,\n positionBuffer: WebGLBuffer,\n texCoordBuffer: WebGLBuffer,\n segmentationConfig: SegmentationConfig,\n tflite: any\n) {\n const fragmentShaderSource = glsl`#version 300 es\n\n precision highp float;\n\n uniform sampler2D u_inputFrame;\n\n in vec2 v_texCoord;\n\n out vec4 outColor;\n\n void main() {\n outColor = texture(u_inputFrame, v_texCoord);\n }\n `\n\n // TFLite memory will be accessed as float32\n const tfliteInputMemoryOffset = tflite._getInputMemoryOffset() / 4\n\n const [outputWidth, outputHeight] = inputResolutions[\n segmentationConfig.inputResolution\n ]\n const outputPixelCount = outputWidth * outputHeight\n\n const fragmentShader = compileShader(\n gl,\n gl.FRAGMENT_SHADER,\n fragmentShaderSource\n )\n const program = createPiplelineStageProgram(\n gl,\n vertexShader,\n fragmentShader,\n positionBuffer,\n texCoordBuffer\n )\n const inputFrameLocation = gl.getUniformLocation(program, 'u_inputFrame')\n const outputTexture = createTexture(gl, gl.RGBA8, outputWidth, outputHeight)\n\n const frameBuffer = gl.createFramebuffer()\n gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer)\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n outputTexture,\n 0\n )\n const outputPixels = new Uint8Array(outputPixelCount * 4)\n\n gl.useProgram(program)\n gl.uniform1i(inputFrameLocation, 0)\n\n function render() {\n gl.viewport(0, 0, outputWidth, outputHeight)\n gl.useProgram(program)\n gl.bindFramebuffer(gl.FRAMEBUFFER, frameBuffer)\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4)\n\n // Downloads pixels asynchronously from GPU while rendering the current frame\n readPixelsAsync(\n gl,\n 0,\n 0,\n outputWidth,\n outputHeight,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n outputPixels\n )\n\n for (let i = 0; i < outputPixelCount; i++) {\n const tfliteIndex = tfliteInputMemoryOffset + i * 3\n const outputIndex = i * 4\n tflite.HEAPF32[tfliteIndex] = outputPixels[outputIndex] / 255\n tflite.HEAPF32[tfliteIndex + 1] = outputPixels[outputIndex + 1] / 255\n tflite.HEAPF32[tfliteIndex + 2] = outputPixels[outputIndex + 2] / 255\n }\n }\n\n function cleanUp() {\n gl.deleteFramebuffer(frameBuffer)\n gl.deleteTexture(outputTexture)\n gl.deleteProgram(program)\n gl.deleteShader(fragmentShader)\n }\n\n return { render, cleanUp }\n}\n","import { BackgroundConfig } from '../helpers/backgroundHelper'\nimport { PostProcessingConfig } from '../helpers/postProcessingHelper'\nimport {\n inputResolutions,\n SegmentationConfig,\n} from '../helpers/segmentationHelper'\nimport { SourcePlayback } from '../helpers/sourceHelper'\nimport { compileShader, createTexture, glsl } from '../helpers/webglHelper'\nimport {\n BackgroundBlurStage,\n buildBackgroundBlurStage,\n} from './backgroundBlurStage'\nimport {\n BackgroundImageStage,\n buildBackgroundImageStage,\n} from './backgroundImageStage'\nimport { buildJointBilateralFilterStage } from './jointBilateralFilterStage'\nimport { buildLoadSegmentationStage } from './loadSegmentationStage'\nimport { buildResizingStage } from './resizingStage'\nimport { buildSoftmaxStage } from './softmaxStage'\n\nexport function buildWebGL2Pipeline(\n sourcePlayback: SourcePlayback,\n backgroundImage: HTMLImageElement | null,\n backgroundConfig: BackgroundConfig,\n segmentationConfig: SegmentationConfig,\n canvas: HTMLCanvasElement,\n tflite: any,\n benchmark: any,\n debounce: boolean,\n) {\n let shouldRunInference = true;\n\n const vertexShaderSource = glsl`#version 300 es\n\n in vec2 a_position;\n in vec2 a_texCoord;\n\n out vec2 v_texCoord;\n\n void main() {\n gl_Position = vec4(a_position, 0.0, 1.0);\n v_texCoord = a_texCoord;\n }\n `\n\n const { width: frameWidth, height: frameHeight } = sourcePlayback\n const [segmentationWidth, segmentationHeight] = inputResolutions[\n segmentationConfig.inputResolution\n ]\n\n const gl = canvas.getContext('webgl2')!\n\n const vertexShader = compileShader(gl, gl.VERTEX_SHADER, vertexShaderSource)\n\n const vertexArray = gl.createVertexArray()\n gl.bindVertexArray(vertexArray)\n\n const positionBuffer = gl.createBuffer()!\n gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer)\n gl.bufferData(\n gl.ARRAY_BUFFER,\n new Float32Array([-1.0, -1.0, 1.0, -1.0, -1.0, 1.0, 1.0, 1.0]),\n gl.STATIC_DRAW\n )\n\n const texCoordBuffer = gl.createBuffer()!\n gl.bindBuffer(gl.ARRAY_BUFFER, texCoordBuffer)\n gl.bufferData(\n gl.ARRAY_BUFFER,\n new Float32Array([0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 1.0]),\n gl.STATIC_DRAW\n )\n\n // We don't use texStorage2D here because texImage2D seems faster\n // to upload video texture than texSubImage2D even though the latter\n // is supposed to be the recommended way:\n // https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/WebGL_best_practices#use_texstorage_to_create_textures\n const inputFrameTexture = gl.createTexture()\n gl.bindTexture(gl.TEXTURE_2D, inputFrameTexture)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST)\n\n // TODO Rename segmentation and person mask to be more specific\n const segmentationTexture = createTexture(\n gl,\n gl.RGBA8,\n segmentationWidth,\n segmentationHeight\n )!\n const personMaskTexture = createTexture(\n gl,\n gl.RGBA8,\n frameWidth,\n frameHeight\n )!\n\n const resizingStage = buildResizingStage(\n gl,\n vertexShader,\n positionBuffer,\n texCoordBuffer,\n segmentationConfig,\n tflite\n )\n const loadSegmentationStage = buildLoadSegmentationStage(\n gl,\n vertexShader,\n positionBuffer,\n texCoordBuffer,\n segmentationConfig,\n tflite,\n segmentationTexture\n );\n const jointBilateralFilterStage = buildJointBilateralFilterStage(\n gl,\n vertexShader,\n positionBuffer,\n texCoordBuffer,\n segmentationTexture,\n segmentationConfig,\n personMaskTexture,\n canvas\n )\n const backgroundStage =\n backgroundConfig.type === 'blur'\n ? buildBackgroundBlurStage(\n gl,\n vertexShader,\n positionBuffer,\n texCoordBuffer,\n personMaskTexture,\n canvas\n )\n : buildBackgroundImageStage(\n gl,\n positionBuffer,\n texCoordBuffer,\n personMaskTexture,\n backgroundImage,\n canvas\n )\n\n async function render() {\n benchmark.start('inputImageResizeDelay')\n gl.clearColor(0, 0, 0, 0)\n gl.clear(gl.COLOR_BUFFER_BIT)\n\n gl.activeTexture(gl.TEXTURE0)\n gl.bindTexture(gl.TEXTURE_2D, inputFrameTexture)\n\n // texImage2D seems faster than texSubImage2D to upload\n // video texture\n gl.texImage2D(\n gl.TEXTURE_2D,\n 0,\n gl.RGBA,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n sourcePlayback.htmlElement\n )\n\n gl.bindVertexArray(vertexArray)\n\n resizingStage.render()\n benchmark.end('inputImageResizeDelay')\n\n benchmark.start('segmentationDelay')\n if (shouldRunInference) {\n tflite._runInference()\n }\n if (debounce) {\n shouldRunInference = !shouldRunInference;\n }\n benchmark.end('segmentationDelay')\n\n benchmark.start('imageCompositionDelay')\n loadSegmentationStage.render()\n jointBilateralFilterStage.render()\n backgroundStage.render()\n benchmark.end('imageCompositionDelay')\n }\n\n function updatePostProcessingConfig(\n postProcessingConfig: PostProcessingConfig\n ) {\n jointBilateralFilterStage.updateSigmaSpace(\n postProcessingConfig.jointBilateralFilter.sigmaSpace\n )\n jointBilateralFilterStage.updateSigmaColor(\n postProcessingConfig.jointBilateralFilter.sigmaColor\n )\n\n if (backgroundConfig.type === 'image') {\n const backgroundImageStage = backgroundStage as BackgroundImageStage\n backgroundImageStage.updateCoverage(postProcessingConfig.coverage)\n backgroundImageStage.updateLightWrapping(\n postProcessingConfig.lightWrapping\n )\n backgroundImageStage.updateBlendMode(postProcessingConfig.blendMode)\n } else if (backgroundConfig.type === 'blur') {\n const backgroundBlurStage = backgroundStage as BackgroundBlurStage\n backgroundBlurStage.updateCoverage(postProcessingConfig.coverage)\n } else {\n // TODO Handle no background in a separate pipeline path\n const backgroundImageStage = backgroundStage as BackgroundImageStage\n backgroundImageStage.updateCoverage([0, 0.9999])\n backgroundImageStage.updateLightWrapping(0)\n }\n }\n\n function cleanUp() {\n backgroundStage.cleanUp()\n jointBilateralFilterStage.cleanUp()\n loadSegmentationStage.cleanUp()\n resizingStage.cleanUp()\n\n gl.deleteTexture(personMaskTexture)\n gl.deleteTexture(segmentationTexture)\n gl.deleteTexture(inputFrameTexture)\n gl.deleteBuffer(texCoordBuffer)\n gl.deleteBuffer(positionBuffer)\n gl.deleteVertexArray(vertexArray)\n gl.deleteShader(vertexShader)\n }\n\n return { render, updatePostProcessingConfig, cleanUp }\n}\n","/**\n * This pipeline is based on Volcomix's react project.\n * https://github.com/Volcomix/virtual-background\n * It was modified and converted into a module to work with\n * Twilio's Video Processor\n */\nimport { buildWebGL2Pipeline } from './pipelines/webgl2Pipeline'\n\nexport { buildWebGL2Pipeline };\n","import { Dimensions } from './types';\n\nexport const BLUR_FILTER_RADIUS = 15;\nexport const DEBOUNCE_COUNT = 2;\nexport const MASK_BLUR_RADIUS = 5;\nexport const HISTORY_COUNT_MULTIPLIER = 3;\nexport const PERSON_PROBABILITY_THRESHOLD = 0.4;\nexport const MODEL_NAME = 'selfie_segmentation_landscape.tflite';\nexport const TFLITE_LOADER_NAME = 'tflite-1-0-0.js';\nexport const TFLITE_SIMD_LOADER_NAME = 'tflite-simd-1-0-0.js';\n\nexport const WASM_INFERENCE_DIMENSIONS: Dimensions = {\n width: 256,\n height: 144,\n};\n","import { Processor } from '../Processor';\nimport { Benchmark } from '../../utils/Benchmark';\nimport { version } from '../../utils/version';\nimport { Dimensions, Pipeline, WebGL2PipelineType } from '../../types';\nimport { buildWebGL2Pipeline } from '../webgl2';\n\nimport {\n DEBOUNCE_COUNT,\n HISTORY_COUNT_MULTIPLIER,\n MASK_BLUR_RADIUS,\n MODEL_NAME,\n PERSON_PROBABILITY_THRESHOLD,\n TFLITE_LOADER_NAME,\n TFLITE_SIMD_LOADER_NAME,\n WASM_INFERENCE_DIMENSIONS,\n} from '../../constants';\n\n/**\n * @private\n */\nexport interface BackgroundProcessorOptions {\n /**\n * The VideoProcessors load assets dynamically depending on certain browser features.\n * You need to serve all the assets and provide the root path so they can be referenced properly.\n * These assets can be copied from the `dist/build` folder which you can add as part of your deployment process.\n * @example\n *
\n *
\n * For virtual background:\n *
\n *\n * ```ts\n * const virtualBackground = new VirtualBackgroundProcessor({\n * assetsPath: 'https://my-server-path/assets',\n * backgroundImage: img,\n * });\n * await virtualBackground.loadModel();\n * ```\n *\n *
\n * For blur background:\n *
\n *\n * ```ts\n * const blurBackground = new GaussianBlurBackgroundProcessor({\n * assetsPath: 'https://my-server-path/assets'\n * });\n * await blurBackground.loadModel();\n * ```\n */\n assetsPath: string;\n\n /**\n * Whether to skip processing every other frame to improve the output frame rate, but reducing accuracy in the process.\n * @default\n * ```html\n * true\n * ```\n */\n debounce?: boolean;\n\n /**\n * @private\n */\n inferenceDimensions?: Dimensions;\n\n /**\n * The blur radius to use when smoothing out the edges of the person's mask.\n * @default\n * ```html\n * 5\n * ```\n */\n maskBlurRadius?: number;\n\n /**\n * @private\n */\n personProbabilityThreshold?: number;\n\n /**\n * Specifies which pipeline to use when processing video frames.\n * @default\n * ```html\n * 'WebGL2'\n * ```\n */\n pipeline?: Pipeline;\n}\n\n/**\n * @private\n */\nexport abstract class BackgroundProcessor extends Processor {\n private static _loadedScripts: string[] = [];\n\n protected _backgroundImage: HTMLImageElement | null = null;\n protected _outputCanvas: HTMLCanvasElement | null = null;\n protected _outputContext: CanvasRenderingContext2D | WebGL2RenderingContext | null = null;\n protected _webgl2Pipeline: ReturnType | null = null;\n\n private _assetsPath: string;\n private _benchmark: Benchmark;\n private _currentMask: Uint8ClampedArray | Uint8Array = new Uint8ClampedArray();\n private _debounce: boolean = true;\n private _debounceCount: number = DEBOUNCE_COUNT;\n private _dummyImageData: ImageData = new ImageData(1, 1);\n private _historyCount: number;\n private _inferenceDimensions: Dimensions = WASM_INFERENCE_DIMENSIONS;\n private _inputCanvas: HTMLCanvasElement;\n private _inputContext: CanvasRenderingContext2D;\n private _inputMemoryOffset: number = 0;\n // tslint:disable-next-line no-unused-variable\n private _isSimdEnabled: boolean | null = null;\n private _maskBlurRadius: number = MASK_BLUR_RADIUS;\n private _maskCanvas: OffscreenCanvas | HTMLCanvasElement;\n private _maskContext: OffscreenCanvasRenderingContext2D | CanvasRenderingContext2D;\n private _masks: (Uint8ClampedArray | Uint8Array)[];\n private _maskUsageCounter: number = 0;\n private _outputMemoryOffset: number = 0;\n private _personProbabilityThreshold: number = PERSON_PROBABILITY_THRESHOLD;\n private _pipeline: Pipeline = Pipeline.WebGL2;\n private _tflite: any;\n // tslint:disable-next-line no-unused-variable\n private readonly _version: string = version;\n\n constructor(options: BackgroundProcessorOptions) {\n super();\n\n if (typeof options.assetsPath !== 'string') {\n throw new Error('assetsPath parameter is missing');\n }\n let assetsPath = options.assetsPath;\n if (assetsPath && assetsPath[assetsPath.length - 1] !== '/') {\n assetsPath += '/';\n }\n\n this.maskBlurRadius = options.maskBlurRadius!;\n this._assetsPath = assetsPath;\n this._debounce = typeof options.debounce === 'boolean' ? options.debounce : this._debounce;\n this._debounceCount = this._debounce ? this._debounceCount : 1;\n this._inferenceDimensions = options.inferenceDimensions! || this._inferenceDimensions;\n this._historyCount = HISTORY_COUNT_MULTIPLIER * this._debounceCount;\n this._personProbabilityThreshold = options.personProbabilityThreshold! || this._personProbabilityThreshold;\n this._pipeline = options.pipeline! || this._pipeline;\n\n this._benchmark = new Benchmark();\n this._inputCanvas = document.createElement('canvas');\n this._inputContext = this._inputCanvas.getContext('2d') as CanvasRenderingContext2D;\n this._maskCanvas = typeof window.OffscreenCanvas !== 'undefined' ? new window.OffscreenCanvas(1, 1) : document.createElement('canvas');\n this._maskContext = this._maskCanvas.getContext('2d') as OffscreenCanvasRenderingContext2D;\n this._masks = [];\n }\n\n /**\n * The current blur radius when smoothing out the edges of the person's mask.\n */\n get maskBlurRadius(): number {\n return this._maskBlurRadius;\n }\n\n /**\n * Set a new blur radius to be used when smoothing out the edges of the person's mask.\n */\n set maskBlurRadius(radius: number) {\n if (typeof radius !== 'number' || radius < 0) {\n console.warn(`Valid mask blur radius not found. Using ${MASK_BLUR_RADIUS} as default.`);\n radius = MASK_BLUR_RADIUS;\n }\n this._maskBlurRadius = radius;\n }\n\n /**\n * Load the segmentation model.\n * Call this method before attaching the processor to ensure\n * video frames are processed correctly.\n */\n async loadModel() {\n const [tflite, modelResponse ] = await Promise.all([\n this._loadTwilioTfLite(),\n fetch(this._assetsPath + MODEL_NAME),\n ]);\n\n const model = await modelResponse.arrayBuffer();\n const modelBufferOffset = tflite._getModelBufferMemoryOffset();\n tflite.HEAPU8.set(new Uint8Array(model), modelBufferOffset);\n tflite._loadModel(model.byteLength);\n\n this._inputMemoryOffset = tflite._getInputMemoryOffset() / 4;\n this._outputMemoryOffset = tflite._getOutputMemoryOffset() / 4;\n\n this._tflite = tflite;\n }\n\n /**\n * Apply a transform to the background of an input video frame and leaving\n * the foreground (person(s)) untouched. Any exception detected will\n * result in the frame being dropped.\n * @param inputFrameBuffer - The source of the input frame to process.\n *
\n *
\n * [OffscreenCanvas](https://developer.mozilla.org/en-US/docs/Web/API/OffscreenCanvas) - Good for canvas-related processing\n * that can be rendered off screen. Only works when using [[Pipeline.Canvas2D]].\n *
\n *
\n * [HTMLCanvasElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement) - This is recommended on browsers\n * that doesn't support `OffscreenCanvas`, or if you need to render the frame on the screen. Only works when using [[Pipeline.Canvas2D]].\n *
\n *
\n * [HTMLVideoElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement) - Recommended when using [[Pipeline.WebGL2]] but\n * works for both [[Pipeline.Canvas2D]] and [[Pipeline.WebGL2]].\n *
\n * @param outputFrameBuffer - The output frame buffer to use to draw the processed frame.\n */\n async processFrame(\n inputFrameBuffer: OffscreenCanvas | HTMLCanvasElement | HTMLVideoElement,\n outputFrameBuffer: HTMLCanvasElement\n ): Promise {\n if (!this._tflite) {\n return;\n }\n if (!inputFrameBuffer || !outputFrameBuffer) {\n throw new Error('Missing input or output frame buffer');\n }\n this._benchmark.end('captureFrameDelay');\n this._benchmark.start('processFrameDelay');\n\n const { width: inferenceWidth, height: inferenceHeight } = this._inferenceDimensions;\n let inputFrame = inputFrameBuffer;\n let { width: captureWidth, height: captureHeight } = inputFrame;\n if ((inputFrame as HTMLVideoElement).videoWidth) {\n inputFrame = inputFrame as HTMLVideoElement;\n captureWidth = inputFrame.videoWidth;\n captureHeight = inputFrame.videoHeight;\n }\n if (this._outputCanvas !== outputFrameBuffer) {\n this._outputCanvas = outputFrameBuffer;\n this._outputContext = this._outputCanvas\n .getContext(this._pipeline === Pipeline.Canvas2D ? '2d' : 'webgl2') as\n CanvasRenderingContext2D | WebGL2RenderingContext;\n this._webgl2Pipeline?.cleanUp();\n this._webgl2Pipeline = null;\n }\n\n if (!this._webgl2Pipeline && this._pipeline === Pipeline.WebGL2) {\n this._createWebGL2Pipeline(inputFrame as HTMLVideoElement, captureWidth, captureHeight, inferenceWidth, inferenceHeight);\n }\n\n if (this._pipeline === Pipeline.WebGL2) {\n await this._webgl2Pipeline?.render();\n } else {\n // Only set the canvas' dimensions if they have changed to prevent unnecessary redraw\n let reInitDummyImage = false;\n if (this._inputCanvas.width !== inferenceWidth) {\n this._inputCanvas.width = inferenceWidth;\n this._maskCanvas.width = inferenceWidth;\n reInitDummyImage = true;\n }\n if (this._inputCanvas.height !== inferenceHeight) {\n this._inputCanvas.height = inferenceHeight;\n this._maskCanvas.height = inferenceHeight;\n reInitDummyImage = true;\n }\n if (reInitDummyImage) {\n this._dummyImageData = new ImageData(\n new Uint8ClampedArray(inferenceWidth * inferenceHeight * 4),\n inferenceWidth, inferenceHeight);\n }\n\n const personMask = await this._createPersonMask(inputFrame);\n const ctx = this._outputContext as CanvasRenderingContext2D;\n this._benchmark.start('imageCompositionDelay');\n this._maskContext.putImageData(personMask, 0, 0);\n ctx.save();\n ctx.filter = `blur(${this._maskBlurRadius}px)`;\n ctx.globalCompositeOperation = 'copy';\n ctx.drawImage(this._maskCanvas, 0, 0, captureWidth, captureHeight);\n ctx.filter = 'none';\n ctx.globalCompositeOperation = 'source-in';\n ctx.drawImage(inputFrame, 0, 0, captureWidth, captureHeight);\n ctx.globalCompositeOperation = 'destination-over';\n this._setBackground(inputFrame);\n ctx.restore();\n this._benchmark.end('imageCompositionDelay');\n }\n\n this._benchmark.end('processFrameDelay');\n this._benchmark.end('totalProcessingDelay');\n\n // NOTE (csantos): Start the benchmark from here so we can include the delay from the Video sdk\n // for a more accurate fps\n this._benchmark.start('totalProcessingDelay');\n this._benchmark.start('captureFrameDelay');\n }\n\n protected abstract _getWebGL2PipelineType(): WebGL2PipelineType;\n\n protected abstract _setBackground(inputFrame: OffscreenCanvas | HTMLCanvasElement | HTMLVideoElement): void;\n\n private _addMask(mask: Uint8ClampedArray | Uint8Array) {\n if (this._masks.length >= this._historyCount) {\n this._masks.splice(0, this._masks.length - this._historyCount + 1);\n }\n this._masks.push(mask);\n }\n\n private _applyAlpha(imageData: ImageData) {\n const weightedSum = this._masks.reduce((sum, mask, j) => sum + (j + 1) * (j + 1), 0);\n const pixels = imageData.height * imageData.width;\n for (let i = 0; i < pixels; i++) {\n const w = this._masks.reduce((sum, mask, j) => sum + mask[i] * (j + 1) * (j + 1), 0) / weightedSum;\n imageData.data[i * 4 + 3] = Math.round(w * 255);\n }\n }\n\n private async _createPersonMask(inputFrame: OffscreenCanvas | HTMLCanvasElement | HTMLVideoElement): Promise {\n let imageData = this._dummyImageData;\n const shouldRunInference = this._maskUsageCounter < 1;\n\n this._benchmark.start('inputImageResizeDelay');\n if (shouldRunInference) {\n imageData = this._getResizedInputImageData(inputFrame);\n }\n this._benchmark.end('inputImageResizeDelay');\n\n this._benchmark.start('segmentationDelay');\n if (shouldRunInference) {\n this._currentMask = this._runTwilioTfLiteInference(imageData);\n this._maskUsageCounter = this._debounceCount;\n }\n this._addMask(this._currentMask);\n this._applyAlpha(imageData);\n this._maskUsageCounter--;\n this._benchmark.end('segmentationDelay');\n\n return imageData;\n }\n\n private _createWebGL2Pipeline(\n inputFrame: HTMLVideoElement,\n captureWidth: number,\n captureHeight: number,\n inferenceWidth: number,\n inferenceHeight: number,\n ): void {\n this._webgl2Pipeline = buildWebGL2Pipeline(\n {\n htmlElement: inputFrame,\n width: captureWidth,\n height: captureHeight,\n },\n this._backgroundImage,\n { type: this._getWebGL2PipelineType() },\n { inputResolution: `${inferenceWidth}x${inferenceHeight}` },\n this._outputCanvas!,\n this._tflite,\n this._benchmark,\n this._debounce,\n );\n this._webgl2Pipeline.updatePostProcessingConfig({\n smoothSegmentationMask: true,\n jointBilateralFilter: {\n sigmaSpace: 10,\n sigmaColor: 0.12\n },\n coverage: [\n 0,\n 0.99\n ],\n lightWrapping: 0,\n blendMode: 'screen'\n });\n }\n\n private _getResizedInputImageData(inputFrame: OffscreenCanvas | HTMLCanvasElement | HTMLVideoElement): ImageData {\n const { width, height } = this._inputCanvas;\n this._inputContext.drawImage(inputFrame, 0, 0, width, height);\n const imageData = this._inputContext.getImageData(0, 0, width, height);\n return imageData;\n }\n\n private _loadJs(url: string): Promise {\n if (BackgroundProcessor._loadedScripts.includes(url)) {\n return Promise.resolve();\n }\n return new Promise((resolve, reject) => {\n const script = document.createElement('script');\n script.onload = () => {\n BackgroundProcessor._loadedScripts.push(url);\n resolve();\n };\n script.onerror = reject;\n document.head.append(script);\n script.src = url;\n });\n }\n\n private async _loadTwilioTfLite(): Promise {\n let tflite: any;\n await this._loadJs(this._assetsPath + TFLITE_SIMD_LOADER_NAME);\n\n try {\n tflite = await window.createTwilioTFLiteSIMDModule();\n this._isSimdEnabled = true;\n } catch {\n console.warn('SIMD not supported. You may experience poor quality of background replacement.');\n await this._loadJs(this._assetsPath + TFLITE_LOADER_NAME);\n tflite = await window.createTwilioTFLiteModule();\n this._isSimdEnabled = false;\n }\n return tflite;\n }\n\n private _runTwilioTfLiteInference(inputImage: ImageData): Uint8ClampedArray {\n const { _inferenceDimensions: { width, height }, _inputMemoryOffset: offset, _tflite: tflite } = this;\n const pixels = width * height;\n\n for (let i = 0; i < pixels; i++) {\n tflite.HEAPF32[offset + i * 3] = inputImage.data[i * 4] / 255;\n tflite.HEAPF32[offset + i * 3 + 1] = inputImage.data[i * 4 + 1] / 255;\n tflite.HEAPF32[offset + i * 3 + 2] = inputImage.data[i * 4 + 2] / 255;\n }\n\n tflite._runInference();\n const inferenceData = new Uint8ClampedArray(pixels * 4);\n\n for (let i = 0; i < pixels; i++) {\n const personProbability = tflite.HEAPF32[this._outputMemoryOffset + i];\n inferenceData[i] = Number(personProbability >= this._personProbabilityThreshold) * personProbability;\n }\n\n return inferenceData;\n }\n}\n","import { BackgroundProcessor, BackgroundProcessorOptions } from './BackgroundProcessor';\nimport { BLUR_FILTER_RADIUS } from '../../constants';\nimport { WebGL2PipelineType } from '../../types';\n\n/**\n * Options passed to [[GaussianBlurBackgroundProcessor]] constructor.\n */\nexport interface GaussianBlurBackgroundProcessorOptions extends BackgroundProcessorOptions {\n /**\n * The background blur filter radius to use in pixels.\n * @default\n * ```html\n * 15\n * ```\n */\n blurFilterRadius?: number;\n}\n\n/**\n * The GaussianBlurBackgroundProcessor, when added to a VideoTrack,\n * applies a gaussian blur filter on the background in each video frame\n * and leaves the foreground (person(s)) untouched. Each instance of\n * GaussianBlurBackgroundProcessor should be added to only one VideoTrack\n * at a time to prevent overlapping of image data from multiple VideoTracks.\n *\n * @example\n *\n * ```ts\n * import { createLocalVideoTrack } from 'twilio-video';\n * import { Pipeline, GaussianBlurBackgroundProcessor } from '@twilio/video-processors';\n *\n * const blurBackground = new GaussianBlurBackgroundProcessor({\n * assetsPath: 'https://my-server-path/assets',\n * pipeline: Pipeline.WebGL2,\n * debounce: true,\n * });\n *\n * blurBackground.loadModel().then(() => {\n * createLocalVideoTrack({\n * // Increasing the capture resolution decreases the output FPS\n * // especially on browsers that do not support SIMD\n * // such as desktop Safari and iOS browsers, or on Chrome\n * // with capture resolutions above 640x480 for webgl2.\n * width: 640,\n * height: 480,\n * // Any frame rate above 24 fps on desktop browsers increase CPU\n * // usage without noticeable increase in quality.\n * frameRate: 24\n * }).then(track => {\n * track.addProcessor(blurBackground, {\n * inputFrameBufferType: 'video',\n * outputFrameBufferContextType: 'webgl2',\n * });\n * });\n * });\n * ```\n */\nexport class GaussianBlurBackgroundProcessor extends BackgroundProcessor {\n\n private _blurFilterRadius: number = BLUR_FILTER_RADIUS;\n // tslint:disable-next-line no-unused-variable\n private readonly _name: string = 'GaussianBlurBackgroundProcessor';\n\n /**\n * Construct a GaussianBlurBackgroundProcessor. Default values will be used for\n * any missing properties in [[GaussianBlurBackgroundProcessorOptions]], and\n * invalid properties will be ignored.\n */\n constructor(options: GaussianBlurBackgroundProcessorOptions) {\n super(options);\n this.blurFilterRadius = options.blurFilterRadius!;\n }\n\n /**\n * The current background blur filter radius in pixels.\n */\n get blurFilterRadius(): number {\n return this._blurFilterRadius;\n }\n\n /**\n * Set a new background blur filter radius in pixels.\n */\n set blurFilterRadius(radius: number) {\n if (!radius) {\n console.warn(`Valid blur filter radius not found. Using ${BLUR_FILTER_RADIUS} as default.`);\n radius = BLUR_FILTER_RADIUS;\n }\n this._blurFilterRadius = radius;\n }\n\n protected _getWebGL2PipelineType(): WebGL2PipelineType {\n return WebGL2PipelineType.Blur;\n }\n\n protected _setBackground(inputFrame: OffscreenCanvas | HTMLCanvasElement | HTMLVideoElement): void {\n if (!this._outputContext) {\n return;\n }\n const ctx = this._outputContext as CanvasRenderingContext2D;\n ctx.filter = `blur(${this._blurFilterRadius}px)`;\n ctx.drawImage(inputFrame, 0, 0);\n }\n}\n","import { BackgroundProcessor, BackgroundProcessorOptions } from './BackgroundProcessor';\nimport { ImageFit, WebGL2PipelineType } from '../../types';\n\n/**\n * Options passed to [[VirtualBackgroundProcessor]] constructor.\n */\nexport interface VirtualBackgroundProcessorOptions extends BackgroundProcessorOptions {\n /**\n * The HTMLImageElement to use for background replacement.\n * An error will be raised if the image hasn't been fully loaded yet. Additionally, the image must follow\n * [security guidelines](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image)\n * when loading the image from a different origin. Failing to do so will result to an empty output frame.\n */\n backgroundImage: HTMLImageElement;\n\n /**\n * The [[ImageFit]] to use for positioning of the background image in the viewport. Only the Canvas2D [[Pipeline]]\n * supports this option. WebGL2 ignores this option and falls back to Cover.\n * @default\n * ```html\n * 'Fill'\n * ```\n */\n fitType?: ImageFit;\n}\n\n/**\n * The VirtualBackgroundProcessor, when added to a VideoTrack,\n * replaces the background in each video frame with a given image,\n * and leaves the foreground (person(s)) untouched. Each instance of\n * VirtualBackgroundProcessor should be added to only one VideoTrack\n * at a time to prevent overlapping of image data from multiple VideoTracks.\n *\n * @example\n *\n * ```ts\n * import { createLocalVideoTrack } from 'twilio-video';\n * import { Pipeline, VirtualBackgroundProcessor } from '@twilio/video-processors';\n *\n * let virtualBackground;\n * const img = new Image();\n *\n * img.onload = () => {\n * virtualBackground = new VirtualBackgroundProcessor({\n * assetsPath: 'https://my-server-path/assets',\n * backgroundImage: img,\n * pipeline: Pipeline.WebGL2,\n *\n * // Desktop Safari and iOS browsers do not support SIMD.\n * // Set debounce to true to achieve an acceptable performance.\n * debounce: isSafari(),\n * });\n *\n * virtualBackground.loadModel().then(() => {\n * createLocalVideoTrack({\n * // Increasing the capture resolution decreases the output FPS\n * // especially on browsers that do not support SIMD\n * // such as desktop Safari and iOS browsers, or on Chrome\n * // with capture resolutions above 640x480 for webgl2.\n * width: 640,\n * height: 480,\n * // Any frame rate above 24 fps on desktop browsers increase CPU\n * // usage without noticeable increase in quality.\n * frameRate: 24\n * }).then(track => {\n * track.addProcessor(virtualBackground, {\n * inputFrameBufferType: 'video',\n * outputFrameBufferContextType: 'webgl2',\n * });\n * });\n * });\n * };\n * img.src = '/background.jpg';\n * ```\n */\nexport class VirtualBackgroundProcessor extends BackgroundProcessor {\n\n private _fitType!: ImageFit;\n // tslint:disable-next-line no-unused-variable\n private readonly _name: string = 'VirtualBackgroundProcessor';\n\n /**\n * Construct a VirtualBackgroundProcessor. Default values will be used for\n * any missing optional properties in [[VirtualBackgroundProcessorOptions]],\n * and invalid properties will be ignored.\n */\n constructor(options: VirtualBackgroundProcessorOptions) {\n super(options);\n this.backgroundImage = options.backgroundImage;\n this.fitType = options.fitType!;\n }\n\n /**\n * The HTMLImageElement representing the current background image.\n */\n get backgroundImage(): HTMLImageElement {\n return this._backgroundImage!;\n }\n\n /**\n * Set an HTMLImageElement as the new background image.\n * An error will be raised if the image hasn't been fully loaded yet. Additionally, the image must follow\n * [security guidelines](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image)\n * when loading the image from a different origin. Failing to do so will result to an empty output frame.\n */\n set backgroundImage(image: HTMLImageElement) {\n if (!image || !image.complete || !image.naturalHeight) {\n throw new Error('Invalid image. Make sure that the image is an HTMLImageElement and has been successfully loaded');\n }\n this._backgroundImage = image;\n\n // Triggers recreation of the pipeline in the next processFrame call\n this._webgl2Pipeline?.cleanUp();\n this._webgl2Pipeline = null;\n }\n\n /**\n * The current [[ImageFit]] for positioning of the background image in the viewport.\n */\n get fitType(): ImageFit {\n return this._fitType;\n }\n\n /**\n * Set a new [[ImageFit]] to be used for positioning the background image in the viewport.\n */\n set fitType(fitType: ImageFit) {\n const validTypes = Object.keys(ImageFit);\n if (!validTypes.includes(fitType as any)) {\n console.warn(`Valid fitType not found. Using '${ImageFit.Fill}' as default.`);\n fitType = ImageFit.Fill;\n }\n this._fitType = fitType;\n }\n\n protected _getWebGL2PipelineType(): WebGL2PipelineType {\n return WebGL2PipelineType.Image;\n }\n\n protected _setBackground(): void {\n if (!this._outputContext || !this._outputCanvas) {\n return;\n }\n const img = this._backgroundImage!;\n const imageWidth = img.naturalWidth;\n const imageHeight = img.naturalHeight;\n const canvasWidth = this._outputCanvas.width;\n const canvasHeight = this._outputCanvas.height;\n const ctx = this._outputContext as CanvasRenderingContext2D;\n\n if (this._fitType === ImageFit.Fill) {\n ctx.drawImage(img, 0, 0, imageWidth, imageHeight, 0, 0, canvasWidth, canvasHeight);\n } else if (this._fitType === ImageFit.None) {\n ctx.drawImage(img, 0, 0, imageWidth, imageHeight);\n } else if (this._fitType === ImageFit.Contain) {\n const { x, y, w, h } = this._getFitPosition(imageWidth, imageHeight, canvasWidth, canvasHeight, ImageFit.Contain);\n ctx.drawImage(img, 0, 0, imageWidth, imageHeight, x, y, w, h);\n } else if (this._fitType === ImageFit.Cover) {\n const { x, y, w, h } = this._getFitPosition(imageWidth, imageHeight, canvasWidth, canvasHeight, ImageFit.Cover);\n ctx.drawImage(img, 0, 0, imageWidth, imageHeight, x, y, w, h);\n }\n }\n\n private _getFitPosition(contentWidth: number, contentHeight: number,\n viewportWidth: number, viewportHeight: number, type: ImageFit)\n : { h: number, w: number, x: number, y: number } {\n\n // Calculate new content width to fit viewport width\n let factor = viewportWidth / contentWidth;\n let newContentWidth = viewportWidth;\n let newContentHeight = factor * contentHeight;\n\n // Scale down the resulting height and width more\n // to fit viewport height if the content still exceeds it\n if ((type === ImageFit.Contain && newContentHeight > viewportHeight)\n || (type === ImageFit.Cover && viewportHeight > newContentHeight)) {\n factor = viewportHeight / newContentHeight;\n newContentWidth = factor * newContentWidth;\n newContentHeight = viewportHeight;\n }\n\n // Calculate the destination top left corner to center the content\n const x = (viewportWidth - newContentWidth) / 2;\n const y = (viewportHeight - newContentHeight) / 2;\n\n return {\n x, y,\n w: newContentWidth,\n h: newContentHeight,\n };\n }\n}\n","/**\n * @private\n */\nfunction getCanvas() {\n return typeof window.OffscreenCanvas !== 'undefined' ? new window.OffscreenCanvas(1, 1) : document.createElement('canvas');\n}\n\n/**\n * @private\n */\nexport function isBrowserSupported() {\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n return !!(getCanvas().getContext('2d') || getCanvas().getContext('webgl2'));\n } else {\n return false;\n }\n}\n\n/**\n * Check if the current browser is officially supported by twilio-video-procesors.js.\n * This is set to `true` for browsers that supports canvas\n * [2D](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D) or\n * [webgl2](https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext)\n * rendering context.\n * @example\n * ```ts\n * import { isSupported } from '@twilio/video-processors';\n *\n * if (isSupported) {\n * // Initialize the background processors\n * }\n * ```\n */\nexport const isSupported = isBrowserSupported();\n","/**\n * @copyright Copyright 2020-2021 Epic Systems Corporation\n * @file Standard settings for connecting to Twilio\n * @author Matt Panico\n * @module Epic.VideoApp.WebCore.Vendor.Twilio.TwilioSettings\n */\n\nimport { ImageFit, Pipeline } from \"@twilio/video-processors\";\nimport {\n\tBandwidthProfileOptions,\n\tConnectOptions,\n\tCreateLocalTrackOptions,\n\tLocalDataTrack,\n\tLocalTrack,\n\tVideoBandwidthProfileOptions,\n} from \"twilio-video\";\nimport { LocalDataTrackOptions } from \"twilio-video/tsdef/LocalDataTrackOptions\";\nimport { DebuggingLogLevel } from \"~/state/room\";\nimport { ICallRoomInfo } from \"~/types\";\nimport { isSafari } from \"~/utils/browser\";\nimport { makeResourceLink } from \"~/utils/general\";\nimport { iOSDetectedAtVersion, isMobile } from \"~/utils/os\";\n\nconst idealFramerate = { ideal: 24 };\n\n/** 480p standard (4:3) - use values that are divisible by 16 */\nconst mobileResolutionVideoSize: CreateLocalTrackOptions = {\n\twidth: { ideal: 640 },\n\theight: { ideal: 480 },\n\tframeRate: idealFramerate,\n};\n\n/** 480p wide (16:9) - use values that are divisible by 16 */\nconst lowResolutionVideoSize: CreateLocalTrackOptions = {\n\twidth: { ideal: 848 },\n\theight: { ideal: 480 },\n\tframeRate: idealFramerate,\n};\n\n/** 720p wide - use values that are divisible by 16 */\nconst traditionalResolutionVideoSize: CreateLocalTrackOptions = {\n\twidth: { ideal: 1280 },\n\theight: { ideal: 720 },\n\tframeRate: idealFramerate,\n};\n\n/**\n * Get the video track creation options\n *\n * @param lowBandwidth - Whether the current visit or user is configured to use lower bandwidth video\n * @param overrideOptions option overrides\n */\nexport function getVideoTrackOptions(\n\tuseLowBandwidth: boolean,\n\toverrideOptions?: CreateLocalTrackOptions,\n): CreateLocalTrackOptions {\n\tconst videoSize: CreateLocalTrackOptions = getVideoSize(isMobile(), useLowBandwidth);\n\treturn {\n\t\t...videoSize,\n\t\tname: `camera-${Date.now()}`,\n\t\t...overrideOptions,\n\t};\n}\n\n/**\n * Helper function to resolve which set of track dimensions we should publish at\n *\n * @param mobile - Whether the local user is on a mobile device\n * @param lowBandwidth - Whether the current visit or user is configured to use lower bandwidth video\n * @returns The corresponding video size based upon inputs\n */\nfunction getVideoSize(mobile: boolean, lowBandwidth: boolean): CreateLocalTrackOptions {\n\t// Ignore low bandwidth configuration on a mobile device\n\tif (mobile) {\n\t\treturn mobileResolutionVideoSize;\n\t} else if (lowBandwidth) {\n\t\treturn lowResolutionVideoSize;\n\t} else {\n\t\treturn traditionalResolutionVideoSize;\n\t}\n}\n\n/**\n * Get default audio track options\n * @param overrideOptions option overrides\n */\nexport function standardAudioTrackOptions(\n\toverrideOptions?: CreateLocalTrackOptions,\n): CreateLocalTrackOptions {\n\treturn {\n\t\tautoGainControl: { ideal: true },\n\t\tnoiseSuppression: { ideal: true },\n\t\tworkaroundWebKitBug180748: isSafari() && !iOSDetectedAtVersion(\"14+\"), // in older versions of Safari, getUserMedia returns a silent audio MediaStreamTrack (WebKit Bug 180748)\n\t\techoCancellation: { ideal: true },\n\t\t...overrideOptions,\n\t};\n}\n\n/**\n * Get default data track options\n */\nfunction standardDataTrackOptions(): LocalDataTrackOptions {\n\t// From twilio docs\n\t// localDataTrack.reliable - This is true if both maxPacketLifeTime and maxRetransmits are set to null.\n\t// In other words, if this is true, there is no bound on packet lifetime or the number of times the LocalDataTrack will attempt to send data, ensuring \"reliable\" transmission.\n\t// Early one we should focus on ensuring reliable transport\n\treturn { maxPacketLifeTime: null, maxRetransmits: null, ordered: true, logLevel: \"warn\" };\n}\n\n/**\n * Get default connection options\n * @param roomInfo Details on the room to be joined\n * @param tracks User's video and audio tracks from the hardware test\n * @param debuggingLogLevel - Determines which level of Twilio logging this user will log to CosmosDB\n * @param lowBandwidth - Whether the current visit or user is configured to use lower bandwidth video\n * @param beginWaiting - Whether or not the user will join the room in a waiting state (no track publications or subscriptions)\n */\nexport function getConnectionOptions(\n\troomInfo: ICallRoomInfo,\n\ttracks: LocalTrack[],\n\tdebuggingLogLevel: DebuggingLogLevel,\n\tlowBandwidthMode: boolean,\n\tbeginWaiting: boolean,\n): ConnectOptions {\n\tconst dataTrack = new LocalDataTrack(standardDataTrackOptions());\n\tconst localTracks = beginWaiting ? [dataTrack] : [...tracks, dataTrack];\n\tconst connectionOptions: ConnectOptions = {\n\t\tautomaticSubscription: !beginWaiting,\n\t\tname: roomInfo.roomID,\n\t\tbandwidthProfile: getBandwidthProfile(lowBandwidthMode),\n\t\t// save bandwidth when audio is human speech\n\t\tmaxAudioBitrate: 16000,\n\t\tdominantSpeaker: true,\n\t\tpreferredVideoCodecs: \"auto\",\n\t\t// these are the defaults- easier to test alternatives when they are present\n\t\tpreferredAudioCodecs: [{ codec: \"opus\", dtx: true }],\n\t\ttracks: localTracks,\n\t\tnetworkQuality: {\n\t\t\tlocal: debuggingLogLevel === DebuggingLogLevel.verbose ? 3 : 1,\n\t\t\tremote: debuggingLogLevel === DebuggingLogLevel.verbose ? 3 : 1,\n\t\t},\n\t};\n\n\tif (roomInfo.regionID) {\n\t\tconnectionOptions.region = roomInfo.regionID;\n\t}\n\n\treturn connectionOptions;\n}\n\n/**\n * Get default bandwidth profile options\n */\nfunction getBandwidthProfile(lowBandwidthMode: boolean): BandwidthProfileOptions {\n\tconst videoBandwidthProfileOptions: VideoBandwidthProfileOptions = {\n\t\tmode: \"collaboration\",\n\t\tclientTrackSwitchOffControl: \"auto\",\n\t\tcontentPreferencesMode: \"auto\",\n\t\tdominantSpeakerPriority: \"standard\",\n\t\ttrackSwitchOffMode: \"detected\",\n\t};\n\n\tif (isMobile()) {\n\t\tvideoBandwidthProfileOptions.maxSubscriptionBitrate = 2500000;\n\t} else if (lowBandwidthMode) {\n\t\tvideoBandwidthProfileOptions.maxSubscriptionBitrate = 1500000;\n\t}\n\n\treturn { video: videoBandwidthProfileOptions };\n}\n\nconst PROCESSOR_ASSET_PATH = makeResourceLink(\"Processor\", \"\");\n\n/**\n * Default options for all processors, including shared settings for blur and image processors\n */\nexport const defaultProcessorOptions = {\n\tassetsPath: PROCESSOR_ASSET_PATH,\n\tmaskBlurRadius: 5,\n\tpipeline: Pipeline.Canvas2D,\n};\n\n/**\n * Gaussian blur specific processor options\n */\nexport const defaultGaussianOptions = {\n\tblurFilterRadius: 20,\n\t...defaultProcessorOptions,\n};\n\n/**\n * Image-specific processor options. Note that these options do not specify the image resource to load\n */\nexport const defaultImageOptions = {\n\tfitType: ImageFit.Fill,\n\t...defaultProcessorOptions,\n};\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Interface for local twilio media.\n * @author Will Cooper\n * @module Epic.VideoApp.WebCore.Vendor.Twilio.Implementations.TwilioLocalStream\n */\n\nimport { BackgroundProcessor } from \"@twilio/video-processors/es5/processors/background/BackgroundProcessor\";\nimport {\n\tCreateLocalTrackOptions,\n\tLocalAudioTrack,\n\tLocalTrack,\n\tLocalVideoTrack,\n\tVideoTrack,\n\tcreateLocalAudioTrack,\n\tcreateLocalVideoTrack,\n} from \"twilio-video\";\nimport { IDeviceInitialization } from \"~/state/hardwareTest\";\nimport { IDevice } from \"~/state/localTracks\";\nimport { IDimensions } from \"~/types\";\nimport { captureImage } from \"~/utils/imageCapture\";\nimport { EVCEmitter, IEVCStreamEventMap } from \"~/web-core/events\";\nimport { DeviceKind, ISwitchDeviceResponse } from \"~/web-core/types\";\nimport { ILocalStream } from \"../../../interfaces/localStream\";\nimport { getVideoTrackOptions, standardAudioTrackOptions } from \"../twilioSettings\";\n\nexport class TwilioLocalStream extends EVCEmitter implements ILocalStream {\n\tlocalVideoTrack?: LocalVideoTrack;\n\tlocalAudioTrack?: LocalAudioTrack;\n\tdeviceInitializationError?: IDeviceInitialization;\n\treadonly isLocal: true = true;\n\n\tconstructor(tracks: LocalTrack[]) {\n\t\tsuper();\n\t\tconst videoTrack = tracks.find((track) => track.kind === \"video\");\n\t\tconst audioTrack = tracks.find((track) => track.kind === \"audio\");\n\n\t\tthis.localVideoTrack = videoTrack as LocalVideoTrack;\n\t\tthis.localAudioTrack = audioTrack as LocalAudioTrack;\n\n\t\tthis.constructEmitterInterface();\n\t\tthis.constructAudioEmitterInterface();\n\t}\n\n\t// Not used in Twilio\n\tattachAudio(_element: HTMLAudioElement): HTMLAudioElement | null {\n\t\treturn null;\n\t}\n\n\t// Not used in Twilio\n\tdetachAudio(_element: HTMLAudioElement): HTMLAudioElement | null {\n\t\treturn null;\n\t}\n\n\tisEnabled(kind: DeviceKind): boolean {\n\t\tif (kind === \"video\") {\n\t\t\treturn this.localVideoTrack?.isEnabled ?? false;\n\t\t}\n\n\t\tif (kind === \"audio\") {\n\t\t\tif (this.localAudioTrack?.isStopped) {\n\t\t\t\treturn false;\n\t\t\t} else {\n\t\t\t\treturn this.localAudioTrack?.isEnabled ?? false;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tgetVideoDimensions(): IDimensions | undefined {\n\t\tconst dim = this.localVideoTrack?.dimensions;\n\n\t\tif (dim && dim.height && dim.width) {\n\t\t\treturn { width: dim.width, height: dim.height };\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\thasAudio(): boolean {\n\t\treturn this.localAudioTrack !== undefined;\n\t}\n\n\tasync captureImage(): Promise {\n\t\tif (this.localVideoTrack) {\n\t\t\treturn captureImage(this.localVideoTrack.mediaStreamTrack);\n\t\t}\n\n\t\treturn null;\n\t}\n\n\trenderVideo(element: HTMLVideoElement): HTMLVideoElement {\n\t\treturn this.localVideoTrack?.attach(element) as HTMLVideoElement;\n\t}\n\n\tcleanupVideo(element: HTMLVideoElement): HTMLVideoElement {\n\t\treturn this.localVideoTrack?.detach(element) as HTMLVideoElement;\n\t}\n\n\tgetDeviceInfo(kind: DeviceKind): IDevice {\n\t\tconst deviceKind = kind === \"audio\" ? \"audioinput\" : \"videoinput\";\n\t\tif (kind === \"audio\") {\n\t\t\treturn {\n\t\t\t\tdeviceId: this.localAudioTrack?.mediaStreamTrack.getSettings().deviceId ?? null,\n\t\t\t\tlabel: this.localAudioTrack?.mediaStreamTrack.label ?? null,\n\t\t\t\tkind: deviceKind,\n\t\t\t};\n\t\t}\n\t\tif (kind === \"video\") {\n\t\t\treturn {\n\t\t\t\tdeviceId: this.localVideoTrack?.mediaStreamTrack.getSettings().deviceId ?? null,\n\t\t\t\tlabel: this.localVideoTrack?.mediaStreamTrack.label ?? null,\n\t\t\t\tkind: deviceKind,\n\t\t\t};\n\t\t}\n\t\treturn { deviceId: null, label: null, kind: null };\n\t}\n\n\tasync switchVideoDeviceAsync(\n\t\tdevice: MediaDeviceInfo,\n\t\tuseLowBandwidth?: boolean,\n\t\tconstraints?: MediaTrackConstraintSet,\n\t): Promise {\n\t\t// we need to detach the video source from any
\n\t\t);\n\t}\n\n\treturn (\n\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t{children}\n\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t\t\n\t\t\t\t
\n\t\t\t\t\t{statusMessage ?? statusMsgFallback.current}\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t);\n};\n\nDeviceSetupRow.displayName = \"DeviceSetupRow\";\n\nexport default DeviceSetupRow;\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file Camera row for the hardware test page\n * @author Colin Walters\n * @module Epic.VideoApp.Components.HardwareSetup.Devices.CameraSetup\n */\n\nimport React, { FC, useContext } from \"react\";\nimport { useStrings } from \"~/hooks\";\nimport Camera from \"~/icons/camera\";\nimport { useHardwareTestState } from \"~/state\";\nimport { DisplayContext } from \"~/types\";\nimport { HardwareSetupDisplayContext } from \"../HardwareSetup\";\nimport { useCameraDeviceMessage } from \"../hooks/useCameraDeviceMessage\";\nimport CameraSelector from \"./CameraSelector\";\nimport DeviceSetupRow from \"./DeviceSetupRow\";\n\nenum TokenNames {\n\tcamera = \"Camera\",\n}\n\nexport enum CameraSetupTestIds {\n\tself = \"CameraSetup\",\n}\n\n/**\n * The CameraSetup component\n */\nconst CameraSetup: FC = () => {\n\tconst displayContext = useContext(HardwareSetupDisplayContext);\n\tconst status = useHardwareTestState(\n\t\t(selectors) => selectors.getCameraStatus(displayContext === DisplayContext.lobby),\n\t\t[],\n\t);\n\n\tconst message = useCameraDeviceMessage();\n\n\tconst strings = useStrings(\"CameraSetup\", Object.values(TokenNames));\n\n\treturn (\n\t\t\n\t);\n};\n\nCameraSetup.displayName = \"CameraSetup\";\n\nexport default CameraSetup;\n","/**\n * @copyright Copyright 2021-2024 Epic Systems Corporation\n * @file hook to determine the volume level of a stream\n * @author Tara Feldstein\n * @module Epic.VideoApp.Hooks.UseVolumeLevels\n */\n\nimport { useCallback, useContext, useEffect, useRef, useState } from \"react\";\nimport { DeviceContext } from \"~/components/VideoCall/DeviceContext\";\nimport { useLocalTrackState } from \"~/state\";\nimport { isIOS } from \"~/utils/os\";\nimport { IStream } from \"~/web-core/interfaces\";\n\n/**\n * Whenever we create a new source node, we store it in this interface\n * so we can clean up cloned media streams when required\n */\ninterface ICloneableSourceNode {\n\tisCloned: boolean;\n\tsourceNode: MediaStreamAudioSourceNode;\n}\n\n/**\n * Create a potentially cloned ICloneableSourceNode from a MediaStreamTrack, cloning the track if it is local\n * @param context AudioContext in which to create the node\n * @param track MediaStreamTrack used as the source for the MediaStreamAudioSourceNode\n * @param isLocalTrack boolean to indicate whether the track should be cloned first (true) or not (false)\n * @returns a MediaStreamAudioSourceNode\n */\nfunction createSourceNode(\n\tcontext: AudioContext,\n\ttrack: MediaStreamTrack,\n\tisLocalTrack: boolean,\n): ICloneableSourceNode {\n\tif (isLocalTrack) {\n\t\t// A clone is created to allow multiple instances of this component for a single AudioTrack on iOS Safari.\n\t\t// It is stored in the returned ref so that the cloned track can be stopped.\n\t\t// We should stop the clone whenever the audio analyzer is torn down or reinitialized see isolateNodes().\n\t\treturn {\n\t\t\tisCloned: true,\n\t\t\tsourceNode: context.createMediaStreamSource(new MediaStream([track.clone()])),\n\t\t};\n\t}\n\t// RemoteAudioTracks: no need to clone https://bugs.chromium.org/p/chromium/issues/detail?id=1338973#c11\n\treturn { isCloned: false, sourceNode: context.createMediaStreamSource(new MediaStream([track])) };\n}\n/**\n * Create an AnalyserNode from a MediaStreamAudioSourceNode\n * @param context AudioContext in which to create the node\n * @returns an AnalyserNode\n */\nfunction createAnalyserNode(context: AudioContext | null): AnalyserNode | null {\n\tif (!context) {\n\t\treturn null;\n\t}\n\tconst analyser = context.createAnalyser();\n\tanalyser.fftSize = fftSize;\n\tanalyser.maxDecibels = -10;\n\tanalyser.minDecibels = -110;\n\tanalyser.smoothingTimeConstant = 0.25;\n\n\treturn analyser;\n}\n\n// AudioAnalyser param; smaller size => less precision but smaller Uint8Array to process\nconst fftSize = 256;\n\n/** Output Interface */\ninterface IVolumeLevelData {\n\tvolumeLevel: number;\n\tisTrackEnabled: boolean;\n}\n\n/**\n * Get the volume level, enabled state, and flags indicating whether we've recently (or ever) detected audio\n * @param stream Stream object to get the volume level of\n * @returns IVolumeLevelData:\n * \t\t{ volumeLevel isTrackEnabled }\n */\nexport function useVolumeLevels(stream?: IStream): IVolumeLevelData {\n\tconst [volumeLevel, setVolumeLevel] = useState(0);\n\tconst isLocalTrackRef = useRef(stream ? \"toggleState\" in stream : false);\n\tconst mediaStreamTrack = stream?.getMediaStreamTrack(\"audio\");\n\n\tconst { audioContext } = useContext(DeviceContext);\n\tconst audioContextRunning = useLocalTrackState((sel) => sel.getIsAudioContextRunning(), []);\n\n\tconst isTrackEnabled = mediaStreamTrack?.enabled ?? false;\n\n\tconst sourceNodeRef = useRef(null);\n\tconst analyserNodeRef = useRef(null);\n\tconst sampleArrayRef = useRef(new Uint8Array(fftSize / 2));\n\tconst frameRef = useRef();\n\n\tuseEffect(() => {\n\t\t// Keep an active reference for whether the current track is local or not\n\t\tisLocalTrackRef.current = stream?.isLocal ?? false;\n\t}, [stream]);\n\n\t/**\n\t *\tDisconnect and dereference analyserNodeRef.current to avoid wasting CPU cycles.\n\t *\tAlso cleans up the sourceNodeRef of any cloned MediaStreamTracks\n\t */\n\tconst isolateNodes = (): void => {\n\t\tif (sourceNodeRef.current) {\n\t\t\tsourceNodeRef.current.sourceNode.disconnect();\n\t\t\t// Clean-up any tracks on a sourceNode that were cloned.\n\t\t\t// This ensures we don't leak any tracks when switching which participant is being monitored\n\t\t\t// Or when the audio analyzer is torn down (on disconnect, on stream share end, etc.)\n\t\t\tif (sourceNodeRef.current.isCloned) {\n\t\t\t\tconst mediaStream = sourceNodeRef.current.sourceNode.mediaStream;\n\t\t\t\tmediaStream.getAudioTracks().forEach((track) => {\n\t\t\t\t\ttrack.stop();\n\t\t\t\t\tmediaStream.removeTrack(track);\n\t\t\t\t});\n\t\t\t\tsourceNodeRef.current = null;\n\t\t\t} else if (!isLocalTrackRef.current) {\n\t\t\t\t// Remote audio analyser source nodes can be removed without stopping the track\n\t\t\t\t// Stopping a remote audio track (that isn't closed) will cause audio to stop being played for the remote participant\n\t\t\t\tsourceNodeRef.current = null;\n\t\t\t}\n\t\t}\n\n\t\t// For Local or Remote, disconnect & dereference the analyserNode\n\t\tif (analyserNodeRef.current) {\n\t\t\tanalyserNodeRef.current.disconnect();\n\t\t\tanalyserNodeRef.current = null;\n\t\t}\n\t};\n\n\t/**\tCalculate volume for recent period. Update state / refs on new volumeLevel\n\t \tCalculation algorithm \"inspired by\" Twilio's reference app */\n\tconst calculateVolume = useCallback(() => {\n\t\tif (!isTrackEnabled) {\n\t\t\tsetVolumeLevel(0);\n\t\t\treturn;\n\t\t}\n\t\tif (!analyserNodeRef.current || document.hidden) {\n\t\t\treturn;\n\t\t}\n\n\t\tanalyserNodeRef.current.getByteFrequencyData(sampleArrayRef.current);\n\t\tlet values = 0;\n\t\tconst length = sampleArrayRef.current.length;\n\n\t\tfor (let i = 0; i < length; i++) {\n\t\t\tvalues += sampleArrayRef.current[i];\n\t\t}\n\n\t\tconst volume = Math.min(10, Math.max(0, Math.log10(values / length / 3) * 7));\n\n\t\tframeRef.current = window.requestAnimationFrame(() => {\n\t\t\tsetVolumeLevel(volume);\n\t\t});\n\t}, [isTrackEnabled]);\n\n\t/**\tInflate audio nodes and/or set up the MediaStream source */\n\tconst initializeRefs = useCallback((): void => {\n\t\tif (!mediaStreamTrack || !audioContext || !audioContextRunning || audioContext.state === \"closed\") {\n\t\t\treturn;\n\t\t}\n\n\t\tif (sourceNodeRef.current) {\n\t\t\t// unplug any existing nodes referencing a media stream to prevent orphaned references\n\t\t\tisolateNodes();\n\t\t}\n\t\t//Initialize the source node & analyser node\n\t\tsourceNodeRef.current = createSourceNode(audioContext, mediaStreamTrack, isLocalTrackRef.current);\n\n\t\tanalyserNodeRef.current = createAnalyserNode(audioContext);\n\t\tsourceNodeRef.current?.sourceNode.connect(analyserNodeRef.current as AnalyserNode);\n\t}, [mediaStreamTrack, audioContext, audioContextRunning]);\n\n\t/** Handle AudioContext closing: whenever we create a new AudioContext we need to re-create all nodes\n\t * throughout the app from the new context. So we teardown the old nodes on the closed state change\n\t */\n\tuseEffect(() => {\n\t\tif (!audioContextRunning && (!audioContext || audioContext.state === \"closed\")) {\n\t\t\tisolateNodes();\n\t\t}\n\t}, [audioContext, audioContextRunning]);\n\n\t/** Handle source audioTrack 'stopped' event */\n\tuseEffect(() => {\n\t\t/** Listen for the \"stopped\" event on the audioTrack (LocalAudioTrack only). When the audioTrack is stopped,\n\t\t * we should stop the cloned track that feeds the sourceNodeRef. It is important that we stop all tracks\n\t\t * when they aren't in use. Browsers like Firefox don't let you create a stream from a new audio device\n\t\t * while the active audio device still has active tracks. We can only stop the clones when the source stops (due\n\t\t * to https://bugs.chromium.org/p/chromium/issues/detail?id=1338973) so leave the listener attached until then.\n\t\t */\n\t\tif (isLocalTrackRef.current) {\n\t\t\tconst handleStopped = (): void => {\n\t\t\t\tisolateNodes();\n\t\t\t};\n\n\t\t\tmediaStreamTrack?.addEventListener(\"stopped\", handleStopped);\n\n\t\t\treturn () => {\n\t\t\t\tisolateNodes();\n\t\t\t\tmediaStreamTrack?.removeEventListener(\"stopped\", handleStopped);\n\t\t\t};\n\t\t}\n\t}, [mediaStreamTrack]);\n\n\t/** Set up & tear down animation */\n\tuseEffect(() => {\n\t\tif (mediaStreamTrack && isTrackEnabled) {\n\t\t\tinitializeRefs();\n\n\t\t\t// reinitialize the MediaStream and AnalyserNode on focus to avoid an issue in Safari where\n\t\t\t// analysers stop functioning when the user switches to a new tab and switches back to the app\n\t\t\tif (isIOS()) {\n\t\t\t\twindow.addEventListener(\"focus\", initializeRefs);\n\t\t\t}\n\t\t\tconst handle = window.setInterval(calculateVolume, 125);\n\t\t\treturn () => {\n\t\t\t\twindow.clearInterval(handle);\n\t\t\t\tif (frameRef.current) {\n\t\t\t\t\twindow.cancelAnimationFrame(frameRef.current);\n\t\t\t\t}\n\t\t\t\tif (isIOS()) {\n\t\t\t\t\twindow.removeEventListener(\"focus\", initializeRefs);\n\t\t\t\t}\n\t\t\t\tisolateNodes();\n\t\t\t\tsetVolumeLevel(0);\n\t\t\t};\n\t\t} else {\n\t\t\tisolateNodes();\n\t\t\tsetVolumeLevel(0);\n\t\t}\n\t}, [mediaStreamTrack, isTrackEnabled, initializeRefs, calculateVolume]);\n\n\t/** Add proper teardown effect */\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tisolateNodes();\n\t\t\tif (frameRef.current) {\n\t\t\t\twindow.cancelAnimationFrame(frameRef.current);\n\t\t\t}\n\t\t};\n\t}, []);\n\n\treturn { volumeLevel, isTrackEnabled };\n}\n","/**\n * @copyright Copyright 2023 Epic Systems Corporation\n * @file hook to get audio device message\n * @author Max Harkins\n * @module Epic.VideoApp.Components.HardwareSetup.Hooks.UseAudioDeviceMessage\n */\n\nimport { useContext, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useHardwareTestActions, useMicrophoneDevices, useStrings } from \"~/hooks\";\nimport { useVolumeLevels } from \"~/hooks/useVolumeLevels\";\nimport { useHardwareTestState, useLocalTrackState } from \"~/state\";\nimport { DeviceStatus, DeviceStatusSubtype, DisplayContext, Timeout } from \"~/types\";\nimport { VideoSessionContext } from \"~/web-core/components/VideoSessionProvider\";\nimport { useIsStreamEnabled } from \"~/web-core/hooks/useIsStreamEnabled\";\nimport { HardwareSetupDisplayContext } from \"../HardwareSetup\";\n\n/** Local Constants */\nconst VOLUME_LEVEL_DETECTION_THRESHOLD = 1; // 1/10 volume\nconst VOLUME_DETECTION_RECENT_TIMEOUT = 5000; // 5 seconds\n\n/**\n * Hook used to get an audio device message.\n * @returns a string describing the state of the audio device\n */\nexport function useAudioDeviceMessage(): string {\n\tconst displayContext = useContext(HardwareSetupDisplayContext);\n\tconst { localDeviceStream } = useContext(VideoSessionContext);\n\tconst status = useHardwareTestState(\n\t\t(selectors) => selectors.getMicrophoneStatus(displayContext === DisplayContext.lobby),\n\t\t[],\n\t);\n\tconst statusSubtype = useHardwareTestState((selectors) => selectors.getMicrophoneError(), []);\n\tconst micCount = useMicrophoneDevices().length;\n\tconst { volumeLevel } = useVolumeLevels(localDeviceStream);\n\tconst [hasDetectedVolume, setDetectedVolume] = useState(false);\n\tconst [noRecentVolume, setNoRecentVolume] = useState(false);\n\tconst timeoutRef = useRef();\n\tconst isEnabled = useIsStreamEnabled(\"audio\", localDeviceStream);\n\tconst hasAutoSelectedDevices = useLocalTrackState((selectors) => selectors.getHasAutoSelected(), []);\n\n\tuseEffect(() => {\n\t\tif (volumeLevel >= VOLUME_LEVEL_DETECTION_THRESHOLD) {\n\t\t\tsetDetectedVolume(true);\n\t\t\tsetNoRecentVolume(false);\n\t\t\tif (timeoutRef.current) {\n\t\t\t\tclearTimeout(timeoutRef.current);\n\t\t\t\ttimeoutRef.current = undefined;\n\t\t\t}\n\t\t}\n\n\t\tif (volumeLevel < VOLUME_LEVEL_DETECTION_THRESHOLD && isEnabled) {\n\t\t\tif (!timeoutRef.current) {\n\t\t\t\ttimeoutRef.current = setTimeout(() => {\n\t\t\t\t\tsetNoRecentVolume(true);\n\t\t\t\t}, VOLUME_DETECTION_RECENT_TIMEOUT);\n\t\t\t}\n\t\t}\n\t}, [isEnabled, volumeLevel]);\n\n\tconst { updateMicTestStatus } = useHardwareTestActions();\n\n\tuseEffect(() => {\n\t\tif (localDeviceStream?.hasAudio()) {\n\t\t\tupdateMicTestStatus(!noRecentVolume, hasDetectedVolume);\n\t\t}\n\t}, [hasDetectedVolume, noRecentVolume, updateMicTestStatus, isEnabled, localDeviceStream]);\n\n\tconst tokenNames = [\n\t\t\"Microphone\",\n\t\t\"MicrophoneQuiet\",\n\t\t\"MuteMicrophone\",\n\t\t\"NoAudioDetected\",\n\t\t\"NoMicrophoneDetected\",\n\t\t\"CouldNotConnect\",\n\t\t\"NoPermissions\",\n\t];\n\tconst strings = useStrings(\"MicSetup\", tokenNames);\n\n\tconst message = useMemo(() => {\n\t\t// Start with more-specific error/warning message as appropriate\n\t\tif (status === DeviceStatus.error || status === DeviceStatus.warning) {\n\t\t\tswitch (statusSubtype) {\n\t\t\t\tcase DeviceStatusSubtype.neverStarted:\n\t\t\t\tcase DeviceStatusSubtype.testInterrupted:\n\t\t\t\t\treturn strings[\"NoAudioDetected\"];\n\t\t\t\tcase DeviceStatusSubtype.stoppedWorking:\n\t\t\t\t\treturn strings[\"MicrophoneQuiet\"];\n\t\t\t\tcase DeviceStatusSubtype.permissionsError:\n\t\t\t\t\t// Could be a case where other device permissions are denied -- wait until we receive devices before sending audio error\n\t\t\t\t\tif (hasAutoSelectedDevices) {\n\t\t\t\t\t\treturn strings[\"NoPermissions\"];\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// Check for generic errors\n\t\tif (status !== DeviceStatus.success && status !== DeviceStatus.testing) {\n\t\t\treturn micCount > 0 ? strings[\"CouldNotConnect\"] : strings[\"NoMicrophoneDetected\"];\n\t\t}\n\n\t\t// Default to no error message\n\t\treturn \"\";\n\t}, [hasAutoSelectedDevices, micCount, status, statusSubtype, strings]);\n\n\treturn message;\n}\n","/**\n * @copyright Copyright 2020-2024 Epic Systems Corporation\n * @file Component used to select a microphone\n * @author Colin Walters\n * @module Epic.VideoApp.Components.HardwareSetup.Devices.MicSelector\n */\n\nimport React, { FC, useCallback } from \"react\";\nimport { useMicrophoneDevices, useSelectedMic, useStrings } from \"~/hooks\";\nimport { useAudioTrackActions } from \"~/hooks/localTracks\";\nimport DeviceSelector from \"./DeviceSelector\";\n\n/**\n * The MicSelector component\n */\nconst MicSelector: FC = () => {\n\tconst { switchAudioDevice } = useAudioTrackActions();\n\n\tconst mics = useMicrophoneDevices();\n\tconst selectedMic = useSelectedMic();\n\n\tconst onMicChange = useCallback(\n\t\t(mic: MediaDeviceInfo) => {\n\t\t\t// no need to wait for errors, if the switch fails it'll reset the audio track\n\t\t\tvoid switchAudioDevice(mic, true);\n\t\t},\n\t\t[switchAudioDevice],\n\t);\n\n\tconst tokenNames = [\"Microphone\"];\n\tconst strings = useStrings(\"MicSelector\", tokenNames);\n\n\treturn (\n\t\t\n\t);\n};\n\nMicSelector.displayName = \"MicSelector\";\n\nexport default MicSelector;\n","/**\n * @copyright Copyright 2020 - 2024 Epic Systems Corporation\n * @file Volume indicator component\n * @author Colin Walters\n * @module Epic.VideoApp.Components.HardwareSetup.Devices.VolumeIndicator\n */\n\nimport React, { FC, useContext } from \"react\";\nimport { DisplayContext, ITestable } from \"~/types\";\nimport { resolveClassName } from \"~/utils/className\";\nimport { HardwareSetupDisplayContext } from \"../HardwareSetup\";\nimport styles from \"./VolumeIndicator.module.scss\";\n\n/**\n * Props for Volume indicator Component\n */\ninterface IProps extends ITestable {\n\tvolumeLevel: number;\n\tisTrackEnabled: boolean;\n}\n\nexport enum VolumeIndicatorTestIds {\n\tself = \"self\",\n\tcontainer = \"Container\",\n\tgraphic = \"Graphic\",\n}\n\n/**\n * Volume indicator level component\n * @param props the props\n * @returns the volume indicator component\n */\nconst VolumeIndicator: FC = (props) => {\n\tconst { volumeLevel, isTrackEnabled, ...mainProps } = props;\n\tconst inDevicesTray = useContext(HardwareSetupDisplayContext) === DisplayContext.devicesTray;\n\n\tconst className = resolveClassName(styles, {\n\t\tdisabledVolumeIndicatorContainer: !isTrackEnabled,\n\t\tvolumeIndicatorContainer: isTrackEnabled,\n\t\tdarkTheme: inDevicesTray,\n\t});\n\n\treturn (\n\t\t
\n\t\t\t
\n\t\t\t{isTrackEnabled && (\n\t\t\t\t\n\t\t\t)}\n\t\t
\n\t);\n};\n\nexport default VolumeIndicator;\n","/**\n * @copyright Copyright 2020-2024 Epic Systems Corporation\n * @file Mic row for the hardware test page\n * @author Colin Walters\n * @module Epic.VideoApp.Components.HardwareSetup.Devices.MicSetup\n */\n\nimport React, { FC, useContext, useEffect, useRef, useState } from \"react\";\nimport { useStrings } from \"~/hooks\";\nimport { useVolumeLevels } from \"~/hooks/useVolumeLevels\";\nimport Mic from \"~/icons/mic\";\nimport { useHardwareTestState } from \"~/state\";\nimport { DisplayContext, Timeout } from \"~/types\";\nimport { VideoSessionContext } from \"~/web-core/components/VideoSessionProvider\";\nimport { useIsStreamEnabled } from \"~/web-core/hooks/useIsStreamEnabled\";\nimport { HardwareSetupDisplayContext } from \"../HardwareSetup\";\nimport { useAudioDeviceMessage } from \"../hooks/useAudioDeviceMessage\";\nimport DeviceSetupRow from \"./DeviceSetupRow\";\nimport MicSelector from \"./MicSelector\";\nimport styles from \"./MicSetup.module.scss\";\nimport VolumeIndicator from \"./VolumeIndicator\";\n\nenum TokenNames {\n\tmicrophone = \"Microphone\",\n\tmuteMicrophone = \"MuteMicrophone\",\n\trecentAudio = \"RecentAudio\",\n\tnoRecentAudio = \"NoRecentAudio\",\n}\n\nconst VOLUME_LEVEL_DETECTION_THRESHOLD = 1; // 1/10 volume\nconst VOLUME_DETECTION_RECENT_TIMEOUT = 5000; // 5 seconds\n\nexport enum MicSetupTestIds {\n\tself = \"MicSetup\",\n\tvolumeIndicator = \"VolumeIndicator\",\n}\n\n/**\n * The MicSetup component\n */\nconst MicSetup: FC = () => {\n\tconst displayContext = useContext(HardwareSetupDisplayContext);\n\tconst status = useHardwareTestState(\n\t\t(selectors) => selectors.getMicrophoneStatus(displayContext === DisplayContext.lobby),\n\t\t[],\n\t);\n\n\tconst { localDeviceStream } = useContext(VideoSessionContext);\n\n\tconst isTrackEnabled = useIsStreamEnabled(\"audio\", localDeviceStream);\n\tconst { volumeLevel } = useVolumeLevels(localDeviceStream);\n\n\tconst message = useAudioDeviceMessage();\n\n\tconst strings = useStrings(\"MicSetup\", Object.values(TokenNames));\n\n\tconst [noRecentVolume, setNoRecentVolume] = useState(true);\n\tconst timeoutRef = useRef();\n\n\tuseEffect(() => {\n\t\tif (volumeLevel >= VOLUME_LEVEL_DETECTION_THRESHOLD) {\n\t\t\tsetNoRecentVolume(false);\n\t\t\tif (timeoutRef.current) {\n\t\t\t\tclearTimeout(timeoutRef.current);\n\t\t\t\ttimeoutRef.current = undefined;\n\t\t\t}\n\t\t}\n\n\t\tif (volumeLevel < VOLUME_LEVEL_DETECTION_THRESHOLD && isTrackEnabled) {\n\t\t\tif (!timeoutRef.current) {\n\t\t\t\ttimeoutRef.current = setTimeout(() => {\n\t\t\t\t\tsetNoRecentVolume(true);\n\t\t\t\t}, VOLUME_DETECTION_RECENT_TIMEOUT);\n\t\t\t}\n\t\t}\n\t}, [isTrackEnabled, volumeLevel]);\n\n\tconst volumeIndicatorAriaLabel = noRecentVolume\n\t\t? strings[TokenNames.noRecentAudio]\n\t\t: strings[TokenNames.recentAudio];\n\n\treturn (\n\t\t\n\t\t\t{displayContext !== DisplayContext.lobby && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t)}\n\t\t\n\t);\n};\n\nMicSetup.displayName = \"MicSetup\";\n\nexport default MicSetup;\n","/**\n * @copyright Copyright 2023 Epic Systems Corporation\n * @file hook to get speaker device message\n * @author Max Harkins\n * @module Epic.VideoApp.Components.HardwareSetup.Hooks.UseSpeakerDeviceMessage\n */\n\nimport { useCallback, useContext, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useSpeakerDevices, useStrings } from \"~/hooks\";\nimport { useHardwareTestState, useLocalTrackState } from \"~/state\";\nimport { DeviceStatus, Timeout } from \"~/types\";\nimport { IS_SET_SINK_ID_SUPPORTED } from \"~/utils/browser\";\nimport { secondsToMs } from \"~/utils/dateTime\";\nimport { VideoSessionContext } from \"~/web-core/components\";\nimport { isPermissionsError } from \"~/web-core/interfaces\";\n\nenum TokenNames {\n\trowLabel = \"Speaker\",\n\tnoSpeakerDetected = \"NoSpeakerDetected\",\n\tissueResolution = \"IssueResolution\",\n\tissueResolutionMobile = \"IssueResolution_Mobile\",\n}\n\n/**\n * Hook used to get an speaker device message.\n *\n * Returns: the message as a string, and a callback function which should be triggered when the audio is tested\n */\nexport function useSpeakerDeviceMessage(): { message: string; onSpeakerTest: () => void } {\n\tconst status = useHardwareTestState((selectors) => selectors.getSpeakerStatus(), []);\n\tconst speakerCount = useSpeakerDevices().length;\n\n\tconst [showStatusMsg, setShowStatusMsg] = useState(false);\n\tconst msgTimer = useRef(null);\n\n\tconst strings = useStrings(\"SpeakerSetup\", Object.values(TokenNames));\n\n\tconst { localDeviceStream } = useContext(VideoSessionContext);\n\tconst permissionsError = isPermissionsError(\n\t\tlocalDeviceStream?.getDeviceInitializationError()?.error.vendorErrorCode,\n\t);\n\n\tconst hasAutoSelectedDevices = useLocalTrackState((selectors) => selectors.getHasAutoSelected(), []);\n\n\tconst showAudioTestMsg = useCallback(() => {\n\t\tif (msgTimer.current) {\n\t\t\tclearTimeout(msgTimer.current);\n\t\t\tmsgTimer.current = null;\n\t\t}\n\n\t\tsetShowStatusMsg(true);\n\t\tmsgTimer.current = setTimeout(() => setShowStatusMsg(false), secondsToMs(20));\n\t}, []);\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tif (msgTimer.current) {\n\t\t\t\tclearTimeout(msgTimer.current);\n\t\t\t\tmsgTimer.current = null;\n\t\t\t}\n\t\t};\n\t}, []);\n\n\tconst statusMsg = useMemo(() => {\n\t\tif (status === DeviceStatus.warning && IS_SET_SINK_ID_SUPPORTED && !speakerCount) {\n\t\t\t// If we are missing a device but have a device permissions issue delay to they all appear at the same time.\n\t\t\tif (permissionsError && !hasAutoSelectedDevices) {\n\t\t\t\treturn \"\";\n\t\t\t}\n\t\t\treturn strings[TokenNames.noSpeakerDetected];\n\t\t}\n\t\tif (showStatusMsg) {\n\t\t\treturn IS_SET_SINK_ID_SUPPORTED\n\t\t\t\t? strings[TokenNames.issueResolution]\n\t\t\t\t: strings[TokenNames.issueResolutionMobile];\n\t\t}\n\t\treturn \"\";\n\t}, [status, speakerCount, showStatusMsg, permissionsError, hasAutoSelectedDevices, strings]);\n\n\treturn { message: statusMsg, onSpeakerTest: showAudioTestMsg };\n}\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file Component used to select a speaker\n * @author Colin Walters\n * @module Epic.VideoApp.Components.HardwareSetup.Devices.SpeakerSelector\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback, useContext } from \"react\";\nimport { useSpeakerDevices, useStrings } from \"~/hooks\";\nimport { combinedActions, useHardwareTestState, useSpeakerState } from \"~/state\";\nimport { DeviceStatus } from \"~/types\";\nimport { IS_SET_SINK_ID_SUPPORTED } from \"~/utils/browser\";\nimport { setSpeakerPreference } from \"~/utils/device\";\nimport { SharedStringTokens } from \"~/utils/strings\";\nimport { VideoSessionContext } from \"~/web-core/components\";\nimport DeviceSelector from \"./DeviceSelector\";\n\nenum TokenNames {\n\tfallbackName = \"Speaker\",\n}\n\n/**\n * The SpeakerSelector component\n */\nconst SpeakerSelector: FC = () => {\n\tconst { session } = useContext(VideoSessionContext);\n\tconst dispatch = useDispatch();\n\n\tconst speakers = useSpeakerDevices();\n\tconst selectedSpeakerId = useSpeakerState((selectors) => selectors.getSelectedSpeakerId(), []);\n\tconst speakerStatus = useHardwareTestState((selectors) => selectors.getSpeakerStatus(), []);\n\n\tconst strings = useStrings(\"SpeakerSelector\", Object.values(TokenNames), [\n\t\tSharedStringTokens.systemDefault,\n\t]);\n\n\tconst onSpeakerChanged = useCallback(\n\t\t(speaker: MediaDeviceInfo) => {\n\t\t\tdispatch(combinedActions.setSelectedSpeaker(speaker));\n\t\t\t// speaker selection currently can't fail, so for now we can set the preference here\n\t\t\tsetSpeakerPreference(speaker);\n\t\t\tsession?.localUser.setAudioOutput(speaker);\n\t\t},\n\t\t[dispatch, session],\n\t);\n\n\t// wait until we've tried to select a speaker, but show \"System Default\" for no speakers after that\n\tlet noDevicesMessage: string | undefined;\n\tif (\n\t\tspeakerStatus !== DeviceStatus.testing &&\n\t\t(speakerStatus !== DeviceStatus.warning || !IS_SET_SINK_ID_SUPPORTED || !!speakers.length)\n\t) {\n\t\tnoDevicesMessage = strings[SharedStringTokens.systemDefault];\n\t}\n\n\treturn (\n\t\t\n\t);\n};\n\nSpeakerSelector.displayName = \"SpeakerSelector\";\n\nexport default SpeakerSelector;\n","/**\n * @copyright Copyright 2022 Epic Systems Corporation\n * @file button to test the user's audio output\n * @author Colin Walters\n * @module Epic.VideoApp.Components.HardwareSetup.Devices.TestSpeakerButton\n */\n\nimport React, { FC, useCallback, useMemo, useRef, useState } from \"react\";\nimport ActionButton from \"~/components/Utilities/ActionButton\";\nimport { useSpeakerDevices, useStrings } from \"~/hooks\";\nimport { useLocalTrackState, useSpeakerState, useUserState } from \"~/state\";\nimport { ITestable } from \"~/types\";\nimport { IS_HTML5_SUPPORTED, IS_SET_SINK_ID_SUPPORTED } from \"~/utils/browser\";\nimport { makeResourceLink } from \"~/utils/general\";\nimport { isMacOS } from \"~/utils/os\";\n\nenum TokenNames {\n\tbuttonLabel = \"ButtonLabel\",\n}\n\nexport enum TestSpeakerButtonTestIds {\n\tself = \"TestSpeakerButton\",\n}\n\n/**\n * Props for TestSpeakerButton Component\n */\ninterface IProps extends ITestable {\n\t/** Function to be called after the test sound is played */\n\tonAudioPlayed?: () => void;\n}\n\n/**\n * The TestSpeakerButton component\n * @param props The props ;)\n */\nconst TestSpeakerButton: FC = (props) => {\n\tconst { onAudioPlayed, ...additionalProps } = props;\n\tconst canTestSpeaker = useUserState((sel) => sel.getUserPermission(\"canTestSpeaker\"), []);\n\tconst trackAcquisitionStatus = useLocalTrackState((sel) => sel.getLocalTrackAcquisitionStatus(), []);\n\n\tconst selectedSpeakerId = useSpeakerState((sel) => sel.getSelectedSpeakerId(), []);\n\tconst audioElement = useRef(null);\n\tconst [isPlaying, setIsPlaying] = useState(false);\n\n\tconst speakerCount = useSpeakerDevices().length;\n\tconst macOS = useMemo(() => isMacOS(), []);\n\tconst disabled = useMemo(\n\t\t() => IS_SET_SINK_ID_SUPPORTED && !macOS && !speakerCount,\n\t\t[macOS, speakerCount],\n\t);\n\n\tconst strings = useStrings(\"TestSpeakerButton\", Object.values(TokenNames));\n\n\tconst playTestSound = useCallback(async () => {\n\t\tif (!audioElement.current) {\n\t\t\treturn;\n\t\t}\n\t\tif (selectedSpeakerId && !macOS) {\n\t\t\tawait audioElement.current.setSinkId?.(selectedSpeakerId);\n\t\t}\n\n\t\tif (isPlaying) {\n\t\t\taudioElement.current.pause();\n\t\t\tsetIsPlaying(false);\n\t\t\treturn;\n\t\t}\n\n\t\taudioElement.current.currentTime = 0;\n\t\tsetIsPlaying(true);\n\t\taudioElement.current.onended = () => {\n\t\t\tsetIsPlaying(false);\n\t\t};\n\t\tawait audioElement.current.play();\n\t\tonAudioPlayed?.();\n\t}, [selectedSpeakerId, macOS, isPlaying, onAudioPlayed]);\n\n\tif (!IS_HTML5_SUPPORTED || !canTestSpeaker || trackAcquisitionStatus !== \"finished\") {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\t{strings[TokenNames.buttonLabel]}\n\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nTestSpeakerButton.displayName = \"TestSpeakerButton\";\n\nexport default TestSpeakerButton;\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file Speaker row for the hardware test page\n * @author Colin Walters\n * @module Epic.VideoApp.Components.HardwareSetup.Devices.SpeakerSetup\n */\n\nimport React, { FC, useContext } from \"react\";\nimport { useStrings } from \"~/hooks\";\nimport Speaker from \"~/icons/speaker\";\nimport { useHardwareTestState } from \"~/state\";\nimport { DeviceStatus, DisplayContext } from \"~/types\";\nimport { HardwareSetupDisplayContext } from \"../HardwareSetup\";\nimport { useSpeakerDeviceMessage } from \"../hooks/useSpeakerDeviceMessage\";\nimport DeviceSetupRow from \"./DeviceSetupRow\";\nimport SpeakerSelector from \"./SpeakerSelector\";\nimport TestSpeakerButton, { TestSpeakerButtonTestIds } from \"./TestSpeakerButton\";\n\nenum TokenNames {\n\trowLabel = \"Speaker\",\n\tnoSpeakerDetected = \"NoSpeakerDetected\",\n\tissueResolution = \"IssueResolution\",\n\tissueResolutionMobile = \"IssueResolution_Mobile\",\n}\n\nexport enum SpeakerSetupTestIds {\n\tself = \"SpeakerSetup\",\n}\n\n/**\n * The SpeakerSetup component\n */\nconst SpeakerSetup: FC = () => {\n\tconst { message, onSpeakerTest } = useSpeakerDeviceMessage();\n\tconst displayContext = useContext(HardwareSetupDisplayContext);\n\tconst status = useHardwareTestState((selectors) => selectors.getSpeakerStatus(), []);\n\n\tconst strings = useStrings(\"SpeakerSetup\", Object.values(TokenNames));\n\n\t// speaker warnings happen when there are no speakers, just don't show an icon as this\n\t// happens frequently on some operating systems (e.g. iOS)\n\tconst displayStatus = status === DeviceStatus.warning ? DeviceStatus.testing : status;\n\n\treturn (\n\t\t\n\t\t\t{displayContext === DisplayContext.devicesTray && (\n\t\t\t\t\n\t\t\t)}\n\t\t\n\t);\n};\n\nSpeakerSetup.displayName = \"SpeakerSetup\";\n\nexport default SpeakerSetup;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file hook to ensure that input fields are not blocked by the keyboard\n * @author Colin Walters\n * @module Epic.VideoApp.Components.HardwareSetup.Hooks.UseKeepInputInView\n */\n\nimport { useCallback, useEffect } from \"react\";\nimport { detectOS, OS } from \"~/utils/os\";\n\n/**\n * Hook used to ensure that input fields do not get blocked by the keyboard when the screen resizes\n * Resizes occur both on rotation and when the keyboard shrinks the view\n */\nexport function useKeepInputInView(): void {\n\tconst scrollIntoView = useCallback(() => {\n\t\t// if the currently active element is an input field, ensure that it is in view\n\t\tconst { activeElement } = document;\n\t\tif (activeElement?.tagName === \"INPUT\") {\n\t\t\t// set a timeout so the action is queued to execute after the keyboard finishes showing\n\t\t\tsetTimeout(() => {\n\t\t\t\tactiveElement.scrollIntoView();\n\t\t\t}, 25);\n\t\t}\n\t}, []);\n\n\tuseEffect(() => {\n\t\t// according to this stack overflow post, this is a bug in the Android browser, so only apply to that for now\n\t\t// https://stackoverflow.com/questions/23757345/android-does-not-correctly-scroll-on-input-focus-if-not-body-element/25032766#25032766\n\t\tif (detectOS() !== OS.android) {\n\t\t\treturn;\n\t\t}\n\n\t\twindow.addEventListener(\"resize\", scrollIntoView);\n\n\t\treturn () => window.removeEventListener(\"resize\", scrollIntoView);\n\t}, [scrollIntoView]);\n}\n","/**\n * @copyright Copyright 2023 Epic Systems Corporation\n * @file Generic text input component which displays an error if unsupported characters are entered\n * @author Hanita Haller\n * @module Epic.VideoApp.Components.Utilities.TextInput\n */\nimport React, { FC } from \"react\";\nimport { useStrings } from \"~/hooks\";\nimport { resolveClassName } from \"~/utils/className\";\nimport { stringFormat } from \"~/utils/strings\";\nimport styles from \"./TextInput.module.scss\";\n\ninterface IProps extends React.InputHTMLAttributes {\n\tinvalidCharacters?: string;\n}\n\nenum TokenNames {\n\tinvalidCharactersMessage = \"InvalidCharactersMessage\",\n}\n\nexport enum TextInputTestIds {\n\tself = \"TextInput\",\n\tinvalidAlert = \"TextInputInvalidCharactersAlert\",\n}\nconst TextInput: FC = (props) => {\n\tconst { invalidCharacters, className, ...inputProps } = props;\n\n\tconst strings = useStrings(\"TextInput\", Object.values(TokenNames));\n\tconst inputClass = resolveClassName(styles, { invalidInput: !!invalidCharacters }, className);\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t{!!invalidCharacters && (\n\t\t\t\t\n\t\t\t\t\t{stringFormat(strings[TokenNames.invalidCharactersMessage], invalidCharacters)}\n\t\t\t\t
\n\t\t\t)}\n\t\t\n\t);\n};\n\nTextInput.displayName = \"TextInput\";\n\nexport default TextInput;\n","/**\n * @copyright Copyright 2021-2024 Epic Systems Corporation\n * @file Display name input row for the hardware test page\n * @author Razi Rais\n * @module Epic.VideoApp.Components.HardwareSetup.DisplayNameInput\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback, useContext } from \"react\";\nimport { useStrings } from \"~/hooks\";\nimport { roomActions, useRoomState, useUserState } from \"~/state\";\nimport { DisplayContext, DisplayNameInputMaxLength } from \"~/types\";\nimport { sanitizeInput } from \"~/utils/text\";\nimport { HardwareSetupDisplayContext } from \"../HardwareSetup/HardwareSetup\";\nimport { useKeepInputInView } from \"../HardwareSetup/hooks/useKeepInputInView\";\nimport TextInput from \"../Utilities/TextInput\";\nimport styles from \"./DisplayNameInput.module.scss\";\n\ninterface IProps {\n\t/* If the control should be disabled */\n\tdisabled?: boolean;\n}\n\nexport enum DisplayNameInputTestIds {\n\tdisabledLocaleWarning = \"DisabledLocaleWarning\",\n\tself = \"DisplayNameInput\",\n}\n\n/**\n * The DisplayNameInput component\n */\nconst DisplayNameInput: FC = (props) => {\n\tconst { disabled } = props;\n\tconst displayContext = useContext(HardwareSetupDisplayContext);\n\tconst defaultName = useRoomState((selectors) => selectors.getLocalDisplayName(), []);\n\tconst displayNameBlocked = useUserState(\n\t\t(selectors) => selectors.getUserPermission(\"canNotSetDisplayName\"),\n\t\t[],\n\t);\n\tconst dispatch = useDispatch();\n\n\tconst tokenNames = [\"Label\"];\n\tconst strings = useStrings(\"DisplayNameInput\", tokenNames);\n\n\t// try to make sure that the input doesn't get blocked by the keyboard\n\tuseKeepInputInView();\n\n\t// make sure that the input is scrolled into view when focused\n\tconst scrollIntoView = useCallback((event: React.FocusEvent) => {\n\t\tevent.target.scrollIntoView();\n\t}, []);\n\n\t//Update the local display name when the user edits it\n\tconst updateDisplayName = useCallback(\n\t\t(event: React.FormEvent) => {\n\t\t\tconst currentInput = sanitizeInput(event.currentTarget.value, DisplayNameInputMaxLength);\n\t\t\tevent.currentTarget.value = currentInput;\n\t\t\tdispatch(roomActions.setLocalDisplayName(event.currentTarget.value));\n\t\t},\n\t\t[dispatch],\n\t);\n\n\tif (displayContext !== DisplayContext.lobby) {\n\t\treturn null;\n\t}\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t{displayNameBlocked ? (\n\t\t\t\t{defaultName}\n\t\t\t) : (\n\t\t\t\t\n\t\t\t)}\n\t\t
\n\t);\n};\n\nDisplayNameInput.displayName = \"DisplayNameInput\";\n\nexport default DisplayNameInput;\n","/**\n * @copyright Copyright 2020-2024 Epic Systems Corporation\n * @file Hardware Setup component\n * @author Matt Panico\n * @module Epic.VideoApp.Components.HardwareSetup.HardwareSetup\n */\n\nimport React, { FC } from \"react\";\nimport { useHardwareTestState } from \"~/state\";\nimport { useCombinedSelectors } from \"~/state/combined\";\nimport { DeviceStatus, DisplayContext } from \"~/types\";\nimport { resolveClassName } from \"~/utils/className\";\nimport BackgroundGalleryToggleRow, {\n\tBackgroundGalleryToggleRowTestIds,\n} from \"../BackgroundSelector/BackgroundGalleryToggleRow\";\nimport SkipHardwareTestSection, {\n\tSkipHardwareTestSectionTestIds,\n} from \"../HardwareTest/SkipHardwareTestSection\";\nimport AudioWarningBanner from \"./AudioWarningBanner\";\nimport CameraSetup, { CameraSetupTestIds } from \"./Devices/CameraSetup\";\nimport MicSetup, { MicSetupTestIds } from \"./Devices/MicSetup\";\nimport SpeakerSetup, { SpeakerSetupTestIds } from \"./Devices/SpeakerSetup\";\nimport DisplayNameInput from \"./DisplayNameInput\";\nimport styles from \"./HardwareSetup.module.scss\";\n\ninterface IProps {\n\tcontext: DisplayContext;\n\tclassName?: string;\n\tdisabled?: boolean;\n}\n\nexport enum HardwareSetupTestIds {\n\tcamera = CameraSetupTestIds.self,\n\tmicrophone = MicSetupTestIds.self,\n\tspeaker = SpeakerSetupTestIds.self,\n\tskipHardwareTest = SkipHardwareTestSectionTestIds.self,\n\tbackgroundGalleryToggleRow = BackgroundGalleryToggleRowTestIds.label,\n}\n\n// create a context for what context the hardware setup is being displayed in to avoid having to this prop through all children\nexport const HardwareSetupDisplayContext = React.createContext(DisplayContext.standAlone);\n\n/**\n * The HardwareSetup component\n * @param props The props ;)\n */\nconst HardwareSetup: FC = (props: IProps) => {\n\tconst { context, className, disabled } = props;\n\n\tconst isCameraSuccess =\n\t\tuseHardwareTestState((selectors) => selectors.getCameraStatus(false), []) === DeviceStatus.success;\n\tconst isBackgroundsSupported = useCombinedSelectors(\n\t\t(selectors) => selectors.getIsBackgroundsSupported(),\n\t\t[],\n\t);\n\n\tconst inDevicesTray = context === DisplayContext.devicesTray;\n\tconst wrapperClassName = resolveClassName(\n\t\tstyles,\n\t\t{ hardwareSetupRows: true, dark: inDevicesTray },\n\t\tclassName,\n\t);\n\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t{context === DisplayContext.lobby && isBackgroundsSupported && isCameraSuccess && (\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t\t\n\t\t\t\t{context === DisplayContext.devicesTray && (\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t);\n};\n\nHardwareSetup.displayName = \"HardwareSetup\";\n\nexport default HardwareSetup;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file PageArrowButton\n * @author Liam Liden\n * @module Epic.VideoApp.Components.Utilities.Carousel.PageArrowButton\n */\n\nimport React, { FC } from \"react\";\nimport Chevron from \"~/icons/chevron\";\nimport { resolveClassName } from \"~/utils/className\";\nimport styles from \"./PageArrowButton.module.scss\";\n\ntype PageDirection = \"previous\" | \"next\";\n\ninterface IProps {\n\t/** Function to run on button click*/\n\tonClick: () => void;\n\n\t/** Sets direction of the chevron inside the button */\n\tpageDirection: PageDirection;\n\n\t/** Aria-label to use for the underlying button */\n\tariaLabel: string;\n\n\t/** Flag for whether the button will function or not */\n\tdisabled?: boolean;\n\n\t/** Bool for if the button should lighten rather than darken on hover */\n\tlighten?: boolean;\n}\n\nconst PageArrowButton: FC = (props) => {\n\tconst { onClick, pageDirection, ariaLabel, disabled, lighten } = props;\n\n\tconst buttonClass = resolveClassName(styles, { changePageButton: true, lighten: lighten });\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nPageArrowButton.displayName = \"PageArrowButton\";\n\nexport default PageArrowButton;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file circle (page selector buttons)\n * @author Liam Liden\n * @module Epic.VideoApp.Icons.Circle\n */\n\nimport React, { FC } from \"react\";\nimport { IconProps } from \".\";\n\n/**\n * The Circle component\n * @param props The props ;)\n */\nconst Circle: FC = (props) => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nCircle.displayName = \"Circle\";\n\nexport default React.memo(Circle);\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file PageSelector\n * @author Liam Liden\n * @module Epic.VideoApp.Components.Utilities.Carousel.PageSelector\n */\n\nimport React, { FC, useCallback } from \"react\";\nimport { useStrings } from \"~/hooks\";\nimport Circle from \"~/icons/circle\";\nimport { resolveClassName } from \"~/utils/className\";\nimport { stringFormat } from \"~/utils/strings\";\nimport BaseButton from \"../BaseButton\";\nimport styles from \"./PageSelector.module.scss\";\n\ninterface IProps {\n\t/** Function to run on button click*/\n\tonClick: (page: number) => void;\n\n\t/** Total pages in carousel to know how many buttons to create */\n\ttotalPages: number;\n\n\t/** Current page to know which circle to fill in */\n\tcurrentPage: number;\n\n\t/** Custom CSS class for PageSelectorButtons */\n\tbuttonClassName?: string;\n}\n\nenum TokenNames {\n\tcurrentPage = \"CurrentPage\",\n\tswitchToPage = \"SwitchToPage\",\n}\n\nconst PageSelector: FC = (props) => {\n\tconst { onClick, totalPages, currentPage, buttonClassName } = props;\n\tconst strings = useStrings(\"PageSelector\", Object.values(TokenNames));\n\n\tconst switchToPage = useCallback(\n\t\t(page: number): (() => void) => {\n\t\t\treturn () => onClick(page);\n\t\t},\n\t\t[onClick],\n\t);\n\n\treturn (\n\t\t
\n\t\t\t{[...Array(totalPages).keys()].map((key, index) => {\n\t\t\t\tconst isCurrent = index === currentPage;\n\t\t\t\tconst ariaLabel = isCurrent\n\t\t\t\t\t? stringFormat(strings[TokenNames.currentPage], index + 1, totalPages)\n\t\t\t\t\t: stringFormat(strings[TokenNames.switchToPage], index + 1);\n\n\t\t\t\tconst buttonClass = resolveClassName(\n\t\t\t\t\tstyles,\n\t\t\t\t\t{\n\t\t\t\t\t\tpageSelectorButton: true,\n\t\t\t\t\t\tselected: isCurrent,\n\t\t\t\t\t},\n\t\t\t\t\tbuttonClassName,\n\t\t\t\t);\n\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\t})}\n\t\t
\n\t);\n};\n\nPageSelector.displayName = \"PageSelector\";\n\nexport default PageSelector;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file Carousel\n * @author Liam Liden\n * @module Epic.VideoApp.Components.Utilities.Carousel.Carousel\n */\n\nimport React, { FC, useCallback, useContext, useEffect, useMemo, useState } from \"react\";\nimport { HardwareSetupDisplayContext } from \"~/components/HardwareSetup/HardwareSetup\";\nimport Spinner from \"~/components/Loading/Spinner\";\nimport { useStrings } from \"~/hooks\";\nimport { DisplayContext } from \"~/types\";\nimport styles from \"./Carousel.module.scss\";\nimport PageArrowButton from \"./PageArrowButton\";\nimport PageSelector from \"./PageSelector\";\n\nexport enum CarouselTestIds {\n\tcarousel = \"Carousel\",\n}\n\ninterface IProps {\n\t/** Positive integer number of elements on each page; */\n\telementsPerPage: number;\n\n\t/** If true displays the loading spinner instead of any components*/\n\tloading?: boolean;\n\n\t/** Custom CSS class for PageSelectorButtons */\n\tbuttonClassName?: string;\n\n\t/** Custom CSS class for page style (content inside the Carousel) */\n\tpageWrapperClassName?: string;\n}\n\nenum TokenNames {\n\tpreviousPage = \"PreviousPage\",\n\tnextPage = \"NextPage\",\n}\n\nconst Carousel: FC = (props) => {\n\tconst { elementsPerPage, loading, buttonClassName, pageWrapperClassName, children } = props;\n\tconst strings = useStrings(\"PagingSection\", Object.values(TokenNames));\n\n\tconst [currentPage, setCurrentPage] = useState(0);\n\n\tconst inDevicesTray = useContext(HardwareSetupDisplayContext) === DisplayContext.devicesTray;\n\n\t// Using React.Children.toArray() here since 'false' children are counted with React.Children.count()\n\t// Using React.Children.count() would count the conditionally rendered children that are not being rendered\n\tconst totalChildren = React.Children.toArray(children).length;\n\tconst totalPages = Math.ceil(totalChildren / elementsPerPage);\n\tconst isMultiplePages = totalPages > 1;\n\n\t// If resizing causes less total pages, set current page to first page\n\tuseEffect(() => {\n\t\tif (currentPage > 0 && currentPage >= totalPages) {\n\t\t\tsetCurrentPage(totalPages - 1);\n\t\t}\n\t}, [totalPages, currentPage]);\n\n\tconst nextPage = useCallback(() => {\n\t\tif (currentPage + 1 >= totalPages) {\n\t\t\tsetCurrentPage(0);\n\t\t} else {\n\t\t\tsetCurrentPage(currentPage + 1);\n\t\t}\n\t}, [currentPage, totalPages]);\n\n\tconst prevPage = useCallback(() => {\n\t\tif (currentPage - 1 < 0) {\n\t\t\tsetCurrentPage(totalPages - 1);\n\t\t} else {\n\t\t\tsetCurrentPage(currentPage - 1);\n\t\t}\n\t}, [currentPage, totalPages]);\n\n\tconst pages = useMemo(() => {\n\t\tconst arr = [];\n\t\tfor (let index = 0; index < totalPages; index++) {\n\t\t\tconst startIndex = index * elementsPerPage;\n\t\t\tarr[index] = (\n\t\t\t\t
\n\t\t\t\t\t{React.Children.toArray(children).slice(startIndex, startIndex + elementsPerPage)}\n\t\t\t\t
\n\t\t\t);\n\t\t}\n\n\t\treturn arr;\n\t}, [children, elementsPerPage, totalPages, pageWrapperClassName]);\n\n\treturn (\n\t\t
\n\t\t\t{loading ? (\n\t\t\t\t\n\t\t\t) : (\n\t\t\t\t<>\n\t\t\t\t\t
\n\t\t\t\t\t\t{isMultiplePages && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{pages[currentPage]}\n\t\t\t\t\t\t{isMultiplePages && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t)}\n\t\t\t\t\t
\n\t\t\t\t\t{isMultiplePages && (\n\t\t\t\t\t\t\n\t\t\t\t\t)}\n\t\t\t\t\n\t\t\t)}\n\t\t
\n\t);\n};\n\nCarousel.displayName = \"Carousel\";\n\nexport default Carousel;\n","/**\n * @copyright Copyright 2021-2024 Epic Systems Corporation\n * @file BackgroundGalleryNoneOption\n * @author Liam Liden\n * @module Epic.VideoApp.Components.BackgroundSelector.BackgroundGalleryNoneOption\n */\n\nimport React, { FC, useCallback } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport { useStrings } from \"~/hooks\";\nimport { useBackgroundToggle } from \"~/hooks/backgroundEffects\";\nimport error from \"~/icons/error\";\nimport { alertActions } from \"~/state\";\nimport { DefaultImageNames } from \"~/types/backgrounds\";\nimport { resolveClassName } from \"~/utils/className\";\nimport { ILocalStream } from \"~/web-core/interfaces\";\nimport BaseButton from \"../Utilities/BaseButton\";\nimport styles from \"./BackgroundGalleryNoneOption.module.scss\";\n\ninterface IProps {\n\t/** Track to remove background effects from */\n\tapplyStream: ILocalStream | null;\n\n\tariaLabel?: string;\n}\n\nenum TokenNames {\n\tbackgroundNoneOption = \"BackgroundNoneOption\",\n}\n\nexport enum BackgroundGalleryNoneOptionTestIds {\n\tself = \"BackgroundGalleryNoneOption\",\n}\n\n/**\n * The BackgroundGalleryNoneOption component\n */\nconst BackgroundGalleryNoneOption: FC = (props: IProps) => {\n\tconst { applyStream, ariaLabel } = props;\n\tconst { isEnabled, toggleProcessor } = useBackgroundToggle(DefaultImageNames.none, applyStream);\n\n\tconst dispatch = useDispatch();\n\n\tconst selectedClassName = resolveClassName(styles, {\n\t\tnoneOption: true,\n\t\tselected: isEnabled,\n\t});\n\n\tconst clearProcessor = useCallback(() => {\n\t\ttoggleProcessor(\"on\");\n\t\tdispatch(alertActions.setBackgroundName(\"cleared\"));\n\t\tdispatch(alertActions.setBackgroundClearedAlert(true));\n\t}, [dispatch, toggleProcessor]);\n\n\tconst strings = useStrings(\"BackgroundGalleryNoneOption\", Object.values(TokenNames));\n\n\treturn (\n\t\t
\n\t\t\t\n\t\t
\n\t);\n};\n\nBackgroundGalleryNoneOption.displayName = \"BackgroundGalleryNoneOption\";\n\nexport default BackgroundGalleryNoneOption;\n","/**\n * @copyright Copyright 2021-2024 Epic Systems Corporation\n * @file Background Gallery Option\n * @author Liam Liden\n * @module Epic.VideoApp.Components.BackgroundSelector.BackgroundGalleryOption\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback, useContext, useMemo } from \"react\";\nimport { useBackgroundToggle } from \"~/hooks/backgroundEffects/useBackgroundToggle\";\nimport { alertActions } from \"~/state\";\nimport { StyleContext } from \"~/types\";\nimport { BackgroundResourceType } from \"~/types/backgrounds\";\nimport { resolveClassName } from \"~/utils/className\";\nimport { makeResourceLink } from \"~/utils/general\";\nimport { warn } from \"~/utils/logging\";\nimport { ILocalStream } from \"~/web-core/interfaces\";\nimport { BackgroundStyleContext } from \"../Utilities/BackgroundStyleContext\";\nimport { MenuContext } from \"../Utilities/MenuContext\";\nimport styles from \"./BackgroundGalleryOption.module.scss\";\n\ninterface IProps {\n\t/** Image to be shown in the gallery and used as virtual background if !blur */\n\timage: string;\n\n\t/** Alt text for the image */\n\talt: string;\n\n\t/** Stream to apply processor to. If null, skip application and just set state */\n\tapplyStream: ILocalStream | null;\n\n\t/** Optional text to place on the option's banner; option will not have a banner if not given */\n\tbannerText?: string;\n\n\t/** Name of background used in accessibility alert*/\n\tbackground?: string;\n\n\t/** If the option is clearing the background */\n\tnoneOption?: boolean;\n\n\t/**\n\t * Type of resource being loaded into the gallery. For example, a resource could be a local Epic-released\n\t * resource or a branded virtual background.\n\t */\n\tresourceType?: BackgroundResourceType;\n}\n\nconst BackgroundGalleryOption: FC = (props: IProps) => {\n\tconst { image, alt, applyStream, bannerText, resourceType, background, noneOption } = props;\n\tconst { isEnabled, toggleProcessor } = useBackgroundToggle(image, applyStream);\n\n\tconst isInDarkMode = useContext(BackgroundStyleContext) === StyleContext.dark;\n\n\tconst { isInMenu: isFromMenu } = useContext(MenuContext);\n\n\tconst dispatch = useDispatch();\n\tif (!isFromMenu) {\n\t\twarn(\"BackgroundGalleryOption displayed from non-menu context\");\n\t}\n\n\tconst selectedClassName = resolveClassName(styles, {\n\t\tgalleryOption: true,\n\t\tselected: isEnabled,\n\t\tisInDarkMode: isInDarkMode,\n\t});\n\n\tconst wrapperClassName = resolveClassName(styles, {\n\t\toptionWrapper: true,\n\t\tselected: isEnabled,\n\t});\n\n\tconst onClick = useCallback(() => {\n\t\ttoggleProcessor(\"on\");\n\t\t// Handling clearing background accessibility alert\n\t\tif (noneOption) {\n\t\t\tdispatch(alertActions.setBackgroundClearedAlert(true));\n\t\t\tdispatch(alertActions.setBackgroundName(\"cleared\"));\n\t\t}\n\t\t// Handling setting background accessiblity alert\n\t\tif (background) {\n\t\t\tdispatch(alertActions.setBackgroundName(background));\n\t\t\tdispatch(alertActions.setBackgroundChangedAlert(true));\n\t\t}\n\t}, [background, dispatch, noneOption, toggleProcessor]);\n\n\tconst imageSource = useMemo(() => {\n\t\tif (resourceType === \"RemoteImage\") {\n\t\t\treturn makeResourceLink(\"RemoteImage\", image);\n\t\t}\n\t\tconst thumbnailPath = image.replace(\".png\", \"_thumb.png\");\n\t\treturn makeResourceLink(\"BackgroundImage\", thumbnailPath);\n\t}, [image, resourceType]);\n\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t{bannerText && (\n\t\t\t\t\n\t\t\t\t\t{bannerText}\n\t\t\t\t\n\t\t\t)}\n\t\t
\n\t);\n};\n\nBackgroundGalleryOption.displayName = \"BackgroundGalleryOption\";\n\nexport default BackgroundGalleryOption;\n","/**\n * @copyright Copyright 2021-2024 Epic Systems Corporation\n * @file background gallery\n * @author Liam Liden\n * @module Epic.VideoApp.Components.BackgroundSelector.BackgroundGallery\n */\n\nimport React, { FC, useMemo } from \"react\";\nimport { useStrings, useWindowSize } from \"~/hooks\";\nimport { useBackgroundProcessorsState } from \"~/state/backgroundProcessors\";\nimport { ScreenWidthInflectionPoint, SmallScreenWidthInflectionPoint } from \"~/types\";\nimport {\n\tDefaultImageNames,\n\tDesktopElements,\n\tDesktopInflectionElements,\n\tICustomBackgroundProcessor,\n\tSmallInflectionElements,\n} from \"~/types/backgrounds\";\nimport { stringFormat } from \"~/utils/strings\";\nimport { ILocalStream } from \"~/web-core/interfaces\";\nimport Spinner from \"../Loading/Spinner\";\nimport Carousel from \"../Utilities/Carousel/Carousel\";\nimport { MenuContextProvider } from \"../Utilities/MenuContext\";\nimport styles from \"./BackgroundGallery.module.scss\";\nimport BackgroundGalleryNoneOption from \"./BackgroundGalleryNoneOption\";\nimport BackgroundGalleryOption from \"./BackgroundGalleryOption\";\n\ninterface IProps {\n\t/* Stream to attempt to immediately apply a background to */\n\tapplyStream: ILocalStream | null;\n\n\tnoPreview?: boolean;\n\n\t/** If set, displays gallery in scroll mode instead of carousel */\n\tscrollGallery?: boolean;\n}\n\nenum TokenNames {\n\tbackgroundEffectAltText = \"BackgroundEffectAltText\",\n\tbackgroundEffectAltTextDefault = \"BackgroundEffectAltTextDefault\",\n\tblur = \"Blur\",\n\tnone = \"None\",\n\tnoneAriaLabel = \"NoneAriaLabel\",\n\toffice = \"Office\",\n\tdark = \"Dark\",\n\tplanks = \"Planks\",\n\tspace = \"Space\",\n\tspring = \"Spring\",\n\tsummer = \"Summer\",\n\tfall = \"Fall\",\n\twinter = \"Winter\",\n}\n\nexport const backgroundToToken: Record = {\n\t[DefaultImageNames.blur]: TokenNames.blur,\n\t[DefaultImageNames.office]: TokenNames.office,\n\t[DefaultImageNames.dark]: TokenNames.dark,\n\t[DefaultImageNames.planks]: TokenNames.planks,\n\t[DefaultImageNames.space]: TokenNames.space,\n\t[DefaultImageNames.spring]: TokenNames.spring,\n\t[DefaultImageNames.summer]: TokenNames.summer,\n\t[DefaultImageNames.fall]: TokenNames.fall,\n\t[DefaultImageNames.winter]: TokenNames.winter,\n};\n\nexport enum BackgroundGalleryTestIds {\n\tself = \"BackgroundGallery\",\n}\n\nconst getAltForImage = (\n\tpath: string,\n\tprocessor: ICustomBackgroundProcessor,\n\tstrings: Record,\n): string => {\n\tlet imageDescription: string | null = null;\n\n\t// Try to get a translated string first\n\tconst stringToken = path in backgroundToToken ? backgroundToToken[path] : null;\n\tif (stringToken) {\n\t\timageDescription = strings[stringToken];\n\t} else {\n\t\t// Fall back to parsing the description from the path/name\n\t\tconst matches = imageDescriptionRegex.exec(processor.name ?? path);\n\t\tif (matches) {\n\t\t\timageDescription = matches[0];\n\t\t}\n\t}\n\n\treturn imageDescription\n\t\t? stringFormat(strings[TokenNames.backgroundEffectAltText], imageDescription)\n\t\t: strings[TokenNames.backgroundEffectAltTextDefault];\n};\n\nconst getAlertForImage = (path: string, strings: Record): string => {\n\tconst token = path in backgroundToToken ? backgroundToToken[path] : null;\n\tlet translatedToken: string | null = null;\n\tif (token) {\n\t\ttranslatedToken = strings[token];\n\t}\n\treturn translatedToken ? translatedToken : \"unknown\";\n};\n\nconst imageDescriptionRegex = new RegExp(/([a-zA-Z ]+)/);\n\nconst BackgroundGallery: FC = (props: IProps) => {\n\tconst { applyStream, scrollGallery } = props;\n\tconst processorMap = useBackgroundProcessorsState((selectors) => selectors.getBackgroundProcessors(), []);\n\tconst processorLoadStatus = useBackgroundProcessorsState(\n\t\t(selectors) => selectors.getProcessorLoadStatus(),\n\t\t[],\n\t);\n\n\tconst strings = useStrings(\"BackgroundGallery\", Object.values(TokenNames));\n\n\t// Change from grid to carousel when screen size reaches inflection points or on mobile device\n\tconst windowSize = useWindowSize();\n\tconst elementsPerPage = useMemo(() => {\n\t\tif (windowSize.width < SmallScreenWidthInflectionPoint) {\n\t\t\treturn SmallInflectionElements;\n\t\t} else if (windowSize.width < ScreenWidthInflectionPoint) {\n\t\t\treturn DesktopInflectionElements;\n\t\t}\n\t\treturn DesktopElements;\n\t}, [windowSize.width]);\n\n\t// Convert processor map to array for easier iteration.\n\t// If more than one background is available, show the 'no background' banner rather than displaying it as a normal option\n\tconst [processorEntries, isNoBackgroundHeaderEnabled] = useMemo(() => {\n\t\tconst arr = Array.from(processorMap.entries());\n\t\tconst isNoBackgroundHeaderEnabled = arr.length > 1;\n\t\treturn [arr, isNoBackgroundHeaderEnabled];\n\t}, [processorMap]);\n\n\tif (scrollGallery) {\n\t\treturn processorLoadStatus !== \"finished\" ? (\n\t\t\t\n\t\t) : (\n\t\t\t<>\n\t\t\t\t\n\t\t\t\t{processorEntries.map(([path, processor], index) => {\n\t\t\t\t\tconst altText = getAltForImage(path, processor, strings);\n\t\t\t\t\tconst alert = getAlertForImage(path, strings);\n\t\t\t\t\treturn (\n\t\t\t\t\t\t\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t\n\t\t);\n\t}\n\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t{applyStream && !isNoBackgroundHeaderEnabled && (\n\t\t\t\t\t\t\n\t\t\t\t\t)}\n\t\t\t\t\t{processorEntries.map(([path, processor], index) => {\n\t\t\t\t\t\t// Get image description from path\n\t\t\t\t\t\tconst altText = getAltForImage(path, processor, strings);\n\t\t\t\t\t\tconst alert = getAlertForImage(path, strings);\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t\n\t\t\t\t{isNoBackgroundHeaderEnabled && (\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t
\n\t\t
\n\t);\n};\n\nBackgroundGallery.displayName = \"BackgroundGallery\";\n\nexport default BackgroundGallery;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file disabled camera indicator component\n * @author Colin Walters\n * @module Epic.VideoApp.Components.Participants.Video.DisabledCameraIndicator\n */\n\nimport React, { FC } from \"react\";\nimport Spinner from \"~/components/Loading/Spinner\";\nimport { useStrings } from \"~/hooks\";\nimport DisabledCamera from \"~/icons/disabledCamera\";\nimport LockedCamera from \"~/icons/lockedCamera\";\nimport styles from \"./VideoPlaceholder.module.scss\";\n\nenum TokenNames {\n\tuserDisabled = \"UserDisabledTheirCamera\",\n\tuserLocked = \"UserCameraLocked\",\n}\n\n/**\n * Props for the DisabledCameraIndicator component\n */\ninterface IProps {\n\tlocked?: boolean;\n\t/** If true, show a loading spinner instead of a disable icon */\n\tshowSpinner?: boolean;\n\t/** Default Size - a value between 50px and 100px that will be used */\n\tdefaultSize?: number;\n}\n\n/**\n * The DisabledCameraIndicator component\n * @param props The props ;)\n */\nconst DisabledCameraIndicator: FC = (props) => {\n\tconst { defaultSize, locked, showSpinner } = props;\n\tconst strings = useStrings(\"DisabledCameraIndicator\", Object.values(TokenNames));\n\n\tconst title = locked ? strings[TokenNames.userLocked] : strings[TokenNames.userDisabled];\n\tconst ariaLabel = title;\n\n\tconst size = getIconSize(defaultSize);\n\n\tif (showSpinner) {\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t);\n\t}\n\n\tif (locked) {\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t);\n\t}\n\n\treturn (\n\t\t
\n\t\t\t\n\t\t
\n\t);\n};\n\n/**\n * Get the size of the disabled camera icon\n * @param defaultSize size passed in as a prop\n * @returns the size that the icon should be\n */\nfunction getIconSize(defaultSize?: number): number {\n\treturn Math.max(50, Math.min(100, defaultSize || 100));\n}\n\nDisabledCameraIndicator.displayName = \"DisabledCameraIndicator\";\n\nexport default DisabledCameraIndicator;\n","/**\n * @copyright Copyright 2021-2024 Epic Systems Corporation\n * @file background preview component\n * @author Liam Liden\n * @module Epic.VideoApp.Components.BackgroundSelector.BackgroundPreview\n */\n\nimport React, { FC } from \"react\";\nimport { useStrings } from \"~/hooks\";\nimport VideoStream from \"~/web-core/components/VideoStream\";\nimport { ILocalStream } from \"~/web-core/interfaces\";\nimport Spinner from \"../Loading/Spinner\";\nimport DisabledCameraIndicator from \"../Participants/Video/DisabledCameraIndicator\";\nimport styles from \"./BackgroundPreview.module.scss\";\n\n/**\n * Props for the BackgroundPreview component\n */\ninterface IProps {\n\t/** The video track to render in the preview */\n\tstream: ILocalStream | null;\n\n\t/** Whether or not the video disabled icon should be displayed */\n\tdisabled?: boolean;\n}\n\nexport enum TokenNames {\n\tpreview = \"Preview\",\n}\n\n/**\n * The BackgroundPreview component\n * @param props The props ;)\n */\nconst BackgroundPreview: FC = (props) => {\n\tconst { stream, disabled, children } = props;\n\n\tconst strings = useStrings(\"BackgroundPreview\", Object.values(TokenNames));\n\n\treturn (\n\t\t
\n\t\t\t
\n\t\t\t\t{disabled ? (\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t) : stream ? (\n\t\t\t\t\t<>\n\t\t\t\t\t\t\n\t\t\t\t\t\t{strings[TokenNames.preview]}\n\t\t\t\t\t\n\t\t\t\t) : (\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t
\n\t\t\t{children}\n\t\t
\n\t);\n};\n\nBackgroundPreview.displayName = \"BackgroundPreview\";\n\nexport default BackgroundPreview;\n","/**\n * @copyright Copyright 2021-2024 Epic Systems Corporation\n * @file background selector\n * @author Liam Liden\n * @module Epic.VideoApp.Components.BackgroundSelector.BackgroundSelector\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useContext, useEffect, useRef, useState } from \"react\";\nimport { useSelectedCamera } from \"~/hooks\";\nimport { useBackgroundProcessorsState, useHardwareTestState, useUIState } from \"~/state\";\nimport { DeviceStatus } from \"~/types\";\nimport { warn } from \"~/utils/logging\";\nimport { VideoSessionContext } from \"~/web-core/components\";\nimport { useIsStreamEnabled } from \"~/web-core/hooks/useIsStreamEnabled\";\nimport { ILocalStream } from \"~/web-core/interfaces\";\nimport BackgroundGallery from \"./BackgroundGallery\";\nimport BackgroundPreview from \"./BackgroundPreview\";\nimport styles from \"./BackgroundSelector.module.scss\";\n\ninterface IBackgroundStream {\n\tstream: ILocalStream | null;\n\tisPreview: boolean;\n}\n\n/**\n * The BackgroundSelector component\n */\nconst BackgroundSelector: FC = () => {\n\tconst dispatch = useDispatch();\n\tconst { session, localDeviceStream } = useContext(VideoSessionContext);\n\tconst localUser = session?.localUser;\n\tconst [streamToUse, setStreamToUse] = useState({ stream: null, isPreview: false });\n\n\tconst cameraEnabled = useIsStreamEnabled(\"video\", localDeviceStream);\n\tconst cameraStatus = useHardwareTestState((selectors) => selectors.getCameraStatus(false), []);\n\n\tconst publishedProcessor =\n\t\tuseBackgroundProcessorsState((selectors) => selectors.getPublishedProcessorFromMap(), []) ?? null;\n\n\tconst camera = useSelectedCamera();\n\n\tconst [failedTrackCreation, setFailedTrackCreation] = useState(false);\n\tconst publishedProcessorRef = useRef(publishedProcessor);\n\tconst isMountedRef = useRef(true);\n\tconst isCreatingPreviewTrack = useRef(false);\n\tconst menuStateRef = useRef();\n\tmenuStateRef.current = useUIState((selectors) => selectors.getVisibleMenu(), []);\n\n\t// If user closes BG Effects menu during preview track creation, make sure to NOT set state and detach + stop track to avoid memory leaks\n\t// This useEffect should be the first to run to make sure the reference is up-to-date in other useEffects\n\tuseEffect(() => {\n\t\tisMountedRef.current = true;\n\t\treturn () => {\n\t\t\tisMountedRef.current = false;\n\t\t};\n\t}, []);\n\n\tuseEffect(() => {\n\t\tpublishedProcessorRef.current = publishedProcessor;\n\t}, [publishedProcessor]);\n\n\tuseEffect(() => {\n\t\tif (streamToUse.stream) {\n\t\t\t// If true, then we are using the incorrect localDeviceStream and need to switch\n\t\t\tif (streamToUse.isPreview === cameraEnabled) {\n\t\t\t\tif (streamToUse.isPreview) {\n\t\t\t\t\tstopPreviewStream(streamToUse.stream);\n\t\t\t\t}\n\t\t\t\tsetStreamToUse({ stream: null, isPreview: false });\n\t\t\t\t// Otherwise, we are already using the correct localDeviceStream and can return\n\t\t\t} else {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tconst createPreviewTrack = async (): Promise => {\n\t\t\t// Do not attempt to create a preview track if we are already in the process of creating one\n\t\t\t// or if the menu is in the process of closing\n\t\t\tif (isCreatingPreviewTrack.current || menuStateRef.current !== \"background\") {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// If we're trying to create a preview track, set this to false to display the spinner\n\t\t\t// until we either get a track or know it will fail\n\t\t\tsetFailedTrackCreation(false);\n\t\t\tisCreatingPreviewTrack.current = true;\n\t\t\tif (!localUser) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (cameraEnabled && localDeviceStream) {\n\t\t\t\tsetStreamToUse({ stream: localDeviceStream, isPreview: false });\n\t\t\t\tisCreatingPreviewTrack.current = false;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst previewStream = await localUser.createDevicePreviewStream(camera.deviceId ?? null);\n\t\t\t\tsetStreamToUse({ stream: previewStream, isPreview: true });\n\t\t\t\tif (publishedProcessorRef.current) {\n\t\t\t\t\tawait localUser.applyVideoBackground(publishedProcessorRef.current, previewStream);\n\t\t\t\t}\n\t\t\t\tif (!isMountedRef.current) {\n\t\t\t\t\t// User closed menu (unmounted) before track was created so cleanup\n\t\t\t\t\tstopPreviewStream(previewStream);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\t// If track creation fails, we will use the disabled camera indicator rather than a spinner\n\t\t\t\tsetFailedTrackCreation(true);\n\t\t\t\twarn(\"Preview track creation failed\", error);\n\t\t\t} finally {\n\t\t\t\tisCreatingPreviewTrack.current = false;\n\t\t\t}\n\t\t};\n\t\tif (cameraStatus === DeviceStatus.success) {\n\t\t\t// Set a small timeout to give time to update the menu status so we don't create a preview localDeviceStream during menu closing\n\t\t\tvoid setTimeout(() => void createPreviewTrack(), 50);\n\t\t}\n\t}, [dispatch, cameraStatus, camera, streamToUse, localUser, cameraEnabled, localDeviceStream]);\n\n\tfunction stopPreviewStream(localDeviceStream: ILocalStream): void {\n\t\tvoid localDeviceStream.cleanUp();\n\t}\n\n\t// Cleanup previewVideoTrack on unmount (exiting BG Effects menu)\n\t// If unmount happens before previewVideoTrack is created, this won't cleanup correctly (why we need isMounted in above useEffect)\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tif (isMountedRef.current === false && streamToUse.stream && streamToUse.isPreview) {\n\t\t\t\tstopPreviewStream(streamToUse.stream);\n\t\t\t}\n\t\t};\n\t}, [streamToUse]);\n\n\treturn (\n\t\t
\n\t\t\t{!cameraEnabled && (\n\t\t\t\t\n\t\t\t)}\n\t\t\t\n\t\t
\n\t);\n};\n\nBackgroundSelector.displayName = \"BackgroundSelector\";\n\nexport default BackgroundSelector;\n","/**\n * @copyright Copyright 2021-2024 Epic Systems Corporation\n * @file About EVC Menu Component\n * @author Sasha Chackalackal\n * @module Epic.VideoApp.Components.Copyright.AboutEvc\n */\n\nimport React, { FC } from \"react\";\nimport { useStrings } from \"~/hooks\";\nimport { fullCopyrightNotice, fullCopyrightNoticeAriaLabel } from \"~/utils/copyright\";\nimport styles from \"./Copyright.module.scss\";\n\nenum TokenNames {\n\tsubtitle = \"Subtitle\",\n}\n\nexport const AboutEvcTestIds = {\n\tself: \"AboutEvc\",\n\tnotice: \"AboutEvcNotice\",\n};\n\nconst AboutEvc: FC = () => {\n\t// Copyright notices aren't translated, only the subtitle\n\tconst strings = useStrings(\"AboutEvc\", Object.values(TokenNames));\n\treturn (\n\t\t
\n\t\t\t

{strings[TokenNames.subtitle]}

\n\t\t\t

\n\t\t\t\t{fullCopyrightNotice}\n\t\t\t

\n\t\t
\n\t);\n};\n\nAboutEvc.displayName = \"AboutEvc\";\n\nexport default AboutEvc;\n","/**\n * @copyright Copyright 2023 Epic Systems Corporation\n * @file Button with a switch to handle binary-toggle options in a menu\n * @author Trevor Roussel\n * @module Epic.VideoApp.Components.Utilities.ToggleSwitchButton\n */\n\nimport React, { FC, RefObject, useRef } from \"react\";\nimport Success from \"~/icons/success\";\nimport { resolveClassName } from \"~/utils/className\";\nimport switchStyles from \"../HardwareSetup/Devices/ToggleSwitch.module.scss\";\nimport KeyboardShortcut from \"./KeyboardShortcut\";\nimport styles from \"./ToggleSwitchButton.module.scss\";\n\n/**\n * Core props for ToggleSwitchButton Component\n */\nexport interface IToggleButtonProps extends React.ButtonHTMLAttributes {\n\tonClick: (event?: React.MouseEvent) => void;\n\ttext: string;\n\ton: boolean;\n\tkeyboardShortcut?: string[];\n\tbuttonRef?: RefObject;\n\tforImagePreviewPane?: boolean;\n\tlabelClassName?: string;\n\ttoggleSwitchClassName?: string;\n\tid: string;\n\ttitle?: string;\n}\n\n/**\n * Toggle-able button component that includes a switch indicator and a string label\n * @param props The props\n */\nconst ToggleSwitchButton: FC = (props) => {\n\tconst {\n\t\tonClick,\n\t\ton,\n\t\tkeyboardShortcut,\n\t\tforImagePreviewPane,\n\t\ttext,\n\t\tbuttonRef,\n\t\tlabelClassName,\n\t\tchildren,\n\t\tclassName,\n\t\ttoggleSwitchClassName,\n\t\tid,\n\t\t...buttonProps\n\t} = props;\n\n\tconst buttonClass = resolveClassName(\n\t\tstyles,\n\t\t{\n\t\t\tbaseButton: true,\n\t\t},\n\t\tclassName,\n\t);\n\tconst labelClassFull = resolveClassName(styles, { labelText: true }, labelClassName);\n\tconst toggleIndicatorClassName = resolveClassName(\n\t\tswitchStyles,\n\t\t{ wrapper: true, on },\n\t\ttoggleSwitchClassName,\n\t);\n\n\tconst button = useRef(null);\n\tconst refToButton = buttonRef ?? button;\n\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{/** We don't want the functional elements of the toggle switch, so we just parrot its styling */}\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\n\t\t\t\t\t{keyboardShortcut && (\n\t\t\t\t\t\t\n\t\t\t\t\t)}\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t\t{children}\n\t\t\n\t);\n};\n\nToggleSwitchButton.displayName = \"ToggleSwitchButton\";\n\nexport default ToggleSwitchButton;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file Menu Page for setting patient admit controls\n * @author Will Cooper\n * @module Epic.VideoApp.Components.Participants.Moderation.AdmitOptionsMenu\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback } from \"react\";\nimport ToggleSwitchButton from \"~/components/Utilities/ToggleSwitchButton\";\nimport { useStrings } from \"~/hooks\";\nimport { moderationActions, useModerationState } from \"~/state\";\nimport styles from \"./AdmitMenu.module.scss\";\n\nenum TokenNames {\n\tallowAudio = \"AllowAudio\",\n\tallowVideo = \"AllowVideo\",\n\tallowScreenShare = \"AllowScreenShare\",\n}\n\nexport enum AdmitOptionsMenuTestIds {\n\tself = \"AdmitOptionsMenu\",\n\tallowAudioButton = \"AdmitOptionsMenu-AllowAudioButton\",\n\tallowVideoButton = \"AdmitOptionsMenu-AllowVideoButton\",\n\tallowScreenShareButton = \"AdmitOptionsMenu-AllowScreenShareButton\",\n}\n\n/**\n * AdmitOptionsMenuPage\n */\nconst AdmitOptionsMenuPage: FC = () => {\n\tconst dispatch = useDispatch();\n\tconst audioFlag = useModerationState((selectors) => selectors.getAudioAdmitOption(), []);\n\tconst videoFlag = useModerationState((selectors) => selectors.getVideoAdmitOption(), []);\n\tconst screenShareFlag = useModerationState((selectors) => selectors.getScreenShareAdmitOption(), []);\n\tconst strings = useStrings(\"AdmitOptionsMenu\", Object.values(TokenNames));\n\n\tconst handleAudioChecked = useCallback(() => {\n\t\tdispatch(\n\t\t\tmoderationActions.setAdmitOptions({\n\t\t\t\taudio: !audioFlag,\n\t\t\t\tvideo: videoFlag,\n\t\t\t\tscreenShare: screenShareFlag,\n\t\t\t}),\n\t\t);\n\t}, [audioFlag, dispatch, screenShareFlag, videoFlag]);\n\n\tconst handleVideoChecked = useCallback(() => {\n\t\tdispatch(\n\t\t\tmoderationActions.setAdmitOptions({\n\t\t\t\taudio: audioFlag,\n\t\t\t\tvideo: !videoFlag,\n\t\t\t\tscreenShare: screenShareFlag,\n\t\t\t}),\n\t\t);\n\t}, [audioFlag, dispatch, screenShareFlag, videoFlag]);\n\n\tconst handleScreenShareChecked = useCallback(() => {\n\t\tdispatch(\n\t\t\tmoderationActions.setAdmitOptions({\n\t\t\t\taudio: audioFlag,\n\t\t\t\tvideo: videoFlag,\n\t\t\t\tscreenShare: !screenShareFlag,\n\t\t\t}),\n\t\t);\n\t}, [audioFlag, dispatch, screenShareFlag, videoFlag]);\n\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
\n\t);\n};\n\nAdmitOptionsMenuPage.displayName = \"AdmitOptionsMenuPage\";\n\nexport default AdmitOptionsMenuPage;\n","/**\n * @copyright Copyright 2023-2024 Epic Systems Corporation\n * @file Picture in Picture button\n * @author Arun Vasireddy\n * @module Epic.VideoApp.Components.Header.Buttons.PictureInPictureButton\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback, useContext, useMemo } from \"react\";\nimport ToggleSwitchButton from \"~/components/Utilities/ToggleSwitchButton\";\nimport { useStrings } from \"~/hooks\";\nimport { useGetFormattedHotkeyString } from \"~/hooks/useGetFormattedHotkeyString\";\nimport { pipActions, usePictureInPictureState, useUIState } from \"~/state\";\nimport { resolveClassName } from \"~/utils/className\";\nimport { getPipIcon } from \"~/utils/device\";\nimport { isPictureInPictureSupported } from \"~/utils/pictureInPicture\";\nimport { ParticipantStatusContext } from \"~/web-core/components\";\nimport { useIsStreamEnabled } from \"~/web-core/hooks/useIsStreamEnabled\";\nimport { useStream } from \"~/web-core/hooks/useStream\";\nimport { IStream } from \"~/web-core/interfaces\";\nimport { VideoType } from \"~/web-core/types\";\nimport styles from \"../ControlsHeader.module.scss\";\nimport ControlButton from \"./ControlButton\";\n\nenum TokenNames {\n\tenterPiPHeader = \"EnterPiPHeader\",\n\tleavePiPHeader = \"LeavePiPHeader\",\n\tpipDisabled = \"PiPDisabled\",\n\tenterPiPParticipant = \"EnterPiPParticipant\",\n}\ninterface IProps {\n\t/** Whether or not the button is rendered in the header */\n\tinHeader: boolean;\n\tclassName?: string;\n\tlabelClassName?: string;\n\tuserId?: string;\n\tvideoType?: VideoType;\n\tnoLabel?: boolean;\n\ttoggleSwitchClassName?: string;\n\tstream?: IStream;\n\ttabString?: string;\n}\n\n/**\n * The PictureInPictureButton component\n */\nconst PictureInPictureButton: FC = (props: IProps) => {\n\tconst { inHeader, className, labelClassName, noLabel, toggleSwitchClassName, userId, tabString } = props;\n\tconst pinnedVideo = useUIState((selectors) => selectors.getPinnedVideo(), []);\n\tconst videoType = props.videoType ?? pinnedVideo?.videoType;\n\tconst dispatch = useDispatch();\n\tconst participantInPiP = usePictureInPictureState((selectors) => selectors.getPipVideoID(), []);\n\tconst pipVideoType = usePictureInPictureState((selectors) => selectors.getPipVideoType(), []);\n\tconst isPipTrack = userId === participantInPiP && videoType === pipVideoType;\n\tconst isPiPModeEnabled = usePictureInPictureState((selectors) => selectors.getPipStatus(), []);\n\tconst isHeaderButtonPressed = usePictureInPictureState(\n\t\t(selectors) => selectors.getInActiveParticipantMode(),\n\t\t[],\n\t);\n\tconst { mainParticipant } = useContext(ParticipantStatusContext);\n\tconst mainStream = useStream(mainParticipant ?? undefined, videoType ?? \"camera\");\n\tconst videoStream = props.stream ?? mainStream;\n\n\tconst isStreamEnabled = useIsStreamEnabled(\"video\", videoStream);\n\n\tconst isLocal = useMemo(() => {\n\t\treturn videoStream?.isLocal ?? false;\n\t}, [videoStream]);\n\n\tconst disabled = (inHeader && !isHeaderButtonPressed && !isStreamEnabled) || isLocal;\n\n\tconst strings = useStrings(\"PictureInPictureButton\", Object.values(TokenNames));\n\n\tconst onLaunchPip = useCallback(() => {\n\t\tif (disabled) {\n\t\t\treturn;\n\t\t}\n\t\tlet newId = userId;\n\t\tlet newVideoType = videoType;\n\t\tif (inHeader && mainParticipant) {\n\t\t\tconst mainId = mainParticipant.getUserIdentity();\n\t\t\tif (pinnedVideo?.identity === mainId) {\n\t\t\t\tnewVideoType = pinnedVideo.videoType;\n\t\t\t} else {\n\t\t\t\tnewVideoType = \"camera\";\n\t\t\t}\n\t\t\tnewId = mainId;\n\t\t}\n\t\tdispatch(\n\t\t\tpipActions.togglePiPMode({\n\t\t\t\tvideoID: newId,\n\t\t\t\tvideoType: newVideoType,\n\t\t\t\tactiveMode: inHeader,\n\t\t\t}),\n\t\t);\n\t}, [disabled, dispatch, inHeader, mainParticipant, pinnedVideo, userId, videoType]);\n\n\tconst pipKeyboardShortcut = [\"alt\", \"k\"];\n\tconst tooltipToken = isHeaderButtonPressed ? TokenNames.leavePiPHeader : TokenNames.enterPiPHeader;\n\tconst tooltip = useGetFormattedHotkeyString(strings[tooltipToken], pipKeyboardShortcut);\n\n\t// Validate that the feature in supported by the browser before showing the button\n\tif (!isPictureInPictureSupported()) {\n\t\treturn null;\n\t}\n\tconst buttonClassName = resolveClassName(styles, { controlButton: true, default: true }, className);\n\tconst ariaLabel = tooltip + (tabString ?? \"\");\n\n\treturn inHeader ? (\n\t\t\n\t) : (\n\t\t\n\t);\n};\n\nPictureInPictureButton.displayName = \"PictureInPictureButton\";\n\nexport default PictureInPictureButton;\n","/* */\n\n/**\n * @copyright Copyright 2022 Epic Systems Corporation\n * @file Bell Icon, used for notifications\n * @author Will Cooper\n * @module Epic.VideoApp.Icons.Bell\n */\n\nimport React, { FC, memo } from \"react\";\nimport { IconProps } from \".\";\n\nexport enum BellIconTestIds {\n\tself = \"Bell\",\n}\n\n/**\n * The Bell component\n * @param props The props ;)\n */\nconst Bell: FC = memo((props) => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n});\n\nBell.displayName = \"Bell\";\n\nexport default Bell;\n","/**\n * @copyright Copyright 2022 Epic Systems Corporation\n * @file Indicator with text and an icon that shows a participant has requested access to one of their devices\n * @author Will Cooper\n * @module Epic.VideoApp.Components.Participants.Moderation.ModerationButtons.UnlockDeviceRequestIndicator\n */\n\nimport React, { FC } from \"react\";\nimport { useStrings } from \"~/hooks\";\nimport Bell from \"~/icons/bell\";\nimport styles from \"../ParticipantControlMenu.module.scss\";\n\nenum TokenNames {\n\trequest = \"Requested\",\n}\n\n/**\n * RequestIndicator\n */\nconst UnlockDeviceRequestIndicator: FC = () => {\n\tconst strings = useStrings(\"ParticipantControlMenu\", Object.values(TokenNames));\n\treturn (\n\t\t
\n\t\t\t{strings[TokenNames.request]}\n\t\t\t\n\t\t
\n\t);\n};\n\nUnlockDeviceRequestIndicator.displayName = \"UnlockDeviceRequestIndicator\";\n\nexport default UnlockDeviceRequestIndicator;\n","/**\n * @copyright Copyright 2022-2024 Epic Systems Corporation\n * @file Button for moderators to disable and lock remote video\n * @author Will Cooper & Trevor Roussel\n * @module Epic.VideoApp.Components.Participants.Moderation.ModerationButtons.LockParticipantCameraButton\n */\nimport React, { FC, useCallback } from \"react\";\nimport BaseButton from \"~/components/Utilities/BaseButton\";\nimport ToggleSwitchButton from \"~/components/Utilities/ToggleSwitchButton\";\nimport { useStrings } from \"~/hooks\";\nimport { useSendModeratorAction } from \"~/hooks/messaging/index\";\nimport { useModerationState, useRoomState } from \"~/state\";\nimport { EpicUserType } from \"~/types\";\nimport { getCameraIcon } from \"~/utils/device\";\nimport UnlockDeviceRequestIndicator from \"./UnlockDeviceRequestIndicator\";\n\ninterface IDisableProps {\n\tidentity: string;\n\tclassName: string;\n\tenabled: boolean;\n\tlabelClassName?: string;\n\tinNameBar?: boolean;\n\tuserType?: EpicUserType;\n\ticonClassName?: string;\n\ttoggleSwitchClassName?: string;\n}\n\n/** String tokens used by the LockParticipantCameraButton component */\nenum TokenNames {\n\tallowCamera = \"AllowCamera\",\n\tturnOffCamera = \"TurnOffCamera\",\n\tvideoAriaLabel = \"VideoAriaLabel\",\n}\n\nexport enum LockParticipantCameraButtonTestIds {\n\ttoggleButton = \"LockParticipantCameraButton-ToggleButton\",\n\tbaseButton = \"LockParticipantCameraButton-BaseButton\",\n}\n\nconst LockParticipantCameraButton: FC = (props: IDisableProps) => {\n\tconst {\n\t\tidentity,\n\t\tclassName,\n\t\tinNameBar,\n\t\tlabelClassName,\n\t\tenabled,\n\t\tuserType,\n\t\ticonClassName,\n\t\ttoggleSwitchClassName,\n\t} = props;\n\tconst strings = useStrings(\"LockParticipantCameraButton\", Object.values(TokenNames));\n\n\tconst sendModeratorMessage = useSendModeratorAction();\n\tconst requestInfo = useModerationState(\n\t\t(selectors) => selectors.getParticipantRequest(identity),\n\t\t[identity],\n\t);\n\n\tconst participantModeration = useRoomState(\n\t\t(selectors) => selectors.getParticipantModerationLocks(identity),\n\t\t[identity],\n\t);\n\n\tconst { video: cameraLocked } = participantModeration;\n\tconst { video: videoRequested } = requestInfo;\n\n\tconst onDisableClick = useCallback(\n\t\t(event?: React.MouseEvent) => {\n\t\t\tsendModeratorMessage({ videoLock: !cameraLocked }, identity, true);\n\n\t\t\t// stop propagation to avoid also triggering the onClick\n\t\t\tevent?.stopPropagation();\n\t\t},\n\t\t[cameraLocked, sendModeratorMessage, identity],\n\t);\n\tconst useToggleSwitch = userType !== EpicUserType.emp;\n\n\tconst buttonDisabled = userType === EpicUserType.emp && !enabled;\n\tconst cameraIcon = getCameraIcon(enabled);\n\n\tconst ariaLabel = videoRequested ? strings[TokenNames.videoAriaLabel] : undefined;\n\treturn (\n\t\t// eslint-disable-next-line react/jsx-no-useless-fragment\n\t\t<>\n\t\t\t{useToggleSwitch ? (\n\t\t\t\t\n\t\t\t\t\t{videoRequested && !inNameBar && }\n\t\t\t\t\n\t\t\t) : (\n\t\t\t\t\n\t\t\t\t\t{videoRequested && !inNameBar && }\n\t\t\t\t\n\t\t\t)}\n\t\t\n\t);\n};\n\nLockParticipantCameraButton.displayName = \"LockParticipantCameraButton\";\n\nexport default LockParticipantCameraButton;\n","/**\n * @copyright Copyright 2022-2024 Epic Systems Corporation\n * @file Button for moderators to disable and lock remote audio\n * @author Will Cooper & Trevor Roussel\n * @module Epic.VideoApp.Components.Participants.Moderation.ModerationButtons.LockParticipantMicrophoneButton\n */\nimport React, { FC, useCallback } from \"react\";\nimport BaseButton from \"~/components/Utilities/BaseButton\";\nimport ToggleSwitchButton from \"~/components/Utilities/ToggleSwitchButton\";\nimport { useStrings } from \"~/hooks\";\nimport { useSendModeratorAction } from \"~/hooks/messaging/index\";\nimport { useModerationState, useRoomState } from \"~/state\";\nimport { EpicUserType } from \"~/types\";\nimport { getMicIcon } from \"~/utils/device\";\nimport UnlockDeviceRequestIndicator from \"./UnlockDeviceRequestIndicator\";\n\ninterface IMuteProps {\n\tidentity: string;\n\tclassName: string;\n\tenabled: boolean;\n\tinNameBar?: boolean;\n\tlabelClassName?: string;\n\tuserType?: EpicUserType;\n\ticonClassName?: string;\n\ttoggleSwitchClassName?: string;\n}\n\n/** String tokens used by the LockParticipantMicrophoneButton component */\nenum TokenNames {\n\tallowMic = \"AllowMicrophone\",\n\tturnOffMicrophone = \"TurnOffMicrophone\",\n\taudioAriaLabel = \"AudioAriaLabel\",\n}\n\nexport enum LockParticipantMicrophoneButtonTestIds {\n\ttoggleButton = \"LockParticipantMicrophoneButton-ToggleButton\",\n\tbaseButton = \"LockParticipantMicrophoneButton-BaseButton\",\n}\n\nconst LockParticipantMicrophoneButton: FC = (props: IMuteProps) => {\n\tconst {\n\t\tidentity,\n\t\tclassName,\n\t\tinNameBar,\n\t\tenabled,\n\t\tuserType,\n\t\ticonClassName,\n\t\tlabelClassName,\n\t\ttoggleSwitchClassName,\n\t} = props;\n\tconst strings = useStrings(\"LockParticipantMicrophoneButton\", Object.values(TokenNames));\n\n\tconst sendModeratorMessage = useSendModeratorAction();\n\tconst requestInfo = useModerationState(\n\t\t(selectors) => selectors.getParticipantRequest(identity),\n\t\t[identity],\n\t);\n\n\tconst participantModeration = useRoomState(\n\t\t(selectors) => selectors.getParticipantModerationLocks(identity),\n\t\t[identity],\n\t);\n\n\tconst { audio: micLocked } = participantModeration;\n\tconst { audio: micRequested } = requestInfo;\n\n\tconst onMuteClick = useCallback(\n\t\t(event?: React.MouseEvent) => {\n\t\t\tsendModeratorMessage({ audioLock: !micLocked }, identity, true);\n\n\t\t\t// stop propagation to avoid also triggering the onClick\n\t\t\tevent?.stopPropagation();\n\t\t},\n\t\t[micLocked, sendModeratorMessage, identity],\n\t);\n\n\tconst useToggleSwitch = userType !== EpicUserType.emp;\n\n\tconst buttonDisabled = userType === EpicUserType.emp && !enabled;\n\tconst micIcon = getMicIcon(enabled);\n\n\tconst ariaLabel = micRequested ? strings[TokenNames.audioAriaLabel] : undefined;\n\n\treturn (\n\t\t// eslint-disable-next-line react/jsx-no-useless-fragment\n\t\t<>\n\t\t\t{useToggleSwitch ? (\n\t\t\t\t\n\t\t\t\t\t{micRequested && !inNameBar && }\n\t\t\t\t\n\t\t\t) : (\n\t\t\t\t\n\t\t\t\t\t{micRequested && !inNameBar && }\n\t\t\t\t\n\t\t\t)}\n\t\t\n\t);\n};\n\nLockParticipantMicrophoneButton.displayName = \"LockParticipantMicrophoneButton\";\n\nexport default LockParticipantMicrophoneButton;\n","/**\n * @copyright Copyright 2023-2024 Epic Systems Corporation\n * @file Button for moderators to allow or block screen sharing access\n * @author Trevor Roussel\n * @module Epic.VideoApp.Components.Participants.Moderation.ModerationButtons.LockParticipantScreenShareButton\n */\nimport React, { FC, useCallback } from \"react\";\nimport BaseButton from \"~/components/Utilities/BaseButton\";\nimport ToggleSwitchButton from \"~/components/Utilities/ToggleSwitchButton\";\nimport { useStrings } from \"~/hooks\";\nimport { useSendModeratorAction } from \"~/hooks/messaging/index\";\nimport { useModerationState, useRoomState } from \"~/state\";\nimport { EpicUserType } from \"~/types\";\nimport { getScreenShareIcon } from \"~/utils/device\";\nimport UnlockDeviceRequestIndicator from \"./UnlockDeviceRequestIndicator\";\n\ninterface IDisableProps {\n\tidentity: string;\n\tclassName: string;\n\tenabled: boolean;\n\tlabelClassName?: string;\n\tinNameBar?: boolean;\n\tuserType?: EpicUserType;\n\ticonClassName?: string;\n\ttoggleSwitchClassName?: string;\n}\n\n/** String tokens used by the ParticipantControlMenu -> LockParticipantScreenShareButton component */\nenum TokenNames {\n\tallowShare = \"AllowShare\",\n\tdeviceCannotShare = \"DeviceCannotShare\",\n\tturnOffShare = \"TurnOffShare\",\n\tshareBlocked = \"ShareBlocked\",\n}\n\nexport enum LockParticipantScreenShareButtonTestIds {\n\ttoggleButton = \"LockParticipantScreenShareButton-ToggleButton\",\n\tbaseButton = \"LockParticipantScreenShareButton-BaseButton\",\n}\n\nconst LockParticipantScreenShareButton: FC = (props: IDisableProps) => {\n\tconst {\n\t\tclassName,\n\t\tlabelClassName,\n\t\tenabled,\n\t\tidentity,\n\t\tuserType,\n\t\ticonClassName,\n\t\ttoggleSwitchClassName,\n\t\tinNameBar,\n\t} = props;\n\tconst strings = useStrings(\"LockParticipantScreenShareButton\", Object.values(TokenNames));\n\n\tconst sendModeratorMessage = useSendModeratorAction();\n\n\tconst participantModeration = useRoomState(\n\t\t(selectors) => selectors.getParticipantModerationLocks(identity),\n\t\t[identity],\n\t);\n\tconst requestInfo = useModerationState(\n\t\t(selectors) => selectors.getParticipantRequest(identity),\n\t\t[identity],\n\t);\n\tconst screenShareRequested = requestInfo.screenShare;\n\n\tconst participantInfo = useRoomState((selectors) => selectors.getParticipantInfo(identity), [identity]);\n\tconst participantCanShare = participantInfo?.deviceSupportsScreenShare;\n\tconst participantShareAllowed = participantInfo?.screenShareAllowed;\n\n\tconst { screenShare: screenShareLock } = participantModeration;\n\n\t// Only show the switch button for participants who can be moderated and have screen share capabilities\n\tconst showSwitchButton = participantCanShare && participantShareAllowed && userType !== EpicUserType.emp;\n\n\tconst onDisableClick = useCallback(\n\t\t(event?: React.MouseEvent) => {\n\t\t\tsendModeratorMessage({ screenShareLock: !screenShareLock }, identity, true);\n\n\t\t\t// stop propagation to avoid also triggering the onClick\n\t\t\tevent?.stopPropagation();\n\t\t},\n\t\t[sendModeratorMessage, screenShareLock, identity],\n\t);\n\n\t// Show a different string based on configuration support for screen share and device capabilities\n\tconst shareText = !participantShareAllowed\n\t\t? strings[TokenNames.shareBlocked]\n\t\t: participantCanShare\n\t\t? strings[TokenNames.turnOffShare]\n\t\t: strings[TokenNames.deviceCannotShare];\n\n\t// If the user's device doesn't support sharing or they are an emp-type user not currently sharing, then disable the button\n\tconst disableButton =\n\t\t!participantCanShare || !participantShareAllowed || (userType === EpicUserType.emp && !enabled);\n\n\t// In the header, we display the 'start' icon when the user is not currently sharing,\n\t// but in this moderation context, we want to display the 'stop' icon and vice versa\n\t// If the user cannot share due to device compatibility or config, show the lock icon\n\tconst screenShareIcon = getScreenShareIcon(\n\t\t!enabled,\n\t\tscreenShareLock || !participantShareAllowed || !participantCanShare,\n\t);\n\treturn (\n\t\t// eslint-disable-next-line react/jsx-no-useless-fragment\n\t\t<>\n\t\t\t{showSwitchButton ? (\n\t\t\t\t\n\t\t\t\t\t{screenShareRequested && !inNameBar && }\n\t\t\t\t\n\t\t\t) : (\n\t\t\t\t\n\t\t\t)}\n\t\t\n\t);\n};\n\nLockParticipantScreenShareButton.displayName = \"LockParticipantScreenShareButton\";\n\nexport default LockParticipantScreenShareButton;\n","/**\n * @copyright Copyright 2022 Epic Systems Corporation\n * @file Moderator menu button for performing pinning\n * @author Will Cooper\n * @module Epic.VideoApp.Components.Participants.Moderation.ModerationButtons.PinButton\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback } from \"react\";\nimport ToggleSwitchButton from \"~/components/Utilities/ToggleSwitchButton\";\nimport { useStrings } from \"~/hooks\";\nimport { uiActions, useUIState } from \"~/state\";\nimport { VideoType } from \"~/web-core/types\";\n\ninterface IPinProps {\n\tidentity: string;\n\tclassName: string;\n\tlabelClassName?: string;\n\tvideoType?: VideoType;\n\ttoggleSwitchClassName?: string;\n}\n\nexport enum PinButtonTestIds {\n\tself = \"PinButton\",\n}\n\n/** String tokens used by the ParticipantControlMenu -> PinButton component */\nenum TokenNames {\n\tpinParticipant = \"PinParticipant\",\n}\n\nconst PinButton: FC = (props: IPinProps) => {\n\tconst { identity, videoType = \"camera\", className, labelClassName, toggleSwitchClassName } = props;\n\n\tconst dispatch = useDispatch();\n\tconst pinnedVideo = useUIState((selectors) => selectors.getPinnedVideo(), []);\n\tconst strings = useStrings(\"ParticipantControlMenu\", Object.values(TokenNames));\n\n\tconst isPinned = pinnedVideo?.identity === identity && pinnedVideo?.videoType === videoType;\n\n\tconst pinText = strings[TokenNames.pinParticipant];\n\n\tconst onPinClick = useCallback(\n\t\t(event?: React.MouseEvent) => {\n\t\t\tdispatch(\n\t\t\t\tuiActions.toggleVideoPinned({\n\t\t\t\t\tupdateSource: \"Default\",\n\t\t\t\t\tpinnedVideo: { identity: identity, videoType: videoType },\n\t\t\t\t}),\n\t\t\t);\n\t\t\tevent?.preventDefault();\n\t\t},\n\t\t[dispatch, identity, videoType],\n\t);\n\n\treturn (\n\t\t\n\t);\n};\n\nPinButton.displayName = \"PinButton\";\n\nexport default PinButton;\n","/**\n * @copyright Copyright 2022 Epic Systems Corporation\n * @file Moderator button to remove a user from the call\n * @author Will Cooper\n * @module Epic.VideoApp.Components.Participants.Moderation.ModerationButtons.RemoveParticipantButton\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback } from \"react\";\nimport BaseButton from \"~/components/Utilities/BaseButton\";\nimport { useStrings } from \"~/hooks\";\nimport Error from \"~/icons/error\";\nimport { alertActions, useRoomState } from \"~/state\";\nimport { AlertType, EpicUserType } from \"~/types\";\nimport { stringFormat } from \"~/utils/strings\";\n\ninterface IRemoveProps {\n\tidentity: string;\n\tguid: string;\n\tclassName: string;\n\tdisplayName: string;\n\tlabelClassName?: string;\n\ticonClassName?: string;\n}\n\n/** String tokens used by the ParticipantControlMenu -> RemoveParticipantButton component */\nenum TokenNames {\n\tremoveParticipant = \"RemoveParticipant\",\n\tremoveAlertText = \"RemoveAlertText\",\n\tremoveAlertTextCareTeam = \"RemoveAlertTextCareTeam\",\n\tremove = \"Remove\",\n\tcancel = \"Cancel\",\n}\n\nconst RemoveParticipantButton: FC = (props: IRemoveProps) => {\n\tconst { identity, guid, className, displayName, labelClassName, iconClassName } = props;\n\n\tconst dispatch = useDispatch();\n\tconst strings = useStrings(\"ParticipantControlMenu\", Object.values(TokenNames));\n\tconst remoteUserType = useRoomState((selectors) => selectors.getRemoteUserType(identity), [identity]);\n\n\tconst onRemoveClick = useCallback(\n\t\t(event?: React.MouseEvent) => {\n\t\t\t// generate alert pop-up to confirm that the participant should be removed. That will be the source of the web request to remove them\n\t\t\tconst alertToken =\n\t\t\t\tremoteUserType === EpicUserType.emp\n\t\t\t\t\t? TokenNames.removeAlertTextCareTeam\n\t\t\t\t\t: TokenNames.removeAlertText;\n\t\t\tdispatch(\n\t\t\t\talertActions.postChoiceAlert({\n\t\t\t\t\talertData: { identity, guid },\n\t\t\t\t\ttype: AlertType.removeParticipant,\n\t\t\t\t\tmessage: stringFormat(strings[alertToken], displayName),\n\t\t\t\t\tconfirmText: strings[TokenNames.remove],\n\t\t\t\t\tconfirmHotkey: \"r\",\n\t\t\t\t\tcancelText: strings[TokenNames.cancel],\n\t\t\t\t\tcancelHotkey: \"c\",\n\t\t\t\t}),\n\t\t\t);\n\n\t\t\t// stop propagation to avoid also triggering the onClick\n\t\t\tevent?.stopPropagation();\n\t\t},\n\t\t[dispatch, displayName, guid, identity, remoteUserType, strings],\n\t);\n\n\treturn (\n\t\t\n\t);\n};\n\nRemoveParticipantButton.displayName = \"RemoveParticipantButton\";\n\nexport default RemoveParticipantButton;\n","/**\n * @copyright Copyright 2023-2024 Epic Systems Corporation\n * @file Menu for showing all possible per participant actions\n * @author Will Cooper\n * @module Epic.VideoApp.Components.Participants.Moderation.ParticipantControlMenu\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport { FC, default as React, useContext, useEffect, useRef } from \"react\";\nimport PictureInPictureButton from \"~/components/Header/Buttons/PictureInPictureButton\";\nimport { useWindowSize } from \"~/hooks\";\nimport { uiActions, useRoomState, useUIState, useUserState } from \"~/state\";\nimport { MinimumScreenHeightForHeader } from \"~/types\";\nimport { resolveClassName } from \"~/utils/className\";\nimport { isPictureInPictureSupported } from \"~/utils/pictureInPicture\";\nimport { VideoSessionContext } from \"~/web-core/components\";\nimport { IEVCParticipantConnectionEvent } from \"~/web-core/events\";\nimport { useIsStreamEnabled } from \"~/web-core/hooks/useIsStreamEnabled\";\nimport { useStream } from \"~/web-core/hooks/useStream\";\nimport { IUser } from \"~/web-core/interfaces\";\nimport { VideoType } from \"~/web-core/types\";\nimport { NameBarLocation } from \"../ParticipantNameBar\";\nimport LockParticipantCameraButton from \"./ModerationButtons/LockParticipantCameraButton\";\nimport LockParticipantMicrophoneButton from \"./ModerationButtons/LockParticipantMicrophoneButton\";\nimport LockParticipantScreenShareButton from \"./ModerationButtons/LockParticipantScreenShareButton\";\nimport PinButton from \"./ModerationButtons/PinButton\";\nimport RemoveParticipantButton from \"./ModerationButtons/RemoveParticipantButton\";\nimport styles from \"./ParticipantControlMenu.module.scss\";\n\n/**\n * Props for ParticipantControlMenu Component\n */\nexport interface IParticipantControlMenuProps {\n\tname?: string;\n\tparticipant?: IUser;\n\tvideoType?: VideoType;\n\tinNameBar?: boolean;\n\tlocation?: NameBarLocation;\n}\n\nexport enum ParticipantControlMenuTestIds {\n\tself = \"ParticipantControlMenu\",\n\tpictureInPictureButton = \"PictureInPictureButton\",\n\tlockParticipantCameraButton = \"LockParticipantCameraButton\",\n\tlockParticipantMicrophoneButton = \"LockParticipantMicrophoneButton\",\n\tlockParticipantScreenShareButton = \"LockParticipantScreenShareButton\",\n\tpinButton = \"PinButton\",\n\tremoveParticipantButton = \"RemoveParticipantButton\",\n}\n\n/**\n * The ParticipantControlMenu component\n * @param props The props ;)\n */\nconst ParticipantControlMenu: FC = (props) => {\n\tconst { videoType, name, inNameBar, location, participant } = props;\n\tconst menuData = useUIState((selectors) => selectors.getDynamicMenuData(), []);\n\tconst { session } = useContext(VideoSessionContext);\n\tconst displayName = name || menuData?.title || \"\";\n\n\t// Wrap this in a ref to prevent null participant when the collapse component is closing\n\tconst participantRef = useRef(participant || menuData?.participant);\n\tconst identity = participantRef.current?.getUserIdentity() ?? \"\";\n\tconst guid = participantRef.current?.getUserGuid() ?? \"\";\n\tconst participantInfo = useRoomState((selectors) => selectors.getParticipantInfo(identity), [identity]);\n\tconst userType = participantInfo?.userType;\n\n\tconst dispatch = useDispatch();\n\n\tconst deviceStream = useStream(participantRef.current, \"camera\");\n\tconst isMicEnabled = useIsStreamEnabled(\"audio\", deviceStream);\n\tconst isVideoEnabled = useIsStreamEnabled(\"video\", deviceStream);\n\n\tconst screenShareStream = useStream(participantRef.current, \"screen\");\n\tconst isScreenShareEnabled = useIsStreamEnabled(\"video\", screenShareStream);\n\n\t// Use shared state as source of truth for participant enabled/disabled status\n\tconst canModerate = useUserState((selectors) => selectors.getUserPermission(\"canModerateVisit\"), []);\n\n\t// hook to get the height of the window to hide the \"pin\" button from the participant menu for small resolutions\n\tconst { height } = useWindowSize();\n\n\tuseEffect(() => {\n\t\tif (!session || !canModerate) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Clean-up menu data when a participant disconnects\n\t\tconst handleParticipantDisconnected = (\n\t\t\targs: IEVCParticipantConnectionEvent<\"participantDisconnected\">,\n\t\t): void => {\n\t\t\tif (menuData && args.participant.getUserIdentity() === menuData.participant.getUserIdentity()) {\n\t\t\t\tdispatch(uiActions.toggleVisibleMenu({ menu: null }));\n\t\t\t}\n\t\t};\n\n\t\tsession.on(\"participantDisconnected\", handleParticipantDisconnected);\n\n\t\treturn (): void => {\n\t\t\tsession.off(\"participantDisconnected\", handleParticipantDisconnected);\n\t\t};\n\t}, [canModerate, dispatch, menuData, session]);\n\n\t// If we get a new valid participant, update it in the ref\n\tuseEffect(() => {\n\t\tconst participantToUse = participant || menuData?.participant;\n\t\tif (participantToUse !== undefined) {\n\t\t\tparticipantRef.current = participantToUse;\n\t\t}\n\t}, [participant, menuData]);\n\n\tconst menuClass = resolveClassName(styles, {\n\t\tmoderatorMenu: true,\n\t\tmenu: !inNameBar,\n\t\treversed: inNameBar,\n\t});\n\tconst buttonClass = resolveClassName(styles, {\n\t\tmoderatorRow: true,\n\t\tmenu: !inNameBar,\n\t\tstrip: inNameBar && location === \"participant-strip\",\n\t});\n\n\tconst labelClassName = resolveClassName(styles, {\n\t\tstripText: inNameBar && location === \"participant-strip\",\n\t\tlabelText: true,\n\t});\n\t// Handle icon and switch styling / resizing from this parent component instead of from the subcomponents\n\tconst iconClassName = styles[\"buttonIcon\"];\n\tconst toggleSwitchClassName = styles[\"switch\"];\n\n\t// Verify we have permission to show this menu as a fallback\n\tif (\n\t\t!canModerate &&\n\t\t!(\n\t\t\tisPictureInPictureSupported() &&\n\t\t\t((isVideoEnabled && videoType === \"camera\") || (isScreenShareEnabled && videoType === \"screen\"))\n\t\t)\n\t) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t
\n\t\t\t
\n\t\t\t\t{height > MinimumScreenHeightForHeader && (\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t\t{isPictureInPictureSupported() &&\n\t\t\t\t\t((isVideoEnabled && videoType === \"camera\") ||\n\t\t\t\t\t\t(isScreenShareEnabled && videoType === \"screen\")) &&\n\t\t\t\t\tinNameBar && (\n\t\t\t\t\t\t\n\t\t\t\t\t)}\n\t\t\t
\n\t\t\t{canModerate && (\n\t\t\t\t<>\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\n\t\t\t)}\n\t\t
\n\t);\n};\n\nParticipantControlMenu.displayName = \"ParticipantControlMenu\";\n\nexport default ParticipantControlMenu;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file Hook to retrieve a specific type of user from state\n * @author Will Cooper\n * @module Epic.VideoApp.Components.Participants.Hooks.UseParticipantsOfType\n */\n\nimport { useRoomState } from \"~/state\";\nimport { EpicUserType } from \"~/types/user\";\nimport { IUser } from \"~/web-core/interfaces\";\n\n/**\n * Get all of the participants for the current room that match a specific user type\n * @returns an object containing all room participants and their display names\n */\nexport function useParticipantsOfType(participants: IUser[], userTypes: EpicUserType[]): IUser[] {\n\t// check shared state for any shared user type info from data track messaging\n\tconst identitiesOfType = useRoomState((selectors) => selectors.getAllParticipantsByType(userTypes), []);\n\n\tif (!identitiesOfType || identitiesOfType.length <= 0) {\n\t\treturn [];\n\t}\n\treturn buildParticipantList(identitiesOfType, participants);\n}\n\nfunction buildParticipantList(identities: string[], participants: IUser[]): IUser[] {\n\treturn participants.filter((current) => identities.some((id) => id === current.getUserIdentity()));\n}\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file hook to get the name of a participant\n * @author Colin Walters\n * @module Epic.VideoApp.Components.Participants.Hooks.UseParticipantName\n */\n\nimport { useContext, useMemo } from \"react\";\nimport { INamelessParticipantData } from \"~/components/VideoCall/hooks/useNamelessParticipantData\";\nimport { useStrings } from \"~/hooks\";\nimport { useRoomState } from \"~/state\";\nimport { stringFormat } from \"~/utils/strings\";\nimport { ParticipantDataContext } from \"~/web-core/components\";\nimport { IUser } from \"~/web-core/interfaces\";\n\n/**\n * Object containing all the default name data for the current call\n */\ninterface IParticipantDefaultNames {\n\t/** Map of participant identity to defaulted name (from video call context) */\n\tdefaultNames: Record;\n\n\t/** Default name to use if a name isn't found in any of the above (from useStrings) */\n\tdefaultName: string;\n}\n\nenum TokenNames {\n\tgenericName = \"DefaultName_Generic\",\n\tnumberedName = \"DefaultName_Numbered\",\n}\n\n/**\n * Get the display name of a participant to be used in call\n * @param participant call participant to get display name of\n * @param isLocal whether or not the participant is the local participant\n * @returns the display name of the participant, or an empty string if the current participant is not found\n */\nexport function useParticipantName(participant: IUser | null, isLocal?: boolean): string {\n\tconst identity = participant?.getUserIdentity() ?? \"\";\n\tconst localDisplayName = useRoomState((selectors) => selectors.getLocalDisplayName(), []);\n\tconst participantInfo = useRoomState((selectors) => selectors.getParticipantInfo(identity), [identity]);\n\tconst remoteDisplayName = participantInfo?.displayName;\n\tconst { namelessParticipantData } = useContext(ParticipantDataContext);\n\n\tconst actualName = isLocal ? localDisplayName : remoteDisplayName;\n\n\tconst strings = useStrings(\"useParticipantName\", Object.values(TokenNames), [], \"en-us\");\n\tconst allDefaultNames = useMemo(\n\t\t() =>\n\t\t\tgetAllDefaultParticipantNames(\n\t\t\t\tnamelessParticipantData,\n\t\t\t\tstrings[TokenNames.numberedName],\n\t\t\t\tstrings[TokenNames.genericName],\n\t\t\t),\n\t\t[namelessParticipantData, strings],\n\t);\n\n\tconst displayName = useMemo(() => {\n\t\tif (!participant) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tif (actualName) {\n\t\t\treturn actualName;\n\t\t}\n\n\t\treturn getParticipantDefaultName(participant?.getUserIdentity() ?? \"\", allDefaultNames);\n\t}, [actualName, allDefaultNames, participant]);\n\n\treturn displayName;\n}\n\n/**\n * Get all possible default name data for the current call.\n * @param namelessParticipantData nameless participant data from the call context\n * @param numberedDefaultName string to use as the numbered default name\n * @param genericDefaultName string to use as the generic default name\n * @returns object containing all default name data for the current call\n */\nfunction getAllDefaultParticipantNames(\n\tnamelessParticipantData: INamelessParticipantData,\n\tnumberedDefaultName: string,\n\tgenericDefaultName: string,\n): IParticipantDefaultNames {\n\tconst defaultNames: Record = {};\n\n\tnamelessParticipantData.idList.forEach((identity: string, index: number) => {\n\t\tdefaultNames[identity] = stringFormat(numberedDefaultName, index + 1);\n\t});\n\n\treturn { defaultNames, defaultName: genericDefaultName };\n}\n\n/**\n * Helper function used to resolve a participant's default display name\n * @param participantIdentity the local or remote participant identity\n * @param names object containing all name data for the current call\n * @returns the name that should be defaulted for the user\n */\nfunction getParticipantDefaultName(participantIdentity: string, names: IParticipantDefaultNames): string {\n\tconst { defaultNames, defaultName } = names;\n\treturn defaultNames[participantIdentity] || defaultName;\n}\n","/**\n * @copyright Copyright 2022 Epic Systems Corporation\n * @file ParticipantList menu header buttons for allowing access to audio and performing mute all functions\n * @author Will Cooper\n * @module Epic.VideoApp.Components.Participants.ParticipantList.ParticipantActionHeader\n */\n\nimport React, { FC, useCallback } from \"react\";\nimport ActionButton from \"~/components/Utilities/ActionButton\";\nimport { IBasicAuditEvent, useAuditFeatureUse, useStrings } from \"~/hooks\";\nimport { useSendModeratorAction } from \"~/hooks/messaging\";\nimport { EventType, IParticipantWithName } from \"~/types\";\nimport styles from \"./ParticipantList.module.scss\";\n\ninterface IProps {\n\tsortedParticipants: IParticipantWithName[];\n}\n\n/** String tokens used by the ParticipantMenuSection -> ParticipantActionHeader component */\nexport enum TokenNames {\n\tallowAll = \"AllowAll\",\n\tdisableAll = \"DisableAll\",\n\tallowAllAriaLabel = \"AllowAllAriaLabel\",\n\tdisableAllAriaLabel = \"DisableAllAriaLabel\",\n}\n\n/**\n * The ParticipantActionHeader component\n */\nconst ParticipantActionHeader: FC = (props) => {\n\tconst { sortedParticipants } = props;\n\tconst sendModeratorMessage = useSendModeratorAction();\n\tconst auditFeatureUse = useAuditFeatureUse();\n\n\tconst strings = useStrings(\"ParticipantMenuSection\", Object.values(TokenNames));\n\n\tconst onDisableClick = useCallback(() => {\n\t\tconst events: IBasicAuditEvent[] = [];\n\t\tsortedParticipants.forEach((participant) => {\n\t\t\tsendModeratorMessage({ audioLock: true }, participant.participant.getUserIdentity());\n\t\t\tevents.push({\n\t\t\t\tfeature: EventType.microphoneLocked,\n\t\t\t\ttargetParticipantId: participant.participant.getUserIdentity(),\n\t\t\t});\n\t\t});\n\n\t\tvoid auditFeatureUse(events);\n\t}, [sortedParticipants, auditFeatureUse, sendModeratorMessage]);\n\n\tconst onAllowClick = useCallback(() => {\n\t\tconst events: IBasicAuditEvent[] = [];\n\n\t\tsortedParticipants.forEach((participant) => {\n\t\t\tsendModeratorMessage({ audioLock: false }, participant.participant.getUserIdentity());\n\t\t\tevents.push({\n\t\t\t\tfeature: EventType.microphoneUnlocked,\n\t\t\t\ttargetParticipantId: participant.participant.getUserIdentity(),\n\t\t\t});\n\t\t});\n\n\t\tvoid auditFeatureUse(events);\n\t}, [sortedParticipants, auditFeatureUse, sendModeratorMessage]);\n\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t\t{strings[TokenNames.disableAll]}\n\t\t\t\n\t\t\t\n\t\t\t\t{strings[TokenNames.allowAll]}\n\t\t\t\n\t\t
\n\t);\n};\n\nParticipantActionHeader.displayName = \"ParticipantActionHeader\";\n\nexport default ParticipantActionHeader;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file pin icon\n * @author Colin Walters\n * @module Epic.VideoApp.Icons.Pin\n */\n\nimport React, { FC, memo } from \"react\";\nimport { IconProps } from \".\";\n\nexport enum PinTestIds {\n\tself = \"Pin\",\n}\n\n/**\n * The Pin component\n * @param props The props ;)\n */\nconst Pin: FC = memo((props) => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n});\n\nPin.displayName = \"Pin\";\n\nexport default Pin;\n","/**\n * @copyright Copyright 2022 Epic Systems Corporation\n * @file Helper component to manage which icons to display in the Participant List for a given participant\n * @author Will Cooper\n * @module Epic.VideoApp.Components.Participants.ParticipantList.ParticipantIcons\n */\n\nimport React, { FC } from \"react\";\nimport Bell from \"~/icons/bell\";\nimport { useModerationState, useUserState } from \"~/state\";\nimport { IStreamStatus } from \"~/types\";\nimport { getCameraIcon, getMicIcon, getScreenShareIcon } from \"~/utils/device\";\nimport { IUser } from \"~/web-core/interfaces\";\nimport styles from \"./ParticipantList.module.scss\";\n\ninterface IProps {\n\tparticipant: IUser;\n\tstreamStatus: { audio: IStreamStatus; video: IStreamStatus; screenShare: IStreamStatus };\n}\n\n/**\n * The ParticipantIcons component\n */\nconst ParticipantIcons: FC = (props) => {\n\tconst { participant, streamStatus } = props;\n\tconst { audio: micStatus, video: camStatus, screenShare: screenShareStatus } = streamStatus;\n\tconst canModerate = useUserState((selectors) => selectors.getUserPermission(\"canModerateVisit\"), []);\n\tconst requestInfo = useModerationState(\n\t\t(selectors) => selectors.getParticipantRequest(participant.getUserIdentity()),\n\t\t[participant.getUserIdentity()],\n\t);\n\n\tconst requested = requestInfo.audio || requestInfo.video || requestInfo.screenShare;\n\n\tconst cameraIcon = getCameraIcon(camStatus.enabled, camStatus.locked);\n\tconst micIcon = getMicIcon(micStatus.enabled, micStatus.locked);\n\t// In the header, we display the 'start' icon when the user is not currently sharing,\n\t// but in this moderation context, we want to display the 'stop' icon and vice versa\n\tconst screenShareIcon = getScreenShareIcon(!screenShareStatus.enabled, screenShareStatus.locked);\n\n\t// For moderators, show a request/raise hand icon for any locked out devices\n\t// Also show whether the devices are on or off\n\treturn (\n\t\t
\n\t\t\t{canModerate && requested && (\n\t\t\t\t\n\t\t\t)}\n\t\t\t{!micStatus.enabled && React.createElement(micIcon)}\n\t\t\t{!camStatus.enabled && React.createElement(cameraIcon)}\n\t\t\t{(screenShareStatus.enabled || screenShareStatus.locked) && React.createElement(screenShareIcon)}\n\t\t
\n\t);\n};\n\nParticipantIcons.displayName = \"ParticipantIcons\";\n\nexport default ParticipantIcons;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file row in the participant list\n * @author Colin Walters\n * @module Epic.VideoApp.Components.Participants.ParticipantList.ParticipantRow\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback } from \"react\";\nimport { useStrings } from \"~/hooks\";\nimport Chevron from \"~/icons/chevron\";\nimport Pin from \"~/icons/pin\";\nimport { uiActions, useModerationState, useRoomState, useUIState, useUserState } from \"~/state\";\nimport { IStreamStatus } from \"~/types\";\nimport { resolveClassName } from \"~/utils/className\";\nimport { isMobile } from \"~/utils/os\";\nimport { SharedStringTokens, stringFormat } from \"~/utils/strings\";\nimport { useIsScreenShareSupported } from \"~/web-core/hooks/useIsScreenShareSupported\";\nimport { useIsStreamEnabled } from \"~/web-core/hooks/useIsStreamEnabled\";\nimport { useStream } from \"~/web-core/hooks/useStream\";\nimport { IUser } from \"~/web-core/interfaces\";\nimport ParticipantIcons from \"./ParticipantIcons\";\nimport styles from \"./ParticipantList.module.scss\";\n\n/**\n * Props for ParticipantRow Component\n */\ninterface IProps {\n\t/** Participant to show in the row */\n\tparticipant: IUser;\n\n\t/** Participant's display name */\n\tdisplayName: string;\n\n\t/** Whether or not this participant is local */\n\tisLocal?: boolean;\n}\n\n/** String tokens used by the ParticipantRow component */\nexport enum TokenNames {\n\tclickToPin = \"ClickToPin\",\n\tclickToUnPin = \"ClickToUnPin\",\n\tmoderatorAction = \"ModeratorAction\",\n\tparticipantRequested = \"ParticipantRequested\",\n\tmicDisabled = \"MicDisabled\",\n\tmicLocked = \"MicLocked\",\n\tcamDisabled = \"CamDisabled\",\n\tcamLocked = \"CamLocked\",\n\tscreenEnabled = \"ScreenEnabled\",\n\tscreenLocked = \"ScreenLocked\",\n}\n\nexport enum ParticipantRowTestIds {\n\trowButton = \"ParticipantRowButton\",\n\tnameLabel = \"ParticipantRowNameLabel\",\n}\n\n/**\n * The ParticipantRow component\n * @param props The props ;)\n */\nconst ParticipantRow: FC = (props) => {\n\tconst { participant, displayName, isLocal } = props;\n\tconst pinnedVideo = useUIState((selectors) => selectors.getPinnedVideo(), []);\n\tconst isPinned = pinnedVideo?.identity === participant.getUserIdentity();\n\tconst dispatch = useDispatch();\n\tconst canModerate = useUserState((selectors) => selectors.getUserPermission(\"canModerateVisit\"), []);\n\tconst requestInfo = useModerationState(\n\t\t(selectors) => selectors.getParticipantRequest(participant.getUserIdentity()),\n\t\t[participant.getUserIdentity()],\n\t);\n\n\tconst strings = useStrings(\"ParticipantRow\", Object.values(TokenNames), [\n\t\tSharedStringTokens.localParticipantIndicator,\n\t]);\n\n\tconst nameLabel = isLocal\n\t\t? stringFormat(strings[SharedStringTokens.localParticipantIndicator], displayName)\n\t\t: displayName;\n\n\t// Get stream status here to construct screen reader content and then pass to ParticipantIcons to render icons\n\tconst deviceStream = useStream(participant, \"camera\");\n\tconst shareStream = useStream(participant, \"screen\");\n\n\tconst isMicEnabled = useIsStreamEnabled(\"audio\", deviceStream);\n\tconst isCameraEnabled = useIsStreamEnabled(\"video\", deviceStream);\n\tconst isScreenShareEnabled = useIsStreamEnabled(\"video\", shareStream);\n\n\t// Fetch both remote and participant locks. Since hooks can't be called conditionally, we'll need to cover both cases.\n\tconst [remoteParticipantLocks, remoteParticipantInfo] = useRoomState(\n\t\t(selectors) => [\n\t\t\tselectors.getParticipantModerationLocks(participant.getUserIdentity()),\n\t\t\tselectors.getParticipantInfo(participant.getUserIdentity()),\n\t\t],\n\t\t[participant.getUserIdentity() ?? \"\"],\n\t);\n\n\tconst remoteParticipantCanShare =\n\t\tremoteParticipantInfo?.deviceSupportsScreenShare && remoteParticipantInfo.screenShareAllowed;\n\n\tconst [localParticipantLocks, localParticipantShareAllowed] = useUserState(\n\t\t(selectors) => [selectors.getModerationLocks(), selectors.getUserPermission(\"canShareScreen\")],\n\t\t[],\n\t);\n\tconst localParticipantCanShare = useIsScreenShareSupported() && localParticipantShareAllowed;\n\n\t// We will display the lock state if the user is a moderator or is a local user, otherwise we just show enabled/disabled state\n\tconst micLock = isLocal ? localParticipantLocks.audio : canModerate && remoteParticipantLocks.audio;\n\tconst camLock = isLocal ? localParticipantLocks.video : canModerate && remoteParticipantLocks.video;\n\n\tlet screenShareLock: boolean;\n\tif (isLocal) {\n\t\t// For local users, do not show locks if screen share is not supported on device since it is not actionable and could be confusing\n\t\tscreenShareLock = localParticipantCanShare && localParticipantLocks.screenShare;\n\t} else {\n\t\t// For remote moderators, additionally show a lock if screen share is not supported since the mod menu will give context to why it is unavailable\n\t\tscreenShareLock = canModerate && (!remoteParticipantCanShare || remoteParticipantLocks.screenShare);\n\t}\n\n\tconst micStatus: IStreamStatus = { enabled: isMicEnabled, locked: micLock };\n\tconst camStatus: IStreamStatus = { enabled: isCameraEnabled, locked: camLock };\n\tconst screenShareStatus: IStreamStatus = { enabled: isScreenShareEnabled, locked: screenShareLock };\n\n\tconst accessibleStatusLabel = constructDeviceStatusString(\n\t\tstrings,\n\t\tmicStatus,\n\t\tcamStatus,\n\t\tscreenShareStatus,\n\t);\n\n\tconst onClick = useCallback(() => {\n\t\t// If we have access to moderator controls, then it's a navigation button to the control sub menu\n\t\tif (canModerate && !isLocal) {\n\t\t\tdispatch(\n\t\t\t\tuiActions.toggleVisibleMenu({\n\t\t\t\t\tmenu: \"participantOptions\",\n\t\t\t\t\tmenuData: {\n\t\t\t\t\t\ttitle: nameLabel,\n\t\t\t\t\t\tparticipant: participant,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t);\n\t\t} else {\n\t\t\t//Otherwise treat this as a pinning button\n\t\t\tdispatch(\n\t\t\t\tuiActions.toggleVideoPinned({\n\t\t\t\t\tpinnedVideo: { identity: participant.getUserIdentity(), videoType: \"camera\" },\n\t\t\t\t\tupdateSource: \"Default\",\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}, [canModerate, dispatch, isLocal, nameLabel, participant]);\n\n\tconst accessiblePinLabel =\n\t\tnameLabel + \". \" + (isPinned ? strings[TokenNames.clickToUnPin] : strings[TokenNames.clickToPin]);\n\n\tconst accessibleControlLabel =\n\t\t(requestInfo.audio || requestInfo.video\n\t\t\t? stringFormat(strings[TokenNames.participantRequested], nameLabel)\n\t\t\t: nameLabel + \".\") +\n\t\t\" \" +\n\t\tstrings[TokenNames.moderatorAction];\n\n\tconst accessibleLabel =\n\t\t(canModerate && !isLocal ? accessibleControlLabel : accessiblePinLabel) + \" \" + accessibleStatusLabel;\n\n\tconst pinClassName = resolveClassName(styles, {\n\t\tpin: true,\n\t\tpinned: isPinned,\n\t\tmobile: isMobile(),\n\t});\n\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t{nameLabel}\n\t\t\t\t\t\t{(!canModerate || isLocal) && (\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t)}\n\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t{canModerate && !isLocal && (\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t\n\t\t
\n\t);\n};\n\n/**\n *\n * @param strings Record of localized strings for this component\n * @param micStatus Object including lock and enabled status for the mic\n * @param camStatus Object including lock and enabled status for the camera\n * @param shareStatus Object including lock and enabled status for the screen share\n * @returns String to be used as an accessible label to summarize the participant icon status\n */\nfunction constructDeviceStatusString(\n\tstrings: Record,\n\tmicStatus: IStreamStatus,\n\tcamStatus: IStreamStatus,\n\tshareStatus: IStreamStatus,\n): string {\n\tlet label = \"\";\n\tif (micStatus.locked) {\n\t\tlabel = strings[TokenNames.micLocked];\n\t} else if (!micStatus.enabled) {\n\t\tlabel = strings[TokenNames.micDisabled];\n\t}\n\tif (camStatus.locked) {\n\t\tlabel = appendListString(label, strings[TokenNames.camLocked]);\n\t} else if (!camStatus.enabled) {\n\t\tlabel = appendListString(label, strings[TokenNames.camDisabled]);\n\t}\n\tif (shareStatus.locked) {\n\t\tlabel = appendListString(label, strings[TokenNames.screenLocked]);\n\t} else if (shareStatus.enabled) {\n\t\tlabel = appendListString(label, strings[TokenNames.screenEnabled]);\n\t}\n\tif (label !== \"\") {\n\t\tlabel = label + \".\";\n\t}\n\treturn label;\n}\n\n/**\n * Helper function to append a string to a base string with a separator\n * @param baseString Original string the appended string will add to\n * @param appendedString String to append. If the baseString is empty, this will be returned\n * @param separator Separator to insert between the base and appended string\n * @returns The base string with the appended string and separator, or just the appended string if the base string is empty\n */\nfunction appendListString(baseString: string, appendedString: string, separator: string = \", \"): string {\n\tif (baseString === \"\") {\n\t\treturn appendedString;\n\t}\n\treturn baseString + separator + appendedString;\n}\n\nParticipantRow.displayName = \"ParticipantRow\";\n\nexport default React.memo(ParticipantRow);\n","/**\n * @copyright Copyright 2021-2024 Epic Systems Corporation\n * @file Renders the appropriate header content within a section of the participant list\n * @author Will Cooper\n * @module Epic.VideoApp.Components.Participants.ParticipantList.ParticipantSectionHeader\n */\n\n/* eslint-disable jsx-a11y/no-noninteractive-tabindex */\n\nimport React, { FC } from \"react\";\nimport styles from \"./ParticipantList.module.scss\";\n\ninterface IProps {\n\theaderText: string;\n}\n\n/**\n * The ParticipantSectionHeader component\n */\nconst ParticipantSectionHeader: FC = (props) => {\n\tconst { headerText, children } = props;\n\n\treturn (\n\t\t
\n\t\t\t

{headerText}

\n\t\t\t{children}\n\t\t
\n\t);\n};\n\nParticipantSectionHeader.displayName = \"ParticipantSectionHeader\";\n\nexport default ParticipantSectionHeader;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file Component to render sections of the participant menu\n * @author Will Cooper\n * @module Epic.VideoApp.Components.Participants.ParticipantList.ParticipantMenuSection\n */\n\nimport React, { FC, useContext } from \"react\";\nimport { useBucketedParticipants, useStrings } from \"~/hooks\";\nimport { useUserState } from \"~/state\";\nimport { EpicUserType } from \"~/types\";\nimport { VideoSessionContext } from \"~/web-core/components/VideoSessionProvider\";\nimport { IUser } from \"~/web-core/interfaces\";\nimport { useParticipantName } from \"../hooks/useParticipantName\";\nimport ParticipantActionHeader from \"./ParticipantActionHeader\";\nimport styles from \"./ParticipantList.module.scss\";\nimport ParticipantRow from \"./ParticipantRow\";\nimport ParticipantSectionHeader from \"./ParticipantSectionHeader\";\n\ninterface IProps {\n\tparticipantList: IUser[];\n\tsectionUserType: EpicUserType;\n}\n\n/** String tokens used by the ParticipantMenuSection component */\nexport enum TokenNames {\n\tcareTeamHeader = \"CareTeamHeader\",\n\tpatientsHeader = \"PatientsHeader\",\n}\n\n/**\n * The ParticipantMenuSection component\n */\nconst ParticipantMenuSection: FC = (props: IProps) => {\n\tconst { sectionUserType, participantList } = props;\n\tconst currentUserType = useUserState((selectors) => selectors.getUserType(), []);\n\tconst { session } = useContext(VideoSessionContext);\n\tconst localUser = session?.getLocalParticipant();\n\tconst localName = useParticipantName(localUser || null, true);\n\n\tconst sortedParticipants = useBucketedParticipants(participantList);\n\tconst canModerate = useUserState((selectors) => selectors.getUserPermission(\"canModerateVisit\"), []);\n\tconst userInWaitingRoom = useUserState((selectors) => selectors.getIsUserInWaitingRoom(), []);\n\n\t// Determine if we render the local participant within the current group\n\tconst canUseLocalParticipant = getUserTypeForSection(currentUserType) === sectionUserType && !!localUser;\n\n\tconst strings = useStrings(\"ParticipantMenuSection\", Object.values(TokenNames));\n\n\tconst headerTextToken = getHeaderText(sectionUserType);\n\n\t// Don't show empty sections or sections we aren't allowed to show\n\tif ((userInWaitingRoom || sortedParticipants.length < 1) && !canUseLocalParticipant) {\n\t\treturn null;\n\t}\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t\t{canModerate && sectionUserType !== EpicUserType.emp && (\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t\n\t\t\t{canUseLocalParticipant && localUser && (\n\t\t\t\t\n\t\t\t)}\n\t\t\t{!userInWaitingRoom &&\n\t\t\t\tsortedParticipants.map(({ participant, displayName }) => (\n\t\t\t\t\t\n\t\t\t\t))}\n\t\t
\n\t);\n};\n\n/**\n * We show all WPR / RLA / and unknown in one menu section. Treat all of these as WPR types for sorting the menus\n * @param type - The user type of the current row\n * @returns - The effective user type for the current menu row\n */\nfunction getUserTypeForSection(type: EpicUserType): EpicUserType {\n\tif (type === EpicUserType.emp) {\n\t\treturn EpicUserType.emp;\n\t}\n\treturn EpicUserType.wpr;\n}\n\n/**\n * Helper function to choose the proper token to use for the section header\n *\n * @param type - Effective User type of the current section\n * @returns - The proper header that represents the menu section\n */\nfunction getHeaderText(type: EpicUserType): string {\n\tswitch (type) {\n\t\tcase EpicUserType.emp:\n\t\t\treturn TokenNames.careTeamHeader;\n\t\tdefault:\n\t\t\treturn TokenNames.patientsHeader;\n\t}\n}\n\nParticipantMenuSection.displayName = \"ParticipantMenuSection\";\n\nexport default ParticipantMenuSection;\n","/**\n * @copyright Copyright 2022 Epic Systems Corporation\n * @file Header button for admitting all waiting participants\n * @author Will Cooper\n * @module Epic.VideoApp.Components.Participants.ParticipantList.AdmitParticipantsButton\n */\n\nimport React, { FC, useCallback } from \"react\";\nimport ActionButton from \"~/components/Utilities/ActionButton\";\nimport { IBasicAuditEvent, useAuditFeatureUse, useStrings } from \"~/hooks\";\nimport { useSendVisitAccessMessage } from \"~/hooks/messaging\";\nimport { useModerationState } from \"~/state\";\nimport { EventType, IParticipantWithName } from \"~/types\";\nimport styles from \"./ParticipantList.module.scss\";\n\ninterface IProps {\n\twaitingParticipants: IParticipantWithName[];\n}\n\n/** String tokens used by the WaitingParticipantMenuSection -> AdmitParticipantsButton component */\nenum TokenNames {\n\twaitingHeader = \"WaitingHeader\",\n\tadmitAll = \"AdmitAll\",\n}\n/**\n * The AdmitParticipantsButton component\n */\nconst AdmitParticipantsButton: FC = (props) => {\n\tconst { waitingParticipants } = props;\n\tconst strings = useStrings(\"WaitingParticipantMenuSection\", Object.values(TokenNames));\n\tconst allowAccess = useSendVisitAccessMessage();\n\tconst audioLock = useModerationState((selectors) => selectors.getAudioAdmitOption(), []);\n\tconst videoLock = useModerationState((selectors) => selectors.getVideoAdmitOption(), []);\n\tconst screenShareLock = useModerationState((selectors) => selectors.getScreenShareAdmitOption(), []);\n\tconst auditFeatureUse = useAuditFeatureUse();\n\n\t// Admit all\n\tconst onAdmitClick = useCallback(async () => {\n\t\tconst events: IBasicAuditEvent[] = [];\n\t\tawait Promise.all(\n\t\t\twaitingParticipants.map(async (current) => {\n\t\t\t\t// Allow access\n\t\t\t\tawait allowAccess(current.participant.getUserIdentity(), current.displayName);\n\n\t\t\t\t// Collect audit events for mute or camera disable events\n\t\t\t\tif (audioLock) {\n\t\t\t\t\tevents.push({\n\t\t\t\t\t\tfeature: EventType.microphoneLocked,\n\t\t\t\t\t\ttargetParticipantId: current.participant.getUserIdentity(),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (videoLock) {\n\t\t\t\t\tevents.push({\n\t\t\t\t\t\tfeature: EventType.cameraLocked,\n\t\t\t\t\t\ttargetParticipantId: current.participant.getUserIdentity(),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (screenShareLock) {\n\t\t\t\t\tevents.push({\n\t\t\t\t\t\tfeature: EventType.screenSharingLocked,\n\t\t\t\t\t\ttargetParticipantId: current.participant.getUserIdentity(),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}),\n\t\t);\n\t\t// Batch audit all events (1 extra request)\n\t\tif (events.length > 0) {\n\t\t\tawait auditFeatureUse(events);\n\t\t}\n\t}, [allowAccess, audioLock, auditFeatureUse, screenShareLock, videoLock, waitingParticipants]);\n\n\treturn (\n\t\t
\n\t\t\t\n\t\t
\n\t);\n};\n\nAdmitParticipantsButton.displayName = \"AdmitParticipantsButton\";\n\nexport default AdmitParticipantsButton;\n","/* eslint-disable jsx-a11y/no-noninteractive-tabindex */\n/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file Participant menu row for individual users waiting to be admitted to the visit\n * @author Will Cooper\n * @module Epic.VideoApp.Components.Participants.ParticipantList.WaitingParticipantRow\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback } from \"react\";\nimport ActionButton from \"~/components/Utilities/ActionButton\";\nimport { IBasicAuditEvent, useAuditFeatureUse, useStrings } from \"~/hooks\";\nimport { useSendVisitAccessMessage } from \"~/hooks/messaging\";\nimport { alertActions, useModerationState } from \"~/state\";\nimport { AlertType, EventType } from \"~/types\";\nimport { stringFormat } from \"~/utils/strings\";\nimport { IUser } from \"~/web-core/interfaces\";\nimport styles from \"./ParticipantList.module.scss\";\n\nexport enum TokenNames {\n\tadmit = \"Admit\",\n\tdecline = \"Decline\",\n\tprevent = \"Prevent\",\n\tcancel = \"Cancel\",\n\tconfirmationMessage = \"ConfirmationMessage\",\n}\n\n/**\n * Props for ParticipantRow Component\n */\ninterface IProps {\n\t/** Participant to show in the row */\n\tparticipant: IUser;\n\n\t/** Participant's display name */\n\tdisplayName: string;\n}\n\n/**\n * The WaitingParticipantRow component\n * @param props The props ;)\n */\nconst WaitingParticipantRow: FC = (props) => {\n\tconst { participant, displayName } = props;\n\tconst dispatch = useDispatch();\n\tconst allowAccess = useSendVisitAccessMessage();\n\tconst audioLock = useModerationState((selectors) => selectors.getAudioAdmitOption(), []);\n\tconst videoLock = useModerationState((selectors) => selectors.getVideoAdmitOption(), []);\n\tconst screenShareLock = useModerationState((selectors) => selectors.getScreenShareAdmitOption(), []);\n\tconst auditFeatureUse = useAuditFeatureUse();\n\n\tconst strings = useStrings(\"WaitingParticipantRow\", Object.values(TokenNames));\n\n\tconst onAllow = useCallback(async () => {\n\t\tconst events: IBasicAuditEvent[] = [];\n\t\tawait allowAccess(participant.getUserIdentity(), displayName);\n\n\t\t// Collect audit events for mute or camera disable events\n\t\tif (audioLock) {\n\t\t\tevents.push({\n\t\t\t\tfeature: EventType.microphoneLocked,\n\t\t\t\ttargetParticipantId: participant.getUserIdentity(),\n\t\t\t});\n\t\t}\n\t\tif (videoLock) {\n\t\t\tevents.push({\n\t\t\t\tfeature: EventType.cameraLocked,\n\t\t\t\ttargetParticipantId: participant.getUserIdentity(),\n\t\t\t});\n\t\t}\n\t\tif (screenShareLock) {\n\t\t\tevents.push({\n\t\t\t\tfeature: EventType.screenSharingLocked,\n\t\t\t\ttargetParticipantId: participant.getUserIdentity(),\n\t\t\t});\n\t\t}\n\n\t\tif (events.length > 0) {\n\t\t\tawait auditFeatureUse(events);\n\t\t}\n\t}, [allowAccess, audioLock, auditFeatureUse, displayName, participant, screenShareLock, videoLock]);\n\n\tconst onReject = useCallback(() => {\n\t\t// generate alert pop-up to confirm that the participant should be removed. That will be the source of the web request to remove them\n\t\tdispatch(\n\t\t\talertActions.postChoiceAlert({\n\t\t\t\talertData: { identity: participant.getUserIdentity(), guid: participant.getUserGuid() },\n\t\t\t\ttype: AlertType.removeParticipant,\n\t\t\t\tmessage: stringFormat(strings[TokenNames.confirmationMessage], displayName),\n\t\t\t\tconfirmText: strings[TokenNames.prevent],\n\t\t\t\tconfirmHotkey: \"p\",\n\t\t\t\tcancelText: strings[TokenNames.cancel],\n\t\t\t\tcancelHotkey: \"c\",\n\t\t\t}),\n\t\t);\n\t}, [dispatch, displayName, participant, strings]);\n\n\treturn (\n\t\t
\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{displayName}\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t);\n};\n\nWaitingParticipantRow.displayName = \"WaitingParticipantRow\";\n\nexport default React.memo(WaitingParticipantRow);\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file The area of the participants menu reserved for showing participants not yet in the call\n * @author Will Cooper\n * @module Epic.VideoApp.Components.Participants.ParticipantList.WaitingParticipantMenuSection\n */\n\nimport React, { FC, useContext } from \"react\";\nimport { useBucketedParticipants, useStrings } from \"~/hooks\";\nimport { useUserState } from \"~/state\";\nimport { ParticipantDataContext } from \"~/web-core/components\";\nimport AdmitParticipantsButton from \"./AdmitParticipantsButton\";\nimport ParticipantSectionHeader from \"./ParticipantSectionHeader\";\nimport WaitingParticipantRow from \"./WaitingParticipantRow\";\n\nexport enum TokenNames {\n\twaitingHeader = \"WaitingHeader\",\n\tadmitAll = \"AdmitAll\",\n}\n\n/**\n * The ParticipantMenuSection component\n */\nconst WaitingParticipantMenuSection: FC = () => {\n\tconst { waitingParticipants } = useContext(ParticipantDataContext);\n\tconst canAdmit = useUserState((selectors) => selectors.getUserPermission(\"canStartEndVisit\"), []);\n\tconst strings = useStrings(\"WaitingParticipantMenuSection\", Object.values(TokenNames));\n\tconst sortedParticipants = useBucketedParticipants(waitingParticipants);\n\n\tif (!sortedParticipants || sortedParticipants.length < 1 || !canAdmit) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t\t{sortedParticipants.length > 1 && (\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t\n\t\t\t{sortedParticipants.map(({ participant, displayName }) => (\n\t\t\t\t\n\t\t\t))}\n\t\t
\n\t);\n};\n\nWaitingParticipantMenuSection.displayName = \"WaitingParticipantMenuSection\";\n\nexport default WaitingParticipantMenuSection;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file participant list\n * @author Colin Walters\n * @module Epic.VideoApp.Components.Participants.ParticipantList.ParticipantList\n */\n\nimport { FC, default as React, useContext } from \"react\";\nimport { useUserState } from \"~/state/user\";\nimport { EpicUserType } from \"~/types\";\nimport { ParticipantDataContext } from \"~/web-core/components\";\nimport { useParticipantsOfType } from \"../hooks/useParticipantsOfType\";\nimport ParticipantMenuSection from \"./ParticipantMenuSection\";\nimport WaitingParticipantMenuSection from \"./WaitingParticipantMenuSection\";\n\n/**\n * The ParticipantList component\n */\nconst ParticipantList: FC = () => {\n\tconst { participants } = useContext(ParticipantDataContext);\n\tconst canAdmit = useUserState((selectors) => selectors.getUserPermission(\"canStartEndVisit\"), []);\n\n\t// Use the active user's type to determine if we can show the list of waiting participants & which user type to show first\n\tconst userType = useUserState((selectors) => selectors.getUserType(), []);\n\tconst careTeam = useParticipantsOfType(participants, [EpicUserType.emp]);\n\tconst patientUsers = useParticipantsOfType(participants, [\n\t\tEpicUserType.rla,\n\t\tEpicUserType.wpr,\n\t\tEpicUserType.unknown,\n\t]);\n\n\tconst isEmp = userType === EpicUserType.emp;\n\n\t// Users will see users of their own type second, and the opposite group first (wpr/rla/unknown see EMP, EMP see others)\n\treturn (\n\t\t
\n\t\t\t{canAdmit && }\n\t\t\t\n\t\t\t\n\t\t
\n\t);\n};\n\nParticipantList.displayName = \"ParticipantList\";\n\nexport default ParticipantList;\n","/**\n * @copyright Copyright 2021-2024 Epic Systems Corporation\n * @file information circle icon component\n * @author Colin Walters\n * @module Epic.VideoApp.Icons.InformationCircle\n */\n\nimport React, { FC } from \"react\";\nimport { IconProps } from \".\";\n\n/**\n * Props for InformationCircle Component\n */\ninterface IProps extends IconProps {\n\t/** The color of the 'i'*/\n\tfillColor?: string;\n\t/** The background color of the icon*/\n\tbaseColor?: string;\n\t/** The outline color of the circle */\n\toutlineColor?: string;\n}\n\nexport enum InformationCircleTestIds {\n\tself = \"InformationCircle\",\n}\n\n/**\n * The InformationCircle component\n * @param props The props ;)\n */\nconst InformationCircle: FC = (props) => {\n\tconst { fillColor, baseColor, outlineColor, ...iconProps } = props;\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nInformationCircle.displayName = \"InformationCircle\";\n\nexport default InformationCircle;\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file The menu button to open the About EVC menu (copyright notice)\n * @author Sasha Chackalackal\n * @module Epic.VideoApp.Components.Header.Buttons.AboutEvcButton\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { ComponentType, FC, useCallback } from \"react\";\nimport { useStrings } from \"~/hooks\";\nimport { IconProps } from \"~/icons\";\nimport InformationCircle from \"~/icons/informationCircle\";\nimport { uiActions, useUIState } from \"~/state\";\nimport { resolveClassName } from \"~/utils/className\";\nimport styles from \"../ControlsHeader.module.scss\";\nimport ControlButton from \"./ControlButton\";\n\n// button's ID in HTML used to focus it from BaseMenu\nexport const aboutEvcButtonId = \"about-evc-button\";\n\n/** String tokens used by AboutEvcButton component */\nenum TokenNames {\n\tlabel = \"Label\",\n}\n\ninterface IProps {\n\t/** Information on where the button exists in the tab order of the more options menu */\n\ttabString?: string;\n}\n\nconst MenuInfoCircleIcon: ComponentType = () => {\n\treturn (\n\t\t\n\t);\n};\n\n/**\n * The AboutEvcButton component\n */\nconst AboutEvcButton: FC = (props) => {\n\tconst { tabString } = props;\n\tconst visibleMenu = useUIState((selectors) => selectors.getVisibleMenu(), []);\n\tconst dispatch = useDispatch();\n\tconst strings = useStrings(\"AboutEvcButton\", Object.values(TokenNames));\n\n\tconst onClick = useCallback(() => {\n\t\tdispatch(\n\t\t\tuiActions.toggleVisibleMenu({\n\t\t\t\tmenu: \"about\",\n\t\t\t}),\n\t\t);\n\t}, [dispatch]);\n\n\tconst pressed = visibleMenu === \"about\";\n\tconst className = resolveClassName(styles, {\n\t\tbuttonActive: pressed,\n\t});\n\n\treturn (\n\t\t\n\t);\n};\n\nAboutEvcButton.displayName = \"AboutEvcButton\";\n\nexport default AboutEvcButton;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file leave icon\n * @author Colin Walters\n * @module Epic.VideoApp.Icons.Leave\n */\n\nimport React, { FC, memo } from \"react\";\nimport { IconProps } from \".\";\nimport styles from \"../styles/_directional.scss\";\n\n/**\n * The Leave component\n * @param props The props ;)\n */\nconst Leave: FC = memo((props) => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n});\n\nLeave.displayName = \"Leave\";\n\nexport default Leave;\n","/**\n * @copyright Copyright 2021-2024 Epic Systems Corporation\n * @file Button to access the admit options menu\n * @author Will Cooper\n * @module Epic.VideoApp.Components.Header.Buttons.AdmitOptionsButton\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback } from \"react\";\nimport { useStrings } from \"~/hooks\";\nimport LeaveCall from \"~/icons/leave\";\nimport { uiActions, useUserState } from \"~/state\";\nimport { useUIState } from \"~/state/ui\";\nimport ControlButton from \"./ControlButton\";\n\n// button's ID in HTML used to focus it from BaseMenu\nexport const admitOptionsButtonId = \"admit-options-button\";\n\nenum TokenNames {\n\tlabel = \"Label\",\n}\n\ninterface IProps {\n\t/** Information on where the button exists in the tab order of the more options menu */\n\ttabString?: string;\n}\n\n/**\n * AdmitOptionsButton\n */\nconst AdmitOptionsButton: FC = (props) => {\n\tconst { tabString } = props;\n\tconst dispatch = useDispatch();\n\tconst visibleMenu = useUIState((selectors) => selectors.getVisibleMenu(), []);\n\tconst strings = useStrings(\"AdmitOptionsButton\", Object.values(TokenNames));\n\tconst canAdmit = useUserState((selectors) => selectors.getUserPermission(\"canStartEndVisit\"), []);\n\tconst canModerate = useUserState((selectors) => selectors.getUserPermission(\"canModerateVisit\"), []);\n\n\tconst onClick = useCallback(() => {\n\t\t// Don't switch menus if the current menu is background effects; this is to prevent opening the admit options menu from shared shortcut alt+a\n\t\tif (visibleMenu === \"background\") {\n\t\t\treturn;\n\t\t}\n\n\t\tdispatch(uiActions.toggleVisibleMenu({ menu: \"admitOptions\" }));\n\t}, [dispatch, visibleMenu]);\n\n\t/* Only allow admit options to be set by users that can admit and can moderate. Prevent situations where users are stuck in a moderated state */\n\tif (!canModerate || !canAdmit) {\n\t\treturn null;\n\t}\n\n\tconst pressed = visibleMenu === \"admitOptions\";\n\n\treturn (\n\t\t\n\t);\n};\n\nAdmitOptionsButton.displayName = \"AdmitOptionsButton\";\n\nexport default AdmitOptionsButton;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file blurry background icon\n * @author Liam Liden\n * @module Epic.VideoApp.Icons.BlurryBackground\n */\n\nimport React, { FC, memo } from \"react\";\nimport { IconProps } from \".\";\n\nexport enum BlurryBackgroundTestIds {\n\tself = \"BlurryBackground\",\n}\n\n/**\n * The Blurry Background component\n * @param props The props ;)\n */\nconst BlurryBackground: FC = memo((props) => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t);\n});\n\nBlurryBackground.displayName = \"BlurryBackground\";\n\nexport default BlurryBackground;\n","/**\n * @copyright Copyright 2021-2024 Epic Systems Corporation\n * @file change background in call controls button\n * @author Liam Liden\n * @module Epic.VideoApp.Components.Header.Buttons.ChangeBackgroundButton\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback } from \"react\";\nimport { useStrings } from \"~/hooks\";\nimport blurryBackground from \"~/icons/blurryBackground\";\nimport { uiActions, useBackgroundProcessorsState, useUIState } from \"~/state\";\nimport ControlButton from \"./ControlButton\";\n\n// button's ID in HTML used to focus it from BaseMenu\nexport const changeBackgroundButtonId = \"background-button\";\n\nenum TokenNames {\n\tchangeBackground = \"ChangeBackground\",\n\tbackgrounds = \"Backgrounds\",\n}\n\ninterface IProps {\n\t/** Information on where the button exists in the tab order of the more options menu */\n\ttabString?: string;\n}\n\n/**\n * The ChangeBackgroundButton component\n * @param props The props ;)\n */\nconst ChangeBackgroundButton: FC = (props) => {\n\tconst { tabString } = props;\n\tconst visibleMenu = useUIState((selectors) => selectors.getVisibleMenu(), []);\n\tconst isProcessorsLoaded =\n\t\tuseBackgroundProcessorsState((selectors) => selectors.getProcessorLoadStatus(), []) === \"finished\";\n\n\tconst dispatch = useDispatch();\n\n\tconst strings = useStrings(\"ChangeBackgroundButton\", Object.values(TokenNames));\n\n\tconst onClick = useCallback(() => {\n\t\tdispatch(uiActions.toggleVisibleMenu({ menu: \"background\" }));\n\t}, [dispatch]);\n\n\tif (!isProcessorsLoaded) {\n\t\treturn null;\n\t}\n\n\tconst pressed = visibleMenu === \"background\";\n\n\treturn (\n\t\t\n\t);\n};\n\nChangeBackgroundButton.displayName = \"ChangeBackgroundButton\";\n\nexport default ChangeBackgroundButton;\n","/**\n * @copyright Copyright 2021-2024 Epic Systems Corporation\n * @file gear icon\n * @author Colin Walters\n * @module Epic.VideoApp.Icons.Gear\n */\n\nimport React, { FC, memo } from \"react\";\nimport { IconProps } from \".\";\n\nexport enum GearIconTestIds {\n\tself = \"Gear\",\n}\n\n/**\n * The Gear component\n * @param props The props ;)\n */\nconst Gear: FC = memo((props) => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n});\n\nGear.displayName = \"Gear\";\n\nexport default Gear;\n","/**\n * @copyright Copyright 2020-2024 Epic Systems Corporation\n * @file manage devices in call controls button\n * @author Colin Walters\n * @module Epic.VideoApp.Components.Header.Buttons.ManageDevicesButton\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback } from \"react\";\nimport { useStrings } from \"~/hooks\";\nimport Gear from \"~/icons/gear\";\nimport { uiActions, useUIState } from \"~/state\";\nimport ControlButton from \"./ControlButton\";\n\n// button's ID in HTML used to focus it from BaseMenu\nexport const manageDevicesButtonId = \"devices-button\";\n\n/** String tokens used by ManageDevicesButton component */\nenum TokenNames {\n\tlabel = \"Devices\",\n\tariaLabel = \"ManageDevices\",\n}\n\ninterface IProps {\n\t/** Information on where the button exists in the tab order of the more options menu */\n\ttabString?: string;\n}\n\n/**\n * The ManageDevicesButton component\n */\nconst ManageDevicesButton: FC = (props) => {\n\tconst { tabString } = props;\n\tconst visibleMenu = useUIState((selectors) => selectors.getVisibleMenu(), []);\n\tconst dispatch = useDispatch();\n\n\tconst strings = useStrings(\"ManageDevicesButton\", Object.values(TokenNames));\n\n\tconst onClick = useCallback(() => {\n\t\tdispatch(uiActions.toggleVisibleMenu({ menu: \"devices\" }));\n\t}, [dispatch]);\n\n\tconst pressed = visibleMenu === \"devices\";\n\n\treturn (\n\t\t\n\t);\n};\n\nManageDevicesButton.displayName = \"ManageDevicesButton\";\n\nexport default ManageDevicesButton;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file participants icon\n * @author Colin Walters\n * @module Epic.VideoApp.Icons.Participants\n */\n\nimport React, { FC, memo } from \"react\";\nimport { IconProps } from \".\";\n\n/**\n * The Participants component\n * @param props The props ;)\n */\nconst Participants: FC = memo((props) => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t);\n});\n\nParticipants.displayName = \"Participants\";\n\nexport default Participants;\n","/**\n * @copyright Copyright 2022 Epic Systems Corporation\n * @file Hook to calculate if a participant notification is necessary\n * @author Will Cooper\n * @module Epic.VideoApp.Components.Header.Hooks.UseShowParticipantNotification\n */\n\nimport { useContext } from \"react\";\nimport { useModerationState, useUserState } from \"~/state\";\nimport { ParticipantDataContext } from \"~/web-core/components\";\n\n/**\n * Hook to calculate whether or not there are actions to take within the participant list\n * @returns True if there are actions available, false otherwise\n */\nexport function useShowParticipantNotification(): boolean {\n\tconst { waitingParticipants } = useContext(ParticipantDataContext);\n\tconst canAdmit = useUserState((selectors) => selectors.getUserPermission(\"canStartEndVisit\"), []);\n\tconst canModerate = useUserState((selectors) => selectors.getUserPermission(\"canModerateVisit\"), []);\n\tconst listOfRequesters = useModerationState((selectors) => selectors.getRequestingParticipants(), []);\n\treturn (waitingParticipants.length > 0 && canAdmit) || (canModerate && listOfRequesters.length > 0);\n}\n","/**\n * @copyright Copyright 2021-2024 Epic Systems Corporation\n * @file participants in call controls button\n * @author Colin Walters\n * @module Epic.VideoApp.Components.Header.Buttons.ParticipantsButton\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback } from \"react\";\nimport { useStrings } from \"~/hooks\";\nimport { useGetFormattedHotkeyString } from \"~/hooks/useGetFormattedHotkeyString\";\nimport Participants from \"~/icons/participants\";\nimport { uiActions, useUIState } from \"~/state\";\nimport { resolveClassName } from \"~/utils/className\";\nimport styles from \"../ControlsHeader.module.scss\";\nimport { useShowParticipantNotification } from \"../hooks/useShowParticipantNotification\";\nimport ControlButton from \"./ControlButton\";\n\n// button's ID in HTML used to focus it from BaseMenu\nexport const participantsButtonId = \"participants-button\";\n\ninterface IProps {\n\t/** Whether or not the button is rendered in the header */\n\tinHeader?: boolean;\n\n\t/** Whether or not the button should be rendered without a tooltip */\n\tnoTooltip?: boolean;\n\n\t/** Information on where the button exists in the tab order of the more options menu */\n\ttabString?: string;\n}\n\n/** String tokens used by ParticipantsButton component */\nenum TokenNames {\n\tlabel = \"Label\",\n\tariaLabel = \"AriaLabel\",\n\ttooltip = \"TooltipNoHotkey\",\n\tnotificationText = \"NotificationText\",\n}\n\n/**\n * The ParticipantsButton component\n */\nconst ParticipantsButton: FC = (props: IProps) => {\n\tconst { inHeader, noTooltip, tabString } = props;\n\tconst visibleMenu = useUIState((selectors) => selectors.getVisibleMenu(), []);\n\tconst dispatch = useDispatch();\n\tconst showNotification = useShowParticipantNotification();\n\tconst strings = useStrings(\"ParticipantsButton\", Object.values(TokenNames));\n\n\tconst onClick = useCallback(\n\t\t(event?: React.MouseEvent) => {\n\t\t\tdispatch(\n\t\t\t\tuiActions.toggleVisibleMenu({\n\t\t\t\t\tmenu: \"participants\",\n\t\t\t\t}),\n\t\t\t);\n\n\t\t\tif (inHeader) {\n\t\t\t\t// cancel the event propagation so it won't trigger the ClickOutsideSection in ControlsHeader\n\t\t\t\tevent?.nativeEvent.stopImmediatePropagation();\n\t\t\t}\n\t\t},\n\t\t[dispatch, inHeader],\n\t);\n\n\tconst pressed = visibleMenu === \"participants\" || visibleMenu === \"participantOptions\";\n\tconst className = resolveClassName(styles, {\n\t\tbuttonActive: pressed && inHeader,\n\t\tnotification: showNotification && inHeader,\n\t});\n\tconst supplementaryIcon = !inHeader ? \"continue\" : undefined;\n\n\tconst participantButtonKeyboardShortcut = [\"alt\", \"p\"];\n\tconst tooltipFormatted = useGetFormattedHotkeyString(\n\t\tstrings[TokenNames.tooltip],\n\t\tparticipantButtonKeyboardShortcut,\n\t);\n\n\tconst compoundLabel =\n\t\tstrings[TokenNames.ariaLabel] + (showNotification ? \" \" + strings[TokenNames.notificationText] : \"\");\n\tconst formattedLabel = useGetFormattedHotkeyString(compoundLabel, participantButtonKeyboardShortcut);\n\tconst ariaLabel = formattedLabel + (tabString ?? \"\");\n\n\treturn (\n\t\t\n\t);\n};\n\nParticipantsButton.displayName = \"ParticipantsButton\";\n\nexport default ParticipantsButton;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file change camera icon\n * @author Colin Walters\n * @module Epic.VideoApp.Icons.ChangeCamera\n */\n\nimport React, { FC, memo } from \"react\";\nimport { IconProps } from \".\";\n\n/**\n * The ChangeCamera component\n * @param props The props ;)\n */\nconst ChangeCamera: FC = memo((props) => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t);\n});\n\nChangeCamera.displayName = \"ChangeCamera\";\n\nexport default ChangeCamera;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file hook to change a user's camera\n * @author Colin Walters\n * @module Epic.VideoApp.Components.Header.Hooks.UseChangeCamera\n */\n\nimport { useCallback, useRef } from \"react\";\nimport { useCameraDevices, useSelectedCamera } from \"~/hooks\";\nimport { useVideoTrackActions } from \"~/hooks/localTracks\";\n\n/**\n * Get a function that will swap to a user's other camera\n * @returns function that when called will change the user's camera to another available device\n */\nexport function useChangeCamera(): () => void {\n\tconst cameras = useCameraDevices();\n\tconst selectedCamera = useSelectedCamera();\n\tconst { switchVideoDevice } = useVideoTrackActions();\n\tconst isSwitching = useRef(false);\n\n\tconst changeCamera = useCallback(() => {\n\t\tif (isSwitching.current) {\n\t\t\treturn;\n\t\t}\n\t\tisSwitching.current = true;\n\t\tconst newCamera = cameras.find((camera) => camera.deviceId !== selectedCamera.deviceId);\n\t\tif (!newCamera) {\n\t\t\tisSwitching.current = false;\n\t\t\treturn;\n\t\t}\n\t\tvoid switchVideoDevice(newCamera, { manual: true }).finally(() => {\n\t\t\tisSwitching.current = false;\n\t\t});\n\t}, [cameras, selectedCamera.deviceId, switchVideoDevice]);\n\n\treturn changeCamera;\n}\n","/**\n * @copyright Copyright 2020-2024 Epic Systems Corporation\n * @file change camera in call control button\n * @author Colin Walters\n * @module Epic.VideoApp.Components.Header.Buttons.ChangeCameraButton\n */\n\nimport React, { FC } from \"react\";\nimport { useCameraDevices, useStrings } from \"~/hooks\";\nimport ChangeCamera from \"~/icons/changeCamera\";\nimport { isIOS, isMobile } from \"~/utils/os\";\nimport { useChangeCamera } from \"../hooks/useChangeCamera\";\nimport ControlButton from \"./ControlButton\";\n\n/**\n * Props for ChangeCameraButton component\n */\ninterface IProps {\n\t/** Whether or not the button should be rendered without a label */\n\tnoLabel?: boolean;\n\n\t/** Whether or not the button should be rendered without a tooltip */\n\tnoTooltip?: boolean;\n\n\t/** Information on where the button exists in the tab order of the more options menu */\n\ttabString?: string;\n}\n\nenum TokenNames {\n\tlabel = \"Label\",\n}\n\n/**\n * The ChangeCameraButton component\n * @param props The props ;)\n */\nconst ChangeCameraButton: FC = (props) => {\n\tconst { noLabel, noTooltip, tabString } = props;\n\tconst cameraCount = useCameraDevices().length;\n\tconst changeCamera = useChangeCamera();\n\n\tconst strings = useStrings(\"ChangeCameraButton\", Object.values(TokenNames));\n\n\tif ((!isMobile() || cameraCount !== 2) && !isIOS()) {\n\t\treturn null;\n\t}\n\n\tconst ariaLabel = strings[TokenNames.label] + (tabString ?? \"\");\n\n\treturn (\n\t\t\n\t);\n};\n\nChangeCameraButton.displayName = \"ChangeCameraButton\";\n\nexport default ChangeCameraButton;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file collaboration menu icon\n * @author Will Cooper\n * @module Epic.VideoApp.Icons.Collaborative\n */\n\nimport React, { FC, memo } from \"react\";\nimport { IconProps } from \".\";\n\n/**\n * The Collaborative component\n * @param props The props ;)\n */\nconst Collaborative: FC = memo((props) => {\n\tconst { title } = props;\n\treturn (\n\t\t\n\t\t\t{title && {title}}\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t);\n});\n\nCollaborative.displayName = \"Collaborative\";\n\nexport default Collaborative;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file grid menu icon\n * @author Will Cooper\n * @module Epic.VideoApp.Icons.Grid\n */\n\nimport React, { FC, memo } from \"react\";\nimport { IconProps } from \".\";\n\n/**\n * The Grid component\n * @param props The props ;)\n */\nconst Grid: FC = memo((props) => {\n\tconst { title } = props;\n\treturn (\n\t\t\n\t\t\t{title && {title}}\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t);\n});\n\nGrid.displayName = \"Grid\";\n\nexport default Grid;\n","/**\n * @copyright Copyright 2021-2024 Epic Systems Corporation\n * @file Display Mode Button\n * @author Will Cooper\n * @module Epic.VideoApp.Components.Header.Buttons.DisplayModeButton\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback } from \"react\";\nimport { useStrings } from \"~/hooks\";\nimport Collaborative from \"~/icons/collaborative\";\nimport Grid from \"~/icons/grid\";\nimport { alertActions, combinedActions, uiActions, useUIState } from \"~/state\";\nimport ControlButton from \"./ControlButton\";\n\nenum TokenNames {\n\tswitchToActiveSpeakerText = \"ToggleBase\",\n\tswitchToGridText = \"ToggleGrid\",\n\tspeakerViewShown = \"SpeakerViewShown\",\n\tgridViewShown = \"GridViewShown\",\n}\n\ninterface IProps {\n\t/** Information on where the button exists in the tab order of the more options menu */\n\ttabString?: string;\n}\n/**\n * DisplayMode toggle button\n */\nconst DisplayModeButton: FC = (props) => {\n\tconst { tabString } = props;\n\tconst currentDisplayType = useUIState((selectors) => selectors.getVideoLayout(), []);\n\tconst dispatch = useDispatch();\n\n\tconst strings = useStrings(\"DisplayModeButton\", Object.values(TokenNames));\n\n\tconst toggleViewMode = useCallback(() => {\n\t\t/*For accessibility purposes, the order of events is as follows:\n\t\t 1. Announce the change in display mode\n\t\t 2. Change focus to the more options button, so we don't announce \"blank\" when the active object hides\n\t\t 3. Hide the opened more options menu\n\t\t*/\n\t\tdispatch(\n\t\t\talertActions.setDisplayModeAlert(\n\t\t\t\tcurrentDisplayType !== \"Active Speaker\"\n\t\t\t\t\t? strings[TokenNames.speakerViewShown]\n\t\t\t\t\t: strings[TokenNames.gridViewShown],\n\t\t\t),\n\t\t);\n\t\twindow.setTimeout(() => {\n\t\t\tdocument.getElementById(\"more-options\")?.focus();\n\t\t\tdispatch(uiActions.toggleVideoLayout());\n\t\t}, 50);\n\t\twindow.setTimeout(() => dispatch(uiActions.toggleVisibleMenu({ menu: null })), 100);\n\n\t\t// Prevents image capture ready toast from sticking around\n\t\tdispatch(combinedActions.clearImageCaptureActive());\n\t}, [currentDisplayType, dispatch, strings]);\n\n\tconst icon = currentDisplayType === \"Active Speaker\" ? Grid : Collaborative;\n\tconst toggleText =\n\t\tcurrentDisplayType !== \"Active Speaker\"\n\t\t\t? strings[TokenNames.switchToActiveSpeakerText]\n\t\t\t: strings[TokenNames.switchToGridText];\n\n\treturn (\n\t\t\n\t);\n};\n\nDisplayModeButton.displayName = \"DisplayModeButton\";\n\nexport default DisplayModeButton;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file exit fullscreen icon\n * @author Colin Walters\n * @module Epic.VideoApp.Icons.ExitFullscreen\n */\n\nimport React, { FC } from \"react\";\nimport { IconProps } from \".\";\nimport styles from \"../styles/_directional.scss\";\n\nexport enum ExitFullscreenTestIds {\n\tself = \"ExitFullscreen\",\n}\n\n/**\n * The ExitFullscreen component\n * @param props The props ;)\n */\nconst ExitFullscreen: FC = (props) => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nExitFullscreen.displayName = \"ExitFullscreen\";\n\nexport default React.memo(ExitFullscreen);\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file full screen icon\n * @author Colin Walters\n * @module Epic.VideoApp.Icons.Fullscreen\n */\n\nimport React, { FC } from \"react\";\nimport { IconProps } from \".\";\nimport styles from \"../styles/_directional.scss\";\n\nexport enum FullscreenTestIds {\n\tself = \"Fullscreen\",\n}\n\n/**\n * The Fullscreen component\n * @param props The props ;)\n */\nconst Fullscreen: FC = (props) => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nFullscreen.displayName = \"Fullscreen\";\n\nexport default React.memo(Fullscreen);\n","/**\n * @copyright Copyright 2021-2024 Epic Systems Corporation\n * @file button to make the call take a user's full screen\n * @author Colin Walters\n * @module Epic.VideoApp.Components.Header.Buttons.FullscreenButton\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback, useEffect, useMemo, useRef } from \"react\";\nimport { useStrings } from \"~/hooks\";\nimport ExitFullscreen from \"~/icons/exitFullscreen\";\nimport Fullscreen from \"~/icons/fullscreen\";\nimport { uiActions, useUIState } from \"~/state\";\nimport { FullScreenContainerId } from \"~/types\";\nimport { isMobile } from \"~/utils/os\";\nimport { isEmbeddedMobileView } from \"~/utils/windowGlobals\";\nimport ControlButton from \"./ControlButton\";\n\n/** String tokens used by the FullscreenButton component */\nenum TokenNames {\n\tstartLabel = \"StartLabel\",\n\tstopLabel = \"StopLabel\",\n\tariaLabel = \"AriaLabel\",\n}\n\ninterface IProps {\n\t/** Information on where the button exists in the tab order of the more options menu */\n\ttabString?: string;\n}\n\n/**\n * The FullscreenButton component\n */\nconst FullscreenButton: FC = (props) => {\n\tconst { tabString } = props;\n\tconst dispatch = useDispatch();\n\tconst isFullscreenMode = useUIState((selectors) => selectors.getIsFullScreenMode(), []);\n\tconst mobile = useMemo(() => isMobile(), []);\n\tconst embeddedMobileView = useMemo(() => isEmbeddedMobileView(), []);\n\tconst strings = useStrings(\"FullscreenButton\", Object.values(TokenNames));\n\n\tconst chatScrollTop = useRef(null);\n\n\tuseEffect(() => {\n\t\t// update whether or not the app is full screen anytime a fullscreenchange event is received\n\t\tconst onFullscreenChange = (): void => {\n\t\t\tdispatch(uiActions.setIsFullScreenMode(!!document.fullscreenElement));\n\n\t\t\tconst chatComponent = document.getElementById(\"ChatScrollingSection\");\n\t\t\tif (document.fullscreenElement && chatComponent && chatScrollTop.current !== null) {\n\t\t\t\t// After entering fullscreen, restore the scrollTop value of the chat component\n\t\t\t\tchatComponent.scrollTop = chatScrollTop.current;\n\t\t\t} else if (!document.fullscreenElement && chatComponent && chatScrollTop.current !== null) {\n\t\t\t\t// After exiting fullscreen, restore the scrollTop value of the chat component\n\t\t\t\tchatComponent.scrollTop = chatScrollTop.current;\n\t\t\t}\n\t\t};\n\t\tdocument.addEventListener(\"fullscreenchange\", onFullscreenChange);\n\n\t\treturn () => document.removeEventListener(\"fullscreenchange\", onFullscreenChange);\n\t}, [dispatch]);\n\n\tuseEffect(() => {\n\t\ttry {\n\t\t\tconst videoRoom = document.getElementById(FullScreenContainerId);\n\t\t\tconst chatComponent = document.getElementById(\"ChatScrollingSection\");\n\n\t\t\tif (isFullscreenMode) {\n\t\t\t\tif (!document.fullscreenElement && videoRoom) {\n\t\t\t\t\t// Save the current scrollTop value of the chat component before entering fullscreen\n\t\t\t\t\tif (chatComponent) {\n\t\t\t\t\t\tchatScrollTop.current = chatComponent.scrollTop;\n\t\t\t\t\t}\n\t\t\t\t\tvoid videoRoom.requestFullscreen();\n\t\t\t\t}\n\t\t\t} else if (document.fullscreenElement) {\n\t\t\t\tvoid document.exitFullscreen();\n\t\t\t}\n\t\t} catch {\n\t\t\treturn;\n\t\t}\n\t}, [isFullscreenMode]);\n\n\tconst onFullscreen = useCallback(() => {\n\t\tif (!document.fullscreenElement) {\n\t\t\tdispatch(uiActions.setIsFullScreenMode(true));\n\t\t} else {\n\t\t\tdispatch(uiActions.setIsFullScreenMode(false));\n\t\t}\n\t}, [dispatch]);\n\n\tif (!document.fullscreenEnabled || mobile || embeddedMobileView) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t\n\t);\n};\n\nFullscreenButton.displayName = \"FullscreenButton\";\n\nexport default FullscreenButton;\n","/**\n * @copyright Copyright 2021-2024 Epic Systems Corporation\n * @file button to start sharing a user's screen\n * @author Colin Walters\n * @module Epic.VideoApp.Components.Header.Buttons.ScreenShareButton\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback } from \"react\";\nimport { useScreenShareToggle, useStrings } from \"~/hooks\";\nimport { useGetFormattedHotkeyString } from \"~/hooks/useGetFormattedHotkeyString\";\nimport { uiActions, useUserState } from \"~/state\";\nimport { resolveClassName } from \"~/utils/className\";\nimport { getScreenShareIcon } from \"~/utils/device\";\nimport { useIsScreenShareSupported } from \"~/web-core/hooks/useIsScreenShareSupported\";\nimport styles from \"../ControlsHeader.module.scss\";\nimport ControlButton from \"./ControlButton\";\n\n/**\n * Props for ScreenShareButton component\n */\ninterface IProps {\n\t/** Whether or not the button should be rendered without a label */\n\tnoLabel?: boolean;\n\n\t/** Whether or not the button should be rendered without a tooltip */\n\tnoTooltip?: boolean;\n\n\t/** Information on where the button exists in the tab order of the more options menu */\n\ttabString?: string;\n}\n\nenum TokenNames {\n\tstartSharingScreen = \"StartSharingScreen\",\n\tstopSharingScreen = \"StopSharingScreen\",\n\tlabel = \"Label\",\n\tlocked = \"Locked\",\n\tnotEnabled = \"NotEnabled\",\n}\n\n/**\n * The ScreenShareButton component\n * @param props The props ;)\n */\nconst ScreenShareButton: FC = (props) => {\n\tconst { noLabel, noTooltip, tabString } = props;\n\t// canShareScreen checks if a user has had screen sharing disabled in FDI configuration, where screenShareLocked is for in-call moderation\n\tconst [canShareScreen, screenShareLocked] = useUserState(\n\t\t(selectors) => [selectors.getUserPermission(\"canShareScreen\"), selectors.getScreenShareLock()],\n\t\t[],\n\t);\n\tconst [isSharing, toggleScreenSharing] = useScreenShareToggle();\n\n\tconst inWaitingRoom = useUserState((selectors) => selectors.getIsUserInWaitingRoom(), []);\n\tconst dispatch = useDispatch();\n\tconst screenShareSupport = useIsScreenShareSupported();\n\n\tconst strings = useStrings(\"ScreenShareButton\", Object.values(TokenNames));\n\n\t// wrapper to ignore the onClick handler's event param\n\tconst onClick = useCallback(() => toggleScreenSharing(), [toggleScreenSharing]);\n\tconst onDisabledClick = useCallback(\n\t\t(event?: React.MouseEvent) => {\n\t\t\tif (inWaitingRoom) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tevent?.nativeEvent.stopImmediatePropagation();\n\t\t\tdispatch(uiActions.setRequestMenuOpen(true));\n\t\t},\n\t\t[dispatch, inWaitingRoom],\n\t);\n\n\tconst shareKeyboardShortcut = [\"alt\", \"s\"];\n\tconst labelBase = strings[getTooltipToken(isSharing, screenShareLocked, inWaitingRoom)];\n\tconst label = useGetFormattedHotkeyString(labelBase, shareKeyboardShortcut);\n\n\t// check that screen sharing is supported and that the user has permissions before showing the button\n\tif (!screenShareSupport || !canShareScreen) {\n\t\treturn null;\n\t}\n\tconst screenShareDisabled = screenShareLocked || inWaitingRoom;\n\n\tconst icon = getScreenShareIcon(isSharing, screenShareLocked);\n\n\tconst buttonClassName = resolveClassName(styles, {\n\t\tbuttonDisabled: inWaitingRoom,\n\t});\n\tconst ariaLabel = label + (tabString ?? \"\");\n\n\treturn (\n\t\t\n\t);\n};\n\nfunction getTooltipToken(isSharing: boolean, isLocked: boolean, inWaitingRoom: boolean): string {\n\tif (isLocked) {\n\t\treturn TokenNames.locked;\n\t}\n\tif (inWaitingRoom) {\n\t\treturn TokenNames.notEnabled;\n\t}\n\treturn isSharing ? TokenNames.stopSharingScreen : TokenNames.startSharingScreen;\n}\n\nScreenShareButton.displayName = \"ScreenShareButton\";\n\nexport default ScreenShareButton;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file hook to determine how the in-call header should be displayed\n * @author Colin Walters\n * @module Epic.VideoApp.Components.Header.Hooks.UseHeaderDisplayMode\n */\n\nimport { useWindowSize } from \"~/hooks\";\nimport { MinimumScreenHeightForHeader, ScreenWidthInflectionPoint } from \"~/types\";\n\ntype DisplayMode = \"no-header\" | \"button-tray\" | \"controls-in-header\";\n\n/**\n * Determine how the in-call controls should be displayed based on the current screen size\n * @returns the way that the in-call controls should be displayed\n */\nexport function useHeaderDisplayMode(): DisplayMode {\n\tconst { height, width } = useWindowSize();\n\n\tif (height < MinimumScreenHeightForHeader) {\n\t\treturn \"no-header\";\n\t}\n\n\tif (width > ScreenWidthInflectionPoint) {\n\t\treturn \"controls-in-header\";\n\t}\n\n\treturn \"button-tray\";\n}\n","/**\n * @copyright Copyright 2022 Epic Systems Corporation\n * @file Shared hook to check page size to safely include the participants button in the header\n * @author Will Cooper\n * @module Epic.VideoApp.Components.Header.Hooks.UseShowParticipantButtonInHeader\n */\n\nimport { useWindowSize } from \"~/hooks\";\nexport const MinWidthForParticipantsInHeader = 1000;\n\n/**\n * Checks the page width to determine if the button may show\n * @returns whether or not the current page is wide enough to show the participant button in the header\n */\nexport function useShowParticipantButtonInHeader(): boolean {\n\tconst { width } = useWindowSize();\n\treturn width >= MinWidthForParticipantsInHeader;\n}\n","/**\n * @copyright Copyright 2023-2024 Epic Systems Corporation\n * @file base page of the drop down more menu\n * @author Colin Walters\n * @module Epic.VideoApp.Components.Header.Menu.BaseMenu\n */\n\nimport React, { FC, ReactElement, useEffect, useMemo } from \"react\";\nimport { useCameraDevices, useStrings, useWindowSize } from \"~/hooks\";\nimport { useBackgroundProcessorsState, useUIState, useUserState } from \"~/state\";\nimport { I18n } from \"~/utils/i18n\";\nimport { isIOS, isMobile } from \"~/utils/os\";\nimport { isPictureInPictureSupported } from \"~/utils/pictureInPicture\";\nimport { stringFormat } from \"~/utils/strings\";\nimport { isEmbeddedMobileView } from \"~/utils/windowGlobals\";\nimport { useIsScreenShareSupported } from \"~/web-core/hooks/useIsScreenShareSupported\";\nimport AboutEvcButton from \"../Buttons/AboutEvcButton\";\nimport AdmitOptionsButton from \"../Buttons/AdmitOptionsButton\";\nimport ChangeBackgroundButton from \"../Buttons/ChangeBackgroundButton\";\nimport ChangeCameraButton from \"../Buttons/ChangeCameraButton\";\nimport DisplayModeButton from \"../Buttons/DisplayModeButton\";\nimport FullscreenButton from \"../Buttons/FullscreenButton\";\nimport LanguageSelectorButton from \"../Buttons/LanguageSelectorButton\";\nimport ManageDevicesButton from \"../Buttons/ManageDevicesButton\";\nimport ParticipantsButton from \"../Buttons/ParticipantsButton\";\nimport PictureInPictureButton from \"../Buttons/PictureInPictureButton\";\nimport ScreenShareButton from \"../Buttons/ScreenShareButton\";\nimport styles from \"../ControlsHeader.module.scss\";\nimport { useHeaderDisplayMode } from \"../hooks/useHeaderDisplayMode\";\nimport { baseMenuButtonIds } from \"../hooks/useMenuPages\";\nimport { useShowParticipantButtonInHeader } from \"../hooks/useShowParticipantButtonInHeader\";\n\n// when using style modules CSS class names are modified to remain unique between modules\n// export the actual selector that can be used to find the BaseMenu in the DOM\nconst baseClassName = \"moreOptionsMenu\";\nexport const baseMenuSelector = `.${styles[baseClassName]}`;\n\nexport const MinWidthForChangeCamInDrawer = 350;\nexport const MinWidthForChangeCamInHeader = 1000;\nexport const MinWidthForPiPButtonInHeader = 1000;\n\n/**\n * Props for the BaseMenu component\n */\ninterface IProps {\n\t/** Whether or not the base menu is the active menu */\n\tactive: boolean;\n}\n\nenum TokenNames {\n\toptionLabel = \"OptionLabel\",\n}\n\ninterface IBaseMenuButton {\n\tcomponent: JSX.Element;\n\tcondition: boolean;\n}\n\n/**\n * The BaseMenu component (\"More options\" menu)\n */\nconst BaseMenu: FC = (props) => {\n\tconst { active } = props;\n\tconst [, prevVisibleMenu] = useUIState((selectors) => selectors.getVisibleMenuHistory(), []);\n\tconst strings = useStrings(\"BaseMenu\", Object.values(TokenNames));\n\n\t// When this page becomes active, if we're backing up from a child menu, focus that menu's button\n\tuseEffect(() => {\n\t\tif (!active) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst defaultMenuButton = \"devices\";\n\t\tconst id: string | null = baseMenuButtonIds[prevVisibleMenu ?? defaultMenuButton];\n\t\tif (!id) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst element = document.getElementById(id);\n\n\t\t// Focus the element after the menu has been opened and the DOM has updated\n\t\tsetTimeout(() => {\n\t\t\telement?.focus({ preventScroll: true });\n\t\t}, 0);\n\t}, [active, prevVisibleMenu]);\n\n\t// Menu button conditions\n\tconst isProcessorsLoaded =\n\t\tuseBackgroundProcessorsState((selectors) => selectors.getProcessorLoadStatus(), []) === \"finished\";\n\tconst { width } = useWindowSize();\n\tconst mobile = useMemo(() => isMobile(), []);\n\tconst embeddedMobileView = useMemo(() => isEmbeddedMobileView(), []);\n\tconst canAdmit = useUserState((selectors) => selectors.getUserPermission(\"canStartEndVisit\"), []);\n\tconst canModerate = useUserState((selectors) => selectors.getUserPermission(\"canModerateVisit\"), []);\n\tconst headerDisplayMode = useHeaderDisplayMode();\n\tconst cameraCount = useCameraDevices().length;\n\tconst participantsInHeader = useShowParticipantButtonInHeader();\n\tconst screenShareSupport = useIsScreenShareSupported();\n\tconst canChangeLocales = useMemo(() => I18n.canChangeLocales(), []);\n\tconst [canShareScreen] = useUserState(\n\t\t(selectors) => [selectors.getUserPermission(\"canShareScreen\"), selectors.getScreenShareLock()],\n\t\t[],\n\t);\n\n\t// Some menu buttons are used in several locations, so they have internal logic to determine if they should be shown\n\t// and will otherwise return null. We can't determine if a component is null from its parent, so the logic is repeated here\n\t// to allow for each button to know it's place in the menu order.\n\tconst changeBackgroundButtonIsNull = !isProcessorsLoaded;\n\tconst changeCameraButtonIsNull = (!isMobile() || cameraCount !== 2) && !isIOS();\n\tconst screenShareButtonIsNull = !screenShareSupport || !canShareScreen;\n\tconst fullScreenButtonIsNull = !document.fullscreenEnabled || mobile || embeddedMobileView;\n\tconst admitOptionsButtonIsNull = !canModerate || !canAdmit;\n\tconst pipButtonIsNull = !isPictureInPictureSupported();\n\tconst languageButtonIsNull = !canChangeLocales;\n\n\t// Determine if buttons should be included in this menu\n\tconst showChangeBackgroundButton = !changeBackgroundButtonIsNull;\n\tconst showChangeCameraButton =\n\t\t!changeCameraButtonIsNull &&\n\t\t(headerDisplayMode === \"controls-in-header\"\n\t\t\t? width < MinWidthForChangeCamInHeader\n\t\t\t: width < MinWidthForChangeCamInDrawer);\n\tconst showScreenShareButton = !screenShareButtonIsNull && headerDisplayMode !== \"controls-in-header\";\n\tconst showFullscreenButton = !fullScreenButtonIsNull;\n\tconst showAdmitOptionsButton = !admitOptionsButtonIsNull;\n\tconst showParticipantButtonInMenu = !participantsInHeader;\n\tconst showPiPButtonInMenu = !pipButtonIsNull && width < MinWidthForPiPButtonInHeader;\n\tconst showLanguageButton = !languageButtonIsNull;\n\n\tconst buttons: IBaseMenuButton[] = [\n\t\t{ component: , condition: true },\n\t\t{ component: , condition: showChangeBackgroundButton },\n\t\t{ component: , condition: showChangeCameraButton },\n\t\t{ component: , condition: showScreenShareButton },\n\t\t{ component: , condition: showFullscreenButton },\n\t\t{ component: , condition: showAdmitOptionsButton },\n\t\t{ component: , condition: showParticipantButtonInMenu },\n\t\t{ component: , condition: showPiPButtonInMenu },\n\t\t{ component: , condition: true },\n\t\t{ component: , condition: showLanguageButton },\n\t\t{ component: , condition: true },\n\t];\n\tconst visibleButtons = buttons.filter((b) => b.condition);\n\tconst renderedButtons = addTabStrings(visibleButtons, strings[TokenNames.optionLabel]);\n\n\treturn (\n\t\t
    \n\t\t\t{renderedButtons.map((component, index) => (\n\t\t\t\t
  • {component}
  • \n\t\t\t))}\n\t\t
\n\t);\n};\n\n/**\n * Adds tab strings to the buttons\n * @param buttons the buttons to add tab strings to\n * @param optionLabel the string to format with the tab number\n * @returns the button components with tab strings\n */\nconst addTabStrings = (buttons: IBaseMenuButton[], optionLabel: string): ReactElement[] => {\n\treturn buttons.map((button, index) =>\n\t\tReact.cloneElement(button.component, {\n\t\t\ttabString: stringFormat(optionLabel, index + 1, buttons.length),\n\t\t}),\n\t);\n};\n\nBaseMenu.displayName = \"BaseMenu\";\n\nexport default React.memo(BaseMenu);\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file hook to get the pages in the menu\n * @author Colin Walters\n * @module Epic.VideoApp.Components.Header.Hooks.UseMenuPages\n */\n\nimport React, { useMemo, useRef } from \"react\";\nimport BackgroundSelector from \"~/components/BackgroundSelector/BackgroundSelector\";\nimport AboutEvc from \"~/components/Copyright/AboutEvc\";\nimport HardwareSetup from \"~/components/HardwareSetup/HardwareSetup\";\nimport LanguageSelector from \"~/components/LanguageSelector/LanguageSelector\";\nimport AdmitOptionsMenuPage from \"~/components/Participants/Moderation/AdmitOptionsMenu\";\nimport ParticipantControlMenu from \"~/components/Participants/Moderation/ParticipantControlMenu\";\nimport ParticipantList from \"~/components/Participants/ParticipantList/ParticipantList\";\nimport { useStrings } from \"~/hooks\";\nimport { DisplayContext, Menu } from \"~/types\";\nimport { aboutEvcButtonId } from \"../Buttons/AboutEvcButton\";\nimport { admitOptionsButtonId } from \"../Buttons/AdmitOptionsButton\";\nimport { changeBackgroundButtonId } from \"../Buttons/ChangeBackgroundButton\";\nimport { languagesButtonId } from \"../Buttons/LanguageSelectorButton\";\nimport { manageDevicesButtonId } from \"../Buttons/ManageDevicesButton\";\nimport { participantsButtonId } from \"../Buttons/ParticipantsButton\";\nimport BaseMenu from \"../Menu/BaseMenu\";\nimport { useShowParticipantButtonInHeader } from \"../hooks/useShowParticipantButtonInHeader\";\n\nexport interface IMenuPage {\n\t/** Which menu page it is */\n\tmenu: Menu;\n\n\t/** Which menu page the back button should take you to, if not the main menu */\n\tparentMenu?: Menu | null;\n\n\t/** The page contents or a function to get the contents */\n\tcontents: React.ReactNode | ((isActive: boolean) => React.ReactNode);\n\n\t/** Ref to the MenuPage element */\n\tref: React.RefObject;\n\n\t/** Menu page's title */\n\ttitle?: string;\n\n\t/** Whether or not the page uses a dynamic title */\n\tdynamicTitle?: boolean;\n\n\t/** Aria label for the menu page's back button */\n\tbackButtonLabel?: string;\n\n\t/** Whether or not the page should always be rendered */\n\talwaysRender?: boolean;\n}\n\ntype PageRefMap = Record>;\n\ninterface IMenuPages {\n\t/** Mapping from Menu to a reference to the MenuPage containing the menu contents */\n\tpageRefs: React.MutableRefObject;\n\n\t/** Ordered array of the menu pages to render */\n\tmenuPages: IMenuPage[];\n}\n\n// the IDs of the buttons on the base menu, used for giving them focus back after navigation\nexport const baseMenuButtonIds: Record = {\n\tmenu: null,\n\tdevices: manageDevicesButtonId,\n\tparticipants: participantsButtonId,\n\tlanguages: languagesButtonId,\n\tparticipantOptions: \"\",\n\tadmitOptions: admitOptionsButtonId,\n\tbackground: changeBackgroundButtonId,\n\tabout: aboutEvcButtonId,\n};\n\nenum TokenNames {\n\tdevicesTitle = \"DevicesTitle\",\n\tdevicesBackButtonLabel = \"DevicesBackButtonLabel\",\n\tparticipantListTitle = \"ParticipantListTitle\",\n\tparticipantListBackButtonLabel = \"ParticipantListBackButtonLabel\",\n\tlanguagesTitle = \"LanguagesTitle\",\n\tlanguagesBackButtonLabel = \"LanguagesBackButtonLabel\",\n\tbackgroundTitle = \"BackgroundTitle\",\n\tbackgroundBackButtonLabel = \"BackgroundBackButtonLabel\",\n\tadmitOptionsTitle = \"AdmitOptionsTitle\",\n\tadmitOptionsBackButtonLabel = \"AdmitOptionsBackButtonLabel\",\n\tparticipantOptionsBackButtonLabel = \"ParticipantOptionsBackButtonLabel\",\n\taboutEvcTitle = \"AboutEvcTitle\",\n\taboutEvcBackButtonLabel = \"AboutEvcBackButtonLabel\",\n}\n\n/**\n * Get the current menu pages to render\n * @returns an object containing references to each of the pages and an array of their definitions\n */\nexport function useMenuPages(): IMenuPages {\n\t/// 7 STEPS TO ADD A NEW MENU PAGE ///\n\n\t// 1. Create a component for the contents of the pages and add a value\n\t//\t to the union type, Menu, in types/layout.ts\n\n\t// 2. Add reference to the MenuPage element that will contain the page\n\tconst baseMenuRef = useRef(null);\n\tconst devicesMenuRef = useRef(null);\n\tconst participantsMenuRef = useRef(null);\n\tconst languagesMenuRef = useRef(null);\n\tconst participantOptionsRef = useRef(null);\n\tconst admitOptionsRef = useRef(null);\n\tconst backgroundMenuRef = useRef(null);\n\tconst aboutEvcRef = useRef(null);\n\tconst pageRefs = useRef({\n\t\tmenu: baseMenuRef,\n\t\tdevices: devicesMenuRef,\n\t\tparticipants: participantsMenuRef,\n\t\tlanguages: languagesMenuRef,\n\t\tparticipantOptions: participantOptionsRef,\n\t\tadmitOptions: admitOptionsRef,\n\t\tbackground: backgroundMenuRef,\n\t\tabout: aboutEvcRef,\n\t});\n\n\tconst participantsButtonInHeader = useShowParticipantButtonInHeader();\n\t// 3. Add any strings that the MenuPage will need (title and aria label for the back button)\n\tconst strings = useStrings(\"useMenuPages\", Object.values(TokenNames));\n\n\t// 4. Add the menu page's definition to the array of menu pages that will be rendered\n\tconst menuPages: IMenuPage[] = useMemo(\n\t\t() => [\n\t\t\t{\n\t\t\t\tmenu: \"menu\",\n\t\t\t\tcontents: (isActive: boolean) => ,\n\t\t\t\tref: baseMenuRef,\n\t\t\t\talwaysRender: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tmenu: \"devices\",\n\t\t\t\tcontents: ,\n\t\t\t\tref: devicesMenuRef,\n\t\t\t\ttitle: strings[TokenNames.devicesTitle],\n\t\t\t\tbackButtonLabel: strings[TokenNames.devicesBackButtonLabel],\n\t\t\t},\n\t\t\t{\n\t\t\t\tmenu: \"participants\",\n\t\t\t\tparentMenu: participantsButtonInHeader ? null : \"menu\",\n\t\t\t\tcontents: ,\n\t\t\t\tref: participantsMenuRef,\n\t\t\t\ttitle: strings[TokenNames.participantListTitle],\n\t\t\t\tbackButtonLabel: strings[TokenNames.participantListBackButtonLabel],\n\t\t\t},\n\t\t\t{\n\t\t\t\tmenu: \"participantOptions\",\n\t\t\t\tparentMenu: \"participants\",\n\t\t\t\tcontents: ,\n\t\t\t\tref: participantOptionsRef,\n\t\t\t\tdynamicTitle: true,\n\t\t\t\tbackButtonLabel: strings[TokenNames.participantOptionsBackButtonLabel],\n\t\t\t},\n\t\t\t{\n\t\t\t\tmenu: \"languages\",\n\t\t\t\tcontents: ,\n\t\t\t\tref: languagesMenuRef,\n\t\t\t\ttitle: strings[TokenNames.languagesTitle],\n\t\t\t\tbackButtonLabel: strings[TokenNames.languagesBackButtonLabel],\n\t\t\t},\n\t\t\t{\n\t\t\t\tmenu: \"admitOptions\",\n\t\t\t\tcontents: ,\n\t\t\t\tref: admitOptionsRef,\n\t\t\t\ttitle: strings[TokenNames.admitOptionsTitle],\n\t\t\t\tbackButtonLabel: strings[TokenNames.admitOptionsBackButtonLabel],\n\t\t\t},\n\t\t\t{\n\t\t\t\tmenu: \"background\",\n\t\t\t\tcontents: ,\n\t\t\t\tref: backgroundMenuRef,\n\t\t\t\ttitle: strings[TokenNames.backgroundTitle],\n\t\t\t\tbackButtonLabel: strings[TokenNames.backgroundBackButtonLabel],\n\t\t\t},\n\t\t\t{\n\t\t\t\tmenu: \"about\",\n\t\t\t\tcontents: ,\n\t\t\t\tref: aboutEvcRef,\n\t\t\t\ttitle: strings[TokenNames.aboutEvcTitle],\n\t\t\t\tbackButtonLabel: strings[TokenNames.aboutEvcBackButtonLabel],\n\t\t\t},\n\t\t],\n\t\t[participantsButtonInHeader, strings],\n\t);\n\n\t// 5. Create a button to open the menu through the uiActions.toggleVisibleMenu() reducer.\n\n\t// 6. Add the button to the component.\n\n\t// 7. Add the ID of the button to baseMenuButtonIds above.\n\n\treturn { pageRefs, menuPages };\n}\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file three dots icon (more menu dots)\n * @author Colin Walters\n * @module Epic.VideoApp.Icons.ThreeDots\n */\n\nimport React, { FC } from \"react\";\nimport { IconProps } from \".\";\n\n/**\n * The ThreeDots component\n * @param props The props ;)\n */\nconst ThreeDots: FC = (props) => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nThreeDots.displayName = \"ThreeDots\";\n\nexport default React.memo(ThreeDots);\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file more menu button\n * @author Colin Walters\n * @module Epic.VideoApp.Components.Header.Buttons.MoreMenuButton\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback } from \"react\";\nimport { useStrings } from \"~/hooks\";\nimport { useGetFormattedHotkeyString } from \"~/hooks/useGetFormattedHotkeyString\";\nimport ThreeDots from \"~/icons/threeDots\";\nimport { uiActions, useUIState } from \"~/state\";\nimport { resolveClassName } from \"~/utils/className\";\nimport styles from \"../ControlsHeader.module.scss\";\nimport DropDownMenus from \"../Menu/DropDownMenus\";\nimport { useShowParticipantButtonInHeader } from \"../hooks/useShowParticipantButtonInHeader\";\nimport ControlButton from \"./ControlButton\";\n\nenum TokenNames {\n\tlabel = \"Label\",\n}\n\n/**\n * Props for MoreMenuButton Component\n */\ninterface IProps {\n\t/** Whether or not the button should be disabled */\n\tdisabled?: boolean;\n\n\t/** Whether or not the button should be rendered without a label */\n\tnoLabel?: boolean;\n\n\t/** Whether or not the button should be rendered without a tooltip */\n\tnoTooltip?: boolean;\n}\n\n// button ID in HTML used to focus next option when leaving the menu dropdown\nconst moreOptionsButtonId = \"more-options\";\n// export the selector that can be used to the MoreMenuButton in the DOM\nexport const moreOptionsSelector = `#${moreOptionsButtonId}`;\n\n/**\n * The MoreMenuButton component\n * @param props The props ;)\n */\nconst MoreMenuButton: FC = (props) => {\n\tconst { disabled, noLabel, noTooltip } = props;\n\tconst visibleMenu = useUIState((selectors) => selectors.getVisibleMenu(), []);\n\tconst dispatch = useDispatch();\n\tconst showParticipantButtonInHeader = useShowParticipantButtonInHeader();\n\tconst participantMenuOpen =\n\t\tshowParticipantButtonInHeader &&\n\t\t(visibleMenu === \"participants\" || visibleMenu === \"participantOptions\");\n\n\tconst strings = useStrings(\"MoreMenuButton\", Object.values(TokenNames));\n\n\tconst onClick = useCallback(\n\t\t(event?: React.MouseEvent) => {\n\t\t\tif (!disabled) {\n\t\t\t\t// If participant menu is separate from the main && current menu is participant-based,\n\t\t\t\t// or if there is no menu open, then open the menu\n\t\t\t\tconst openMenu = participantMenuOpen || !visibleMenu;\n\t\t\t\tconst menu = openMenu ? \"menu\" : null;\n\t\t\t\tdispatch(uiActions.toggleVisibleMenu({ menu }));\n\n\t\t\t\t// cancel the event propagation so it won't trigger the ClickOutsideSection in ControlsHeader\n\t\t\t\tevent?.nativeEvent.stopImmediatePropagation();\n\t\t\t}\n\t\t},\n\t\t[disabled, dispatch, participantMenuOpen, visibleMenu],\n\t);\n\n\tconst pressed = !!visibleMenu && !participantMenuOpen;\n\tconst className = resolveClassName(styles, { buttonActive: pressed });\n\n\tconst onKeyDown = useCallback(\n\t\t(event: React.KeyboardEvent) => {\n\t\t\t// when the menu is open, if the user reverse tabs, close the menu\n\t\t\tif (pressed && event.key.toLowerCase() === \"tab\" && event.shiftKey) {\n\t\t\t\tdispatch(uiActions.toggleVisibleMenu({ menu: null }));\n\t\t\t}\n\t\t},\n\t\t[pressed, dispatch],\n\t);\n\n\tconst moreMenuKeyboardShortcut = [\"alt\", \"o\"];\n\tconst moreMenuButtonTooltipFormatted = useGetFormattedHotkeyString(\n\t\tstrings[TokenNames.label],\n\t\tmoreMenuKeyboardShortcut,\n\t);\n\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t\n\t\t
\n\t);\n};\n\nMoreMenuButton.displayName = \"MoreMenuButton\";\n\nexport default MoreMenuButton;\n","/**\n * @copyright Copyright 2022 Epic Systems Corporation\n * @file hook to determine the max height of a menu page\n * @author Colin Walters\n * @module Epic.VideoApp.Components.Header.Hooks.UseMaxMenuPageHeight\n */\n\nimport { useWindowSize } from \"~/hooks\";\n\nconst menuScreenSizePercentage = 0.65;\n\n/**\n * Get the maximum height for a menu page (either for full drop down menu or single page menu)\n * @returns the maximum height for a menu page given the current screen dimensions\n */\nexport function useMaxMenuPageHeight(): number {\n\tconst { height } = useWindowSize();\n\treturn height * menuScreenSizePercentage;\n}\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file drop down menu page\n * @author Colin Walters\n * @module Epic.VideoApp.Components.Header.Menu.MenuPage\n */\n/* eslint-disable jsx-a11y/no-noninteractive-tabindex */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { PropsWithChildren, useCallback, useEffect, useRef } from \"react\";\nimport Chevron from \"~/icons/chevron\";\nimport { uiActions } from \"~/state\";\nimport { useUIState } from \"~/state/ui\";\nimport { Menu } from \"~/types\";\nimport { resolveClassName } from \"~/utils/className\";\nimport { focusElement } from \"~/utils/general\";\nimport { controlButtonSelector } from \"../Buttons/ControlButton\";\nimport { moreOptionsSelector } from \"../Buttons/MoreMenuButton\";\nimport { useMaxMenuPageHeight } from \"../hooks/useMaxMenuPageHeight\";\nimport { baseMenuSelector } from \"./BaseMenu\";\nimport styles from \"./Menu.module.scss\";\n\n/**\n * Props for MenuPage Component\n */\ninterface IProps {\n\t/** Whether or not the page is the active page */\n\tactive: boolean;\n\n\t/** Whether or not the page is the next page to be rendered */\n\tnextUp: boolean;\n\n\t/** Whether or not the page is being used as the menu content while the dropdown opens or closes */\n\tcollapseBackground: boolean;\n\n\t/** Menu's parent that should be returned to on back, if no the main menu */\n\tparentMenu?: Menu | null;\n\n\t/** Title of the page to display at the top of the menu */\n\ttitle?: string;\n\n\t/** Whether to use the page's default title or a custom one set from shared state */\n\tdynamicTitle?: boolean;\n\n\t/** Aria label for the back button */\n\tbackButtonLabel?: string;\n}\n\n/**\n * The MenuPage component\n * @param props The props ;)\n * @param ref reference to the top level div\n */\nconst MenuPage = React.forwardRef>((props, ref) => {\n\tconst { active, nextUp, collapseBackground, parentMenu, title, dynamicTitle, backButtonLabel, children } =\n\t\tprops;\n\n\tconst dynamicMenuData = useUIState((selectors) => selectors.getDynamicMenuData(), []);\n\tconst backButtonRef = useRef(null);\n\tconst dispatch = useDispatch();\n\n\t// when this page becomes active, focus the title\n\tuseEffect(() => {\n\t\tif (active && !collapseBackground && backButtonRef.current) {\n\t\t\tconst element: HTMLElement | null = backButtonRef.current;\n\t\t\telement?.focus();\n\t\t}\n\t}, [active, collapseBackground]);\n\n\tconst onBackClick = useCallback(() => {\n\t\t// Allow setting null as the \"back\" menu to allow the back action to close the menu\n\t\tconst menuToSwitch = parentMenu !== undefined ? parentMenu : \"menu\";\n\t\tdispatch(uiActions.toggleVisibleMenu({ menu: menuToSwitch }));\n\t}, [dispatch, parentMenu]);\n\n\t// when the end of the list is focused, close the dropdown menu and jump focus to the first non-more options button\n\tconst onEndFocused = useCallback(() => {\n\t\tdispatch(uiActions.toggleVisibleMenu({ menu: null }));\n\t\tconst firstButtonSelector = `*:not(${baseMenuSelector}) > ${controlButtonSelector}:not(${moreOptionsSelector})`;\n\t\tfocusElement(firstButtonSelector);\n\t}, [dispatch]);\n\n\t// determine how far we can extend the menu page before we need to require scrolling\n\tconst maxPageHeight = useMaxMenuPageHeight();\n\n\tconst effectiveTitle = (dynamicTitle && dynamicMenuData?.title) || title;\n\n\tconst pageClassName = resolveClassName(styles, {\n\t\tmenuPage: true,\n\t\tnextUp: nextUp,\n\t\thidden: !active && !nextUp && !collapseBackground, // this only happens if a page has alwaysRender=true in useMenuPages\n\t});\n\n\treturn (\n\t\t
\n\t\t\t{(effectiveTitle || dynamicTitle) && (\n\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{effectiveTitle}\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\n\t\t\t)}\n\t\t\t{children}\n\t\t\t
\n\t\t
\n\t);\n});\n\nMenuPage.displayName = \"MenuPage\";\n\nexport default React.memo(MenuPage);\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file drop down menu with paging\n * @author Colin Walters\n * @module Epic.VideoApp.Components.Header.Menu.DropDownMenus\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback, useEffect, useRef, useState } from \"react\";\nimport ClickOutsideSection from \"~/components/Utilities/ClickOutsideSection\";\nimport Collapse from \"~/components/Utilities/Collapse\";\nimport { uiActions, useUIState } from \"~/state\";\nimport { Menu } from \"~/types\";\nimport { IMenuPage, useMenuPages } from \"../hooks/useMenuPages\";\nimport styles from \"./Menu.module.scss\";\nimport MenuPage from \"./MenuPage\";\n\nexport const MoreOptionsMenuWrapperId = \"moreMenuToolbarWrapper\";\n\ntype VisibleMenu = Menu | null;\n\n// make sure this matches $page-transition-duration in _menuUtils.scss\nconst pageTransitionDurationMs = 200;\n\n// make sure this matches $drop-down-padding * 2 in _menuUtils.scss\nconst dropDownMenuPadding = 10;\n\ntype DrawerState = \"open\" | \"opening\" | \"closed\" | \"closing\";\n\n/**\n * The DropDownMenus component\n */\nconst DropDownMenus: FC = () => {\n\t/// ADD NEW PAGES IN THIS HOOK ///\n\tconst { pageRefs, menuPages } = useMenuPages();\n\t/// The following code should (hopefully) not have to be updated for new pages ///\n\n\t// the currently and previously visible menus from shared state\n\tconst [visibleMenu, prevVisibleMenu] = useUIState((selectors) => selectors.getVisibleMenuHistory(), []);\n\n\t// state used to track the menu that is transitioning in\n\tconst [transitioningMenu, setTransitioningMenu] = useState(null);\n\t// ref to the timeout to stop transitioning\n\tconst transitionEndTimeout = useRef(null);\n\n\t// internal value for ui state's visibleMenu to give delay between changing a menu and that taking affect\n\tconst [internalVisibleMenu, setInternalVisibleMenu] = useState(visibleMenu);\n\t// the most recently visible menu, used to keep something in view while the menu closes\n\tconst lastVisibleMenu = useRef(internalVisibleMenu);\n\n\t// state tracking for if the menu is collapsed altogether\n\tconst [drawerState, setDrawerState] = useState(internalVisibleMenu ? \"open\" : \"closed\");\n\n\tconst wrapperRef = useRef(null);\n\tconst dispatch = useDispatch();\n\n\t/// INITIATING USE EFFECT ///\n\t// process updates to the visible menu, determine the next menu state, and start the transition in motion\n\tuseEffect(() => {\n\t\t// clear any existing timeouts to stop the previous transition\n\t\tif (transitionEndTimeout.current) {\n\t\t\tclearTimeout(transitionEndTimeout.current);\n\t\t\ttransitionEndTimeout.current = null;\n\t\t}\n\t\tif (visibleMenu && prevVisibleMenu) {\n\t\t\t// if this is a page transition, kick that off\n\t\t\t// but wait for the TRANSITIONING USE EFFECT to change the page\n\t\t\tsetTransitioningMenu(visibleMenu);\n\t\t} else if (visibleMenu) {\n\t\t\t// update the visible menu and last visible menu right away if no previous menu\n\t\t\tsetInternalVisibleMenu(visibleMenu);\n\t\t\tsetTransitioningMenu(null);\n\t\t\tlastVisibleMenu.current = visibleMenu;\n\t\t} else {\n\t\t\t// without a visible menu, change internal visible right away and collapse\n\t\t\tsetInternalVisibleMenu(null);\n\t\t\tsetTransitioningMenu(null);\n\n\t\t\t// if both current and previous are nulled out, don't animate closing the menu\n\t\t\tsetDrawerState(prevVisibleMenu ? \"closing\" : \"closed\");\n\t\t}\n\n\t\tif (wrapperRef.current) {\n\t\t\tconst headerBar = document.querySelector(\"#\" + MoreOptionsMenuWrapperId);\n\t\t\tif (headerBar) {\n\t\t\t\twrapperRef.current.style.top =\n\t\t\t\t\t(headerBar.clientTop + headerBar.clientHeight).toString() + \"px\";\n\t\t\t}\n\t\t}\n\t}, [visibleMenu, prevVisibleMenu]);\n\n\t/// DRAWER OPENING USE EFFECT ///\n\tconst shouldOpen = (drawerState === \"closed\" || drawerState === \"closing\") && !!internalVisibleMenu;\n\tuseEffect(() => {\n\t\t// if the menu is closed/closing, but we have a visible menu, start opening the menu\n\t\tif (shouldOpen) {\n\t\t\tsetDrawerState(\"opening\");\n\t\t}\n\t}, [shouldOpen]);\n\n\t/// TRANSITIONING USE EFFECT ///\n\tuseEffect(() => {\n\t\t// when the transition has started, update our internal copy of the visible menu\n\t\t// and create a timeout to end transitioning in 0.2s\n\t\tif (transitioningMenu) {\n\t\t\tsetInternalVisibleMenu(transitioningMenu);\n\t\t\tlastVisibleMenu.current = transitioningMenu;\n\t\t\ttransitionEndTimeout.current = setTimeout(setTransitioningMenu, pageTransitionDurationMs, null);\n\n\t\t\treturn () => {\n\t\t\t\tif (transitionEndTimeout.current) {\n\t\t\t\t\tclearTimeout(transitionEndTimeout.current);\n\t\t\t\t\ttransitionEndTimeout.current = null;\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t}, [transitioningMenu]);\n\n\t// if a transition has started, but the next page is not yet active, hide the next page off screen for accurate sizing\n\tconst nextUp = visibleMenu && visibleMenu !== internalVisibleMenu ? transitioningMenu : null;\n\n\t// if the drawer is opening/closing, the next/last menu should remain visible as the dropdown opens/closes\n\tconst collapseBackground =\n\t\tdrawerState === \"opening\" || drawerState === \"closing\" ? lastVisibleMenu.current : null;\n\n\t// internalVisibleMenu is needed because CSS transitions have to go from one set height to another, but\n\t// menu pages can change size (devices' muted indicator, participant list growing/shrinking etc.). To\n\t// account for this, transitioningMenu is used to render the next page off screen while internalVisibleMenu\n\t// is set to the old value, setting min/max to the old height. Immediately after transitioningMenu is set,\n\t// the TRANSITIONING USE EFFECT will change internalVisibleMenu, min/max height for new page.\n\tconst visibleMenuPage = (internalVisibleMenu && pageRefs.current[internalVisibleMenu]?.current) || null;\n\tconst height =\n\t\ttransitioningMenu && visibleMenuPage ? visibleMenuPage.clientHeight + dropDownMenuPadding : \"unset\";\n\n\t// set both min and max height to account for both growing and shrinking\n\tconst style: React.CSSProperties = {\n\t\tminHeight: height,\n\t\tmaxHeight: height,\n\t};\n\n\t// function to render a menu page based on current state\n\tconst renderMenuPage = useCallback(\n\t\t(menuPage: IMenuPage) => {\n\t\t\tconst { menu, parentMenu, ref, contents, title, dynamicTitle, backButtonLabel, alwaysRender } =\n\t\t\t\tmenuPage;\n\t\t\tconst isActive = menu === internalVisibleMenu;\n\t\t\tconst isNextUp = menu === nextUp;\n\t\t\tconst isCollapseBackground = menu === collapseBackground;\n\n\t\t\t// avoid rendering pages when not taking an active role in the menu's current display or an animation\n\t\t\tif (!isActive && !isNextUp && !isCollapseBackground && !alwaysRender) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn (\n\t\t\t\t\n\t\t\t\t\t{typeof contents === \"function\" ? contents(isActive && !transitioningMenu) : contents}\n\t\t\t\t\n\t\t\t);\n\t\t},\n\t\t[internalVisibleMenu, nextUp, collapseBackground, transitioningMenu],\n\t);\n\n\t// update the drawer state to open/closed once the Collapse animation ends\n\tconst onAnimationFinished = useCallback((collapsed: boolean) => {\n\t\tsetDrawerState(collapsed ? \"closed\" : \"open\");\n\t}, []);\n\n\tconst onClickOutsideTrays = useCallback(() => {\n\t\tif (visibleMenu !== null) {\n\t\t\tdispatch(uiActions.toggleVisibleMenu({ menu: null }));\n\t\t}\n\t}, [dispatch, visibleMenu]);\n\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t{menuPages.map(renderMenuPage)}\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t);\n};\n\nDropDownMenus.displayName = \"DropDownMenus\";\n\nexport default DropDownMenus;\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file HeaderBar component\n * @author Matt Panico\n * @module Epic.VideoApp.Components.Header.HeaderBar\n */\n\nimport React, { FC } from \"react\";\nimport EpicLogo from \"~/icons/epicLogo\";\nimport BrandedLogo from \"../Branding/BrandedLogo\";\nimport styles from \"./HeaderBar.module.scss\";\nimport { MoreOptionsMenuWrapperId } from \"./Menu/DropDownMenus\";\nimport { useHeaderDisplayMode } from \"./hooks/useHeaderDisplayMode\";\n\nexport enum HeaderBarTestIds {\n\tself = \"HeaderBar\",\n}\n\ninterface IProps {\n\talwaysVisible?: boolean;\n}\n\n/**\n * The HeaderBar component\n * @param props The props ;)\n */\nconst HeaderBar: FC = (props) => {\n\tconst { alwaysVisible, children } = props;\n\tconst headerDisplayMode = useHeaderDisplayMode();\n\n\tif (!alwaysVisible && headerDisplayMode === \"no-header\") {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t\t\n\t\t\t{children &&
{children}
}\n\t\t
\n\t);\n};\n\nHeaderBar.displayName = \"HeaderBar\";\n\nexport default HeaderBar;\n","/**\n * @copyright Copyright 2022 Epic Systems Corporation\n * @file A menu page in the same style as the more options menu, that can be rendered and controlled separately.\n * @author Will Cooper\n * @module Epic.VideoApp.Components.Header.Menu.GenericMenuPage\n */\n\nimport React, { FC } from \"react\";\nimport ClickOutsideSection from \"~/components/Utilities/ClickOutsideSection\";\nimport { resolveClassName } from \"~/utils/className\";\nimport Collapse from \"../../Utilities/Collapse\";\nimport { useMaxMenuPageHeight } from \"../hooks/useMaxMenuPageHeight\";\nimport styles from \"./GenericMenuPage.module.scss\";\n\n/**\n * Props for GenericMenuPage component\n */\ninterface IProps {\n\tcloseCallback: () => void;\n\tenabled: boolean;\n\twrapperClassName?: string;\n}\n\n/**\n * The GenericMenuPage component\n * @param props The props ;)\n */\nconst GenericMenuPage: FC = (props) => {\n\tconst { closeCallback, enabled, wrapperClassName, children } = props;\n\n\tconst maxPageHeight = useMaxMenuPageHeight();\n\tconst outerClassName = resolveClassName(styles, { wrapper: true }, wrapperClassName);\n\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t{children}\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t);\n};\n\nGenericMenuPage.displayName = \"GenericMenuPage\";\n\nexport default GenericMenuPage;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file drop down menu for language selection to be used on pages without the full menu\n * @author Colin Walters\n * @module Epic.VideoApp.Components.Header.Menu.SinglePageMenu\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback } from \"react\";\nimport { uiActions, useUIState } from \"~/state\";\nimport { Menu } from \"~/types\";\nimport GenericMenuPage from \"./GenericMenuPage\";\n\n/**\n * Props for SinglePageMenu component\n */\ninterface IProps {\n\t/** The menu page that should be displayed as a part of this menu */\n\tmenu: Menu;\n}\n\n/**\n * The SinglePageMenu component\n * @param props The props ;)\n */\nconst SinglePageMenu: FC = (props) => {\n\tconst { menu, children } = props;\n\tconst collapsed = useUIState((s) => s.getVisibleMenu(), []) !== menu;\n\tconst dispatch = useDispatch();\n\n\tconst onClickOutsideTrays = useCallback(() => {\n\t\tif (!collapsed) {\n\t\t\tdispatch(uiActions.toggleVisibleMenu({ menu: null }));\n\t\t}\n\t}, [collapsed, dispatch]);\n\n\treturn (\n\t\t\n\t\t\t{children}\n\t\t\n\t);\n};\n\nSinglePageMenu.displayName = \"SinglePageMenu\";\n\nexport default SinglePageMenu;\n","/**\n * @copyright\n * @file Loading Ellipse\n * @author\n * @module Epic.VideoApp.Icons.LoadingEllipsis\n */\n\nimport React, { FC, memo } from \"react\";\nimport { IconProps } from \".\";\nimport styles from \"./loadingEllipsis.module.scss\";\n\n/**\n * The LockedCamera component\n * @param props The props ;)\n */\nconst LoadingEllipsis: FC = memo(() => {\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t
\n\t);\n});\n\nLoadingEllipsis.displayName = \"LoadingEllipsis\";\n\nexport default LoadingEllipsis;\n","/**\n * @copyright Copyright 2023 Epic Systems Corporation\n * @file Language loading toast message\n * @author Hanita Haller\n * @module Epic.VideoApp.Components.Header.Toasts.LanguageLoadingToast\n */\n/* eslint-disable jsx-a11y/no-noninteractive-tabindex */\n\nimport React, { FC } from \"react\";\nimport LoadingEllipsis from \"~/icons/loadingEllipsis\";\nimport { ENABLED_LOCALES } from \"~/types/locale\";\nimport { resolveClassName } from \"~/utils/className\";\nimport { I18n } from \"~/utils/i18n\";\nimport { stringFormat } from \"~/utils/strings\";\nimport styles from \"./Toasts.module.scss\";\n\n/**\n * Props for language loading toast component\n */\ninterface IProps {\n\tmessageArgs?: string[];\n}\n\nexport enum LanguageLoadingToastTestIds {\n\tself = \"LanguageLoadingToast\",\n}\n\n/**\n * The language loading toast component\n * @param props The props ;)\n */\nconst LanguageLoadingToast: FC = (props) => {\n\tconst { messageArgs } = props;\n\n\tconst localeCode = messageArgs && messageArgs[0] ? messageArgs[0] : \"en-us\";\n\tconst displayName = messageArgs && messageArgs[1] ? messageArgs[1] : \"en-us\";\n\n\t// Using I18n.getString instead of useString so that the toast is written in the user's\n\t// selected language (the one that will be applied soon) instead of the current language because:\n\t//\t\t1. The user may not understand this one.\n\t//\t\t2. It might have an alphabet incompatible with the selected language's display name.\n\tconst string = I18n.getString(\"LoadingLanguageToast_LoadingLanguage\", localeCode);\n\tconst message = stringFormat(string, displayName);\n\n\tconst direction = ENABLED_LOCALES[localeCode]?.isRtl ? \"rtl\" : \"ltr\";\n\n\tconst className = resolveClassName(styles, {\n\t\ttoast: true,\n\t\tsolid: true,\n\t});\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\n\t\t
\n\t);\n};\n\nLanguageLoadingToast.displayName = \"LanguageLoadingToast\";\n\nexport default React.memo(LanguageLoadingToast);\n","/**\n * @copyright Copyright 2022 Epic Systems Corporation\n * @file Button to dismiss a toast\n * @author Will Cooper\n * @module Epic.VideoApp.Components.Header.Toasts.Buttons.ToastDismissButton\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback } from \"react\";\nimport ActionButton from \"~/components/Utilities/ActionButton\";\nimport BaseButton from \"~/components/Utilities/BaseButton\";\nimport { useStrings } from \"~/hooks\";\nimport Error from \"~/icons/error\";\nimport { alertActions } from \"~/state\";\nimport styles from \"../Toasts.module.scss\";\n\nexport enum ToastDismissButtonTestIds {\n\tself = \"ToastDismissButton\",\n\ticonOnly = \"ToastDismissButtonIconOnly\",\n}\n\nenum TokenNames {\n\tdismiss = \"Dismiss\",\n\tdismissText = \"DismissText\",\n}\n\ninterface IDismissProps {\n\tid: string;\n\tnoText?: boolean;\n}\n\n/**\n * The ToastButton component\n * @param props The props ;)\n */\nconst ToastDismissButton: FC = (props: IDismissProps) => {\n\tconst { id, noText } = props;\n\tconst strings = useStrings(\"Toasts\", Object.values(TokenNames));\n\tconst dispatch = useDispatch();\n\n\tconst dismissToast = useCallback(() => {\n\t\tdispatch(alertActions.dismissToastAlert(id));\n\t}, [dispatch, id]);\n\n\tif (noText) {\n\t\t// Show the default \"X\" button\n\t\treturn (\n\t\t\t\n\t\t);\n\t}\n\n\treturn (\n\t\t\n\t);\n};\n\nToastDismissButton.displayName = \"ToastDismissButton\";\n\nexport default React.memo(ToastDismissButton);\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Buttons to open chat from the toast\n * @author Noah Allen\n * @module Epic.VideoApp.Components.Header.Toasts.Buttons.ChatToastButtonGroup\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback, useEffect } from \"react\";\nimport ActionButton from \"~/components/Utilities/ActionButton\";\nimport { useStrings } from \"~/hooks\";\nimport { combinedActions, uiActions, useUserState } from \"~/state\";\nimport { secondsToMs } from \"~/utils/dateTime\";\nimport ToastDismissButton from \"./ToastDismissButton\";\n\nexport enum ChatToastButtonGroupTestIds {\n\topenChatButton = \"OpenChatButton\",\n}\n\ninterface IProps {\n\tid: string;\n\tttlSeconds?: number;\n}\n\nenum TokenNames {\n\topenChatButtonText = \"OpenChatButtonText\",\n}\n\n/**\n * The ChatToastButtonGroup component\n * @param props The id of the toast\n */\nconst ChatToastButtonGroup: FC = (props) => {\n\tconst { id, ttlSeconds } = props;\n\n\tconst dispatch = useDispatch();\n\tconst strings = useStrings(\"ChatToastButtonGroup\", Object.values(TokenNames));\n\tconst inWaitingRoom = useUserState((selectors) => selectors.getIsUserInWaitingRoom(), []);\n\n\tuseEffect(() => {\n\t\tif (ttlSeconds) {\n\t\t\tconst timer = setTimeout(() => {\n\t\t\t\tdispatch(combinedActions.clearToast());\n\t\t\t}, secondsToMs(ttlSeconds));\n\n\t\t\treturn () => {\n\t\t\t\tclearTimeout(timer);\n\t\t\t};\n\t\t}\n\t}, [dispatch, ttlSeconds]);\n\n\tconst handleChatToggle = useCallback(() => {\n\t\tif (inWaitingRoom) {\n\t\t\treturn;\n\t\t}\n\t\tdispatch(uiActions.setSidebarStatus(\"open\"));\n\t\tdispatch(combinedActions.clearToast());\n\t}, [dispatch, inWaitingRoom]);\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nChatToastButtonGroup.displayName = \"ChatToastButtonGroup\";\n\nexport default React.memo(ChatToastButtonGroup);\n","/**\n * @copyright Copyright 2022 Epic Systems Corporation\n * @file Button that can be rendered to directly open a given menu from a toast\n * @author Will Cooper\n * @module Epic.VideoApp.Components.Header.Toasts.Buttons.OpenMenuButton\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback } from \"react\";\nimport ActionButton from \"~/components/Utilities/ActionButton\";\nimport { useStrings } from \"~/hooks\";\nimport { uiActions, useUIState } from \"~/state\";\nimport { IDynamicMenuData } from \"~/state/ui\";\nimport { Menu } from \"~/types\";\n\nexport enum OpenMenuButtonTestIds {\n\tself = \"OpenMenuButton\",\n}\n\nenum TokenNames {\n\topenMenu = \"OpenMenu\",\n}\n\ninterface IProps {\n\tmenu: Menu;\n\tmenuData?: IDynamicMenuData;\n}\n\n/**\n * The OpenMenuButton component\n * @param props The props ;)\n */\nconst OpenMenuButton: FC = (props) => {\n\tconst { menu, menuData } = props;\n\tconst strings = useStrings(\"Toasts\", Object.values(TokenNames));\n\tconst visibleMenu = useUIState((selectors) => selectors.getVisibleMenu(), []);\n\tconst dispatch = useDispatch();\n\n\tconst openMenu = useCallback(\n\t\t(event?: React.MouseEvent) => {\n\t\t\t// cancel the event propagation so it won't trigger the ClickOutsideSection in ControlsHeader\n\t\t\tevent?.nativeEvent.stopImmediatePropagation();\n\n\t\t\tif (visibleMenu === menu) {\n\t\t\t\t// Don't perform the menu update if it is already open\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tdispatch(\n\t\t\t\tuiActions.toggleVisibleMenu({\n\t\t\t\t\tmenu: menu,\n\t\t\t\t\tmenuData: menuData,\n\t\t\t\t}),\n\t\t\t);\n\t\t},\n\t\t[dispatch, menu, menuData, visibleMenu],\n\t);\n\treturn (\n\t\t\n\t);\n};\nOpenMenuButton.displayName = \"OpenMenuButton\";\n\nexport default React.memo(OpenMenuButton);\n","/**\n * @copyright Copyright 2022 Epic Systems Corporation\n * @file Toast buttons for admitting participants\n * @author Will Cooper\n * @module Epic.VideoApp.Components.Header.Toasts.Buttons.HandleAdmissionButtonGroup\n */\n\nimport React, { FC, useCallback, useContext } from \"react\";\nimport ActionButton from \"~/components/Utilities/ActionButton\";\nimport { useStrings } from \"~/hooks\";\nimport { useSendVisitAccessMessage } from \"~/hooks/messaging\";\nimport { ParticipantDataContext } from \"../../../../web-core/components/ParticipantDataProvider\";\nimport { useParticipantName } from \"../../../Participants/hooks/useParticipantName\";\nimport OpenMenuButton from \"./OpenMenuButton\";\n\nexport enum HandleAdmissionButtonGroupTestIds {\n\tadmitButton = \"AdmitButton\",\n}\n\nenum TokenNames {\n\tadmit = \"AdmitButton\",\n\topenMenu = \"OpenMenu\",\n}\n\ninterface IToastProps {\n\tidentity: string;\n}\n\n/**\n * The HandleAdmissionButtonGroup component\n * @param props The props ;)\n */\nconst HandleAdmissionButtonGroup: FC = (props) => {\n\tconst { identity } = props;\n\tconst strings = useStrings(\"Toasts\", Object.values(TokenNames));\n\tconst allowAccess = useSendVisitAccessMessage();\n\tconst { waitingParticipants } = useContext(ParticipantDataContext);\n\tconst waitingParticipant = waitingParticipants.find((p) => p.getUserIdentity() === identity);\n\tconst displayName = useParticipantName(waitingParticipant ?? null);\n\n\tconst onAllow = useCallback(() => {\n\t\tvoid allowAccess(identity, displayName);\n\t}, [allowAccess, displayName, identity]);\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\n\t\t\n\t);\n};\nHandleAdmissionButtonGroup.displayName = \"HandleAdmissionButtonGroup\";\n\nexport default React.memo(HandleAdmissionButtonGroup);\n","/**\n * @copyright Copyright 2022 Epic Systems Corporation\n * @file Button that triggers a menu update to view a single participant\n * @author Will Cooper\n * @module Epic.VideoApp.Components.Header.Toasts.Buttons.HandleMultipleRequestButtonGroup\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback } from \"react\";\nimport ActionButton from \"~/components/Utilities/ActionButton\";\nimport { useStrings } from \"~/hooks\";\nimport { moderationActions } from \"~/state\";\nimport OpenMenuButton from \"./OpenMenuButton\";\n\nexport enum HandleMultipleRequestButtonGroupTestIds {\n\tprimaryButton = \"HandleMultipleRequestButtonGroupPrimaryButton\",\n}\n\nenum TokenNames {\n\topenMenu = \"OpenMenu\",\n\tdenyAll = \"DenyAll\",\n}\n\n/**\n * The HandleMultipleRequestButtonGroup component\n * @param props The props ;)\n */\nconst HandleMultipleRequestButtonGroup: FC = () => {\n\tconst strings = useStrings(\"Toasts\", Object.values(TokenNames));\n\tconst dispatch = useDispatch();\n\n\tconst denyRequests = useCallback(() => {\n\t\t// Clear the state so we no longer receive notifications for this request\n\t\tdispatch(moderationActions.clearAllParticipantRequests());\n\t}, [dispatch]);\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nHandleMultipleRequestButtonGroup.displayName = \"HandleMultipleRequestButtonGroup\";\n\nexport default React.memo(HandleMultipleRequestButtonGroup);\n","/**\n * @copyright Copyright 2022 Epic Systems Corporation\n * @file Button in toast that will process a single participants access request\n * @author Will Cooper\n * @module Epic.VideoApp.Components.Header.Toasts.Buttons.HandleSingleDeviceRequestButtonGroup\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback, useContext } from \"react\";\nimport { useParticipantName } from \"~/components/Participants/hooks/useParticipantName\";\nimport ActionButton from \"~/components/Utilities/ActionButton\";\nimport { useStrings } from \"~/hooks\";\nimport { useSendModeratorAction } from \"~/hooks/messaging\";\nimport { alertActions, moderationActions, useModerationState } from \"~/state\";\nimport { IParticipantRequest } from \"~/state/room\";\nimport { IDynamicMenuData } from \"~/state/ui\";\nimport { IModeratorPayload } from \"~/types\";\nimport { VideoSessionContext } from \"~/web-core/components\";\nimport OpenMenuButton from \"./OpenMenuButton\";\n\nexport enum HandleSingleDeviceRequestButtonGroupTestIds {\n\tacceptButton = \"AcceptButton\",\n\tdenyButton = \"DenyButton\",\n}\n\nenum TokenNames {\n\tgrantAccess = \"GrantAccess\",\n\tdeny = \"Deny\",\n}\n\ninterface IToastProps {\n\ttoastId: string;\n\tidentity: string;\n}\n\n/**\n * The HandleSingleDeviceRequestButtonGroup component\n * @param props The props ;)\n */\nconst HandleSingleDeviceRequestButtonGroup: FC = (props) => {\n\tconst { toastId, identity } = props;\n\tconst { session } = useContext(VideoSessionContext);\n\tconst strings = useStrings(\"Toasts\", Object.values(TokenNames));\n\tconst sendModeratorMessage = useSendModeratorAction();\n\tconst dispatch = useDispatch();\n\tconst requestInfo = useModerationState(\n\t\t(selectors) => selectors.getParticipantRequest(identity),\n\t\t[identity],\n\t);\n\n\tconst requestCount = getRequestCount(requestInfo);\n\tconst participant = session?.getRemoteParticipant(identity) ?? null;\n\tconst participantName = useParticipantName(participant) ?? \"\";\n\tconst menuToOpen = participant ? \"participantOptions\" : \"participants\";\n\tconst participantMenuData: IDynamicMenuData | undefined = participant\n\t\t? { participant: participant, title: participantName }\n\t\t: undefined;\n\n\tconst allowSingleRequest = useCallback(() => {\n\t\tdispatch(alertActions.dismissToastAlert(toastId));\n\t\tconst moderatorParams: IModeratorPayload = {\n\t\t\taudioLock: undefined,\n\t\t\tvideoLock: undefined,\n\t\t\tscreenShareLock: undefined,\n\t\t};\n\t\tif (requestInfo.audio) {\n\t\t\tmoderatorParams.audioLock = false;\n\t\t}\n\t\tif (requestInfo.video) {\n\t\t\tmoderatorParams.videoLock = false;\n\t\t}\n\t\tif (requestInfo.screenShare) {\n\t\t\tmoderatorParams.screenShareLock = false;\n\t\t}\n\t\t/** Send Moderator Message to update remote user's state */\n\t\tsendModeratorMessage(moderatorParams, identity, true);\n\t}, [\n\t\tdispatch,\n\t\tidentity,\n\t\trequestInfo.audio,\n\t\trequestInfo.screenShare,\n\t\trequestInfo.video,\n\t\tsendModeratorMessage,\n\t\ttoastId,\n\t]);\n\n\tconst denyRequest = useCallback(() => {\n\t\t// Clear the state so we no longer receive notifications for this request\n\t\tif (requestInfo) {\n\t\t\tdispatch(moderationActions.clearParticipantRequest(requestInfo.identity));\n\t\t}\n\n\t\tdispatch(alertActions.dismissToastAlert(toastId));\n\t}, [dispatch, toastId, requestInfo]);\n\n\treturn (\n\t\t<>\n\t\t\t{/** For multiple requests, instead open the user's moderation menu */}\n\t\t\t{requestCount <= 1 ? (\n\t\t\t\t\n\t\t\t) : (\n\t\t\t\t\n\t\t\t)}\n\t\t\t\n\t\t\n\t);\n};\n\nfunction getRequestCount(requestInfo: IParticipantRequest): number {\n\tlet requestCount = 0;\n\tif (requestInfo.audio) {\n\t\trequestCount++;\n\t}\n\tif (requestInfo.video) {\n\t\trequestCount++;\n\t}\n\tif (requestInfo.screenShare) {\n\t\trequestCount++;\n\t}\n\treturn requestCount;\n}\n\nHandleSingleDeviceRequestButtonGroup.displayName = \"HandleSingleDeviceRequestButtonGroup\";\n\nexport default React.memo(HandleSingleDeviceRequestButtonGroup);\n","/**\n * @copyright Copyright 2022 Epic Systems Corporation\n * @file Button that triggers an access request to all moderators\n * @author Will Cooper\n * @module Epic.VideoApp.Components.Header.Toasts.Buttons.RequestAccessButtonGroup\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback } from \"react\";\nimport ActionButton from \"~/components/Utilities/ActionButton\";\nimport { useStrings } from \"~/hooks\";\nimport { useBroadcastMediaAccessRequest } from \"~/hooks/messaging\";\nimport { useUserState, userActions } from \"~/state\";\nimport { EpicUserType } from \"~/types\";\nimport { useIsScreenShareSupported } from \"~/web-core/hooks/useIsScreenShareSupported\";\nimport ToastDismissButton from \"./ToastDismissButton\";\n\nexport enum RequestAccessButtonGroupTestIds {\n\tself = \"RequestAccessButtonGroup\",\n}\n\nenum TokenNames {\n\trequestAccess = \"RequestAccess\",\n\tenable = \"Enable\",\n}\n\ninterface IProps {\n\tid: string;\n}\n\n/**\n * The RequestAccessButtonGroup component\n * @param props The props ;)\n */\nconst RequestAccessButtonGroup: FC = (props: IProps) => {\n\tconst { id } = props;\n\n\tconst [requestState, userType, cameraLocked, micLocked, screenShareLocked, screenShareAllowed] =\n\t\tuseUserState(\n\t\t\t(selectors) => [\n\t\t\t\tselectors.getDeviceRequestStatus(),\n\t\t\t\tselectors.getUserType(),\n\t\t\t\tselectors.getCameraLock(),\n\t\t\t\tselectors.getMicLock(),\n\t\t\t\tselectors.getScreenShareLock(),\n\t\t\t\tselectors.getUserPermission(\"canShareScreen\"),\n\t\t\t],\n\t\t\t[],\n\t\t);\n\t// Do not request screen sharing permissions if the user cannot share their screen due to device or config\n\tconst canShareScreen = useIsScreenShareSupported() && screenShareAllowed;\n\n\tconst strings = useStrings(\"Toasts\", Object.values(TokenNames));\n\tconst dispatch = useDispatch();\n\tconst broadcastRequest = useBroadcastMediaAccessRequest();\n\n\tconst { audio: audioRequested, video: videoRequested, screenShare: screenShareRequested } = requestState;\n\n\tconst sendRequestMessage = useCallback(() => {\n\t\t// The timer will wait thirty seconds, then clear this state allowing another message to be sent\n\t\t// If intermediate changes to the user's moderation state occur, this timeout ends early.\n\t\tif (!audioRequested && !videoRequested && !screenShareRequested) {\n\t\t\tconst params = {\n\t\t\t\taudio: micLocked,\n\t\t\t\tvideo: cameraLocked,\n\t\t\t\tscreenShare: screenShareLocked && canShareScreen,\n\t\t\t};\n\t\t\tdispatch(userActions.setRequestTimeout(params));\n\t\t\tbroadcastRequest(params);\n\t\t}\n\t}, [\n\t\taudioRequested,\n\t\tbroadcastRequest,\n\t\tcameraLocked,\n\t\tcanShareScreen,\n\t\tdispatch,\n\t\tmicLocked,\n\t\tscreenShareLocked,\n\t\tscreenShareRequested,\n\t\tvideoRequested,\n\t]);\n\n\tconst showRequestButton =\n\t\t!audioRequested && !videoRequested && !screenShareRequested && userType !== EpicUserType.emp;\n\n\treturn (\n\t\t<>\n\t\t\t{/* Do not show a button if the user has recently requested access (~30 seconds) */}\n\t\t\t{showRequestButton && (\n\t\t\t\t\n\t\t\t)}\n\t\t\t\n\t\t\n\t);\n};\n\nRequestAccessButtonGroup.displayName = \"RequestAccessButtonGroup\";\n\nexport default React.memo(RequestAccessButtonGroup);\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file Helper component to determine the buttons, if any, that should be rendered within a toast.\n * @author Will Cooper\n * @module Epic.VideoApp.Components.Header.Toasts.ToastButtons\n */\n\nimport React, { FC, useMemo } from \"react\";\nimport { ToastWithId } from \"~/types\";\nimport ChatToastButtonGroup from \"./Buttons/ChatToastButtonGroup\";\nimport HandleAdmissionButtonGroup from \"./Buttons/HandleAdmissionButtonGroup\";\nimport HandleMultipleRequestButtonGroup from \"./Buttons/HandleMultipleRequestButtonGroup\";\nimport HandleRequestButtonGroup from \"./Buttons/HandleSingleDeviceRequestButtonGroup\";\nimport OpenMenuButton from \"./Buttons/OpenMenuButton\";\nimport RequestAccessButtonGroup from \"./Buttons/RequestAccessButtonGroup\";\nimport ToastDismissButton from \"./Buttons/ToastDismissButton\";\nimport styles from \"./Toasts.module.scss\";\n\nexport enum ToastButtonsTestIds {\n\ttoastContent = \"ToastContent\",\n}\n\n/**\n * Props for ToastButtons Component\n */\ninterface IProps {\n\ttoast: ToastWithId;\n}\n\n/**\n * The ToastButtons component\n * @param props The props ;)\n */\nconst ToastButtons: FC = (props) => {\n\tconst { id, type, dismissTimeMS, ttlSeconds } = props.toast;\n\n\t// Toast Buttons can be specific actions or groups of actions\n\tconst toastContent = useMemo(() => {\n\t\tswitch (type) {\n\t\t\tcase \"user-moderated\":\n\t\t\t\treturn ;\n\t\t\tcase \"single-participant-request\":\n\t\t\t\treturn ;\n\t\t\tcase \"multi-participant-request\":\n\t\t\t\treturn ;\n\t\t\tcase \"single-participant-waiting\":\n\t\t\t\treturn ;\n\t\t\tcase \"multi-participant-waiting\":\n\t\t\t\treturn ;\n\t\t\tcase \"chat-unread-message\":\n\t\t\t\treturn ;\n\t\t\tdefault:\n\t\t\t\treturn null;\n\t\t}\n\t}, [id, props.toast, type, ttlSeconds]);\n\n\tif (toastContent != null) {\n\t\treturn (\n\t\t\t
\n\t\t\t\t{toastContent}\n\t\t\t
\n\t\t);\n\t}\n\n\t// The default button is just a dismiss option\n\tif (dismissTimeMS !== undefined) {\n\t\treturn ;\n\t}\n\n\t// Otherwise return null\n\treturn null;\n};\n\nToastButtons.displayName = \"ToastButtons\";\n\nexport default React.memo(ToastButtons);\n","/**\n * @copyright Copyright 2021 - 2024 Epic Systems Corporation\n * @file toast message\n * @author Colin Walters\n * @module Epic.VideoApp.Components.Header.Toasts.Toast\n */\n/* eslint-disable jsx-a11y/no-noninteractive-tabindex */\n\nimport React, { ComponentType, FC } from \"react\";\nimport { useStrings } from \"~/hooks\";\nimport { IconProps } from \"~/icons\";\nimport Success from \"~/icons/success\";\nimport { ToastStyle, ToastWithId } from \"~/types\";\nimport { resolveClassName } from \"~/utils/className\";\nimport { stringFormat } from \"~/utils/strings\";\nimport LanguageLoadingToast from \"./LanguageLoadingToast\";\nimport ToastButtons from \"./ToastButtons\";\nimport styles from \"./Toasts.module.scss\";\n\n/**\n * Props for Toast Component\n */\ninterface IProps {\n\ttoast: ToastWithId;\n}\n\nexport enum ToastTestIds {\n\tself = \"Toast\",\n}\n\n/**\n * The Toast component\n * @param props The props ;)\n */\nconst Toast: FC = (props) => {\n\tconst { messageToken, messageArgs, toastStyle, type } = props.toast;\n\n\tconst strings: Record = useStrings(\"Toasts\", [messageToken]);\n\n\tconst message = messageArgs?.length\n\t\t? stringFormat(strings[messageToken], ...messageArgs)\n\t\t: strings[messageToken];\n\n\tconst Icon = getToastIcon(toastStyle);\n\n\tconst className = resolveClassName(styles, {\n\t\ttoast: true,\n\t\tsuccess: toastStyle === \"success\",\n\t\tactive: type === \"active-speaker\",\n\t\tsolid: true,\n\t});\n\n\treturn toastStyle === \"language-loading\" ? (\n\t\t\n\t) : (\n\t\t
\n\t\t\t{Icon && }\n\t\t\t\n\t\t\t\n\t\t
\n\t);\n};\n\n/**\n * Get the icon to use for a particular toast style\n * @param style the toast style to get the icon for\n * @returns the icon to use for a particular toast style\n */\nfunction getToastIcon(style?: ToastStyle): ComponentType | null {\n\tswitch (style) {\n\t\tcase \"success\":\n\t\t\treturn Success;\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n\nToast.displayName = \"Toast\";\n\nexport default React.memo(Toast);\n","/**\n * @copyright Copyright 2021 - 2024 Epic Systems Corporation\n * @file toasts component\n * @author Colin Walters\n * @module Epic.VideoApp.Components.Header.Toasts.Toasts\n */\n\nimport React, { FC, memo } from \"react\";\nimport { useAlertState } from \"~/state\";\nimport Toast from \"./Toast\";\nimport styles from \"./Toasts.module.scss\";\n\nexport enum ToastsTestIds {\n\tself = \"Toasts\",\n}\n\n/**\n * The Toasts component\n */\nconst Toasts: FC = () => {\n\tconst toasts = useAlertState((selectors) => selectors.getToastAlerts(), []);\n\n\treturn toasts.length ? (\n\t\t
\n\t\t\t{toasts.map((toast) => (\n\t\t\t\t\n\t\t\t))}\n\t\t
\n\t) : null;\n};\n\nToasts.displayName = \"Toasts\";\n\nexport default memo(Toasts);\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file SimpleHeader component\n * @author Razi Rais\n * @module Epic.VideoApp.Components.Header.SimpleHeader\n */\n\nimport React, { FC } from \"react\";\nimport AccessibilityAlert from \"../Alerts/AccessibilityAlert\";\nimport LanguageSelector from \"../LanguageSelector/LanguageSelector\";\nimport LanguageSelectorButton from \"./Buttons/LanguageSelectorButton\";\nimport HeaderBar from \"./HeaderBar\";\nimport SinglePageMenu from \"./Menu/SinglePageMenu\";\nimport Toasts from \"./Toasts/Toasts\";\n\n/**\n * SimpleHeader contains a header bar with the logo and language selector\n */\nconst SimpleHeader: FC = () => {\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t
\n\t);\n};\n\nSimpleHeader.displayName = \"SimpleHeader\";\n\nexport default SimpleHeader;\n","/**\n * @copyright Copyright 2020-2024 Epic Systems Corporation\n * @file Modal alert for the user making a choice\n * @author Tara Feldstein\n * @module Epic.VideoApp.Components.Alerts.ChoiceAlertBase\n */\nimport React, { FC, useRef } from \"react\";\nimport { useStrings } from \"~/hooks\";\nimport { IChoiceAlert, ITestable } from \"~/types\";\nimport ActionButton from \"../Utilities/ActionButton\";\nimport KeyboardShortcut from \"../Utilities/KeyboardShortcut\";\n\nimport { useGetFormattedHotkeyString } from \"~/hooks/useGetFormattedHotkeyString\";\nimport styles from \"./Alerts.module.scss\";\nimport FocusTrap from \"./FocusTrap\";\n\nexport enum ChoiceAlertBaseTestIds {\n\tself = \"ChoiceAlertBase\",\n\tyesButton = \"ChoiceAlertYesButton\",\n\tnoButton = \"ChoiceAlertNoButton\",\n}\n\ninterface IProps extends ITestable {\n\talert: IChoiceAlert;\n\tconfirm: () => void;\n\tcancel: () => void;\n\tcancelDisabled?: boolean;\n}\n\nenum TokenNames {\n\tyes = \"Yes\",\n\tno = \"No\",\n}\n\n/**\n * Choice alert component\n *\n * Renders a message with two action buttons\n */\nconst ChoiceAlertBase: FC = (props) => {\n\tconst { alert, confirm, cancel, cancelDisabled = false, ...additionalProps } = props;\n\tconst { message, confirmText, confirmHotkey, cancelText, cancelHotkey } = alert;\n\n\tconst confirmRef = useRef(null);\n\tconst cancelRef = useRef(null);\n\n\tconst strings = useStrings(\"ChoiceAlertBase\", Object.values(TokenNames));\n\n\tconst confirmKeyboardShortcut = confirmHotkey ? [\"alt\", confirmHotkey] : [];\n\tconst cancelKeyboardShortcut = cancelHotkey ? [\"alt\", cancelHotkey] : [];\n\tconst yesText = confirmText ?? strings[TokenNames.yes];\n\tconst yesTextFormatted = useGetFormattedHotkeyString(yesText, confirmKeyboardShortcut);\n\tconst noText = cancelText ?? strings[TokenNames.no];\n\tconst noTextFormatted = useGetFormattedHotkeyString(noText, cancelKeyboardShortcut);\n\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t\t{message}\n\t\t\t\n\t\t\t{props.children}\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{confirmHotkey ? (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\tyesText\n\t\t\t\t\t\t)}\n\t\t\t\t\t\n\t\t\t\t\t{!cancelDisabled && (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{cancelHotkey ? (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\tnoText\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\n\t\t\t\t\t)}\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t);\n};\n\nChoiceAlertBase.displayName = \"ChoiceAlertBase\";\n\nexport default ChoiceAlertBase;\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file Modal alert for concurrent session choice\n * @author Tara Feldstein\n * @module Epic.VideoApp.Components.Alerts.ConcurrentSessionChoiceAlert\n */\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback } from \"react\";\nimport { ErrorTokenNames } from \"~/features/generic-error/GenericError\";\nimport { useDisconnect, useVideoCallAuthentication } from \"~/hooks\";\nimport { errorPageActions } from \"~/state\";\nimport { IChoiceAlert } from \"~/types\";\nimport { getCookie, sessionStatusCookieKey, setCookie } from \"~/utils/cookies\";\nimport { minutesToMs } from \"~/utils/dateTime\";\nimport { alertActions } from \"../../state/alerts\";\nimport ChoiceAlertBase from \"./ChoiceAlertBase\";\n\ninterface IProps {\n\talert: IChoiceAlert;\n}\n\nexport enum ConcurrentSessionChoiceAlertTestIds {\n\tself = \"ConcurrentSessionChoiceAlert\",\n}\n\n/**\n * Concurrent Session Choice alert component\n *\n * Warns the user that they have another open call in the video client, and asks them to choose which one to use.\n */\nconst ConcurrentSessionChoiceAlert: FC = (props) => {\n\tconst { alert } = props;\n\n\tconst dispatch = useDispatch();\n\n\tconst { authenticate } = useVideoCallAuthentication();\n\n\tconst disconnect = useDisconnect();\n\n\t// These callbacks can not be set in the redux store, therefor we need to have different components\n\t// to handle the different cases of this type of Choice alert, each with hardcoded button callbacks.\n\tconst confirm = useCallback(() => {\n\t\t// \"Keep previous visit\" / Cancel connecting\n\t\t// Clear the alert and send the user to a meaningful error card\n\t\tdispatch(alertActions.clearAlert());\n\n\t\tdispatch(\n\t\t\terrorPageActions.setErrorCard({\n\t\t\t\ttitle: ErrorTokenNames.concurrentErrorHeader,\n\t\t\t\tmessage: ErrorTokenNames.concurrentErrorMessage,\n\t\t\t}),\n\t\t);\n\t\tdisconnect(true);\n\t}, [dispatch, disconnect]);\n\n\tconst cancel = useCallback(() => {\n\t\tdispatch(alertActions.clearAlert());\n\t\t// Disconnect the other tab\n\t\tconst otherSessionId = getCookie(\"active-session\");\n\t\tif (otherSessionId) {\n\t\t\tsetCookie(sessionStatusCookieKey + otherSessionId, \"disconnected\", minutesToMs(5));\n\t\t}\n\n\t\t// Close modal and directly authenticate now that this is the active session\n\t\tvoid authenticate();\n\t}, [dispatch, authenticate]);\n\n\treturn (\n\t\t\n\t);\n};\n\nConcurrentSessionChoiceAlert.displayName = \"ConcurrentSessionChoiceAlert\";\n\nexport default ConcurrentSessionChoiceAlert;\n","/**\n * @copyright Copyright 2020-2021 Epic Systems Corporation\n * @file Modal alert for image display\n * @author Will Cooper\n * @module Epic.VideoApp.Components.Alerts.DiscardAlert\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback } from \"react\";\nimport { alertActions, imageActions } from \"~/state\";\nimport { IChoiceAlert } from \"../../types/alerts\";\nimport ChoiceAlertBase from \"./ChoiceAlertBase\";\n\ninterface IProps {\n\talert: IChoiceAlert;\n}\n\nexport enum DiscardAlertTestIds {\n\tself = \"DiscardAlert\",\n}\n\n/**\n * Discard Alert\n *\n * A warning to ensure end users know they will lose the current image if they close the preview pane\n */\nconst DiscardAlert: FC = (props) => {\n\tconst { alert } = props;\n\tconst dispatch = useDispatch();\n\n\tconst confirm = useCallback(() => {\n\t\tdispatch(imageActions.setImageData(null));\n\t\tdispatch(alertActions.clearAlert());\n\t}, [dispatch]);\n\n\tconst cancel = useCallback(() => {\n\t\tdispatch(alertActions.clearAlert());\n\t}, [dispatch]);\n\n\treturn (\n\t\t\n\t);\n};\n\nDiscardAlert.displayName = \"DiscardAlert\";\n\nexport default DiscardAlert;\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file Modal alert for confirming user disconnection\n * @author Will Cooper\n * @module Epic.VideoApp.Components.Alerts.DisconnectionChoiceAlert\n */\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback } from \"react\";\nimport { useDisconnect } from \"~/hooks\";\nimport { IChoiceAlert } from \"~/types\";\nimport { alertActions } from \"../../state/alerts\";\nimport ChoiceAlertBase from \"./ChoiceAlertBase\";\n\ninterface IProps {\n\talert: IChoiceAlert;\n}\n\nexport enum DisconnectionChoiceAlertTestIds {\n\tself = \"DisconnectionChoiceAlert\",\n}\n\n/**\n * Disconnection Choice alert component\n *\n * Renders a confirmation message that the user intends to disconnect and two buttons to confirm the action or cancel it.\n */\nconst DisconnectionChoiceAlert: FC = (props) => {\n\tconst { alert } = props;\n\n\tconst dispatch = useDispatch();\n\tconst disconnect = useDisconnect();\n\n\t// These callbacks can not be set in the redux store, therefor we need to have different components\n\t// to handle the different cases of this type of Choice alert, each with hardcoded button callbacks.\n\tconst confirm = useCallback(() => {\n\t\t// Clicking the leave call button should prevent the user from reconnecting\n\t\t// Disconnecting also clears alerts\n\t\tdisconnect(false, true);\n\t}, [disconnect]);\n\n\tconst cancel = useCallback(() => {\n\t\tdispatch(alertActions.clearAlert());\n\t}, [dispatch]);\n\n\treturn (\n\t\t\n\t);\n};\n\nDisconnectionChoiceAlert.displayName = \"DisconnectionChoiceAlert\";\n\nexport default DisconnectionChoiceAlert;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file An alert modal that allows a moderator to leave the call, remain connected, or attempt to end the call for all connected parties\n * @author Will Cooper\n * @module Epic.VideoApp.Components.Alerts.EndVisitAlert\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback, useRef } from \"react\";\nimport { useDisconnect, useStrings } from \"~/hooks\";\nimport { alertActions } from \"~/state\";\nimport { AlertType } from \"~/types\";\nimport ActionButton from \"../Utilities/ActionButton\";\nimport KeyboardShortcut from \"../Utilities/KeyboardShortcut\";\nimport styles from \"./Alerts.module.scss\";\nimport FocusTrap from \"./FocusTrap\";\n\nenum TokenNames {\n\tmessage = \"Message\",\n\tstay = \"Stay\",\n\tend = \"End\",\n\tleave = \"Leave\",\n\tconfirmation = \"Confirmation\",\n}\n\nexport enum EndVisitAlertTestIds {\n\tself = \"EndVisitAlert\",\n\tmessage = \"message\",\n\tleaveCall = \"leave-call\",\n\tendCall = \"end-call\",\n\tstay = \"stay\",\n}\n\n/**\n * EndVisit alert component\n *\n * Renders a confirmation message to allow the user to choose to end the visit for all or leave the visit\n */\nconst EndVisitAlert: FC = () => {\n\tconst dispatch = useDispatch();\n\tconst strings = useStrings(\"EndVisitAlert\", Object.values(TokenNames));\n\n\tconst disconnect = useDisconnect();\n\n\tconst endCall = useCallback(() => {\n\t\tdispatch(alertActions.clearAlert());\n\t\tdispatch(\n\t\t\talertActions.postChoiceAlert({\n\t\t\t\ttype: AlertType.endVisitConfirmation,\n\t\t\t\tmessage: strings[TokenNames.confirmation],\n\t\t\t\tconfirmText: strings[TokenNames.end],\n\t\t\t\tcancelText: strings[TokenNames.stay],\n\t\t\t\tconfirmHotkey: \"a\",\n\t\t\t\tcancelHotkey: \"s\",\n\t\t\t}),\n\t\t);\n\t}, [dispatch, strings]);\n\n\tconst leaveVisit = useCallback(() => {\n\t\t// Disconnecting also clears alerts\n\t\tdisconnect(false, true);\n\t}, [disconnect]);\n\n\tconst cancel = useCallback(() => {\n\t\tdispatch(alertActions.clearAlert());\n\t}, [dispatch]);\n\n\tconst leaveCallRef = useRef(null);\n\tconst stayRef = useRef(null);\n\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t\t{strings[TokenNames.message]}\n\t\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t);\n};\n\nEndVisitAlert.displayName = \"EndVisitAlert\";\n\nexport default EndVisitAlert;\n","/**\n * @copyright Copyright 2022-2024 Epic Systems Corporation\n * @file Confirmation alert that will appear when a moderator attempts to end the visit for all connected parties\n * @author Will Cooper\n * @module Epic.VideoApp.Components.Alerts.EndVisitConfirmationAlert\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback, useContext } from \"react\";\nimport { ErrorTokenNames } from \"~/features/generic-error/GenericError\";\nimport { useDisconnect, useStrings } from \"~/hooks\";\nimport { alertActions, errorPageActions, roomActions, useAuthState } from \"~/state\";\nimport { IChoiceAlert, MessageActionType, MessageType } from \"~/types\";\nimport { makeRequest } from \"~/utils/request\";\nimport { sendMessage } from \"~/utils/sendMessage\";\nimport { VideoSessionContext } from \"~/web-core/components\";\nimport ChoiceAlertBase from \"./ChoiceAlertBase\";\n\ninterface IProps {\n\talert: IChoiceAlert;\n}\n\nenum TokenNames {\n\terrorMessage = \"ErrorMessage\",\n}\n\nexport enum EndVisitConfirmationAlertTestIds {\n\tself = \"EndVisitConfirmationAlert\",\n}\n\n/**\n * EndVisitConfirmation alert component\n *\n * Renders a final confirmation message to allow the user to choose to end the visit for all or return to the visit\n */\nconst EndVisitConfirmationAlert: FC = (props: IProps) => {\n\tconst { alert } = props;\n\tconst { session } = useContext(VideoSessionContext);\n\tconst dispatch = useDispatch();\n\tconst disconnect = useDisconnect();\n\tconst JWT = useAuthState((selectors) => selectors.getJWT(), []);\n\tconst strings = useStrings(\"EndVisitAlert\", Object.values(TokenNames));\n\n\tconst endCall = useCallback(() => {\n\t\tasync function endCallForAll(): Promise {\n\t\t\ttry {\n\t\t\t\t// Mark the user as disconnecting to prevent the visit completed room error in VideoRoom.tsx from also disconnecting them.\n\t\t\t\tdispatch(roomActions.setIsDisconnecting(true));\n\t\t\t\tawait endVisit(JWT || \"\");\n\t\t\t\tsendMessage(session, {\n\t\t\t\t\taction: MessageActionType.broadcast,\n\t\t\t\t\tpayload: null,\n\t\t\t\t\ttype: MessageType.visitEnded,\n\t\t\t\t\tneedsACK: false,\n\t\t\t\t});\n\t\t\t\t// The sender of a broadcast message doesn't receive it themselves, so manually disconnect them after sending it.\n\t\t\t\tdispatch(\n\t\t\t\t\terrorPageActions.setErrorCard({\n\t\t\t\t\t\ttitle: ErrorTokenNames.endedTitle,\n\t\t\t\t\t\tmessage: ErrorTokenNames.endedBody,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\tdisconnect(false);\n\t\t\t} catch {\n\t\t\t\t// If the API call fails, clear the disconnecting status\n\t\t\t\tdispatch(roomActions.setIsDisconnecting(false));\n\t\t\t\tdispatch(alertActions.postGenericAlert(strings[TokenNames.errorMessage]));\n\t\t\t}\n\t\t}\n\n\t\tvoid endCallForAll();\n\t\tdispatch(alertActions.clearAlert());\n\t}, [JWT, disconnect, dispatch, session, strings]);\n\n\tconst cancel = useCallback(() => {\n\t\tdispatch(alertActions.clearAlert());\n\t}, [dispatch]);\n\n\treturn (\n\t\t\n\t);\n};\n\nfunction endVisit(jwt: string): Promise {\n\treturn makeRequest(\"/api/VideoCall/EndVisit\", \"POST\", jwt);\n}\n\nEndVisitConfirmationAlert.displayName = \"EndVisitConfirmationAlert\";\n\nexport default EndVisitConfirmationAlert;\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file Alerts Container Component\n * @author Tara Feldstein\n * @module Epic.VideoApp.Components.Alerts.GenericAlert\n */\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback, useRef } from \"react\";\nimport { useStrings } from \"~/hooks\";\nimport { IGenericAlert } from \"~/types\";\nimport { alertActions } from \"../../state/alerts\";\nimport ActionButton from \"../Utilities/ActionButton\";\nimport KeyboardShortcut from \"../Utilities/KeyboardShortcut\";\nimport styles from \"./Alerts.module.scss\";\nimport FocusTrap from \"./FocusTrap\";\n\ninterface IProps {\n\talert: IGenericAlert;\n}\n\nexport enum GenericAlertTestIds {\n\tself = \"GenericAlert\",\n}\n\n/**\n * Generic Alert component\n *\n * Renders a generic alert, with a message and an Ok button to dismiss the message\n */\nconst GenericAlert: FC = (props) => {\n\tconst { alert, children } = props;\n\n\tconst dispatch = useDispatch();\n\tconst buttonRef = useRef(null);\n\n\tconst clearAlert = useCallback(() => {\n\t\tdispatch(alertActions.clearAlert());\n\t}, [dispatch]);\n\n\tconst tokenNames = [\"OK\"];\n\tconst strings = useStrings(\"GenericAlert\", tokenNames);\n\n\tconst { message } = alert;\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t\t{message}\n\t\t\t\n\t\t\t
{children}
\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t);\n};\n\nGenericAlert.displayName = \"GenericAlert\";\n\nexport default GenericAlert;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file Timer to display as part of an alert\n * @author Will Cooper\n * @module Epic.VideoApp.Components.Alerts.AlertLocalTimer\n */\nimport React, { FC, useRef, useState } from \"react\";\nimport { useInterval, useStrings } from \"~/hooks\";\nimport { getFormattedTime, msToSeconds } from \"~/utils/dateTime\";\nimport { stringFormat } from \"~/utils/strings\";\nimport styles from \"./Alerts.module.scss\";\n\ninterface ILocalTimerProps {\n\tinitialTime: number;\n\t// the interval at which a screen reader will read the\n\t// value remaining on the timer, in seconds\n\tscreenReaderTimeInterval?: number;\n}\n\nexport enum AlertLocalTimerTestIds {\n\ttimer = \"AlertLocalTimer\",\n\tscreenReader = \"AlertLocalTimerScreenReader\",\n}\n\n/**\n * Local Timer for any Alerts that need to display a countdown to the users\n * This component is responsible for its own countdown state.\n */\nconst AlertLocalTimer: FC = (props) => {\n\tconst { initialTime, screenReaderTimeInterval = 10 } = props;\n\n\tconst [timeMS, setTimeMS] = useState(initialTime);\n\tconst lastUpdateInstant = useRef(Date.now());\n\n\t// The message to be read by the screen reader\n\tconst [screenReaderMessage, setScreenReaderMessage] = useState(\"\");\n\n\tenum TokenNames {\n\t\ttimerSecondsAriaLabel = \"TimerSecondsAriaLabel\",\n\t}\n\tconst strings = useStrings(\"AlertLocalTimer\", Object.values(TokenNames));\n\n\tconst onTick = (): void => {\n\t\tconst now = Date.now();\n\t\tconst msDiff = now - lastUpdateInstant.current;\n\t\tlastUpdateInstant.current = now;\n\n\t\tconst currentTimeMS = timeMS - msDiff;\n\t\tsetTimeMS(currentTimeMS);\n\n\t\tif (msToSeconds(currentTimeMS) % screenReaderTimeInterval === 0) {\n\t\t\tconst timerJustInitialized: boolean = currentTimeMS > initialTime - 5000;\n\t\t\tconst timerCompleted: boolean = currentTimeMS < 2000;\n\t\t\tif (!timerJustInitialized && !timerCompleted) {\n\t\t\t\tsetScreenReaderMessage(\n\t\t\t\t\tstringFormat(strings[TokenNames.timerSecondsAriaLabel], msToSeconds(currentTimeMS)),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t};\n\tuseInterval(onTick, 1000);\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\t{getFormattedTime(timeMS)}\n\t\t\t\n\t\t\t\n\t\t\t\t{screenReaderMessage}\n\t\t\t\n\t\t\n\t);\n};\n\nAlertLocalTimer.displayName = \"AlertLocalTimer\";\n\nexport default AlertLocalTimer;\n","/**\n * @copyright Copyright 2020-201 Epic Systems Corporation\n * @file Generic alert for showing a message with a visible countdown\n * @author Max Harkins\n * @module Epic.VideoApp.Components.Alerts.GenericCountdownAlert\n */\nimport React, { FC } from \"react\";\nimport { AlertType, IGenericAlert, IGenericCountdownAlert } from \"~/types\";\nimport AlertLocalTimer from \"./AlertLocalTimer\";\nimport GenericAlert from \"./GenericAlert\";\n\ninterface IProps {\n\talert: IGenericCountdownAlert;\n}\n\n/**\n * Generic timeout alert component\n *\n * Renders a message and a countdown. The component which initiates the alert is responsible for keeping a timer to do any necessary work.\n */\nconst GenericCountdownAlert: FC = (props) => {\n\tconst { alert } = props;\n\tconst genericAlert: IGenericAlert = {\n\t\tmessage: alert.message,\n\t\ttype: AlertType.genericMessage,\n\t};\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nGenericCountdownAlert.displayName = \"GenericCountdownAlert\";\n\nexport default GenericCountdownAlert;\n","/**\n * @copyright Copyright 2022-2024 Epic Systems Corporation\n * @file Hook to modularize the web service and error handling for saving images to a patient chart\n * @author Will Cooper\n * @module Epic.VideoApp.Components.ImageCapture.Hooks.UseSaveImageToChart\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport { useCallback, useContext } from \"react\";\nimport { useStrings } from \"~/hooks\";\nimport {\n\talertActions,\n\tcombinedActions,\n\timageActions,\n\tuseAuthState,\n\tuseImageState,\n\tuseRoomState,\n} from \"~/state\";\nimport { AlertType, MessageActionType, MessageType } from \"~/types\";\nimport { generateMediaToken, storeCapturedImage } from \"~/utils/imageCapture\";\nimport { sendMessage } from \"~/utils/sendMessage\";\nimport { VideoSessionContext } from \"~/web-core/components\";\n\nenum TokenNames {\n\tfailedToSave = \"FailedToSave\",\n\tfailedToSaveAfterRetry = \"FailedToSaveAfterRetry\",\n\tretry = \"Retry\",\n\tdiscard = \"Discard\",\n}\n\n/**\n * Hook used to modularize functionality on storing an image and handling the results of the web service call\n */\nexport function useSaveImageToChart(): (\n\timage: string,\n\tdocType: string,\n\tdescription: string,\n\tfromRetry?: boolean,\n) => Promise {\n\tconst participantId = useImageState((selectors) => selectors.getParticipantId(), []);\n\tconst notifyImageCapture = useImageState((selectors) => selectors.getNotifyImageCapture(), []);\n\tconst JWT = useAuthState((selectors) => selectors.getJWT(), []);\n\tconst dispatch = useDispatch();\n\tconst strings = useStrings(\"useSaveImageToChart\", Object.values(TokenNames));\n\tconst { session } = useContext(VideoSessionContext);\n\tconst displayName = useRoomState((selectors) => selectors.getLocalDisplayName(), []);\n\n\tconst save = useCallback(\n\t\tasync (image: string, docType: string, description: string, fromRetry?: boolean) => {\n\t\t\ttry {\n\t\t\t\tdispatch(imageActions.setIsImageBeingSaved(true));\n\t\t\t\tconst mediaToken = await generateMediaToken(JWT || \"\", docType, description, participantId);\n\t\t\t\tawait storeCapturedImage(image, JWT || \"\", mediaToken);\n\t\t\t\tdispatch(imageActions.setIsImageBeingSaved(false));\n\t\t\t\t// Send data track message with participant ID of person who had their image captured\n\t\t\t\tif (notifyImageCapture) {\n\t\t\t\t\tsendMessage(session, {\n\t\t\t\t\t\taction: MessageActionType.request,\n\t\t\t\t\t\tpayload: displayName,\n\t\t\t\t\t\ttype: MessageType.imageCaptured,\n\t\t\t\t\t\tneedsACK: false,\n\t\t\t\t\t\trecipients: [participantId],\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t// Post image capture success toast\n\t\t\t\tdispatch(\n\t\t\t\t\talertActions.postToastAlert({\n\t\t\t\t\t\ttype: \"image-capture-successful\",\n\t\t\t\t\t\tmessageToken: \"ImageCaptureSuccess\",\n\t\t\t\t\t\ttoastStyle: \"success\",\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tdispatch(alertActions.clearToasts(\"image-capture-successful\"));\n\t\t\t\t}, 3000);\n\t\t\t\tdispatch(imageActions.setImageData(null));\n\t\t\t} catch {\n\t\t\t\tdispatch(imageActions.setIsImageBeingSaved(false));\n\t\t\t\t// Allow one retry via a warning modal pop-up before clearing image data\n\t\t\t\tif (fromRetry) {\n\t\t\t\t\tdispatch(alertActions.postGenericAlert(strings[TokenNames.failedToSaveAfterRetry]));\n\t\t\t\t\tdispatch(imageActions.setImageData(null));\n\t\t\t\t} else {\n\t\t\t\t\tdispatch(\n\t\t\t\t\t\talertActions.postChoiceAlert({\n\t\t\t\t\t\t\tmessage: strings[TokenNames.failedToSave],\n\t\t\t\t\t\t\tcancelText: strings[TokenNames.retry],\n\t\t\t\t\t\t\tconfirmText: strings[TokenNames.discard],\n\t\t\t\t\t\t\tconfirmHotkey: \"D\",\n\t\t\t\t\t\t\tcancelHotkey: \"R\",\n\t\t\t\t\t\t\ttype: AlertType.imageCaptureRetry,\n\t\t\t\t\t\t\talertData: { docTypeId: docType, description },\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tdispatch(combinedActions.clearImageCaptureActive());\n\t\t},\n\t\t[dispatch, JWT, participantId, notifyImageCapture, session, displayName, strings],\n\t);\n\n\treturn save;\n}\n","/**\n * @copyright Copyright 2022 Epic Systems Corporation\n * @file Alert that confirms whether a user wishes to re-attempt a failed image capture workflow\n * @author Will Cooper\n * @module Epic.VideoApp.Components.Alerts.ImageCaptureRetryAlert\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback } from \"react\";\nimport { alertActions, combinedActions, useImageState } from \"~/state\";\nimport { IImageCaptureAlert } from \"~/types\";\nimport { useSaveImageToChart } from \"../ImageCapture/hooks/useSaveImageToChart\";\nimport ChoiceAlertBase from \"./ChoiceAlertBase\";\n\ninterface IProps {\n\talert: IImageCaptureAlert;\n}\n\nexport enum ImageCaptureRetryAlertTestIds {\n\tself = \"ImageCaptureRetryAlert\",\n}\n\n/**\n * Image Capture Retry Alert\n *\n * Alert to allow the Save Media web request to be attempted again\n */\nconst ImageCaptureRetryAlert: FC = (props) => {\n\tconst { alert } = props;\n\tconst dispatch = useDispatch();\n\tconst saveImage = useSaveImageToChart();\n\tconst image = useImageState((selectors) => selectors.getImageData(), []);\n\n\tconst confirm = useCallback(() => {\n\t\tdispatch(combinedActions.clearImageCaptureAlert());\n\t}, [dispatch]);\n\n\tconst cancel = useCallback(() => {\n\t\tif (!alert.alertData || !image) {\n\t\t\tdispatch(combinedActions.clearImageCaptureAlert());\n\t\t\treturn;\n\t\t}\n\n\t\tconst { description, docTypeId } = alert.alertData;\n\t\t// saveImage will handle web service errors\n\t\tvoid saveImage(image, docTypeId, description, true);\n\t\tdispatch(alertActions.clearAlert());\n\t}, [alert.alertData, dispatch, image, saveImage]);\n\n\treturn (\n\t\t\n\t);\n};\n\nImageCaptureRetryAlert.displayName = \"ImageCaptureRetryAlert\";\n\nexport default ImageCaptureRetryAlert;\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Modal alert to alert the user on inactivity and give them the option to disconnect or stay connected\n * @author Echo Cologlu\n * @module Epic.VideoApp.Components.Alerts.InactivityChoiceAlert\n */\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback, useEffect, useRef } from \"react\";\nimport { ErrorTokenNames } from \"~/features/generic-error/GenericError\";\nimport { useDisconnect } from \"~/hooks\";\nimport { alertActions, errorPageActions } from \"~/state\";\nimport { IChoiceAlert, InactivityPopupTimeMS, PopupOffset, Timeout } from \"~/types\";\nimport AlertLocalTimer from \"./AlertLocalTimer\";\nimport ChoiceAlertBase from \"./ChoiceAlertBase\";\n\ninterface IProps {\n\talert: IChoiceAlert;\n}\n\nexport enum InactivityChoiceAlertTestIds {\n\tself = \"InactivityChoiceAlert\",\n}\n\n/**\n * Inactivity Choice alert component\n *\n * Renders a confirmation message that the user will be disconnected due to inactivity and two buttons to extend the period or leave the call.\n * Timeout waits ten minutes, then disconnects the user if the popup has not been dismissed.\n */\nconst InactivityChoiceAlert: FC = (props) => {\n\tconst { alert } = props;\n\n\tconst dispatch = useDispatch();\n\tconst disconnect = useDisconnect();\n\n\tconst disconnectRef = useRef(disconnect);\n\tuseEffect(() => {\n\t\tdisconnectRef.current = disconnect;\n\t}, [disconnect]);\n\n\tconst disconnectTimerRef = useRef(undefined);\n\n\t// Force disconnect at the end of the timeout\n\tuseEffect(() => {\n\t\tdisconnectTimerRef.current = setTimeout(() => {\n\t\t\tdispatch(alertActions.clearAlert());\n\t\t\tdispatch(\n\t\t\t\terrorPageActions.setErrorCard({\n\t\t\t\t\ttitle: ErrorTokenNames.timeoutHeader,\n\t\t\t\t\tmessage: ErrorTokenNames.timeoutMessage,\n\t\t\t\t}),\n\t\t\t);\n\t\t\tdisconnectRef.current(false, false);\n\t\t}, InactivityPopupTimeMS + PopupOffset);\n\n\t\treturn () => {\n\t\t\tclearTimeout(disconnectTimerRef.current);\n\t\t};\n\t}, [dispatch]);\n\n\tconst leaveRoomCallback = useCallback(() => {\n\t\tdispatch(alertActions.clearAlert());\n\t\tdisconnect(false, false);\n\t}, [dispatch, disconnect]);\n\n\tconst extendCallback = useCallback(() => {\n\t\t// Hide alert\n\t\tdispatch(alertActions.clearAlert());\n\t\t// Update Redux to reflect that we want to extend inactivity\n\t\tdispatch(alertActions.setDidRequestInactivityExtension(true));\n\t}, [dispatch]);\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nInactivityChoiceAlert.displayName = \"InactivityChoiceAlert\";\n\nexport default InactivityChoiceAlert;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file Alert that confirms whether the moderator will remove a user from the visit or not\n * @author Will Cooper\n * @module Epic.VideoApp.Components.Alerts.RemoveParticipantChoiceAlert\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback } from \"react\";\nimport { useStrings } from \"~/hooks\";\nimport { alertActions, useAuthState } from \"~/state\";\nimport { IRemoveParticipantAlert } from \"~/types\";\nimport { makeRequest } from \"~/utils/request\";\nimport ChoiceAlertBase from \"./ChoiceAlertBase\";\n\ninterface IProps {\n\talert: IRemoveParticipantAlert;\n}\n\nenum TokenNames {\n\terrorMessage = \"ErrorMessage\",\n}\n\nexport enum RemoveParticipantChoiceAlertTestIds {\n\tself = \"RemoveParticipantChoiceAlert\",\n}\n\n/**\n * RemoveParticipant Choice alert component\n *\n * Renders a confirmation message that the user intends to remove a remote participant.\n */\nconst RemoveParticipantChoiceAlert: FC = (props) => {\n\tconst { alert } = props;\n\n\tconst dispatch = useDispatch();\n\tconst identity = alert.alertData.identity;\n\tconst guid = alert.alertData.guid ?? \"\";\n\tconst JWT = useAuthState((selectors) => selectors.getJWT(), []);\n\tconst strings = useStrings(\"RemoveParticipantChoiceAlert\", Object.values(TokenNames));\n\n\tconst confirm = useCallback(() => {\n\t\tasync function removeFromCall(): Promise {\n\t\t\ttry {\n\t\t\t\tawait removeParticipant(JWT || \"\", identity, guid);\n\t\t\t} catch {\n\t\t\t\tdispatch(alertActions.postGenericAlert(strings[TokenNames.errorMessage]));\n\t\t\t}\n\t\t}\n\n\t\tif (identity) {\n\t\t\tvoid removeFromCall();\n\t\t\tdispatch(alertActions.clearAlert());\n\t\t} else {\n\t\t\tdispatch(alertActions.clearAlert());\n\t\t}\n\t}, [identity, JWT, guid, dispatch, strings]);\n\n\tconst cancel = useCallback(() => {\n\t\tdispatch(alertActions.clearAlert());\n\t}, [dispatch]);\n\n\treturn (\n\t\t\n\t);\n};\n\nfunction removeParticipant(jwt: string, id: string, guid: string): Promise {\n\treturn makeRequest(\"/api/VideoCall/Remove\", \"POST\", jwt, { identity: id, guid: guid });\n}\n\nRemoveParticipantChoiceAlert.displayName = \"RemoveParticipantChoiceAlert\";\n\nexport default RemoveParticipantChoiceAlert;\n","/**\n * @copyright Copyright 2023 Epic Systems Corporation\n * @file Action buttons for the ScreenShareWarningAlert component\n * @author Trevor Roussel\n * @module Epic.VideoApp.Components.Alerts.Buttons.ScreenShareWarningAlertButtons\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { useCallback, useContext } from \"react\";\nimport styles from \"~/components/Alerts/Alerts.module.scss\";\nimport { ShareContext } from \"~/components/ScreenShareContext\";\nimport ActionButton from \"~/components/Utilities/ActionButton\";\nimport KeyboardShortcut from \"~/components/Utilities/KeyboardShortcut\";\nimport { useStrings } from \"~/hooks\";\nimport { alertActions } from \"~/state\";\nimport { ScreenShareWarningAlertTestIds } from \"../ScreenShareWarningAlert\";\n\nenum TokenNames {\n\tcontinue = \"Continue\",\n\tcancel = \"Cancel\",\n}\n\ninterface IProps {\n\tsaveDismissOption: () => void;\n\tcontinueRef: React.RefObject;\n\tcancelRef: React.RefObject;\n}\n\nconst ScreenShareWarningAlertButtons: React.FC = (props) => {\n\tconst { saveDismissOption, continueRef, cancelRef } = props;\n\tconst dispatch = useDispatch();\n\tconst strings = useStrings(\"ScreenShareWarning\", Object.values(TokenNames));\n\n\tconst { requestScreenShareTrack } = useContext(ShareContext);\n\n\tconst continueShare = useCallback(() => {\n\t\tsaveDismissOption();\n\t\tvoid requestScreenShareTrack?.(false);\n\t\tdispatch(alertActions.clearAlert());\n\t}, [dispatch, requestScreenShareTrack, saveDismissOption]);\n\n\tconst cancel = useCallback(() => {\n\t\tdispatch(alertActions.clearAlert());\n\t}, [dispatch]);\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nScreenShareWarningAlertButtons.displayName = \"ScreenShareWarningAlertButtons\";\n\nexport default ScreenShareWarningAlertButtons;\n","/**\n * @copyright Copyright 2023 Epic Systems Corporation\n * @file A modal alert that gives information to safely share screens in clinical contexts\n * @author Trevor Roussel\n * @module Epic.VideoApp.Components.Alerts.ScreenShareWarningAlert\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback, useRef, useState } from \"react\";\nimport { useStrings } from \"~/hooks\";\nimport { useUserState, userActions } from \"~/state\";\nimport { EpicUserType, GuardOptionProperties } from \"~/types\";\nimport { resolveClassName } from \"~/utils/className\";\nimport { isMacSafari } from \"~/utils/os\";\nimport { stringFormat } from \"~/utils/strings\";\nimport { saveUpdatedGuardOptions } from \"~/utils/userGuardOptions\";\nimport { IUser } from \"~/web-core/interfaces\";\nimport { useParticipantName } from \"../Participants/hooks/useParticipantName\";\nimport styles from \"./Alerts.module.scss\";\nimport ScreenShareWarningAlertButtons from \"./Buttons/ScreenShareWarningAlertButtons\";\nimport FocusTrap from \"./FocusTrap\";\n\nenum TokenNames {\n\theader = \"CautionHeader\",\n\tmessage = \"InstructionMessage\",\n\tmacMessage = \"MacInstructionMessage\",\n\tdismissTime = \"DismissTime\",\n\thideForever = \"HideForever\",\n\tinterruptParticipant = \"InterruptParticipant\",\n\tinterruptParticipantWithName = \"InterruptParticipantWithName\",\n}\n\ninterface IProps {\n\tscreenShareParticipant: IUser | null;\n}\n\nexport enum ScreenShareWarningAlertTestIds {\n\tself = \"ScreenShareWarningAlert\",\n\tcontinueShare = \"ContinueShareButton\",\n\tcancel = \"CancelButton\",\n\tdismissBox = \"DismissCheckbox\",\n}\n\n/**\n * ScreenShareWarning alert component\n *\n * Warns the user about considerations when screen sharing and allows the user to continue sharing or cancel.\n * Can also set a userGuardOption to temporarily dismiss the popup to that user.\n * @param props The props ;)\n */\nconst ScreenShareWarningAlert: FC = (props) => {\n\tconst { screenShareParticipant } = props;\n\tconst dispatch = useDispatch();\n\tconst strings = useStrings(\"ScreenShareWarning\", Object.values(TokenNames));\n\n\tconst dismissTime = useUserState((selectors) => selectors.getGuardDismissalTime(), []);\n\tconst userType = useUserState((selectors) => selectors.getUserType(), []);\n\tconst userKey = useUserState((selectors) => selectors.getUserKey(), []);\n\n\tconst [alertDismissed, setAlertDismissed] = useState(false);\n\n\tconst handleDismiss = useCallback(() => {\n\t\tsetAlertDismissed(!alertDismissed);\n\t}, [alertDismissed]);\n\n\tconst saveDismissOption = useCallback(() => {\n\t\tif (alertDismissed) {\n\t\t\tdispatch(userActions.setDismissedScreenShareWarning(true));\n\t\t\tsaveUpdatedGuardOptions(userKey, GuardOptionProperties.dismissedScreenShareWarning);\n\t\t}\n\t}, [alertDismissed, dispatch, userKey]);\n\n\tconst shareParticipantName = useParticipantName(screenShareParticipant);\n\n\t// String to be appended to the title when the screen share is interrupting another participant\n\tconst interruptString = screenShareParticipant\n\t\t? shareParticipantName\n\t\t\t? stringFormat(strings[TokenNames.interruptParticipantWithName], shareParticipantName)\n\t\t\t: strings[TokenNames.interruptParticipant]\n\t\t: null;\n\n\tconst continueRef = useRef(null);\n\tconst cancelRef = useRef(null);\n\tconst dismissRef = useRef(null);\n\n\tconst bodyString = isMacSafari ? strings[TokenNames.macMessage] : strings[TokenNames.message];\n\n\tconst dismissString =\n\t\tdismissTime < 0\n\t\t\t? strings[TokenNames.hideForever]\n\t\t\t: stringFormat(strings[TokenNames.dismissTime], dismissTime);\n\n\tconst bodyClassName = resolveClassName(styles, { bodyText: true, secondary: true });\n\tconst modalCardClassName = resolveClassName(styles, { modalCard: true, \"modalCard-wide\": true });\n\n\treturn (\n\t\t
\n\t\t\t

\n\t\t\t\t{strings[TokenNames.header]}\n\t\t\t

\n\t\t\t
\n\t\t\t\t{(interruptString ? interruptString + \" \" : \"\") + bodyString}\n\t\t\t
\n\t\t\t{/* To handle styling for both the dismiss option case and no dismiss option,\n\t\t\t * we include a version of the alert without splitButtons container */}\n\t\t\t{dismissTime !== 0 && userType === EpicUserType.emp ? (\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t) : (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t)}\n\t\t
\n\t);\n};\n\nScreenShareWarningAlert.displayName = \"ScreenShareWarningAlert\";\n\nexport default ScreenShareWarningAlert;\n","/**\n * @copyright Copyright 2023 Epic Systems Corporation\n * @file Verifying if the users local storage token for skipping the hardware test is valid\n * @author Jonathon Moore\n * @module Epic.VideoApp.Utils.SkipHardwareTestGuardrails\n */\n\nimport {\n\tclearOldGuardOptions,\n\tloadUserGuardOptions,\n\tmakeGuardOptionsBooleans,\n\tsaveGuardOptions,\n} from \"~/utils/userGuardOptions\";\n\n// Function used to pull previous localStorage values, validate them, then save any updated values back to localStorage\nexport function getSkipHardwareTestGuardrails(userKey: string): boolean {\n\tlet userGuardOptions = loadUserGuardOptions(userKey);\n\n\tuserGuardOptions = clearOldGuardOptions(userGuardOptions, 1);\n\tsaveGuardOptions(userKey, userGuardOptions);\n\treturn makeGuardOptionsBooleans(userGuardOptions).skipHardwareTest;\n}\n","/**\n * @copyright Copyright 2020-2024 Epic Systems Corporation\n * @file Get vendor token and join the room\n * @author Spencer Eanes\n * @module Epic.VideoApp.Hooks.UseJoinRoom\n */\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport { useCallback, useContext, useEffect, useRef } from \"react\";\nimport { DeviceContext } from \"~/components/VideoCall/DeviceContext\";\nimport { ErrorTokenNames } from \"~/features/generic-error/GenericError\";\nimport { IBasicAuditEvent, useAuditFeatureUse } from \"~/hooks\";\nimport {\n\talertActions,\n\terrorPageActions,\n\thardwareTestActions,\n\tuseAlertState,\n\tuseAuthState,\n\tuseHardwareTestState,\n\tuseUserState,\n\tuserActions,\n} from \"~/state\";\nimport { EventType } from \"~/types\";\nimport { IUserPreferencesWithEncryption } from \"~/types/user\";\nimport frameMessager from \"~/utils/frameMessager\";\nimport { debug } from \"~/utils/logging\";\nimport { iOSDetectedAtVersion } from \"~/utils/os\";\nimport { makeRequest } from \"~/utils/request\";\nimport {\n\tclearOldGuardOptions,\n\tloadUserGuardOptions,\n\tmakeGuardOptionsBooleans,\n\tnoGuardrailsOptions,\n\tsaveGuardOptions,\n} from \"~/utils/userGuardOptions\";\nimport { VideoSessionContext } from \"~/web-core/components\";\nimport { useStoreError } from \"~/web-core/hooks/useStoreError\";\nimport { SessionErrorCodes } from \"~/web-core/interfaces\";\nimport { IConnectOptions } from \"~/web-core/types/connectOptions\";\nimport { roomActions, useRoomState } from \"../state/room\";\nimport { getSkipHardwareTestGuardrails } from \"../utils/skipHardwareTestGuardrails\";\nimport { useDisconnect } from \"./useDisconnect\";\n\n/**\n * Makes a server request with local track data from redux store\n */\nexport function useJoinRoom(): () => void {\n\tconst dispatch = useDispatch();\n\tconst JWT = useAuthState((selectors) => selectors.getJWT(), []);\n\tconst canConnect = useRoomState((selectors) => selectors.getCanConnect(), []);\n\tconst isConnecting = useRoomState((selectors) => selectors.getIsConnecting(), []);\n\tconst localDisplayName = useRoomState((selectors) => selectors.getLocalDisplayName(), []);\n\tconst disconnectionTimeout = useAlertState((selectors) => selectors.getDisconnectionHandle(), []);\n\tconst useWaitingRoom = useUserState((selectors) => selectors.getIsUserInWaitingRoom(), []);\n\tconst useLowBandwidth = useRoomState((selectors) => selectors.getIsLowBandwidthMode(), []);\n\tconst waitingRoomUrl = useRoomState((selectors) => selectors.getWaitingRoomUrl(), []);\n\tconst userKey = useUserState((selectors) => selectors.getUserKey(), []);\n\tconst hideGuardRails = useUserState((selectors) => selectors.getHideGuardrails(), []);\n\tconst guardDismissalTime = useUserState((selectors) => selectors.getGuardDismissalTime(), []);\n\tconst skipHardwareTestGuardrails = getSkipHardwareTestGuardrails(userKey);\n\tconst skipHardwareTest = useHardwareTestState((selectors) => selectors.getSkipHardwareTest(), []);\n\tconst skipHardwareTestQSP = skipHardwareTest && !skipHardwareTestGuardrails;\n\tconst storeError = useStoreError();\n\tconst auditFeatureUse = useAuditFeatureUse();\n\tconst { session } = useContext(VideoSessionContext);\n\n\tconst { restartAudioContext } = useContext(DeviceContext);\n\n\tconst userPreferences = useUserState((selectors) => selectors.getPreferences(), []);\n\tconst debuggingLogLevel = useRoomState((selectors) => selectors.getDebuggingLogLevel(), []);\n\n\tconst disconnect = useDisconnect();\n\n\tconst getRoomAndConnect = useCallback((): Promise => {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif (!JWT) {\n\t\t\t\treject(\"Jwt is null.\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!session) {\n\t\t\t\treject(\"No session\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsession\n\t\t\t\t.getRoomInfo(JWT)\n\t\t\t\t.then(async (roomInfo: IConnectOptions | null) => {\n\t\t\t\t\tdebug(\"Retrieved the room information: \", roomInfo);\n\t\t\t\t\t//set call info in shared state\n\t\t\t\t\tif (!roomInfo?.info.token) {\n\t\t\t\t\t\treject(\"No token provided.\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\troomInfo.logLevel = debuggingLogLevel;\n\t\t\t\t\troomInfo.isLowBandwidth = useLowBandwidth;\n\t\t\t\t\troomInfo.isInWaitingRoom = useWaitingRoom;\n\t\t\t\t\troomInfo.jwt = JWT;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst didConnect = await session.connect(roomInfo);\n\n\t\t\t\t\t\tif (!didConnect) {\n\t\t\t\t\t\t\treject(\"Failed to connect to room\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdispatch(roomActions.setRoomInfo(roomInfo.info));\n\n\t\t\t\t\t\twindow.session = session;\n\n\t\t\t\t\t\tframeMessager.postMessage(\n\t\t\t\t\t\t\tuseWaitingRoom ? \"Epic.Video.WaitingForAdmission\" : \"Epic.Video.Connected\",\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tconst decryptedUserPreferences: IUserPreferencesWithEncryption = {\n\t\t\t\t\t\t\tdisplayName: localDisplayName,\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t// Update IDs on the server and connect users with smart on fire auth\n\t\t\t\t\t\t/* Only send the waitingRoomUrl if the user will see the waiting room when joining (either when \n\t\t\t\t\t\t\tadmission is required or if no other participants are in the call) */\n\t\t\t\t\t\tconst requestModel: IUpdateIDs = {\n\t\t\t\t\t\t\troomID: session.roomGuid ?? \"\",\n\t\t\t\t\t\t\tparticipantID: session.localUser.getUserGuid() ?? \"\",\n\t\t\t\t\t\t\tdecryptedUserPreferences: decryptedUserPreferences,\n\t\t\t\t\t\t\twaitingRoomUrl:\n\t\t\t\t\t\t\t\tuseWaitingRoom || session.getRemoteParticipants().length === 0\n\t\t\t\t\t\t\t\t\t? waitingRoomUrl\n\t\t\t\t\t\t\t\t\t: \"\",\n\t\t\t\t\t\t};\n\t\t\t\t\t\tconst encryptedUserPreferences = await storeIDS(requestModel, JWT).catch(() => {\n\t\t\t\t\t\t\treject(\"Could not store IDs to the server\");\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (encryptedUserPreferences && userPreferences) {\n\t\t\t\t\t\t\tuserPreferences.encryptedDisplayName =\n\t\t\t\t\t\t\t\tencryptedUserPreferences?.displayName ?? \"\";\n\t\t\t\t\t\t\tdispatch(userActions.setPreferences(userPreferences));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//if the user has opted in and skip needs to be set to true\n\t\t\t\t\t\tif (skipHardwareTestGuardrails) {\n\t\t\t\t\t\t\tdispatch(hardwareTestActions.setDisplaySkipHardwareTestToggleInLobby(false));\n\t\t\t\t\t\t\tdispatch(hardwareTestActions.setSkipHardwareTest(true));\n\t\t\t\t\t\t\tconst skipEvent: IBasicAuditEvent = {\n\t\t\t\t\t\t\t\tfeature: EventType.localStorageHardwareTestSkip,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tvoid auditFeatureUse([skipEvent]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t//Hiding the option to opt out if a individual is using the QSP to skip\n\t\t\t\t\t\tif (skipHardwareTestQSP) {\n\t\t\t\t\t\t\tdispatch(hardwareTestActions.setDisplaySkipHardwareTestToggleInLobby(true));\n\t\t\t\t\t\t\tconst skipEvent: IBasicAuditEvent = {\n\t\t\t\t\t\t\t\tfeature: EventType.automatedHardwareTestSkip,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tvoid auditFeatureUse([skipEvent]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If we set hideGuardRails to true, then load all options as hidden\n\t\t\t\t\t\tif (hideGuardRails) {\n\t\t\t\t\t\t\tdispatch(userActions.setGuardOptions(noGuardrailsOptions));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlet userGuardOptions = loadUserGuardOptions(userKey);\n\t\t\t\t\t\t\t// Set expired properties to null and save cleaned object to localStorage\n\t\t\t\t\t\t\tuserGuardOptions = clearOldGuardOptions(userGuardOptions, guardDismissalTime);\n\t\t\t\t\t\t\tsaveGuardOptions(userKey, userGuardOptions);\n\t\t\t\t\t\t\tdispatch(userActions.setGuardOptions(makeGuardOptionsBooleans(userGuardOptions)));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t} catch (errorBase) {\n\t\t\t\t\t\tconst vendorError = session.processError(errorBase);\n\t\t\t\t\t\t// Display an error to the user that there are too many users in the call\n\t\t\t\t\t\t// Don't mark it as a join room error when the room is full\n\t\t\t\t\t\tif (vendorError) {\n\t\t\t\t\t\t\tvendorError.message = `Failed Join - ${vendorError.message}`;\n\t\t\t\t\t\t\tvendorError.updateConnectionStatus = true;\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tvendorError.sessionErrorCode ===\n\t\t\t\t\t\t\t\tSessionErrorCodes.roomMaxParticipantsExceededError\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tdispatch(\n\t\t\t\t\t\t\t\t\terrorPageActions.setErrorCard({\n\t\t\t\t\t\t\t\t\t\ttitle: ErrorTokenNames.joinRoomFullHeader,\n\t\t\t\t\t\t\t\t\t\tmessage: ErrorTokenNames.joinRoomFullBody,\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tvendorError.isJoinRoomError = false;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tvendorError.isJoinRoomError = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tstoreError(vendorError);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treject(\"There was a problem connecting to the room.\");\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.catch((error: Error) => {\n\t\t\t\t\t// Redirect to error page if we can't reach the server or an error occurs\n\t\t\t\t\t// Only store vendor errors to the servers, general errors don't provide relevant data.\n\t\t\t\t\tconst vendorError = session.processError(error);\n\t\t\t\t\tif (vendorError) {\n\t\t\t\t\t\tvendorError.message = `Failed Join - ${vendorError.message}`;\n\t\t\t\t\t\tvendorError.updateConnectionStatus = true;\n\t\t\t\t\t\tvendorError.isJoinRoomError = true;\n\t\t\t\t\t\tstoreError(vendorError);\n\t\t\t\t\t}\n\t\t\t\t\treject(\"Server error, redirecting to error page.\");\n\t\t\t\t});\n\t\t});\n\t}, [\n\t\tJWT,\n\t\tdebuggingLogLevel,\n\t\tuseLowBandwidth,\n\t\tuseWaitingRoom,\n\t\tdispatch,\n\t\tlocalDisplayName,\n\t\twaitingRoomUrl,\n\t\tuserPreferences,\n\t\tskipHardwareTestGuardrails,\n\t\tskipHardwareTestQSP,\n\t\tauditFeatureUse,\n\t\thideGuardRails,\n\t\tuserKey,\n\t\tguardDismissalTime,\n\t\tstoreError,\n\t\tsession,\n\t]);\n\n\t// Connects to the room\n\tconst connectToRoom = useCallback(() => {\n\t\tgetRoomAndConnect()\n\t\t\t.then(() => {\n\t\t\t\t// reset the isConnecting state once we successfully join the room\n\t\t\t\tdispatch(roomActions.setIsConnecting(false));\n\t\t\t})\n\t\t\t.catch((error: Error) => {\n\t\t\t\tdebug(error);\n\t\t\t\tdisconnect(true);\n\t\t\t})\n\t\t\t/** often it seems the initial join volume on iOS15 is hitting a limiter causing pumping,\n\t\t\t\t (background cycle fixes this) so restart the AudioContext right after joining \t\t*/\n\t\t\t.finally(() => {\n\t\t\t\tif (iOSDetectedAtVersion(\"15+\")) {\n\t\t\t\t\tvoid restartAudioContext();\n\t\t\t\t}\n\t\t\t});\n\t}, [getRoomAndConnect, dispatch, disconnect, restartAudioContext]);\n\n\tconst connectRef = useRef(connectToRoom);\n\tuseEffect(() => {\n\t\tconnectRef.current = connectToRoom;\n\t}, [connectToRoom]);\n\n\t// Once there has been an attempt to join and a JWT update, actually proceed with joining the visit\n\tuseEffect(() => {\n\t\tif (canConnect && isConnecting) {\n\t\t\tconnectRef.current();\n\t\t}\n\t}, [canConnect, isConnecting]);\n\n\t// Actually attempts to join the room\n\tconst joinRoom = useCallback(() => {\n\t\tif (isConnecting) {\n\t\t\treturn;\n\t\t}\n\t\tdispatch(roomActions.setIsConnecting(true));\n\n\t\t// If the user has dismissed their timeout alert, clear it here now that they are joining on time\n\t\tif (disconnectionTimeout) {\n\t\t\tclearTimeout(disconnectionTimeout);\n\t\t\tdispatch(alertActions.setDisconnectionTimeout(null));\n\t\t}\n\t}, [dispatch, isConnecting, disconnectionTimeout]);\n\n\treturn joinRoom;\n}\n\ninterface IUpdateIDs {\n\troomID: string;\n\tparticipantID: string;\n\tdecryptedUserPreferences: IUserPreferencesWithEncryption;\n\twaitingRoomUrl: string;\n}\n\n/**\n * Stores the IDs to Cosmos\n */\nasync function storeIDS(data: IUpdateIDs, jwt: string): Promise {\n\treturn makeRequest(\"/api/VideoCall/UpdateIDs\", \"POST\", jwt, data);\n}\n","/**\n * @copyright Copyright 2020-201 Epic Systems Corporation\n * @file Modal alert for confirming user disconnection\n * @author Spencer Eanes + Will Cooper\n * @module Epic.VideoApp.Components.Alerts.TimeoutChoiceAlert\n */\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { ErrorTokenNames } from \"~/features/generic-error/GenericError\";\nimport { useDisconnect } from \"~/hooks\";\nimport { useJoinRoom } from \"~/hooks/useJoinRoom\";\nimport { alertActions, errorPageActions, useHardwareTestState } from \"~/state\";\nimport { HardwareTestStatus, IChoiceAlert, LobbyPopupTimeMS, Timeout } from \"~/types\";\nimport AlertLocalTimer from \"./AlertLocalTimer\";\nimport ChoiceAlertBase from \"./ChoiceAlertBase\";\n\ninterface IProps {\n\talert: IChoiceAlert;\n}\n\nexport enum TimeoutChoiceAlertTestIds {\n\tself = \"TimeoutChoiceAlert\",\n}\n\n/**\n * Disconnection Choice alert component\n *\n * Renders a confirmation message that the user intends to disconnect and two buttons to confirm the action or cancel it.\n * Timeout waits five minutes.\n */\nconst TimeoutChoiceAlert: FC = (props) => {\n\tconst { alert } = props;\n\tconst [handle, setHandle] = useState();\n\tconst dispatch = useDispatch();\n\tconst joinRoom = useJoinRoom();\n\tconst disconnect = useDisconnect();\n\tconst disconnectRef = useRef(disconnect);\n\n\tconst status = useHardwareTestState(\n\t\t(selectors) => selectors.getTestStatus({ isStandalone: false, allowOneError: true }),\n\t\t[],\n\t);\n\n\tconst testPassed = useMemo(() => status === HardwareTestStatus.passed, [status]);\n\n\tuseEffect(() => {\n\t\tdisconnectRef.current = disconnect;\n\t}, [disconnect]);\n\n\t// This timeout is created when the alert is rendered (after four minutes in the lobby)\n\t// It is cleared below when the user chooses to join the call\n\t// If the user dismisses the pop-up, they will still have this event waiting to fire.\n\t// It should also be cleared when joining the visit via the \"Join Call\" button.\n\tuseEffect(() => {\n\t\tconst timeoutDisconnect: Timeout = setTimeout(() => {\n\t\t\tdispatch(alertActions.clearAlert());\n\t\t\tdispatch(\n\t\t\t\terrorPageActions.setErrorCard({\n\t\t\t\t\ttitle: ErrorTokenNames.timeoutHeader,\n\t\t\t\t\tmessage: ErrorTokenNames.timeoutMessage,\n\t\t\t\t}),\n\t\t\t);\n\t\t\tdisconnectRef.current(true);\n\t\t}, LobbyPopupTimeMS);\n\t\tsetHandle(timeoutDisconnect);\n\t}, [dispatch]);\n\n\tconst confirm = useCallback(() => {\n\t\tdispatch(alertActions.clearAlert());\n\t\tif (handle) {\n\t\t\tdispatch(alertActions.setDisconnectionTimeout(handle));\n\t\t}\n\t}, [dispatch, handle]);\n\n\tconst cancel = useCallback(() => {\n\t\tdispatch(alertActions.clearAlert());\n\t\tif (status === HardwareTestStatus.passed) {\n\t\t\tif (handle) {\n\t\t\t\tclearTimeout(handle);\n\t\t\t}\n\t\t\tjoinRoom();\n\t\t} else {\n\t\t\t// If the hardware test has not been passed, save the handle off to allow user to attempt to pass test and join before the timer runs out\n\t\t\tif (handle) {\n\t\t\t\tdispatch(alertActions.setDisconnectionTimeout(handle));\n\t\t\t}\n\t\t}\n\t}, [dispatch, status, handle, joinRoom]);\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nTimeoutChoiceAlert.displayName = \"TimeoutChoiceAlert\";\n\nexport default TimeoutChoiceAlert;\n","/**\n * @copyright Copyright 2020-2023 Epic Systems Corporation\n * @file Alerts Container Component\n * @author Tara Feldstein\n * @module Epic.VideoApp.Components.Alerts.Alerts\n */\nimport React, { FC, useEffect, useRef, useState } from \"react\";\nimport { useStrings } from \"~/hooks\";\nimport { useAlertState } from \"~/state/alerts\";\nimport { AlertType, StyleContext } from \"~/types\";\nimport { BackgroundStyleContextProvider } from \"../Utilities/BackgroundStyleContext\";\nimport styles from \"./Alerts.module.scss\";\nimport ConcurrentSessionChoiceAlert from \"./ConcurrentSessionChoiceAlert\";\nimport DiscardAlert from \"./DiscardAlert\";\nimport DisconnectionChoiceAlert from \"./DisconnectionChoiceAlert\";\nimport EndVisitAlert from \"./EndVisitAlert\";\nimport EndVisitConfirmationAlert from \"./EndVisitConfirmationAlert\";\nimport GenericAlert from \"./GenericAlert\";\nimport GenericCountdownAlert from \"./GenericCountdownAlert\";\nimport ImageCaptureRetryAlert from \"./ImageCaptureRetryAlert\";\nimport InactivityChoiceAlert from \"./InactivityChoiceAlert\";\nimport RemoveParticipantChoiceAlert from \"./RemoveParticipantChoiceAlert\";\nimport ScreenShareWarningAlert from \"./ScreenShareWarningAlert\";\nimport TimeoutChoiceAlert from \"./TimeoutChoiceAlert\";\n\nenum TokenNames {\n\texistingConnectionAlertLabel = \"ExistingConnectionAlertLabel\",\n\tgenericAlertLabel = \"GenericAlertLabel\",\n\timageCaptureAlertLabel = \"ImageCaptureAlertLabel\",\n\tleaveCallAlertLabel = \"LeaveCallAlertLabel\",\n\tscreenSharingAlertLabel = \"ScreenSharingAlertLabel\",\n\tsessionTimeoutAlertLabel = \"SessionTimeoutAlertLabel\",\n\tscreenSharingWarningLabel = \"ScreenSharingWarningLabel\",\n\tremoveParticipantAlertLabel = \"RemoveParticipantAlertLabel\",\n\tendVisitAlertLabel = \"EndVisitAlertLabel\",\n\tendVisitConfirmationAlertLabel = \"EndVisitConfirmationAlertLabel\",\n\tinactivityAlertLabel = \"InactivityAlertLabel\",\n}\n\nexport enum AlertsTestIds {\n\tself = \"Alerts\",\n}\n\n/**\n * The Alerts container component\n *\n * Reads alerts data from state and displays the appropriate modal, if any\n */\nconst Alerts: FC = () => {\n\tconst currentAlert = useAlertState((selectors) => selectors.getCurrentAlert(), []);\n\n\tconst alertDivRef = useRef(null);\n\tconst [alertParentNode, setAlertParentNode] = useState(null);\n\n\tconst strings = useStrings(\"Alerts\", Object.values(TokenNames));\n\n\t// Keep track of parent node of alertDivRef so that it's siblings can be updated for both cases:\n\t// - to set aria-hidden to true when alert div is present.\n\t// - to set aria-hidden to false when alert div is not present (i.e. while hiding an alert).\n\tuseEffect(() => {\n\t\tif (alertDivRef.current) {\n\t\t\tsetAlertParentNode(alertDivRef.current.parentNode);\n\t\t}\n\t}, [currentAlert]);\n\n\t// Update aria-hidden value to true or false for all siblings of alertDivRef\n\tuseEffect(() => {\n\t\tconst ariaHiddenValue = currentAlert ? \"true\" : \"false\";\n\t\tlet sibling = alertParentNode?.firstElementChild;\n\t\twhile (sibling) {\n\t\t\tif (sibling !== alertDivRef.current) {\n\t\t\t\tsibling.setAttribute(\"aria-hidden\", ariaHiddenValue);\n\t\t\t}\n\t\t\tsibling = sibling.nextElementSibling;\n\t\t}\n\t}, [currentAlert, alertParentNode]);\n\n\tif (!currentAlert) {\n\t\treturn null;\n\t}\n\n\tlet alert = null;\n\tlet ariaLabel: string;\n\n\t// As we add different alerts we will need to add more specific types to the alert enum\n\tswitch (currentAlert.type) {\n\t\tcase AlertType.disconnectChoice:\n\t\t\talert = ;\n\t\t\tariaLabel = strings[TokenNames.leaveCallAlertLabel];\n\t\t\tbreak;\n\t\tcase AlertType.concurrentSessionChoice:\n\t\t\talert = ;\n\t\t\tariaLabel = strings[TokenNames.existingConnectionAlertLabel];\n\t\t\tbreak;\n\t\tcase AlertType.timeoutChoice:\n\t\t\talert = ;\n\t\t\tariaLabel = strings[TokenNames.sessionTimeoutAlertLabel];\n\t\t\tbreak;\n\t\tcase AlertType.discardChoice:\n\t\t\talert = ;\n\t\t\tariaLabel = strings[TokenNames.imageCaptureAlertLabel];\n\t\t\tbreak;\n\t\tcase AlertType.screenShareWarning:\n\t\t\talert = ;\n\t\t\tariaLabel = strings[TokenNames.screenSharingWarningLabel];\n\t\t\tbreak;\n\t\tcase AlertType.removeParticipant:\n\t\t\talert = ;\n\t\t\tariaLabel = strings[TokenNames.removeParticipantAlertLabel];\n\t\t\tbreak;\n\t\tcase AlertType.endVisit:\n\t\t\talert = ;\n\t\t\tariaLabel = strings[TokenNames.endVisitAlertLabel];\n\t\t\tbreak;\n\t\tcase AlertType.endVisitConfirmation:\n\t\t\talert = ;\n\t\t\tariaLabel = strings[TokenNames.endVisitConfirmationAlertLabel];\n\t\t\tbreak;\n\t\tcase AlertType.imageCaptureRetry:\n\t\t\talert = ;\n\t\t\tariaLabel = strings[TokenNames.imageCaptureAlertLabel];\n\t\t\tbreak;\n\t\tcase AlertType.genericCountdown:\n\t\t\talert = ;\n\t\t\tariaLabel = strings[TokenNames.genericAlertLabel];\n\t\t\tbreak;\n\t\tcase AlertType.inCallInactivityChoice:\n\t\t\talert = ;\n\t\t\tariaLabel = strings[TokenNames.inactivityAlertLabel];\n\t\t\tbreak;\n\t\tdefault:\n\t\t\talert = ;\n\t\t\tariaLabel = strings[TokenNames.genericAlertLabel];\n\t}\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t{alert}\n\t\t\t
\n\t\t\n\t);\n};\n\nAlerts.displayName = \"Alerts\";\n\nexport default Alerts;\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Reusable component to render standard functionality that should be present in most features, but needs to be rendered by them not their parents.\n * @author Will Cooper\n * @module Epic.VideoApp.Components.StandardLayout.FeatureWrapper\n */\n\nimport React, { FC } from \"react\";\nimport Alerts from \"../Alerts/Alerts\";\nimport ScreenShareContext from \"../ScreenShareContext\";\n\n/**\n * The FeatureWrapper component\n * @param props The props\n */\nconst FeatureWrapper: FC = (props) => {\n\tconst { children } = props;\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t{children}\n\t\t\n\t);\n};\nFeatureWrapper.displayName = \"FeatureWrapper\";\n\nexport default FeatureWrapper;\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file Generic error page for Video Client\n * @author Will Cooper\n * @module Epic.VideoApp.Features.GenericError.GenericError\n */\n\nimport { RouteComponentProps } from \"@reach/router\";\nimport React, { FC } from \"react\";\nimport ErrorCard from \"~/components/Cards/ErrorCard\";\nimport CopyrightLinkButton from \"~/components/Copyright/CopyrightLinkButton\";\nimport SimpleHeader from \"~/components/Header/SimpleHeader\";\nimport FeatureWrapper from \"~/components/StandardLayout/FeatureWrapper\";\nimport { useDocumentTitle, useStrings } from \"~/hooks\";\nimport { useErrorPageState } from \"~/state\";\nimport { SharedStringTokens } from \"~/utils/strings\";\n\n/** String tokens used by the GenericError component */\nexport enum ErrorTokenNames {\n\t// Generic Errors\n\tgenericHeader = \"SomethingWentWrong\",\n\tgenericMessage = \"RelaunchTheCall\",\n\tstandaloneMessage = \"RelaunchTheTest\",\n\n\t// ParticipantRemoved\n\tparticipantRemovedTitle = \"ParticipantRemovedHeader\",\n\tparticipantRemovedBody = \"ParticipantRemovedBody\",\n\tparticipantRemovedBodyRejoin = \"ParticipantRemovedBodyRejoin\",\n\n\t// ConcurrentSessionChoiceAlert\n\tconcurrentErrorHeader = \"ReturnToOngoingCallHeader\",\n\tconcurrentErrorMessage = \"ReturnToOngoingCallMessage\",\n\n\t// TimeoutChoiceAlert\n\ttimeoutHeader = \"LaunchCallAgainHeader\",\n\ttimeoutMessage = \"LaunchCallAgainMessage\",\n\n\t// useActiveSession\n\tactiveSessionHeader = \"ConnectionClosed\",\n\tactiveSessionMessage = \"ReturnToOtherOpenCall\",\n\n\t// useJoinRoom\n\tjoinRoomFullHeader = \"CallFullHeader\",\n\tjoinRoomFullBody = \"CallFullBody\",\n\n\t// useRebuildSessionFromCookies\n\trefreshFailedBody = \"FailedToReconnect\",\n\n\t// useVideoCallAuthentication\n\tauthTooEarlyHeader = \"TooEarlyHeader\",\n\tauthTooEarlyBody = \"TooEarlyBody\",\n\tauthExpiredHeader = \"VisitExpiredHeader\",\n\tauthExpiredBody = \"VisitExpiredBody\",\n\tauthFailedToConnect = \"FailedToConnect\",\n\tauthRemovedHeader = \"AuthRemovedHeader\",\n\tauthRemovedBody = \"AuthRemovedBody\",\n\n\t// VideoRoom (Room status messages)\n\tendedTitle = \"CallEndedHeader\",\n\tendedBody = \"CallEndedBody\",\n}\n\n/**\n * A generic error component that can render a title and message for each error\n */\nconst GenericError: FC = () => {\n\tconst strings = useStrings(\"GenericError\", Object.values(ErrorTokenNames), [\n\t\tSharedStringTokens.defaultPageTitle,\n\t]);\n\n\tuseDocumentTitle(strings[SharedStringTokens.defaultPageTitle]);\n\n\tconst errorTitleToken = useErrorPageState((selectors) => selectors.getErrorPageTitle(), []) ?? \"\";\n\tconst errorMessageToken = useErrorPageState((selectors) => selectors.getErrorPageText(), []) ?? \"\";\n\n\t// always fallback to the generic error if the tokens are invalid. If the token is an empty string, the lookup will be undefined at runtime.\n\tconst errorTitle = strings[errorTitleToken] ?? strings[ErrorTokenNames.genericHeader];\n\tconst errorMessage = strings[errorMessageToken] ?? strings[ErrorTokenNames.genericMessage];\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t);\n};\n\nGenericError.displayName = \"GenericError\";\n\nexport default GenericError;\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file Utilities for manually updating the URL\n * @author Will Cooper\n * @module Epic.VideoApp.Utils.QueryParameters\n */\n\nimport { navigate } from \"@reach/router\";\nimport { QueryParameters } from \"~/types\";\nimport { getPseudoRandomId } from \"./general\";\n\n/**\n * Clear the url query string and add new values\n * @param queryParams key and value pairs to be added to the query parameter url string\n */\nexport function resetQueryParameter(queryParams: Record): void {\n\tconst queryString = new URLSearchParams(\"\");\n\n\tfor (const key in queryParams) {\n\t\t// TypeGuard of \"for in\" loop (ESLint)\n\t\tif (key in queryParams) {\n\t\t\tqueryString.set(key, queryParams[key]);\n\t\t}\n\t}\n\t// Call to history.replaceState does not affect the reach router state that we use to parse URL parameters\n\tvoid navigate(window.location.pathname + \"?\" + queryString.toString(), { replace: true });\n}\n\n/**\n * Remove the entire query string from the url\n */\nexport function clearQueryParameters(): void {\n\tvoid navigate(window.location.pathname);\n}\n\n/**\n * Adds any query params to the current query string\n * @param queryParams key and value pairs to be added to the query parameter url string\n */\nexport function addQueryParameters(queryParams: Record): void {\n\tconst queryString = new URLSearchParams(window.location.search);\n\n\tfor (const key in queryParams) {\n\t\t// TypeGuard of \"for in\" loop (ESLint)\n\t\tif (key in queryParams) {\n\t\t\tqueryString.set(key, queryParams[key]);\n\t\t}\n\t}\n\tvoid navigate(window.location.pathname + \"?\" + queryString.toString(), { replace: true });\n}\n\n/**\n * Remove all params from the url query string except those with keys in queryParams\n * @param queryParams array of string query parameter keys that should be not be removed\n */\nexport function removeAllQueryParamsExcept(queryParams: string[]): void {\n\t// convert the query parameters to lower case to make the below case insensitive\n\tconst lowerQueryParams = queryParams.map((q) => q.toLowerCase());\n\n\t// it breaks if you delete params in the same query string you're iterating so make two, one to iterate and one to modify\n\tconst queryStringKeys = new URLSearchParams(window.location.search).keys();\n\tconst queryString = new URLSearchParams(window.location.search);\n\n\tfor (const key of queryStringKeys) {\n\t\tif (!lowerQueryParams.includes(key.toLowerCase())) {\n\t\t\tqueryString.delete(key);\n\t\t}\n\t}\n\n\tvoid navigate(window.location.pathname + \"?\" + queryString.toString(), { replace: true });\n}\n\n/**\n *Add a unique sessionID into the URL query string\n */\nexport function setSessionID(): string {\n\t// Generate a session ID and update the URL for future retrieval\n\tconst sessionID = getPseudoRandomId();\n\taddQueryParameters({ [QueryParameters.sessionId]: sessionID });\n\treturn sessionID;\n}\n","/**\n * @copyright Copyright 2020-2024 Epic Systems Corporation\n * @file Hardware Test authentication hook\n * @author Matt Panico\n * @module Epic.VideoApp.Hooks.Auth.UseHardwareTestAuthentication\n */\n\nimport { IAction, useDispatch } from \"@epic/react-redux-booster\";\nimport { useEffect, useRef } from \"react\";\nimport { ErrorTokenNames } from \"~/features/generic-error/GenericError\";\nimport { combinedActions, errorPageActions, useAuthState } from \"~/state\";\nimport {\n\tAuthRequestParameters,\n\tFDIQueryParameters,\n\tIConfigurationUpdateDTO,\n\tIHardwareTestAuth,\n\tQueryParameters,\n} from \"~/types\";\nimport { expireNonSessionCookies } from \"~/utils/cookies\";\nimport { I18n, getPreferredLocale } from \"~/utils/i18n\";\nimport {\n\tgetConfigFromSessionCookie,\n\tgetHardwareTestJWTCookie,\n\tsetHardwareTestConfigurationCookie,\n\tsetHardwareTestJWTCookie,\n} from \"~/utils/jwt\";\nimport { debug } from \"~/utils/logging\";\nimport { removeAllQueryParamsExcept, setSessionID } from \"~/utils/queryParameters\";\nimport { makeRequest } from \"~/utils/request\";\nimport { VideoVendor } from \"~/web-core/types\";\nimport { useCaseInsensitiveSearchParam, useDisconnect } from \"..\";\n\nexport function useHardwareTestAuthentication(): void {\n\tconst dispatch = useDispatch();\n\tconst JWT = useAuthState((selectors) => selectors.getJWT(), []);\n\n\tconst sessionID = useCaseInsensitiveSearchParam(QueryParameters.sessionId) ?? \"\";\n\tconst sessionIDRef = useRef(sessionID);\n\n\t// organization ID\n\tconst organizationID = useCaseInsensitiveSearchParam(FDIQueryParameters.orgId) ?? \"\";\n\tconst org = useCaseInsensitiveSearchParam(FDIQueryParameters.orgIdShort) ?? \"\";\n\tconst orgID = organizationID || org;\n\n\t// User type\n\tconst fullUserType = useCaseInsensitiveSearchParam(FDIQueryParameters.userTypeLong) ?? \"\";\n\tconst UT = useCaseInsensitiveSearchParam(FDIQueryParameters.userType) ?? \"\";\n\tconst userType = fullUserType || UT;\n\n\t// launch token\n\tconst launchToken = useCaseInsensitiveSearchParam(FDIQueryParameters.launchToken) ?? \"\";\n\n\t// Telehealth token\n\tconst ttLong = useCaseInsensitiveSearchParam(FDIQueryParameters.telehealthTokenLong) ?? \"\";\n\tconst tt = useCaseInsensitiveSearchParam(FDIQueryParameters.telehealthToken) ?? \"\";\n\tconst telehealthToken = ttLong || tt;\n\n\t// Web Pacs\n\tconst encryptedString = useCaseInsensitiveSearchParam(FDIQueryParameters.encryptedString) ?? \"\";\n\tconst useSecondary = useCaseInsensitiveSearchParam(FDIQueryParameters.useSecondaryEncryptionKey) === \"1\";\n\n\t// Demo system\n\tconst computerName = useCaseInsensitiveSearchParam(FDIQueryParameters.demoSystemComputerName) ?? \"\";\n\tconst majorVersion = useCaseInsensitiveSearchParam(FDIQueryParameters.demoSystemMajorVersion) ?? \"\";\n\n\tconst disconnect = useDisconnect();\n\tconst disconnectRef = useRef(disconnect);\n\tuseEffect(() => {\n\t\tdisconnectRef.current = disconnect;\n\t}, [disconnect]);\n\n\t// if we don't have a valid JWT, get one\n\tuseEffect(() => {\n\t\tif (JWT !== null) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remove any cookies from a video call that might hang around\n\t\texpireNonSessionCookies(sessionIDRef.current);\n\n\t\t// If we don't have a valid JWT, check the cookies. If nothing in the cookies, time to validate a new request\n\t\tconst cookieJWT = getHardwareTestJWTCookie(sessionIDRef.current);\n\t\tif (cookieJWT) {\n\t\t\tremoveAllQueryParamsExcept([QueryParameters.sessionId]);\n\t\t\tvoid rebuildHardwareTestSessionFromCookies(cookieJWT, sessionIDRef.current, dispatch);\n\t\t\treturn;\n\t\t}\n\n\t\t// Build the API request parameters based on which URL values were available\n\t\tconst requestParams = exportFunctions.buildHardwareTestAuthenticationRequest(\n\t\t\torgID,\n\t\t\tencryptedString,\n\t\t\tuseSecondary,\n\t\t\tlaunchToken,\n\t\t\ttelehealthToken,\n\t\t\tuserType,\n\t\t\tcomputerName,\n\t\t\tmajorVersion,\n\t\t);\n\n\t\t// Authenticate with the server for a JWT. If there is an error with the request, treat it as a validation error\n\t\tconst newSessionID = setSessionID();\n\t\tloadJWT(requestParams)\n\t\t\t.then(async (response: IHardwareTestAuth) => {\n\t\t\t\tremoveAllQueryParamsExcept([QueryParameters.sessionId]);\n\n\t\t\t\tsetHardwareTestJWTCookie(response.jwt, newSessionID);\n\t\t\t\tawait setLocaleAndJWT(response, newSessionID, dispatch);\n\t\t\t})\n\t\t\t.catch((error: Error) => {\n\t\t\t\tdebug(\"Unable to complete authorization\", error);\n\t\t\t\tdispatch(\n\t\t\t\t\terrorPageActions.setErrorCard({\n\t\t\t\t\t\tmessage: ErrorTokenNames.standaloneMessage,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\tdisconnectRef.current(true);\n\t\t\t});\n\t}, [\n\t\tJWT,\n\t\torgID,\n\t\tencryptedString,\n\t\tuseSecondary,\n\t\tlaunchToken,\n\t\ttelehealthToken,\n\t\tuserType,\n\t\tcomputerName,\n\t\tmajorVersion,\n\t\tdispatch,\n\t]);\n}\n\n/**\n * Packages up the URL parameters for use in the API call. Maps keys in the query string\n * to what is expected on the server. Used to send the encrypted string version of call context.\n *\n * @param org - Organization ID for the query string\n * @param encString - Encrypted string that holds launch model parameters\n * @param useSecondary - Which encryption key to use when validating parameters\n * @param launch - The launch token for the authentication request\n * @param telehealthToken - The telehealth token for the authentication request\n * @param userType - Type of the user\n * @param computerName -Computer name\n * @param majorVersion - Major version\n *\n * @returns The request object with the proper parameters from the URL\n */\nfunction buildHardwareTestAuthenticationRequest(\n\torg: string,\n\tencString: string,\n\tuseSecondary: boolean,\n\tlaunch: string,\n\ttelehealthToken: string,\n\tuserType: string,\n\tcomputerName: string,\n\tmajorVersion: string,\n): Record {\n\tconst params: Record = {};\n\n\tparams[AuthRequestParameters.orgId] = org;\n\tparams[AuthRequestParameters.useSecondaryEncryptionKey] = useSecondary ? \"1\" : \"\";\n\n\tif (encString) {\n\t\tparams[AuthRequestParameters.encryptedString] = encString;\n\t}\n\n\tif (launch) {\n\t\tparams[AuthRequestParameters.launchToken] = launch;\n\t}\n\n\tif (telehealthToken) {\n\t\tparams[AuthRequestParameters.telehealthToken] = telehealthToken;\n\t}\n\n\tif (userType) {\n\t\tparams[AuthRequestParameters.userType] = userType;\n\t}\n\n\tif (computerName) {\n\t\tparams[AuthRequestParameters.demoSystemComputerName] = computerName;\n\t}\n\n\tif (majorVersion) {\n\t\tparams[AuthRequestParameters.demoSystemMajorVersion] = majorVersion;\n\t}\n\n\treturn params;\n}\n\n/**\n * This is needed for unit tests to not fail\n * Javascript compilation says createBodyRequest is not called\n * unless it is exported and called this way\n */\nconst exportFunctions = {\n\tbuildHardwareTestAuthenticationRequest,\n\tuseHardwareTestAuthentication,\n};\n\nexport default exportFunctions;\n\n/**\n * Loads and returns a jwt token if the user is authenticated\n */\nasync function loadJWT(params: Record): Promise {\n\treturn makeRequest(\"/api/Auth/HardwareTest\", \"GET\", null, undefined, {\n\t\tqueryStringData: params,\n\t});\n}\n\n/**\n * Web Request to retrieve configuration data\n *\n * @param jwt - The JWT for accessing session\n * @returns - The configuration information we can not store in CosmosDB due to size\n */\nasync function refreshConfigurationRequest(jwt: string, sessionID: string): Promise {\n\treturn makeRequest(\"/api/TestMode/RefreshConfiguration\", \"GET\", jwt, undefined, {\n\t\tqueryStringData: { sessionID },\n\t});\n}\n\n/**\n * Set the current locale and the JWT into shared state\n * @param authResponse the JWT and configuration that should be set into shared state\n * @param sessionID the user's current session ID\n * @param dispatch the dispatch function, used to modify shared state\n * @param vendorOverride the vendor to use for the standalone hardware test. Overrides the client configuration value\n */\nasync function setLocaleAndJWT(\n\tauthResponse: IHardwareTestAuth,\n\tsessionID: string,\n\tdispatch: (action: T) => T,\n\tvendorOverride?: VideoVendor,\n): Promise {\n\t// prefer cookie value, then browser locale\n\tconst locale = getPreferredLocale();\n\tawait I18n.setLocale(locale, dispatch);\n\n\tif (authResponse?.encryptedConfiguration) {\n\t\tsetHardwareTestConfigurationCookie(authResponse?.encryptedConfiguration, sessionID);\n\t}\n\n\tif (vendorOverride) {\n\t\tauthResponse.vendorOverride = vendorOverride;\n\t}\n\n\tdispatch(combinedActions.setHardwareTestJwtAndConfig(authResponse));\n}\n\n/**\n * Reconstruct a hardware test session from cookies by refreshing configuration and resetting the JWT\n * @param cookieJWT the JWT retrieved from cookies\n * @param sessionID the user's current session ID\n * @param dispatch the dispatch function, used to modify shared state\n */\nasync function rebuildHardwareTestSessionFromCookies(\n\tcookieJWT: string,\n\tsessionID: string,\n\tdispatch: (action: T) => T,\n): Promise {\n\tlet response: IConfigurationUpdateDTO | null = null;\n\tlet vendorOverride: VideoVendor | undefined = undefined;\n\n\tif (getConfigFromSessionCookie(sessionID)) {\n\t\ttry {\n\t\t\tresponse = await refreshConfigurationRequest(cookieJWT, sessionID);\n\t\t} catch {\n\t\t\t// If refresh config fails, response will be null and we will use the vendor override\n\t\t}\n\t}\n\n\t// Hard-code the vendor to Twilio if there is no configuration so that the user can still test their hardware\n\t// We expect this not to be necessary after deprecating WebPacs in early September.\n\tif (response == null) {\n\t\tvendorOverride = VideoVendor.twilio;\n\t}\n\n\tawait setLocaleAndJWT({ ...response, jwt: cookieJWT }, sessionID, dispatch, vendorOverride);\n}\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file hook to get a function that will rebuild a session a JWT cookie\n * @author Will Cooper\n * @module Epic.VideoApp.Hooks.Auth.UseRebuildSessionFromCookies\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport { useCallback, useEffect, useRef } from \"react\";\nimport { ErrorTokenNames } from \"~/features/generic-error/GenericError\";\nimport {\n\tauthActions,\n\tcombinedActions,\n\terrorPageActions,\n\thardwareTestActions,\n\troomActions,\n\tuserActions,\n} from \"~/state\";\nimport { IAuthorizationResults } from \"~/types\";\nimport { IUserPreferencesWithEncryption } from \"~/types/user\";\nimport { onMemoryLeakAffectedChromiumVersion } from \"~/utils/browser\";\nimport { configurationCookieKey, setCookie } from \"~/utils/cookies\";\nimport { minutesToMs } from \"~/utils/dateTime\";\nimport frameMessager from \"~/utils/frameMessager\";\nimport { I18n } from \"~/utils/i18n\";\nimport { ISessionCookieInfo, getSessionExpiration } from \"~/utils/jwt\";\nimport { configureClientLogging, debug, getDebugSettingsFromCookie } from \"~/utils/logging\";\nimport { makeRequest } from \"~/utils/request\";\nimport {\n\tdecryptUserPreferences,\n\tgetUserPreferencesKeyFromCookie,\n\tloadUserPreferences,\n} from \"~/utils/userPreferences\";\nimport { useDisconnect } from \"..\";\nimport { getSkipHardwareTestGuardrails } from \"../../utils/skipHardwareTestGuardrails\";\n\ninterface IUpdateAccessToken {\n\t(jwt: string, sessionID: string): void;\n}\n\ninterface IRebuildSessionFromCookies {\n\t(\n\t\tsessionID: string,\n\t\tcookieSessionInfo: ISessionCookieInfo,\n\t\tupdateAccessToken: IUpdateAccessToken,\n\t): Promise;\n}\n\n/**\n * Hook to manage all dependencies of refreshing a live call to ensure that session remains accurate despite not having gone through the OAuth2\n * authentication workflow.\n *\n * @returns A function to turn the JWT stored in cookies into a valid session. Also calls web services needed to refresh the current session.\n */\nexport function useRebuildSessionFromCookies(): IRebuildSessionFromCookies {\n\tconst dispatch = useDispatch();\n\n\tconst disconnect = useDisconnect();\n\tconst disconnectRef = useRef(disconnect);\n\tuseEffect(() => {\n\t\tdisconnectRef.current = disconnect;\n\t}, [disconnect]);\n\n\t//load the user's preferences from local storage\n\tconst getUserPreferences = useCallback(\n\t\tasync (sessionID: string, cookieJWT: string) => {\n\t\t\tconst userPreferencesKey = getUserPreferencesKeyFromCookie(sessionID);\n\t\t\tif (userPreferencesKey) {\n\t\t\t\tconst userPreferences = loadUserPreferences(userPreferencesKey);\n\t\t\t\tdispatch(userActions.setUserKey(userPreferencesKey));\n\t\t\t\tif (getSkipHardwareTestGuardrails(userPreferencesKey)) {\n\t\t\t\t\tdispatch(hardwareTestActions.setDisplaySkipHardwareTestToggleInLobby(false));\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tif (userPreferences && userPreferences.encryptedDisplayName) {\n\t\t\t\t\t\tconst encryptedUserPreferences: IUserPreferencesWithEncryption = {\n\t\t\t\t\t\t\tdisplayName: userPreferences.encryptedDisplayName,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tconst decryptedUserPreferences = await decryptUserPreferences(\n\t\t\t\t\t\t\tcookieJWT,\n\t\t\t\t\t\t\tencryptedUserPreferences,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tdispatch(roomActions.setLocalDisplayName(decryptedUserPreferences.displayName ?? \"\"));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (userPreferences && userPreferences.preferredLocale) {\n\t\t\t\t\t\tawait I18n.setLocale(userPreferences.preferredLocale, dispatch);\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\t// Don't allow user preferences to cause the refreshing the call to fail\n\t\t\t\t}\n\n\t\t\t\tdispatch(userActions.setPreferences(userPreferences));\n\t\t\t}\n\t\t},\n\t\t[dispatch],\n\t);\n\n\tconst refreshConfiguration = useCallback(\n\t\tasync (cookieJWT: string, sessionID: string) => {\n\t\t\tconst response = await refreshConfigurationRequest(cookieJWT, sessionID);\n\t\t\tconst { clientConfiguration, encryptedConfiguration } = response;\n\t\t\t// Certain Chromium versions have a memory leak that prevents us from using background effects/blurring.\n\t\t\tconst disableAllBackgrounds = await onMemoryLeakAffectedChromiumVersion();\n\t\t\tif (clientConfiguration && disableAllBackgrounds) {\n\t\t\t\tclientConfiguration.userPermissions.disableAllBackgrounds = true;\n\t\t\t}\n\t\t\tdispatch(combinedActions.setConfiguration(clientConfiguration));\n\n\t\t\tif (encryptedConfiguration) {\n\t\t\t\treturn encryptedConfiguration;\n\t\t\t}\n\n\t\t\treturn null;\n\t\t},\n\t\t[dispatch],\n\t);\n\n\t// rebuild an existing session from cookies left behind on refresh\n\tconst rebuildSessionFromCookies: IRebuildSessionFromCookies = useCallback(\n\t\tasync (sessionID, cookieSessionInfo, updateAccessToken) => {\n\t\t\tconst { jwt: cookieJWT, expirationInstant, hasRefreshToken } = cookieSessionInfo;\n\n\t\t\tconst now = Date.now();\n\n\t\t\t// If the session has expired, don't bother cleaning up.\n\t\t\tconst msUntilExpire = expirationInstant - now;\n\t\t\tif (now > expirationInstant) {\n\t\t\t\tdebug(\"Session expired\");\n\t\t\t\tdispatch(\n\t\t\t\t\terrorPageActions.setErrorCard({\n\t\t\t\t\t\tmessage: ErrorTokenNames.refreshFailedBody,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\tdisconnectRef.current(true);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// initiate clearing the previous disconnection to ensure the current user stays active and connected\n\t\t\tconst clearDisconnectPromise = clearDisconnect(cookieJWT);\n\n\t\t\t// initiate web services asynchronously for configuration and preferences\n\t\t\tconst getConfigPromise = refreshConfiguration(cookieJWT, sessionID);\n\t\t\tconst getUserPrefPromise = getUserPreferences(sessionID, cookieJWT);\n\n\t\t\t// setup client logging, useClientLogging will actually send off requests\n\t\t\tconst clientLoggingConfig = getDebugSettingsFromCookie();\n\t\t\tconfigureClientLogging(dispatch, clientLoggingConfig);\n\n\t\t\tif (hasRefreshToken && msUntilExpire > minutesToMs(5)) {\n\t\t\t\t//if it's not time to refresh the access token yet, queue it up\n\t\t\t\t//if we can't clear the disconnection or another required web service fails, this will never run.\n\t\t\t\tconst timerId = setTimeout(\n\t\t\t\t\tupdateAccessToken,\n\t\t\t\t\tmsUntilExpire - minutesToMs(5), //refresh 5 minutes before access token expiration\n\t\t\t\t\tcookieJWT,\n\t\t\t\t\tsessionID,\n\t\t\t\t);\n\t\t\t\tdispatch(authActions.setRefreshTokenTimer(timerId));\n\t\t\t}\n\n\t\t\t// Handle all refresh web services calls in parallel.\n\t\t\t// If any of these fail and surface an error, we consider this a failure state\n\t\t\ttry {\n\t\t\t\tconst [encryptedConfig] = await Promise.all([\n\t\t\t\t\tgetConfigPromise,\n\t\t\t\t\tgetUserPrefPromise,\n\t\t\t\t\tclearDisconnectPromise,\n\t\t\t\t]);\n\n\t\t\t\t// If we received a new configuration value from our refresh, save it to the cookies as well so we can send it via a web request in the future\n\t\t\t\tif (encryptedConfig) {\n\t\t\t\t\tlet expirationInstant = getSessionExpiration(sessionID);\n\t\t\t\t\tif (expirationInstant === null) {\n\t\t\t\t\t\texpirationInstant = Date.now() + minutesToMs(60);\n\t\t\t\t\t}\n\t\t\t\t\tsetCookie(configurationCookieKey + sessionID, encryptedConfig, expirationInstant);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tdebug(\"Error on refresh: \", error);\n\t\t\t\tdispatch(\n\t\t\t\t\terrorPageActions.setErrorCard({\n\t\t\t\t\t\tmessage: ErrorTokenNames.refreshFailedBody,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\tdisconnectRef.current(true);\n\t\t\t}\n\n\t\t\t// Don't set the JWT or refresh the access token until we have verified our session-required web services have completed\n\t\t\tdispatch(authActions.setJWT(cookieJWT));\n\n\t\t\t// indicate that authentication succeeded to any parent windows\n\t\t\tframeMessager.postMessage(\"Epic.Video.AuthSuccess\");\n\n\t\t\tif (hasRefreshToken && msUntilExpire <= minutesToMs(5)) {\n\t\t\t\t//if the access token is going to expire in the next 5 minutes, refresh it.\n\t\t\t\tupdateAccessToken(cookieJWT, sessionID);\n\t\t\t}\n\t\t},\n\t\t[refreshConfiguration, getUserPreferences, dispatch],\n\t);\n\n\treturn rebuildSessionFromCookies;\n}\n\n/**\n * Web Request to retrieve configuration data\n *\n * @param jwt - The JWT for accessing session\n * @returns - The configuration information we can not store in CosmosDB due to size\n */\nasync function refreshConfigurationRequest(jwt: string, sessionID: string): Promise {\n\treturn makeRequest(\"/api/VideoCall/RefreshConfiguration\", \"GET\", jwt, undefined, {\n\t\tqueryStringData: { sessionID },\n\t});\n}\n\n/**\n * Attempts to clear a pending disconnection for complete and accurate LVV Logging in the case of a page refresh\n */\nasync function clearDisconnect(jwt: string): Promise {\n\treturn makeRequest(\"/api/VideoCall/ClearDisconnect\", \"POST\", jwt);\n}\n","/**\n * @copyright Copyright 2021 - 2024 Epic Systems Corporation\n * @file hook to retrieve the request parameters for the /api/Auth/VideoCall request\n * @author Colin Walters\n * @module Epic.VideoApp.Hooks.Auth.UseVideoCallAuthRequestParams\n */\n\nimport { AuthRequestParameters, FDIQueryParameters, QueryParameters } from \"~/types\";\nimport { useCaseInsensitiveSearchParam } from \"..\";\n\n/**\n * Get the auth request parameters based on the context passed in the query string\n * @returns request parameters that should be passed to the /api/Auth/VideoCall request\n */\nexport function useVideoCallAuthRequestParams(): Record {\n\t// Organization ID\n\tconst organization = useCaseInsensitiveSearchParam(FDIQueryParameters.orgId) ?? \"\";\n\tconst org = useCaseInsensitiveSearchParam(FDIQueryParameters.orgIdShort) ?? \"\";\n\tconst orgID = organization || org;\n\n\t// Web Pacs\n\tconst useSecondaryEncryptionKey =\n\t\tuseCaseInsensitiveSearchParam(FDIQueryParameters.useSecondaryEncryptionKey) === \"1\";\n\tconst sKey = useCaseInsensitiveSearchParam(FDIQueryParameters.useSecondaryEncryptionKeyShort) === \"1\";\n\tconst secondaryKey = useSecondaryEncryptionKey || sKey;\n\n\t// There can be different behavior when an encryption key is not set for an FDI\n\t// We want to inform users that this is the problem they are seeing (we usually report a different error due to not having enough context on the server).\n\t// Specifically a MyChart FDI will send a queryString formatted like \"prevValue&encryptedString=&nextKey\", with the key but lacking a value\n\t// Our code here will ignore an empty value, but valid key.\n\t// We do not want to set a default value of \"\" instead of null, since those are two unique cases.\n\tconst encryptedString = useCaseInsensitiveSearchParam(FDIQueryParameters.encryptedString);\n\n\t// Smart on FHIR\n\tconst launchToken = useCaseInsensitiveSearchParam(FDIQueryParameters.launchToken) ?? \"\";\n\n\t// Direct join links\n\tconst fullToken = useCaseInsensitiveSearchParam(FDIQueryParameters.telehealthTokenLong) ?? \"\";\n\tconst TT = useCaseInsensitiveSearchParam(FDIQueryParameters.telehealthToken) ?? \"\";\n\tconst telehealthToken = fullToken || TT;\n\n\t// User type\n\tconst fullUserType = useCaseInsensitiveSearchParam(FDIQueryParameters.userTypeLong) ?? \"\";\n\tconst UT = useCaseInsensitiveSearchParam(FDIQueryParameters.userType) ?? \"\";\n\tconst userType = fullUserType || UT;\n\n\t// Demo system\n\tconst computerName = useCaseInsensitiveSearchParam(FDIQueryParameters.demoSystemComputerName) ?? \"\";\n\tconst majorVersion = useCaseInsensitiveSearchParam(FDIQueryParameters.demoSystemMajorVersion) ?? \"\";\n\n\t// Low bandwidth mode\n\tconst lowBandwidth = useCaseInsensitiveSearchParam(FDIQueryParameters.useLowBandwidthMode) ?? \"\";\n\n\t// Debugging settings\n\tlet userId = useCaseInsensitiveSearchParam(FDIQueryParameters.userId) ?? \"\";\n\tlet conferenceId = useCaseInsensitiveSearchParam(FDIQueryParameters.conferenceID) ?? \"\";\n\tlet captureLogs = useCaseInsensitiveSearchParam(FDIQueryParameters.captureClientLogs) ?? \"\";\n\n\tconst setName = useCaseInsensitiveSearchParam(QueryParameters.setName) ?? \"\";\n\n\tconst skipHardwareTest = useCaseInsensitiveSearchParam(QueryParameters.skipHardwareTest) ?? \"\";\n\n\tif (orgID !== \"0\") {\n\t\tuserId = \"\";\n\t\tconferenceId = \"\";\n\t\tcaptureLogs = \"\";\n\t}\n\n\tconst params = buildVideoCallAuthenticationRequest(\n\t\torgID,\n\t\tsecondaryKey,\n\t\tencryptedString,\n\t\tlaunchToken,\n\t\tuserType,\n\t\ttelehealthToken,\n\t\tcomputerName,\n\t\tmajorVersion,\n\t\tlowBandwidth,\n\t\tuserId,\n\t\tconferenceId,\n\t\tcaptureLogs,\n\t\tsetName,\n\t\tskipHardwareTest,\n\t);\n\n\treturn params;\n}\n\n/**\n * Packages up the URL parameters for use in the API call. Maps keys in the query string\n * to what is expected on the server. Will decide what to send based on provided URL params\n *\n * @param org - Organization ID for the query string\n * @param encString - Encrypted string that holds launch model parameters\n * @param useSecondary - Which encryption key to use when validating parameters\n *\n * @returns The request object with the proper parameters from the URL\n */\nfunction buildVideoCallAuthenticationRequest(\n\torg: string,\n\tuseSecondary: boolean,\n\tencString: string | null,\n\tlaunch?: string,\n\tuserType?: string,\n\ttelehealthToken?: string,\n\tcomputerName?: string,\n\tmajorVersion?: string,\n\tlowBandwidth?: string,\n\tuserId?: string,\n\tconferenceId?: string,\n\tcaptureLogs?: string,\n\tsetName?: string,\n\tskipHardwareTest?: string,\n): Record {\n\tconst params: Record = {};\n\n\tparams[AuthRequestParameters.orgId] = org;\n\tparams[AuthRequestParameters.useSecondaryEncryptionKey] = useSecondary ? \"1\" : \"\";\n\n\t// Only include valid parameters related to retrieving \"call context\"\n\tif (encString !== null) {\n\t\tparams[AuthRequestParameters.encryptedString] = encString;\n\t}\n\tif (launch) {\n\t\tparams[AuthRequestParameters.launchToken] = launch;\n\t}\n\tif (userType) {\n\t\tparams[AuthRequestParameters.userType] = userType;\n\t}\n\n\tif (telehealthToken) {\n\t\tparams[AuthRequestParameters.telehealthToken] = telehealthToken;\n\t}\n\n\tif (computerName) {\n\t\tparams[AuthRequestParameters.demoSystemComputerName] = computerName;\n\t}\n\n\tif (majorVersion) {\n\t\tparams[AuthRequestParameters.demoSystemMajorVersion] = majorVersion;\n\t}\n\n\tif (lowBandwidth) {\n\t\tparams[AuthRequestParameters.useLowBandwidthMode] = lowBandwidth;\n\t}\n\n\tif (org === \"0\") {\n\t\tif (userId) {\n\t\t\tparams[AuthRequestParameters.userId] = userId;\n\t\t}\n\n\t\tif (conferenceId) {\n\t\t\tparams[AuthRequestParameters.conferenceID] = conferenceId;\n\t\t}\n\n\t\tif (captureLogs) {\n\t\t\tparams[AuthRequestParameters.captureClientLogs] = captureLogs;\n\t\t}\n\t}\n\n\tif (setName) {\n\t\tparams[AuthRequestParameters.setName] = setName;\n\t}\n\n\tif (skipHardwareTest) {\n\t\tparams[AuthRequestParameters.skipHardwareTest] = skipHardwareTest;\n\t}\n\n\treturn params;\n}\n","/**\n * @copyright Copyright 2020-2024 Epic Systems Corporation\n * @file Video Call authentication hook\n * @author Will Cooper\n * @module Epic.VideoApp.Hooks.Auth.UseVideoCallAuthentication\n */\nimport { IAction, useDispatch } from \"@epic/react-redux-booster\";\nimport { useCallback, useEffect, useRef } from \"react\";\nimport { ErrorTokenNames } from \"~/features/generic-error/GenericError\";\nimport { useCaseInsensitiveSearchParam, useDisconnect, useStrings } from \"~/hooks\";\nimport {\n\talertActions,\n\tauthActions,\n\tcombinedActions,\n\terrorPageActions,\n\thardwareTestActions,\n\troomActions,\n\tuseAuthState,\n\tuseRoomState,\n\tuserActions,\n} from \"~/state\";\nimport { IErrorPage } from \"~/state/errorPage\";\nimport { DebuggingLogLevel } from \"~/state/room\";\nimport {\n\tAlertType,\n\tAuthFailureReason,\n\tIAccessTokenUpdate,\n\tIAuthFailure,\n\tIAuthorizationResults,\n\tIChoiceAlert,\n\tIClientLoggingConfig,\n\tIUserPreferences,\n\tIUserPreferencesWithEncryption,\n\tQueryParameters,\n\tinstanceOfIAuthFailure,\n} from \"~/types\";\nimport { DefaultImageNames } from \"~/types/backgrounds\";\nimport { onMemoryLeakAffectedChromiumVersion } from \"~/utils/browser\";\nimport { expireNonSessionCookies, getCookie } from \"~/utils/cookies\";\nimport { hoursToMs, minutesToMs, secondsToMs } from \"~/utils/dateTime\";\nimport frameMessager, { IFrameAuthFailureReason } from \"~/utils/frameMessager\";\nimport { I18n, getPreferredLocale } from \"~/utils/i18n\";\nimport { getConfigFromSessionCookie, setSessionCookies, tryExtendSessionCookies } from \"~/utils/jwt\";\nimport { configureClientLogging, debug } from \"~/utils/logging\";\nimport { removeAllQueryParamsExcept, setSessionID } from \"~/utils/queryParameters\";\nimport { ApiError, makeRequest } from \"~/utils/request\";\nimport { stringFormat } from \"~/utils/strings\";\nimport {\n\tdecryptUserPreferences,\n\tloadUserPreferences,\n\tstoreUserPreferencesKeyInCookie,\n} from \"~/utils/userPreferences\";\nimport { getSkipHardwareTestGuardrails } from \"../../utils/skipHardwareTestGuardrails\";\nimport { useRebuildSessionFromCookies } from \"./useRebuildSessionFromCookies\";\nimport { useVideoCallAuthRequestParams } from \"./useVideoCallAuthRequestParams\";\n\nexport interface IVideoCallAuth {\n\ttryAuthenticate: () => Promise;\n\tauthenticate: () => Promise;\n\tupdateAccessToken: (jwt: string, sessionID: string) => void;\n}\n\nexport function useVideoCallAuthentication(): IVideoCallAuth {\n\tconst hasDoneAuth = useRef(false);\n\n\t// get the session ID and any other request parameters\n\tconst sessionID = useCaseInsensitiveSearchParam(QueryParameters.sessionId) ?? \"\";\n\tconst requestParams = useVideoCallAuthRequestParams();\n\n\tconst isDisconnecting = useRoomState((selectors) => selectors.getIsDisconnecting(), []);\n\tconst JWT = useAuthState((selectors) => selectors.getJWT(), []);\n\tconst refreshTokenTimer = useAuthState((selectors) => selectors.getRefreshTokenTimer(), []);\n\tconst dispatch = useDispatch();\n\n\tconst rebuildSessionFromCookies = useRebuildSessionFromCookies();\n\n\tconst tokenNames = [\"AlreadyConnectedAlert\", \"AlreadyConnectedConfirm\", \"AlreadyConnectedCancel\"];\n\tconst strings = useStrings(\"useVideoCallAuthentication\", tokenNames);\n\tconst stringsRef = useRef(strings);\n\tuseEffect(() => {\n\t\tstringsRef.current = strings;\n\t}, [strings]);\n\n\tconst disconnect = useDisconnect();\n\tconst disconnectRef = useRef(disconnect);\n\n\tuseEffect(() => {\n\t\tdisconnectRef.current = disconnect;\n\t}, [disconnect]);\n\n\t//Update the access token if it's getting close to expiring\n\tconst updateAccessToken = useCallback(\n\t\t(jwt: string, sessionID: string) => {\n\t\t\tif (!jwt) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\trefreshAccessToken(jwt)\n\t\t\t\t.then((response: IAuthorizationResults) => {\n\t\t\t\t\tafterVideoCallAuthentication(response, updateAccessToken, sessionID, dispatch);\n\t\t\t\t})\n\t\t\t\t.catch((error: Error) => {\n\t\t\t\t\t// before refresh tokens were implemented, users continued unauthenticated after their\n\t\t\t\t\t// access token expired. As customers enable refresh tokens, we'll allow to go on when\n\t\t\t\t\t// refreshing a user's access token fails, but should disconnect in the future (#1405)\n\t\t\t\t\tdebug(\"Unable to refresh access token\", error);\n\t\t\t\t\tsetSessionCookies(jwt, sessionID, Date.now() + hoursToMs(4));\n\t\t\t\t});\n\t\t},\n\t\t[dispatch],\n\t);\n\n\t// Store the the result of authorization in state (JWT)\n\t// If we have a sessionID in the URL, authorization likely happened.\n\t// Try to grab the JWT for that session from a cookie.\n\tconst authenticate = useCallback(async () => {\n\t\tif (JWT !== null || hasDoneAuth.current) {\n\t\t\treturn;\n\t\t}\n\n\t\thasDoneAuth.current = true;\n\n\t\t// concurrent sessions will be resolved before this point\n\t\t// if this moves consider if \"session-\" cookies should still be cleared by this function\n\t\texpireNonSessionCookies(sessionID);\n\n\t\t//if we somehow start calling this a second time, we should clear out the refresh token timer\n\t\tif (refreshTokenTimer) {\n\t\t\tclearTimeout(refreshTokenTimer);\n\t\t}\n\n\t\t// if we have an existing session in cookies, reconstruct that session\n\t\tconst cookieSessionInfo = tryExtendSessionCookies(sessionID);\n\t\tif (cookieSessionInfo) {\n\t\t\t// Error handling implemented in this function\n\t\t\tawait rebuildSessionFromCookies(sessionID, cookieSessionInfo, updateAccessToken);\n\t\t\treturn;\n\t\t}\n\n\t\tdispatch(hardwareTestActions.setIsFirstHardwareTestSkip(true));\n\n\t\t// if we don't have an existing JWT in cookies, call the auth web service\n\t\tconst newSessionID = setSessionID();\n\t\ttry {\n\t\t\tconst response = await loadAuthorization(requestParams);\n\t\t\t// Update the URL to show the sessionID for future retrieval\n\t\t\tremoveAllQueryParamsExcept([QueryParameters.sessionId, QueryParameters.inIframe]);\n\n\t\t\tconst {\n\t\t\t\tdisplayName,\n\t\t\t\tuserKey,\n\t\t\t\tclientConfiguration,\n\t\t\t\tencryptedDisplayName,\n\t\t\t\tuseLowBandwidthMode,\n\t\t\t\tlogLevel,\n\t\t\t\tencryptedConfiguration,\n\t\t\t} = response;\n\n\t\t\tconst clientLoggingConfig: IClientLoggingConfig = {\n\t\t\t\tlogLevel: null,\n\t\t\t\tinterval: 5,\n\t\t\t};\n\t\t\tif (logLevel === DebuggingLogLevel.verbose) {\n\t\t\t\tclientLoggingConfig.logLevel = \"debug\";\n\t\t\t} else if (logLevel === DebuggingLogLevel.low) {\n\t\t\t\tclientLoggingConfig.logLevel = \"info\";\n\t\t\t}\n\n\t\t\t// setup client logging, useClientLogging will actually send off requests\n\t\t\tconfigureClientLogging(dispatch, clientLoggingConfig);\n\n\t\t\t// A Smart on Fire Authentication path will call get configuration during authentication\n\t\t\tif (clientConfiguration) {\n\t\t\t\tconst disableAllBackgrounds = await onMemoryLeakAffectedChromiumVersion();\n\t\t\t\tif (disableAllBackgrounds) {\n\t\t\t\t\tclientConfiguration.userPermissions.disableAllBackgrounds = true;\n\t\t\t\t}\n\t\t\t\tdispatch(combinedActions.setConfiguration(clientConfiguration));\n\t\t\t} else {\n\t\t\t\t// Web Pacs Only - Delete later\n\t\t\t\tdispatch(roomActions.setLowBandwidth(useLowBandwidthMode));\n\t\t\t}\n\n\t\t\tlet userPreferences: IUserPreferences | null = null;\n\t\t\tif (userKey) {\n\t\t\t\tuserPreferences = loadUserPreferences(userKey);\n\t\t\t\tdispatch(userActions.setUserKey(userKey));\n\t\t\t\tstoreUserPreferencesKeyInCookie(newSessionID, userKey);\n\t\t\t}\n\n\t\t\tif (userPreferences === null) {\n\t\t\t\tuserPreferences = {\n\t\t\t\t\tencryptedDisplayName: null,\n\t\t\t\t\tlastBackgroundProcessor: DefaultImageNames.none,\n\t\t\t\t\tpreferredLocale: null,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tclientConfiguration.userPermissions.canNotSetDisplayName ||\n\t\t\t\tclientConfiguration.forceDisplayName\n\t\t\t) {\n\t\t\t\tdispatch(roomActions.setLocalDisplayName(displayName ?? \"\"));\n\t\t\t} else if (userPreferences.encryptedDisplayName === null) {\n\t\t\t\tdispatch(roomActions.setLocalDisplayName(displayName ?? \"\"));\n\t\t\t\tif (encryptedDisplayName) {\n\t\t\t\t\tuserPreferences.encryptedDisplayName = encryptedDisplayName;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst encryptedUserPreferences: IUserPreferencesWithEncryption = {\n\t\t\t\t\tdisplayName: userPreferences.encryptedDisplayName,\n\t\t\t\t};\n\t\t\t\tvoid decryptUserPreferences(response.jwt, encryptedUserPreferences).then(\n\t\t\t\t\t(decryptedUserPreferences: IUserPreferencesWithEncryption) => {\n\t\t\t\t\t\tdispatch(roomActions.setLocalDisplayName(decryptedUserPreferences.displayName));\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst locale = getPreferredLocale(userPreferences);\n\n\t\t\tif (locale) {\n\t\t\t\tuserPreferences.preferredLocale = locale;\n\t\t\t}\n\t\t\tawait I18n.setLocale(locale, dispatch);\n\t\t\tdispatch(userActions.setPreferences(userPreferences));\n\n\t\t\tif (getSkipHardwareTestGuardrails(userKey)) {\n\t\t\t\tdispatch(hardwareTestActions.setSkipHardwareTest(true));\n\t\t\t\tdispatch(hardwareTestActions.setDisplaySkipHardwareTestToggleInLobby(false));\n\t\t\t}\n\n\t\t\tif (clientConfiguration.skipHardwareTest) {\n\t\t\t\tdispatch(hardwareTestActions.setSkipHardwareTest(true));\n\t\t\t}\n\n\t\t\tafterVideoCallAuthentication(\n\t\t\t\tresponse,\n\t\t\t\tupdateAccessToken,\n\t\t\t\tnewSessionID,\n\t\t\t\tdispatch,\n\t\t\t\tencryptedConfiguration,\n\t\t\t);\n\n\t\t\t// indicate that authentication succeeded to any parent windows\n\t\t\tframeMessager.postMessage(\"Epic.Video.AuthSuccess\");\n\t\t} catch (error) {\n\t\t\tdebug(\"Unable to complete authorization\", error);\n\t\t\tlet failureReason: AuthFailureReason | undefined;\n\t\t\tif (error instanceof ApiError && instanceOfIAuthFailure(error.data)) {\n\t\t\t\tfailureReason = error.data?.failureReason;\n\t\t\t\tdispatch(errorPageActions.setErrorCard(getErrorPage(failureReason)));\n\t\t\t}\n\t\t\tframeMessager.postMessage(\"Epic.Video.AuthFailure\", {\n\t\t\t\terrorReason: getIFrameMessageErrorReason(failureReason),\n\t\t\t});\n\t\t\tdisconnectRef.current(true);\n\t\t}\n\t}, [\n\t\tJWT,\n\t\tdispatch,\n\t\tsessionID,\n\t\tupdateAccessToken,\n\t\trefreshTokenTimer,\n\t\trequestParams,\n\t\trebuildSessionFromCookies,\n\t]);\n\n\tconst tryAuthenticate = useCallback(async () => {\n\t\t//if already authenticated or already disconnecting, don't do it again.\n\t\tif (JWT !== null || isDisconnecting) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst activeSession = getCookie(\"active-session\");\n\t\tif (activeSession !== \"\" && activeSession !== sessionID) {\n\t\t\t// Setup a modal to dispatch to the user\n\t\t\tconst message = stringFormat(stringsRef.current[\"AlreadyConnectedAlert\"], \"\\n\");\n\t\t\tconst confirm = stringsRef.current[\"AlreadyConnectedConfirm\"];\n\t\t\tconst cancel = stringsRef.current[\"AlreadyConnectedCancel\"];\n\t\t\tconst disconnectAlert: IChoiceAlert = {\n\t\t\t\tmessage: message,\n\t\t\t\tconfirmText: confirm,\n\t\t\t\tconfirmHotkey: \"K\",\n\t\t\t\tcancelText: cancel,\n\t\t\t\tcancelHotkey: \"C\",\n\t\t\t\ttype: AlertType.concurrentSessionChoice,\n\t\t\t};\n\t\t\t// The resolution of the alert pop-up handles the potential disconnection\n\t\t\t// and routing of the user to the generic \"you left the call page\"\n\t\t\tdispatch(alertActions.postChoiceAlert(disconnectAlert));\n\t\t} else {\n\t\t\tawait authenticate();\n\t\t}\n\t}, [JWT, isDisconnecting, dispatch, authenticate, sessionID]);\n\n\treturn { tryAuthenticate, authenticate, updateAccessToken };\n}\n\n/**\n * Called after first connecting to SMART on FHIR or refreshing the access token to update state appropriately\n *\n * @param response - Response from the web server\n * @param timerCallback - Callback function when it's time to refresh the access token\n * @param sessionID - Session ID to update the cookies with\n * @param dispatch - The dispatch function\n */\nfunction afterVideoCallAuthentication(\n\tresponse: IAccessTokenUpdate,\n\ttimerCallback: (jwt: string, sessionID: string) => void,\n\tsessionID: string,\n\tdispatch: (action: T) => T,\n\tencryptedConfiguration?: string,\n): void {\n\tlet expirationInstant = Date.now() + secondsToMs(response.expirationSeconds);\n\tif (!response.hasRefreshToken) {\n\t\texpirationInstant += hoursToMs(3); //workaround for now to allow 4-hour calls before refresh tokens are enabled\n\t}\n\n\tif (!encryptedConfiguration) {\n\t\t// If this is being called from a workflow that did not update config, grab the old value from its cookie to ensure its expiration is updated\n\t\tencryptedConfiguration = getConfigFromSessionCookie(sessionID);\n\t}\n\n\t// Set appropriate cookie\n\tsetSessionCookies(\n\t\tresponse.jwt,\n\t\tsessionID,\n\t\texpirationInstant,\n\t\tresponse.hasRefreshToken,\n\t\tencryptedConfiguration,\n\t);\n\n\t// Setup state for other components\n\tdispatch(authActions.setJWT(response.jwt));\n\tafterRetrieveAccessToken(response, timerCallback, sessionID, dispatch, expirationInstant);\n}\n\n/**\n * Called after an access token is updated to set up the refresh token timer and update state\n *\n * @param response - Response from the web server\n * @param timerCallback - Callback function when it's time to refresh the access token\n * @param sessionID - Session ID to update the cookies with\n * @param dispatch - The dispatch function\n * @param expirationInstant - Instant the access token expires. Will be calculated from response if not passed in.\n */\nexport function afterRetrieveAccessToken(\n\tresponse: IAccessTokenUpdate,\n\ttimerCallback: (jwt: string, sessionID: string) => void,\n\tsessionID: string,\n\tdispatch: (action: T) => T,\n\texpirationInstant?: number,\n): void {\n\tif (!expirationInstant) {\n\t\texpirationInstant = Date.now() + secondsToMs(response.expirationSeconds);\n\t\tif (!response.hasRefreshToken) {\n\t\t\texpirationInstant += hoursToMs(3); //workaround for now to allow 4-hour calls before refresh tokens are enabled\n\t\t}\n\t}\n\n\tif (response.hasRefreshToken) {\n\t\tconst timerId = setTimeout(\n\t\t\ttimerCallback,\n\t\t\tsecondsToMs(response.expirationSeconds) - minutesToMs(5), //refresh 5 minutes before access token expiration\n\t\t\tresponse.jwt,\n\t\t\tsessionID,\n\t\t);\n\t\tdispatch(authActions.setRefreshTokenTimer(timerId));\n\t} else {\n\t\tdispatch(authActions.setRefreshTokenTimer(null));\n\t}\n}\n\n/**\n * Get the error page title and message to show after authentication failed\n * @param reason the reason that authentication failed\n * @returns title and message to be displayed on the error page\n */\nfunction getErrorPage(reason?: AuthFailureReason): IErrorPage {\n\tswitch (reason) {\n\t\tcase AuthFailureReason.tooEarly:\n\t\t\treturn {\n\t\t\t\ttitle: ErrorTokenNames.authTooEarlyHeader,\n\t\t\t\tmessage: ErrorTokenNames.authTooEarlyBody,\n\t\t\t};\n\t\tcase AuthFailureReason.tooLate:\n\t\t\treturn {\n\t\t\t\ttitle: ErrorTokenNames.authExpiredHeader,\n\t\t\t\tmessage: ErrorTokenNames.authExpiredBody,\n\t\t\t};\n\t\tcase AuthFailureReason.removed:\n\t\t\treturn {\n\t\t\t\ttitle: ErrorTokenNames.authRemovedHeader,\n\t\t\t\tmessage: ErrorTokenNames.authRemovedBody,\n\t\t\t};\n\t\tdefault:\n\t\t\treturn {\n\t\t\t\tmessage: ErrorTokenNames.authFailedToConnect,\n\t\t\t};\n\t}\n}\n\n/**\n * Convert an authentication failure reason to the iframe auth failure reason\n * @param reason auth failure reason returned by /api/Auth/VideoCall\n * @returns the auth failure reason to provide in iframe message\n */\nfunction getIFrameMessageErrorReason(reason?: AuthFailureReason): IFrameAuthFailureReason {\n\tswitch (reason) {\n\t\tcase AuthFailureReason.tooEarly:\n\t\t\treturn \"too-early\";\n\t\tcase AuthFailureReason.tooLate:\n\t\t\treturn \"visit-expired\";\n\t\tdefault:\n\t\t\treturn \"unauthenticated\";\n\t}\n}\n\n/**\n * Loads and returns session information (jwt and display name) token if the user is authenticated\n */\nasync function loadAuthorization(params: Record): Promise {\n\treturn makeRequest(\"/api/Auth/VideoCall\", \"GET\", null, undefined, {\n\t\tqueryStringData: params,\n\t});\n}\n\n/**\n * Refreshes an access token if the user is authenticated\n */\nasync function refreshAccessToken(jwt: string): Promise {\n\treturn makeRequest(\"/api/Auth/RefreshAccessToken\", \"POST\", jwt);\n}\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file authentication hooks\n * @author Colin Walters\n * @module Epic.VideoApp.Hooks.Auth.Index\n */\n\nexport * from \"./useHardwareTestAuthentication\";\nexport * from \"./useVideoCallAuthentication\";\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file hook to follow 'enabled' status of a Track\n * @author Matt Panico / Colin Walters\n * @module Epic.VideoApp.Hooks.TrackUtilities.UseIsTrackEnabled\n */\n\nimport { useEffect, useState } from \"react\";\nimport { AudioTrack, VideoTrack } from \"twilio-video\";\n\ntype TrackType = AudioTrack | VideoTrack | null | undefined;\n\nexport function useIsTrackEnabled(track: TrackType): boolean {\n\tconst [isEnabled, setIsEnabled] = useState(track?.isEnabled ?? false);\n\n\tuseEffect(() => {\n\t\tsetIsEnabled(track?.isEnabled ?? false);\n\n\t\tif (track) {\n\t\t\tconst setEnabled = (): void => setIsEnabled(true);\n\t\t\tconst setDisabled = (): void => setIsEnabled(false);\n\n\t\t\ttrack.on(\"enabled\", setEnabled);\n\t\t\ttrack.on(\"disabled\", setDisabled);\n\n\t\t\treturn () => {\n\t\t\t\ttrack.off(\"enabled\", setEnabled);\n\t\t\t\ttrack.off(\"disabled\", setDisabled);\n\t\t\t};\n\t\t}\n\t}, [track]);\n\n\treturn isEnabled;\n}\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file Hook to subscribe to and return the track associated with a publication\n * @author Matt Panico and Colin Walters\n * @module Epic.VideoApp.Hooks.TrackUtilities.UseTrack\n */\n\nimport { useEffect, useState } from \"react\";\nimport {\n\tLocalAudioTrack,\n\tLocalDataTrack,\n\tLocalTrackPublication,\n\tLocalVideoTrack,\n\tRemoteAudioTrack,\n\tRemoteDataTrack,\n\tRemoteTrackPublication,\n\tRemoteVideoTrack,\n} from \"twilio-video\";\n\ntype Track =\n\t| LocalVideoTrack\n\t| RemoteVideoTrack\n\t| LocalAudioTrack\n\t| RemoteAudioTrack\n\t| LocalDataTrack\n\t| RemoteDataTrack;\n\nexport function useTrack(publication: LocalTrackPublication | RemoteTrackPublication | null): Track | null {\n\tconst [track, setTrack] = useState(publication && publication.track);\n\n\tuseEffect(() => {\n\t\tsetTrack(publication && publication.track);\n\n\t\tconst removeTrack = (): void => setTrack(null);\n\n\t\tpublication?.on(\"subscribed\", setTrack);\n\t\tpublication?.on(\"unsubscribed\", removeTrack);\n\n\t\treturn () => {\n\t\t\tpublication?.off(\"subscribed\", setTrack);\n\t\t\tpublication?.off(\"unsubscribed\", removeTrack);\n\t\t};\n\t}, [publication]);\n\n\treturn track;\n}\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file Hooks for managing general track state\n * @author Will Cooper\n * @module Epic.VideoApp.Hooks.TrackUtilities.Index\n */\n\nexport * from \"./useIsTrackEnabled\";\nexport * from \"./useTrack\";\nexport * from \"./useVideoStreamDimensions\";\n","/**\n * @copyright Copyright 2020-2021 Epic Systems Corporation\n * @file hook to manage active session and ensure there is only ever one per browser\n * @author Tara Feldstein\n * @module Epic.VideoApp.Hooks.UseActiveSession\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport { useCallback, useEffect, useMemo, useRef } from \"react\";\nimport { ErrorTokenNames } from \"~/features/generic-error/GenericError\";\nimport { useCaseInsensitiveSearchParam } from \"~/hooks\";\nimport { errorPageActions } from \"~/state\";\nimport { QueryParameters, Timeout } from \"~/types\";\nimport { isInIframe } from \"~/utils/browser\";\nimport { expireCookie, getCookie, sessionStatusCookieKey, setCookie } from \"~/utils/cookies\";\nimport { hoursToMs, secondsToMs } from \"~/utils/dateTime\";\nimport { getSessionExpiration } from \"~/utils/jwt\";\nimport { useDisconnect } from \"./useDisconnect\";\n\nexport function useActiveSession(): void {\n\tconst dispatch = useDispatch();\n\n\tconst sessionID = useCaseInsensitiveSearchParam(QueryParameters.sessionId) ?? \"\";\n\tconst inIframeParam = useCaseInsensitiveSearchParam(QueryParameters.inIframe)?.toLowerCase();\n\tconst inIframe = useMemo(() => inIframeParam === \"true\" || inIframeParam === \"1\", [inIframeParam]);\n\n\tconst disconnect = useDisconnect();\n\tconst disconnectRef = useRef(disconnect);\n\tuseEffect(() => {\n\t\tdisconnectRef.current = disconnect;\n\t}, [disconnect]);\n\n\tconst reviveSessionCookies = useCallback((sessionID: string) => {\n\t\tsetCookie(\"active-session\", sessionID, secondsToMs(3));\n\t\tlet expirationInstant = getSessionExpiration(sessionID);\n\t\tif (!expirationInstant) {\n\t\t\texpirationInstant = Date.now() + hoursToMs(1);\n\t\t}\n\n\t\tsetCookie(sessionStatusCookieKey + sessionID, \"active\", expirationInstant - Date.now());\n\t}, []);\n\n\tuseEffect(() => {\n\t\t// create an active session as soon as we create a session ID\n\t\t// skip setting active session cookies in an iframe because it won't work\n\t\tif (sessionID === \"\" || (inIframe && isInIframe())) {\n\t\t\treturn;\n\t\t}\n\t\t// Set this session's status to \"connected\"\n\t\tconst statusCookieName = sessionStatusCookieKey + sessionID;\n\t\tsetCookie(statusCookieName, \"active\", hoursToMs(1));\n\n\t\t// Function to set the active session cookie, with a 3s lifetime\n\t\tfunction refreshSessionCookie(handle: Timeout): void {\n\t\t\tconst status = getCookie(statusCookieName);\n\t\t\tif (status === \"active\") {\n\t\t\t\treviveSessionCookies(sessionID);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\texpireCookie(statusCookieName);\n\t\t\texpireCookie(\"active-session\");\n\t\t\t//clear interval when we first kill the session, don't wait until the page unloads\n\t\t\tdispatch(\n\t\t\t\terrorPageActions.setErrorCard({\n\t\t\t\t\ttitle: ErrorTokenNames.activeSessionHeader,\n\t\t\t\t\tmessage: ErrorTokenNames.activeSessionMessage,\n\t\t\t\t}),\n\t\t\t);\n\t\t\tdisconnectRef.current(true);\n\t\t\tclearInterval(handle);\n\t\t}\n\n\t\tconst handle = setInterval(() => {\n\t\t\trefreshSessionCookie(handle);\n\t\t}, 1000);\n\t\t// Set the active session cookie now, and again every second\n\t\trefreshSessionCookie(handle);\n\n\t\t// Clear the interval when this component unloads\n\t\treturn () => {\n\t\t\texpireCookie(statusCookieName);\n\t\t\tclearInterval(handle);\n\t\t};\n\t}, [sessionID, inIframe, reviveSessionCookies, dispatch]);\n}\n","/**\n * @copyright Copyright 2020-2024 Epic Systems Corporation\n * @file hook to set the camera information into state from the local stream or shared state\n * @author Colin Walters\n * @module Epic.VideoApp.Hooks.UseSelectedCamera\n */\n\nimport { useCallback, useContext, useEffect, useState } from \"react\";\nimport { useLocalTrackState } from \"~/state\";\nimport { IDevice } from \"~/state/localTracks\";\nimport { VideoSessionContext } from \"~/web-core/components/VideoSessionProvider\";\n\n/**\n * Get the selected camera ID from shared state (either from the LocalVideoTrack or disabled camera)\n */\nexport function useSelectedCamera(): IDevice {\n\tconst { localDeviceStream } = useContext(VideoSessionContext);\n\n\tconst disabledCamera = useLocalTrackState((selectors) => selectors.getDisabledCamera(), []);\n\tconst [cameraId, setCameraId] = useState({ deviceId: null, label: null, kind: null });\n\n\tconst updateCamId = useCallback((): void => {\n\t\tconst nullCamera: IDevice = { deviceId: null, label: null, kind: null };\n\t\tconst newCameraID = localDeviceStream?.isEnabled(\"video\")\n\t\t\t? localDeviceStream.getDeviceInfo(\"video\")\n\t\t\t: disabledCamera ?? nullCamera;\n\t\tsetCameraId(newCameraID);\n\t}, [localDeviceStream, disabledCamera]);\n\n\tuseEffect(() => {\n\t\tupdateCamId();\n\n\t\tlocalDeviceStream?.on(\"videoDeviceChanged\", updateCamId);\n\t\treturn () => {\n\t\t\tlocalDeviceStream?.off(\"videoDeviceChanged\", updateCamId);\n\t\t};\n\t}, [localDeviceStream, updateCamId]);\n\n\treturn cameraId;\n}\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file hook to retrieve the currently selected microphone from the localDeviceStream\n * @author Max Harkins\n * @module Epic.VideoApp.Hooks.UseSelectedMic\n */\n\nimport { useCallback, useContext, useEffect, useState } from \"react\";\nimport { IDevice } from \"~/state/localTracks\";\nimport { VideoSessionContext } from \"~/web-core/components\";\n\n/**\n * Get the selected microphone information from the localDeviceStream\n */\nexport function useSelectedMic(): IDevice {\n\tconst { localDeviceStream } = useContext(VideoSessionContext);\n\tconst [micId, setMicId] = useState({ deviceId: null, label: null, kind: null });\n\n\tconst updateMicId = useCallback((): void => {\n\t\tsetMicId(localDeviceStream?.getDeviceInfo(\"audio\") ?? { deviceId: null, label: null, kind: null });\n\t}, [localDeviceStream]);\n\n\tuseEffect(() => {\n\t\tupdateMicId();\n\t\tlocalDeviceStream?.on(\"audioDeviceChanged\", updateMicId);\n\t\treturn () => {\n\t\t\tlocalDeviceStream?.off(\"audioDeviceChanged\", updateMicId);\n\t\t};\n\t}, [localDeviceStream, updateMicId]);\n\n\treturn micId;\n}\n","/**\n * @copyright Copyright 2020-2024 Epic Systems Corporation\n * @file Hook to automatically select hardware devices for the user\n * @author Colin Walters & Trevor Roussel\n * @module Epic.VideoApp.Hooks.UseAutomaticDeviceSelection\n */\n\n// some of our supported browsers don't support the entire mediaDevices API. That's fine.\n/* eslint-disable compat/compat */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport { useCallback, useContext, useEffect, useRef } from \"react\";\nimport { combinedActions, useHardwareTestState, useSpeakerState } from \"~/state\";\nimport { localTrackActions } from \"~/state/localTracks\";\nimport { HardwareTestError, VideoSwitchResult } from \"~/types\";\nimport {\n\tIGetDevicePreference,\n\tgetCameraPreference,\n\tgetMicPreference,\n\tgetSpeakerPreference,\n\tisInfraredLabeledVideoDevice,\n\tisOSDefinedAudioDevice,\n} from \"~/utils/device\";\nimport { isIOS } from \"~/utils/os\";\nimport { VideoSessionContext } from \"~/web-core/components\";\nimport { useIsStreamEnabled } from \"~/web-core/hooks/useIsStreamEnabled\";\nimport { useAudioTrackActions, useVideoTrackActions } from \"./localTracks\";\nimport { useLocalAudioRecovery } from \"./localTracks/useLocalAudioRecovery\";\nimport { useSelectedCamera } from \"./useSelectedCamera\";\nimport { useSelectedMic } from \"./useSelectedMic\";\n\nexport function useAutomaticDeviceSelection(): (devices: MediaDeviceInfo[]) => Promise {\n\tconst selectedCamera = useSelectedCamera();\n\tconst selectedMic = useSelectedMic();\n\tconst { localDeviceStream } = useContext(VideoSessionContext);\n\tconst isVideoStreamEnabled = useIsStreamEnabled(\"video\", localDeviceStream);\n\tconst selectedSpeakerId = useSpeakerState((selectors) => selectors.getSelectedSpeakerId(), []);\n\tconst recoverAudio = useLocalAudioRecovery();\n\n\tconst { session } = useContext(VideoSessionContext);\n\n\tconst { switchVideoDevice, removeLocalVideoTrack } = useVideoTrackActions();\n\tconst { switchAudioDevice, removeLocalAudioTrack } = useAudioTrackActions();\n\tconst dispatch = useDispatch();\n\n\tconst previousMicIds = useRef([]);\n\tconst previousSpeakerIds = useRef([]);\n\n\tconst hardwareTestError = useHardwareTestState((selectors) => selectors.getHardwareTestError(), []);\n\n\t// subscribe to updates as long as this component is rendered\n\tuseEffect(() => {\n\t\t// for iOS, just mark the initial tracks as having been auto-selected to avoid https://bugs.webkit.org/show_bug.cgi?id=226921\n\t\tif (isIOS()) {\n\t\t\tdispatch(combinedActions.setHasAutoSelectedDevicesIOS());\n\t\t\treturn;\n\t\t}\n\t}, [dispatch]);\n\n\tconst autoSelectDevices = useCallback(\n\t\tasync (devices: MediaDeviceInfo[]): Promise => {\n\t\t\tif (!devices) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// filter infrared cameras\n\t\t\tdevices = devices.filter((device) => device.deviceId && !isInfraredLabeledVideoDevice(device));\n\n\t\t\t// split available devices into their different types\n\t\t\tconst { cameras, microphones, speakers } = sortDevices(devices);\n\n\t\t\t// CAMERA\n\t\t\tconst switchResult = await exhaustiveCameraSelection(\n\t\t\t\tcameras,\n\t\t\t\tselectedCamera.deviceId,\n\t\t\t\tswitchVideoDevice,\n\t\t\t\tisVideoStreamEnabled,\n\t\t\t);\n\t\t\tif (switchResult.cameraId === null) {\n\t\t\t\tif (hardwareTestError !== HardwareTestError.permissionsError) {\n\t\t\t\t\tremoveLocalVideoTrack();\n\t\t\t\t} else {\n\t\t\t\t\t// Have to set device to auto selected otherwise the call can't be joined\n\t\t\t\t\tdispatch(localTrackActions.setHasAutoSelectedVideo());\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// If the camera was found but could not be acquired, set it to the disabled camera to be enabled by the camera button\n\t\t\t\tif (switchResult.switchCameraResult === VideoSwitchResult.switchFailed) {\n\t\t\t\t\tconst disabledCamera = cameras.find(\n\t\t\t\t\t\t(camera) => camera.deviceId === switchResult.cameraId,\n\t\t\t\t\t);\n\t\t\t\t\tdispatch(\n\t\t\t\t\t\tlocalTrackActions.setDisabledCamera({\n\t\t\t\t\t\t\tdeviceId: disabledCamera?.deviceId ?? null,\n\t\t\t\t\t\t\tlabel: disabledCamera?.label ?? null,\n\t\t\t\t\t\t\tkind: \"videoinput\",\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tdispatch(localTrackActions.setHasAutoSelectedVideo());\n\t\t\t}\n\n\t\t\t// MICROPHONE\n\t\t\tconst newSelectedMic = autoSelectAudioDevice(\n\t\t\t\tmicrophones,\n\t\t\t\tpreviousMicIds.current,\n\t\t\t\tgetMicPreference,\n\t\t\t\tselectedMic.deviceId ?? undefined,\n\t\t\t);\n\t\t\tpreviousMicIds.current = microphones.map((mic) => mic.deviceId);\n\n\t\t\tif (!newSelectedMic) {\n\t\t\t\tif (hardwareTestError !== HardwareTestError.permissionsError) {\n\t\t\t\t\tremoveLocalAudioTrack();\n\t\t\t\t} else {\n\t\t\t\t\t// Have to set device to auto selected otherwise the call can't be joined\n\t\t\t\t\tdispatch(localTrackActions.setHasAutoSelectedAudio());\n\t\t\t\t}\n\t\t\t} else if (newSelectedMic.deviceId !== selectedMic.deviceId) {\n\t\t\t\tvoid switchAudioDevice(newSelectedMic);\n\t\t\t} else {\n\t\t\t\t// We have a single microphone device, and we are not starting fresh in the workflow\n\t\t\t\t// Refresh the audio stream to prevent lingering audio settings from the previous audio session on the same device\n\t\t\t\tif (microphones.filter((mic) => !isOSDefinedAudioDevice(mic)).length === 1) {\n\t\t\t\t\trecoverAudio(false);\n\t\t\t\t}\n\t\t\t\tdispatch(localTrackActions.setCanCreateAudioContext(true));\n\t\t\t\tdispatch(localTrackActions.setHasAutoSelectedAudio());\n\t\t\t}\n\n\t\t\t// SPEAKER\n\t\t\tconst newSelectedSpeaker = autoSelectAudioDevice(\n\t\t\t\tspeakers,\n\t\t\t\tpreviousSpeakerIds.current,\n\t\t\t\tgetSpeakerPreference,\n\t\t\t\tselectedSpeakerId || undefined,\n\t\t\t);\n\t\t\tpreviousSpeakerIds.current = speakers.map((speaker) => speaker.deviceId);\n\n\t\t\tif (!newSelectedSpeaker || newSelectedSpeaker.deviceId !== selectedSpeakerId) {\n\t\t\t\tdispatch(combinedActions.setSelectedSpeaker(newSelectedSpeaker));\n\t\t\t\tif (newSelectedSpeaker) {\n\t\t\t\t\tsession?.localUser.setAudioOutput(newSelectedSpeaker);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\tselectedCamera.deviceId,\n\t\t\tswitchVideoDevice,\n\t\t\tisVideoStreamEnabled,\n\t\t\tselectedMic.deviceId,\n\t\t\tselectedSpeakerId,\n\t\t\thardwareTestError,\n\t\t\tremoveLocalVideoTrack,\n\t\t\tdispatch,\n\t\t\tremoveLocalAudioTrack,\n\t\t\tswitchAudioDevice,\n\t\t\trecoverAudio,\n\t\t\tsession?.localUser,\n\t\t],\n\t);\n\n\treturn autoSelectDevices;\n}\n\ninterface IDevicesByType {\n\tcameras: MediaDeviceInfo[];\n\tmicrophones: MediaDeviceInfo[];\n\tspeakers: MediaDeviceInfo[];\n}\n\n/**\n * Group devices into cameras, microphones, and speakers\n *\n * @param devices list of media devices to be divided into types\n * @returns IDeviceOptions with devices split into types\n */\nfunction sortDevices(devices: MediaDeviceInfo[]): IDevicesByType {\n\tdevices = devices.filter((device) => device.deviceId);\n\tconst cameras = devices.filter((device) => device.kind === \"videoinput\");\n\tconst microphones = devices.filter((device) => device.kind === \"audioinput\");\n\tconst speakers = devices.filter((device) => device.kind === \"audiooutput\");\n\n\treturn { cameras, microphones, speakers };\n}\n\n/**\n * Attempt to acquire a specific camera device\n * @param camera Camera device to attempt to acquire\n * @param switchCameraCallback Callback to attempt to switch to the camera\n * @param selectedDeviceId The device ID of the currently selected camera\n * @param isCameraEnabled Whether the selected camera is currently enabled\n * @returns True if the camera was successfully acquired or no switch was needed, false otherwise\n */\nasync function attemptAcquireCamera(\n\tcamera: MediaDeviceInfo,\n\tswitchCameraCallback: (device: MediaDeviceInfo) => Promise,\n\tselectedDeviceId: string | null,\n\tisCameraEnabled: boolean,\n): Promise {\n\t// If the camera is already selected and is already enabled, no action is needed\n\tif (camera.deviceId === selectedDeviceId && isCameraEnabled) {\n\t\treturn Promise.resolve(true);\n\t}\n\n\tconst switchResult = await switchCameraCallback(camera);\n\n\t// Treat either a successful switch or no switch needed as a success\n\t// If no switch is needed, we cannot verify if the camera can be acquired, so the logic will be deferred to when we attempt to enable the camera\n\treturn (\n\t\tswitchResult === VideoSwitchResult.switchSuccess || switchResult === VideoSwitchResult.noSwitchNeeded\n\t);\n}\n\n/**\n * Interface for the result of camera selection\n * @property switchCameraResult Enum to indicate if a camera was successfully acquired, failed to acquire, or if no acquisition was attempted\n * @property cameraId The device ID of the camera that was acquired, or the disabled preferred camera if no acquisition was attempted or successful\n */\ninterface ICameraSelectionResult {\n\tswitchCameraResult: VideoSwitchResult;\n\tcameraId: string | null;\n}\n\n/**\n * Interface to help assign and sort available cameras by selection priority. Higher priority cameras will attempt to be acquired first.\n * @property info The MediaDeviceInfo object of the camera\n * @property priority The priority of the camera, with lower numbers being higher priority.\n */\ninterface ICameraPriority {\n\tinfo: MediaDeviceInfo;\n\tpriority: number;\n}\n\n/**\n * Sorts cameras by priority of preference, to the following order:\n * 1. The saved 'preferred' camera. Will be stored in a cookie upon manual camera selection\n * 2. The currently selected camera\n * 3. Front-facing cameras\n * 4. All other cameras\n * @param cameras Array of camera devices from the browser\n * @param preferredCamId The device ID of the preferred camera\n * @param previousCameraId The device ID of the previously selected camera\n * @returns Cameras sorted from 'best selection' to 'worst selection'\n */\nfunction sortCamerasByPriority(\n\tcameras: MediaDeviceInfo[],\n\tpreferredCamId: string | null,\n\tpreviousCameraId: string | null,\n): MediaDeviceInfo[] {\n\tconst priorityProcessedCams: ICameraPriority[] = [];\n\tfor (const camera of cameras) {\n\t\tlet priority = 0;\n\t\tif (camera.deviceId === preferredCamId) {\n\t\t\tpriority = 1;\n\t\t} else if (camera.deviceId === previousCameraId) {\n\t\t\tpriority = 2;\n\t\t} else if (camera.label.toLowerCase().includes(\"front\")) {\n\t\t\tpriority = 3;\n\t\t} else {\n\t\t\tpriority = 4;\n\t\t}\n\t\tpriorityProcessedCams.push({ info: camera, priority: priority });\n\t}\n\tconst sortedCams = priorityProcessedCams.sort((a, b) => a.priority - b.priority).map((cam) => cam.info);\n\treturn sortedCams;\n}\n\n/**\n * Attempt to acquire a camera device by trying all available cameras.\n * Prioritizes cameras based on the following order:\n * 1. Cached camera preference\n * 2. Previously selected camera\n * 3. Front-facing cameras\n * 4. All other cameras\n * @param cameras Array of camera devices from the browser\n * @param prevSelectedId The device ID of the previously selected camera\n * @param switchCameraCallback Callback to switch to a camera\n * @returns ICameraSelectionResult indicating if a camera was successfully acquired, and the device ID that was selected\n */\nasync function exhaustiveCameraSelection(\n\tcameras: MediaDeviceInfo[],\n\tprevSelectedId: string | null,\n\tswitchCameraCallback: (device: MediaDeviceInfo) => Promise,\n\tisCameraEnabled: boolean,\n): Promise {\n\tif (cameras.length === 0) {\n\t\treturn { switchCameraResult: VideoSwitchResult.switchFailed, cameraId: null };\n\t}\n\tconst preferredCameraId = getCameraPreference()?.id ?? null;\n\t// Sort cameras so we attempt to pick the preferred cameras first without re-testing the same camera\n\tconst prioritySortedCameras = sortCamerasByPriority(cameras, preferredCameraId, prevSelectedId);\n\n\t// Disabled camera to fall back to if all cameras fail to acquire\n\t// Should simply fall back to the \"most preferred\" existing camera if all cameras fail\n\tlet fallbackDisabledCameraId: string | null = null;\n\n\tfor (const camera of prioritySortedCameras) {\n\t\tfallbackDisabledCameraId = fallbackDisabledCameraId || camera.deviceId;\n\t\tconst switchCameraSuccess = await attemptAcquireCamera(\n\t\t\tcamera,\n\t\t\tswitchCameraCallback,\n\t\t\tprevSelectedId,\n\t\t\tisCameraEnabled,\n\t\t);\n\t\tif (switchCameraSuccess) {\n\t\t\treturn { switchCameraResult: VideoSwitchResult.switchSuccess, cameraId: camera.deviceId };\n\t\t}\n\t}\n\n\t// If we've exhausted all cameras and none have been acquired, return false with the best camera we found\n\treturn { switchCameraResult: VideoSwitchResult.switchFailed, cameraId: fallbackDisabledCameraId };\n}\n\n/**\n * Determine which audio device should be auto-selected\n *\n * @param devices list of available \"audioinput\" or \"audiooutput\" devices\n * @param prevDeviceIds list of devices that were previously available\n * @param getPreferredDeviceFromStorage function used to retrieve the preferred device\n * @param prevSelectedId deviceId of the previously selected device\n * @returns device that should be auto-selected, or null to indicate no device should be selected\n */\nfunction autoSelectAudioDevice(\n\tdevices: MediaDeviceInfo[],\n\tprevDeviceIds: string[],\n\tgetPreferredDeviceFromStorage: IGetDevicePreference,\n\tprevSelectedId?: string,\n): MediaDeviceInfo | null {\n\t// if we don't have options, return null to clear the previous selection\n\tif (!devices) {\n\t\treturn null;\n\t}\n\n\t// filter out OS-defined devices\n\tconst allowedDevices = devices.filter((device) => !isOSDefinedAudioDevice(device));\n\tif (!allowedDevices.length) {\n\t\treturn null;\n\t}\n\n\t// determine which devices (if any) are new to the list, on first call this will be all of them\n\tconst newDevices = allowedDevices.filter((device) => !prevDeviceIds.includes(device.deviceId));\n\tif (newDevices.length) {\n\t\t// NOTE: by only looking for preferred devices when they are newly added, a newly added headset/bluetooth\n\t\t// device will take precedence over a manually selected audio device. This is expected behavior.\n\n\t\t// if the user's preferred device was newly added, select that automatically\n\t\tconst preferredDevice = getPreferredDevice(newDevices, getPreferredDeviceFromStorage);\n\t\tif (preferredDevice) {\n\t\t\treturn preferredDevice;\n\t\t}\n\n\t\t// if there are any newly added headset or bluetooth devices, select those automatically\n\t\tconst newHeadsetOrBluetoothDevice = getHeadsetOrBluetooth(newDevices);\n\t\tif (newHeadsetOrBluetoothDevice) {\n\t\t\treturn newHeadsetOrBluetoothDevice;\n\t\t}\n\t}\n\n\t// if the previously selected device still exists, continue to use it\n\tconst selectedDevice = allowedDevices.find((device) => device.deviceId === prevSelectedId);\n\tif (selectedDevice) {\n\t\treturn selectedDevice;\n\t}\n\n\t// check if any of the other devices are headsets or bluetooth\n\tconst headsetOrBluetoothDevice = getHeadsetOrBluetooth(allowedDevices);\n\tif (headsetOrBluetoothDevice) {\n\t\treturn headsetOrBluetoothDevice;\n\t}\n\n\t// check if any of the remaining devices are the OS's designated \"communications\" or \"default\" devices\n\tconst communicationsOrDefaultDevice = getCommunicationsOrDefaultDevice(devices);\n\tif (communicationsOrDefaultDevice) {\n\t\treturn communicationsOrDefaultDevice;\n\t}\n\n\t// otherwise, select the first allowed device\n\treturn allowedDevices[0];\n}\n\n/**\n * Find a device that matches the device returned by the getPreferredDeviceFromStorage function\n *\n * @param devices list of devices\n * @param getPreferredDeviceFromStorage function used to retrieve the preferred device cookie\n */\nfunction getPreferredDevice(\n\tdevices: MediaDeviceInfo[],\n\tgetPreferredDeviceFromStorage: IGetDevicePreference,\n): MediaDeviceInfo | null {\n\t// get the label of the preferred device\n\tconst storedPreference = getPreferredDeviceFromStorage();\n\tif (!storedPreference) {\n\t\treturn null;\n\t}\n\t// find a device matching the preferred device\n\tconst preferredDevice =\n\t\tdevices.find((device) => device.deviceId === storedPreference.id) ||\n\t\tdevices.find((device) => device.label.toUpperCase() === storedPreference.label.toUpperCase());\n\n\tif (preferredDevice) {\n\t\treturn preferredDevice;\n\t}\n\treturn null;\n}\n\n/**\n * Find a device labeled as a \"headset\" or \"bluetooth\" device\n * Due to an issue with the Android device \"Headset Earpiece\", we're no longer looking for devices with \"headset\" in their label\n *\n * @param audioDevices list of \"audioinput\" or \"audiooutput\" devices\n * @returns device with \"headset\" or \"bluetooth\" in its label\n */\nfunction getHeadsetOrBluetooth(audioDevices: MediaDeviceInfo[]): MediaDeviceInfo | null {\n\tif (!audioDevices) {\n\t\treturn null;\n\t}\n\t// check for any devices labeled \"bluetooth\"\n\tconst bluetoothDevice = audioDevices.find((device) => device.label.toLowerCase().includes(\"bluetooth\"));\n\tif (bluetoothDevice) {\n\t\treturn bluetoothDevice;\n\t}\n\t// no \"headset\" or \"bluetooth\" device was found\n\treturn null;\n}\n\n/**\n * Find a device that is the OS-defined \"communications\" or \"default\" device\n *\n * @param audioDevices list of \"audioinput\" or \"audiooutput\" devices, this list should NOT have filtered out \"communications\" or \"default\" devices\n * @returns device that is the OS-defined \"communications\" or \"default\" device\n */\nfunction getCommunicationsOrDefaultDevice(audioDevices: MediaDeviceInfo[]): MediaDeviceInfo | null {\n\tif (!audioDevices) {\n\t\treturn null;\n\t}\n\n\t// get the filtered list of devices that show up in selectors\n\tconst allowedDevices = audioDevices.filter((device) => !isOSDefinedAudioDevice(device));\n\n\t// get \"communications\" device\n\tconst commDevice = audioDevices.find((device) => device.deviceId === \"communications\");\n\tif (commDevice) {\n\t\t// find the allowed device that matches the \"communications\" device\n\t\tconst commMatch = getMatchingDevice(allowedDevices, commDevice);\n\t\tif (commMatch) {\n\t\t\treturn commMatch;\n\t\t}\n\t}\n\n\t// get \"default\" device\n\tconst defaultDevice = audioDevices.find((device) => device.deviceId === \"default\");\n\tif (defaultDevice) {\n\t\t// find the allowed device that matches the \"default\" device\n\t\tconst defaultMatch = getMatchingDevice(allowedDevices, defaultDevice);\n\t\tif (defaultMatch) {\n\t\t\treturn defaultMatch;\n\t\t}\n\t}\n\n\t// no \"communications\" or \"default\" device was found\n\treturn null;\n}\n\n/**\n * Find a device whose label is a substring of the matchDevice label\n *\n * @param devices list of devices to search for a match within\n * @param matchDevice device to look for a match of\n * @returns a device in devices whose label was included in the matchDevice label, or null if no device is found\n */\nfunction getMatchingDevice(devices: MediaDeviceInfo[], matchDevice: MediaDeviceInfo): MediaDeviceInfo | null {\n\tconst foundDevice = devices.find((device) =>\n\t\tmatchDevice.label.toLowerCase().includes(device.label.toLowerCase()),\n\t);\n\treturn foundDevice || null;\n}\n","/**\n * @copyright Copyright 2022 Epic Systems Corporation\n * @file Hook to sort and track all participants within the grid view\n * @author Will Cooper\n * @module Epic.VideoApp.Hooks.UseBucketedParticipants\n */\n\nimport { useContext, useMemo, useRef } from \"react\";\nimport { useStrings } from \"~/hooks\";\nimport { IParticipantWithName } from \"~/types\";\nimport { stringFormat } from \"~/utils/strings\";\nimport { ParticipantDataContext } from \"~/web-core/components\";\nimport { IUser } from \"~/web-core/interfaces\";\nimport { useRoomState } from \"../state\";\n\nenum TokenNames {\n\tgenericName = \"DefaultName_Generic\",\n\tnumberedName = \"DefaultName_Numbered\",\n}\n\ninterface IIndexedParticipant {\n\tindex: number;\n\tparticipant: IUser;\n}\n\n/**\n * Hook to return a combined set of participants containing all users that have set names, and those with default names (Caller X)\n * These will separated into two groups to allow for better sorting and more graceful insertion into areas like the grid.\n * @param participants - The list of participants to retrieve names for and place into two sorted buckets\n * @returns - The combined list of participants in their sorted buckets\n */\nexport function useBucketedParticipants(participants: IUser[]): IParticipantWithName[] {\n\tconst setNames = useRoomState((selectors) => selectors.getAllParticipantNames(), []);\n\tconst strings = useStrings(\"useParticipantName\", Object.values(TokenNames), [], \"en-us\");\n\tconst stringsRef = useRef(strings);\n\tconst { namelessParticipantData } = useContext(ParticipantDataContext);\n\n\tconst allSortedParticipants = useMemo(() => {\n\t\tconst participantsWithSetName: IParticipantWithName[] = [];\n\t\tconst namelessParticipants: IParticipantWithName[] = [];\n\t\tconst namelessIndexes: IIndexedParticipant[] = [];\n\n\t\tparticipants.forEach((participant) => {\n\t\t\tconst identity = participant.getUserIdentity();\n\t\t\tconst displayName = identity ? setNames[identity] : \"\";\n\t\t\tif (displayName) {\n\t\t\t\tparticipantsWithSetName.push({ displayName, participant });\n\t\t\t} else if (namelessParticipantData.dataIsShared) {\n\t\t\t\t// Add this participant based on their index if found\n\t\t\t\tconst index = namelessParticipantData.idList.findIndex((current) => current === identity);\n\n\t\t\t\tif (index > -1) {\n\t\t\t\t\t// Track any nameless participants that we can confirm will be (Caller X), these will be sorted by number\n\t\t\t\t\tnamelessIndexes.push({\n\t\t\t\t\t\tindex,\n\t\t\t\t\t\tparticipant,\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\t// Track all other nameless participants (append to end)\n\t\t\t\t\tnamelessParticipants.push({\n\t\t\t\t\t\tdisplayName: stringsRef.current[TokenNames.genericName],\n\t\t\t\t\t\tparticipant,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Track all other nameless participants (append to end)\n\t\t\t\tnamelessParticipants.push({\n\t\t\t\t\tdisplayName: stringsRef.current[TokenNames.genericName],\n\t\t\t\t\tparticipant,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\t// Sort all participants with shared display names (those set at the hardware test card) in alphabetical order\n\t\tconst namedParticipants = participantsWithSetName.sort((a, b) =>\n\t\t\ta.displayName.localeCompare(b.displayName),\n\t\t);\n\n\t\t// Put all unnamed callers in index order\n\t\tconst numberedParticipants = namelessIndexes\n\t\t\t.sort((a, b) => a.index - b.index)\n\t\t\t.map((current): IParticipantWithName => {\n\t\t\t\treturn {\n\t\t\t\t\tparticipant: current.participant,\n\t\t\t\t\tdisplayName: stringFormat(stringsRef.current[TokenNames.numberedName], current.index + 1),\n\t\t\t\t};\n\t\t\t});\n\n\t\t// Bucket participants to first show named participants, then numbered participants, then any out of sync default named participants\n\t\treturn namedParticipants.concat(numberedParticipants).concat(namelessParticipants);\n\t}, [namelessParticipantData.dataIsShared, namelessParticipantData.idList, participants, setNames]);\n\n\treturn allSortedParticipants;\n}\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file Refactor event listeners to handle attempted navigation away from the page\n * @author Max Harkins\n * @module Epic.VideoApp.Hooks.UseLeavePageHandler\n */\nimport { useEffect } from \"react\";\n\n/**\n * Hook to handle when users leave the site. The hook listens to events from the user's browser, and executes a callback function if it detects the user\n * has chosen to leave the page or in the process of navigating away.\n * @param onWarning Function which triggers a warning for a user before they leave the page.\n * @param onLeave Function to attempt any clean up before the user leaves the page. The user cannot return to the page at the point this is called, and cleanup is not guaranteed to succeed.\n */\nexport function useLeavePageHandler(\n\tonWarning: (event: BeforeUnloadEvent) => void,\n\tonLeave: () => void,\n): void {\n\t// setup event listeners for page close / navigation away\n\tuseEffect(() => {\n\t\twindow.addEventListener(\"onpopstate\", onLeave);\n\t\t// Listen to the \"beforeunload\" event when the tab/browser is being closed. At this point, the event can still be cancelled.\n\t\t// change per https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onbeforeunload#Syntax\n\t\twindow.addEventListener(\"beforeunload\", onWarning);\n\t\t// per MDN https://developer.mozilla.org/en-US/docs/Web/API/Window/unload_event\n\t\t// the 'unload' event should not be used due to bfcache issues (cause of #1033 / QAN 6417930)\n\t\t// better to listen to 'pagehide' events per above\n\t\twindow.addEventListener(\"pagehide\", onLeave);\n\n\t\t// Unregister all of the listeners before navigating away from the component calling the hook\n\t\treturn () => {\n\t\t\twindow.removeEventListener(\"onpopstate\", onLeave);\n\t\t\twindow.removeEventListener(\"beforeunload\", onWarning);\n\t\t\twindow.removeEventListener(\"pagehide\", onLeave);\n\t\t};\n\t}, [onLeave, onWarning]);\n}\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file Hook to initialize disconnection event handlers\n * @author Will Cooper\n * @module Epic.VideoApp.Hooks.UseDisconnectHandler\n */\nimport { useCallback, useEffect, useRef } from \"react\";\nimport { useDisconnect, useStrings } from \"~/hooks\";\nimport { useLeavePageHandler } from \"./useLeavePageHandler\";\n\nexport function useDisconnectHandler(): void {\n\tconst tokenNames = [\"DisconnectWarning\"];\n\tconst strings = useStrings(\"useDisconnectHandler\", tokenNames);\n\tconst stringsRef = useRef(strings);\n\tuseEffect(() => {\n\t\tstringsRef.current = strings;\n\t}, [strings]);\n\n\t// Log the disconnect back to cosmos\n\tconst disconnect = useDisconnect();\n\n\tconst doDisconnect = useCallback(() => {\n\t\tdisconnect(false);\n\t}, [disconnect]);\n\n\t// Listen to the \"beforeunload\" event on window to leave the Room when the tab/browser is being closed.\n\t// change per https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onbeforeunload#Syntax\n\tconst onWarning = useCallback((event: BeforeUnloadEvent) => {\n\t\tevent = event || window.event;\n\t\t//User is not disconnected yet, return a message so the browser will warn the user before navigating away\n\t\t//Most browsers override this text and may block the attempt to display if the user has not interacted with the page\n\t\tif (event) {\n\t\t\tevent.returnValue = stringsRef.current[\"DisconnectWarning\"];\n\t\t}\n\t\treturn stringsRef.current[\"DisconnectWarning\"];\n\t}, []);\n\n\tuseLeavePageHandler(onWarning, doDisconnect);\n}\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file hook to update document title\n * @author Matt Panico\n * @module Epic.VideoApp.Hooks.UseDocumentTitle\n */\n\nimport { useEffect } from \"react\";\n\n/**\n * set the document's title when it changes\n *\n * @param title the document title to display\n */\nexport function useDocumentTitle(title: string): void {\n\tuseEffect(() => {\n\t\tdocument.title = title;\n\t}, [title]);\n}\n","/**\n * @copyright Copyright 2023 Epic Systems Corporation\n * @file Hook to get some functions to update hardware test state\n * @author Tara Feldstein\n * @module Epic.VideoApp.Hooks.UseHardwareTestActions\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport { useCallback } from \"react\";\nimport { hardwareTestActions } from \"~/state\";\nimport { DeviceStatus, DeviceStatusSubtype } from \"~/types\";\n\ninterface IHardwareTestActions {\n\tupdateMicTestStatus: (isWorking: boolean, hasWorked: boolean) => void;\n}\n\nexport function useHardwareTestActions(): IHardwareTestActions {\n\tconst dispatch = useDispatch();\n\n\tconst updateMicTestStatus = useCallback(\n\t\t(isWorking: boolean, hasWorked: boolean) => {\n\t\t\tif (isWorking) {\n\t\t\t\t// Only update state to success if it hasWorked, since isWorking defaults true\n\t\t\t\tif (hasWorked) {\n\t\t\t\t\tdispatch(\n\t\t\t\t\t\thardwareTestActions.setMicrophoneState({\n\t\t\t\t\t\t\tstatus: DeviceStatus.success,\n\t\t\t\t\t\t\terrorType: DeviceStatusSubtype.none,\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (hasWorked) {\n\t\t\t\t\t// Mic stopped working\n\t\t\t\t\tdispatch(\n\t\t\t\t\t\thardwareTestActions.setMicrophoneState({\n\t\t\t\t\t\t\tstatus: DeviceStatus.warning,\n\t\t\t\t\t\t\terrorType: DeviceStatusSubtype.stoppedWorking,\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\t// Mic never worked\n\t\t\t\t\tdispatch(\n\t\t\t\t\t\thardwareTestActions.setMicrophoneState({\n\t\t\t\t\t\t\tstatus: DeviceStatus.warning,\n\t\t\t\t\t\t\terrorType: DeviceStatusSubtype.neverStarted,\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[dispatch],\n\t);\n\n\treturn { updateMicTestStatus };\n}\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Utilities for managing hardware test\n * @author Echo Cologlu\n * @module Epic.VideoApp.Utils.HardwareTest\n */\n\nimport {\n\tDeviceStatus,\n\tDeviceStatusSubtype,\n\tEpicReportableCameraDeviceStatus,\n\tEpicReportableMicDeviceStatus,\n\tEpicReportableMicDeviceStatusSubtype,\n\tEpicReportableSpeakerDeviceStatus,\n\tIDeviceStatus,\n\tIHardwareTestResult,\n} from \"~/types\";\n\n/**\n * Given two hardware test devices, returns true if they are equal (or just enabling/disabling device), false otherwise\n * Because of no-prototype-builtins eslint rule, I can't directly use hasOwnProperty method,\n * which makes the function a bit more complicated than it has to be\n * @param object1 IDeviceStatus\n * @param object2 IDeviceStatus\n * @returns true if the objects are equal, false otherwise\n */\nexport function areObjectsEqual(object1: IDeviceStatus, object2: IDeviceStatus): boolean {\n\tconst keys1 = Object.keys(object1) as (keyof IDeviceStatus)[];\n\tconst keys2 = Object.keys(object2) as (keyof IDeviceStatus)[];\n\n\tif (keys1.length !== keys2.length) {\n\t\treturn false;\n\t}\n\n\treturn keys1.every((key) => {\n\t\tif (key === \"label\") {\n\t\t\treturn (\n\t\t\t\tobject1.label.trim() === object2.label.trim() ||\n\t\t\t\tobject1.label.trim() === \"\" ||\n\t\t\t\tobject2.label.trim() === \"\"\n\t\t\t); //If one of the labels is empty, we still consider them equal. (It may mean enabling/disabling the same camera/mic/speaker during hardware test)\n\t\t}\n\t\treturn Object.prototype.hasOwnProperty.call(object2, key) && object1[key] === object2[key];\n\t});\n}\n\n/**\n * If this is a subsequent hardware test, we only want to log to LVV if there was a change in the hardware status.\n * We will log all the failed hardware tests even if they are subsequent tests.\n * @param prevTest Previous hardware test results.\n * @param currentTest Current hardware test results.\n * @param isConnectedToCall Whether the user is connected to a call (i.e. not in the hardware test screen).\n * @returns true if we should log the test to LVV, false otherwise.\n */\nexport function shouldLogToEpic(\n\tprevTest: IHardwareTestResult | null,\n\tcurrentTest: IHardwareTestResult,\n\tisConnectedToCall: boolean,\n): boolean {\n\tif (prevTest === null) {\n\t\treturn true; // First test should always be logged\n\t}\n\tconst hardwareChanged =\n\t\t!areObjectsEqual(prevTest.camera, currentTest.camera) ||\n\t\t!areObjectsEqual(prevTest.microphone, currentTest.microphone) ||\n\t\t!areObjectsEqual(prevTest.speaker, currentTest.speaker);\n\n\treturn !prevTest.success || !currentTest.success || (hardwareChanged && !isConnectedToCall);\n}\n\n/**\n * Constructs an error message for granular device error logging to LVV and Management portal\n * @param cameraError The camera error\n * @param micError The microphone error\n * @param speakerError The speaker error\n * @returns Error message string in the form of \"Device1 (error type1), Device2 (error type 2)\", empty string if no errors\n */\nexport function constructErrorMessageForHWTest(\n\tcameraError: DeviceStatusSubtype,\n\tmicError: DeviceStatusSubtype,\n\tspeakerError: DeviceStatusSubtype,\n): string {\n\t// These object keys will be used in the string, hence they are capitalized\n\t/* eslint-disable @typescript-eslint/naming-convention */\n\tconst deviceErrors = {\n\t\tCamera: cameraError,\n\t\tMicrophone: micError,\n\t\tSpeaker: speakerError,\n\t};\n\n\tconst errors = Object.entries(deviceErrors).reduce((errorMessages: string[], [device, error]) => {\n\t\tif (error !== DeviceStatusSubtype.none) {\n\t\t\terrorMessages.push(`${device} (${error})`);\n\t\t}\n\t\treturn errorMessages;\n\t}, []);\n\n\treturn errors.join(\", \");\n}\n\n/**\n * Determines if the mic status classifies as a reportable failure\n * @param micStatus The mic status\n * @param micError The mic error\n * @returns true if the mic status is a failure, false otherwise\n */\nexport function isReportableMicFailure(micStatus: DeviceStatus, micError: DeviceStatusSubtype): boolean {\n\treturn (\n\t\tEpicReportableMicDeviceStatus.includes(micStatus) &&\n\t\tEpicReportableMicDeviceStatusSubtype.includes(micError)\n\t);\n}\n\n/**\n * Filters out non-reportable mic errors\n * @param micError The mic error\n * @returns the filtered mic error\n */\nexport function getReportableMicError(micError: DeviceStatusSubtype): DeviceStatusSubtype {\n\treturn EpicReportableMicDeviceStatusSubtype.includes(micError) ? micError : DeviceStatusSubtype.none;\n}\n\n/**\n * Determines if the camera status classifies as a reportable failure\n * @param cameraStatus The camera status\n * @returns true if the camera status is a failure, false otherwise\n */\nexport function isReportableCameraFailure(cameraStatus: DeviceStatus): boolean {\n\treturn EpicReportableCameraDeviceStatus.includes(cameraStatus);\n}\n\n/**\n * Determines if the speaker status classifies as a reportable failure\n * @param speakerStatus The speaker status\n * @returns true if the speaker status is a failure, false otherwise\n */\nexport function isReportableSpeakerFailure(speakerStatus: DeviceStatus): boolean {\n\treturn EpicReportableSpeakerDeviceStatus.includes(speakerStatus);\n}\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file Hook to build a representation of a single hardware test state (pass or fail)\n * @author Will Cooper\n * @module Epic.VideoApp.Hooks.UseHardwareTestResult\n */\nimport { useContext, useEffect, useState } from \"react\";\nimport { useConnectionStatus } from \"~/hooks/useConnectionStatus\";\nimport { useHardwareTestState, useLocalTrackState, useSpeakerState } from \"~/state\";\nimport { HardwareTestStatus, IHardwareTestResult } from \"~/types\";\nimport {\n\tconstructErrorMessageForHWTest,\n\tgetReportableMicError,\n\tisReportableCameraFailure,\n\tisReportableMicFailure,\n\tisReportableSpeakerFailure,\n\tshouldLogToEpic,\n} from \"~/utils/hardwareTest\";\nimport { VideoSessionContext } from \"~/web-core/components/VideoSessionProvider\";\nimport { useIsStreamEnabled } from \"~/web-core/hooks/useIsStreamEnabled\";\nimport { useSelectedMic } from \"./useSelectedMic\";\n\n/**\n * Makes a server request with local track data from redux store\n * @param isVideoCall flag to indicate that we are getting the result for the video call\n */\nexport function useHardwareTestResult(isVideoCall: boolean): IHardwareTestResult | null {\n\tconst [hardwareTest, setHardwareTest] = useState(null);\n\tconst { session, localDeviceStream } = useContext(VideoSessionContext);\n\tconst connectionStatus = useConnectionStatus(session);\n\tconst isVideoEnabled = useIsStreamEnabled(\"video\", localDeviceStream);\n\tconst hasAutoSelected = useLocalTrackState((selectors) => selectors.getHasAutoSelected(), []);\n\tconst selectedCameraLabel = localDeviceStream?.getDeviceInfo(\"video\").label ?? \"\";\n\tconst selectedMicLabel = localDeviceStream?.getDeviceInfo(\"audio\").label ?? \"\";\n\tconst selectedSpeakerLabel = useSpeakerState((selectors) => selectors.getSelectedSpeakerLabel(), []);\n\tconst selectedMic = useSelectedMic();\n\tconst status = useHardwareTestState(\n\t\t(selectors) => selectors.getTestStatus({ allowOneError: isVideoCall, isStandalone: !isVideoCall }),\n\t\t[isVideoCall],\n\t);\n\tconst cameraError = useHardwareTestState((selectors) => selectors.getCameraError(), []);\n\tconst cameraFailure = isReportableCameraFailure(\n\t\tuseHardwareTestState((selectors) => selectors.getCameraStatus(isVideoCall), [isVideoCall]),\n\t);\n\tconst micError = getReportableMicError(\n\t\tuseHardwareTestState((selectors) => selectors.getMicrophoneError(), []),\n\t);\n\tconst micFailure = isReportableMicFailure(\n\t\tuseHardwareTestState((selectors) => selectors.getMicrophoneStatus(isVideoCall), [isVideoCall]),\n\t\tuseHardwareTestState((selectors) => selectors.getMicrophoneError(), []),\n\t);\n\tconst speakerError = useHardwareTestState((selectors) => selectors.getSpeakerError(), []);\n\tconst speakerFailure = isReportableSpeakerFailure(\n\t\tuseHardwareTestState((selectors) => selectors.getSpeakerStatus(), []),\n\t);\n\tconst vendorError = useHardwareTestState((selectors) => selectors.getVendorError(), []);\n\n\t// With the vendor abstraction layer refactor, the new useMediaTrack hook only updates the media localDeviceStream track when a\n\t// device becomes ready (like switching to a new device). Because of that, only device updates that affect\n\t// the hardware test result are logged to the portal. We use the useMediaTrack hook to know when the device\n\t// has changed, and the useIsStreamEnabled hook to know when the device is enabled/disabled. Note: we do not clear the mic\n\t// from the portal when it is muted, which we do for when the camera is disabled.\n\n\tuseEffect(() => {\n\t\t// Verify we are in a valid state when putting together a hardware test result\n\t\tif (status === HardwareTestStatus.testing || !hasAutoSelected) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst cameraLabel = isVideoEnabled && selectedCameraLabel ? selectedCameraLabel : \"\";\n\t\tconst speakerLabel = selectedSpeakerLabel ?? \"\";\n\t\tconst isSuccess = status === HardwareTestStatus.passed;\n\n\t\tsetHardwareTest((prevTest) => {\n\t\t\tconst currentTest = {\n\t\t\t\tsuccess: isSuccess,\n\t\t\t\tcamera: {\n\t\t\t\t\tfailure: cameraFailure,\n\t\t\t\t\tlabel: cameraLabel,\n\t\t\t\t},\n\t\t\t\tmicrophone: {\n\t\t\t\t\tfailure: micFailure,\n\t\t\t\t\tlabel: selectedMicLabel,\n\t\t\t\t},\n\t\t\t\tspeaker: {\n\t\t\t\t\tfailure: speakerFailure,\n\t\t\t\t\tlabel: speakerLabel,\n\t\t\t\t},\n\t\t\t\terrorCode:\n\t\t\t\t\tvendorError?.vendorErrorCode ??\n\t\t\t\t\t(cameraFailure || micFailure || speakerFailure ? \"11\" : \"\"),\n\t\t\t\terrorMessage:\n\t\t\t\t\tvendorError?.message ??\n\t\t\t\t\tconstructErrorMessageForHWTest(cameraError, micError, speakerError),\n\t\t\t\tuserLanguage: navigator.language,\n\t\t\t\t// this will be overridden, by our calculation in the next step, we don't have to worry about it\n\t\t\t\tshouldLogToEpic: !prevTest?.success || !isSuccess,\n\t\t\t};\n\n\t\t\tconst shouldLog = shouldLogToEpic(prevTest, currentTest, connectionStatus === \"connected\");\n\n\t\t\treturn {\n\t\t\t\t...currentTest,\n\t\t\t\tshouldLogToEpic: shouldLog,\n\t\t\t};\n\t\t});\n\t}, [\n\t\tstatus,\n\t\thasAutoSelected,\n\t\tcameraFailure,\n\t\tcameraError,\n\t\tmicFailure,\n\t\tmicError,\n\t\tselectedSpeakerLabel,\n\t\tspeakerFailure,\n\t\tspeakerError,\n\t\tvendorError,\n\t\tlocalDeviceStream,\n\t\tisVideoEnabled,\n\t\tselectedCameraLabel,\n\t\tselectedMicLabel,\n\t\tconnectionStatus,\n\t\tselectedMic,\n\t]);\n\n\treturn hardwareTest;\n}\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file Reactive interval where state stays up to date\n * @author Spencer Eanes\n * @module Epic.VideoApp.Hooks.UseInterval\n */\nimport { useEffect, useRef, useState } from \"react\";\n\ntype IntervalHandle = ReturnType | undefined;\n\n/**\n * A hook that will keep track of an up to date callback for better managing React state\n * within the Javascript Interval function.\n *\n * @param callback The function to run at a fixed interval.\n * @param delay The number of milliseconds between executions of the callback.\n * @param tearDownCallback Optional callback invoked when the effect for the interval is cleaned up.\n * @param doNotRunUnderCondition Optional boolean to determine if the interval should be created.\n * @returns The handle used to cancel the interval\n */\nexport function useInterval(\n\tcallback: () => void,\n\tdelay: number,\n\tteardownCallback?: () => void,\n\tdoNotRunUnderCondition?: boolean,\n): IntervalHandle {\n\tconst [handle, setHandle] = useState>();\n\tconst savedCallback = useRef(callback);\n\n\t// Remember the latest callback.\n\tuseEffect(() => {\n\t\tsavedCallback.current = callback;\n\t}, [callback]);\n\n\t// Set up the interval.\n\tuseEffect(() => {\n\t\tif (doNotRunUnderCondition) {\n\t\t\t// since hooks can't be called conditionally, allow consumers to provide a condition to not setup the interval.\n\t\t\treturn;\n\t\t}\n\n\t\tconst doInterval = (): void => {\n\t\t\tsavedCallback.current();\n\t\t};\n\t\tconst interval = setInterval(doInterval, delay);\n\t\t//Save off the handle to allow consuming components to end the interval without being un-rendered\n\t\tsetHandle(interval);\n\t\treturn () => {\n\t\t\tclearInterval(interval);\n\t\t\tif (teardownCallback) {\n\t\t\t\tteardownCallback();\n\t\t\t}\n\t\t};\n\t}, [delay, doNotRunUnderCondition, teardownCallback]);\n\n\treturn handle;\n}\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Hook to determine if a video stream's bandwidth is limited\n * @author Will Cooper\n * @module Epic.VideoApp.Hooks.UseIsStreamBandwidthAffected\n */\n\nimport { useEffect, useRef, useState } from \"react\";\nimport { Timeout } from \"~/types\";\nimport { secondsToMs } from \"~/utils/dateTime\";\nimport { IRemoteStream, IStream } from \"~/web-core/interfaces\";\n\nconst switchOffSyncSeconds = 2;\n\n/**\n * Monitors a given stream for bandwidth limitations\n * @param stream the stream to monitor\n * @returns true if the stream is bandwidth limited, false otherwise\n */\nexport function useIsStreamSwitchedOff(stream: IStream | undefined): boolean {\n\t// The useEffect will start a timeout to change this to true if the stream is indeed switched off\n\tconst [isSwitchedOff, setSwitchedOff] = useState(false);\n\n\tconst timeoutRef = useRef();\n\n\tuseEffect(() => {\n\t\tconst performSwitchOff = (): void => {\n\t\t\tsetSwitchedOff(true);\n\t\t};\n\n\t\t// Make sure we initialize the overlay status properly to ensure the overlay moves between visual participants\n\t\tif (checkSwitchedOff(stream)) {\n\t\t\ttimeoutRef.current = setTimeout(performSwitchOff, secondsToMs(switchOffSyncSeconds));\n\t\t} else {\n\t\t\tsetSwitchedOff(false);\n\t\t}\n\n\t\tif (stream) {\n\t\t\t// Setup event listeners for switch-off/switch-on\n\t\t\tconst handleSwitchedOff = (): void => {\n\t\t\t\tif (timeoutRef.current) {\n\t\t\t\t\tclearTimeout(timeoutRef.current);\n\t\t\t\t\ttimeoutRef.current = null;\n\t\t\t\t}\n\t\t\t\t// Delay the handling of track switch offs for a few seconds to confirm that a given participant's video remains switched off\n\t\t\t\ttimeoutRef.current = setTimeout(performSwitchOff, secondsToMs(switchOffSyncSeconds));\n\t\t\t};\n\t\t\tconst handleSwitchedOn = (): void => {\n\t\t\t\tif (timeoutRef.current) {\n\t\t\t\t\tclearTimeout(timeoutRef.current);\n\t\t\t\t\ttimeoutRef.current = null;\n\t\t\t\t}\n\t\t\t\tsetSwitchedOff(false);\n\t\t\t};\n\t\t\tstream.on(\"videoBandwidthLow\", handleSwitchedOff);\n\t\t\tstream.on(\"videoBandwidthNormal\", handleSwitchedOn);\n\t\t\treturn () => {\n\t\t\t\tif (timeoutRef.current) {\n\t\t\t\t\tclearTimeout(timeoutRef.current);\n\t\t\t\t\ttimeoutRef.current = null;\n\t\t\t\t}\n\t\t\t\tstream.off(\"videoBandwidthLow\", handleSwitchedOff);\n\t\t\t\tstream.off(\"videoBandwidthNormal\", handleSwitchedOn);\n\t\t\t};\n\t\t}\n\t}, [stream]);\n\n\treturn isSwitchedOff;\n}\n\n/**\n * Checks if a remote stream has had quality reduced due to low bandwidth\n * @param stream the stream to check\n * @returns true if the stream is bandwidth limited, false otherwise\n */\nfunction checkSwitchedOff(stream?: IStream): boolean {\n\tif (!stream) {\n\t\treturn false;\n\t}\n\n\tif (\"isBandwidthLimited\" in stream) {\n\t\treturn (stream as IRemoteStream).isBandwidthLimited();\n\t}\n\n\treturn false;\n}\n","/**\n * @copyright Copyright 2020-2021 Epic Systems Corporation\n * @file hook to add a keyboard shortcut\n * @author Colin Walters\n * @module Epic.VideoApp.Hooks.UseKeyboardShortcut\n */\n\nimport { useCallback, useEffect, useRef } from \"react\";\nimport { useAlertState, useImageState } from \"~/state\";\nimport { detectOS, OS } from \"~/utils/os\";\n\nconst MODIFIER_KEYS = [\"alt\", \"control\", \"shift\"];\n\n/**\n * Determine if all of the modifier keys necessary are pressed in the triggered keyboard event\n * @param modifiers modifier keys involved in the current shortcut\n * @param event keyboard event\n * @returns true if all necessary modifier keys are pressed, false otherwise\n */\nfunction allRequiredModifiersPressed(modifiers: string[], event: KeyboardEvent): boolean {\n\tif (modifiers.includes(\"alt\") && !event.altKey) {\n\t\treturn false;\n\t}\n\tif (modifiers.includes(\"control\") && !event.ctrlKey) {\n\t\treturn false;\n\t}\n\tif (modifiers.includes(\"shift\") && !event.shiftKey) {\n\t\treturn false;\n\t}\n\treturn true;\n}\n\n/**\n * Determine if the keyboard event is for the target key\n * @param event the keyboard event\n * @param key the key that is being listened for\n * @returns true if the keyboard event is for the specified key, false otherwise\n */\nfunction isTargetKey(event: KeyboardEvent, key: string): boolean {\n\t// macOS translates Alt/Option + character as a special character, so use the key's code instead\n\t// we use key otherwise because code assumes keyboard layout is standard \"QWERTY\" (https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/code)\n\treturn detectOS() === OS.mac ? event.code.toLowerCase() === `key${key}` : event.key.toLowerCase() === key;\n}\n\n/**\n * Options that can be provided when creating a keyboard shortcut\n */\ninterface IShortcutOptions {\n\t/** Whether or not the shortcut should be available when a modal alert is present */\n\tforModalAlert?: boolean;\n\n\t/** Whether or not the shortcut should be available when the image preview pane is present */\n\tforImagePreviewPane?: boolean;\n}\n\n/**\n * Hook to add a keyboard shortcut to a page/component\n * @param shortcutKeys array of the keys that create the shortcut\n * @param callback callback to invoke when the shortcut is used\n * @param options flags to determine when the keyboard shortcut should be available\n */\nexport const useKeyboardShortcut = (\n\tshortcutKeys: string[],\n\tcallback: () => void | Promise,\n\toptions: IShortcutOptions = {},\n): void => {\n\tconst { forModalAlert, forImagePreviewPane } = options;\n\n\t// determine if any alerts or image preview modals are present\n\tconst hasAlert = !!useAlertState((selectors) => selectors.getCurrentAlert(), []);\n\tconst hasImagePreview = !!useImageState((selectors) => selectors.getImageData(), []);\n\n\t// split the shortcut keys into modifier keys and the single non-modifier key\n\tconst modifierKeys = useRef();\n\tconst shortcutKey = useRef();\n\tuseEffect(() => {\n\t\tmodifierKeys.current = shortcutKeys.filter((key) => MODIFIER_KEYS.includes(key));\n\t\tconst [nonModifierKey] = shortcutKeys.filter((key) => !MODIFIER_KEYS.includes(key));\n\n\t\tif (nonModifierKey) {\n\t\t\tshortcutKey.current = nonModifierKey.toLowerCase();\n\t\t} else {\n\t\t\tconsole.error(`Failed to attach keyboard shortcut (${shortcutKeys.join(\"+\")})`);\n\t\t}\n\t}, [shortcutKeys]);\n\n\t// if callback, hasAlert, or hasImagePreview can change when the callback is invoked, making them\n\t// a dependency of the onKeydown callback will result in invoking the callback repeatedly on long\n\t// press, tracking them as refs allows us to keep an up to date value without the dependency\n\tconst callbackRef = useRef<() => void>(callback);\n\tconst hasAlertRef = useRef(hasAlert);\n\tconst hasImagePreviewRef = useRef(hasImagePreview);\n\tuseEffect(() => {\n\t\tcallbackRef.current = callback;\n\t\thasAlertRef.current = hasAlert;\n\t\thasImagePreviewRef.current = hasImagePreview;\n\t}, [callback, hasAlert, hasImagePreview]);\n\n\t// callback for when a keypress is started\n\tconst onKeydown = useCallback(\n\t\t(event: KeyboardEvent) => {\n\t\t\t// if disabled or the shortcut hasn't been parsed yet, quit\n\t\t\tif (!modifierKeys.current || !shortcutKey.current) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// if there is a modal (alert or image capture) and the shortcut isn't for the modal, quit\n\t\t\tif (\n\t\t\t\t(hasAlertRef.current && !forModalAlert) ||\n\t\t\t\t(!hasAlertRef.current && hasImagePreviewRef.current && !forImagePreviewPane)\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// if the keydown isn't a long press and the shortcut is satisfied, trigger the callback\n\t\t\tif (\n\t\t\t\t!event.repeat &&\n\t\t\t\tallRequiredModifiersPressed(modifierKeys.current, event) &&\n\t\t\t\tisTargetKey(event, shortcutKey.current)\n\t\t\t) {\n\t\t\t\tcallbackRef.current();\n\t\t\t}\n\t\t},\n\t\t[forModalAlert, forImagePreviewPane],\n\t);\n\n\tuseEffect(() => {\n\t\t// attach the keydown event listener\n\t\twindow.addEventListener(\"keydown\", onKeydown, true);\n\t\treturn () => window.removeEventListener(\"keydown\", onKeydown, true);\n\t}, [onKeydown]);\n};\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file Hook to get the media stream track from a AudioTrack or VideoTrack\n * @author Colin Walters\n * @module Epic.VideoApp.Hooks.UseMediaStreamTrack\n */\n\nimport { useEffect, useState } from \"react\";\nimport { AudioTrack, VideoTrack } from \"twilio-video\";\n/**\n * This hook allows components to reliably use the 'mediaStreamTrack' property of an audio or video track.\n * Whenever localTrack.restart(...) is called, it will replace the mediaStreamTrack property, but the localTrack\n * object will stay the same.\n */\nexport function useMediaStreamTrack(track: AudioTrack | VideoTrack | null): MediaStreamTrack | null {\n\tconst [mediaStreamTrack, setMediaStreamTrack] = useState(\n\t\ttrack?.mediaStreamTrack || null,\n\t);\n\n\tuseEffect(() => {\n\t\tsetMediaStreamTrack(track?.mediaStreamTrack || null);\n\n\t\tif (track) {\n\t\t\tconst handleStarted = (): void => {\n\t\t\t\tsetMediaStreamTrack(track.mediaStreamTrack);\n\t\t\t};\n\n\t\t\ttrack.on(\"started\", handleStarted);\n\t\t\treturn () => {\n\t\t\t\ttrack.off(\"started\", handleStarted);\n\t\t\t};\n\t\t}\n\t}, [track]);\n\n\treturn mediaStreamTrack;\n}\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file Hook used to get network quality from a participant\n * @author Colin Walters\n * @module Epic.VideoApp.Hooks.UseParticipantNetworkQuality\n */\n\nimport { useEffect, useState } from \"react\";\nimport { IEVCParticipantNetworkQualityChangedEvent } from \"~/web-core/events\";\nimport { IUser } from \"~/web-core/interfaces\";\n\n/**\n * Get the network quality of a remote or local participant\n * @param participant room participant\n * @returns the participants network quality level or null for no participant\n */\nexport function useParticipantNetworkQuality(participant?: IUser): number | null {\n\tconst [networkQualityLevel, setNetworkQualityLevel] = useState(\n\t\tparticipant?.getNetworkQualityLevel() ?? null,\n\t);\n\n\tuseEffect(() => {\n\t\tif (!participant) {\n\t\t\tsetNetworkQualityLevel(null);\n\t\t\treturn;\n\t\t}\n\n\t\tsetNetworkQualityLevel(participant.getNetworkQualityLevel());\n\n\t\tconst handleLevelChange = (args: IEVCParticipantNetworkQualityChangedEvent): void => {\n\t\t\tsetNetworkQualityLevel(args.newValue);\n\t\t};\n\t\tparticipant.on(\"networkQualityLevelChanged\", handleLevelChange);\n\n\t\treturn () => {\n\t\t\tparticipant.off(\"networkQualityLevelChanged\", handleLevelChange);\n\t\t};\n\t}, [participant]);\n\n\treturn networkQualityLevel;\n}\n","/**\n * @copyright Copyright 2023 Epic Systems Corporation\n * @file Hook to handle picture-in-picture events\n * @author Arun Vasireddy\n * @module Epic.VideoApp.Hooks.UsePictureInPicture\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport { useCallback, useContext, useEffect, useReducer } from \"react\";\nimport { pipActions, usePictureInPictureState } from \"~/state\";\nimport { EventType } from \"~/types\";\nimport {\n\tenterPictureInPictureMode,\n\tisElementInPiP,\n\tisPiPWindowOpen,\n\tisPictureInPictureSupported,\n} from \"~/utils/pictureInPicture\";\nimport { ParticipantStatusContext } from \"~/web-core/components\";\nimport { VideoType } from \"~/web-core/types\";\nimport { useAuditFeatureUse } from \"./auditing\";\n\nexport const METADATA_LOADED_READY_STATE = 1;\n\nexport const METADATA_LOADED_PROPERTY_NAME = \"loadedmetadata\";\n\n/**\n * Manage picture-in-picture actions\n *\n * @param videoRef Reference to the HTMLVideoElement element for a given participant's video feed\n * @param participantID Participant ID - used as a unique identifier for the video feed\n */\nexport function usePictureInPicture(\n\tvideoRef: React.RefObject | null,\n\tuserId?: string,\n\tvideoType?: VideoType,\n): void {\n\tconst participantInPiP = usePictureInPictureState((selectors) => selectors.getPipVideoID(), []);\n\tconst pipVideoType = usePictureInPictureState((selectors) => selectors.getPipVideoType(), []);\n\tconst isPipTrack = userId === participantInPiP && videoType === pipVideoType;\n\tconst isPiPModeEnabled = usePictureInPictureState((selectors) => selectors.getPipStatus(), []);\n\tconst { mainParticipant } = useContext(ParticipantStatusContext);\n\tconst isMainParticipant = userId === mainParticipant?.getUserIdentity() && videoType === pipVideoType;\n\tconst videoElement = videoRef?.current;\n\n\t// Used to force a re-render when the video element is not available by updating state\n\tconst [, forceUpdate] = useReducer((x: number) => x + 1, 0);\n\n\tconst dispatch = useDispatch();\n\tconst auditFeatureUse = useAuditFeatureUse();\n\n\tconst enterPIPMode = useCallback(() => {\n\t\tif (userId && videoType) {\n\t\t\tdispatch(pipActions.enterPiPMode({ newVideoID: userId, newVideoType: videoType }));\n\t\t}\n\t}, [dispatch, userId, videoType]);\n\n\tconst leavePIPMode = useCallback(() => {\n\t\tif (userId) {\n\t\t\tdispatch(\n\t\t\t\tpipActions.leavePiPMode({\n\t\t\t\t\tvideoID: userId,\n\t\t\t\t\tvideoType: videoType,\n\t\t\t\t\tisMainParticipant: isMainParticipant,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}, [dispatch, isMainParticipant, userId, videoType]);\n\n\t// Update shared state when user manually enters/exits PiP\n\tuseEffect(() => {\n\t\tif (!videoElement || !isPictureInPictureSupported()) {\n\t\t\treturn;\n\t\t}\n\t\tvideoElement.addEventListener(\"enterpictureinpicture\", enterPIPMode);\n\t\tvideoElement.addEventListener(\"leavepictureinpicture\", leavePIPMode);\n\n\t\treturn () => {\n\t\t\tvideoElement.removeEventListener(\"enterpictureinpicture\", enterPIPMode);\n\t\t\tvideoElement.removeEventListener(\"leavepictureinpicture\", leavePIPMode);\n\t\t};\n\t}, [videoElement, enterPIPMode, leavePIPMode]);\n\n\t//Enter PiP and update store if we failed to enter PiP\n\tconst enterPictureInPicture = useCallback(async () => {\n\t\tconst isPiPSuccessful = await enterPictureInPictureMode(videoElement);\n\t\tif (!isPiPSuccessful) {\n\t\t\tleavePIPMode();\n\t\t}\n\t}, [leavePIPMode, videoElement]);\n\n\t// Handle entering PiP based on state changes\n\tconst pictureInPictureHandler = useCallback(() => {\n\t\tif (!videoElement) {\n\t\t\t// In certain cases, the pipped element will freeze. By forcing a re-render when that happens,\n\t\t\t// the pip handler code will re-run with the updated video element.\n\t\t\tif (document.pictureInPictureElement && !document.pictureInPictureElement.isConnected) {\n\t\t\t\tforceUpdate();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (isPiPModeEnabled && !isElementInPiP(videoElement)) {\n\t\t\tif (!isPiPWindowOpen()) {\n\t\t\t\tvoid auditFeatureUse([{ feature: EventType.launchedPictureInPicture }]);\n\t\t\t}\n\t\t\tif (videoElement.readyState >= METADATA_LOADED_READY_STATE) {\n\t\t\t\tvoid enterPictureInPicture();\n\t\t\t} else {\n\t\t\t\tvideoElement.addEventListener(\n\t\t\t\t\tMETADATA_LOADED_PROPERTY_NAME,\n\t\t\t\t\tfunction enterPictureInPictureHandler(): void {\n\t\t\t\t\t\tvoid enterPictureInPicture();\n\t\t\t\t\t\tvideoElement.removeEventListener(\n\t\t\t\t\t\t\tMETADATA_LOADED_PROPERTY_NAME,\n\t\t\t\t\t\t\tenterPictureInPictureHandler,\n\t\t\t\t\t\t);\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}, [auditFeatureUse, enterPictureInPicture, isPiPModeEnabled, videoElement]);\n\n\t// Handle entering PiP for the current participant\n\tuseEffect(() => {\n\t\tif (!isPipTrack) {\n\t\t\treturn;\n\t\t}\n\t\tvoid pictureInPictureHandler();\n\t}, [isPipTrack, pictureInPictureHandler]);\n}\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file Hook to acquire and store the publications from a participant\n * @author Matt Panico and Colin Walters\n * @module Epic.VideoApp.Hooks.UsePublications\n */\n\nimport { useEffect, useState } from \"react\";\nimport { LocalTrackPublication, Participant, RemoteTrackPublication } from \"twilio-video\";\n\ntype TrackPublication = LocalTrackPublication | RemoteTrackPublication;\n\nexport function usePublications(participant: Participant | undefined): TrackPublication[] {\n\tconst [publications, setPublications] = useState([]);\n\n\tuseEffect(() => {\n\t\tif (!participant) {\n\t\t\treturn;\n\t\t}\n\t\tsetPublications(Array.from(participant.tracks.values()) as TrackPublication[]);\n\n\t\t// callback when there's a new publication\n\t\tconst publicationAdded = (publication: TrackPublication): void => {\n\t\t\tsetPublications((oldPublications) => [...oldPublications, publication]);\n\t\t};\n\n\t\t// callback when a publication is removed\n\t\tconst publicationRemoved = (publication: TrackPublication): void => {\n\t\t\tsetPublications((oldPublications) => oldPublications.filter((p) => p !== publication));\n\t\t};\n\n\t\t// subscribe to changes\n\t\tparticipant.on(\"trackPublished\", publicationAdded);\n\t\tparticipant.on(\"trackUnpublished\", publicationRemoved);\n\n\t\treturn () => {\n\t\t\tparticipant.off(\"trackPublished\", publicationAdded);\n\t\t\tparticipant.off(\"trackUnpublished\", publicationRemoved);\n\t\t};\n\t}, [participant]);\n\n\treturn publications;\n}\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file Hook for URL Search params\n * @author Matt Panico\n * @module Epic.VideoApp.Hooks.UseSearchParams\n */\nimport { useLocation } from \"@reach/router\";\nimport { useMemo } from \"react\";\n\nexport function useSearchParams(): URLSearchParams {\n\tconst location = useLocation();\n\n\treturn useMemo(() => {\n\t\treturn new URLSearchParams(location.search);\n\t}, [location]);\n}\n\nexport function useCaseInsensitiveSearchParam(search: string): string | null {\n\tconst searchParams = useSearchParams();\n\n\treturn useMemo(() => {\n\t\tfor (const [key, value] of searchParams) {\n\t\t\tif (key.toLowerCase() === search.toLowerCase()) {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}, [searchParams, search]);\n}\n","/**\n * @copyright Copyright 2020-2021 Epic Systems Corporation\n * @file Hardware Test authentication hook\n * @author Spencer Eanes & Razi Rais\n * @module Epic.VideoApp.Hooks.UseStoreHardwareTest\n */\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport { useCallback, useContext, useEffect, useRef } from \"react\";\nimport {\n\tafterRetrieveAccessToken,\n\tuseDisconnect,\n\tuseHardwareTestResult,\n\tuseVideoCallAuthentication,\n} from \"~/hooks\";\nimport { IAccessTokenUpdate, IHardwareTestResult, QueryParameters } from \"~/types\";\nimport { hoursToMs, secondsToMs } from \"~/utils/dateTime\";\nimport { setSessionCookies } from \"~/utils/jwt\";\nimport { debug } from \"~/utils/logging\";\nimport { makeRequest } from \"~/utils/request\";\nimport { VideoSessionContext } from \"~/web-core/components\";\nimport { ISession } from \"~/web-core/interfaces\";\nimport { combinedActions, useAuthState, useRoomState } from \"../state\";\nimport { useCaseInsensitiveSearchParam } from \"./useSearchParams\";\n\n/**\n * Makes a server request with local track data from redux store\n * @param isVideoCall whether or not the hardware test is being stored for a video call\n */\nexport function useStoreHardwareTest(isVideoCall: boolean): void {\n\tconst JWT = useAuthState((selectors) => selectors.getJWT(), []);\n\tconst sessionID = useCaseInsensitiveSearchParam(QueryParameters.sessionId) ?? \"\";\n\tconst { session } = useContext(VideoSessionContext);\n\tconst isDisconnecting = useRoomState((selectors) => selectors.getIsDisconnecting(), []);\n\tconst hasRefreshToken = useAuthState((selectors) => selectors.getRefreshTokenTimer(), []) !== null;\n\tconst currentHardwareTest: IHardwareTestResult | null = useHardwareTestResult(isVideoCall);\n\tconst dispatch = useDispatch();\n\n\tconst referenceJWT = useRef(JWT);\n\tconst refSession = useRef(session ?? null);\n\tconst refHasRefreshToken = useRef(hasRefreshToken);\n\n\tconst requestInProgress = useRef(false);\n\tconst queuedResult = useRef(null);\n\n\t// Update the JWT reference. This allows us to reference the JWT below\n\t// where we POST hardware tests, without re-rendering when it changes\n\tuseEffect(() => {\n\t\treferenceJWT.current = JWT;\n\t}, [JWT]);\n\n\tuseEffect(() => {\n\t\trefSession.current = session ?? null;\n\t}, [session]);\n\n\tuseEffect(() => {\n\t\trefHasRefreshToken.current = hasRefreshToken;\n\t}, [hasRefreshToken]);\n\n\tconst disconnect = useDisconnect();\n\tconst disconnectRef = useRef(disconnect);\n\tuseEffect(() => {\n\t\tdisconnectRef.current = disconnect;\n\t}, [disconnect]);\n\n\tconst { updateAccessToken } = useVideoCallAuthentication();\n\n\t// actually store hardware test result\n\tconst storeHardwareTest = useCallback(\n\t\t(result: IResultStore, overrideJWT?: string): void => {\n\t\t\t// when called after waiting for another request to return the new JWT is passed directly because state will not have updated yet\n\t\t\tconst jwt = overrideJWT || referenceJWT.current;\n\n\t\t\t// if there is not valid session or we're disconnecting, don't attempt to log to the server\n\t\t\tif (!jwt || isDisconnecting) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// after storing a hardware test, store the most recent result that occurred while the request was in flight\n\t\t\tconst onRequestComplete = (ignoreQueuedResult: boolean = false, newJWT?: string): void => {\n\t\t\t\trequestInProgress.current = false;\n\t\t\t\tif (queuedResult.current) {\n\t\t\t\t\t// Clear out the previous queued value to ensure we don't end up looping an additional time here\n\t\t\t\t\tconst queuedValue = queuedResult.current;\n\t\t\t\t\tqueuedResult.current = null;\n\t\t\t\t\tif (!ignoreQueuedResult) {\n\t\t\t\t\t\tstoreHardwareTest(queuedValue, newJWT);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\trequestInProgress.current = true;\n\t\t\tif (isVideoCall) {\n\t\t\t\tstoreVideoCallHardwareTestResult(result, jwt)\n\t\t\t\t\t.then((response: IAccessTokenUpdate) => {\n\t\t\t\t\t\tlet ignoreQueuedResult = false;\n\t\t\t\t\t\tif (!response && !refSession.current) {\n\t\t\t\t\t\t\t//If there is a problem with Web PACS Auth, we will get null response\n\t\t\t\t\t\t\tdisconnectRef.current(true);\n\t\t\t\t\t\t\t//Since we are disconnecting, there is no need to process queued result, otherwise it may capture auth attempt failure metric again.\n\t\t\t\t\t\t\tignoreQueuedResult = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst {\n\t\t\t\t\t\t\tjwt: newJWT,\n\t\t\t\t\t\t\texpirationSeconds,\n\t\t\t\t\t\t\thasRefreshToken,\n\t\t\t\t\t\t\tclientConfiguration,\n\t\t\t\t\t\t\tencryptedConfiguration,\n\t\t\t\t\t\t} = response;\n\t\t\t\t\t\tlet expirationInstant = null;\n\t\t\t\t\t\tif (expirationSeconds) {\n\t\t\t\t\t\t\texpirationInstant = Date.now() + secondsToMs(expirationSeconds);\n\t\t\t\t\t\t\tif (!hasRefreshToken) {\n\t\t\t\t\t\t\t\texpirationInstant += hoursToMs(3); //workaround for now to allow 4-hour calls before refresh tokens are enabled\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// indicate that the user can now connect to their room, including update their JWT if we got a new one (only happens when the access token is acquired)\n\t\t\t\t\t\tdispatch(combinedActions.setCanConnect(newJWT ?? \"\"));\n\t\t\t\t\t\t// Web Pacs launches will call get configuration while doing access token exchange after passing the hardware test\n\t\t\t\t\t\tdispatch(combinedActions.setConfiguration(clientConfiguration));\n\t\t\t\t\t\t// update the JWT cookie if we return a new one (only happens when the access token is acquired)\n\t\t\t\t\t\tif (newJWT) {\n\t\t\t\t\t\t\tsetSessionCookies(\n\t\t\t\t\t\t\t\tnewJWT,\n\t\t\t\t\t\t\t\tsessionID,\n\t\t\t\t\t\t\t\texpirationInstant ?? Date.now(),\n\t\t\t\t\t\t\t\thasRefreshToken,\n\t\t\t\t\t\t\t\tencryptedConfiguration,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (!refHasRefreshToken.current && hasRefreshToken) {\n\t\t\t\t\t\t\t\trefHasRefreshToken.current = true;\n\t\t\t\t\t\t\t\tafterRetrieveAccessToken(response, updateAccessToken, sessionID, dispatch);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonRequestComplete(ignoreQueuedResult, newJWT);\n\t\t\t\t\t})\n\t\t\t\t\t.catch(() => {\n\t\t\t\t\t\tlet ignoreQueuedResult = false;\n\t\t\t\t\t\tif (!refSession.current) {\n\t\t\t\t\t\t\t// TODO: Remove disconnection check once we deprecate web pacs.\n\t\t\t\t\t\t\t// We should only disconnect when we get an error as part of Web Pacs Authentication, which happens when storing hardware tests outside of the VideoRoom\n\t\t\t\t\t\t\tdisconnectRef.current(true);\n\t\t\t\t\t\t\t//Since we are disconnecting, there is no need to process queued result, otherwise it may capture auth attempt failure metric again.\n\t\t\t\t\t\t\tignoreQueuedResult = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonRequestComplete(ignoreQueuedResult);\n\t\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tstorePrevisitHardwareTestResult(result, jwt)\n\t\t\t\t\t.then(() => onRequestComplete())\n\t\t\t\t\t.catch(() => {\n\t\t\t\t\t\tdisconnectRef.current(true);\n\t\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t[sessionID, dispatch, isVideoCall, isDisconnecting, updateAccessToken],\n\t);\n\n\t// make the request to store a hardware test if no request is in flight, otherwise save the result to store when the first request completes\n\tconst tryStoreHardwareTest = useCallback(\n\t\t(result: IResultStore): void => {\n\t\t\tif (requestInProgress.current) {\n\t\t\t\tqueuedResult.current = result;\n\t\t\t} else {\n\t\t\t\tstoreHardwareTest(result);\n\t\t\t}\n\t\t},\n\t\t[storeHardwareTest],\n\t);\n\n\tuseEffect(() => {\n\t\t// Do not attempt to log an incomplete hardware test\n\t\tif (!currentHardwareTest) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there is not valid session, don't attempt to log to the server\n\t\tif (!referenceJWT.current) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Wait to log connection results until we can properly update the JWT in cookies\n\t\tif (isVideoCall && !sessionID) {\n\t\t\treturn;\n\t\t}\n\n\t\tdebug(\"Success: \", currentHardwareTest.success);\n\t\tdebug(\"Should log: \", currentHardwareTest.shouldLogToEpic);\n\t\tdebug(\"Microphone Track: \", currentHardwareTest.microphone);\n\t\tdebug(\"Video Track: \", currentHardwareTest.camera);\n\t\tdebug(\"Speaker Track: \", currentHardwareTest.speaker);\n\t\tdebug(\n\t\t\t`Twilio Error - ${currentHardwareTest.errorCode?.toString()} : ${\n\t\t\t\tcurrentHardwareTest.errorMessage\n\t\t\t}`,\n\t\t);\n\t\tdebug(\"User Language: \", currentHardwareTest.userLanguage);\n\t\tdebug(\"\\n\\n\");\n\n\t\t//called this way to pass unit test\n\t\tconst requestBody = exportFunctions.createRequestBody(\n\t\t\tcurrentHardwareTest,\n\t\t\trefSession.current?.connectionStatus === \"connected\",\n\t\t);\n\t\ttryStoreHardwareTest(requestBody);\n\t}, [sessionID, currentHardwareTest, isVideoCall, tryStoreHardwareTest]);\n}\n\n/**\n * Constructs a request data object in the format the server api expects\n */\nfunction createRequestBody(test: IHardwareTestResult, sentFromCall: boolean): IResultStore {\n\treturn { ...test, sentFromCall };\n}\n\n/**\n * This is needed for unit tests to not fail\n * Javascript compilation says createBodyRequest is not called\n * unless it is exported and called this way\n */\nconst exportFunctions = {\n\tcreateRequestBody,\n\tuseStoreHardwareTest,\n};\n\nexport default exportFunctions;\n\n/**\n * Json Body for storing hardware test results\n */\ninterface IResultStore extends IHardwareTestResult {\n\tsentFromCall: boolean;\n}\n\n/**\n * Stores the standalone hardware test to the server\n */\nasync function storePrevisitHardwareTestResult(result: IResultStore, jwt: string): Promise {\n\treturn makeRequest(\"/api/HardwareTest/StoreTestModeResult\", \"POST\", jwt, result);\n}\n\n/**\n * Stores the hardware test result and retrieves an access token.\n */\nasync function storeVideoCallHardwareTestResult(\n\tresult: IResultStore,\n\tjwt: string,\n): Promise {\n\treturn makeRequest(\"/api/HardwareTest/StoreVideoCallResult\", \"POST\", jwt, result);\n}\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file Window size hook\n * @author Matt Panico\n * @module Epic.VideoApp.Hooks.UseWindowSize\n */\nimport { useEffect, useState } from \"react\";\nimport { IDimensions } from \"~/types\";\n\nexport function useWindowSize(): IDimensions {\n\t// store the size\n\tconst [windowSize, setWindowSize] = useState({\n\t\twidth: window.innerWidth,\n\t\theight: window.innerHeight,\n\t});\n\n\t// use an effect\n\tuseEffect(() => {\n\t\t// callback to set the size\n\t\tfunction onResize(): void {\n\t\t\tsetWindowSize({\n\t\t\t\twidth: window.innerWidth,\n\t\t\t\theight: window.innerHeight,\n\t\t\t});\n\t\t}\n\n\t\t// add the listener to the window\n\t\twindow.addEventListener(\"resize\", onResize);\n\t\twindow.addEventListener(\"orientationchange\", onResize);\n\n\t\t// call it once in case the window resized between the initial value and render\n\t\tonResize();\n\n\t\t// return a function to unregister the listener\n\t\treturn () => {\n\t\t\twindow.removeEventListener(\"resize\", onResize);\n\t\t\twindow.removeEventListener(\"orientationchange\", onResize);\n\t\t};\n\t}, []); // only run this once, it'll never change\n\n\treturn windowSize;\n}\n","/**\n * @copyright Copyright 2020-2021 Epic Systems Corporation\n * @file Custom hooks\n * @author Matt Panico\n * @module Epic.VideoApp.Hooks.Index\n */\n\nexport * from \"./auditing\";\nexport * from \"./auth\";\nexport * from \"./trackUtilities\";\nexport * from \"./useActiveSession\";\nexport * from \"./useAutomaticDeviceSelection\";\nexport * from \"./useBucketedParticipants\";\nexport * from \"./useConnectionStatus\";\nexport * from \"./useDevices\";\nexport * from \"./useDisconnect\";\nexport * from \"./useDisconnectHandler\";\nexport * from \"./useDocumentTitle\";\nexport * from \"./useHandleAudioContext\";\nexport * from \"./useHardwareTestActions\";\nexport * from \"./useHardwareTestResult\";\nexport * from \"./useInterval\";\nexport * from \"./useIsStreamBandwidthAffected\";\nexport * from \"./useKeyboardShortcut\";\nexport * from \"./useLocalAudioToggle\";\nexport * from \"./useLocalVideoToggle\";\nexport * from \"./useMediaStreamTrack\";\nexport * from \"./useParticipantNetworkQuality\";\nexport * from \"./usePictureInPicture\";\nexport * from \"./usePublications\";\nexport * from \"./useScreenShareToggle\";\nexport * from \"./useSearchParams\";\nexport * from \"./useSelectedCamera\";\nexport * from \"./useSelectedMic\";\nexport * from \"./useStoreHardwareTest\";\nexport * from \"./useStrings\";\nexport * from \"./useWindowSize\";\n","/**\n * @copyright Copyright 2023 - 2024 Epic Systems Corporation\n * @file the organization's branded background\n * @author Colin Walters\n * @module Epic.VideoApp.Components.Branding.BrandedBackground\n */\n\nimport React, { FC, useCallback, useState } from \"react\";\nimport styles from \"./BrandedBackground.module.scss\";\n\n/**\n * Props for BrandedBackground Component\n */\ninterface IProps {\n\t/** The background image source, retrieved from branding state */\n\tsrc: string | null;\n}\n\nexport enum BrandedBackgroundTestIds {\n\tself = \"BrandedBackground\",\n}\n\n/**\n * The BrandedBackground component\n * @param props The props ;)\n */\nconst BrandedBackground: FC = (props) => {\n\tconst { src } = props;\n\tconst [hideBrandedBackground, setHideBrandedBackground] = useState(false);\n\n\tconst loadFailed = useCallback(() => setHideBrandedBackground(true), []);\n\n\tif (hideBrandedBackground || !src) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t\n\t);\n};\n\nBrandedBackground.displayName = \"BrandedBackground\";\n\nexport default BrandedBackground;\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file Background component\n * @author Matt Panico\n * @module Epic.VideoApp.Components.StandardLayout.Background\n */\n\nimport React, { FC } from \"react\";\nimport { useBrandingState } from \"~/state\";\nimport BrandedBackground from \"../Branding/BrandedBackground\";\nimport styles from \"./Background.module.scss\";\n\n/**\n * The Background component\n */\nconst Background: FC = () => {\n\tconst backgroundImg = useBrandingState((sel) => sel.getBackgroundImage(), []);\n\tconst brandedColors = useBrandingState((sel) => sel.getColors(), []);\n\n\treturn (\n\t\t
\n\t\t\t{backgroundImg || brandedColors?.brandBackground ? (\n\t\t\t\t\n\t\t\t) : (\n\t\t\t\t<>\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\n\t\t\t)}\n\t\t
\n\t);\n};\n\nBackground.displayName = \"Background\";\n\nexport default Background;\n","/**\n * @copyright Copyright 2020-2021 Epic Systems Corporation\n * @file Standard Layout component\n * @author Erv Walter\n * @module Epic.VideoApp.Components.StandardLayout.StandardLayout\n */\n\nimport { Redirect, RouteComponentProps } from \"@reach/router\";\nimport React, { ComponentType, FC, Suspense } from \"react\";\nimport { getEndpointUrl } from \"~/app/routes\";\nimport { useStrings } from \"~/hooks\";\nimport { isSupportedBrowser } from \"~/utils/browser\";\nimport Background from \"./Background\";\n\n/**\n * The props interface ;)\n */\ninterface IProps extends RouteComponentProps {\n\t/**\n\t * The component to be rendered as content\n\t */\n\tcomponent: ComponentType;\n\n\t/**\n\t * Whether or not the component requires WebRTC to function\n\t */\n\trequiresWebRTC?: boolean;\n}\n\n/**\n * A Standard Layout component that wraps a content component with the application's standard UI shell (header, footer, etc)\n * @param props The props ;)\n */\nconst StandardLayout: FC = (props) => {\n\tconst { component: Component, requiresWebRTC, ...routeProps } = props;\n\n\tconst tokenNames = [\"Loading\"];\n\tconst strings = useStrings(\"StandardLayout\", tokenNames);\n\tconst Loading =
{strings[\"Loading\"]}
;\n\n\tif (requiresWebRTC && !isSupportedBrowser()) {\n\t\treturn ;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n};\nStandardLayout.displayName = \"StandardLayout\";\n\nexport default StandardLayout;\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file File not found page component\n * @author Erv Walter\n * @module Epic.VideoApp.Features.NotFound.NotFound\n */\n\nimport { RouteComponentProps } from \"@reach/router\";\nimport React, { FC } from \"react\";\nimport SimpleCard from \"~/components/Cards/SimpleCard\";\nimport CopyrightLinkButton from \"~/components/Copyright/CopyrightLinkButton\";\nimport SimpleHeader from \"~/components/Header/SimpleHeader\";\nimport { useDocumentTitle, useStrings } from \"~/hooks\";\n\n/**\n * File Not Found (404) page component\n * @param _props The props ;)\n */\nconst NotFound: FC = (_props) => {\n\tconst tokenNames = [\"PageNotFound\", \"BodyText\", \"Header\"];\n\tconst strings = useStrings(\"NotFound\", tokenNames);\n\n\tuseDocumentTitle(strings[\"PageNotFound\"]);\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t

{strings[\"Header\"]}

\n\t\t\t\t\t{strings[\"BodyText\"]}\n\t\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t\n\t);\n};\n\nexport default NotFound;\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file Supported Browser model\n * @author Matt Panico\n * @module Epic.VideoApp.Models.Browsers.SupportedBrowsers\n */\nimport { OS } from \"~/utils/os\";\n\nexport interface IBrowserDownload {\n\tname: string;\n\tdownloadURL: string;\n\tsupported: OS[];\n}\n\nconst safari: IBrowserDownload = {\n\tname: \"Apple Safari\",\n\tdownloadURL: \"https://apple.com/safari\",\n\tsupported: [OS.mac, OS.ios],\n};\n\nconst chromeDesktop: IBrowserDownload = {\n\tname: \"Google Chrome\",\n\tdownloadURL: \"https://www.google.com/chrome/\",\n\tsupported: [OS.windows, OS.mac, OS.linux],\n};\n\nconst chromeAndroid: IBrowserDownload = {\n\tname: \"Google Chrome\",\n\tdownloadURL: \"https://play.google.com/store/apps/details?id=com.android.chrome\",\n\tsupported: [OS.android],\n};\n\nconst edgeDesktop: IBrowserDownload = {\n\tname: \"Microsoft Edge\",\n\tdownloadURL: \"https://www.microsoft.com/edge/\",\n\tsupported: [OS.windows, OS.mac],\n};\n\nexport const supportedBrowsers = {\n\tsafari,\n\tchromeDesktop,\n\tchromeAndroid,\n\tedgeDesktop,\n};\n\n/**\n * Get the browsers supported by the current device\n * @param os operating system that is in use\n * @returns list of supported browsers on the current operating system\n */\nexport function getSupportedBrowsers(os?: OS): IBrowserDownload[] {\n\tconst browsers = [safari, chromeDesktop, chromeAndroid, edgeDesktop];\n\n\tif (os === undefined) {\n\t\treturn browsers;\n\t} else {\n\t\treturn browsers.filter((browser) => browser.supported.includes(os));\n\t}\n}\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file browser link component\n * @author Colin Walters\n * @module Epic.VideoApp.Components.BrowserList.BrowserLink\n */\n\nimport React, { FC, memo } from \"react\";\nimport { IBrowserDownload, supportedBrowsers } from \"~/models/browsers/supportedBrowsers\";\nimport styles from \"./BrowserList.module.scss\";\nimport chromeLogo from \"./chrome.svg\";\nimport edgeLogo from \"./edge.svg\";\nimport safariLogo from \"./safari.svg\";\n\n/**\n * Props for BrowserLink Component\n */\ninterface IProps {\n\tbrowser: IBrowserDownload;\n}\n\n/**\n * The BrowserLink component\n * @param props The props ;)\n */\nconst BrowserLink: FC = memo((props) => {\n\tconst { browser } = props;\n\tconst { name, downloadURL } = browser;\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t{name}\n\t\t\n\t);\n});\n\n/**\n * Get a browser's icon\n */\nfunction getBrowserIcon(browser: IBrowserDownload): string | undefined {\n\tswitch (browser) {\n\t\tcase supportedBrowsers.safari:\n\t\t\treturn safariLogo;\n\t\tcase supportedBrowsers.chromeAndroid:\n\t\tcase supportedBrowsers.chromeDesktop:\n\t\t\treturn chromeLogo;\n\t\tcase supportedBrowsers.edgeDesktop:\n\t\t\treturn edgeLogo;\n\t\tdefault:\n\t\t\treturn undefined;\n\t}\n}\n\nBrowserLink.displayName = \"BrowserLink\";\n\nexport default BrowserLink;\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file Supported Browser List Component\n * @author Matt Panico\n * @module Epic.VideoApp.Components.BrowserList.BrowserList\n */\n\nimport React, { FC } from \"react\";\nimport { getSupportedBrowsers } from \"~/models/browsers/supportedBrowsers\";\nimport { detectOS } from \"../../utils/os\";\nimport BrowserLink from \"./BrowserLink\";\nimport styles from \"./BrowserList.module.scss\";\n\n/**\n * The BrowserList component\n */\nconst BrowserList: FC = () => {\n\tconst browsers = getSupportedBrowsers(detectOS());\n\n\treturn (\n\t\t
\n\t\t\t{browsers.map((browser, index) => (\n\t\t\t\t\n\t\t\t))}\n\t\t
\n\t);\n};\n\nBrowserList.displayName = \"BrowserList\";\n\nexport default BrowserList;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file List with header utility\n * @author Spencer Eanes\n * @module Epic.VideoApp.Components.Utilities.ListWithDescription\n */\n\nimport React, { FC } from \"react\";\nimport styles from \"./ListWithDescription.module.scss\";\n\nexport enum ListWithDescriptionTestIds {\n\tbodyText = \"ListWithDescriptionBodyText\",\n\tsteps = \"ListWithDescriptionSteps\",\n\titem = \"ListWithDescriptionItem\",\n}\n\ninterface IProps {\n\tbodyText: string;\n\tlistItems: string[];\n}\n\n/**\n * ListWithDescription component\n * @param props The props\n *\n * Renders body text, followed by a numbered list of strings\n */\nconst ListWithDescription: FC = (props) => {\n\tconst { bodyText, listItems } = props;\n\n\treturn (\n\t\t<>\n\t\t\t

\n\t\t\t\t{bodyText}\n\t\t\t

\n\t\t\t
    \n\t\t\t\t{listItems.map((itemText, index) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t
  1. \n\t\t\t\t\t\t\t{itemText}\n\t\t\t\t\t\t
  2. \n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t
\n\t\t\n\t);\n};\n\nListWithDescription.displayName = \"ListWithDescription\";\n\nexport default ListWithDescription;\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file The Browser Compatibility Error page\n * @author Matt Panico\n * @module Epic.VideoApp.Features.BrowserCompatibilityError.BrowserCompatibilityError\n */\n\nimport { RouteComponentProps } from \"@reach/router\";\nimport React, { FC } from \"react\";\nimport BrowserList from \"~/components/BrowserList/BrowserList\";\nimport edgeLogo from \"~/components/BrowserList/edge.svg\";\nimport safariLogo from \"~/components/BrowserList/safari.svg\";\nimport SimpleCard from \"~/components/Cards/SimpleCard\";\nimport SimpleHeader from \"~/components/Header/SimpleHeader\";\nimport ListWithDescription from \"~/components/Utilities/ListWithDescription\";\nimport { useCaseInsensitiveSearchParam, useDocumentTitle, useStrings } from \"~/hooks\";\nimport { isLegacyEdge } from \"~/utils/browser\";\nimport { detectOS, OS } from \"~/utils/os\";\n\nconst IOSErrorMessage: FC = () => {\n\tconst strings = useStrings(\"BrowserCompatibilityError\", Object.values(IOSTokenNames));\n\tconst steps = [\n\t\tstrings[IOSTokenNames.iOSChangeDefaultStep1],\n\t\tstrings[IOSTokenNames.iOSChangeDefaultStep2],\n\t\tstrings[IOSTokenNames.iOSChangeDefaultStep3],\n\t];\n\n\treturn (\n\t\t<>\n\t\t\t{strings[IOSTokenNames.safariLogo]}\n\t\t\t\n\t\t\n\t);\n};\n\nenum IOSTokenNames {\n\tiOSError = \"IOSError\",\n\tsafariLogo = \"SafariLogo\",\n\tiOSChangeDefaultStep1 = \"IOSChangeDefaultStep1\",\n\tiOSChangeDefaultStep2 = \"IOSChangeDefaultStep2\",\n\tiOSChangeDefaultStep3 = \"IOSChangeDefaultStep3\",\n}\n\nconst LegacyEdgeErrorMessage: FC = () => {\n\tconst tokenNames = [\"LegacyError\", \"EdgeLogo\"];\n\tconst strings = useStrings(\"BrowserCompatibilityError\", tokenNames);\n\n\treturn (\n\t\t<>\n\t\t\t{strings[\"EdgeLogo\"]}\n\t\t\t

{strings[\"LegacyError\"]}

\n\t\t\n\t);\n};\n\n/**\n * The BrowserCompatibilityError component\n * @param _props The props ;)\n */\nconst BrowserCompatibilityError: FC = (_props) => {\n\tconst tokenNames = [\n\t\t\"BrowserDoesNotSupportVideo\",\n\t\t\"BrowserNotSupported\",\n\t\t\"BrowserNotRecommended\",\n\t\t\"UseSupportedBrowser\",\n\t\t\"ThisBrowserNotRecommended\",\n\t];\n\tconst strings = useStrings(\"BrowserCompatibilityError\", tokenNames);\n\n\t// query string set when launching from the link in BrowserSupportWarning\n\t// in this case the browser is supported, but not recommended, so modify the strings\n\tconst recommended = useCaseInsensitiveSearchParam(\"e\") ?? \"\";\n\tuseDocumentTitle(!recommended ? strings[\"BrowserNotSupported\"] : strings[\"BrowserNotRecommended\"]);\n\n\tlet browserList: JSX.Element;\n\tconst headerText = !recommended\n\t\t? strings[\"BrowserDoesNotSupportVideo\"]\n\t\t: strings[\"ThisBrowserNotRecommended\"];\n\n\tif (detectOS() === OS.ios) {\n\t\tbrowserList = ;\n\t} else if (isLegacyEdge()) {\n\t\tbrowserList = ;\n\t} else {\n\t\tbrowserList = (\n\t\t\t<>\n\t\t\t\t

{strings[\"UseSupportedBrowser\"]}

\n\t\t\t\t\n\t\t\t\n\t\t);\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t

{headerText}

\n\t\t\t\t\t{browserList}\n\t\t\t\t
\n\t\t\t
\n\t\t\n\t);\n};\n\nBrowserCompatibilityError.displayName = \"BrowserCompatibilityError\";\n\nexport default BrowserCompatibilityError;\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file Routes for the Browser Compatibility Error\n * @author Matt Panico\n * @module Epic.VideoApp.Features.BrowserCompatibilityError.BrowserCompatibilityError\n */\n\nimport { IAddRouteFunction } from \"~/app/routes\";\nimport BrowserCompatibilityError from \"./BrowserCompatibilityError\";\n\n/*\n *\n * IMPORTANT! READ THIS!\n *\n * The contents of this file are loaded and executed during the initial load of the application\n * in the browser even if the route is never actually accessed. DO NOT put any additional code\n * in this file, or import any addition modules as doing so would just add extra bloat to the\n * initial load / startup time for the application.\n *\n * IMPORTANT! READ THIS!\n *\n */\n\n/**\n * Return the URL used to access this page\n */\nexport function getBrowserCompatibilityErrorUrl(): string {\n\treturn \"/BrowserCompatibilityError\";\n}\n\n/**\n * Register the routes associated with this page\n *\n * @param addRoute A function used to add a route\n */\nexport default function register(addRoute: IAddRouteFunction): void {\n\taddRoute(getBrowserCompatibilityErrorUrl(), BrowserCompatibilityError);\n}\n","/**\n * @copyright Copyright 2022 Epic Systems Corporation\n * @file Happy Smiley, used for feedback surveys\n * @author Max Harkins\n * @module Epic.VideoApp.Icons.HappySmiley\n */\n\nimport React, { FC, memo } from \"react\";\nimport { IconProps } from \".\";\n\n/**\n * The Happy Smiley component\n * @param props The props ;)\n */\nconst HappySmiley: FC = memo((props) => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t);\n});\n\nHappySmiley.displayName = \"HappySmiley\";\n\nexport default HappySmiley;\n","/**\n * @copyright Copyright 2022 Epic Systems Corporation\n * @file Sad Smiley, used for feedback surveys\n * @author Max Harkins\n * @module Epic.VideoApp.Icons.SadSmiley\n */\n\nimport React, { FC, memo } from \"react\";\nimport { IconProps } from \".\";\n\n/**\n * The Sad Smiley component\n * @param props The props ;)\n */\nconst SadSmiley: FC = memo((props) => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t);\n});\n\nSadSmiley.displayName = \"SadSmiley\";\n\nexport default SadSmiley;\n","/**\n * @copyright Copyright 2023 Epic Systems Corporation\n * @file Button component with card styling\n * @author Hanita Haller\n * @module Epic.VideoApp.Components.Utilities.CardButton\n */\n\nimport React, { FC } from \"react\";\nimport { resolveClassName } from \"~/utils/className\";\nimport { noOp } from \"~/utils/general\";\nimport styles from \"./CardButton.module.scss\";\n\n/**\n * Props for CardButton Component\n */\ninterface IProps {\n\t/** Function to be called when the card button is clicked */\n\tonClick: () => void;\n\t/** The tone of the button */\n\ttone: \"positive\" | \"neutral\" | \"negative\";\n\n\tactive?: boolean;\n}\n\nexport enum CardButtonTestIds {\n\tself = \"CardButton\",\n\tchildren = \"CardButtonChildren\",\n}\n\n/**\n * The CardButton component\n *\n * @param props The props :D\n */\nconst CardButton: FC = (props) => {\n\tconst { onClick, tone, active = false, children } = props;\n\n\tconst classNames: Record = {\n\t\tcardButton: true,\n\t\tactive,\n\t\t[tone]: true,\n\t};\n\tconst buttonClassName = resolveClassName(styles, classNames);\n\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t{children}\n\t\t\t
\n\t\t\n\t);\n};\n\nCardButton.displayName = \"CardButton\";\n\nexport default CardButton;\n","/**\n * @copyright Copyright 2022 Epic Systems Corporation\n * @file Handle showing a popup on timeout for feedback surveys\n * @author Max Harkins\n * @module Epic.VideoApp.Components.FeedbackSurvey.Hooks.UseFeedbackTimeoutWarning\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster/dist/use-dispatch\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { useStrings } from \"~/hooks\";\nimport { alertActions, combinedActions } from \"~/state\";\nimport { feedbackSurveyActions, useFeedbackSurveyState } from \"~/state/feedbackSurvey\";\nimport { AlertType, FeedbackSurveyPopupTimeMs, IGenericCountdownAlert } from \"~/types\";\n\nenum TokenNames {\n\ttimeoutWarningMessage = \"TimeoutWarningMessage\",\n}\n\n/**\n * Handle feedback survey timeout warning\n */\nexport function useFeedbackTimeoutWarning(onTimeout?: () => void): void {\n\tconst hasShown = useFeedbackSurveyState((selectors) => selectors.getHasShownTimeoutWarning(), []);\n\tconst endSurveyTimestamp = useFeedbackSurveyState(\n\t\t(selectors) => selectors.getSurveyTimeoutTimestamp(),\n\t\t[],\n\t);\n\tconst dispatch = useDispatch();\n\tconst [endFeedbackTimeout, setEndFeedbackTimeout] = useState();\n\tconst [warningTimeout, setWarningTimeout] = useState();\n\tconst strings = useStrings(\"useFeedbackTimeoutWarning\", [TokenNames.timeoutWarningMessage]);\n\n\tconst onTimeoutRef = useRef(onTimeout);\n\tconst dispatchRef = useRef(dispatch);\n\tconst stringsRef = useRef(strings);\n\tconst hasShownRef = useRef(hasShown);\n\tconst endFeedbackTimeoutRef = useRef(endFeedbackTimeout);\n\tconst warningTimeoutRef = useRef(warningTimeout);\n\tconst hasCreatedTimersRef = useRef(false);\n\tuseEffect(() => {\n\t\tonTimeoutRef.current = onTimeout;\n\t\tdispatchRef.current = dispatch;\n\t\tstringsRef.current = strings;\n\t\thasShownRef.current = hasShown;\n\t\tendFeedbackTimeoutRef.current = endFeedbackTimeout;\n\t\twarningTimeoutRef.current = warningTimeout;\n\t}, [onTimeout, dispatch, strings, hasShown, endFeedbackTimeout, warningTimeout]);\n\n\t// Clean up timer before leaving the component\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tif (endFeedbackTimeout) {\n\t\t\t\tclearTimeout(endFeedbackTimeout);\n\t\t\t}\n\t\t};\n\t}, [endFeedbackTimeout]);\n\n\tuseEffect(() => {\n\t\tconst now = Date.now();\n\t\tif (endSurveyTimestamp && now < endSurveyTimestamp && !hasCreatedTimersRef.current) {\n\t\t\thasCreatedTimersRef.current = true;\n\t\t\t// Set up warning pop-up timeout if we haven't shown the popup yet\n\t\t\tif (!hasShownRef.current) {\n\t\t\t\tconst warning = window.setTimeout(() => {\n\t\t\t\t\t// Build the warning pop-up, and use a separate timeout to handle cleanup after the warning ends.\n\t\t\t\t\tconst WarningAlert: IGenericCountdownAlert = {\n\t\t\t\t\t\tmessage: stringsRef.current[TokenNames.timeoutWarningMessage],\n\t\t\t\t\t\tcountdown: FeedbackSurveyPopupTimeMs,\n\t\t\t\t\t\ttype: AlertType.genericCountdown,\n\t\t\t\t\t};\n\t\t\t\t\tdispatchRef.current(feedbackSurveyActions.setHasShownTimeoutWarning(true));\n\t\t\t\t\tdispatchRef.current(alertActions.postGenericCountdownAlert(WarningAlert));\n\t\t\t\t}, endSurveyTimestamp - now - FeedbackSurveyPopupTimeMs);\n\t\t\t\tsetWarningTimeout(warning);\n\t\t\t}\n\n\t\t\t// End survey timeout\n\t\t\tconst end = window.setTimeout(() => {\n\t\t\t\tif (onTimeoutRef.current) {\n\t\t\t\t\tonTimeoutRef.current();\n\t\t\t\t}\n\t\t\t\tdispatchRef.current(combinedActions.clearSurveyState(false));\n\t\t\t\tdispatchRef.current(alertActions.clearAlert()); // Clear the warning alert if present\n\t\t\t}, endSurveyTimestamp - now);\n\t\t\tsetEndFeedbackTimeout(end);\n\t\t}\n\n\t\treturn () => {\n\t\t\tif (endFeedbackTimeoutRef.current) {\n\t\t\t\tclearTimeout(endFeedbackTimeoutRef.current);\n\t\t\t}\n\t\t\tif (warningTimeoutRef.current) {\n\t\t\t\tclearTimeout(warningTimeoutRef.current);\n\t\t\t}\n\t\t};\n\t}, [endSurveyTimestamp]);\n}\n","/**\n * @copyright Copyright 2022 Epic Systems Corporation\n * @file hook to store initial reaction response\n * @author Max Harkins\n * @module Epic.VideoApp.Components.FeedbackSurvey.Hooks.UseSaveUserReaction\n */\n\nimport { useCallback } from \"react\";\nimport { useDispatch } from \"~/../node_modules/@epic/react-redux-booster/dist/use-dispatch.js\";\nimport { feedbackSurveyActions, useFeedbackSurveyState } from \"~/state/feedbackSurvey\";\nimport { IAccessTokenUpdate } from \"~/types\";\nimport { FeedbackReaction } from \"~/types/survey\";\nimport { warn } from \"~/utils/logging\";\nimport { makeRequest } from \"~/utils/request\";\n\n/**\n * Saves the user's initial feedback reaction (either positive or negative) to the server. Server takes different\n * action if the reaction is from a workflow that's optional for a user, e.g. the provider button to optionally submit\n * feedback if the frequency check is failed.\n *\n * The callback is asynchronous and finishes once the web service finishes.\n */\nexport function useSaveUserReaction(): (\n\treaction: FeedbackReaction,\n\tisOptionalQuestion: boolean,\n) => Promise {\n\tconst JWT = useFeedbackSurveyState((selectors) => selectors.getFeedbackJWT(), []);\n\tconst dispatch = useDispatch();\n\n\tconst saveReaction = useCallback(\n\t\tasync (reaction: FeedbackReaction, isOptionalQuestion: boolean) => {\n\t\t\tif (!JWT) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst result = await storeSurveyReaction(reaction, JWT, isOptionalQuestion);\n\n\t\t\t\tconst { jwt: newJWT } = result;\n\t\t\t\tif (newJWT) {\n\t\t\t\t\tdispatch(feedbackSurveyActions.setFeedbackJWT(newJWT));\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\twarn(\"Could not save feedback reaction\", error);\n\t\t\t}\n\t\t},\n\t\t[JWT, dispatch],\n\t);\n\n\treturn saveReaction;\n}\n/**\n * Stores back to the server that the user reacted positively or negatively to the survey (by clicking the happy or sad face).\n * This is stored in the database and used for metrics and reporting\n * @param reaction Whether the user reacted positively or negatively to the survey (which face icon they clicked)\n * @param jwt Used to authenticate the request, must be valid in order for the web server to process the request\n * @param isOptionalQuestion Whether the reaction is coming from an optional question that not all users may see, or from the default user survey\n * @returns A void promise that resolves when the request is complete\n */\nexport async function storeSurveyReaction(\n\treaction: FeedbackReaction,\n\tjwt: string,\n\tisOptionalQuestion: boolean,\n): Promise {\n\treturn makeRequest(\"/api/FeedbackSurvey/StoreSurveyReaction\", \"POST\", jwt, {\n\t\treaction: reaction,\n\t\tfromOptionalWorkflow: isOptionalQuestion,\n\t});\n}\n","/**\n * @copyright Copyright 2022-2023 Epic Systems Corporation\n * @file Initial feedback question showing happy/sad faces\n * @author Max Harkins\n * @module Epic.VideoApp.Components.FeedbackSurvey.FeedbackIntroQuestion\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback } from \"react\";\nimport { useStrings } from \"~/hooks\";\nimport HappySmiley from \"~/icons/happySmiley\";\nimport SadSmiley from \"~/icons/sadSmiley\";\nimport { combinedActions } from \"~/state\";\nimport { feedbackSurveyActions } from \"~/state/feedbackSurvey\";\nimport { FeedbackPageStep, FeedbackReaction } from \"~/types/survey\";\nimport CardButton from \"../Utilities/CardButton\";\nimport styles from \"./FeedbackIntroQuestion.module.scss\";\nimport { useFeedbackTimeoutWarning } from \"./hooks/useFeedbackTimeoutWarning\";\nimport { useSaveUserReaction } from \"./hooks/useSaveUserReaction\";\n\nenum TokenNames {\n\tpositiveLabel = \"PositiveLabel\",\n\tnegativeLabel = \"NegativeLabel\",\n\tfeedbackLinkText = \"FeedbackLinkText\",\n}\n\n/**\n * The QuestionGroup component\n */\nconst FeedbackIntroQuestion: FC = () => {\n\tconst iconSize = 75;\n\n\t// Handle clearing survey state when survey times out\n\tuseFeedbackTimeoutWarning();\n\n\tconst dispatch = useDispatch();\n\tconst saveReaction = useSaveUserReaction();\n\tconst strings = useStrings(\"IntroQuestion\", Object.values(TokenNames));\n\n\tconst positiveButtonAction = useCallback(() => {\n\t\tvoid saveReaction(FeedbackReaction.positive, false);\n\t\tdispatch(combinedActions.clearSurveyState(true));\n\t}, [dispatch, saveReaction]);\n\n\tconst negativeButtonAction = useCallback(() => {\n\t\tvoid saveReaction(FeedbackReaction.negative, false);\n\t\tdispatch(feedbackSurveyActions.setFeedbackStep(FeedbackPageStep.survey));\n\t}, [dispatch, saveReaction]);\n\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\t
{strings[TokenNames.positiveLabel]}
\n\t\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\t
{strings[TokenNames.negativeLabel]}
\n\t\t\t
\n\t\t
\n\t);\n};\n\nFeedbackIntroQuestion.displayName = \"FeedbackIntroQuestion\";\n\nexport default FeedbackIntroQuestion;\n","/**\n * @copyright Copyright 2022-2023 Epic Systems Corporation\n * @file Initial feedback question showing happy/sad faces\n * @author Max Harkins\n * @module Epic.VideoApp.Components.FeedbackSurvey.OptionalFeedbackButton\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster/dist/use-dispatch\";\nimport React, { FC, useCallback } from \"react\";\nimport { useStrings } from \"~/hooks\";\nimport { feedbackSurveyActions } from \"~/state/feedbackSurvey\";\nimport { FeedbackPageStep, FeedbackReaction } from \"~/types/survey\";\nimport ActionButton from \"../Utilities/ActionButton\";\nimport { useFeedbackTimeoutWarning } from \"./hooks/useFeedbackTimeoutWarning\";\nimport { useSaveUserReaction } from \"./hooks/useSaveUserReaction\";\n\nimport styles from \"./OptionalFeedbackButton.module.scss\";\n\nenum TokenNames {\n\tfeedbackLinkText = \"FeedbackLinkText\",\n}\n\nexport enum OptionalFeedbackButtonTestIds {\n\tself = \"OptionalFeedbackButton\",\n}\n\n/**\n * A button styled to be optional that lets users submit feedback if they want\n */\nconst OptionalFeedbackButton: FC = () => {\n\t// Handle timing out when the survey expires\n\tuseFeedbackTimeoutWarning();\n\tconst saveReaction = useSaveUserReaction();\n\n\tconst strings = useStrings(\"IntroQuestion\", Object.values(TokenNames));\n\tconst dispatch = useDispatch();\n\n\tconst feedbackLinkAction = useCallback(() => {\n\t\tdispatch(feedbackSurveyActions.setFeedbackStep(FeedbackPageStep.survey));\n\t\tvoid saveReaction(FeedbackReaction.negative, true);\n\t}, [dispatch, saveReaction]);\n\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t\t{strings[TokenNames.feedbackLinkText]}\n\t\t\t\n\t\t
\n\t);\n};\n\nOptionalFeedbackButton.displayName = \"OptionalFeedbackButton\";\n\nexport default OptionalFeedbackButton;\n","/**\n * @copyright Copyright 2022 Epic Systems Corporation\n * @file hook to check for a list of required user permissions\n * @author Max Harkins\n * @module Epic.VideoApp.Hooks.UseCheckUserPermissions\n */\n\nimport { useCallback } from \"react\";\nimport { useUserState } from \"~/state\";\nimport { IUserPermissions } from \"~/types\";\n\nexport interface ICheckUserPermissions {\n\t(permissions: (keyof IUserPermissions)[]): boolean;\n}\n\n/**\n * Checks whether the user has all supplied permissions.\n * @param permissions A string array of the permissions to check for\n * @returns True if the user has all permissions, false otherwise\n */\nexport function useCheckUserPermissions(): ICheckUserPermissions {\n\tconst userPermissions = useUserState((selectors) => selectors.getAllUserPermissions(), []);\n\n\tconst checkUserPermissions = useCallback(\n\t\t(permissions: (keyof IUserPermissions)[]) => {\n\t\t\tfor (const permission of permissions) {\n\t\t\t\tif (!userPermissions[permission]) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\t[userPermissions],\n\t);\n\treturn checkUserPermissions;\n}\n","import React, { FC } from \"react\";\nimport { useWindowSize } from \"~/hooks\";\nimport Camera from \"~/icons/camera\";\nimport Gear from \"~/icons/gear\";\nimport Speaker from \"~/icons/speaker\";\nimport { ScreenWidthInflectionPoint } from \"~/types\"; // Identical to $screen-width-inflection constant from _dimensions.scss\n\n/**\n * Props for QuestionIcon Component\n */\ninterface IProps {\n\ticonName: string;\n\tshrinkMobileIcons?: boolean;\n}\n\n/**\n * The QuestionIcon component\n * @param _props The props ;)\n */\nconst QuestionIcon: FC = (props) => {\n\tconst { iconName, shrinkMobileIcons = false } = props;\n\tconst windowSize = useWindowSize();\n\n\tconst mobile = windowSize.width < ScreenWidthInflectionPoint;\n\n\tconst size = shrinkMobileIcons && mobile ? 32 : 70;\n\n\tswitch (iconName) {\n\t\tcase \"speaker\":\n\t\t\treturn ;\n\t\tcase \"camera\":\n\t\t\treturn ;\n\t\tcase \"gear\":\n\t\t\treturn ;\n\t\tdefault:\n\t\t\treturn null;\n\t}\n};\n\nQuestionIcon.displayName = \"QuestionIcon\";\n\nexport default QuestionIcon;\n","/**\n * @copyright Copyright 2022 Epic Systems Corporation\n * @file Component holding a feedback survey question\n * @author Max Harkins\n * @module Epic.VideoApp.Components.Utilities.Survey.Question\n */\n\nimport React, { FC, useCallback } from \"react\";\nimport { IQuestion } from \"../../../types/survey\";\nimport SelectionChoice from \"../SelectionChoice\";\nimport QuestionIcon from \"./QuestionIcon\";\n\n/**\n * Props for Question Component\n */\ninterface IProps {\n\t/** Question object -- this stores information about the question that gets rendered */\n\tquestion: IQuestion;\n\t/** Callback to handle an input change from the question */\n\thandleInputChange: (question: IQuestion) => void;\n\t/** Indicates if the question checkbox is checked */\n\tisChecked: boolean;\n\t/** Displayable name string for the question */\n\tname: string;\n}\n\n/**\n * The Question component\n * @param _props The props ;)\n */\nconst Question: FC = (props) => {\n\tconst { question, isChecked, handleInputChange, name } = props;\n\n\tconst onInputChange = useCallback(() => {\n\t\thandleInputChange(question);\n\t}, [handleInputChange, question]);\n\n\treturn (\n\t\t : undefined}\n\t\t\twide={!question.iconName}\n\t\t/>\n\t);\n};\n\nQuestion.displayName = \"Question\";\n\nexport default React.memo(Question);\n","/**\n * @copyright Copyright 2022-2024 Epic Systems Corporation\n * @file Component holding a group of related questions\n * @author Max Harkins\n * @module Epic.VideoApp.Components.Utilities.Survey.QuestionGroup\n */\n\nimport React, { FC } from \"react\";\nimport { IQuestion, IQuestionGroup, ISurveyResponses } from \"../../../types/survey\";\nimport Question from \"./Question\";\nimport styles from \"./QuestionGroup.module.scss\";\nimport QuestionIcon from \"./QuestionIcon\";\n\n/**\n * Props for QuestionGroup Component\n */\ninterface IProps {\n\t/** Question group containing question objects and info which should be shown */\n\tgroup: IQuestionGroup;\n\t/** Callback for questions, to be called when a question input changes */\n\thandleInputChange: (question: IQuestion) => void;\n\t/** Raw class name to be used for styling */\n\tclassName: string;\n\t/** Answers to questions that are currently visible */\n\tcurrentlySelected: ISurveyResponses;\n\t/** Strings to use for question and group names */\n\tstrings: Record;\n}\n\nexport enum QuestionGroupTestIds {\n\tself = \"QuestionGroup\",\n}\n\n/**\n * The QuestionGroup component\n * @param _props The props ;)\n */\nconst QuestionGroup: FC = (props) => {\n\tconst { className, group, handleInputChange, currentlySelected, strings } = props;\n\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t\t

\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t
{strings[group.name]}
\n\t\t\t\t\t
\n\t\t\t\t

\n\t\t\t
\n\t\t\t
    \n\t\t\t\t{group.subQuestions.map((question) => (\n\t\t\t\t\t
  • \n\t\t\t\t\t\t\n\t\t\t\t\t
  • \n\t\t\t\t))}\n\t\t\t
\n\t\t
\n\t);\n};\n\nQuestionGroup.displayName = \"QuestionGroup\";\n\nexport default React.memo(QuestionGroup);\n","/**\n * @copyright Copyright 2022-2023 Epic Systems Corporation\n * @file hook to load strings for a survey\n * @author Max Harkins\n * @module Epic.VideoApp.Components.Utilities.Survey.Hooks.UseSurveyStrings\n */\n\nimport { useMemo } from \"react\";\nimport { useStrings } from \"~/hooks\";\nimport { IQuestion, IQuestionGroup, isQuestionGroup } from \"~/types/survey\";\n\n/**\n * Get strings for survey questions\n */\nexport function useSurveyStrings(questionsOrGroups: (IQuestion | IQuestionGroup)[]): Record {\n\t// Retrieve token names\n\tconst tokenNames = useMemo(() => {\n\t\tconst tokenNames: string[] = [];\n\t\tquestionsOrGroups.forEach((questionOrGroup) => {\n\t\t\tif (isQuestionGroup(questionOrGroup)) {\n\t\t\t\tquestionOrGroup.subQuestions.forEach((question: IQuestion) => {\n\t\t\t\t\ttokenNames.push(question.name);\n\t\t\t\t});\n\t\t\t}\n\t\t\ttokenNames.push(questionOrGroup.name);\n\t\t});\n\t\treturn tokenNames;\n\t}, [questionsOrGroups]);\n\n\t//fetch strings for questions/question groups\n\treturn useStrings(\"Survey\", tokenNames);\n}\n","/**\n * @copyright Copyright 2022-2023 Epic Systems Corporation\n * @file Component to hold questions for surveys\n * @author Max Harkins\n * @module Epic.VideoApp.Components.Utilities.Survey.QuestionsPage\n */\n\nimport React, { FC } from \"react\";\nimport { IQuestion, IQuestionGroup, isQuestionGroup, ISurveyResponses } from \"~/types/survey\";\nimport QuestionGroup from \"../Survey/QuestionGroup\";\nimport { useSurveyStrings } from \"./hooks/useSurveyStrings\";\nimport Question from \"./Question\";\nimport styles from \"./QuestionsPage.module.scss\";\n\n/**\n * Props for QuestionsPage Component\n */\ninterface IProps {\n\tquestions: (IQuestion | IQuestionGroup)[];\n\tcurrentlySelected: ISurveyResponses;\n\tpreviouslySelected: ISurveyResponses;\n\thandleChange: (question: IQuestion) => void;\n}\n\n/**\n * The QuestionsPage component\n */\nconst QuestionsPage: FC = (props) => {\n\tconst { questions, currentlySelected, previouslySelected, handleChange } = props;\n\tconst strings = useSurveyStrings(questions);\n\n\treturn (\n\t\t
    \n\t\t\t{questions.map((questionOrGroup) =>\n\t\t\t\tisQuestionGroup(questionOrGroup) ? (\n\t\t\t\t\t!questionOrGroup.dependsOnQuestion ||\n\t\t\t\t\tpreviouslySelected[questionOrGroup.dependsOnQuestion] ? (\n\t\t\t\t\t\t
  • \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
  • \n\t\t\t\t\t) : null\n\t\t\t\t) : (\n\t\t\t\t\t
  • \n\t\t\t\t\t\t\n\t\t\t\t\t
  • \n\t\t\t\t),\n\t\t\t)}\n\t\t
\n\t);\n};\n\nQuestionsPage.displayName = \"QuestionsPage\";\n\nexport default QuestionsPage;\n","/**\n * @copyright Copyright 2022-2023 Epic Systems Corporation\n * @file Component to hold questions for surveys\n * @author Max Harkins\n * @module Epic.VideoApp.Components.FeedbackSurvey.SurveyWorkflow\n */\n\nimport React, { FC, useCallback, useState } from \"react\";\nimport { ICheckUserPermissions, useCheckUserPermissions } from \"~/hooks/useCheckUserPermissions\";\nimport { useLeavePageHandler } from \"~/hooks/useLeavePageHandler\";\nimport { IUserPermissions } from \"~/types\";\nimport {\n\tIQuestion,\n\tIQuestionGroup,\n\tISaveSurvey,\n\tISurvey,\n\tISurveyResponses,\n\tisQuestionGroup,\n} from \"~/types/survey\";\nimport { useIsScreenShareSupported } from \"~/web-core/hooks/useIsScreenShareSupported\";\nimport { useStrings } from \"../../hooks\";\nimport ActionButton from \"../Utilities/ActionButton\";\nimport QuestionsPage from \"../Utilities/Survey/QuestionsPage\";\nimport styles from \"./SurveyWorkflow.module.scss\";\nimport { useFeedbackTimeoutWarning } from \"./hooks/useFeedbackTimeoutWarning\";\n\nenum TokenNames {\n\tsubmit = \"Submit\",\n\texit = \"Exit\",\n\tnext = \"Next\",\n\tback = \"Back\",\n\tleaveSurveyWarning = \"LeaveSurveyWarning\",\n}\n\n/**\n * Props for SurveyWorkflow Component\n */\ninterface IProps {\n\t/** Survey data model to be displayed */\n\tsurvey: ISurvey;\n\t/** Callback for when users abandon the survey partway through. The survey responses up until that point are saved before calling onExit */\n\tonExit: () => void;\n\t/** Callback for when user successfully completes the survey. This is called after saving the survey responses. */\n\tonEnd: () => void;\n\t/** Callback to save off responses once users complete each page */\n\tsaveResponses: ISaveSurvey;\n\t/** Callback to set the focus as needed when page numbers change */\n\tsetFocusOnPageChange: () => void;\n}\n/**\n * Builds the initial survey responses for a page. This can include responses that were previously answered, e.g. when navigating backwards\n * the initial responses shown on a page may come from responses the user submitted earlier.\n * @param survey The survey structure that we're showing. This defines all the pages of the survey and questions on each page.\n * @param pageNumber The page number to calculate the survey responses for\n * @param previousResponses The responses that were answered so far in the survey. This is necessary to determine whether to show question groups\n * based on branching behavior.\n * @param possibleResponses This is a map of responses that may be appropriate to show on this page. E.g. if a user is navigating backwards, the possible responses\n * will be all the previous responses the user has submitted. Moving forward through the survey, the possible responses are all the 'future' responses that have been\n * submitted for subsequent pages in the survey (this can happen if the user navigates forward, then backward, then forward).\n * @returns A tuple of survey response objects for the current page.\n * This has two data structure:\n * - `pageResponses` contains a map of survey question IDs and response values for all questions that should be displayed on the page.\n * - `excludedResponses` contains the leftover questions from `possibleResponses`. This represents questions that may be shown on the page in some situations, but\n * should not be shown in the current state (e.g. questions that depend on answers from the previous page in order to be shown), or this could be responses from\n * another page that could not be applied to the current page.\n */\nfunction buildResponsesForPage(\n\tsurvey: ISurvey,\n\tpageNumber: number = 0,\n\tpreviousResponses: ISurveyResponses = {},\n\tpossibleResponses: ISurveyResponses = {},\n): { pageResponses: ISurveyResponses; excludedResponses: ISurveyResponses } {\n\tconst includedResponses: ISurveyResponses = {};\n\tconst excludedResponses: ISurveyResponses = {};\n\tconst questionsOnPage = getQuestionsForPage(survey, pageNumber, previousResponses);\n\n\tquestionsOnPage.forEach((questionId) => {\n\t\tincludedResponses[questionId] = possibleResponses[questionId] ?? false;\n\t});\n\n\tObject.keys(possibleResponses).forEach((questionId: string) => {\n\t\tif (includedResponses[questionId] === undefined) {\n\t\t\texcludedResponses[questionId] = possibleResponses[questionId];\n\t\t}\n\t});\n\n\treturn { pageResponses: includedResponses, excludedResponses: excludedResponses };\n}\n\n/**\n * Helper function to iterate through the specified page on the survey and get a list of question IDs on that page which should be shown.\n * @param survey The object containing survey information.\n * @param currentPage The page number of the page of interest\n * @param previousResponses A map of previous responses to questions. This is needed for branching behavior, since not all questions\n * will be shown to the user on each page.\n * @returns An array of question IDs that the user can see/respond to for a page.\n */\nfunction getQuestionsForPage(\n\tsurvey: ISurvey,\n\tcurrentPage: number,\n\tpreviousResponses: ISurveyResponses,\n): string[] {\n\tconst questions: string[] = [];\n\tsurvey.pages[currentPage]?.questions.forEach((questionOrGroup: IQuestion | IQuestionGroup) => {\n\t\tif (isQuestionGroup(questionOrGroup)) {\n\t\t\t// Check that group has required dependencies before including in question array\n\t\t\tif (!questionOrGroup.dependsOnQuestion || previousResponses[questionOrGroup.dependsOnQuestion]) {\n\t\t\t\tquestionOrGroup.subQuestions.forEach((question) => {\n\t\t\t\t\tquestions.push(question.id);\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tquestions.push(questionOrGroup.id);\n\t\t}\n\t});\n\treturn questions;\n}\n\n/** Filters out questions from a Survey object which a user doesn't have permission for. Note, this is not a pure function, it updates\n * the survey object that it gets passed inline.\n */\nfunction filterSurveyForUserPermissions(\n\tsurvey: ISurvey,\n\tcheckUserPermissions: ICheckUserPermissions,\n\tscreenShareSupport: boolean,\n): void {\n\tconst validatePermissions = (requiredPermissions: (keyof IUserPermissions)[]): boolean => {\n\t\tif (!checkUserPermissions(requiredPermissions)) {\n\t\t\treturn false;\n\t\t}\n\t\tif (requiredPermissions?.includes(\"canShareScreen\") && !screenShareSupport) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\tfor (const page of survey.pages) {\n\t\tpage.questions = page.questions.filter((question) => {\n\t\t\treturn validatePermissions(question.requiredPermissions ?? []);\n\t\t});\n\n\t\tfor (const question of page.questions) {\n\t\t\tif (isQuestionGroup(question)) {\n\t\t\t\tquestion.subQuestions = question.subQuestions.filter((question) => {\n\t\t\t\t\treturn validatePermissions(question.requiredPermissions ?? []);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * The SurveyWorkflow component\n */\nconst SurveyWorkflow: FC = (props) => {\n\tconst { survey, onExit, onEnd, saveResponses, setFocusOnPageChange } = props;\n\tconst checkUserPermissions = useCheckUserPermissions();\n\tconst screenShareSupport = useIsScreenShareSupported();\n\tfilterSurveyForUserPermissions(survey, checkUserPermissions, screenShareSupport); // Check the permissions for the survey before doing anything else\n\n\tconst [currentPage, setCurrentPage] = useState(0);\n\tconst [currentResponses, setCurrentResponses] = useState(buildResponsesForPage(survey).pageResponses);\n\tconst [previousResponses, setPreviousResponses] = useState({});\n\tconst [futureResponses, setFutureResponses] = useState({});\n\tconst strings = useStrings(\"SurveyWorkflow\", Object.values(TokenNames));\n\tconst [hasAnyResponses, setHasAnyResponses] = useState(false);\n\n\tconst handleChange = useCallback(\n\t\t(question: IQuestion) => {\n\t\t\tconst id = question.id;\n\t\t\tconst currentValue = currentResponses[id];\n\t\t\tconst newResponses = { ...currentResponses, [id]: !currentValue };\n\t\t\tsetCurrentResponses(newResponses);\n\n\t\t\t// Check for any responses to set flag\n\t\t\tlet newHasAnyResponses = false;\n\t\t\tfor (const response in newResponses) {\n\t\t\t\tif (newResponses[response]) {\n\t\t\t\t\tnewHasAnyResponses = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tsetHasAnyResponses(newHasAnyResponses);\n\t\t},\n\t\t[currentResponses],\n\t);\n\n\tconst onBack = useCallback(() => {\n\t\tconst newCurrentPage = currentPage > 0 ? currentPage - 1 : 0;\n\n\t\t// Find which of the previous responses correspond to questions on the page we've returned to.\n\t\tconst { pageResponses: newCurrentResponses, excludedResponses: newPreviousResponses } =\n\t\t\tbuildResponsesForPage(survey, newCurrentPage, previousResponses, previousResponses);\n\t\tsetFutureResponses({ ...currentResponses, ...futureResponses });\n\t\tsetCurrentResponses(newCurrentResponses);\n\t\tsetPreviousResponses(newPreviousResponses);\n\t\tsetCurrentPage(newCurrentPage);\n\t\tsetFocusOnPageChange();\n\t}, [currentPage, currentResponses, futureResponses, previousResponses, setFocusOnPageChange, survey]);\n\n\tconst onAdvance = useCallback(() => {\n\t\t// Save the full survey responses each submission\n\t\tconst nextPage = currentPage + 1;\n\t\tconst isLastPage = nextPage >= survey.pages.length;\n\t\tconst fullResponses = { ...previousResponses, ...currentResponses };\n\t\tsaveResponses(fullResponses, isLastPage);\n\n\t\tif (isLastPage) {\n\t\t\tonEnd();\n\t\t} else {\n\t\t\tconst { pageResponses: newCurrentResponses, excludedResponses: newFutureResponses } =\n\t\t\t\tbuildResponsesForPage(survey, nextPage, fullResponses, futureResponses);\n\t\t\tsetFutureResponses(newFutureResponses);\n\t\t\tsetCurrentResponses(newCurrentResponses);\n\t\t\tsetPreviousResponses(fullResponses);\n\t\t}\n\t\tsetCurrentPage(nextPage);\n\t\tsetFocusOnPageChange();\n\t}, [\n\t\tcurrentPage,\n\t\tcurrentResponses,\n\t\tfutureResponses,\n\t\tonEnd,\n\t\tpreviousResponses,\n\t\tsaveResponses,\n\t\tsetFocusOnPageChange,\n\t\tsurvey,\n\t]);\n\n\tconst onWarning = useCallback(\n\t\t(event: BeforeUnloadEvent) => {\n\t\t\tevent = event || window.event;\n\t\t\t//User is not disconnected yet, return a message so the browser will warn the user before navigating away\n\t\t\t//Most browsers override this text and may block the attempt to display if the user has not interacted with the page\n\t\t\tif (event) {\n\t\t\t\tevent.returnValue = strings[TokenNames.leaveSurveyWarning];\n\t\t\t}\n\t\t\treturn strings[TokenNames.leaveSurveyWarning];\n\t\t},\n\t\t[strings],\n\t);\n\n\tconst onLeaveSurvey = useCallback(() => {\n\t\tif (Object.keys(previousResponses).length > 0) {\n\t\t\tsaveResponses(previousResponses, true);\n\t\t}\n\t}, [previousResponses, saveResponses]);\n\n\tuseLeavePageHandler(onWarning, onLeaveSurvey);\n\n\t// Show pop-up and handle navigating away from survey when the survey expires\n\tuseFeedbackTimeoutWarning(onLeaveSurvey);\n\n\treturn (\n\t\t
\n\t\t\t\n\n\t\t\t
\n\t\t\t\t{currentPage > 0 ? (\n\t\t\t\t\t\n\t\t\t\t\t\t{strings[TokenNames.back]}\n\t\t\t\t\t\n\t\t\t\t) : (\n\t\t\t\t\t\n\t\t\t\t\t\t{strings[TokenNames.exit]}\n\t\t\t\t\t\n\t\t\t\t)}\n\n\t\t\t\t\n\t\t\t\t\t{survey?.pages?.length === currentPage + 1\n\t\t\t\t\t\t? strings[TokenNames.submit]\n\t\t\t\t\t\t: strings[TokenNames.next]}\n\t\t\t\t\n\t\t\t
\n\t\t\n\t);\n};\n\nSurveyWorkflow.displayName = \"SurveyWorkflow\";\n\nexport default SurveyWorkflow;\n","/**\n * @copyright Copyright 2022 Epic Systems Corporation\n * @file hook to save survey responses\n * @author Max Harkins\n * @module Epic.VideoApp.Components.FeedbackSurvey.Hooks.UseSaveFeedbackSurvey\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster/dist/use-dispatch\";\nimport { useCallback } from \"react\";\nimport { combinedActions } from \"~/state\";\nimport { useFeedbackSurveyState } from \"~/state/feedbackSurvey\";\nimport { ISaveSurvey, ISurveyResponses } from \"~/types/survey\";\nimport { warn } from \"~/utils/logging\";\nimport { makeRequest } from \"~/utils/request\";\n\n// Exported for use in unit tests\nexport interface ISurveyAnswers {\n\tanswered: string[];\n\tnotAnswered: string[];\n\tisFinal: boolean;\n}\n\nexport function makeAnswersForClientResponses(\n\tresponses: ISurveyResponses,\n\tisFinalSubmission: boolean,\n): ISurveyAnswers {\n\tconst answers: ISurveyAnswers = { answered: [], notAnswered: [], isFinal: isFinalSubmission };\n\tfor (const question in responses) {\n\t\tif (responses[question]) {\n\t\t\tanswers.answered.push(question);\n\t\t} else {\n\t\t\tanswers.notAnswered.push(question);\n\t\t}\n\t}\n\treturn answers;\n}\n\n/**\n * Clear the authentication state and submit a survey\n */\nexport function useSaveFeedbackSurvey(): ISaveSurvey {\n\tconst JWT = useFeedbackSurveyState((selectors) => selectors.getFeedbackJWT(), []);\n\tconst dispatch = useDispatch();\n\n\tconst saveSurvey = useCallback(\n\t\t(responses: ISurveyResponses, isFinalSubmission: boolean) => {\n\t\t\tif (!JWT) {\n\t\t\t\tdispatch(combinedActions.clearSurveyState(false));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst answers = makeAnswersForClientResponses(responses, isFinalSubmission);\n\n\t\t\t// Don't call storeSurveyAnswers synchronously, behavior doesn't change if the call fails.\n\t\t\tvoid storeSurveyAnswers(answers, JWT).catch((error) => {\n\t\t\t\twarn(\"Could not save feedback survey\", error);\n\t\t\t});\n\t\t},\n\t\t[JWT, dispatch],\n\t);\n\n\treturn saveSurvey;\n}\n\nasync function storeSurveyAnswers(answers: ISurveyAnswers, jwt: string): Promise {\n\t// Use keepalive = true to handle case where we save surveys immediately before closing tab/window\n\treturn makeRequest(\"/api/FeedbackSurvey/StoreSurveyAnswers\", \"POST\", jwt, answers, { keepalive: true });\n}\n","/**\n * @copyright Copyright 2022-2023 Epic Systems Corporation\n * @file Feedback survey prompting user to report technical issues\n * @author Max Harkins\n * @module Epic.VideoApp.Components.FeedbackSurvey.SurveyCard\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport { RouteComponentProps } from \"@reach/router\";\nimport React, { FC, useCallback, useEffect, useRef } from \"react\";\nimport Card from \"~/components/Cards/Card\";\nimport SurveyWorkflow from \"~/components/FeedbackSurvey/SurveyWorkflow\";\nimport { useSaveFeedbackSurvey } from \"~/components/FeedbackSurvey/hooks/useSaveFeedbackSurvey\";\nimport { combinedActions } from \"~/state\";\nimport { useFeedbackSurveyState } from \"~/state/feedbackSurvey\";\nimport { FeedbackSurveyLoadingStatus, ISurvey } from \"~/types/survey\";\nimport { useStrings } from \"../../hooks\";\nimport Spinner from \"../Loading/Spinner\";\nimport styles from \"./SurveyCard.module.scss\";\n\nenum TokenNames {\n\ttitle = \"Title\",\n\theading = \"Heading\",\n}\n\nexport enum SurveyCardTestIds {\n\tself = \"SurveyCard\",\n\theading = \"SurveyCardHeading\",\n\tsurveyContainer = \"SurveyCardContainer\",\n}\n\n/**\n * A simple screen after the user disconnects\n */\nconst SurveyCard: FC = () => {\n\tconst strings = useStrings(\"SurveyPage\", Object.values(TokenNames));\n\tconst headingRef = useRef(null);\n\n\t// Set up a callback to allow setting focus\n\tconst focusHeader = useCallback(() => {\n\t\theadingRef?.current?.focus();\n\t}, []);\n\n\t// Focus the heading after the first render\n\tuseEffect(() => {\n\t\theadingRef.current?.focus();\n\t}, []);\n\n\tconst saveSurvey = useSaveFeedbackSurvey();\n\tconst dispatch = useDispatch();\n\n\tconst survey: ISurvey | null = useFeedbackSurveyState(\n\t\t(selectors) => selectors.getFeedbackSurveyQuestionnaire(),\n\t\t[],\n\t);\n\n\tconst surveyLoadingStatus: FeedbackSurveyLoadingStatus = useFeedbackSurveyState(\n\t\t(selectors) => selectors.getFeedbackSurveyLoadingStatus(),\n\t\t[],\n\t);\n\n\tconst onEnd = useCallback(() => {\n\t\tdispatch(combinedActions.clearSurveyState(true));\n\t}, [dispatch]);\n\n\tconst onExit = useCallback(() => {\n\t\tdispatch(combinedActions.clearSurveyState(false));\n\t}, [dispatch]);\n\n\tif (surveyLoadingStatus === FeedbackSurveyLoadingStatus.failedToLoad) {\n\t\tdispatch(combinedActions.clearSurveyState(false)); // Clear state if we failed to load the survey and the step was not reset\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t\t

\n\t\t\t\t\t{strings[TokenNames.title]}\n\t\t\t\t

\n\t\t\t\t

{strings[TokenNames.heading]}

\n\t\t\t\t{survey === null || surveyLoadingStatus === FeedbackSurveyLoadingStatus.notYetLoaded ? (\n\t\t\t\t\t\n\t\t\t\t) : (\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t)}\n\t\t\t
\n\t\t
\n\t);\n};\n\nSurveyCard.displayName = \"SurveyCard\";\n\nexport default SurveyCard;\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file After Call Screen once a user leaves\n * @author Will Cooper\n * @module Epic.VideoApp.Features.DisconnectionPage.DisconnectionPage\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport { RouteComponentProps } from \"@reach/router\";\nimport React, { FC, useEffect, useMemo } from \"react\";\nimport CardContainer from \"~/components/Cards/CardContainer\";\nimport ErrorCard from \"~/components/Cards/ErrorCard\";\nimport CopyrightLinkButton from \"~/components/Copyright/CopyrightLinkButton\";\nimport FeedbackIntroQuestion from \"~/components/FeedbackSurvey/FeedbackIntroQuestion\";\nimport OptionalFeedbackButton from \"~/components/FeedbackSurvey/OptionalFeedbackButton\";\nimport SurveyCard from \"~/components/FeedbackSurvey/SurveyCard\";\nimport SimpleHeader from \"~/components/Header/SimpleHeader\";\nimport FeatureWrapper from \"~/components/StandardLayout/FeatureWrapper\";\nimport { useDocumentTitle, useStrings } from \"~/hooks\";\nimport { roomActions, useErrorPageState, useUserState } from \"~/state\";\nimport { useFeedbackSurveyState } from \"~/state/feedbackSurvey\";\nimport { FeedbackPageStep } from \"~/types/survey\";\nimport { SharedStringTokens } from \"~/utils/strings\";\nimport { tryCloseEmbeddedMobileView } from \"~/utils/windowGlobals\";\nimport { ErrorTokenNames } from \"../generic-error/GenericError\";\n\n/** String tokens used by the DisconnectionPage component */\nenum TokenNames {\n\ttitle = \"Title\",\n\tbodyText = \"BodyText\",\n\tpostSurveyMessage = \"PostSurveyMessage\",\n\tfeedbackPrompt = \"FeedbackPrompt\",\n\tfeedbackHeading = \"FeedbackHeading\",\n}\n\n/**\n * A simple screen after the user disconnects\n */\nconst DisconnectionPage: FC = () => {\n\tconst userType = useUserState((selectors) => selectors.getUserType(), []);\n\tconst feedbackStep: FeedbackPageStep = useFeedbackSurveyState(\n\t\t(selectors) => selectors.getFeedbackStep(),\n\t\t[],\n\t);\n\n\tconst strings = useStrings(\"DisconnectionPage\", Object.values(TokenNames), [\n\t\tSharedStringTokens.defaultPageTitle,\n\t]);\n\tconst errorStrings = useStrings(\"GenericError\", Object.values(ErrorTokenNames));\n\tuseDocumentTitle(strings[SharedStringTokens.defaultPageTitle]);\n\n\t// Set isDisconnecting again if user refreshes on the /Disconnected page\n\tconst dispatch = useDispatch();\n\tuseEffect(() => {\n\t\tdispatch(roomActions.setIsDisconnecting(true));\n\t}, [dispatch]);\n\n\t// Handle ending the feedback survey flow\n\tuseEffect(() => {\n\t\tif (feedbackStep === FeedbackPageStep.hidden || feedbackStep === FeedbackPageStep.completed) {\n\t\t\t// Close the view if we are in an embedded mobile app and leaving the call\n\t\t\ttryCloseEmbeddedMobileView();\n\t\t}\n\t}, [dispatch, feedbackStep, userType]);\n\n\tconst titleTextToken = useErrorPageState((selectors) => selectors.getErrorPageTitle(), []);\n\tconst bodyTextToken = useErrorPageState((selectors) => selectors.getErrorPageText(), []);\n\n\tconst titleText = titleTextToken ? errorStrings[titleTextToken] : strings[TokenNames.title];\n\tconst bodyText = bodyTextToken ? errorStrings[bodyTextToken] : strings[TokenNames.bodyText];\n\n\tconst DisconnectionCardComponent = useMemo(() => {\n\t\tswitch (feedbackStep) {\n\t\t\tcase FeedbackPageStep.completed:\n\t\t\t\treturn ;\n\t\t\tcase FeedbackPageStep.survey:\n\t\t\t\treturn ;\n\t\t\tcase FeedbackPageStep.intro:\n\t\t\t\treturn bodyTextToken ? (\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t

{strings[TokenNames.feedbackHeading]}

\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t) : (\n\t\t\t\t\t\n\t\t\t\t\t\t

{strings[TokenNames.feedbackHeading]}

\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t);\n\t\t\tcase FeedbackPageStep.optional:\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t);\n\n\t\t\tcase FeedbackPageStep.hidden:\n\t\t\tdefault:\n\t\t\t\treturn ;\n\t\t}\n\t}, [bodyText, bodyTextToken, feedbackStep, strings, titleText]);\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t
\n\t\t\t\t{DisconnectionCardComponent}\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t);\n};\n\nDisconnectionPage.displayName = \"DisconnectionPage\";\n\nexport default DisconnectionPage;\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file Route Registration for the Disconnection Page\n * @author Will Cooper\n * @module Epic.VideoApp.Features.DisconnectionPage.DisconnectionPage\n */\n\nimport { IAddRouteFunction } from \"../../app/routes\";\nimport DisconnectionPage from \"./DisconnectionPage\";\n/*\n *\n * IMPORTANT! READ THIS!\n *\n * The contents of this file are loaded and executed during the initial load of the application\n * in the browser even if the route is never actually accessed. DO NOT put any additional code\n * in this file, or import any addition modules as doing so would just add extra bloat to the\n * initial load / startup time for the application.\n *\n * IMPORTANT! READ THIS!\n *\n */\n\n/**\n * Return the URL used to access this page\n */\nexport function getDisconnectionURL(): string {\n\treturn \"/Disconnected\";\n}\n\n/**\n * Register the routes associated with this page\n *\n * @param addRoute A function used to add a route\n */\nexport default function register(addRoute: IAddRouteFunction): void {\n\taddRoute(getDisconnectionURL(), DisconnectionPage);\n}\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file Route Registration for the Generic Error Page\n * @author Will Cooper\n * @module Epic.VideoApp.Features.GenericError.GenericError\n */\n\nimport { IAddRouteFunction } from \"../../app/routes\";\nimport GenericError from \"./GenericError\";\n\n/*\n *\n * IMPORTANT! READ THIS!\n *\n * The contents of this file are loaded and executed during the initial load of the application\n * in the browser even if the route is never actually accessed. DO NOT put any additional code\n * in this file, or import any addition modules as doing so would just add extra bloat to the\n * initial load / startup time for the application.\n *\n * IMPORTANT! READ THIS!\n *\n */\n\n/**\n * Return the URL used to access this page\n */\nexport function getGenericErrorUrl(): string {\n\treturn \"/Error\";\n}\n\n/**\n * Register the routes associated with this page\n *\n * @param addRoute A function used to add a route\n */\nexport default function register(addRoute: IAddRouteFunction): void {\n\taddRoute(getGenericErrorUrl(), GenericError);\n}\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file Home page component\n * @author Erv Walter\n * @module Epic.VideoApp.Features.Home.Home\n */\n\nimport { RouteComponentProps } from \"@reach/router\";\nimport React, { FC } from \"react\";\nimport SimpleHeader from \"~/components/Header/SimpleHeader\";\nimport { useDocumentTitle, useSharedStrings } from \"~/hooks\";\nimport { SharedStringTokens } from \"~/utils/strings\";\n\n/**\n * The Home page component\n * @param _props The props ;)\n */\nconst Home: FC = (_props) => {\n\tconst strings = useSharedStrings([SharedStringTokens.defaultPageTitle]);\n\tuseDocumentTitle(strings[SharedStringTokens.defaultPageTitle]);\n\n\treturn ;\n};\n\nHome.displayName = \"Home\";\n\nexport default Home;\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file Route registration for Home page\n * @author Erv Walter\n * @module Epic.VideoApp.Features.Home.Home\n */\n\n/* istanbul ignore file */\n\nimport { IAddRouteFunction } from \"~/app/routes\";\nimport Home from \"./Home\";\n\n/*\n *\n * IMPORTANT! READ THIS!\n *\n * The contents of this file are loaded and executed during the initial load of the application\n * in the browser even if the route is never actually accessed. DO NOT put any additional code\n * in this file, or import any addition modules as doing so would just add extra bloat to the\n * initial load / startup time for the application.\n *\n * IMPORTANT! READ THIS!\n *\n */\n\n/**\n * Return the URL used to access this page\n */\nexport function getHomeUrl(): string {\n\treturn \"/\";\n}\n\n/**\n * Register the routes associated with this page\n *\n * @param addRoute A function used to add a route\n */\nexport default function register(addRoute: IAddRouteFunction): void {\n\taddRoute(getHomeUrl(), Home);\n}\n","/**\n * @copyright Copyright 2023 Epic Systems Corporation\n * @file Hook to determine whether device is affected by an Android 12 specific bug\n *\n * \t\t**NOTE THAT THIS HOOK IS NOT UNIT TESTABLE** -- the complexity in testing\n * this unit test comes from the fact that we set state with a useEffect,\n * \t\tand return the state value.\n *\n * \t\tSo, the hook will always return false at first while promises resolve in the\n * \t\tuseEffect, and then may return later. This creates a nightmare scenario\n * \t\twith the testing harness, which returns the first value from the hook\n * \t\tand afaik doesn't have a way to wait for effects.\n *\n * \t\tWe *could* split out getIsAndroid12 as an exported, public named function and\n * \t\ttest that, but it seems like diminishing returns.\n *\n * @author Max Harkins\n * @module Epic.VideoApp.Components.HardwareTest.Hooks.UseIsAndroid12\n */\n\nimport { useEffect, useState } from \"react\";\nimport { browserVersionUAHints } from \"~/utils/browser\";\nimport { isAndroid12 } from \"~/utils/os\";\n\n// Chrome 97 fixed this android 12 related bug: https://bugs.chromium.org/p/chromium/issues/detail?id=1237677\nconst MinimumWorkingChromiumVersion = 97;\n\n/**\n * Hook to get if device is Android 12\n */\n\nexport function useIsAndroid12(): boolean {\n\tconst [android12BrokenBrowser, setIsAndroid12BrokenBrowser] = useState(false);\n\n\tuseEffect(() => {\n\t\tconst getIsAndroid12 = async (): Promise => {\n\t\t\tconst android12 = await isAndroid12();\n\t\t\tconst isChromium97Plus = browserVersionUAHints(\n\t\t\t\t\"Chromium\",\n\t\t\t\tMinimumWorkingChromiumVersion,\n\t\t\t\t(uaVersion: number, checkVersion: number) => uaVersion >= checkVersion,\n\t\t\t);\n\t\t\t// only show the chrome warning banner if on android 12, browser non chromium 97+\n\t\t\tsetIsAndroid12BrokenBrowser(android12 && !isChromium97Plus);\n\t\t};\n\t\tvoid getIsAndroid12();\n\t}, []);\n\n\treturn android12BrokenBrowser;\n}\n","/**\n * @copyright Copyright 2023 Epic Systems Corporation\n * @file Hook to determine which device-specific warning banner should be shown. Refactored from older HardwareTest/Warnings/WarningBanners.tsx component\n * @author Max Harkins\n * @module Epic.VideoApp.Components.HardwareTest.Hooks.UseDeviceSpecificBanner\n */\n\nimport { useMemo } from \"react\";\nimport { useHardwareTestState, useUserState } from \"~/state\";\nimport { detectBrowser } from \"~/utils/browser\";\nimport { iOSDetectedAtVersion } from \"~/utils/os\";\nimport { isEmbeddedMobileView } from \"~/utils/windowGlobals\";\nimport { useIsVideoSupported } from \"~/web-core/hooks/useIsVideoSupported\";\nimport { useIsAndroid12 } from \"./useIsAndroid12\";\n\nexport type DeviceSpecificBanner =\n\t| \"BrowserSupportBanner\"\n\t| \"HeadphoneAudioBanner\"\n\t| \"Android12Banner\"\n\t| \"IPadWarningBanner\"\n\t| \"None\";\n\n/**\n * Hook to get device specific warning banner\n */\n\nexport function useDeviceSpecificBanner(): DeviceSpecificBanner {\n\tconst isFirefox = useMemo(() => {\n\t\treturn detectBrowser() === \"firefox\";\n\t}, []);\n\n\tconst isDemoSystem = useUserState((selectors) => selectors.getIsDemoSystem(), []);\n\tconst isIPadCameraBugged = useHardwareTestState((selectors) => selectors.getIsIPadCameraBugged(), []);\n\n\tconst android12BrokenBrowser = useIsAndroid12();\n\n\tconst videoSupport = useIsVideoSupported();\n\n\t// Do not show any device-specific warning banners for the Demo team\n\tif (isDemoSystem) {\n\t\treturn \"None\";\n\t}\n\n\t// render a warning if the browser is not supported by Twilio\n\t// also show the banner on Firefox due to large scale performance concerns and a myriad of other problems\n\t// Do not show a warning banner on embedded mobile about the browser version\n\tif (!isEmbeddedMobileView() && (!videoSupport || isFirefox)) {\n\t\treturn \"BrowserSupportBanner\";\n\t}\n\n\t// render a warning when users may experience issues using headphones\n\t// but, prefer the browser support banner if that will be visible. Only show for iOS 15\n\tif (iOSDetectedAtVersion(\"15+\") && !iOSDetectedAtVersion(\"16+\")) {\n\t\treturn \"HeadphoneAudioBanner\";\n\t}\n\n\tif (android12BrokenBrowser) {\n\t\treturn \"Android12Banner\";\n\t}\n\n\t// render a warning when users may experience issues using iPads\n\tif (isIPadCameraBugged) {\n\t\treturn \"IPadWarningBanner\";\n\t}\n\n\treturn \"None\";\n}\n","/**\n * @copyright Copyright 2023 Epic Systems Corporation\n * @file Hook to modularize the logic to get status banner information\n * @author Max Harkins\n * @module Epic.VideoApp.Components.HardwareTest.Hooks.UseGetStatusBannerInfo\n */\n\nimport { useDeviceList } from \"~/components/VideoCall/hooks/useDeviceList\";\nimport { useStrings } from \"~/hooks\";\nimport { useHardwareTestState } from \"~/state\";\nimport { HardwareTestError, HardwareTestStatus, IStatusBannerInfo } from \"~/types\";\nimport { IS_SET_SINK_ID_SUPPORTED } from \"~/utils/browser\";\nimport { isOnIOSVersion } from \"~/utils/os\";\n\nenum TokenNames {\n\tdefaultMessage = \"DefaultMessage\",\n\tiOSWarningMessage = \"IOSWarningMessage\",\n\tmultipleErrorsWarningMessage = \"MultipleErrorsWarningMessage\",\n\tsuccessMessage = \"SuccessMessage\",\n\toutdatedOSFailure = \"OutdatedOSFailure\",\n\tgeneralErrorContentTest = \"GeneralErrorContent_Test\",\n\tgeneralErrorContentCall = \"GeneralErrorContent_Call\",\n\tgeneralErrorTitle = \"GeneralErrorTitle\",\n\tmicrophoneErrorContentTest = \"MicrophoneErrorContent_Test\",\n\tmicrophoneErrorContentCall = \"MicrophoneErrorContent_Call\",\n\tmicrophoneErrorTitle = \"MicrophoneErrorTitle\",\n\tcameraErrorContentCall = \"CameraErrorContent_Call\",\n\tcameraErrorContentTest = \"CameraErrorContent_Test\",\n\tcameraErrorTitle = \"CameraErrorTitle\",\n\tdefaultErrorCall = \"DefaultError_Call\",\n\tdefaultErrorTest = \"DefaultError_Test\",\n\tpermissionsErrorTitle = \"PermissionsErrorTitle\",\n\tpermissionsErrorContentCall = \"PermissionsErrorContent_Call\",\n\tpermissionsErrorContentTest = \"PermissionsErrorContent_Test\",\n\tstandaloneTestSuccessTip = \"StandaloneTestSuccessTip\",\n}\n\n/**\n * Hook used to modularize functionality on storing an image and handling the results of the web service call\n */\nexport function useGetStatusBannerInfo(isLobby: boolean): IStatusBannerInfo {\n\tconst status = useHardwareTestState(\n\t\t(selectors) => selectors.getTestStatus({ allowOneError: isLobby || false, isStandalone: !isLobby }),\n\t\t[],\n\t);\n\tconst hasWarningsOrErrors = useHardwareTestState(\n\t\t(selectors) => selectors.hasDetectedIssues(!IS_SET_SINK_ID_SUPPORTED),\n\t\t[],\n\t);\n\tconst error = useHardwareTestState((selectors) => selectors.getHardwareTestError(), []);\n\tconst isOnIOSErrorVersion = isOnIOSVersion(\"14_2\");\n\n\tconst strings = useStrings(\"HardwareTest\", Object.values(TokenNames));\n\n\tconst devices = useDeviceList();\n\n\tswitch (status) {\n\t\tcase HardwareTestStatus.testing:\n\t\t\treturn { message: strings[TokenNames.defaultMessage], type: \"info\" };\n\t\tcase HardwareTestStatus.passed:\n\t\t\tif (isOnIOSErrorVersion) {\n\t\t\t\treturn { message: strings[TokenNames.iOSWarningMessage], type: \"warning\" };\n\t\t\t} else if (hasWarningsOrErrors) {\n\t\t\t\treturn { message: strings[TokenNames.multipleErrorsWarningMessage], type: \"warning\" };\n\t\t\t} else {\n\t\t\t\tconst successBanner: IStatusBannerInfo = {\n\t\t\t\t\tmessage: strings[TokenNames.successMessage],\n\t\t\t\t\ttype: \"success\",\n\t\t\t\t};\n\t\t\t\tif (!isLobby) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...successBanner,\n\t\t\t\t\t\tadditionalDetails: strings[TokenNames.standaloneTestSuccessTip],\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\treturn successBanner;\n\t\t\t\t}\n\t\t\t}\n\t\tcase HardwareTestStatus.failed:\n\t\t\t// Validating permissions errors to verify if both devices actually have permisison issues.\n\t\t\tif (error === HardwareTestError.permissionsError) {\n\t\t\t\t// If both devices are experiencing permissions issues then there will be no devices present\n\t\t\t\t// If we have at least one device that means that only one device type is having permissions issues and\n\t\t\t\t// we should return a different error\n\t\t\t\tif (devices.length !== 0) {\n\t\t\t\t\treturn { message: strings[TokenNames.multipleErrorsWarningMessage], type: \"warning\" };\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (isOnIOSErrorVersion) {\n\t\t\t\treturn { message: strings[TokenNames.outdatedOSFailure], type: \"critical\" };\n\t\t\t} else {\n\t\t\t\tconst [message, additionalDetails] = translateToFriendlyError(error, strings, isLobby);\n\t\t\t\treturn { message: message, additionalDetails: additionalDetails, type: \"critical\" };\n\t\t\t}\n\t}\n}\n\n/**\n * Translate the current error into a friendly error message\n * @param hardwareError the type of hardware test error that was encountered\n * @param strings dictionary of strings for this component\n * @param isLobby whether or not this is being displayed in the lobby or a standalone hardware test\n * @returns friendly error message given the current error\n */\nfunction translateToFriendlyError(\n\thardwareError: HardwareTestError,\n\tstrings: Record,\n\tisLobby?: boolean,\n): [string, string | undefined] {\n\tlet title: string;\n\tlet content: string | undefined = undefined;\n\tswitch (hardwareError) {\n\t\t// Generic device acquisition\n\t\tcase HardwareTestError.generalError:\n\t\t\ttitle = strings[TokenNames.generalErrorTitle];\n\t\t\tcontent = isLobby\n\t\t\t\t? strings[TokenNames.generalErrorContentCall]\n\t\t\t\t: strings[TokenNames.generalErrorContentTest];\n\t\t\tbreak;\n\t\t// Microphone\n\t\tcase HardwareTestError.microphoneError:\n\t\t\ttitle = strings[TokenNames.microphoneErrorTitle];\n\t\t\tcontent = isLobby\n\t\t\t\t? strings[TokenNames.microphoneErrorContentCall]\n\t\t\t\t: strings[TokenNames.microphoneErrorContentTest];\n\t\t\tbreak;\n\t\t// Camera\n\t\tcase HardwareTestError.cameraError:\n\t\t\ttitle = strings[TokenNames.cameraErrorTitle];\n\t\t\tcontent = isLobby\n\t\t\t\t? strings[TokenNames.cameraErrorContentCall]\n\t\t\t\t: strings[TokenNames.cameraErrorContentTest];\n\t\t\tbreak;\n\t\t// Permissions\n\t\tcase HardwareTestError.permissionsError:\n\t\t\ttitle = strings[TokenNames.permissionsErrorTitle];\n\t\t\tcontent = isLobby\n\t\t\t\t? strings[TokenNames.permissionsErrorContentCall]\n\t\t\t\t: strings[TokenNames.permissionsErrorContentTest];\n\t\t\tbreak;\n\t\t// Default\n\t\tdefault:\n\t\t\ttitle = isLobby ? strings[TokenNames.defaultErrorCall] : strings[TokenNames.defaultErrorTest];\n\t\t\tbreak;\n\t}\n\treturn [title, content];\n}\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file Warning icon\n * @author Will Cooper\n * @module Epic.VideoApp.Icons.WarningYield\n */\n\nimport React, { FC, memo } from \"react\";\nimport { IconProps } from \".\";\n\n/**\n * The Warning component\n * @param props The props ;)\n */\nconst WarningYield: FC = memo((props) => {\n\tconst { title } = props;\n\treturn (\n\t\t\n\t\t\t{title && {title}}\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n});\n\nWarningYield.displayName = \"WarningYield\";\n\nexport default WarningYield;\n","/**\n * @copyright Copyright 2023 Epic Systems Corporation\n * @file Warning icon\n * @author Max Harkins\n * @module Epic.VideoApp.Icons.WarningYieldLight\n */\n\nimport React, { FC, memo } from \"react\";\nimport { IconProps } from \".\";\n\n/**\n * The Warning component, but with an inverted color theme so that the exclamation is light on a dark background\n * @param props The props ;)\n */\nconst WarningYieldLight: FC = memo((props) => {\n\tconst { title } = props;\n\treturn (\n\t\t\n\t\t\t{title && {title}}\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n});\n\nWarningYieldLight.displayName = \"WarningYieldLight\";\n\nexport default WarningYieldLight;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file BubbleBanner component\n * @author Colin Walters\n * @module Epic.VideoApp.Components.Utilities.BubbleBanner\n */\n\nimport React, { ComponentType, FC } from \"react\";\nimport { IconProps } from \"~/icons\";\nimport InformationCircle from \"~/icons/informationCircle\";\nimport Success from \"~/icons/success\";\nimport WarningYield from \"~/icons/warningYield\";\nimport { resolveClassName } from \"~/utils/className\";\nimport styles from \"./BubbleBanner.module.scss\";\nimport ActionButton from \"./ActionButton\";\nimport { BackgroundStyleContextProvider } from \"./BackgroundStyleContext\";\nimport { StyleContext } from \"~/types\";\nimport WarningYieldLight from \"~/icons/warningYieldLight\";\nimport { SharedStringTokens } from \"~/utils/strings\";\nimport { useStrings } from \"~/hooks/useStrings\";\n\nexport type BannerType = \"warning\" | \"info\" | \"success\" | \"critical\";\n\n/**\n * Props for BubbleBanner Component\n */\ninterface IProps {\n\t/** The type of banner, indicating severity */\n\ttype: BannerType;\n\t/** Header text for the banner */\n\ttitle: string;\n\t/** Body text of the banner */\n\tmessage?: string;\n\t/** Button to include on the banner, if any */\n\tbutton?: IBannerButton;\n\t/** Extra class to apply to banner */\n\trawClass?: string;\n\t/** Whether the banner is displayed inline, for instance within a card alongside other text or elements */\n\tinline?: boolean;\n}\n\n/**\n * Button to be included on a banner\n */\ninterface IBannerButton {\n\t/** Button text */\n\ttext: string;\n\t/** Function to be called when the button is clicked */\n\tonClick: () => void;\n}\n\n/**\n * The BubbleBanner component\n * @param props The props ;)\n */\nconst BubbleBanner: FC = (props) => {\n\tconst { type, title, message, button, rawClass, inline = false, children } = props;\n\n\tconst Icon = getIconForBannerType(type);\n\tconst className = resolveClassName(styles, { banner: true, [type]: true, inline }, rawClass);\n\n\tconst strings = useStrings(\"\", [], [SharedStringTokens.warningIconAriaLabel]);\n\tconst isAriaHidden = type !== \"critical\" && type !== \"warning\";\n\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t{title}\n\t\t\t\t\t\t{message}\n\t\t\t\t\t\t{children}\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t{button && (\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t)}\n\t\t\t
\n\t\t
\n\t);\n};\n\n/**\n * Get the icon that should be displayed on the banner type\n * @param type banner type to get the icon for\n * @returns the icon to display for a specific type of banner\n */\nfunction getIconForBannerType(type: BannerType): ComponentType {\n\tswitch (type) {\n\t\tcase \"info\":\n\t\t\treturn InformationCircle;\n\t\tcase \"warning\":\n\t\t\treturn WarningYield;\n\t\tcase \"critical\":\n\t\t\treturn WarningYieldLight;\n\t\tcase \"success\":\n\t\t\treturn Success;\n\t}\n}\n\nBubbleBanner.displayName = \"BubbleBanner\";\n\nexport default BubbleBanner;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file Warning banner to inform the user that they are a device impacted by android 12 corrupted video encoding bug\n * @author Spencer Eanes\n * @module Epic.VideoApp.Components.HardwareTest.Banners.Android12VideoWarning\n */\n\nimport React, { FC, useMemo } from \"react\";\nimport { useStrings } from \"~/hooks\";\nimport { isChrome } from \"~/utils/browser\";\nimport BubbleBanner from \"../../Utilities/BubbleBanner\";\n\ninterface IProps {\n\tinline?: boolean;\n}\n\n/**\n * The Android Warning banner component\n */\nconst Android12VideoWarning: FC = (props) => {\n\tconst { inline = false } = props;\n\tconst chrome = useMemo(() => isChrome(), []);\n\tconst strings = useStrings(\"Android12VideoWarning\", Object.values(TokenNames));\n\n\treturn (\n\t\t\n\t);\n};\n\nenum TokenNames {\n\ttitle = \"Title\",\n\tmessageChrome = \"MessageChrome\",\n\tmessageNonChrome = \"MessageNonChrome\",\n}\n\nAndroid12VideoWarning.displayName = \"Android12VideoWarning\";\n\nexport default Android12VideoWarning;\n","/**\n * @copyright Copyright 2020-2021 Epic Systems Corporation\n * @file Warning banner to inform the user they are using a browser without Twilio video recommendations\n * @author Will Cooper\n * @module Epic.VideoApp.Components.HardwareTest.Banners.BrowserSupportWarning\n */\n\nimport React, { FC, useCallback } from \"react\";\nimport { getEndpointUrl } from \"~/app/routes\";\nimport { useStrings } from \"~/hooks\";\nimport BubbleBanner from \"../../Utilities/BubbleBanner\";\n\ninterface IProps {\n\tinline?: boolean;\n}\n\n/**\n * The BrowserSupportWarning component\n */\nconst BrowserSupportWarning: FC = (props) => {\n\tconst { inline = false } = props;\n\tconst strings = useStrings(\"BrowserSupportWarning\", Object.values(TokenNames));\n\n\tconst onClick = useCallback(() => {\n\t\t// on click open the supported browsers page in another tab\n\t\twindow.open(getEndpointUrl(\"/BrowserCompatibilityError?e=1\"), \"_blank\");\n\t}, []);\n\n\treturn (\n\t\t\n\t);\n};\n\nenum TokenNames {\n\ttitle = \"Title\",\n\tmessage = \"Message\",\n\tbuttonLabel = \"ButtonLabel\",\n}\n\nBrowserSupportWarning.displayName = \"BrowserSupportWarning\";\n\nexport default BrowserSupportWarning;\n","/**\n * @copyright Copyright 2023 Epic Systems Corporation\n * @file Device status banner\n * @author Max Harkins\n * @module Epic.VideoApp.Components.HardwareTest.Banners.DeviceStatusBanner\n */\n\nimport React, { FC, PropsWithChildren } from \"react\";\nimport { IStatusBannerInfo } from \"~/types\";\nimport BubbleBanner from \"../../Utilities/BubbleBanner\";\nimport styles from \"./../HardwareTest.module.scss\";\n\ninterface IProps {\n\tmessageList: string[];\n\tbannerInfo: IStatusBannerInfo;\n}\n\n/**\n * The DeviceStatusBanner component\n *\n * Renders a banner indicating device/test status given a list of status messages and banner information\n *\n * @param props the props ;)\n */\nconst DeviceStatusBanner: FC = (props: PropsWithChildren) => {\n\tconst { messageList, bannerInfo } = props;\n\n\treturn (\n\t\t\n\t\t\t{(bannerInfo.type === \"warning\" || bannerInfo.type === \"success\") &&\n\t\t\t\t/* Show individual device messages in the case that the user is still allowed to join. Otherwise it's too much clutter.\n\t\t\t\t Specifically, hide device messages for error or in-progress tests. */\n\t\t\t\t(messageList.length > 1 ? (\n\t\t\t\t\t
    \n\t\t\t\t\t\t{messageList.map((message, index) => (\n\t\t\t\t\t\t\t
  • {message}
  • \n\t\t\t\t\t\t))}\n\t\t\t\t\t
\n\t\t\t\t) : (\n\t\t\t\t\t
{messageList[0]}
\n\t\t\t\t))}\n\t\t\n\t);\n};\n\nDeviceStatusBanner.displayName = \"DeviceStatusBanner\";\n\nexport default DeviceStatusBanner;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file Warning banner to inform the user that they are on an iOS version that may have poor audio with headphones\n * @author Colin Walters\n * @module Epic.VideoApp.Components.HardwareTest.Banners.HeadphoneAudioWarning\n */\n\nimport React, { FC } from \"react\";\nimport { useStrings } from \"~/hooks\";\nimport BubbleBanner from \"../../Utilities/BubbleBanner\";\n\nenum TokenNames {\n\ttitle = \"Title\",\n\ttitlePlural = \"TitlePlural\",\n\tmessage = \"Message\",\n\tupgradeMessage = \"UpgradeMessage\",\n}\ninterface IProps {\n\tinline?: boolean;\n}\n\n/**\n * The HeadphoneAudioWarning component\n */\nconst HeadphoneAudioWarning: FC = (props) => {\n\tconst { inline = false } = props;\n\tconst strings = useStrings(\"HeadphoneAudioWarning\", Object.values(TokenNames));\n\n\treturn (\n\t\t\n\t);\n};\n\nHeadphoneAudioWarning.displayName = \"HeadphoneAudioWarning\";\n\nexport default HeadphoneAudioWarning;\n","/**\n * @copyright Copyright 2025 Epic Systems Corporation\n * @file Warning banner to inform the user that they are a device impacted by iPad video bug\n * @author Noah Allen\n * @module Epic.VideoApp.Components.HardwareTest.Banners.IPadVideoBugWarning\n */\n\nimport React, { FC } from \"react\";\nimport { useStrings } from \"~/hooks\";\nimport BubbleBanner from \"../../Utilities/BubbleBanner\";\n\ninterface IProps {\n\tinline?: boolean;\n}\n\nenum TokenNames {\n\ttitle = \"Title\",\n\twarningMessage = \"WarningMessage\",\n}\n\n/**\n * The iPad Video Bug Warning banner component\n */\nconst IPadVideoBugWarning: FC = (props) => {\n\tconst { inline = false } = props;\n\tconst strings = useStrings(\"IPadVideoBugWarning\", Object.values(TokenNames));\n\n\treturn (\n\t\t\n\t);\n};\n\nIPadVideoBugWarning.displayName = \"IPadVideoBugWarning\";\n\nexport default IPadVideoBugWarning;\n","/**\n * @copyright Copyright 2023-2024 Epic Systems Corporation\n * @file Hardware Test status banner\n * @author Max Harkins\n * @module Epic.VideoApp.Components.HardwareTest.Banners.HardwareStatusBanner\n */\n\nimport React, { FC, PropsWithChildren, useMemo } from \"react\";\nimport { useHardwareTestState } from \"~/state\";\nimport { HardwareTestStatus } from \"~/types\";\nimport Collapse from \"../../Utilities/Collapse\";\nimport { useDeviceSpecificBanner } from \"../hooks/useDeviceSpecificBanner\";\nimport { useGetStatusBannerInfo } from \"../hooks/useGetStatusBannerInfo\";\nimport Android12VideoWarning from \"./Android12VideoWarning\";\nimport BrowserSupportWarning from \"./BrowserSupportWarning\";\nimport DeviceStatusBanner from \"./DeviceStatusBanner\";\nimport HeadphoneAudioWarning from \"./HeadphoneAudioWarning\";\nimport IPadVideoBugWarning from \"./IPadVideoBugWarning\";\n\ninterface IProps {\n\tisLobby?: boolean;\n\tspeakerMessage: string;\n\tcameraMessage: string;\n\taudioMessage: string;\n}\n\nexport enum HardwareStatusBannerTestIds {\n\tself = \"HardwareStatusBanner\",\n}\n\n/**\n * The HardwareStatusBanner component\n *\n * Renders the inline banner for the new hardware test showing information about potential hardware/browser/OS/permissions errors, or indicating a successful test.\n * @param props the props ;)\n */\nconst HardwareStatusBanner: FC = (props: PropsWithChildren) => {\n\tconst { isLobby, cameraMessage, audioMessage, speakerMessage } = props;\n\n\tconst status = useHardwareTestState(\n\t\t(selectors) => selectors.getTestStatus({ allowOneError: isLobby || false, isStandalone: !isLobby }),\n\t\t[],\n\t);\n\n\tconst deviceSpecificBanner = useDeviceSpecificBanner();\n\n\tconst bannerInfo = useGetStatusBannerInfo(!!isLobby);\n\n\tconst statusBanner = useMemo(() => {\n\t\tconst messageList = [];\n\t\tif (speakerMessage) {\n\t\t\tmessageList.push(speakerMessage);\n\t\t}\n\t\tif (audioMessage) {\n\t\t\tmessageList.push(audioMessage);\n\t\t}\n\t\tif (cameraMessage) {\n\t\t\tmessageList.push(cameraMessage);\n\t\t}\n\t\treturn ;\n\t}, [audioMessage, bannerInfo, cameraMessage, speakerMessage]);\n\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t{/* Do not show a \"success\" banner if one of the OS warning banners will also be shown. */}\n\t\t\t\t{(deviceSpecificBanner === \"None\" || bannerInfo.type !== \"success\") && statusBanner}\n\t\t\t\t{deviceSpecificBanner === \"BrowserSupportBanner\" && }\n\t\t\t\t{deviceSpecificBanner === \"HeadphoneAudioBanner\" && }\n\t\t\t\t{deviceSpecificBanner === \"Android12Banner\" && }\n\t\t\t\t{deviceSpecificBanner === \"IPadWarningBanner\" && }\n\t\t\t
\n\t\t
\n\t);\n};\n\nHardwareStatusBanner.displayName = \"HardwareStatusBanner\";\n\nexport default HardwareStatusBanner;\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Hardware Test Lower card contents\n * @author Jonathon Moore\n * @module Epic.VideoApp.Components.HardwareTest.HardwarePreviewJoinOptions\n */\nimport React, { FC, PropsWithChildren } from \"react\";\nimport { useLocalTrackState } from \"~/state\";\nimport DisplayNameInput from \"../HardwareSetup/DisplayNameInput\";\nimport { useAudioDeviceMessage } from \"../HardwareSetup/hooks/useAudioDeviceMessage\";\nimport { useCameraDeviceMessage } from \"../HardwareSetup/hooks/useCameraDeviceMessage\";\nimport { useSpeakerDeviceMessage } from \"../HardwareSetup/hooks/useSpeakerDeviceMessage\";\nimport HardwareStatusBanner from \"./Banners/HardwareStatusBanner\";\nimport styles from \"./HardwareTest.module.scss\";\nimport SkipHardwareTestSection from \"./SkipHardwareTestSection\";\n\ninterface IProps {\n\tisLobby?: boolean;\n}\n\nconst HardwarePreviewJoinOptions: FC = (props: PropsWithChildren) => {\n\tconst { isLobby, children } = props;\n\n\tconst localTrackAcquisitionStatus = useLocalTrackState(\n\t\t(selectors) => selectors.getLocalTrackAcquisitionStatus(),\n\t\t[],\n\t);\n\tconst showingWarning = localTrackAcquisitionStatus === \"showingWarning\"; // True if the alert requesting hardware permissions is being shown.\n\n\t// For message panel\n\tconst { message: speakerMessage } = useSpeakerDeviceMessage();\n\tconst audioMessage = useAudioDeviceMessage();\n\tconst cameraMessage = useCameraDeviceMessage();\n\n\treturn (\n\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t\t\n\t\t\t
\n\t\t\t\t{isLobby && }\n\t\t\t\t{children}\n\t\t\t
\n\t\t
\n\t);\n};\n\nHardwarePreviewJoinOptions.displayName = \"HardwarePreviewJoinOptions\";\n\nexport default HardwarePreviewJoinOptions;\n","/**\n * @copyright Copyright 2023-2024 Epic Systems Corporation\n * @file The selfie preview in the hardware test\n * @author Max Harkins\n * @module Epic.VideoApp.Components.HardwareTest.InlineVideoPreview\n */\n\nimport React, { FC, useContext, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useLocalAudioToggle, useStrings, useWindowSize } from \"~/hooks\";\nimport useVideoStreamDimensions from \"~/hooks/trackUtilities/useVideoStreamDimensions\";\nimport { useVolumeLevels } from \"~/hooks/useVolumeLevels\";\nimport DisabledCamera from \"~/icons/disabledCamera\";\nimport { ScreenWidthInflectionPoint, Timeout } from \"~/types\";\nimport { stringFormat } from \"~/utils/strings\";\nimport { isTrackFrontFacing } from \"~/utils/video\";\nimport { VideoSessionContext } from \"~/web-core/components/VideoSessionProvider\";\nimport VideoStream from \"~/web-core/components/VideoStream\";\nimport { useIsStreamEnabled } from \"~/web-core/hooks/useIsStreamEnabled\";\nimport { useMediaTrack } from \"~/web-core/hooks/useMediaTrack\";\nimport VolumeIndicator from \"../HardwareSetup/Devices/VolumeIndicator\";\nimport styles from \"./InlineVideoPreview.module.scss\";\n\nenum TokenNames {\n\tnoCamera = \"NoCamera\",\n\tfrontCamera = \"FrontCamera\",\n\tcameraDetected = \"CameraDetected\",\n\tunnamedCameraDetected = \"UnnamedCameraDetected\",\n\taudioIndicatorLabel = \"AudioIndicatorLabel\",\n\trecentAudio = \"RecentAudio\",\n\tnoRecentAudio = \"NoRecentAudio\",\n}\n\n/** Local Constants */\nconst VOLUME_LEVEL_DETECTION_THRESHOLD = 1; // 1/10 volume\nconst VOLUME_DETECTION_RECENT_TIMEOUT = 5000; // 5 seconds\n\nexport enum InlineVideoPreviewTestIds {\n\tself = \"InlineVideoPreview\",\n}\n\nexport enum InlineVideoPreviewTestIds {\n\tvolumeIndicator = \"InlineVideoPreview-VolumeIndicator\",\n}\n\n/**\n * The InlineVideoPreview component. This is styled to be placed inline, e.g. in the hardware test\n */\nconst InlineVideoPreview: FC = () => {\n\tconst { localDeviceStream } = useContext(VideoSessionContext);\n\tconst isVideoEnabled = useIsStreamEnabled(\"video\", localDeviceStream);\n\tconst [isAudioEnabled] = useLocalAudioToggle();\n\tconst { volumeLevel } = useVolumeLevels(localDeviceStream);\n\tconst { width: viewportWidth } = useWindowSize();\n\t// Default to 16:9 aspect ratio (here ratio is between height:width instead of standard width:height to make styling)\n\tconst [aspectRatio, setAspectRatio] = useState((9 / 16) * 100); // Multiply by 100 to express ratio as percentage\n\n\tconst dimensions = useVideoStreamDimensions(localDeviceStream);\n\n\tconst strings = useStrings(\"InlineVideoPreview\", Object.values(TokenNames));\n\tconst mediaStreamTrack = useMediaTrack(localDeviceStream, \"video\");\n\n\tconst videoStreamLabel = useMemo(() => {\n\t\tconst isFrontFacing = mediaStreamTrack && isTrackFrontFacing(mediaStreamTrack);\n\t\tconst deviceLabel = localDeviceStream?.getDeviceInfo(\"video\").label;\n\t\tlet videoStreamLabel;\n\t\tif (isVideoEnabled) {\n\t\t\tvideoStreamLabel = deviceLabel\n\t\t\t\t? stringFormat(\n\t\t\t\t\t\tisFrontFacing ? strings[TokenNames.frontCamera] : strings[TokenNames.cameraDetected],\n\t\t\t\t\t\tdeviceLabel,\n\t\t\t\t )\n\t\t\t\t: strings[TokenNames.unnamedCameraDetected];\n\t\t} else {\n\t\t\tvideoStreamLabel = strings[TokenNames.noCamera];\n\t\t}\n\t\treturn videoStreamLabel;\n\t}, [mediaStreamTrack, localDeviceStream, isVideoEnabled, strings]);\n\n\tconst width = dimensions?.width;\n\tconst height = dimensions?.height;\n\tif (!!width && !!height && aspectRatio !== 100 * (height / width)) {\n\t\tsetAspectRatio(100 * (height / width));\n\t}\n\n\tconst videoPreviewStyle = useMemo(() => {\n\t\tlet previewStyle: React.CSSProperties = {};\n\n\t\tif (viewportWidth < ScreenWidthInflectionPoint && aspectRatio > 100) {\n\t\t\t// Calculate the % height that's required on each side to make the video preview at largest a square\n\t\t\t// To find the required margin to make the video preview a square, assume a 1x1 square and subtract height/width from the square's width\n\t\t\tlet borderWidthFraction = (1 - 100 / aspectRatio) / 2;\n\t\t\tborderWidthFraction += 0.1; // Grow border by 10% to make the video preview even shorter\n\t\t\tpreviewStyle = { margin: `0 ${100 * borderWidthFraction}%` };\n\t\t}\n\t\treturn previewStyle;\n\t}, [aspectRatio, viewportWidth]);\n\n\tconst [noRecentVolume, setNoRecentVolume] = useState(true);\n\tconst timeoutRef = useRef();\n\tconst isEnabled = useIsStreamEnabled(\"audio\", localDeviceStream);\n\n\tuseEffect(() => {\n\t\tif (volumeLevel >= VOLUME_LEVEL_DETECTION_THRESHOLD) {\n\t\t\tsetNoRecentVolume(false);\n\t\t\tif (timeoutRef.current) {\n\t\t\t\tclearTimeout(timeoutRef.current);\n\t\t\t\ttimeoutRef.current = undefined;\n\t\t\t}\n\t\t} else if (isEnabled) {\n\t\t\tif (!timeoutRef.current) {\n\t\t\t\ttimeoutRef.current = setTimeout(() => {\n\t\t\t\t\tsetNoRecentVolume(true);\n\t\t\t\t}, VOLUME_DETECTION_RECENT_TIMEOUT);\n\t\t\t}\n\t\t}\n\t}, [isEnabled, volumeLevel]);\n\n\tconst volumeIndicatorAriaLabel = noRecentVolume\n\t\t? strings[TokenNames.noRecentAudio]\n\t\t: strings[TokenNames.recentAudio];\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t{isVideoEnabled && localDeviceStream ? (\n\t\t\t\t\t\n\t\t\t\t) : (\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t
\n\n\t\t\t{isAudioEnabled && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t)}\n\t\t\n\t);\n};\n\nInlineVideoPreview.displayName = \"InlineVideoPreview\";\n\nexport default InlineVideoPreview;\n","/**\n * @copyright Copyright 2020-2024 Epic Systems Corporation\n * @file toggle switch component\n * @author Colin Walters\n * @module Epic.VideoApp.Components.HardwareSetup.Devices.ToggleSwitch\n */\n\nimport React, { FC, useRef } from \"react\";\nimport KeyboardShortcut from \"~/components/Utilities/KeyboardShortcut\";\nimport Tooltip, { ITooltipInfo } from \"~/components/Utilities/Tooltip\";\nimport Success from \"~/icons/success\";\nimport { resolveClassName } from \"~/utils/className\";\nimport styles from \"./ToggleSwitch.module.scss\";\n\n/**\n * Props for ToggleSwitch Component\n */\ninterface IProps {\n\t/* The on/off state of the switch */\n\ton: boolean;\n\t/* Function to call when the switch is toggled */\n\tonToggle: () => void;\n\t/* Accessible label for the switch */\n\tariaLabel: string;\n\t/* Keyboard shortcut for the toggle */\n\tkeyboardShortcut?: string[];\n\t/* If the control should be disabled */\n\tdisabled?: boolean;\n\t/* Tooltip info to construct a tooltip */\n\ttooltipInfo?: ITooltipInfo;\n}\n\nexport enum ToggleSwitchTestIds {\n\tself = \"ToggleSwitch\",\n}\n\n/**\n * The ToggleSwitch component\n * @param _props The props ;)\n */\nconst ToggleSwitch: FC = (props) => {\n\tconst { on, onToggle, ariaLabel, keyboardShortcut, disabled, tooltipInfo } = props;\n\n\tconst wrapperClassName = resolveClassName(styles, { wrapper: true, on });\n\n\tconst buttonRef = useRef(null);\n\n\t// make this a button so enter & space will work when focused\n\treturn (\n\t\t\n\t\t\t{!disabled && keyboardShortcut && (\n\t\t\t\t\n\t\t\t)}\n\t\t\t
\n\t\t\t\t\n\t\t\t\t
\n\t\t\t\t{!disabled && tooltipInfo && (\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t
\n\t\t\n\t);\n};\n\nToggleSwitch.displayName = \"ToggleSwitch\";\n\nexport default ToggleSwitch;\n","/**\n * @copyright Copyright 2023 Epic Systems Corporation\n * @file Row of simple toggles and buttons for the hardware test\n * @author Max Harkins\n * @module Epic.VideoApp.Components.HardwareTest.ToggleRow\n */\n\nimport { IAction, useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback, useContext, useEffect, useRef } from \"react\";\nimport {\n\tuseLocalAudioToggle,\n\tuseLocalVideoToggle,\n\tuseSelectedCamera,\n\tuseSelectedMic,\n\tuseStrings,\n} from \"~/hooks\";\nimport { useGetFormattedHotkeyString } from \"~/hooks/useGetFormattedHotkeyString\";\nimport BlurryBackground from \"~/icons/blurryBackground\";\nimport Camera from \"~/icons/camera\";\nimport Gear from \"~/icons/gear\";\nimport Mic from \"~/icons/mic\";\nimport { useBackgroundProcessorsState, useHardwareTestState } from \"~/state\";\nimport { useCombinedSelectors } from \"~/state/combined\";\nimport { hardwareTestActions } from \"~/state/hardwareTest\";\nimport { DeviceStatus, DisplayContext, HardwareTestTab } from \"~/types\";\nimport TestSpeakerButton from \"../HardwareSetup/Devices/TestSpeakerButton\";\nimport ToggleSwitch from \"../HardwareSetup/Devices/ToggleSwitch\";\nimport { HardwareSetupDisplayContext } from \"../HardwareSetup/HardwareSetup\";\nimport ActionButton from \"../Utilities/ActionButton\";\nimport Tooltip from \"../Utilities/Tooltip\";\nimport styles from \"./ToggleRow.module.scss\";\n\ninterface IProps {\n\tonSpeakerTest: () => void;\n}\n\nenum TokenNames {\n\tbackgroundsLabel = \"BackgroundsLabel\",\n\tvideoToggle = \"VideoToggle\",\n\taudioToggle = \"AudioToggle\",\n\topenBackgroundsNoHotkey = \"OpenBackgroundsNoHotkey\",\n\tcloseBackgroundsNoHotkey = \"CloseBackgroundsNoHotkey\",\n\topenSettingsNoHotkey = \"OpenSettingsNoHotkey\",\n\tcloseSettingsNoHotkey = \"CloseSettingsNoHotkey\",\n\tsettingsAriaLabel = \"SettingsAriaLabel\",\n}\n\nexport enum ToggleRowTestIds {\n\tself = \"ToggleRow\",\n\tbackgroundsButton = \"ToggleRowBackgroundButton\",\n}\n\nfunction _openTestTab(\n\ttabToOpen: HardwareTestTab,\n\tcurrentTab: HardwareTestTab,\n\tdispatch: (action: T) => T,\n): void {\n\tif (currentTab === tabToOpen) {\n\t\tdispatch(hardwareTestActions.closeTabAndFocusTabButton(currentTab));\n\t} else {\n\t\tdispatch(hardwareTestActions.setHardwareTestTab(tabToOpen));\n\t}\n}\n\n/**\n * The ToggleRow button\n * @param props Props\n */\nconst ToggleRow: FC = (props) => {\n\tconst { onSpeakerTest } = props;\n\tconst [videoEnabled, toggleVideoEnabled] = useLocalVideoToggle();\n\tconst [audioEnabled, toggleAudioEnabled] = useLocalAudioToggle();\n\n\tconst displayContext = useContext(HardwareSetupDisplayContext);\n\tconst currentTab = useHardwareTestState((selectors) => selectors.getHardwareTestTab(), []);\n\tconst backgroundProcessorLoadStatus = useBackgroundProcessorsState(\n\t\t(selectors) => selectors.getProcessorLoadStatus(),\n\t\t[],\n\t);\n\tconst dispatch = useDispatch();\n\tconst selectedCamera = useSelectedCamera();\n\tconst selectedMic = useSelectedMic();\n\n\tconst strings = useStrings(\"ToggleRow\", Object.values(TokenNames));\n\tconst backgroundUnavailableString = useStrings(\"BackgroundGalleryToggleRow\", [\"FailedLoad\"]);\n\n\tconst openDevicesTab = useCallback(() => {\n\t\t_openTestTab(HardwareTestTab.devices, currentTab.tab, dispatch);\n\t}, [dispatch, currentTab.tab]);\n\n\tconst openBackgroundsTab = useCallback(() => {\n\t\t_openTestTab(HardwareTestTab.backgrounds, currentTab.tab, dispatch);\n\t}, [dispatch, currentTab.tab]);\n\n\tconst isCameraSuccess =\n\t\tuseHardwareTestState((selectors) => selectors.getCameraStatus(false), []) === DeviceStatus.success;\n\tconst isBackgroundsSupported = useCombinedSelectors(\n\t\t(selectors) => selectors.getIsBackgroundsSupported(),\n\t\t[],\n\t);\n\n\tconst isBackgroundsOpen = currentTab.tab === HardwareTestTab.backgrounds;\n\tconst isDevicesOpen = currentTab.tab === HardwareTestTab.devices;\n\tconst disableBackgroundButton = backgroundProcessorLoadStatus === \"failed\";\n\n\t// If backgrounds have failed to load, close the tab\n\tif (isBackgroundsOpen && disableBackgroundButton) {\n\t\tdispatch(hardwareTestActions.setHardwareTestTab(HardwareTestTab.closed));\n\t}\n\n\tconst backgroundsButtonRef = useRef(null);\n\tconst settingsButtonRef = useRef(null);\n\n\tconst tabsNeedingFocus = useHardwareTestState((selectors) => selectors.getTabButtonsNeedingFocus(), []);\n\n\t// Append hotkeys to strings in non-mobile contexts\n\tconst cameraToggleKeyboardShortcut = [\"alt\", \"r\"];\n\tconst cameraToggleTooltipFormatted = useGetFormattedHotkeyString(\n\t\tstrings[TokenNames.videoToggle],\n\t\tcameraToggleKeyboardShortcut,\n\t);\n\n\tconst audioToggleKeyboardShortcut = [\"alt\", \"m\"];\n\tconst audioToggleTooltipFormatted = useGetFormattedHotkeyString(\n\t\tstrings[TokenNames.audioToggle],\n\t\taudioToggleKeyboardShortcut,\n\t);\n\n\tconst backgroundsToggleKeyboardShortcut = [\"alt\", \"b\"];\n\tconst backgroundString = isBackgroundsOpen\n\t\t? strings[TokenNames.closeBackgroundsNoHotkey]\n\t\t: strings[TokenNames.openBackgroundsNoHotkey];\n\tconst backgroundsTooltipFormatted = useGetFormattedHotkeyString(\n\t\tbackgroundString,\n\t\tbackgroundsToggleKeyboardShortcut,\n\t);\n\tconst backgroundsTooltip = disableBackgroundButton\n\t\t? backgroundUnavailableString[\"FailedLoad\"]\n\t\t: backgroundsTooltipFormatted;\n\tconst backgroundsEnabledAriaLabel = useGetFormattedHotkeyString(\n\t\tstrings[TokenNames.backgroundsLabel],\n\t\tbackgroundsToggleKeyboardShortcut,\n\t);\n\tconst backgroundsAriaLabel = disableBackgroundButton\n\t\t? backgroundUnavailableString[\"FailedLoad\"]\n\t\t: backgroundsEnabledAriaLabel;\n\n\tconst settingsToggleKeyboardShortcut = [\"alt\", \"s\"];\n\tconst settingsString = isDevicesOpen\n\t\t? strings[TokenNames.closeSettingsNoHotkey]\n\t\t: strings[TokenNames.openSettingsNoHotkey];\n\tconst settingsTooltipFormatted = useGetFormattedHotkeyString(\n\t\tsettingsString,\n\t\tsettingsToggleKeyboardShortcut,\n\t);\n\tconst settingsAriaLabel = useGetFormattedHotkeyString(\n\t\tstrings[TokenNames.settingsAriaLabel],\n\t\tsettingsToggleKeyboardShortcut,\n\t);\n\n\tuseEffect(() => {\n\t\tif (tabsNeedingFocus.includes(HardwareTestTab.devices)) {\n\t\t\tsettingsButtonRef.current?.focus();\n\t\t\tdispatch(hardwareTestActions.removeElementNeedsFocus(HardwareTestTab.devices));\n\t\t}\n\n\t\tif (tabsNeedingFocus.includes(HardwareTestTab.backgrounds)) {\n\t\t\tbackgroundsButtonRef.current?.focus();\n\t\t\tdispatch(hardwareTestActions.removeElementNeedsFocus(HardwareTestTab.backgrounds));\n\t\t}\n\t}, [dispatch, tabsNeedingFocus]);\n\tconst cameraIconRef = useRef(null);\n\tconst micIconRef = useRef(null);\n\n\treturn (\n\t\t
\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t{selectedMic.label && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t)}\n\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t{selectedCamera.label && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t)}\n\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\n\t\t\t
\n\t\t\t\t{isBackgroundsSupported && isCameraSuccess && displayContext === DisplayContext.lobby && (\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t);\n};\n\nexport const ToggleRowUnitTestingMethods = { openTestTab: _openTestTab };\n\nexport default ToggleRow;\n","/**\n * @copyright Copyright 2023-2024 Epic Systems Corporation\n * @file New Hardware Test preview panel with video preview, toggle buttons, test audio, and name input\n * @author Max Harkins\n * @module Epic.VideoApp.Components.HardwareTest.HardwarePreviewPanel\n */\n\nimport React, { FC } from \"react\";\nimport { useWindowSize } from \"~/hooks\";\nimport { ScreenWidthInflectionPoint } from \"~/types\";\nimport { useSpeakerDeviceMessage } from \"../HardwareSetup/hooks/useSpeakerDeviceMessage\";\nimport styles from \"./HardwareTest.module.scss\";\nimport InlineVideoPreview from \"./InlineVideoPreview\";\nimport ToggleRow from \"./ToggleRow\";\n\n/**\n * The HardwarePreviewPanel component\n *\n * Shows the video and mic preview, toggle controls, name input, and status messages for the hardware test\n * @param props the props ;)\n */\nconst HardwarePreviewPanel: FC = () => {\n\tconst { width } = useWindowSize();\n\n\t// For message panel\n\tconst { onSpeakerTest } = useSpeakerDeviceMessage();\n\n\treturn (\n\t\t
\n\t\t\t{width > ScreenWidthInflectionPoint ? (\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t) : (\n\t\t\t\t<>\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\n\t\t\t)}\n\t\t
\n\t);\n};\n\nHardwarePreviewPanel.displayName = \"HardwarePreviewPanel\";\n\nexport default HardwarePreviewPanel;\n","/**\n * @copyright Copyright 2023-2024 Epic Systems Corporation\n * @file Menu component for menus in the Lobby Hardware test (NOT the in-call drop-down menu)\n * @author Max Harkins\n * @module Epic.VideoApp.Components.HardwareTest.HardwareTestMenu\n */\n\n/* eslint-disable jsx-a11y/no-noninteractive-tabindex */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback, useEffect, useRef } from \"react\";\nimport { hardwareTestActions } from \"~/state\";\nimport { HardwareTestTab } from \"~/types\";\nimport { DefaultImageNames } from \"~/types/backgrounds\";\nimport { MenuContextProvider } from \"../Utilities/MenuContext\";\nimport styles from \"./HardwareTestMenu.module.scss\";\n\n/**\n * Props for HardwareTestMenu Component\n */\ninterface IProps {\n\ttabType: HardwareTestTab;\n\tvisible: boolean;\n\tneedsAutoFocus: boolean;\n\tid: string;\n\tlabel: string;\n}\n\nexport enum HardwareTestMenuTestIds {\n\tdevicesMenu = \"HardwareTestDevicesMenu\",\n\tbackgroundMenu = \"HardwareTestBackgroundMenu\",\n}\n\n/**\n * The HardwareTestMenu component\n * @param props The props ;)\n */\nconst HardwareTestMenu: FC = (props) => {\n\tconst { tabType, visible, needsAutoFocus, id, children, label } = props;\n\n\tconst dispatch = useDispatch();\n\n\tconst handleKeyPress = useCallback>(\n\t\t(event) => {\n\t\t\tswitch (event.key) {\n\t\t\t\tcase \"Esc\":\n\t\t\t\tcase \"Escape\":\n\t\t\t\t\tdispatch(hardwareTestActions.closeTabAndFocusTabButton(tabType));\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\t[dispatch, tabType],\n\t);\n\n\tconst menuRef = useRef(null);\n\n\tuseEffect(() => {\n\t\tif (needsAutoFocus && visible) {\n\t\t\tmenuRef.current?.focus({ preventScroll: true });\n\t\t\tmenuRef.current?.scrollIntoView({ behavior: \"smooth\" });\n\t\t}\n\t}, [needsAutoFocus, visible]);\n\n\tif (tabType === HardwareTestTab.devices) {\n\t\treturn (\n\t\t\t\n\t\t\t\t{children}\n\t\t\t
\n\t\t);\n\t} else {\n\t\treturn (\n\t\t\t\n\t\t\t\t{children}\n\t\t\t\n\t\t);\n\t}\n};\n\nHardwareTestMenu.displayName = \"HardwareTestMenu\";\n\nexport default HardwareTestMenu;\n","/**\n * @copyright Copyright 2023-2024 Epic Systems Corporation\n * @file Panel holding settings for the hardware test\n * @author Max Harkins\n * @module Epic.VideoApp.Components.HardwareTest.SettingsPanel\n */\n\nimport React, { FC } from \"react\";\nimport { useStrings } from \"~/hooks\";\nimport { useHardwareTestState } from \"~/state\";\nimport { HardwareTestTab } from \"~/types\";\nimport { resolveClassName } from \"~/utils/className\";\nimport BackgroundGalleryToggleRow from \"../BackgroundSelector/BackgroundGalleryToggleRow\";\nimport CameraSetup from \"../HardwareSetup/Devices/CameraSetup\";\nimport MicSetup from \"../HardwareSetup/Devices/MicSetup\";\nimport SpeakerSetup from \"../HardwareSetup/Devices/SpeakerSetup\";\nimport HardwareTestMenu from \"./HardwareTestMenu\";\nimport styles from \"./SettingsPanel.module.scss\";\n\nenum TokenNames {\n\tsettingsLabel = \"SettingsLabel\",\n\tbackgroundsLabel = \"BackgroundsLabel\",\n}\n\n/**\n * The Settings Panel\n */\nconst SettingsPanel: FC = () => {\n\tconst currentTab = useHardwareTestState((selectors) => selectors.getHardwareTestTab(), []);\n\n\tconst strings = useStrings(\"SettingsPanel\", Object.values(TokenNames));\n\n\tconst panelClassName = resolveClassName(styles, {\n\t\tsettingsPanel: true,\n\t\tpanelClosed: currentTab.tab === HardwareTestTab.closed,\n\t});\n\n\treturn (\n\t\t
\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t);\n};\n\nexport default SettingsPanel;\n","/**\n * @copyright Copyright 2023 Epic Systems Corporation\n * @file Component containing welcome greeting message for the hardware test\n * @author Max Harkins\n * @module Epic.VideoApp.Components.HardwareTest.WelcomeHeading\n */\n\nimport React, { FC, PropsWithChildren, useMemo } from \"react\";\nimport { useStrings } from \"~/hooks\";\nimport { useRoomState, useSettingsState } from \"~/state\";\nimport { formatDateDisplayString } from \"~/utils/dateTime\";\nimport { stringFormat } from \"~/utils/strings\";\nimport styles from \"./HardwareTest.module.scss\";\n\ninterface IProps {\n\tisLobby?: boolean;\n}\n\nenum TokenNames {\n\twelcome = \"Welcome\",\n\treadyMessageWithTime = \"ReadyMessageWithTime\",\n\treadyMessage = \"ReadyMessage\",\n\treadyMessageStandaloneTest = \"ReadyMessageStandaloneTest\",\n\testimatedReadyMessageWithTime = \"EstimatedReadyMessageWithTime\",\n}\n\n/**\n * A welcome message for the new hardware test with information about the date and time, if available\n *\n * @param props the props ;)\n */\nconst WelcomeHeading: FC = (props: PropsWithChildren) => {\n\tconst { isLobby } = props;\n\n\tconst strings = useStrings(\"HardwareTest\", Object.values(TokenNames));\n\n\tconst conferenceDateIso = useRoomState((selectors) => selectors.getConferenceDateIso(), []);\n\tconst isConferenceTimeEstimate = useRoomState((selectors) => selectors.getIsConferenceTimeEstimate(), []);\n\tconst locale = useSettingsState((selectors) => selectors.getLocale(), []);\n\tconst displayTime = useMemo(() => {\n\t\treturn formatDateDisplayString(conferenceDateIso, locale, \"timeOnly\");\n\t}, [conferenceDateIso, locale]);\n\tconst WelcomeMessage = displayTime\n\t\t? isConferenceTimeEstimate\n\t\t\t? stringFormat(strings[TokenNames.estimatedReadyMessageWithTime], displayTime)\n\t\t\t: stringFormat(strings[TokenNames.readyMessageWithTime], displayTime)\n\t\t: strings[TokenNames.readyMessage];\n\n\treturn (\n\t\t
\n\t\t\t

{strings[TokenNames.welcome]}

\n\t\t\t

\n\t\t\t\t{isLobby ? WelcomeMessage : strings[TokenNames.readyMessageStandaloneTest]}\n\t\t\t

\n\t\t
\n\t);\n};\n\nWelcomeHeading.displayName = \"WelcomeHeading\";\n\nexport default WelcomeHeading;\n","/**\n * @copyright Copyright 2023-2024 Epic Systems Corporation\n * @file Hardware test card contents\n * @author Max Harkins\n * @module Epic.VideoApp.Components.HardwareTest.HardwareCardContents\n */\n\nimport React, { FC, PropsWithChildren, ReactElement } from \"react\";\nimport { useWindowSize } from \"~/hooks\";\nimport { useHardwareTestState } from \"~/state\";\nimport { DisplayContext, HardwareTestTab, ScreenWidthInflectionPoint } from \"~/types\";\nimport { resolveClassName } from \"~/utils/className\";\nimport CopyrightLinkButton from \"../Copyright/CopyrightLinkButton\";\nimport { HardwareSetupDisplayContext } from \"../HardwareSetup/HardwareSetup\";\nimport HardwarePreviewJoinOptions from \"./HardwarePreviewJoinOptions\";\nimport HardwarePreviewPanel from \"./HardwarePreviewPanel\";\nimport styles from \"./HardwareTest.module.scss\";\nimport SettingsPanel from \"./SettingsPanel\";\nimport WelcomeHeading from \"./WelcomeHeading\";\n\ninterface IProps {\n\tmainButton: ReactElement;\n\tisLobby?: boolean;\n}\n\n/**\n * The HardwareTest component\n *\n * Holds the card contents for the hardware test\n *\n * @param props the props ;)\n */\nconst HardwareCardContents: FC = (props: PropsWithChildren) => {\n\tconst { isLobby, mainButton } = props;\n\n\tconst { width } = useWindowSize();\n\n\tconst currentTab = useHardwareTestState((selectors) => selectors.getHardwareTestTab(), []);\n\tconst panelClassName = resolveClassName(styles, {\n\t\tsettingsPanelPlaceholder: true,\n\t\tpanelClosed: currentTab.tab === HardwareTestTab.closed,\n\t});\n\n\treturn (\n\t\t<>\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{width >= ScreenWidthInflectionPoint && mainButton}\n\t\t\t\t\t\t\n\t\t\t\t\t\t{width > ScreenWidthInflectionPoint ? null : (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t\t{width <= ScreenWidthInflectionPoint && (\n\t\t\t\t
{mainButton}
\n\t\t\t)}\n\t\t\n\t);\n};\n\nHardwareCardContents.displayName = \"HardwareCardContents\";\n\nexport default HardwareCardContents;\n","/**\n * @copyright Copyright 2023 Epic Systems Corporation\n * @file Hardware Test Component\n * @author Max Harkins\n * @module Epic.VideoApp.Components.HardwareTest.HardwareTest\n */\n\nimport React, { FC, PropsWithChildren, ReactElement } from \"react\";\nimport { useWindowSize } from \"~/hooks\";\nimport { useLocalTrackState } from \"~/state\";\nimport { ScreenWidthInflectionPoint, StyleContext } from \"~/types\";\nimport { resolveClassName } from \"~/utils/className\";\nimport AccessibilityAlert from \"../Alerts/AccessibilityAlert\";\nimport Card from \"../Cards/Card\";\nimport CardContainer from \"../Cards/CardContainer\";\nimport CopyrightLinkButton from \"../Copyright/CopyrightLinkButton\";\nimport SimpleHeader from \"../Header/SimpleHeader\";\nimport { BackgroundStyleContextProvider } from \"../Utilities/BackgroundStyleContext\";\nimport HardwareCardContents from \"./HardwareCardContents\";\nimport styles from \"./HardwareTest.module.scss\";\n\ninterface IProps {\n\tmainButton: ReactElement;\n\tisLobby?: boolean;\n\thideHardwareTest?: boolean;\n}\n\n/**\n * The HardwareTest component\n *\n * Shows a dynamic hardware test for mobile and web views that lets users verify their hardware and display name before joining a visit\n *\n * @param props the props ;)\n */\nconst HardwareTest: FC = (props: PropsWithChildren) => {\n\tconst { isLobby, mainButton, hideHardwareTest } = props;\n\n\tconst localTrackAcquisitionStatus = useLocalTrackState(\n\t\t(selectors) => selectors.getLocalTrackAcquisitionStatus(),\n\t\t[],\n\t);\n\tconst showingWarning = localTrackAcquisitionStatus === \"showingWarning\"; // True if the alert requesting hardware permissions is being shown.\n\tconst { width } = useWindowSize();\n\n\tconst hardwareTestStyling = resolveClassName(styles, { hiddenHardwareTest: hideHardwareTest });\n\n\treturn (\n\t\t<>\n\t\t\t{!hideHardwareTest ? : }\n\t\t\t
\n\t\t\t\t{width > ScreenWidthInflectionPoint ? (\n\t\t\t\t\t<>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t) : (\n\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t)}\n\t\t\t
\n\t\t\n\t);\n};\n\nHardwareTest.displayName = \"HardwareTest\";\n\nexport default HardwareTest;\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file Standalone Hardware Test Component\n * @author Colin Walters\n * @module Epic.VideoApp.Components.HardwareTest.StandaloneHardwareTest\n */\n\nimport React, { FC, useCallback } from \"react\";\nimport { useStoreHardwareTest, useStrings } from \"~/hooks\";\nimport { useHardwareTestState } from \"~/state\";\nimport { HardwareTestStatus as Status } from \"~/types\";\nimport ActionButton from \"../Utilities/ActionButton\";\nimport HardwareTest from \"./HardwareTest\";\n\n/**\n * The StandaloneHardwareTest component\n *\n * Uses a component to test all the user's devices, and shows the\n * appropriate for retesting when either a success or failure is reached\n */\nconst StandaloneHardwareTest: FC = () => {\n\tconst status = useHardwareTestState(\n\t\t(selectors) => selectors.getTestStatus({ isStandalone: true, allowOneError: false }),\n\t\t[],\n\t);\n\n\tuseStoreHardwareTest(false);\n\n\tconst tokenNames = [\"CheckingYourHardware\", \"TestAgain\"];\n\tconst strings = useStrings(\"StandaloneHardwareTest\", tokenNames);\n\n\tlet bottomButtonText = strings[\"CheckingYourHardware\"];\n\tconst bottomButtonOnClick = useCallback(() => location.reload(), []);\n\tlet disabled = true;\n\tlet keyboardShortcut: string[] | undefined;\n\tif (status === Status.passed || status === Status.failed) {\n\t\t// In test mode, show a Test Again button when the test is complete, regardless of status\n\t\tbottomButtonText = strings[\"TestAgain\"];\n\t\tdisabled = false;\n\t\tkeyboardShortcut = [\"alt\", \"n\"];\n\t}\n\n\treturn (\n\t\t\n\t\t\t}\n\t\t/>\n\t);\n};\n\nStandaloneHardwareTest.displayName = \"StandaloneHardwareTest\";\n\nexport default StandaloneHardwareTest;\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file A loading indicator\n * @author Matt Panico\n * @module Epic.VideoApp.Components.Loading.Loading\n */\n\nimport React, { FC } from \"react\";\nimport { ITestable } from \"~/types\";\nimport SimpleCard from \"../Cards/SimpleCard\";\nimport CopyrightLinkButton from \"../Copyright/CopyrightLinkButton\";\nimport SimpleHeader from \"../Header/SimpleHeader\";\nimport Spinner from \"./Spinner\";\n\ninterface IProps extends ITestable {\n\tloadingMessage: string;\n}\n\n/**\n * The Loading component\n * @param _props The props ;)\n */\nconst Loading: FC = (props) => {\n\tconst { loadingMessage, ...mainProps } = props;\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t

{loadingMessage}

\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t\t\n\t\t\n\t);\n};\n\nLoading.displayName = \"Loading\";\n\nexport default Loading;\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file Hardware Test component\n * @author Matt Panico\n * @module Epic.VideoApp.Features.TestMode.TestMode\n */\n\nimport { RouteComponentProps } from \"@reach/router\";\nimport React, { FC } from \"react\";\nimport StandaloneHardwareTest from \"~/components/HardwareTest/StandaloneHardwareTest\";\nimport Loading from \"~/components/Loading/Loading\";\nimport FeatureWrapper from \"~/components/StandardLayout/FeatureWrapper\";\nimport { DeviceContextProvider } from \"~/components/VideoCall/DeviceContext\";\nimport { useDocumentTitle, useHardwareTestAuthentication, useSharedStrings } from \"~/hooks\";\nimport { useAuthState } from \"~/state\";\nimport { SharedStringTokens } from \"~/utils/strings\";\nimport { VideoSessionProvider } from \"~/web-core/components\";\n\n/**\n * The TestMode component\n * Handles authentication and server communications for the previsit hardware test\n *\n * @param _props The props ;)\n */\nconst TestMode: FC = (_props) => {\n\tconst JWT = useAuthState((selectors) => selectors.getJWT(), []);\n\n\tuseHardwareTestAuthentication();\n\n\tconst strings = useSharedStrings([\n\t\tSharedStringTokens.defaultPageTitle,\n\t\tSharedStringTokens.connectingToOrganization,\n\t]);\n\tuseDocumentTitle(strings[SharedStringTokens.defaultPageTitle]);\n\n\tif (!JWT) {\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t);\n\t}\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nTestMode.displayName = \"TestMode\";\n\nexport default TestMode;\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file Test Mode routes\n * @author Matt Panico\n * @module Epic.VideoApp.Features.TestMode.TestMode\n */\n\nimport { IAddRouteFunction } from \"~/app/routes\";\nimport TestMode from \"./TestMode\";\n\n/*\n *\n * IMPORTANT! READ THIS!\n *\n * The contents of this file are loaded and executed during the initial load of the application\n * in the browser even if the route is never actually accessed. DO NOT put any additional code\n * in this file, or import any addition modules as doing so would just add extra bloat to the\n * initial load / startup time for the application.\n *\n * IMPORTANT! READ THIS!\n *\n */\n\n/**\n * Return the URL used to access this page\n */\nexport function getTestModeUrl(): string {\n\treturn \"/TestMode\";\n}\n\n/**\n * Return any URLs that should redirect to this page\n */\nexport function getTestModeRedirectPaths(): string[] {\n\treturn [\"/Home/TestMode\"];\n}\n\n/**\n * Return whether or not this page requires WebRTC\n */\nexport function getTestModeRequiresWebRTC(): boolean {\n\treturn true;\n}\n\n/**\n * Register the routes associated with this page\n *\n * @param addRoute A function used to add a route\n */\nexport default function register(addRoute: IAddRouteFunction): void {\n\taddRoute(getTestModeUrl(), TestMode, getTestModeRedirectPaths(), getTestModeRequiresWebRTC());\n}\n","import react from 'react';\nimport reactDom from 'react-dom';\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n * @oncall recoil\n */\n\nfunction err(message) {\n const error = new Error(message); // In V8, Error objects keep the closure scope chain alive until the\n // err.stack property is accessed.\n\n if (error.stack === undefined) {\n // IE sets the stack only if error is thrown\n try {\n throw error;\n } catch (_) {} // eslint-disable-line fb-www/no-unused-catch-bindings, no-empty\n\n }\n\n return error;\n}\n\nvar err_1 = err;\n\n// @oss-only\n\n\nvar Recoil_err = err_1;\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n * @oncall recoil\n */\n\n// Split declaration and implementation to allow this function to pretend to\n// check for actual instance of Promise instead of something with a `then`\n// method.\n// eslint-disable-next-line no-redeclare\nfunction isPromise(p) {\n return !!p && typeof p.then === 'function';\n}\n\nvar Recoil_isPromise = isPromise;\n\nfunction nullthrows(x, message) {\n if (x != null) {\n return x;\n }\n\n throw Recoil_err(message !== null && message !== void 0 ? message : 'Got unexpected null or undefined');\n}\n\nvar Recoil_nullthrows = nullthrows;\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nclass BaseLoadable {\n getValue() {\n throw Recoil_err('BaseLoadable');\n }\n\n toPromise() {\n throw Recoil_err('BaseLoadable');\n }\n\n valueMaybe() {\n throw Recoil_err('BaseLoadable');\n }\n\n valueOrThrow() {\n // $FlowFixMe[prop-missing]\n throw Recoil_err(`Loadable expected value, but in \"${this.state}\" state`);\n }\n\n promiseMaybe() {\n throw Recoil_err('BaseLoadable');\n }\n\n promiseOrThrow() {\n // $FlowFixMe[prop-missing]\n throw Recoil_err(`Loadable expected promise, but in \"${this.state}\" state`);\n }\n\n errorMaybe() {\n throw Recoil_err('BaseLoadable');\n }\n\n errorOrThrow() {\n // $FlowFixMe[prop-missing]\n throw Recoil_err(`Loadable expected error, but in \"${this.state}\" state`);\n }\n\n is(other) {\n // $FlowFixMe[prop-missing]\n return other.state === this.state && other.contents === this.contents;\n }\n\n map(_map) {\n throw Recoil_err('BaseLoadable');\n }\n\n}\n\nclass ValueLoadable extends BaseLoadable {\n constructor(value) {\n super();\n\n _defineProperty(this, \"state\", 'hasValue');\n\n _defineProperty(this, \"contents\", void 0);\n\n this.contents = value;\n }\n\n getValue() {\n return this.contents;\n }\n\n toPromise() {\n return Promise.resolve(this.contents);\n }\n\n valueMaybe() {\n return this.contents;\n }\n\n valueOrThrow() {\n return this.contents;\n }\n\n promiseMaybe() {\n return undefined;\n }\n\n errorMaybe() {\n return undefined;\n }\n\n map(map) {\n try {\n const next = map(this.contents);\n return Recoil_isPromise(next) ? loadableWithPromise(next) : isLoadable(next) ? next : loadableWithValue(next);\n } catch (e) {\n return Recoil_isPromise(e) ? // If we \"suspended\", then try again.\n // errors and subsequent retries will be handled in 'loading' case\n // $FlowFixMe[prop-missing]\n loadableWithPromise(e.next(() => this.map(map))) : loadableWithError(e);\n }\n }\n\n}\n\nclass ErrorLoadable extends BaseLoadable {\n constructor(error) {\n super();\n\n _defineProperty(this, \"state\", 'hasError');\n\n _defineProperty(this, \"contents\", void 0);\n\n this.contents = error;\n }\n\n getValue() {\n throw this.contents;\n }\n\n toPromise() {\n return Promise.reject(this.contents);\n }\n\n valueMaybe() {\n return undefined;\n }\n\n promiseMaybe() {\n return undefined;\n }\n\n errorMaybe() {\n return this.contents;\n }\n\n errorOrThrow() {\n return this.contents;\n }\n\n map(_map) {\n // $FlowIssue[incompatible-return]\n return this;\n }\n\n}\n\nclass LoadingLoadable extends BaseLoadable {\n constructor(promise) {\n super();\n\n _defineProperty(this, \"state\", 'loading');\n\n _defineProperty(this, \"contents\", void 0);\n\n this.contents = promise;\n }\n\n getValue() {\n throw this.contents;\n }\n\n toPromise() {\n return this.contents;\n }\n\n valueMaybe() {\n return undefined;\n }\n\n promiseMaybe() {\n return this.contents;\n }\n\n promiseOrThrow() {\n return this.contents;\n }\n\n errorMaybe() {\n return undefined;\n }\n\n map(map) {\n return loadableWithPromise(this.contents.then(value => {\n const next = map(value);\n\n if (isLoadable(next)) {\n const nextLoadable = next;\n\n switch (nextLoadable.state) {\n case 'hasValue':\n return nextLoadable.contents;\n\n case 'hasError':\n throw nextLoadable.contents;\n\n case 'loading':\n return nextLoadable.contents;\n }\n } // $FlowIssue[incompatible-return]\n\n\n return next;\n }) // $FlowFixMe[incompatible-call]\n .catch(e => {\n if (Recoil_isPromise(e)) {\n // we were \"suspended,\" try again\n return e.then(() => this.map(map).contents);\n }\n\n throw e;\n }));\n }\n\n}\n\nfunction loadableWithValue(value) {\n return Object.freeze(new ValueLoadable(value));\n}\n\nfunction loadableWithError(error) {\n return Object.freeze(new ErrorLoadable(error));\n}\n\nfunction loadableWithPromise(promise) {\n return Object.freeze(new LoadingLoadable(promise));\n}\n\nfunction loadableLoading() {\n return Object.freeze(new LoadingLoadable(new Promise(() => {})));\n}\n\nfunction loadableAllArray(inputs) {\n return inputs.every(i => i.state === 'hasValue') ? loadableWithValue(inputs.map(i => i.contents)) : inputs.some(i => i.state === 'hasError') ? loadableWithError(Recoil_nullthrows(inputs.find(i => i.state === 'hasError'), 'Invalid loadable passed to loadableAll').contents) : loadableWithPromise(Promise.all(inputs.map(i => i.contents)));\n}\n\nfunction loadableAll(inputs) {\n const unwrapedInputs = Array.isArray(inputs) ? inputs : Object.getOwnPropertyNames(inputs).map(key => inputs[key]);\n const normalizedInputs = unwrapedInputs.map(x => isLoadable(x) ? x : Recoil_isPromise(x) ? loadableWithPromise(x) : loadableWithValue(x));\n const output = loadableAllArray(normalizedInputs);\n return Array.isArray(inputs) ? // $FlowIssue[incompatible-return]\n output : // Object.getOwnPropertyNames() has consistent key ordering with ES6\n // $FlowIssue[incompatible-call]\n output.map(outputs => Object.getOwnPropertyNames(inputs).reduce( // $FlowFixMe[invalid-computed-prop]\n (out, key, idx) => ({ ...out,\n [key]: outputs[idx]\n }), {}));\n}\n\nfunction isLoadable(x) {\n return x instanceof BaseLoadable;\n}\n\nconst LoadableStaticInterface = {\n of: value => Recoil_isPromise(value) ? loadableWithPromise(value) : isLoadable(value) ? value : loadableWithValue(value),\n error: error => loadableWithError(error),\n // $FlowIssue[incompatible-return]\n loading: () => loadableLoading(),\n // $FlowIssue[unclear-type]\n all: loadableAll,\n isLoadable\n};\nvar Recoil_Loadable = {\n loadableWithValue,\n loadableWithError,\n loadableWithPromise,\n loadableLoading,\n loadableAll,\n isLoadable,\n RecoilLoadable: LoadableStaticInterface\n};\n\nvar Recoil_Loadable_1 = Recoil_Loadable.loadableWithValue;\nvar Recoil_Loadable_2 = Recoil_Loadable.loadableWithError;\nvar Recoil_Loadable_3 = Recoil_Loadable.loadableWithPromise;\nvar Recoil_Loadable_4 = Recoil_Loadable.loadableLoading;\nvar Recoil_Loadable_5 = Recoil_Loadable.loadableAll;\nvar Recoil_Loadable_6 = Recoil_Loadable.isLoadable;\nvar Recoil_Loadable_7 = Recoil_Loadable.RecoilLoadable;\n\nvar Recoil_Loadable$1 = /*#__PURE__*/Object.freeze({\n __proto__: null,\n loadableWithValue: Recoil_Loadable_1,\n loadableWithError: Recoil_Loadable_2,\n loadableWithPromise: Recoil_Loadable_3,\n loadableLoading: Recoil_Loadable_4,\n loadableAll: Recoil_Loadable_5,\n isLoadable: Recoil_Loadable_6,\n RecoilLoadable: Recoil_Loadable_7\n});\n\nconst env = {\n RECOIL_DUPLICATE_ATOM_KEY_CHECKING_ENABLED: true,\n // Note: RECOIL_GKS_ENABLED settings will only be honored in OSS builds of Recoil\n RECOIL_GKS_ENABLED: new Set(['recoil_hamt_2020', 'recoil_sync_external_store', 'recoil_suppress_rerender_in_callback', 'recoil_memory_managament_2020'])\n};\n\nfunction readProcessEnvBooleanFlag(name, set) {\n var _process$env$name, _process$env$name$toL;\n\n const sanitizedValue = (_process$env$name = process.env[name]) === null || _process$env$name === void 0 ? void 0 : (_process$env$name$toL = _process$env$name.toLowerCase()) === null || _process$env$name$toL === void 0 ? void 0 : _process$env$name$toL.trim();\n\n if (sanitizedValue == null || sanitizedValue === '') {\n return;\n }\n\n const allowedValues = ['true', 'false'];\n\n if (!allowedValues.includes(sanitizedValue)) {\n throw Recoil_err(`process.env.${name} value must be 'true', 'false', or empty: ${sanitizedValue}`);\n }\n\n set(sanitizedValue === 'true');\n}\n\nfunction readProcessEnvStringArrayFlag(name, set) {\n var _process$env$name2;\n\n const sanitizedValue = (_process$env$name2 = process.env[name]) === null || _process$env$name2 === void 0 ? void 0 : _process$env$name2.trim();\n\n if (sanitizedValue == null || sanitizedValue === '') {\n return;\n }\n\n set(sanitizedValue.split(/\\s*,\\s*|\\s+/));\n}\n/**\n * Allow NodeJS/NextJS/etc to set the initial state through process.env variable\n * Note: we don't assume 'process' is available in all runtime environments\n *\n * @see https://github.com/facebookexperimental/Recoil/issues/733\n */\n\n\nfunction applyProcessEnvFlagOverrides() {\n var _process;\n\n // note: this check is needed in addition to the check below, runtime error will occur without it!\n // eslint-disable-next-line fb-www/typeof-undefined\n if (typeof process === 'undefined') {\n return;\n }\n\n if (((_process = process) === null || _process === void 0 ? void 0 : _process.env) == null) {\n return;\n }\n\n readProcessEnvBooleanFlag('RECOIL_DUPLICATE_ATOM_KEY_CHECKING_ENABLED', value => {\n env.RECOIL_DUPLICATE_ATOM_KEY_CHECKING_ENABLED = value;\n });\n readProcessEnvStringArrayFlag('RECOIL_GKS_ENABLED', value => {\n value.forEach(gk => {\n env.RECOIL_GKS_ENABLED.add(gk);\n });\n });\n}\n\napplyProcessEnvFlagOverrides();\nvar Recoil_RecoilEnv = env;\n\nfunction Recoil_gkx_OSS(gk) {\n return Recoil_RecoilEnv.RECOIL_GKS_ENABLED.has(gk);\n}\n\nRecoil_gkx_OSS.setPass = gk => {\n Recoil_RecoilEnv.RECOIL_GKS_ENABLED.add(gk);\n};\n\nRecoil_gkx_OSS.setFail = gk => {\n Recoil_RecoilEnv.RECOIL_GKS_ENABLED.delete(gk);\n};\n\nRecoil_gkx_OSS.clear = () => {\n Recoil_RecoilEnv.RECOIL_GKS_ENABLED.clear();\n};\n\nvar Recoil_gkx = Recoil_gkx_OSS; // @oss-only\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n * @oncall recoil\n */\n\nfunction recoverableViolation(message, _projectName, {\n error\n} = {}) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(message, error);\n }\n\n return null;\n}\n\nvar recoverableViolation_1 = recoverableViolation;\n\n// @oss-only\n\n\nvar Recoil_recoverableViolation = recoverableViolation_1;\n\nvar _createMutableSource, _useMutableSource, _useSyncExternalStore;\n\n\n\n\n\n\n\nconst createMutableSource = // flowlint-next-line unclear-type:off\n(_createMutableSource = react.createMutableSource) !== null && _createMutableSource !== void 0 ? _createMutableSource : react.unstable_createMutableSource;\nconst useMutableSource = // flowlint-next-line unclear-type:off\n(_useMutableSource = react.useMutableSource) !== null && _useMutableSource !== void 0 ? _useMutableSource : react.unstable_useMutableSource; // https://github.com/reactwg/react-18/discussions/86\n\nconst useSyncExternalStore = // flowlint-next-line unclear-type:off\n(_useSyncExternalStore = react.useSyncExternalStore) !== null && _useSyncExternalStore !== void 0 ? _useSyncExternalStore : // flowlint-next-line unclear-type:off\nreact.unstable_useSyncExternalStore;\nlet ReactRendererVersionMismatchWarnOnce = false; // Check if the current renderer supports `useSyncExternalStore()`.\n// Since React goes through a proxy dispatcher and the current renderer can\n// change we can't simply check if `React.useSyncExternalStore()` is defined.\n\nfunction currentRendererSupportsUseSyncExternalStore() {\n var _ReactCurrentDispatch;\n\n // $FlowFixMe[incompatible-use]\n const {\n ReactCurrentDispatcher,\n ReactCurrentOwner\n } =\n /* $FlowFixMe[prop-missing] This workaround was approved as a safer mechanism\n * to detect if the current renderer supports useSyncExternalStore()\n * https://fb.workplace.com/groups/reactjs/posts/9558682330846963/ */\n react.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n const dispatcher = (_ReactCurrentDispatch = ReactCurrentDispatcher === null || ReactCurrentDispatcher === void 0 ? void 0 : ReactCurrentDispatcher.current) !== null && _ReactCurrentDispatch !== void 0 ? _ReactCurrentDispatch : ReactCurrentOwner.currentDispatcher;\n const isUseSyncExternalStoreSupported = dispatcher.useSyncExternalStore != null;\n\n if (useSyncExternalStore && !isUseSyncExternalStoreSupported && !ReactRendererVersionMismatchWarnOnce) {\n ReactRendererVersionMismatchWarnOnce = true;\n Recoil_recoverableViolation('A React renderer without React 18+ API support is being used with React 18+.');\n }\n\n return isUseSyncExternalStoreSupported;\n}\n\n/**\n * mode: The React API and approach to use for syncing state with React\n * early: Re-renders from Recoil updates occur:\n * 1) earlier\n * 2) in sync with React updates in the same batch\n * 3) before transaction observers instead of after.\n * concurrent: Is the current mode compatible with Concurrent Mode and useTransition()\n */\nfunction reactMode() {\n // NOTE: This mode is currently broken with some Suspense cases\n // see Recoil_selector-test.js\n if (Recoil_gkx('recoil_transition_support')) {\n return {\n mode: 'TRANSITION_SUPPORT',\n early: true,\n concurrent: true\n };\n }\n\n if (Recoil_gkx('recoil_sync_external_store') && useSyncExternalStore != null) {\n return {\n mode: 'SYNC_EXTERNAL_STORE',\n early: true,\n concurrent: false\n };\n }\n\n if (Recoil_gkx('recoil_mutable_source') && useMutableSource != null && typeof window !== 'undefined' && !window.$disableRecoilValueMutableSource_TEMP_HACK_DO_NOT_USE) {\n return Recoil_gkx('recoil_suppress_rerender_in_callback') ? {\n mode: 'MUTABLE_SOURCE',\n early: true,\n concurrent: true\n } : {\n mode: 'MUTABLE_SOURCE',\n early: false,\n concurrent: false\n };\n }\n\n return Recoil_gkx('recoil_suppress_rerender_in_callback') ? {\n mode: 'LEGACY',\n early: true,\n concurrent: false\n } : {\n mode: 'LEGACY',\n early: false,\n concurrent: false\n };\n} // TODO Need to figure out if there is a standard/open-source equivalent to see if hot module replacement is happening:\n\n\nfunction isFastRefreshEnabled() {\n // @fb-only: const {isAcceptingUpdate} = require('__debug');\n // @fb-only: return typeof isAcceptingUpdate === 'function' && isAcceptingUpdate();\n return false; // @oss-only\n}\n\nvar Recoil_ReactMode = {\n createMutableSource,\n useMutableSource,\n useSyncExternalStore,\n currentRendererSupportsUseSyncExternalStore,\n reactMode,\n isFastRefreshEnabled\n};\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n * @oncall recoil\n */\n\n// eslint-disable-next-line no-unused-vars\nclass AbstractRecoilValue {\n constructor(newKey) {\n _defineProperty(this, \"key\", void 0);\n\n this.key = newKey;\n }\n\n toJSON() {\n return {\n key: this.key\n };\n }\n\n}\n\nclass RecoilState extends AbstractRecoilValue {}\n\nclass RecoilValueReadOnly extends AbstractRecoilValue {}\n\nfunction isRecoilValue(x) {\n return x instanceof RecoilState || x instanceof RecoilValueReadOnly;\n}\n\nvar Recoil_RecoilValue = {\n AbstractRecoilValue,\n RecoilState,\n RecoilValueReadOnly,\n isRecoilValue\n};\n\nvar Recoil_RecoilValue_1 = Recoil_RecoilValue.AbstractRecoilValue;\nvar Recoil_RecoilValue_2 = Recoil_RecoilValue.RecoilState;\nvar Recoil_RecoilValue_3 = Recoil_RecoilValue.RecoilValueReadOnly;\nvar Recoil_RecoilValue_4 = Recoil_RecoilValue.isRecoilValue;\n\nvar Recoil_RecoilValue$1 = /*#__PURE__*/Object.freeze({\n __proto__: null,\n AbstractRecoilValue: Recoil_RecoilValue_1,\n RecoilState: Recoil_RecoilValue_2,\n RecoilValueReadOnly: Recoil_RecoilValue_3,\n isRecoilValue: Recoil_RecoilValue_4\n});\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n * @oncall recoil\n */\n\nfunction sprintf(format, ...args) {\n let index = 0;\n return format.replace(/%s/g, () => String(args[index++]));\n}\n\nvar sprintf_1 = sprintf;\n\nfunction expectationViolation(format, ...args) {\n if (process.env.NODE_ENV !== \"production\") {\n const message = sprintf_1.call(null, format, ...args);\n const error = new Error(message);\n error.name = 'Expectation Violation';\n console.error(error);\n }\n}\n\nvar expectationViolation_1 = expectationViolation;\n\n// @oss-only\n\n\nvar Recoil_expectationViolation = expectationViolation_1;\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n * @oncall recoil\n */\n/**\n * Creates a new iterable whose output is generated by passing the input\n * iterable's values through the mapper function.\n */\n\nfunction mapIterable(iterable, callback) {\n // Use generator to create iterable/iterator\n return function* () {\n let index = 0;\n\n for (const value of iterable) {\n yield callback(value, index++);\n }\n }();\n}\n\nvar Recoil_mapIterable = mapIterable;\n\nconst {\n isFastRefreshEnabled: isFastRefreshEnabled$1\n} = Recoil_ReactMode;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nclass DefaultValue {}\n\nconst DEFAULT_VALUE = new DefaultValue();\n// flowlint-next-line unclear-type:off\nconst nodes = new Map(); // flowlint-next-line unclear-type:off\n\nconst recoilValues = new Map();\n/* eslint-disable no-redeclare */\n\nfunction recoilValuesForKeys(keys) {\n return Recoil_mapIterable(keys, key => Recoil_nullthrows(recoilValues.get(key)));\n}\n\nfunction checkForDuplicateAtomKey(key) {\n if (nodes.has(key)) {\n const message = `Duplicate atom key \"${key}\". This is a FATAL ERROR in\n production. But it is safe to ignore this warning if it occurred because of\n hot module replacement.`;\n\n if (process.env.NODE_ENV !== \"production\") {\n // TODO Figure this out for open-source\n if (!isFastRefreshEnabled$1()) {\n Recoil_expectationViolation(message, 'recoil');\n }\n } else {\n // @fb-only: recoverableViolation(message, 'recoil');\n console.warn(message); // @oss-only\n }\n }\n}\n\nfunction registerNode(node) {\n if (Recoil_RecoilEnv.RECOIL_DUPLICATE_ATOM_KEY_CHECKING_ENABLED) {\n checkForDuplicateAtomKey(node.key);\n }\n\n nodes.set(node.key, node);\n const recoilValue = node.set == null ? new Recoil_RecoilValue$1.RecoilValueReadOnly(node.key) : new Recoil_RecoilValue$1.RecoilState(node.key);\n recoilValues.set(node.key, recoilValue);\n return recoilValue;\n}\n/* eslint-enable no-redeclare */\n\n\nclass NodeMissingError extends Error {} // flowlint-next-line unclear-type:off\n\n\nfunction getNode(key) {\n const node = nodes.get(key);\n\n if (node == null) {\n throw new NodeMissingError(`Missing definition for RecoilValue: \"${key}\"\"`);\n }\n\n return node;\n} // flowlint-next-line unclear-type:off\n\n\nfunction getNodeMaybe(key) {\n return nodes.get(key);\n}\n\nconst configDeletionHandlers = new Map();\n\nfunction deleteNodeConfigIfPossible(key) {\n var _node$shouldDeleteCon;\n\n if (!Recoil_gkx('recoil_memory_managament_2020')) {\n return;\n }\n\n const node = nodes.get(key);\n\n if (node !== null && node !== void 0 && (_node$shouldDeleteCon = node.shouldDeleteConfigOnRelease) !== null && _node$shouldDeleteCon !== void 0 && _node$shouldDeleteCon.call(node)) {\n var _getConfigDeletionHan;\n\n nodes.delete(key);\n (_getConfigDeletionHan = getConfigDeletionHandler(key)) === null || _getConfigDeletionHan === void 0 ? void 0 : _getConfigDeletionHan();\n configDeletionHandlers.delete(key);\n }\n}\n\nfunction setConfigDeletionHandler(key, fn) {\n if (!Recoil_gkx('recoil_memory_managament_2020')) {\n return;\n }\n\n if (fn === undefined) {\n configDeletionHandlers.delete(key);\n } else {\n configDeletionHandlers.set(key, fn);\n }\n}\n\nfunction getConfigDeletionHandler(key) {\n return configDeletionHandlers.get(key);\n}\n\nvar Recoil_Node = {\n nodes,\n recoilValues,\n registerNode,\n getNode,\n getNodeMaybe,\n deleteNodeConfigIfPossible,\n setConfigDeletionHandler,\n getConfigDeletionHandler,\n recoilValuesForKeys,\n NodeMissingError,\n DefaultValue,\n DEFAULT_VALUE\n};\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n * @oncall recoil\n */\n\nfunction enqueueExecution(s, f) {\n f();\n}\n\nvar Recoil_Queue = {\n enqueueExecution\n};\n\nfunction createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nvar hamt_1 = createCommonjsModule(function (module) {\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n/**\n @fileOverview Hash Array Mapped Trie.\n\n Code based on: https://github.com/exclipy/pdata\n*/\n\n\nvar hamt = {}; // export\n\n/* Configuration\n ******************************************************************************/\n\nvar SIZE = 5;\nvar BUCKET_SIZE = Math.pow(2, SIZE);\nvar MASK = BUCKET_SIZE - 1;\nvar MAX_INDEX_NODE = BUCKET_SIZE / 2;\nvar MIN_ARRAY_NODE = BUCKET_SIZE / 4;\n/*\n ******************************************************************************/\n\nvar nothing = {};\n\nvar constant = function constant(x) {\n return function () {\n return x;\n };\n};\n/**\n Get 32 bit hash of string.\n\n Based on:\n http://stackoverflow.com/questions/7616461/generate-a-hash-from-string-in-javascript-jquery\n*/\n\n\nvar hash = hamt.hash = function (str) {\n var type = typeof str === 'undefined' ? 'undefined' : _typeof(str);\n if (type === 'number') return str;\n if (type !== 'string') str += '';\n var hash = 0;\n\n for (var i = 0, len = str.length; i < len; ++i) {\n var c = str.charCodeAt(i);\n hash = (hash << 5) - hash + c | 0;\n }\n\n return hash;\n};\n/* Bit Ops\n ******************************************************************************/\n\n/**\n Hamming weight.\n\n Taken from: http://jsperf.com/hamming-weight\n*/\n\n\nvar popcount = function popcount(x) {\n x -= x >> 1 & 0x55555555;\n x = (x & 0x33333333) + (x >> 2 & 0x33333333);\n x = x + (x >> 4) & 0x0f0f0f0f;\n x += x >> 8;\n x += x >> 16;\n return x & 0x7f;\n};\n\nvar hashFragment = function hashFragment(shift, h) {\n return h >>> shift & MASK;\n};\n\nvar toBitmap = function toBitmap(x) {\n return 1 << x;\n};\n\nvar fromBitmap = function fromBitmap(bitmap, bit) {\n return popcount(bitmap & bit - 1);\n};\n/* Array Ops\n ******************************************************************************/\n\n/**\n Set a value in an array.\n\n @param mutate Should the input array be mutated?\n @param at Index to change.\n @param v New value\n @param arr Array.\n*/\n\n\nvar arrayUpdate = function arrayUpdate(mutate, at, v, arr) {\n var out = arr;\n\n if (!mutate) {\n var len = arr.length;\n out = new Array(len);\n\n for (var i = 0; i < len; ++i) {\n out[i] = arr[i];\n }\n }\n\n out[at] = v;\n return out;\n};\n/**\n Remove a value from an array.\n\n @param mutate Should the input array be mutated?\n @param at Index to remove.\n @param arr Array.\n*/\n\n\nvar arraySpliceOut = function arraySpliceOut(mutate, at, arr) {\n var newLen = arr.length - 1;\n var i = 0;\n var g = 0;\n var out = arr;\n\n if (mutate) {\n i = g = at;\n } else {\n out = new Array(newLen);\n\n while (i < at) {\n out[g++] = arr[i++];\n }\n }\n\n ++i;\n\n while (i <= newLen) {\n out[g++] = arr[i++];\n }\n\n if (mutate) {\n out.length = newLen;\n }\n\n return out;\n};\n/**\n Insert a value into an array.\n\n @param mutate Should the input array be mutated?\n @param at Index to insert at.\n @param v Value to insert,\n @param arr Array.\n*/\n\n\nvar arraySpliceIn = function arraySpliceIn(mutate, at, v, arr) {\n var len = arr.length;\n\n if (mutate) {\n var _i = len;\n\n while (_i >= at) {\n arr[_i--] = arr[_i];\n }\n\n arr[at] = v;\n return arr;\n }\n\n var i = 0,\n g = 0;\n var out = new Array(len + 1);\n\n while (i < at) {\n out[g++] = arr[i++];\n }\n\n out[at] = v;\n\n while (i < len) {\n out[++g] = arr[i++];\n }\n\n return out;\n};\n/* Node Structures\n ******************************************************************************/\n\n\nvar LEAF = 1;\nvar COLLISION = 2;\nvar INDEX = 3;\nvar ARRAY = 4;\n/**\n Empty node.\n*/\n\nvar empty = {\n __hamt_isEmpty: true\n};\n\nvar isEmptyNode = function isEmptyNode(x) {\n return x === empty || x && x.__hamt_isEmpty;\n};\n/**\n Leaf holding a value.\n\n @member edit Edit of the node.\n @member hash Hash of key.\n @member key Key.\n @member value Value stored.\n*/\n\n\nvar Leaf = function Leaf(edit, hash, key, value) {\n return {\n type: LEAF,\n edit: edit,\n hash: hash,\n key: key,\n value: value,\n _modify: Leaf__modify\n };\n};\n/**\n Leaf holding multiple values with the same hash but different keys.\n\n @member edit Edit of the node.\n @member hash Hash of key.\n @member children Array of collision children node.\n*/\n\n\nvar Collision = function Collision(edit, hash, children) {\n return {\n type: COLLISION,\n edit: edit,\n hash: hash,\n children: children,\n _modify: Collision__modify\n };\n};\n/**\n Internal node with a sparse set of children.\n\n Uses a bitmap and array to pack children.\n\n @member edit Edit of the node.\n @member mask Bitmap that encode the positions of children in the array.\n @member children Array of child nodes.\n*/\n\n\nvar IndexedNode = function IndexedNode(edit, mask, children) {\n return {\n type: INDEX,\n edit: edit,\n mask: mask,\n children: children,\n _modify: IndexedNode__modify\n };\n};\n/**\n Internal node with many children.\n\n @member edit Edit of the node.\n @member size Number of children.\n @member children Array of child nodes.\n*/\n\n\nvar ArrayNode = function ArrayNode(edit, size, children) {\n return {\n type: ARRAY,\n edit: edit,\n size: size,\n children: children,\n _modify: ArrayNode__modify\n };\n};\n/**\n Is `node` a leaf node?\n*/\n\n\nvar isLeaf = function isLeaf(node) {\n return node === empty || node.type === LEAF || node.type === COLLISION;\n};\n/* Internal node operations.\n ******************************************************************************/\n\n/**\n Expand an indexed node into an array node.\n\n @param edit Current edit.\n @param frag Index of added child.\n @param child Added child.\n @param mask Index node mask before child added.\n @param subNodes Index node children before child added.\n*/\n\n\nvar expand = function expand(edit, frag, child, bitmap, subNodes) {\n var arr = [];\n var bit = bitmap;\n var count = 0;\n\n for (var i = 0; bit; ++i) {\n if (bit & 1) arr[i] = subNodes[count++];\n bit >>>= 1;\n }\n\n arr[frag] = child;\n return ArrayNode(edit, count + 1, arr);\n};\n/**\n Collapse an array node into a indexed node.\n\n @param edit Current edit.\n @param count Number of elements in new array.\n @param removed Index of removed element.\n @param elements Array node children before remove.\n*/\n\n\nvar pack = function pack(edit, count, removed, elements) {\n var children = new Array(count - 1);\n var g = 0;\n var bitmap = 0;\n\n for (var i = 0, len = elements.length; i < len; ++i) {\n if (i !== removed) {\n var elem = elements[i];\n\n if (elem && !isEmptyNode(elem)) {\n children[g++] = elem;\n bitmap |= 1 << i;\n }\n }\n }\n\n return IndexedNode(edit, bitmap, children);\n};\n/**\n Merge two leaf nodes.\n\n @param shift Current shift.\n @param h1 Node 1 hash.\n @param n1 Node 1.\n @param h2 Node 2 hash.\n @param n2 Node 2.\n*/\n\n\nvar mergeLeaves = function mergeLeaves(edit, shift, h1, n1, h2, n2) {\n if (h1 === h2) return Collision(edit, h1, [n2, n1]);\n var subH1 = hashFragment(shift, h1);\n var subH2 = hashFragment(shift, h2);\n return IndexedNode(edit, toBitmap(subH1) | toBitmap(subH2), subH1 === subH2 ? [mergeLeaves(edit, shift + SIZE, h1, n1, h2, n2)] : subH1 < subH2 ? [n1, n2] : [n2, n1]);\n};\n/**\n Update an entry in a collision list.\n\n @param mutate Should mutation be used?\n @param edit Current edit.\n @param keyEq Key compare function.\n @param hash Hash of collision.\n @param list Collision list.\n @param f Update function.\n @param k Key to update.\n @param size Size ref.\n*/\n\n\nvar updateCollisionList = function updateCollisionList(mutate, edit, keyEq, h, list, f, k, size) {\n var len = list.length;\n\n for (var i = 0; i < len; ++i) {\n var child = list[i];\n\n if (keyEq(k, child.key)) {\n var value = child.value;\n\n var _newValue = f(value);\n\n if (_newValue === value) return list;\n\n if (_newValue === nothing) {\n --size.value;\n return arraySpliceOut(mutate, i, list);\n }\n\n return arrayUpdate(mutate, i, Leaf(edit, h, k, _newValue), list);\n }\n }\n\n var newValue = f();\n if (newValue === nothing) return list;\n ++size.value;\n return arrayUpdate(mutate, len, Leaf(edit, h, k, newValue), list);\n};\n\nvar canEditNode = function canEditNode(edit, node) {\n return edit === node.edit;\n};\n/* Editing\n ******************************************************************************/\n\n\nvar Leaf__modify = function Leaf__modify(edit, keyEq, shift, f, h, k, size) {\n if (keyEq(k, this.key)) {\n var _v = f(this.value);\n\n if (_v === this.value) return this;else if (_v === nothing) {\n --size.value;\n return empty;\n }\n\n if (canEditNode(edit, this)) {\n this.value = _v;\n return this;\n }\n\n return Leaf(edit, h, k, _v);\n }\n\n var v = f();\n if (v === nothing) return this;\n ++size.value;\n return mergeLeaves(edit, shift, this.hash, this, h, Leaf(edit, h, k, v));\n};\n\nvar Collision__modify = function Collision__modify(edit, keyEq, shift, f, h, k, size) {\n if (h === this.hash) {\n var canEdit = canEditNode(edit, this);\n var list = updateCollisionList(canEdit, edit, keyEq, this.hash, this.children, f, k, size);\n if (list === this.children) return this;\n return list.length > 1 ? Collision(edit, this.hash, list) : list[0]; // collapse single element collision list\n }\n\n var v = f();\n if (v === nothing) return this;\n ++size.value;\n return mergeLeaves(edit, shift, this.hash, this, h, Leaf(edit, h, k, v));\n};\n\nvar IndexedNode__modify = function IndexedNode__modify(edit, keyEq, shift, f, h, k, size) {\n var mask = this.mask;\n var children = this.children;\n var frag = hashFragment(shift, h);\n var bit = toBitmap(frag);\n var indx = fromBitmap(mask, bit);\n var exists = mask & bit;\n var current = exists ? children[indx] : empty;\n\n var child = current._modify(edit, keyEq, shift + SIZE, f, h, k, size);\n\n if (current === child) return this;\n var canEdit = canEditNode(edit, this);\n var bitmap = mask;\n var newChildren = void 0;\n\n if (exists && isEmptyNode(child)) {\n // remove\n bitmap &= ~bit;\n if (!bitmap) return empty;\n if (children.length <= 2 && isLeaf(children[indx ^ 1])) return children[indx ^ 1]; // collapse\n\n newChildren = arraySpliceOut(canEdit, indx, children);\n } else if (!exists && !isEmptyNode(child)) {\n // add\n if (children.length >= MAX_INDEX_NODE) return expand(edit, frag, child, mask, children);\n bitmap |= bit;\n newChildren = arraySpliceIn(canEdit, indx, child, children);\n } else {\n // modify\n newChildren = arrayUpdate(canEdit, indx, child, children);\n }\n\n if (canEdit) {\n this.mask = bitmap;\n this.children = newChildren;\n return this;\n }\n\n return IndexedNode(edit, bitmap, newChildren);\n};\n\nvar ArrayNode__modify = function ArrayNode__modify(edit, keyEq, shift, f, h, k, size) {\n var count = this.size;\n var children = this.children;\n var frag = hashFragment(shift, h);\n var child = children[frag];\n\n var newChild = (child || empty)._modify(edit, keyEq, shift + SIZE, f, h, k, size);\n\n if (child === newChild) return this;\n var canEdit = canEditNode(edit, this);\n var newChildren = void 0;\n\n if (isEmptyNode(child) && !isEmptyNode(newChild)) {\n // add\n ++count;\n newChildren = arrayUpdate(canEdit, frag, newChild, children);\n } else if (!isEmptyNode(child) && isEmptyNode(newChild)) {\n // remove\n --count;\n if (count <= MIN_ARRAY_NODE) return pack(edit, count, frag, children);\n newChildren = arrayUpdate(canEdit, frag, empty, children);\n } else {\n // modify\n newChildren = arrayUpdate(canEdit, frag, newChild, children);\n }\n\n if (canEdit) {\n this.size = count;\n this.children = newChildren;\n return this;\n }\n\n return ArrayNode(edit, count, newChildren);\n};\n\nempty._modify = function (edit, keyEq, shift, f, h, k, size) {\n var v = f();\n if (v === nothing) return empty;\n ++size.value;\n return Leaf(edit, h, k, v);\n};\n/*\n ******************************************************************************/\n\n\nfunction Map(editable, edit, config, root, size) {\n this._editable = editable;\n this._edit = edit;\n this._config = config;\n this._root = root;\n this._size = size;\n}\n\nMap.prototype.setTree = function (newRoot, newSize) {\n if (this._editable) {\n this._root = newRoot;\n this._size = newSize;\n return this;\n }\n\n return newRoot === this._root ? this : new Map(this._editable, this._edit, this._config, newRoot, newSize);\n};\n/* Queries\n ******************************************************************************/\n\n/**\n Lookup the value for `key` in `map` using a custom `hash`.\n\n Returns the value or `alt` if none.\n*/\n\n\nvar tryGetHash = hamt.tryGetHash = function (alt, hash, key, map) {\n var node = map._root;\n var shift = 0;\n var keyEq = map._config.keyEq;\n\n while (true) {\n switch (node.type) {\n case LEAF:\n {\n return keyEq(key, node.key) ? node.value : alt;\n }\n\n case COLLISION:\n {\n if (hash === node.hash) {\n var children = node.children;\n\n for (var i = 0, len = children.length; i < len; ++i) {\n var child = children[i];\n if (keyEq(key, child.key)) return child.value;\n }\n }\n\n return alt;\n }\n\n case INDEX:\n {\n var frag = hashFragment(shift, hash);\n var bit = toBitmap(frag);\n\n if (node.mask & bit) {\n node = node.children[fromBitmap(node.mask, bit)];\n shift += SIZE;\n break;\n }\n\n return alt;\n }\n\n case ARRAY:\n {\n node = node.children[hashFragment(shift, hash)];\n\n if (node) {\n shift += SIZE;\n break;\n }\n\n return alt;\n }\n\n default:\n return alt;\n }\n }\n};\n\nMap.prototype.tryGetHash = function (alt, hash, key) {\n return tryGetHash(alt, hash, key, this);\n};\n/**\n Lookup the value for `key` in `map` using internal hash function.\n\n @see `tryGetHash`\n*/\n\n\nvar tryGet = hamt.tryGet = function (alt, key, map) {\n return tryGetHash(alt, map._config.hash(key), key, map);\n};\n\nMap.prototype.tryGet = function (alt, key) {\n return tryGet(alt, key, this);\n};\n/**\n Lookup the value for `key` in `map` using a custom `hash`.\n\n Returns the value or `undefined` if none.\n*/\n\n\nvar getHash = hamt.getHash = function (hash, key, map) {\n return tryGetHash(undefined, hash, key, map);\n};\n\nMap.prototype.getHash = function (hash, key) {\n return getHash(hash, key, this);\n};\n/**\n Lookup the value for `key` in `map` using internal hash function.\n\n @see `get`\n*/\n\n\nvar get = hamt.get = function (key, map) {\n return tryGetHash(undefined, map._config.hash(key), key, map);\n};\n\nMap.prototype.get = function (key, alt) {\n return tryGet(alt, key, this);\n};\n/**\n Does an entry exist for `key` in `map`? Uses custom `hash`.\n*/\n\n\nvar hasHash = hamt.has = function (hash, key, map) {\n return tryGetHash(nothing, hash, key, map) !== nothing;\n};\n\nMap.prototype.hasHash = function (hash, key) {\n return hasHash(hash, key, this);\n};\n/**\n Does an entry exist for `key` in `map`? Uses internal hash function.\n*/\n\n\nvar has = hamt.has = function (key, map) {\n return hasHash(map._config.hash(key), key, map);\n};\n\nMap.prototype.has = function (key) {\n return has(key, this);\n};\n\nvar defKeyCompare = function defKeyCompare(x, y) {\n return x === y;\n};\n/**\n Create an empty map.\n\n @param config Configuration.\n*/\n\n\nhamt.make = function (config) {\n return new Map(0, 0, {\n keyEq: config && config.keyEq || defKeyCompare,\n hash: config && config.hash || hash\n }, empty, 0);\n};\n/**\n Empty map.\n*/\n\n\nhamt.empty = hamt.make();\n/**\n Does `map` contain any elements?\n*/\n\nvar isEmpty = hamt.isEmpty = function (map) {\n return map && !!isEmptyNode(map._root);\n};\n\nMap.prototype.isEmpty = function () {\n return isEmpty(this);\n};\n/* Updates\n ******************************************************************************/\n\n/**\n Alter the value stored for `key` in `map` using function `f` using\n custom hash.\n\n `f` is invoked with the current value for `k` if it exists,\n or no arguments if no such value exists. `modify` will always either\n update or insert a value into the map.\n\n Returns a map with the modified value. Does not alter `map`.\n*/\n\n\nvar modifyHash = hamt.modifyHash = function (f, hash, key, map) {\n var size = {\n value: map._size\n };\n\n var newRoot = map._root._modify(map._editable ? map._edit : NaN, map._config.keyEq, 0, f, hash, key, size);\n\n return map.setTree(newRoot, size.value);\n};\n\nMap.prototype.modifyHash = function (hash, key, f) {\n return modifyHash(f, hash, key, this);\n};\n/**\n Alter the value stored for `key` in `map` using function `f` using\n internal hash function.\n\n @see `modifyHash`\n*/\n\n\nvar modify = hamt.modify = function (f, key, map) {\n return modifyHash(f, map._config.hash(key), key, map);\n};\n\nMap.prototype.modify = function (key, f) {\n return modify(f, key, this);\n};\n/**\n Store `value` for `key` in `map` using custom `hash`.\n\n Returns a map with the modified value. Does not alter `map`.\n*/\n\n\nvar setHash = hamt.setHash = function (hash, key, value, map) {\n return modifyHash(constant(value), hash, key, map);\n};\n\nMap.prototype.setHash = function (hash, key, value) {\n return setHash(hash, key, value, this);\n};\n/**\n Store `value` for `key` in `map` using internal hash function.\n\n @see `setHash`\n*/\n\n\nvar set = hamt.set = function (key, value, map) {\n return setHash(map._config.hash(key), key, value, map);\n};\n\nMap.prototype.set = function (key, value) {\n return set(key, value, this);\n};\n/**\n Remove the entry for `key` in `map`.\n\n Returns a map with the value removed. Does not alter `map`.\n*/\n\n\nvar del = constant(nothing);\n\nvar removeHash = hamt.removeHash = function (hash, key, map) {\n return modifyHash(del, hash, key, map);\n};\n\nMap.prototype.removeHash = Map.prototype.deleteHash = function (hash, key) {\n return removeHash(hash, key, this);\n};\n/**\n Remove the entry for `key` in `map` using internal hash function.\n\n @see `removeHash`\n*/\n\n\nvar remove = hamt.remove = function (key, map) {\n return removeHash(map._config.hash(key), key, map);\n};\n\nMap.prototype.remove = Map.prototype.delete = function (key) {\n return remove(key, this);\n};\n/* Mutation\n ******************************************************************************/\n\n/**\n Mark `map` as mutable.\n */\n\n\nvar beginMutation = hamt.beginMutation = function (map) {\n return new Map(map._editable + 1, map._edit + 1, map._config, map._root, map._size);\n};\n\nMap.prototype.beginMutation = function () {\n return beginMutation(this);\n};\n/**\n Mark `map` as immutable.\n */\n\n\nvar endMutation = hamt.endMutation = function (map) {\n map._editable = map._editable && map._editable - 1;\n return map;\n};\n\nMap.prototype.endMutation = function () {\n return endMutation(this);\n};\n/**\n Mutate `map` within the context of `f`.\n @param f\n @param map HAMT\n*/\n\n\nvar mutate = hamt.mutate = function (f, map) {\n var transient = beginMutation(map);\n f(transient);\n return endMutation(transient);\n};\n\nMap.prototype.mutate = function (f) {\n return mutate(f, this);\n};\n/* Traversal\n ******************************************************************************/\n\n/**\n Apply a continuation.\n*/\n\n\nvar appk = function appk(k) {\n return k && lazyVisitChildren(k[0], k[1], k[2], k[3], k[4]);\n};\n/**\n Recursively visit all values stored in an array of nodes lazily.\n*/\n\n\nvar lazyVisitChildren = function lazyVisitChildren(len, children, i, f, k) {\n while (i < len) {\n var child = children[i++];\n if (child && !isEmptyNode(child)) return lazyVisit(child, f, [len, children, i, f, k]);\n }\n\n return appk(k);\n};\n/**\n Recursively visit all values stored in `node` lazily.\n*/\n\n\nvar lazyVisit = function lazyVisit(node, f, k) {\n switch (node.type) {\n case LEAF:\n return {\n value: f(node),\n rest: k\n };\n\n case COLLISION:\n case ARRAY:\n case INDEX:\n var children = node.children;\n return lazyVisitChildren(children.length, children, 0, f, k);\n\n default:\n return appk(k);\n }\n};\n\nvar DONE = {\n done: true\n};\n/**\n Javascript iterator over a map.\n*/\n\nfunction MapIterator(v) {\n this.v = v;\n}\n\nMapIterator.prototype.next = function () {\n if (!this.v) return DONE;\n var v0 = this.v;\n this.v = appk(v0.rest);\n return v0;\n};\n\nMapIterator.prototype[Symbol.iterator] = function () {\n return this;\n};\n/**\n Lazily visit each value in map with function `f`.\n*/\n\n\nvar visit = function visit(map, f) {\n return new MapIterator(lazyVisit(map._root, f));\n};\n/**\n Get a Javascsript iterator of `map`.\n\n Iterates over `[key, value]` arrays.\n*/\n\n\nvar buildPairs = function buildPairs(x) {\n return [x.key, x.value];\n};\n\nvar entries = hamt.entries = function (map) {\n return visit(map, buildPairs);\n};\n\nMap.prototype.entries = Map.prototype[Symbol.iterator] = function () {\n return entries(this);\n};\n/**\n Get array of all keys in `map`.\n\n Order is not guaranteed.\n*/\n\n\nvar buildKeys = function buildKeys(x) {\n return x.key;\n};\n\nvar keys = hamt.keys = function (map) {\n return visit(map, buildKeys);\n};\n\nMap.prototype.keys = function () {\n return keys(this);\n};\n/**\n Get array of all values in `map`.\n\n Order is not guaranteed, duplicates are preserved.\n*/\n\n\nvar buildValues = function buildValues(x) {\n return x.value;\n};\n\nvar values = hamt.values = Map.prototype.values = function (map) {\n return visit(map, buildValues);\n};\n\nMap.prototype.values = function () {\n return values(this);\n};\n/* Fold\n ******************************************************************************/\n\n/**\n Visit every entry in the map, aggregating data.\n\n Order of nodes is not guaranteed.\n\n @param f Function mapping accumulated value, value, and key to new value.\n @param z Starting value.\n @param m HAMT\n*/\n\n\nvar fold = hamt.fold = function (f, z, m) {\n var root = m._root;\n if (root.type === LEAF) return f(z, root.value, root.key);\n var toVisit = [root.children];\n var children = void 0;\n\n while (children = toVisit.pop()) {\n for (var i = 0, len = children.length; i < len;) {\n var child = children[i++];\n\n if (child && child.type) {\n if (child.type === LEAF) z = f(z, child.value, child.key);else toVisit.push(child.children);\n }\n }\n }\n\n return z;\n};\n\nMap.prototype.fold = function (f, z) {\n return fold(f, z, this);\n};\n/**\n Visit every entry in the map, aggregating data.\n\n Order of nodes is not guaranteed.\n\n @param f Function invoked with value and key\n @param map HAMT\n*/\n\n\nvar forEach = hamt.forEach = function (f, map) {\n return fold(function (_, value, key) {\n return f(value, key, map);\n }, null, map);\n};\n\nMap.prototype.forEach = function (f) {\n return forEach(f, this);\n};\n/* Aggregate\n ******************************************************************************/\n\n/**\n Get the number of entries in `map`.\n*/\n\n\nvar count = hamt.count = function (map) {\n return map._size;\n};\n\nMap.prototype.count = function () {\n return count(this);\n};\n\nObject.defineProperty(Map.prototype, 'size', {\n get: Map.prototype.count\n});\n/* Export\n ******************************************************************************/\n\nif ( module.exports) {\n module.exports = hamt;\n} else {\n undefined.hamt = hamt;\n}\n});\n\nclass BuiltInMap {\n constructor(existing) {\n _defineProperty(this, \"_map\", void 0);\n\n this._map = new Map(existing === null || existing === void 0 ? void 0 : existing.entries());\n }\n\n keys() {\n return this._map.keys();\n }\n\n entries() {\n return this._map.entries();\n }\n\n get(k) {\n return this._map.get(k);\n }\n\n has(k) {\n return this._map.has(k);\n }\n\n set(k, v) {\n this._map.set(k, v);\n\n return this;\n }\n\n delete(k) {\n this._map.delete(k);\n\n return this;\n }\n\n clone() {\n return persistentMap(this);\n }\n\n toMap() {\n return new Map(this._map);\n }\n\n}\n\nclass HashArrayMappedTrieMap {\n // Because hamt.empty is not a function there is no way to introduce type\n // parameters on it, so empty is typed as HAMTPlusMap.\n // $FlowIssue\n constructor(existing) {\n _defineProperty(this, \"_hamt\", hamt_1.empty.beginMutation());\n\n if (existing instanceof HashArrayMappedTrieMap) {\n const h = existing._hamt.endMutation();\n\n existing._hamt = h.beginMutation();\n this._hamt = h.beginMutation();\n } else if (existing) {\n for (const [k, v] of existing.entries()) {\n this._hamt.set(k, v);\n }\n }\n }\n\n keys() {\n return this._hamt.keys();\n }\n\n entries() {\n return this._hamt.entries();\n }\n\n get(k) {\n return this._hamt.get(k);\n }\n\n has(k) {\n return this._hamt.has(k);\n }\n\n set(k, v) {\n this._hamt.set(k, v);\n\n return this;\n }\n\n delete(k) {\n this._hamt.delete(k);\n\n return this;\n }\n\n clone() {\n return persistentMap(this);\n }\n\n toMap() {\n return new Map(this._hamt);\n }\n\n}\n\nfunction persistentMap(existing) {\n if (Recoil_gkx('recoil_hamt_2020')) {\n return new HashArrayMappedTrieMap(existing);\n } else {\n return new BuiltInMap(existing);\n }\n}\n\nvar Recoil_PersistentMap = {\n persistentMap\n};\n\nvar Recoil_PersistentMap_1 = Recoil_PersistentMap.persistentMap;\n\nvar Recoil_PersistentMap$1 = /*#__PURE__*/Object.freeze({\n __proto__: null,\n persistentMap: Recoil_PersistentMap_1\n});\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n * @oncall recoil\n */\n/**\n * Returns a set containing all of the values from the first set that are not\n * present in any of the subsequent sets.\n *\n * Note: this is written procedurally (i.e., without filterSet) for performant\n * use in tight loops.\n */\n\nfunction differenceSets(set, ...setsWithValuesToRemove) {\n const ret = new Set();\n\n FIRST: for (const value of set) {\n for (const otherSet of setsWithValuesToRemove) {\n if (otherSet.has(value)) {\n continue FIRST;\n }\n }\n\n ret.add(value);\n }\n\n return ret;\n}\n\nvar Recoil_differenceSets = differenceSets;\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n * @oncall recoil\n */\n/**\n * Returns a new Map object with the same keys as the original, but with the\n * values replaced with the output of the given callback function.\n */\n\nfunction mapMap(map, callback) {\n const result = new Map();\n map.forEach((value, key) => {\n result.set(key, callback(value, key));\n });\n return result;\n}\n\nvar Recoil_mapMap = mapMap;\n\nfunction makeGraph() {\n return {\n nodeDeps: new Map(),\n nodeToNodeSubscriptions: new Map()\n };\n}\n\nfunction cloneGraph(graph) {\n return {\n nodeDeps: Recoil_mapMap(graph.nodeDeps, s => new Set(s)),\n nodeToNodeSubscriptions: Recoil_mapMap(graph.nodeToNodeSubscriptions, s => new Set(s))\n };\n} // Note that this overwrites the deps of existing nodes, rather than unioning\n// the new deps with the old deps.\n\n\nfunction mergeDepsIntoGraph(key, newDeps, graph, // If olderGraph is given then we will not overwrite changes made to the given\n// graph compared with olderGraph:\nolderGraph) {\n const {\n nodeDeps,\n nodeToNodeSubscriptions\n } = graph;\n const oldDeps = nodeDeps.get(key);\n\n if (oldDeps && olderGraph && oldDeps !== olderGraph.nodeDeps.get(key)) {\n return;\n } // Update nodeDeps:\n\n\n nodeDeps.set(key, newDeps); // Add new deps to nodeToNodeSubscriptions:\n\n const addedDeps = oldDeps == null ? newDeps : Recoil_differenceSets(newDeps, oldDeps);\n\n for (const dep of addedDeps) {\n if (!nodeToNodeSubscriptions.has(dep)) {\n nodeToNodeSubscriptions.set(dep, new Set());\n }\n\n const existing = Recoil_nullthrows(nodeToNodeSubscriptions.get(dep));\n existing.add(key);\n } // Remove removed deps from nodeToNodeSubscriptions:\n\n\n if (oldDeps) {\n const removedDeps = Recoil_differenceSets(oldDeps, newDeps);\n\n for (const dep of removedDeps) {\n if (!nodeToNodeSubscriptions.has(dep)) {\n return;\n }\n\n const existing = Recoil_nullthrows(nodeToNodeSubscriptions.get(dep));\n existing.delete(key);\n\n if (existing.size === 0) {\n nodeToNodeSubscriptions.delete(dep);\n }\n }\n }\n}\n\nfunction saveDepsToStore(key, deps, store, version) {\n var _storeState$nextTree, _storeState$previousT, _storeState$previousT2, _storeState$previousT3;\n\n const storeState = store.getState();\n\n if (!(version === storeState.currentTree.version || version === ((_storeState$nextTree = storeState.nextTree) === null || _storeState$nextTree === void 0 ? void 0 : _storeState$nextTree.version) || version === ((_storeState$previousT = storeState.previousTree) === null || _storeState$previousT === void 0 ? void 0 : _storeState$previousT.version))) {\n Recoil_recoverableViolation('Tried to save dependencies to a discarded tree');\n } // Merge the dependencies discovered into the store's dependency map\n // for the version that was read:\n\n\n const graph = store.getGraph(version);\n mergeDepsIntoGraph(key, deps, graph); // If this version is not the latest version, also write these dependencies\n // into later versions if they don't already have their own:\n\n if (version === ((_storeState$previousT2 = storeState.previousTree) === null || _storeState$previousT2 === void 0 ? void 0 : _storeState$previousT2.version)) {\n const currentGraph = store.getGraph(storeState.currentTree.version);\n mergeDepsIntoGraph(key, deps, currentGraph, graph);\n }\n\n if (version === ((_storeState$previousT3 = storeState.previousTree) === null || _storeState$previousT3 === void 0 ? void 0 : _storeState$previousT3.version) || version === storeState.currentTree.version) {\n var _storeState$nextTree2;\n\n const nextVersion = (_storeState$nextTree2 = storeState.nextTree) === null || _storeState$nextTree2 === void 0 ? void 0 : _storeState$nextTree2.version;\n\n if (nextVersion !== undefined) {\n const nextGraph = store.getGraph(nextVersion);\n mergeDepsIntoGraph(key, deps, nextGraph, graph);\n }\n }\n}\n\nvar Recoil_Graph = {\n cloneGraph,\n graph: makeGraph,\n saveDepsToStore\n};\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n * @oncall recoil\n */\n\nlet nextTreeStateVersion = 0;\n\nconst getNextTreeStateVersion = () => nextTreeStateVersion++;\n\nlet nextStoreID = 0;\n\nconst getNextStoreID = () => nextStoreID++;\n\nlet nextComponentID = 0;\n\nconst getNextComponentID = () => nextComponentID++;\n\nvar Recoil_Keys = {\n getNextTreeStateVersion,\n getNextStoreID,\n getNextComponentID\n};\n\nconst {\n persistentMap: persistentMap$1\n} = Recoil_PersistentMap$1;\n\nconst {\n graph\n} = Recoil_Graph;\n\nconst {\n getNextTreeStateVersion: getNextTreeStateVersion$1\n} = Recoil_Keys;\n\nfunction makeEmptyTreeState() {\n const version = getNextTreeStateVersion$1();\n return {\n version,\n stateID: version,\n transactionMetadata: {},\n dirtyAtoms: new Set(),\n atomValues: persistentMap$1(),\n nonvalidatedAtoms: persistentMap$1()\n };\n}\n\nfunction makeEmptyStoreState() {\n const currentTree = makeEmptyTreeState();\n return {\n currentTree,\n nextTree: null,\n previousTree: null,\n commitDepth: 0,\n knownAtoms: new Set(),\n knownSelectors: new Set(),\n transactionSubscriptions: new Map(),\n nodeTransactionSubscriptions: new Map(),\n nodeToComponentSubscriptions: new Map(),\n queuedComponentCallbacks_DEPRECATED: [],\n suspendedComponentResolvers: new Set(),\n graphsByVersion: new Map().set(currentTree.version, graph()),\n retention: {\n referenceCounts: new Map(),\n nodesRetainedByZone: new Map(),\n retainablesToCheckForRelease: new Set()\n },\n nodeCleanupFunctions: new Map()\n };\n}\n\nvar Recoil_State = {\n makeEmptyTreeState,\n makeEmptyStoreState,\n getNextTreeStateVersion: getNextTreeStateVersion$1\n};\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n * @oncall recoil\n */\n\nclass RetentionZone {}\n\nfunction retentionZone() {\n return new RetentionZone();\n}\n\nvar Recoil_RetentionZone = {\n RetentionZone,\n retentionZone\n};\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * Utilities for working with built-in Maps and Sets without mutating them.\n *\n * \n * @format\n * @oncall recoil\n */\n\nfunction setByAddingToSet(set, v) {\n const next = new Set(set);\n next.add(v);\n return next;\n}\n\nfunction setByDeletingFromSet(set, v) {\n const next = new Set(set);\n next.delete(v);\n return next;\n}\n\nfunction mapBySettingInMap(map, k, v) {\n const next = new Map(map);\n next.set(k, v);\n return next;\n}\n\nfunction mapByUpdatingInMap(map, k, updater) {\n const next = new Map(map);\n next.set(k, updater(next.get(k)));\n return next;\n}\n\nfunction mapByDeletingFromMap(map, k) {\n const next = new Map(map);\n next.delete(k);\n return next;\n}\n\nfunction mapByDeletingMultipleFromMap(map, ks) {\n const next = new Map(map);\n ks.forEach(k => next.delete(k));\n return next;\n}\n\nvar Recoil_CopyOnWrite = {\n setByAddingToSet,\n setByDeletingFromSet,\n mapBySettingInMap,\n mapByUpdatingInMap,\n mapByDeletingFromMap,\n mapByDeletingMultipleFromMap\n};\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n * @oncall recoil\n */\n/**\n * Creates a new iterable whose output is generated by passing the input\n * iterable's values through the filter function.\n */\n\nfunction* filterIterable(iterable, predicate) {\n // Use generator to create iterable/iterator\n let index = 0;\n\n for (const value of iterable) {\n if (predicate(value, index++)) {\n yield value;\n }\n }\n}\n\nvar Recoil_filterIterable = filterIterable;\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n * @oncall recoil\n */\n/**\n * Return a proxy object based on the provided base and factories objects.\n * The proxy will include all properties of the base object as-is.\n * The factories object contains callbacks to obtain the values of the properies\n * for its keys.\n *\n * This is useful for providing users an object where some properties may be\n * lazily computed only on first access.\n */\n// $FlowIssue[unclear-type]\n\nfunction lazyProxy(base, factories) {\n const proxy = new Proxy(base, {\n // Compute and cache lazy property if not already done.\n get: (target, prop) => {\n if (!(prop in target) && prop in factories) {\n target[prop] = factories[prop]();\n }\n\n return target[prop];\n },\n // This method allows user to iterate keys as normal\n ownKeys: target => {\n\n return Object.keys(target);\n }\n }); // $FlowIssue[incompatible-return]\n\n return proxy;\n}\n\nvar Recoil_lazyProxy = lazyProxy;\n\nconst {\n getNode: getNode$1,\n getNodeMaybe: getNodeMaybe$1,\n recoilValuesForKeys: recoilValuesForKeys$1\n} = Recoil_Node;\n\nconst {\n RetentionZone: RetentionZone$1\n} = Recoil_RetentionZone;\n\nconst {\n setByAddingToSet: setByAddingToSet$1\n} = Recoil_CopyOnWrite;\n\n\n\n\n\n\n\n // flowlint-next-line unclear-type:off\n\n\nconst emptySet = Object.freeze(new Set());\n\nclass ReadOnlyRecoilValueError extends Error {}\n\nfunction initializeRetentionForNode(store, nodeKey, retainedBy) {\n if (!Recoil_gkx('recoil_memory_managament_2020')) {\n return () => undefined;\n }\n\n const {\n nodesRetainedByZone\n } = store.getState().retention;\n\n function addToZone(zone) {\n let set = nodesRetainedByZone.get(zone);\n\n if (!set) {\n nodesRetainedByZone.set(zone, set = new Set());\n }\n\n set.add(nodeKey);\n }\n\n if (retainedBy instanceof RetentionZone$1) {\n addToZone(retainedBy);\n } else if (Array.isArray(retainedBy)) {\n for (const zone of retainedBy) {\n addToZone(zone);\n }\n }\n\n return () => {\n if (!Recoil_gkx('recoil_memory_managament_2020')) {\n return;\n }\n\n const {\n retention\n } = store.getState();\n\n function deleteFromZone(zone) {\n const set = retention.nodesRetainedByZone.get(zone);\n set === null || set === void 0 ? void 0 : set.delete(nodeKey);\n\n if (set && set.size === 0) {\n retention.nodesRetainedByZone.delete(zone);\n }\n }\n\n if (retainedBy instanceof RetentionZone$1) {\n deleteFromZone(retainedBy);\n } else if (Array.isArray(retainedBy)) {\n for (const zone of retainedBy) {\n deleteFromZone(zone);\n }\n }\n };\n}\n\nfunction initializeNodeIfNewToStore(store, treeState, key, trigger) {\n const storeState = store.getState();\n\n if (storeState.nodeCleanupFunctions.has(key)) {\n return;\n }\n\n const node = getNode$1(key);\n const retentionCleanup = initializeRetentionForNode(store, key, node.retainedBy);\n const nodeCleanup = node.init(store, treeState, trigger);\n storeState.nodeCleanupFunctions.set(key, () => {\n nodeCleanup();\n retentionCleanup();\n });\n}\n\nfunction initializeNode(store, key, trigger) {\n initializeNodeIfNewToStore(store, store.getState().currentTree, key, trigger);\n}\n\nfunction cleanUpNode(store, key) {\n var _state$nodeCleanupFun;\n\n const state = store.getState();\n (_state$nodeCleanupFun = state.nodeCleanupFunctions.get(key)) === null || _state$nodeCleanupFun === void 0 ? void 0 : _state$nodeCleanupFun();\n state.nodeCleanupFunctions.delete(key);\n} // Get the current value loadable of a node and update the state.\n// Update dependencies and subscriptions for selectors.\n// Update saved value validation for atoms.\n\n\nfunction getNodeLoadable(store, state, key) {\n initializeNodeIfNewToStore(store, state, key, 'get');\n return getNode$1(key).get(store, state);\n} // Peek at the current value loadable for a node without any evaluation or state change\n\n\nfunction peekNodeLoadable(store, state, key) {\n return getNode$1(key).peek(store, state);\n} // Write value directly to state bypassing the Node interface as the node\n// definitions may not have been loaded yet when processing the initial snapshot.\n\n\nfunction setUnvalidatedAtomValue_DEPRECATED(state, key, newValue) {\n var _node$invalidate;\n\n const node = getNodeMaybe$1(key);\n node === null || node === void 0 ? void 0 : (_node$invalidate = node.invalidate) === null || _node$invalidate === void 0 ? void 0 : _node$invalidate.call(node, state);\n return { ...state,\n atomValues: state.atomValues.clone().delete(key),\n nonvalidatedAtoms: state.nonvalidatedAtoms.clone().set(key, newValue),\n dirtyAtoms: setByAddingToSet$1(state.dirtyAtoms, key)\n };\n} // Return the discovered dependencies and values to be written by setting\n// a node value. (Multiple values may be written due to selectors getting to\n// set upstreams; deps may be discovered because of reads in updater functions.)\n\n\nfunction setNodeValue(store, state, key, newValue) {\n const node = getNode$1(key);\n\n if (node.set == null) {\n throw new ReadOnlyRecoilValueError(`Attempt to set read-only RecoilValue: ${key}`);\n }\n\n const set = node.set; // so flow doesn't lose the above refinement.\n\n initializeNodeIfNewToStore(store, state, key, 'set');\n return set(store, state, newValue);\n}\n\nfunction peekNodeInfo(store, state, key) {\n const storeState = store.getState();\n const graph = store.getGraph(state.version);\n const type = getNode$1(key).nodeType;\n return Recoil_lazyProxy({\n type\n }, {\n // $FlowFixMe[underconstrained-implicit-instantiation]\n loadable: () => peekNodeLoadable(store, state, key),\n isActive: () => storeState.knownAtoms.has(key) || storeState.knownSelectors.has(key),\n isSet: () => type === 'selector' ? false : state.atomValues.has(key),\n isModified: () => state.dirtyAtoms.has(key),\n // Report current dependencies. If the node hasn't been evaluated, then\n // dependencies may be missing based on the current state.\n deps: () => {\n var _graph$nodeDeps$get;\n\n return recoilValuesForKeys$1((_graph$nodeDeps$get = graph.nodeDeps.get(key)) !== null && _graph$nodeDeps$get !== void 0 ? _graph$nodeDeps$get : []);\n },\n // Reports all \"current\" subscribers. Evaluating other nodes or\n // previous in-progress async evaluations may introduce new subscribers.\n subscribers: () => {\n var _storeState$nodeToCom, _storeState$nodeToCom2;\n\n return {\n nodes: recoilValuesForKeys$1(Recoil_filterIterable(getDownstreamNodes(store, state, new Set([key])), nodeKey => nodeKey !== key)),\n components: Recoil_mapIterable((_storeState$nodeToCom = (_storeState$nodeToCom2 = storeState.nodeToComponentSubscriptions.get(key)) === null || _storeState$nodeToCom2 === void 0 ? void 0 : _storeState$nodeToCom2.values()) !== null && _storeState$nodeToCom !== void 0 ? _storeState$nodeToCom : [], ([name]) => ({\n name\n }))\n };\n }\n });\n} // Find all of the recursively dependent nodes\n\n\nfunction getDownstreamNodes(store, state, keys) {\n const visitedNodes = new Set();\n const visitingNodes = Array.from(keys);\n const graph = store.getGraph(state.version);\n\n for (let key = visitingNodes.pop(); key; key = visitingNodes.pop()) {\n var _graph$nodeToNodeSubs;\n\n visitedNodes.add(key);\n const subscribedNodes = (_graph$nodeToNodeSubs = graph.nodeToNodeSubscriptions.get(key)) !== null && _graph$nodeToNodeSubs !== void 0 ? _graph$nodeToNodeSubs : emptySet;\n\n for (const downstreamNode of subscribedNodes) {\n if (!visitedNodes.has(downstreamNode)) {\n visitingNodes.push(downstreamNode);\n }\n }\n }\n\n return visitedNodes;\n}\n\nvar Recoil_FunctionalCore = {\n getNodeLoadable,\n peekNodeLoadable,\n setNodeValue,\n initializeNode,\n cleanUpNode,\n setUnvalidatedAtomValue_DEPRECATED,\n peekNodeInfo,\n getDownstreamNodes\n};\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n * @oncall recoil\n */\n\nlet _invalidateMemoizedSnapshot = null;\n\nfunction setInvalidateMemoizedSnapshot(invalidate) {\n _invalidateMemoizedSnapshot = invalidate;\n}\n\nfunction invalidateMemoizedSnapshot() {\n var _invalidateMemoizedSn;\n\n (_invalidateMemoizedSn = _invalidateMemoizedSnapshot) === null || _invalidateMemoizedSn === void 0 ? void 0 : _invalidateMemoizedSn();\n}\n\nvar Recoil_SnapshotCache = {\n setInvalidateMemoizedSnapshot,\n invalidateMemoizedSnapshot\n};\n\nconst {\n getDownstreamNodes: getDownstreamNodes$1,\n getNodeLoadable: getNodeLoadable$1,\n setNodeValue: setNodeValue$1\n} = Recoil_FunctionalCore;\n\nconst {\n getNextComponentID: getNextComponentID$1\n} = Recoil_Keys;\n\nconst {\n getNode: getNode$2,\n getNodeMaybe: getNodeMaybe$2\n} = Recoil_Node;\n\nconst {\n DefaultValue: DefaultValue$1\n} = Recoil_Node;\n\nconst {\n reactMode: reactMode$1\n} = Recoil_ReactMode;\n\nconst {\n AbstractRecoilValue: AbstractRecoilValue$1,\n RecoilState: RecoilState$1,\n RecoilValueReadOnly: RecoilValueReadOnly$1,\n isRecoilValue: isRecoilValue$1\n} = Recoil_RecoilValue$1;\n\nconst {\n invalidateMemoizedSnapshot: invalidateMemoizedSnapshot$1\n} = Recoil_SnapshotCache;\n\n\n\n\n\n\n\nfunction getRecoilValueAsLoadable(store, {\n key\n}, treeState = store.getState().currentTree) {\n var _storeState$nextTree, _storeState$previousT;\n\n // Reading from an older tree can cause bugs because the dependencies that we\n // discover during the read are lost.\n const storeState = store.getState();\n\n if (!(treeState.version === storeState.currentTree.version || treeState.version === ((_storeState$nextTree = storeState.nextTree) === null || _storeState$nextTree === void 0 ? void 0 : _storeState$nextTree.version) || treeState.version === ((_storeState$previousT = storeState.previousTree) === null || _storeState$previousT === void 0 ? void 0 : _storeState$previousT.version))) {\n Recoil_recoverableViolation('Tried to read from a discarded tree');\n }\n\n const loadable = getNodeLoadable$1(store, treeState, key);\n\n if (loadable.state === 'loading') {\n loadable.contents.catch(() => {\n /**\n * HACK: intercept thrown error here to prevent an uncaught promise exception. Ideally this would happen closer to selector\n * execution (perhaps introducing a new ERROR class to be resolved by async selectors that are in an error state)\n */\n return;\n });\n }\n\n return loadable;\n}\n\nfunction applyAtomValueWrites(atomValues, writes) {\n const result = atomValues.clone();\n writes.forEach((v, k) => {\n if (v.state === 'hasValue' && v.contents instanceof DefaultValue$1) {\n result.delete(k);\n } else {\n result.set(k, v);\n }\n });\n return result;\n}\n\nfunction valueFromValueOrUpdater(store, state, {\n key\n}, valueOrUpdater) {\n if (typeof valueOrUpdater === 'function') {\n // Updater form: pass in the current value. Throw if the current value\n // is unavailable (namely when updating an async selector that's\n // pending or errored):\n const current = getNodeLoadable$1(store, state, key);\n\n if (current.state === 'loading') {\n const msg = `Tried to set atom or selector \"${key}\" using an updater function while the current state is pending, this is not currently supported.`;\n Recoil_recoverableViolation(msg);\n throw Recoil_err(msg);\n } else if (current.state === 'hasError') {\n throw current.contents;\n } // T itself may be a function, so our refinement is not sufficient:\n\n\n return valueOrUpdater(current.contents); // flowlint-line unclear-type:off\n } else {\n return valueOrUpdater;\n }\n}\n\nfunction applyAction(store, state, action) {\n if (action.type === 'set') {\n const {\n recoilValue,\n valueOrUpdater\n } = action;\n const newValue = valueFromValueOrUpdater(store, state, recoilValue, valueOrUpdater);\n const writes = setNodeValue$1(store, state, recoilValue.key, newValue);\n\n for (const [key, loadable] of writes.entries()) {\n writeLoadableToTreeState(state, key, loadable);\n }\n } else if (action.type === 'setLoadable') {\n const {\n recoilValue: {\n key\n },\n loadable\n } = action;\n writeLoadableToTreeState(state, key, loadable);\n } else if (action.type === 'markModified') {\n const {\n recoilValue: {\n key\n }\n } = action;\n state.dirtyAtoms.add(key);\n } else if (action.type === 'setUnvalidated') {\n var _node$invalidate;\n\n // Write value directly to state bypassing the Node interface as the node\n // definitions may not have been loaded yet when processing the initial snapshot.\n const {\n recoilValue: {\n key\n },\n unvalidatedValue\n } = action;\n const node = getNodeMaybe$2(key);\n node === null || node === void 0 ? void 0 : (_node$invalidate = node.invalidate) === null || _node$invalidate === void 0 ? void 0 : _node$invalidate.call(node, state);\n state.atomValues.delete(key);\n state.nonvalidatedAtoms.set(key, unvalidatedValue);\n state.dirtyAtoms.add(key);\n } else {\n Recoil_recoverableViolation(`Unknown action ${action.type}`);\n }\n}\n\nfunction writeLoadableToTreeState(state, key, loadable) {\n if (loadable.state === 'hasValue' && loadable.contents instanceof DefaultValue$1) {\n state.atomValues.delete(key);\n } else {\n state.atomValues.set(key, loadable);\n }\n\n state.dirtyAtoms.add(key);\n state.nonvalidatedAtoms.delete(key);\n}\n\nfunction applyActionsToStore(store, actions) {\n store.replaceState(state => {\n const newState = copyTreeState(state);\n\n for (const action of actions) {\n applyAction(store, newState, action);\n }\n\n invalidateDownstreams(store, newState);\n invalidateMemoizedSnapshot$1();\n return newState;\n });\n}\n\nfunction queueOrPerformStateUpdate(store, action) {\n if (batchStack.length) {\n const actionsByStore = batchStack[batchStack.length - 1];\n let actions = actionsByStore.get(store);\n\n if (!actions) {\n actionsByStore.set(store, actions = []);\n }\n\n actions.push(action);\n } else {\n applyActionsToStore(store, [action]);\n }\n}\n\nconst batchStack = [];\n\nfunction batchStart() {\n const actionsByStore = new Map();\n batchStack.push(actionsByStore);\n return () => {\n for (const [store, actions] of actionsByStore) {\n applyActionsToStore(store, actions);\n }\n\n const popped = batchStack.pop();\n\n if (popped !== actionsByStore) {\n Recoil_recoverableViolation('Incorrect order of batch popping');\n }\n };\n}\n\nfunction copyTreeState(state) {\n return { ...state,\n atomValues: state.atomValues.clone(),\n nonvalidatedAtoms: state.nonvalidatedAtoms.clone(),\n dirtyAtoms: new Set(state.dirtyAtoms)\n };\n}\n\nfunction invalidateDownstreams(store, state) {\n // Inform any nodes that were changed or downstream of changes so that they\n // can clear out any caches as needed due to the update:\n const downstreams = getDownstreamNodes$1(store, state, state.dirtyAtoms);\n\n for (const key of downstreams) {\n var _getNodeMaybe, _getNodeMaybe$invalid;\n\n (_getNodeMaybe = getNodeMaybe$2(key)) === null || _getNodeMaybe === void 0 ? void 0 : (_getNodeMaybe$invalid = _getNodeMaybe.invalidate) === null || _getNodeMaybe$invalid === void 0 ? void 0 : _getNodeMaybe$invalid.call(_getNodeMaybe, state);\n }\n}\n\nfunction setRecoilValue(store, recoilValue, valueOrUpdater) {\n queueOrPerformStateUpdate(store, {\n type: 'set',\n recoilValue,\n valueOrUpdater\n });\n}\n\nfunction setRecoilValueLoadable(store, recoilValue, loadable) {\n if (loadable instanceof DefaultValue$1) {\n return setRecoilValue(store, recoilValue, loadable);\n }\n\n queueOrPerformStateUpdate(store, {\n type: 'setLoadable',\n recoilValue,\n loadable: loadable\n });\n}\n\nfunction markRecoilValueModified(store, recoilValue) {\n queueOrPerformStateUpdate(store, {\n type: 'markModified',\n recoilValue\n });\n}\n\nfunction setUnvalidatedRecoilValue(store, recoilValue, unvalidatedValue) {\n queueOrPerformStateUpdate(store, {\n type: 'setUnvalidated',\n recoilValue,\n unvalidatedValue\n });\n}\n\nfunction subscribeToRecoilValue(store, {\n key\n}, callback, componentDebugName = null) {\n const subID = getNextComponentID$1();\n const storeState = store.getState();\n\n if (!storeState.nodeToComponentSubscriptions.has(key)) {\n storeState.nodeToComponentSubscriptions.set(key, new Map());\n }\n\n Recoil_nullthrows(storeState.nodeToComponentSubscriptions.get(key)).set(subID, [componentDebugName !== null && componentDebugName !== void 0 ? componentDebugName : '', callback]); // Handle the case that, during the same tick that we are subscribing, an atom\n // has been updated by some effect handler. Otherwise we will miss the update.\n\n const mode = reactMode$1();\n\n if (mode.early && (mode.mode === 'LEGACY' || mode.mode === 'MUTABLE_SOURCE')) {\n const nextTree = store.getState().nextTree;\n\n if (nextTree && nextTree.dirtyAtoms.has(key)) {\n callback(nextTree);\n }\n }\n\n return {\n release: () => {\n const releaseStoreState = store.getState();\n const subs = releaseStoreState.nodeToComponentSubscriptions.get(key);\n\n if (subs === undefined || !subs.has(subID)) {\n Recoil_recoverableViolation(`Subscription missing at release time for atom ${key}. This is a bug in Recoil.`);\n return;\n }\n\n subs.delete(subID);\n\n if (subs.size === 0) {\n releaseStoreState.nodeToComponentSubscriptions.delete(key);\n }\n }\n };\n}\n\nfunction refreshRecoilValue(store, recoilValue) {\n var _node$clearCache;\n\n const {\n currentTree\n } = store.getState();\n const node = getNode$2(recoilValue.key);\n (_node$clearCache = node.clearCache) === null || _node$clearCache === void 0 ? void 0 : _node$clearCache.call(node, store, currentTree);\n}\n\nvar Recoil_RecoilValueInterface = {\n RecoilValueReadOnly: RecoilValueReadOnly$1,\n AbstractRecoilValue: AbstractRecoilValue$1,\n RecoilState: RecoilState$1,\n getRecoilValueAsLoadable,\n setRecoilValue,\n setRecoilValueLoadable,\n markRecoilValueModified,\n setUnvalidatedRecoilValue,\n subscribeToRecoilValue,\n isRecoilValue: isRecoilValue$1,\n applyAtomValueWrites,\n // TODO Remove export when deprecating initialStoreState_DEPRECATED in RecoilRoot\n batchStart,\n writeLoadableToTreeState,\n invalidateDownstreams,\n copyTreeState,\n refreshRecoilValue\n};\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n * @oncall recoil\n */\n/**\n * The someSet() method tests whether some elements in the given Set pass the\n * test implemented by the provided function.\n */\n\nfunction someSet(set, callback, context) {\n const iterator = set.entries();\n let current = iterator.next();\n\n while (!current.done) {\n const entry = current.value;\n\n if (callback.call(context, entry[1], entry[0], set)) {\n return true;\n }\n\n current = iterator.next();\n }\n\n return false;\n}\n\nvar Recoil_someSet = someSet;\n\nconst {\n cleanUpNode: cleanUpNode$1\n} = Recoil_FunctionalCore;\n\nconst {\n deleteNodeConfigIfPossible: deleteNodeConfigIfPossible$1,\n getNode: getNode$3\n} = Recoil_Node;\n\nconst {\n RetentionZone: RetentionZone$2\n} = Recoil_RetentionZone;\n\n\n\n\n\n\n\n // Components that aren't mounted after suspending for this long will be assumed\n// to be discarded and their resources released.\n\n\nconst SUSPENSE_TIMEOUT_MS = 120000;\nconst emptySet$1 = new Set();\n\nfunction releaseRetainablesNowOnCurrentTree(store, retainables) {\n const storeState = store.getState();\n const treeState = storeState.currentTree;\n\n if (storeState.nextTree) {\n Recoil_recoverableViolation('releaseNodesNowOnCurrentTree should only be called at the end of a batch');\n return; // leak memory rather than erase something that's about to be used.\n }\n\n const nodes = new Set();\n\n for (const r of retainables) {\n if (r instanceof RetentionZone$2) {\n for (const n of nodesRetainedByZone(storeState, r)) {\n nodes.add(n);\n }\n } else {\n nodes.add(r);\n }\n }\n\n const releasableNodes = findReleasableNodes(store, nodes);\n\n for (const node of releasableNodes) {\n releaseNode(store, treeState, node);\n }\n}\n\nfunction findReleasableNodes(store, searchFromNodes) {\n const storeState = store.getState();\n const treeState = storeState.currentTree;\n const graph = store.getGraph(treeState.version);\n const releasableNodes = new Set(); // mutated to collect answer\n\n const nonReleasableNodes = new Set();\n findReleasableNodesInner(searchFromNodes);\n return releasableNodes;\n\n function findReleasableNodesInner(searchFromNodes) {\n const releasableNodesFoundThisIteration = new Set();\n const downstreams = getDownstreamNodesInTopologicalOrder(store, treeState, searchFromNodes, releasableNodes, // don't descend into these\n nonReleasableNodes // don't descend into these\n ); // Find which of the downstream nodes are releasable and which are not:\n\n for (const node of downstreams) {\n var _storeState$retention;\n\n // Not releasable if configured to be retained forever:\n if (getNode$3(node).retainedBy === 'recoilRoot') {\n nonReleasableNodes.add(node);\n continue;\n } // Not releasable if retained directly by a component:\n\n\n if (((_storeState$retention = storeState.retention.referenceCounts.get(node)) !== null && _storeState$retention !== void 0 ? _storeState$retention : 0) > 0) {\n nonReleasableNodes.add(node);\n continue;\n } // Not releasable if retained by a zone:\n\n\n if (zonesThatCouldRetainNode(node).some(z => storeState.retention.referenceCounts.get(z))) {\n nonReleasableNodes.add(node);\n continue;\n } // Not releasable if it has a non-releasable child (which will already be in\n // nonReleasableNodes because we are going in topological order):\n\n\n const nodeChildren = graph.nodeToNodeSubscriptions.get(node);\n\n if (nodeChildren && Recoil_someSet(nodeChildren, child => nonReleasableNodes.has(child))) {\n nonReleasableNodes.add(node);\n continue;\n }\n\n releasableNodes.add(node);\n releasableNodesFoundThisIteration.add(node);\n } // If we found any releasable nodes, we need to walk UP from those nodes to\n // find whether their parents can now be released as well:\n\n\n const parents = new Set();\n\n for (const node of releasableNodesFoundThisIteration) {\n for (const parent of (_graph$nodeDeps$get = graph.nodeDeps.get(node)) !== null && _graph$nodeDeps$get !== void 0 ? _graph$nodeDeps$get : emptySet$1) {\n var _graph$nodeDeps$get;\n\n if (!releasableNodes.has(parent)) {\n parents.add(parent);\n }\n }\n }\n\n if (parents.size) {\n findReleasableNodesInner(parents);\n }\n }\n} // Children before parents\n\n\nfunction getDownstreamNodesInTopologicalOrder(store, treeState, nodes, // Mutable set is destroyed in place\ndoNotDescendInto1, doNotDescendInto2) {\n const graph = store.getGraph(treeState.version);\n const answer = [];\n const visited = new Set();\n\n while (nodes.size > 0) {\n visit(Recoil_nullthrows(nodes.values().next().value));\n }\n\n return answer;\n\n function visit(node) {\n if (doNotDescendInto1.has(node) || doNotDescendInto2.has(node)) {\n nodes.delete(node);\n return;\n }\n\n if (visited.has(node)) {\n return;\n }\n\n const children = graph.nodeToNodeSubscriptions.get(node);\n\n if (children) {\n for (const child of children) {\n visit(child);\n }\n }\n\n visited.add(node);\n nodes.delete(node);\n answer.push(node);\n }\n}\n\nfunction releaseNode(store, treeState, node) {\n if (!Recoil_gkx('recoil_memory_managament_2020')) {\n return;\n } // Atom effects, in-closure caches, etc.:\n\n\n cleanUpNode$1(store, node); // Delete from store state:\n\n const storeState = store.getState();\n storeState.knownAtoms.delete(node);\n storeState.knownSelectors.delete(node);\n storeState.nodeTransactionSubscriptions.delete(node);\n storeState.retention.referenceCounts.delete(node);\n const zones = zonesThatCouldRetainNode(node);\n\n for (const zone of zones) {\n var _storeState$retention2;\n\n (_storeState$retention2 = storeState.retention.nodesRetainedByZone.get(zone)) === null || _storeState$retention2 === void 0 ? void 0 : _storeState$retention2.delete(node);\n } // Note that we DO NOT delete from nodeToComponentSubscriptions because this\n // already happens when the last component that was retaining the node unmounts,\n // and this could happen either before or after that.\n // Delete from TreeState and dep graph:\n\n\n treeState.atomValues.delete(node);\n treeState.dirtyAtoms.delete(node);\n treeState.nonvalidatedAtoms.delete(node);\n const graph = storeState.graphsByVersion.get(treeState.version);\n\n if (graph) {\n const deps = graph.nodeDeps.get(node);\n\n if (deps !== undefined) {\n graph.nodeDeps.delete(node);\n\n for (const dep of deps) {\n var _graph$nodeToNodeSubs;\n\n (_graph$nodeToNodeSubs = graph.nodeToNodeSubscriptions.get(dep)) === null || _graph$nodeToNodeSubs === void 0 ? void 0 : _graph$nodeToNodeSubs.delete(node);\n }\n } // No need to delete sub's deps as there should be no subs at this point.\n // But an invariant would require deleting nodes in topological order.\n\n\n graph.nodeToNodeSubscriptions.delete(node);\n } // Node config (for family members only as their configs can be recreated, and\n // only if they are not retained within any other Stores):\n\n\n deleteNodeConfigIfPossible$1(node);\n}\n\nfunction nodesRetainedByZone(storeState, zone) {\n var _storeState$retention3;\n\n return (_storeState$retention3 = storeState.retention.nodesRetainedByZone.get(zone)) !== null && _storeState$retention3 !== void 0 ? _storeState$retention3 : emptySet$1;\n}\n\nfunction zonesThatCouldRetainNode(node) {\n const retainedBy = getNode$3(node).retainedBy;\n\n if (retainedBy === undefined || retainedBy === 'components' || retainedBy === 'recoilRoot') {\n return [];\n } else if (retainedBy instanceof RetentionZone$2) {\n return [retainedBy];\n } else {\n return retainedBy; // it's an array of zones\n }\n}\n\nfunction scheduleOrPerformPossibleReleaseOfRetainable(store, retainable) {\n const state = store.getState();\n\n if (state.nextTree) {\n state.retention.retainablesToCheckForRelease.add(retainable);\n } else {\n releaseRetainablesNowOnCurrentTree(store, new Set([retainable]));\n }\n}\n\nfunction updateRetainCount(store, retainable, delta) {\n var _map$get;\n\n if (!Recoil_gkx('recoil_memory_managament_2020')) {\n return;\n }\n\n const map = store.getState().retention.referenceCounts;\n const newCount = ((_map$get = map.get(retainable)) !== null && _map$get !== void 0 ? _map$get : 0) + delta;\n\n if (newCount === 0) {\n updateRetainCountToZero(store, retainable);\n } else {\n map.set(retainable, newCount);\n }\n}\n\nfunction updateRetainCountToZero(store, retainable) {\n if (!Recoil_gkx('recoil_memory_managament_2020')) {\n return;\n }\n\n const map = store.getState().retention.referenceCounts;\n map.delete(retainable);\n scheduleOrPerformPossibleReleaseOfRetainable(store, retainable);\n}\n\nfunction releaseScheduledRetainablesNow(store) {\n if (!Recoil_gkx('recoil_memory_managament_2020')) {\n return;\n }\n\n const state = store.getState();\n releaseRetainablesNowOnCurrentTree(store, state.retention.retainablesToCheckForRelease);\n state.retention.retainablesToCheckForRelease.clear();\n}\n\nfunction retainedByOptionWithDefault(r) {\n // The default will change from 'recoilRoot' to 'components' in the future.\n return r === undefined ? 'recoilRoot' : r;\n}\n\nvar Recoil_Retention = {\n SUSPENSE_TIMEOUT_MS,\n updateRetainCount,\n updateRetainCountToZero,\n releaseScheduledRetainablesNow,\n retainedByOptionWithDefault\n};\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * This is to export esstiential functions from react-dom\n * for our web build\n *\n * \n * @format\n * @oncall recoil\n */\nconst {\n unstable_batchedUpdates\n} = reactDom;\n\nvar ReactBatchedUpdates = {\n unstable_batchedUpdates\n};\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * This is to export esstiential functions from react-dom\n * for our web build\n *\n * \n * @format\n * @oncall recoil\n */\n// @fb-only: const {unstable_batchedUpdates} = require('ReactDOMComet');\n// prettier-ignore\nconst {\n unstable_batchedUpdates: unstable_batchedUpdates$1\n} = ReactBatchedUpdates; // @oss-only\n\n\nvar Recoil_ReactBatchedUpdates = {\n unstable_batchedUpdates: unstable_batchedUpdates$1\n};\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n * @oncall recoil\n */\nconst {\n batchStart: batchStart$1\n} = Recoil_RecoilValueInterface;\n\nconst {\n unstable_batchedUpdates: unstable_batchedUpdates$2\n} = Recoil_ReactBatchedUpdates; // flowlint-next-line unclear-type:off\n\n\n/*\n * During SSR, unstable_batchedUpdates may be undefined so this\n * falls back to a basic function that executes the batch\n */\nlet batcher = unstable_batchedUpdates$2 || (batchFn => batchFn());\n/**\n * Sets the provided batcher function as the batcher function used by Recoil.\n *\n * Set the batcher to a custom batcher for your renderer,\n * if you use a renderer other than React DOM or React Native.\n */\n\n\nconst setBatcher = newBatcher => {\n batcher = newBatcher;\n};\n/**\n * Returns the current batcher function.\n */\n\n\nconst getBatcher = () => batcher;\n/**\n * Calls the current batcher function and passes the\n * provided callback function.\n */\n\n\nconst batchUpdates = callback => {\n batcher(() => {\n let batchEnd = () => undefined;\n\n try {\n batchEnd = batchStart$1();\n callback();\n } finally {\n batchEnd();\n }\n });\n};\n\nvar Recoil_Batching = {\n getBatcher,\n setBatcher,\n batchUpdates\n};\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n * @oncall recoil\n */\n/**\n * Combines multiple Iterables into a single Iterable.\n * Traverses the input Iterables in the order provided and maintains the order\n * of their elements.\n *\n * Example:\n * ```\n * const r = Array.from(concatIterables(['a', 'b'], ['c'], ['d', 'e', 'f']));\n * r == ['a', 'b', 'c', 'd', 'e', 'f'];\n * ```\n */\n\nfunction* concatIterables(iters) {\n for (const iter of iters) {\n for (const val of iter) {\n yield val;\n }\n }\n}\n\nvar Recoil_concatIterables = concatIterables;\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n * @oncall recoil\n */\n/* eslint-disable fb-www/typeof-undefined */\n\nconst isSSR = // $FlowFixMe(site=recoil) Window does not have a FlowType definition https://github.com/facebook/flow/issues/6709\ntypeof Window === 'undefined' || typeof window === 'undefined';\n/* eslint-enable fb-www/typeof-undefined */\n\nconst isWindow = value => !isSSR && ( // $FlowFixMe(site=recoil) Window does not have a FlowType definition https://github.com/facebook/flow/issues/6709\nvalue === window || value instanceof Window);\n\nconst isReactNative = typeof navigator !== 'undefined' && navigator.product === 'ReactNative'; // eslint-disable-line fb-www/typeof-undefined\n\nvar Recoil_Environment = {\n isSSR,\n isReactNative,\n isWindow\n};\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n * @oncall recoil\n */\n/**\n * Caches a function's results based on the key returned by the passed\n * hashFunction.\n */\n\nfunction memoizeWithArgsHash(fn, hashFunction) {\n let cache;\n return (...args) => {\n if (!cache) {\n cache = {};\n }\n\n const key = hashFunction(...args);\n\n if (!Object.hasOwnProperty.call(cache, key)) {\n cache[key] = fn(...args);\n }\n\n return cache[key];\n };\n}\n/**\n * Caches a function's results based on a comparison of the arguments.\n * Only caches the last return of the function.\n * Defaults to reference equality\n */\n\n\nfunction memoizeOneWithArgsHash(fn, hashFunction) {\n let lastKey;\n let lastResult; // breaking cache when arguments change\n\n return (...args) => {\n const key = hashFunction(...args);\n\n if (lastKey === key) {\n return lastResult;\n }\n\n lastKey = key;\n lastResult = fn(...args);\n return lastResult;\n };\n}\n/**\n * Caches a function's results based on a comparison of the arguments.\n * Only caches the last return of the function.\n * Defaults to reference equality\n */\n\n\nfunction memoizeOneWithArgsHashAndInvalidation(fn, hashFunction) {\n let lastKey;\n let lastResult; // breaking cache when arguments change\n\n const memoizedFn = (...args) => {\n const key = hashFunction(...args);\n\n if (lastKey === key) {\n return lastResult;\n }\n\n lastKey = key;\n lastResult = fn(...args);\n return lastResult;\n };\n\n const invalidate = () => {\n lastKey = null;\n };\n\n return [memoizedFn, invalidate];\n}\n\nvar Recoil_Memoize = {\n memoizeWithArgsHash,\n memoizeOneWithArgsHash,\n memoizeOneWithArgsHashAndInvalidation\n};\n\nconst {\n batchUpdates: batchUpdates$1\n} = Recoil_Batching;\n\nconst {\n initializeNode: initializeNode$1,\n peekNodeInfo: peekNodeInfo$1\n} = Recoil_FunctionalCore;\n\nconst {\n graph: graph$1\n} = Recoil_Graph;\n\nconst {\n getNextStoreID: getNextStoreID$1\n} = Recoil_Keys;\n\nconst {\n DEFAULT_VALUE: DEFAULT_VALUE$1,\n recoilValues: recoilValues$1,\n recoilValuesForKeys: recoilValuesForKeys$2\n} = Recoil_Node;\n\nconst {\n AbstractRecoilValue: AbstractRecoilValue$2,\n getRecoilValueAsLoadable: getRecoilValueAsLoadable$1,\n setRecoilValue: setRecoilValue$1,\n setUnvalidatedRecoilValue: setUnvalidatedRecoilValue$1\n} = Recoil_RecoilValueInterface;\n\nconst {\n updateRetainCount: updateRetainCount$1\n} = Recoil_Retention;\n\nconst {\n setInvalidateMemoizedSnapshot: setInvalidateMemoizedSnapshot$1\n} = Recoil_SnapshotCache;\n\nconst {\n getNextTreeStateVersion: getNextTreeStateVersion$2,\n makeEmptyStoreState: makeEmptyStoreState$1\n} = Recoil_State;\n\n\n\nconst {\n isSSR: isSSR$1\n} = Recoil_Environment;\n\n\n\n\n\n\n\n\n\nconst {\n memoizeOneWithArgsHashAndInvalidation: memoizeOneWithArgsHashAndInvalidation$1\n} = Recoil_Memoize;\n\n\n\n // Opaque at this surface because it's part of the public API from here.\n\n\nconst retainWarning = `\nRecoil Snapshots only last for the duration of the callback they are provided to. To keep a Snapshot longer, do this:\n\n const release = snapshot.retain();\n try {\n await doSomethingWithSnapshot(snapshot);\n } finally {\n release();\n }\n\nThis is currently a DEV-only warning but will become a thrown exception in the next release of Recoil.\n`; // A \"Snapshot\" is \"read-only\" and captures a specific set of values of atoms.\n// However, the data-flow-graph and selector values may evolve as selector\n// evaluation functions are executed and async selectors resolve.\n\nclass Snapshot {\n // eslint-disable-next-line fb-www/no-uninitialized-properties\n constructor(storeState, parentStoreID) {\n _defineProperty(this, \"_store\", void 0);\n\n _defineProperty(this, \"_refCount\", 1);\n\n _defineProperty(this, \"getLoadable\", recoilValue => {\n this.checkRefCount_INTERNAL();\n return getRecoilValueAsLoadable$1(this._store, recoilValue);\n });\n\n _defineProperty(this, \"getPromise\", recoilValue => {\n this.checkRefCount_INTERNAL();\n return this.getLoadable(recoilValue).toPromise();\n });\n\n _defineProperty(this, \"getNodes_UNSTABLE\", opt => {\n this.checkRefCount_INTERNAL(); // TODO Deal with modified selectors\n\n if ((opt === null || opt === void 0 ? void 0 : opt.isModified) === true) {\n if ((opt === null || opt === void 0 ? void 0 : opt.isInitialized) === false) {\n return [];\n }\n\n const state = this._store.getState().currentTree;\n\n return recoilValuesForKeys$2(state.dirtyAtoms);\n }\n\n const knownAtoms = this._store.getState().knownAtoms;\n\n const knownSelectors = this._store.getState().knownSelectors;\n\n return (opt === null || opt === void 0 ? void 0 : opt.isInitialized) == null ? recoilValues$1.values() : opt.isInitialized === true ? recoilValuesForKeys$2(Recoil_concatIterables([knownAtoms, knownSelectors])) : Recoil_filterIterable(recoilValues$1.values(), ({\n key\n }) => !knownAtoms.has(key) && !knownSelectors.has(key));\n });\n\n _defineProperty(this, \"getInfo_UNSTABLE\", ({\n key\n }) => {\n this.checkRefCount_INTERNAL();\n return peekNodeInfo$1(this._store, this._store.getState().currentTree, key);\n });\n\n _defineProperty(this, \"map\", mapper => {\n this.checkRefCount_INTERNAL();\n const mutableSnapshot = new MutableSnapshot(this, batchUpdates$1);\n mapper(mutableSnapshot); // if removing batchUpdates from `set` add it here\n\n return mutableSnapshot;\n });\n\n _defineProperty(this, \"asyncMap\", async mapper => {\n this.checkRefCount_INTERNAL();\n const mutableSnapshot = new MutableSnapshot(this, batchUpdates$1);\n mutableSnapshot.retain(); // Retain new snapshot during async mapper\n\n await mapper(mutableSnapshot); // Continue to retain the new snapshot for the user, but auto-release it\n // after the next tick, the same as a new synchronous snapshot.\n\n mutableSnapshot.autoRelease_INTERNAL();\n return mutableSnapshot;\n });\n\n this._store = {\n storeID: getNextStoreID$1(),\n parentStoreID,\n getState: () => storeState,\n replaceState: replacer => {\n // no batching, so nextTree is never active\n storeState.currentTree = replacer(storeState.currentTree);\n },\n getGraph: version => {\n const graphs = storeState.graphsByVersion;\n\n if (graphs.has(version)) {\n return Recoil_nullthrows(graphs.get(version));\n }\n\n const newGraph = graph$1();\n graphs.set(version, newGraph);\n return newGraph;\n },\n subscribeToTransactions: () => ({\n release: () => {}\n }),\n addTransactionMetadata: () => {\n throw Recoil_err('Cannot subscribe to Snapshots');\n }\n }; // Initialize any nodes that are live in the parent store (primarily so that\n // this snapshot gets counted towards the node's live stores count).\n // TODO Optimize this when cloning snapshots for callbacks\n\n for (const nodeKey of this._store.getState().knownAtoms) {\n initializeNode$1(this._store, nodeKey, 'get');\n updateRetainCount$1(this._store, nodeKey, 1);\n }\n\n this.autoRelease_INTERNAL();\n }\n\n retain() {\n if (this._refCount <= 0) {\n if (process.env.NODE_ENV !== \"production\") {\n throw Recoil_err('Snapshot has already been released.');\n } else {\n Recoil_recoverableViolation('Attempt to retain() Snapshot that was already released.');\n }\n }\n\n this._refCount++;\n let released = false;\n return () => {\n if (!released) {\n released = true;\n\n this._release();\n }\n };\n }\n /**\n * Release the snapshot on the next tick. This means the snapshot is retained\n * during the execution of the current function using it.\n */\n\n\n autoRelease_INTERNAL() {\n if (!isSSR$1) {\n // Use timeout of 10 to workaround Firefox issue: https://github.com/facebookexperimental/Recoil/issues/1936\n window.setTimeout(() => this._release(), 10);\n }\n }\n\n _release() {\n this._refCount--;\n\n if (this._refCount === 0) {\n this._store.getState().nodeCleanupFunctions.forEach(cleanup => cleanup());\n\n this._store.getState().nodeCleanupFunctions.clear();\n\n if (!Recoil_gkx('recoil_memory_managament_2020')) {\n return;\n } // Temporarily nerfing this to allow us to find broken call sites without\n // actually breaking anybody yet.\n // for (const k of this._store.getState().knownAtoms) {\n // updateRetainCountToZero(this._store, k);\n // }\n\n } else if (this._refCount < 0) {\n if (process.env.NODE_ENV !== \"production\") {\n Recoil_recoverableViolation('Snapshot released an extra time.');\n }\n }\n }\n\n isRetained() {\n return this._refCount > 0;\n }\n\n checkRefCount_INTERNAL() {\n if (Recoil_gkx('recoil_memory_managament_2020') && this._refCount <= 0) {\n if (process.env.NODE_ENV !== \"production\") {\n Recoil_recoverableViolation(retainWarning);\n } // What we will ship later:\n // throw err(retainWarning);\n\n }\n }\n\n getStore_INTERNAL() {\n this.checkRefCount_INTERNAL();\n return this._store;\n }\n\n getID() {\n this.checkRefCount_INTERNAL();\n return this._store.getState().currentTree.stateID;\n }\n\n getStoreID() {\n this.checkRefCount_INTERNAL();\n return this._store.storeID;\n } // We want to allow the methods to be destructured and used as accessors\n\n /* eslint-disable fb-www/extra-arrow-initializer */\n\n /* eslint-enable fb-www/extra-arrow-initializer */\n\n\n}\n\nfunction cloneStoreState(store, treeState, bumpVersion = false) {\n const storeState = store.getState();\n const version = bumpVersion ? getNextTreeStateVersion$2() : treeState.version;\n return {\n // Always clone the TreeState to isolate stores from accidental mutations.\n // For example, reading a selector from a cloned snapshot shouldn't cache\n // in the original treestate which may cause the original to skip\n // initialization of upstream atoms.\n currentTree: {\n // TODO snapshots shouldn't really have versions because a new version number\n // is always assigned when the snapshot is gone to.\n version: bumpVersion ? version : treeState.version,\n stateID: bumpVersion ? version : treeState.stateID,\n transactionMetadata: { ...treeState.transactionMetadata\n },\n dirtyAtoms: new Set(treeState.dirtyAtoms),\n atomValues: treeState.atomValues.clone(),\n nonvalidatedAtoms: treeState.nonvalidatedAtoms.clone()\n },\n commitDepth: 0,\n nextTree: null,\n previousTree: null,\n knownAtoms: new Set(storeState.knownAtoms),\n // FIXME here's a copy\n knownSelectors: new Set(storeState.knownSelectors),\n // FIXME here's a copy\n transactionSubscriptions: new Map(),\n nodeTransactionSubscriptions: new Map(),\n nodeToComponentSubscriptions: new Map(),\n queuedComponentCallbacks_DEPRECATED: [],\n suspendedComponentResolvers: new Set(),\n graphsByVersion: new Map().set(version, store.getGraph(treeState.version)),\n retention: {\n referenceCounts: new Map(),\n nodesRetainedByZone: new Map(),\n retainablesToCheckForRelease: new Set()\n },\n // FIXME here's a copy\n // Create blank cleanup handlers for atoms so snapshots don't re-run\n // atom effects.\n nodeCleanupFunctions: new Map(Recoil_mapIterable(storeState.nodeCleanupFunctions.entries(), ([key]) => [key, () => {}]))\n };\n} // Factory to build a fresh snapshot\n\n\nfunction freshSnapshot(initializeState) {\n const snapshot = new Snapshot(makeEmptyStoreState$1());\n return initializeState != null ? snapshot.map(initializeState) : snapshot;\n} // Factory to clone a snapshot state\n\n\nconst [memoizedCloneSnapshot, invalidateMemoizedSnapshot$2] = memoizeOneWithArgsHashAndInvalidation$1( // $FlowFixMe[missing-local-annot]\n(store, version) => {\n var _storeState$nextTree;\n\n const storeState = store.getState();\n const treeState = version === 'latest' ? (_storeState$nextTree = storeState.nextTree) !== null && _storeState$nextTree !== void 0 ? _storeState$nextTree : storeState.currentTree : Recoil_nullthrows(storeState.previousTree);\n return new Snapshot(cloneStoreState(store, treeState), store.storeID);\n}, (store, version) => {\n var _store$getState$nextT, _store$getState$previ;\n\n return String(version) + String(store.storeID) + String((_store$getState$nextT = store.getState().nextTree) === null || _store$getState$nextT === void 0 ? void 0 : _store$getState$nextT.version) + String(store.getState().currentTree.version) + String((_store$getState$previ = store.getState().previousTree) === null || _store$getState$previ === void 0 ? void 0 : _store$getState$previ.version);\n}); // Avoid circular dependencies\n\nsetInvalidateMemoizedSnapshot$1(invalidateMemoizedSnapshot$2);\n\nfunction cloneSnapshot(store, version = 'latest') {\n const snapshot = memoizedCloneSnapshot(store, version);\n\n if (!snapshot.isRetained()) {\n invalidateMemoizedSnapshot$2();\n return memoizedCloneSnapshot(store, version);\n }\n\n return snapshot;\n}\n\nclass MutableSnapshot extends Snapshot {\n constructor(snapshot, batch) {\n super(cloneStoreState(snapshot.getStore_INTERNAL(), snapshot.getStore_INTERNAL().getState().currentTree, true), snapshot.getStoreID());\n\n _defineProperty(this, \"_batch\", void 0);\n\n _defineProperty(this, \"set\", (recoilState, newValueOrUpdater) => {\n this.checkRefCount_INTERNAL();\n const store = this.getStore_INTERNAL(); // This batchUpdates ensures this `set` is applied immediately and you can\n // read the written value after calling `set`. I would like to remove this\n // behavior and only batch in `Snapshot.map`, but this would be a breaking\n // change potentially.\n\n this._batch(() => {\n updateRetainCount$1(store, recoilState.key, 1);\n setRecoilValue$1(this.getStore_INTERNAL(), recoilState, newValueOrUpdater);\n });\n });\n\n _defineProperty(this, \"reset\", recoilState => {\n this.checkRefCount_INTERNAL();\n const store = this.getStore_INTERNAL(); // See note at `set` about batched updates.\n\n this._batch(() => {\n updateRetainCount$1(store, recoilState.key, 1);\n setRecoilValue$1(this.getStore_INTERNAL(), recoilState, DEFAULT_VALUE$1);\n });\n });\n\n _defineProperty(this, \"setUnvalidatedAtomValues_DEPRECATED\", values => {\n this.checkRefCount_INTERNAL();\n const store = this.getStore_INTERNAL(); // See note at `set` about batched updates.\n\n batchUpdates$1(() => {\n for (const [k, v] of values.entries()) {\n updateRetainCount$1(store, k, 1);\n setUnvalidatedRecoilValue$1(store, new AbstractRecoilValue$2(k), v);\n }\n });\n });\n\n this._batch = batch;\n }\n\n}\n\nvar Recoil_Snapshot = {\n Snapshot,\n MutableSnapshot,\n freshSnapshot,\n cloneSnapshot\n};\n\nvar Recoil_Snapshot_1 = Recoil_Snapshot.Snapshot;\nvar Recoil_Snapshot_2 = Recoil_Snapshot.MutableSnapshot;\nvar Recoil_Snapshot_3 = Recoil_Snapshot.freshSnapshot;\nvar Recoil_Snapshot_4 = Recoil_Snapshot.cloneSnapshot;\n\nvar Recoil_Snapshot$1 = /*#__PURE__*/Object.freeze({\n __proto__: null,\n Snapshot: Recoil_Snapshot_1,\n MutableSnapshot: Recoil_Snapshot_2,\n freshSnapshot: Recoil_Snapshot_3,\n cloneSnapshot: Recoil_Snapshot_4\n});\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n * @oncall recoil\n */\n\nfunction unionSets(...sets) {\n const result = new Set();\n\n for (const set of sets) {\n for (const value of set) {\n result.add(value);\n }\n }\n\n return result;\n}\n\nvar Recoil_unionSets = unionSets;\n\nconst {\n useRef\n} = react;\n/**\n * The same as `useRef()` except that if a function is specified then it will\n * call that function to get the value to initialize the reference with.\n * This is similar to how `useState()` behaves when given a function. It allows\n * the user to avoid generating the initial value for subsequent renders.\n * The tradeoff is that to set the reference to a function itself you need to\n * nest it: useRefInitOnce(() => () => {...});\n */\n\n\nfunction useRefInitOnce(initialValue) {\n // $FlowExpectedError[incompatible-call]\n const ref = useRef(initialValue);\n\n if (ref.current === initialValue && typeof initialValue === 'function') {\n // $FlowExpectedError[incompatible-use]\n ref.current = initialValue();\n }\n\n return ref;\n}\n\nvar Recoil_useRefInitOnce = useRefInitOnce;\n\n// @fb-only: const RecoilusagelogEvent = require('RecoilusagelogEvent');\n// @fb-only: const RecoilUsageLogFalcoEvent = require('RecoilUsageLogFalcoEvent');\n// @fb-only: const URI = require('URI');\n\n\nconst {\n getNextTreeStateVersion: getNextTreeStateVersion$3,\n makeEmptyStoreState: makeEmptyStoreState$2\n} = Recoil_State;\n\nconst {\n cleanUpNode: cleanUpNode$2,\n getDownstreamNodes: getDownstreamNodes$2,\n initializeNode: initializeNode$2,\n setNodeValue: setNodeValue$2,\n setUnvalidatedAtomValue_DEPRECATED: setUnvalidatedAtomValue_DEPRECATED$1\n} = Recoil_FunctionalCore;\n\nconst {\n graph: graph$2\n} = Recoil_Graph;\n\nconst {\n cloneGraph: cloneGraph$1\n} = Recoil_Graph;\n\nconst {\n getNextStoreID: getNextStoreID$2\n} = Recoil_Keys;\n\nconst {\n createMutableSource: createMutableSource$1,\n reactMode: reactMode$2\n} = Recoil_ReactMode;\n\nconst {\n applyAtomValueWrites: applyAtomValueWrites$1\n} = Recoil_RecoilValueInterface;\n\nconst {\n releaseScheduledRetainablesNow: releaseScheduledRetainablesNow$1\n} = Recoil_Retention;\n\nconst {\n freshSnapshot: freshSnapshot$1\n} = Recoil_Snapshot$1;\n\n\n\nconst {\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef: useRef$1,\n useState\n} = react;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction notInAContext() {\n throw Recoil_err('This component must be used inside a component.');\n}\n\nconst defaultStore = Object.freeze({\n storeID: getNextStoreID$2(),\n getState: notInAContext,\n replaceState: notInAContext,\n getGraph: notInAContext,\n subscribeToTransactions: notInAContext,\n addTransactionMetadata: notInAContext\n});\nlet stateReplacerIsBeingExecuted = false;\n\nfunction startNextTreeIfNeeded(store) {\n if (stateReplacerIsBeingExecuted) {\n throw Recoil_err('An atom update was triggered within the execution of a state updater function. State updater functions provided to Recoil must be pure functions.');\n }\n\n const storeState = store.getState();\n\n if (storeState.nextTree === null) {\n if (Recoil_gkx('recoil_memory_managament_2020') && Recoil_gkx('recoil_release_on_cascading_update_killswitch_2021')) {\n // If this is a cascading update (that is, rendering due to one state change\n // invokes a second state change), we won't have cleaned up retainables yet\n // because this normally happens after notifying components. Do it before\n // proceeding with the cascading update so that it remains predictable:\n if (storeState.commitDepth > 0) {\n releaseScheduledRetainablesNow$1(store);\n }\n }\n\n const version = storeState.currentTree.version;\n const nextVersion = getNextTreeStateVersion$3();\n storeState.nextTree = { ...storeState.currentTree,\n version: nextVersion,\n stateID: nextVersion,\n dirtyAtoms: new Set(),\n transactionMetadata: {}\n };\n storeState.graphsByVersion.set(nextVersion, cloneGraph$1(Recoil_nullthrows(storeState.graphsByVersion.get(version))));\n }\n}\n\nconst AppContext = react.createContext({\n current: defaultStore\n});\n\nconst useStoreRef = () => useContext(AppContext); // $FlowExpectedError[incompatible-call]\n\n\nconst MutableSourceContext = react.createContext(null);\n\nfunction useRecoilMutableSource() {\n const mutableSource = useContext(MutableSourceContext);\n\n if (mutableSource == null) {\n Recoil_expectationViolation('Attempted to use a Recoil hook outside of a . ' + ' must be an ancestor of any component that uses ' + 'Recoil hooks.');\n }\n\n return mutableSource;\n}\n\nfunction notifyComponents(store, storeState, treeState) {\n const dependentNodes = getDownstreamNodes$2(store, treeState, treeState.dirtyAtoms);\n\n for (const key of dependentNodes) {\n const comps = storeState.nodeToComponentSubscriptions.get(key);\n\n if (comps) {\n for (const [_subID, [_debugName, callback]] of comps) {\n callback(treeState);\n }\n }\n }\n}\n\nfunction sendEndOfBatchNotifications(store) {\n const storeState = store.getState();\n const treeState = storeState.currentTree; // Inform transaction subscribers of the transaction:\n\n const dirtyAtoms = treeState.dirtyAtoms;\n\n if (dirtyAtoms.size) {\n // Execute Node-specific subscribers before global subscribers\n for (const [key, subscriptions] of storeState.nodeTransactionSubscriptions) {\n if (dirtyAtoms.has(key)) {\n for (const [_, subscription] of subscriptions) {\n subscription(store);\n }\n }\n }\n\n for (const [_, subscription] of storeState.transactionSubscriptions) {\n subscription(store);\n }\n\n if (!reactMode$2().early || storeState.suspendedComponentResolvers.size > 0) {\n // Notifying components is needed to wake from suspense, even when using\n // early rendering.\n notifyComponents(store, storeState, treeState); // Wake all suspended components so the right one(s) can try to re-render.\n // We need to wake up components not just when some asynchronous selector\n // resolved, but also when changing synchronous values because this may cause\n // a selector to change from asynchronous to synchronous, in which case there\n // would be no follow-up asynchronous resolution to wake us up.\n // TODO OPTIMIZATION Only wake up related downstream components\n\n storeState.suspendedComponentResolvers.forEach(cb => cb());\n storeState.suspendedComponentResolvers.clear();\n }\n } // Special behavior ONLY invoked by useInterface.\n // FIXME delete queuedComponentCallbacks_DEPRECATED when deleting useInterface.\n\n\n storeState.queuedComponentCallbacks_DEPRECATED.forEach(cb => cb(treeState));\n storeState.queuedComponentCallbacks_DEPRECATED.splice(0, storeState.queuedComponentCallbacks_DEPRECATED.length);\n}\n\nfunction endBatch(store) {\n const storeState = store.getState();\n storeState.commitDepth++;\n\n try {\n const {\n nextTree\n } = storeState; // Ignore commits that are not because of Recoil transactions -- namely,\n // because something above RecoilRoot re-rendered:\n\n if (nextTree == null) {\n return;\n } // nextTree is now committed -- note that copying and reset occurs when\n // a transaction begins, in startNextTreeIfNeeded:\n\n\n storeState.previousTree = storeState.currentTree;\n storeState.currentTree = nextTree;\n storeState.nextTree = null;\n sendEndOfBatchNotifications(store);\n\n if (storeState.previousTree != null) {\n storeState.graphsByVersion.delete(storeState.previousTree.version);\n } else {\n Recoil_recoverableViolation('Ended batch with no previous state, which is unexpected', 'recoil');\n }\n\n storeState.previousTree = null;\n\n if (Recoil_gkx('recoil_memory_managament_2020')) {\n // Only release retainables if there were no writes during the end of the\n // batch. This avoids releasing something we might be about to use.\n if (nextTree == null) {\n releaseScheduledRetainablesNow$1(store);\n }\n }\n } finally {\n storeState.commitDepth--;\n }\n}\n/*\n * The purpose of the Batcher is to observe when React batches end so that\n * Recoil state changes can be batched. Whenever Recoil state changes, we call\n * setState on the batcher. Then we wait for that change to be committed, which\n * signifies the end of the batch. That's when we respond to the Recoil change.\n */\n\n\nfunction Batcher({\n setNotifyBatcherOfChange\n}) {\n const storeRef = useStoreRef();\n const [, setState] = useState([]); // $FlowFixMe[incompatible-call]\n\n setNotifyBatcherOfChange(() => setState({}));\n useEffect(() => {\n // $FlowFixMe[incompatible-call]\n setNotifyBatcherOfChange(() => setState({})); // If an asynchronous selector resolves after the Batcher is unmounted,\n // notifyBatcherOfChange will still be called. An error gets thrown whenever\n // setState is called after a component is already unmounted, so this sets\n // notifyBatcherOfChange to be a no-op.\n\n return () => {\n setNotifyBatcherOfChange(() => {});\n };\n }, [setNotifyBatcherOfChange]);\n useEffect(() => {\n // enqueueExecution runs this function immediately; it is only used to\n // manipulate the order of useEffects during tests, since React seems to\n // call useEffect in an unpredictable order sometimes.\n Recoil_Queue.enqueueExecution('Batcher', () => {\n endBatch(storeRef.current);\n });\n });\n return null;\n}\n\nif (process.env.NODE_ENV !== \"production\") {\n if (typeof window !== 'undefined' && !window.$recoilDebugStates) {\n window.$recoilDebugStates = [];\n }\n} // When removing this deprecated function, remove stateBySettingRecoilValue\n// which will no longer be needed.\n\n\nfunction initialStoreState_DEPRECATED(store, initializeState) {\n const initial = makeEmptyStoreState$2();\n initializeState({\n set: (atom, value) => {\n const state = initial.currentTree;\n const writes = setNodeValue$2(store, state, atom.key, value);\n const writtenNodes = new Set(writes.keys());\n const nonvalidatedAtoms = state.nonvalidatedAtoms.clone();\n\n for (const n of writtenNodes) {\n nonvalidatedAtoms.delete(n);\n }\n\n initial.currentTree = { ...state,\n dirtyAtoms: Recoil_unionSets(state.dirtyAtoms, writtenNodes),\n atomValues: applyAtomValueWrites$1(state.atomValues, writes),\n // NB: PLEASE un-export applyAtomValueWrites when deleting this code\n nonvalidatedAtoms\n };\n },\n setUnvalidatedAtomValues: atomValues => {\n // FIXME replace this with a mutative loop\n atomValues.forEach((v, k) => {\n initial.currentTree = setUnvalidatedAtomValue_DEPRECATED$1(initial.currentTree, k, v);\n });\n }\n });\n return initial;\n} // Initialize state snapshot for for the initializeState prop.\n// Atom effect initialization takes precedence over this prop.\n// Any atom effects will be run before initialization, but then cleaned up,\n// they are then re-run when used as part of rendering. These semantics are\n// compatible with React StrictMode where effects may be re-run multiple times\n// but state initialization only happens once the first time.\n\n\nfunction initialStoreState(initializeState) {\n // Initialize a snapshot and get its store\n const snapshot = freshSnapshot$1(initializeState);\n const storeState = snapshot.getStore_INTERNAL().getState(); // Counteract the snapshot auto-release\n\n snapshot.retain(); // Cleanup any effects run during initialization and clear the handlers so\n // they will re-initialize if used during rendering. This allows atom effect\n // initialization to take precedence over initializeState and be compatible\n // with StrictMode semantics.\n\n storeState.nodeCleanupFunctions.forEach(cleanup => cleanup());\n storeState.nodeCleanupFunctions.clear();\n return storeState;\n}\n\nlet nextID = 0;\n\nfunction RecoilRoot_INTERNAL({\n initializeState_DEPRECATED,\n initializeState,\n store_INTERNAL: storeProp,\n // For use with React \"context bridging\"\n children\n}) {\n // prettier-ignore\n // @fb-only: useEffect(() => {\n // @fb-only: if (gkx('recoil_usage_logging')) {\n // @fb-only: try {\n // @fb-only: RecoilUsageLogFalcoEvent.log(() => ({\n // @fb-only: type: RecoilusagelogEvent.RECOIL_ROOT_MOUNTED,\n // @fb-only: path: URI.getRequestURI().getPath(),\n // @fb-only: }));\n // @fb-only: } catch {\n // @fb-only: recoverableViolation(\n // @fb-only: 'Error when logging Recoil Usage event',\n // @fb-only: 'recoil',\n // @fb-only: );\n // @fb-only: }\n // @fb-only: }\n // @fb-only: }, []);\n let storeStateRef; // eslint-disable-line prefer-const\n\n const getGraph = version => {\n const graphs = storeStateRef.current.graphsByVersion;\n\n if (graphs.has(version)) {\n return Recoil_nullthrows(graphs.get(version));\n }\n\n const newGraph = graph$2();\n graphs.set(version, newGraph);\n return newGraph;\n };\n\n const subscribeToTransactions = (callback, key) => {\n if (key == null) {\n // Global transaction subscriptions\n const {\n transactionSubscriptions\n } = storeRef.current.getState();\n const id = nextID++;\n transactionSubscriptions.set(id, callback);\n return {\n release: () => {\n transactionSubscriptions.delete(id);\n }\n };\n } else {\n // Node-specific transaction subscriptions:\n const {\n nodeTransactionSubscriptions\n } = storeRef.current.getState();\n\n if (!nodeTransactionSubscriptions.has(key)) {\n nodeTransactionSubscriptions.set(key, new Map());\n }\n\n const id = nextID++;\n Recoil_nullthrows(nodeTransactionSubscriptions.get(key)).set(id, callback);\n return {\n release: () => {\n const subs = nodeTransactionSubscriptions.get(key);\n\n if (subs) {\n subs.delete(id);\n\n if (subs.size === 0) {\n nodeTransactionSubscriptions.delete(key);\n }\n }\n }\n };\n }\n };\n\n const addTransactionMetadata = metadata => {\n startNextTreeIfNeeded(storeRef.current);\n\n for (const k of Object.keys(metadata)) {\n Recoil_nullthrows(storeRef.current.getState().nextTree).transactionMetadata[k] = metadata[k];\n }\n };\n\n const replaceState = replacer => {\n startNextTreeIfNeeded(storeRef.current); // Use replacer to get the next state:\n\n const nextTree = Recoil_nullthrows(storeStateRef.current.nextTree);\n let replaced;\n\n try {\n stateReplacerIsBeingExecuted = true;\n replaced = replacer(nextTree);\n } finally {\n stateReplacerIsBeingExecuted = false;\n }\n\n if (replaced === nextTree) {\n return;\n }\n\n if (process.env.NODE_ENV !== \"production\") {\n if (typeof window !== 'undefined') {\n window.$recoilDebugStates.push(replaced); // TODO this shouldn't happen here because it's not batched\n }\n } // Save changes to nextTree and schedule a React update:\n\n\n storeStateRef.current.nextTree = replaced;\n\n if (reactMode$2().early) {\n notifyComponents(storeRef.current, storeStateRef.current, replaced);\n }\n\n Recoil_nullthrows(notifyBatcherOfChange.current)();\n };\n\n const notifyBatcherOfChange = useRef$1(null);\n const setNotifyBatcherOfChange = useCallback(x => {\n notifyBatcherOfChange.current = x;\n }, [notifyBatcherOfChange]);\n const storeRef = Recoil_useRefInitOnce(() => storeProp !== null && storeProp !== void 0 ? storeProp : {\n storeID: getNextStoreID$2(),\n getState: () => storeStateRef.current,\n replaceState,\n getGraph,\n subscribeToTransactions,\n addTransactionMetadata\n });\n\n if (storeProp != null) {\n storeRef.current = storeProp;\n }\n\n storeStateRef = Recoil_useRefInitOnce(() => initializeState_DEPRECATED != null ? initialStoreState_DEPRECATED(storeRef.current, initializeState_DEPRECATED) : initializeState != null ? initialStoreState(initializeState) : makeEmptyStoreState$2());\n const mutableSource = useMemo(() => createMutableSource$1 === null || createMutableSource$1 === void 0 ? void 0 : createMutableSource$1(storeStateRef, () => storeStateRef.current.currentTree.version), [storeStateRef]); // Cleanup when the is unmounted\n\n useEffect(() => {\n // React is free to call effect cleanup handlers and effects at will, the\n // deps array is only an optimization. For example, React strict mode\n // will execute each effect twice for testing. Therefore, we need symmetry\n // to re-initialize all known atoms after they were cleaned up.\n const store = storeRef.current;\n\n for (const atomKey of new Set(store.getState().knownAtoms)) {\n initializeNode$2(store, atomKey, 'get');\n }\n\n return () => {\n for (const atomKey of store.getState().knownAtoms) {\n cleanUpNode$2(store, atomKey);\n }\n };\n }, [storeRef]);\n return /*#__PURE__*/react.createElement(AppContext.Provider, {\n value: storeRef\n }, /*#__PURE__*/react.createElement(MutableSourceContext.Provider, {\n value: mutableSource\n }, /*#__PURE__*/react.createElement(Batcher, {\n setNotifyBatcherOfChange: setNotifyBatcherOfChange\n }), children));\n}\n\nfunction RecoilRoot(props) {\n const {\n override,\n ...propsExceptOverride\n } = props;\n const ancestorStoreRef = useStoreRef();\n\n if (override === false && ancestorStoreRef.current !== defaultStore) {\n // If ancestorStoreRef.current !== defaultStore, it means that this\n // RecoilRoot is not nested within another.\n return props.children;\n }\n\n return /*#__PURE__*/react.createElement(RecoilRoot_INTERNAL, propsExceptOverride);\n}\n\nfunction useRecoilStoreID() {\n return useStoreRef().current.storeID;\n}\n\nvar Recoil_RecoilRoot = {\n RecoilRoot,\n useStoreRef,\n useRecoilMutableSource,\n useRecoilStoreID,\n notifyComponents_FOR_TESTING: notifyComponents,\n sendEndOfBatchNotifications_FOR_TESTING: sendEndOfBatchNotifications\n};\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n * @oncall recoil\n */\n\nfunction shallowArrayEqual(a, b) {\n if (a === b) {\n return true;\n }\n\n if (a.length !== b.length) {\n return false;\n }\n\n for (let i = 0, l = a.length; i < l; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n\n return true;\n}\n\nvar Recoil_shallowArrayEqual = shallowArrayEqual;\n\nconst {\n useEffect: useEffect$1,\n useRef: useRef$2\n} = react;\n\nfunction usePrevious(value) {\n const ref = useRef$2();\n useEffect$1(() => {\n // $FlowFixMe[incompatible-type]\n ref.current = value;\n });\n return ref.current;\n}\n\nvar Recoil_usePrevious = usePrevious;\n\nconst {\n useStoreRef: useStoreRef$1\n} = Recoil_RecoilRoot;\n\nconst {\n SUSPENSE_TIMEOUT_MS: SUSPENSE_TIMEOUT_MS$1\n} = Recoil_Retention;\n\nconst {\n updateRetainCount: updateRetainCount$2\n} = Recoil_Retention;\n\nconst {\n RetentionZone: RetentionZone$3\n} = Recoil_RetentionZone;\n\nconst {\n useEffect: useEffect$2,\n useRef: useRef$3\n} = react;\n\nconst {\n isSSR: isSSR$2\n} = Recoil_Environment;\n\n\n\n\n\n // I don't see a way to avoid the any type here because we want to accept readable\n// and writable values with any type parameter, but normally with writable ones\n// RecoilState is not a subtype of RecoilState.\n\n\n// flowlint-line unclear-type:off\nfunction useRetain(toRetain) {\n if (!Recoil_gkx('recoil_memory_managament_2020')) {\n return;\n } // eslint-disable-next-line fb-www/react-hooks\n\n\n return useRetain_ACTUAL(toRetain);\n}\n\nfunction useRetain_ACTUAL(toRetain) {\n const array = Array.isArray(toRetain) ? toRetain : [toRetain];\n const retainables = array.map(a => a instanceof RetentionZone$3 ? a : a.key);\n const storeRef = useStoreRef$1();\n useEffect$2(() => {\n if (!Recoil_gkx('recoil_memory_managament_2020')) {\n return;\n }\n\n const store = storeRef.current;\n\n if (timeoutID.current && !isSSR$2) {\n // Already performed a temporary retain on render, simply cancel the release\n // of that temporary retain.\n window.clearTimeout(timeoutID.current);\n timeoutID.current = null;\n } else {\n for (const r of retainables) {\n updateRetainCount$2(store, r, 1);\n }\n }\n\n return () => {\n for (const r of retainables) {\n updateRetainCount$2(store, r, -1);\n }\n }; // eslint-disable-next-line fb-www/react-hooks-deps\n }, [storeRef, ...retainables]); // We want to retain if the component suspends. This is terrible but the Suspense\n // API affords us no better option. If we suspend and never commit after some\n // seconds, then release. The 'actual' retain/release in the effect above\n // cancels this.\n\n const timeoutID = useRef$3();\n const previousRetainables = Recoil_usePrevious(retainables);\n\n if (!isSSR$2 && (previousRetainables === undefined || !Recoil_shallowArrayEqual(previousRetainables, retainables))) {\n const store = storeRef.current;\n\n for (const r of retainables) {\n updateRetainCount$2(store, r, 1);\n }\n\n if (previousRetainables) {\n for (const r of previousRetainables) {\n updateRetainCount$2(store, r, -1);\n }\n }\n\n if (timeoutID.current) {\n window.clearTimeout(timeoutID.current);\n }\n\n timeoutID.current = window.setTimeout(() => {\n timeoutID.current = null;\n\n for (const r of retainables) {\n updateRetainCount$2(store, r, -1);\n }\n }, SUSPENSE_TIMEOUT_MS$1);\n }\n}\n\nvar Recoil_useRetain = useRetain;\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n * @oncall recoil\n */\n/**\n * THIS CODE HAS BEEN COMMENTED OUT INTENTIONALLY\n *\n * This technique of getting the component name is imperfect, since it both only\n * works in a non-minified code base, and more importantly introduces performance\n * problems since it relies in throwing errors which is an expensive operation.\n *\n * At some point we may want to reevaluate this technique hence why we have commented\n * this code out, rather than delete it all together.\n */\n// const {useRef} = require('react');\n// const gkx = require('recoil-shared/util/Recoil_gkx');\n// const stackTraceParser = require('recoil-shared/util/Recoil_stackTraceParser');\n\nfunction useComponentName() {\n // const nameRef = useRef();\n // if (__DEV__) {\n // if (gkx('recoil_infer_component_names')) {\n // if (nameRef.current === undefined) {\n // // There is no blessed way to determine the calling React component from\n // // within a hook. This hack uses the fact that hooks must start with 'use'\n // // and that hooks are either called by React Components or other hooks. It\n // // follows therefore, that to find the calling component, you simply need\n // // to look down the stack and find the first function which doesn't start\n // // with 'use'. We are only enabling this in dev for now, since once the\n // // codebase is minified, the naming assumptions no longer hold true.\n // // eslint-disable-next-line fb-www/no-new-error\n // const frames = stackTraceParser(new Error().stack);\n // for (const {methodName} of frames) {\n // // I observed cases where the frame was of the form 'Object.useXXX'\n // // hence why I'm searching for hooks following a word boundary\n // if (!methodName.match(/\\buse[^\\b]+$/)) {\n // return (nameRef.current = methodName);\n // }\n // }\n // nameRef.current = null;\n // }\n // return nameRef.current ?? '';\n // }\n // }\n // @fb-only: return \"\";\n return ''; // @oss-only\n}\n\nvar Recoil_useComponentName = useComponentName;\n\nconst {\n batchUpdates: batchUpdates$2\n} = Recoil_Batching;\n\nconst {\n DEFAULT_VALUE: DEFAULT_VALUE$2\n} = Recoil_Node;\n\nconst {\n currentRendererSupportsUseSyncExternalStore: currentRendererSupportsUseSyncExternalStore$1,\n reactMode: reactMode$3,\n useMutableSource: useMutableSource$1,\n useSyncExternalStore: useSyncExternalStore$1\n} = Recoil_ReactMode;\n\nconst {\n useRecoilMutableSource: useRecoilMutableSource$1,\n useStoreRef: useStoreRef$2\n} = Recoil_RecoilRoot;\n\nconst {\n isRecoilValue: isRecoilValue$2\n} = Recoil_RecoilValue$1;\n\nconst {\n AbstractRecoilValue: AbstractRecoilValue$3,\n getRecoilValueAsLoadable: getRecoilValueAsLoadable$2,\n setRecoilValue: setRecoilValue$2,\n setUnvalidatedRecoilValue: setUnvalidatedRecoilValue$2,\n subscribeToRecoilValue: subscribeToRecoilValue$1\n} = Recoil_RecoilValueInterface;\n\n\n\nconst {\n useCallback: useCallback$1,\n useEffect: useEffect$3,\n useMemo: useMemo$1,\n useRef: useRef$4,\n useState: useState$1\n} = react;\n\nconst {\n setByAddingToSet: setByAddingToSet$2\n} = Recoil_CopyOnWrite;\n\n\n\nconst {\n isSSR: isSSR$3\n} = Recoil_Environment;\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction handleLoadable(loadable, recoilValue, storeRef) {\n // We can't just throw the promise we are waiting on to Suspense. If the\n // upstream dependencies change it may produce a state in which the component\n // can render, but it would still be suspended on a Promise that may never resolve.\n if (loadable.state === 'hasValue') {\n return loadable.contents;\n } else if (loadable.state === 'loading') {\n const promise = new Promise(resolve => {\n const suspendedComponentResolvers = storeRef.current.getState().suspendedComponentResolvers;\n suspendedComponentResolvers.add(resolve); // SSR should clear out the wake-up resolver if the Promise is resolved\n // to avoid infinite loops. (See https://github.com/facebookexperimental/Recoil/pull/2073)\n\n if (isSSR$3 && Recoil_isPromise(loadable.contents)) {\n loadable.contents.finally(() => {\n suspendedComponentResolvers.delete(resolve);\n });\n }\n }); // $FlowExpectedError Flow(prop-missing) for integrating with tools that inspect thrown promises @fb-only\n // @fb-only: promise.displayName = `Recoil State: ${recoilValue.key}`;\n\n throw promise;\n } else if (loadable.state === 'hasError') {\n throw loadable.contents;\n } else {\n throw Recoil_err(`Invalid value of loadable atom \"${recoilValue.key}\"`);\n }\n}\n\nfunction validateRecoilValue(recoilValue, hookName // $FlowFixMe[missing-local-annot]\n) {\n if (!isRecoilValue$2(recoilValue)) {\n throw Recoil_err(`Invalid argument to ${hookName}: expected an atom or selector but got ${String(recoilValue)}`);\n }\n}\n\n/**\n * Various things are broken with useRecoilInterface, particularly concurrent\n * mode, React strict mode, and memory management. They will not be fixed.\n * */\nfunction useRecoilInterface_DEPRECATED() {\n const componentName = Recoil_useComponentName();\n const storeRef = useStoreRef$2(); // eslint-disable-next-line fb-www/react-no-unused-state-hook\n\n const [, forceUpdate] = useState$1([]);\n const recoilValuesUsed = useRef$4(new Set());\n recoilValuesUsed.current = new Set(); // Track the RecoilValues used just during this render\n\n const previousSubscriptions = useRef$4(new Set());\n const subscriptions = useRef$4(new Map());\n const unsubscribeFrom = useCallback$1(key => {\n const sub = subscriptions.current.get(key);\n\n if (sub) {\n sub.release();\n subscriptions.current.delete(key);\n }\n }, [subscriptions]);\n const updateState = useCallback$1((_state, key) => {\n if (subscriptions.current.has(key)) {\n forceUpdate([]);\n }\n }, []); // Effect to add/remove subscriptions as nodes are used\n\n useEffect$3(() => {\n const store = storeRef.current;\n Recoil_differenceSets(recoilValuesUsed.current, previousSubscriptions.current).forEach(key => {\n if (subscriptions.current.has(key)) {\n Recoil_expectationViolation(`Double subscription to RecoilValue \"${key}\"`);\n return;\n }\n\n const sub = subscribeToRecoilValue$1(store, new AbstractRecoilValue$3(key), state => updateState(state, key), componentName);\n subscriptions.current.set(key, sub);\n /**\n * Since we're subscribing in an effect we need to update to the latest\n * value of the atom since it may have changed since we rendered. We can\n * go ahead and do that now, unless we're in the middle of a batch --\n * in which case we should do it at the end of the batch, due to the\n * following edge case: Suppose an atom is updated in another useEffect\n * of this same component. Then the following sequence of events occur:\n * 1. Atom is updated and subs fired (but we may not be subscribed\n * yet depending on order of effects, so we miss this) Updated value\n * is now in nextTree, but not currentTree.\n * 2. This effect happens. We subscribe and update.\n * 3. From the update we re-render and read currentTree, with old value.\n * 4. Batcher's effect sets currentTree to nextTree.\n * In this sequence we miss the update. To avoid that, add the update\n * to queuedComponentCallback if a batch is in progress.\n */\n // FIXME delete queuedComponentCallbacks_DEPRECATED when deleting useInterface.\n\n const state = store.getState();\n\n if (state.nextTree) {\n store.getState().queuedComponentCallbacks_DEPRECATED.push(() => {\n updateState(store.getState(), key);\n });\n } else {\n updateState(store.getState(), key);\n }\n });\n Recoil_differenceSets(previousSubscriptions.current, recoilValuesUsed.current).forEach(key => {\n unsubscribeFrom(key);\n });\n previousSubscriptions.current = recoilValuesUsed.current;\n }); // Effect to unsubscribe from all when unmounting\n\n useEffect$3(() => {\n const currentSubscriptions = subscriptions.current; // Restore subscriptions that were cleared due to StrictMode running this effect twice\n\n Recoil_differenceSets(recoilValuesUsed.current, new Set(currentSubscriptions.keys())).forEach(key => {\n const sub = subscribeToRecoilValue$1(storeRef.current, new AbstractRecoilValue$3(key), state => updateState(state, key), componentName);\n currentSubscriptions.set(key, sub);\n });\n return () => currentSubscriptions.forEach((_, key) => unsubscribeFrom(key));\n }, [componentName, storeRef, unsubscribeFrom, updateState]);\n return useMemo$1(() => {\n // eslint-disable-next-line no-shadow\n function useSetRecoilState(recoilState) {\n if (process.env.NODE_ENV !== \"production\") {\n validateRecoilValue(recoilState, 'useSetRecoilState');\n }\n\n return newValueOrUpdater => {\n setRecoilValue$2(storeRef.current, recoilState, newValueOrUpdater);\n };\n } // eslint-disable-next-line no-shadow\n\n\n function useResetRecoilState(recoilState) {\n if (process.env.NODE_ENV !== \"production\") {\n validateRecoilValue(recoilState, 'useResetRecoilState');\n }\n\n return () => setRecoilValue$2(storeRef.current, recoilState, DEFAULT_VALUE$2);\n } // eslint-disable-next-line no-shadow\n\n\n function useRecoilValueLoadable(recoilValue) {\n var _storeState$nextTree;\n\n if (process.env.NODE_ENV !== \"production\") {\n validateRecoilValue(recoilValue, 'useRecoilValueLoadable');\n }\n\n if (!recoilValuesUsed.current.has(recoilValue.key)) {\n recoilValuesUsed.current = setByAddingToSet$2(recoilValuesUsed.current, recoilValue.key);\n } // TODO Restore optimization to memoize lookup\n\n\n const storeState = storeRef.current.getState();\n return getRecoilValueAsLoadable$2(storeRef.current, recoilValue, reactMode$3().early ? (_storeState$nextTree = storeState.nextTree) !== null && _storeState$nextTree !== void 0 ? _storeState$nextTree : storeState.currentTree : storeState.currentTree);\n } // eslint-disable-next-line no-shadow\n\n\n function useRecoilValue(recoilValue) {\n if (process.env.NODE_ENV !== \"production\") {\n validateRecoilValue(recoilValue, 'useRecoilValue');\n }\n\n const loadable = useRecoilValueLoadable(recoilValue);\n return handleLoadable(loadable, recoilValue, storeRef);\n } // eslint-disable-next-line no-shadow\n\n\n function useRecoilState(recoilState) {\n if (process.env.NODE_ENV !== \"production\") {\n validateRecoilValue(recoilState, 'useRecoilState');\n }\n\n return [useRecoilValue(recoilState), useSetRecoilState(recoilState)];\n } // eslint-disable-next-line no-shadow\n\n\n function useRecoilStateLoadable(recoilState) {\n if (process.env.NODE_ENV !== \"production\") {\n validateRecoilValue(recoilState, 'useRecoilStateLoadable');\n }\n\n return [useRecoilValueLoadable(recoilState), useSetRecoilState(recoilState)];\n }\n\n return {\n getRecoilValue: useRecoilValue,\n getRecoilValueLoadable: useRecoilValueLoadable,\n getRecoilState: useRecoilState,\n getRecoilStateLoadable: useRecoilStateLoadable,\n getSetRecoilState: useSetRecoilState,\n getResetRecoilState: useResetRecoilState\n };\n }, [recoilValuesUsed, storeRef]);\n}\n\nconst recoilComponentGetRecoilValueCount_FOR_TESTING = {\n current: 0\n};\n\nfunction useRecoilValueLoadable_SYNC_EXTERNAL_STORE(recoilValue) {\n const storeRef = useStoreRef$2();\n const componentName = Recoil_useComponentName();\n const getSnapshot = useCallback$1(() => {\n var _storeState$nextTree2;\n\n if (process.env.NODE_ENV !== \"production\") {\n recoilComponentGetRecoilValueCount_FOR_TESTING.current++;\n }\n\n const store = storeRef.current;\n const storeState = store.getState();\n const treeState = reactMode$3().early ? (_storeState$nextTree2 = storeState.nextTree) !== null && _storeState$nextTree2 !== void 0 ? _storeState$nextTree2 : storeState.currentTree : storeState.currentTree;\n const loadable = getRecoilValueAsLoadable$2(store, recoilValue, treeState);\n return {\n loadable,\n key: recoilValue.key\n };\n }, [storeRef, recoilValue]); // Memoize the state to avoid unnecessary rerenders\n\n const memoizePreviousSnapshot = useCallback$1(getState => {\n let prevState;\n return () => {\n var _prevState, _prevState2;\n\n const nextState = getState();\n\n if ((_prevState = prevState) !== null && _prevState !== void 0 && _prevState.loadable.is(nextState.loadable) && ((_prevState2 = prevState) === null || _prevState2 === void 0 ? void 0 : _prevState2.key) === nextState.key) {\n return prevState;\n }\n\n prevState = nextState;\n return nextState;\n };\n }, []);\n const getMemoizedSnapshot = useMemo$1(() => memoizePreviousSnapshot(getSnapshot), [getSnapshot, memoizePreviousSnapshot]);\n const subscribe = useCallback$1(notify => {\n const store = storeRef.current;\n const subscription = subscribeToRecoilValue$1(store, recoilValue, notify, componentName);\n return subscription.release;\n }, [storeRef, recoilValue, componentName]);\n return useSyncExternalStore$1(subscribe, getMemoizedSnapshot, // getSnapshot()\n getMemoizedSnapshot // getServerSnapshot() for SSR support\n ).loadable;\n}\n\nfunction useRecoilValueLoadable_MUTABLE_SOURCE(recoilValue) {\n const storeRef = useStoreRef$2();\n const getLoadable = useCallback$1(() => {\n var _storeState$nextTree3;\n\n const store = storeRef.current;\n const storeState = store.getState();\n const treeState = reactMode$3().early ? (_storeState$nextTree3 = storeState.nextTree) !== null && _storeState$nextTree3 !== void 0 ? _storeState$nextTree3 : storeState.currentTree : storeState.currentTree;\n return getRecoilValueAsLoadable$2(store, recoilValue, treeState);\n }, [storeRef, recoilValue]);\n const getLoadableWithTesting = useCallback$1(() => {\n if (process.env.NODE_ENV !== \"production\") {\n recoilComponentGetRecoilValueCount_FOR_TESTING.current++;\n }\n\n return getLoadable();\n }, [getLoadable]);\n const componentName = Recoil_useComponentName();\n const subscribe = useCallback$1((_storeState, notify) => {\n const store = storeRef.current;\n const subscription = subscribeToRecoilValue$1(store, recoilValue, () => {\n if (!Recoil_gkx('recoil_suppress_rerender_in_callback')) {\n return notify();\n } // Only re-render if the value has changed.\n // This will evaluate the atom/selector now as well as when the\n // component renders, but that may help with prefetching.\n\n\n const newLoadable = getLoadable();\n\n if (!prevLoadableRef.current.is(newLoadable)) {\n notify();\n } // If the component is suspended then the effect setting prevLoadableRef\n // will not run. So, set the previous value here when its subscription\n // is fired to wake it up. We can't just rely on this, though, because\n // this only executes when an atom/selector is dirty and the atom/selector\n // passed to the hook can dynamically change.\n\n\n prevLoadableRef.current = newLoadable;\n }, componentName);\n return subscription.release;\n }, [storeRef, recoilValue, componentName, getLoadable]);\n const source = useRecoilMutableSource$1();\n\n if (source == null) {\n throw Recoil_err('Recoil hooks must be used in components contained within a component.');\n }\n\n const loadable = useMutableSource$1(source, getLoadableWithTesting, subscribe);\n const prevLoadableRef = useRef$4(loadable);\n useEffect$3(() => {\n prevLoadableRef.current = loadable;\n });\n return loadable;\n}\n\nfunction useRecoilValueLoadable_TRANSITION_SUPPORT(recoilValue) {\n const storeRef = useStoreRef$2();\n const componentName = Recoil_useComponentName(); // Accessors to get the current state\n\n const getLoadable = useCallback$1(() => {\n var _storeState$nextTree4;\n\n if (process.env.NODE_ENV !== \"production\") {\n recoilComponentGetRecoilValueCount_FOR_TESTING.current++;\n }\n\n const store = storeRef.current;\n const storeState = store.getState();\n const treeState = reactMode$3().early ? (_storeState$nextTree4 = storeState.nextTree) !== null && _storeState$nextTree4 !== void 0 ? _storeState$nextTree4 : storeState.currentTree : storeState.currentTree;\n return getRecoilValueAsLoadable$2(store, recoilValue, treeState);\n }, [storeRef, recoilValue]);\n const getState = useCallback$1(() => ({\n loadable: getLoadable(),\n key: recoilValue.key\n }), [getLoadable, recoilValue.key]); // Memoize state snapshots\n\n const updateState = useCallback$1(prevState => {\n const nextState = getState();\n return prevState.loadable.is(nextState.loadable) && prevState.key === nextState.key ? prevState : nextState;\n }, [getState]); // Subscribe to Recoil state changes\n\n useEffect$3(() => {\n const subscription = subscribeToRecoilValue$1(storeRef.current, recoilValue, _state => {\n setState(updateState);\n }, componentName); // Update state in case we are using a different key\n\n setState(updateState);\n return subscription.release;\n }, [componentName, recoilValue, storeRef, updateState]); // Get the current state\n\n const [state, setState] = useState$1(getState); // If we changed keys, then return the state for the new key.\n // This is important in case the old key would cause the component to suspend.\n // We don't have to set the new state here since the subscribing effect above\n // will do that.\n\n return state.key !== recoilValue.key ? getState().loadable : state.loadable;\n}\n\nfunction useRecoilValueLoadable_LEGACY(recoilValue) {\n const storeRef = useStoreRef$2(); // eslint-disable-next-line fb-www/react-no-unused-state-hook\n\n const [, forceUpdate] = useState$1([]);\n const componentName = Recoil_useComponentName();\n const getLoadable = useCallback$1(() => {\n var _storeState$nextTree5;\n\n if (process.env.NODE_ENV !== \"production\") {\n recoilComponentGetRecoilValueCount_FOR_TESTING.current++;\n }\n\n const store = storeRef.current;\n const storeState = store.getState();\n const treeState = reactMode$3().early ? (_storeState$nextTree5 = storeState.nextTree) !== null && _storeState$nextTree5 !== void 0 ? _storeState$nextTree5 : storeState.currentTree : storeState.currentTree;\n return getRecoilValueAsLoadable$2(store, recoilValue, treeState);\n }, [storeRef, recoilValue]);\n const loadable = getLoadable();\n const prevLoadableRef = useRef$4(loadable);\n useEffect$3(() => {\n prevLoadableRef.current = loadable;\n });\n useEffect$3(() => {\n const store = storeRef.current;\n const storeState = store.getState();\n const subscription = subscribeToRecoilValue$1(store, recoilValue, _state => {\n var _prevLoadableRef$curr;\n\n if (!Recoil_gkx('recoil_suppress_rerender_in_callback')) {\n return forceUpdate([]);\n }\n\n const newLoadable = getLoadable();\n\n if (!((_prevLoadableRef$curr = prevLoadableRef.current) !== null && _prevLoadableRef$curr !== void 0 && _prevLoadableRef$curr.is(newLoadable))) {\n // $FlowFixMe[incompatible-call]\n forceUpdate(newLoadable);\n }\n\n prevLoadableRef.current = newLoadable;\n }, componentName);\n /**\n * Since we're subscribing in an effect we need to update to the latest\n * value of the atom since it may have changed since we rendered. We can\n * go ahead and do that now, unless we're in the middle of a batch --\n * in which case we should do it at the end of the batch, due to the\n * following edge case: Suppose an atom is updated in another useEffect\n * of this same component. Then the following sequence of events occur:\n * 1. Atom is updated and subs fired (but we may not be subscribed\n * yet depending on order of effects, so we miss this) Updated value\n * is now in nextTree, but not currentTree.\n * 2. This effect happens. We subscribe and update.\n * 3. From the update we re-render and read currentTree, with old value.\n * 4. Batcher's effect sets currentTree to nextTree.\n * In this sequence we miss the update. To avoid that, add the update\n * to queuedComponentCallback if a batch is in progress.\n */\n\n if (storeState.nextTree) {\n store.getState().queuedComponentCallbacks_DEPRECATED.push(() => {\n // $FlowFixMe[incompatible-type]\n prevLoadableRef.current = null;\n forceUpdate([]);\n });\n } else {\n var _prevLoadableRef$curr2;\n\n if (!Recoil_gkx('recoil_suppress_rerender_in_callback')) {\n return forceUpdate([]);\n }\n\n const newLoadable = getLoadable();\n\n if (!((_prevLoadableRef$curr2 = prevLoadableRef.current) !== null && _prevLoadableRef$curr2 !== void 0 && _prevLoadableRef$curr2.is(newLoadable))) {\n // $FlowFixMe[incompatible-call]\n forceUpdate(newLoadable);\n }\n\n prevLoadableRef.current = newLoadable;\n }\n\n return subscription.release;\n }, [componentName, getLoadable, recoilValue, storeRef]);\n return loadable;\n}\n/**\n Like useRecoilValue(), but either returns the value if available or\n just undefined if not available for any reason, such as pending or error.\n*/\n\n\nfunction useRecoilValueLoadable(recoilValue) {\n if (process.env.NODE_ENV !== \"production\") {\n validateRecoilValue(recoilValue, 'useRecoilValueLoadable');\n }\n\n if (Recoil_gkx('recoil_memory_managament_2020')) {\n // eslint-disable-next-line fb-www/react-hooks\n Recoil_useRetain(recoilValue);\n }\n\n return {\n TRANSITION_SUPPORT: useRecoilValueLoadable_TRANSITION_SUPPORT,\n // Recoil will attemp to detect if `useSyncExternalStore()` is supported with\n // `reactMode()` before calling it. However, sometimes the host React\n // environment supports it but uses additional React renderers (such as with\n // `react-three-fiber`) which do not. While this is technically a user issue\n // by using a renderer with React 18+ that doesn't fully support React 18 we\n // don't want to break users if it can be avoided. As the current renderer can\n // change at runtime, we need to dynamically check and fallback if necessary.\n SYNC_EXTERNAL_STORE: currentRendererSupportsUseSyncExternalStore$1() ? useRecoilValueLoadable_SYNC_EXTERNAL_STORE : useRecoilValueLoadable_TRANSITION_SUPPORT,\n MUTABLE_SOURCE: useRecoilValueLoadable_MUTABLE_SOURCE,\n LEGACY: useRecoilValueLoadable_LEGACY\n }[reactMode$3().mode](recoilValue);\n}\n/**\n Returns the value represented by the RecoilValue.\n If the value is pending, it will throw a Promise to suspend the component,\n if the value is an error it will throw it for the nearest React error boundary.\n This will also subscribe the component for any updates in the value.\n */\n\n\nfunction useRecoilValue(recoilValue) {\n if (process.env.NODE_ENV !== \"production\") {\n validateRecoilValue(recoilValue, 'useRecoilValue');\n }\n\n const storeRef = useStoreRef$2();\n const loadable = useRecoilValueLoadable(recoilValue);\n return handleLoadable(loadable, recoilValue, storeRef);\n}\n/**\n Returns a function that allows the value of a RecoilState to be updated, but does\n not subscribe the component to changes to that RecoilState.\n*/\n\n\nfunction useSetRecoilState(recoilState) {\n if (process.env.NODE_ENV !== \"production\") {\n validateRecoilValue(recoilState, 'useSetRecoilState');\n }\n\n const storeRef = useStoreRef$2();\n return useCallback$1(newValueOrUpdater => {\n setRecoilValue$2(storeRef.current, recoilState, newValueOrUpdater);\n }, [storeRef, recoilState]);\n}\n/**\n Returns a function that will reset the value of a RecoilState to its default\n*/\n\n\nfunction useResetRecoilState(recoilState) {\n if (process.env.NODE_ENV !== \"production\") {\n validateRecoilValue(recoilState, 'useResetRecoilState');\n }\n\n const storeRef = useStoreRef$2();\n return useCallback$1(() => {\n setRecoilValue$2(storeRef.current, recoilState, DEFAULT_VALUE$2);\n }, [storeRef, recoilState]);\n}\n/**\n Equivalent to useState(). Allows the value of the RecoilState to be read and written.\n Subsequent updates to the RecoilState will cause the component to re-render. If the\n RecoilState is pending, this will suspend the component and initiate the\n retrieval of the value. If evaluating the RecoilState resulted in an error, this will\n throw the error so that the nearest React error boundary can catch it.\n*/\n\n\nfunction useRecoilState(recoilState) {\n if (process.env.NODE_ENV !== \"production\") {\n validateRecoilValue(recoilState, 'useRecoilState');\n }\n\n return [useRecoilValue(recoilState), useSetRecoilState(recoilState)];\n}\n/**\n Like useRecoilState(), but does not cause Suspense or React error handling. Returns\n an object that indicates whether the RecoilState is available, pending, or\n unavailable due to an error.\n*/\n\n\nfunction useRecoilStateLoadable(recoilState) {\n if (process.env.NODE_ENV !== \"production\") {\n validateRecoilValue(recoilState, 'useRecoilStateLoadable');\n }\n\n return [useRecoilValueLoadable(recoilState), useSetRecoilState(recoilState)];\n}\n\nfunction useSetUnvalidatedAtomValues() {\n const storeRef = useStoreRef$2();\n return (values, transactionMetadata = {}) => {\n batchUpdates$2(() => {\n storeRef.current.addTransactionMetadata(transactionMetadata);\n values.forEach((value, key) => setUnvalidatedRecoilValue$2(storeRef.current, new AbstractRecoilValue$3(key), value));\n });\n };\n}\n/**\n * Experimental variants of hooks with support for useTransition()\n */\n\n\nfunction useRecoilValueLoadable_TRANSITION_SUPPORT_UNSTABLE(recoilValue) {\n if (process.env.NODE_ENV !== \"production\") {\n validateRecoilValue(recoilValue, 'useRecoilValueLoadable_TRANSITION_SUPPORT_UNSTABLE');\n\n if (!reactMode$3().early) {\n Recoil_recoverableViolation('Attepmt to use a hook with UNSTABLE_TRANSITION_SUPPORT in a rendering mode incompatible with concurrent rendering. Try enabling the recoil_sync_external_store or recoil_transition_support GKs.');\n }\n }\n\n if (Recoil_gkx('recoil_memory_managament_2020')) {\n // eslint-disable-next-line fb-www/react-hooks\n Recoil_useRetain(recoilValue);\n }\n\n return useRecoilValueLoadable_TRANSITION_SUPPORT(recoilValue);\n}\n\nfunction useRecoilValue_TRANSITION_SUPPORT_UNSTABLE(recoilValue) {\n if (process.env.NODE_ENV !== \"production\") {\n validateRecoilValue(recoilValue, 'useRecoilValue_TRANSITION_SUPPORT_UNSTABLE');\n }\n\n const storeRef = useStoreRef$2();\n const loadable = useRecoilValueLoadable_TRANSITION_SUPPORT_UNSTABLE(recoilValue);\n return handleLoadable(loadable, recoilValue, storeRef);\n}\n\nfunction useRecoilState_TRANSITION_SUPPORT_UNSTABLE(recoilState) {\n if (process.env.NODE_ENV !== \"production\") {\n validateRecoilValue(recoilState, 'useRecoilState_TRANSITION_SUPPORT_UNSTABLE');\n }\n\n return [useRecoilValue_TRANSITION_SUPPORT_UNSTABLE(recoilState), useSetRecoilState(recoilState)];\n}\n\nvar Recoil_Hooks = {\n recoilComponentGetRecoilValueCount_FOR_TESTING,\n useRecoilInterface: useRecoilInterface_DEPRECATED,\n useRecoilState,\n useRecoilStateLoadable,\n useRecoilValue,\n useRecoilValueLoadable,\n useResetRecoilState,\n useSetRecoilState,\n useSetUnvalidatedAtomValues,\n useRecoilValueLoadable_TRANSITION_SUPPORT_UNSTABLE,\n useRecoilValue_TRANSITION_SUPPORT_UNSTABLE,\n useRecoilState_TRANSITION_SUPPORT_UNSTABLE\n};\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n * @oncall recoil\n */\n/**\n * Returns a map containing all of the keys + values from the original map where\n * the given callback returned true.\n */\n\nfunction filterMap(map, callback) {\n const result = new Map();\n\n for (const [key, value] of map) {\n if (callback(value, key)) {\n result.set(key, value);\n }\n }\n\n return result;\n}\n\nvar Recoil_filterMap = filterMap;\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n * @oncall recoil\n */\n/**\n * Returns a set containing all of the values from the original set where\n * the given callback returned true.\n */\n\nfunction filterSet(set, callback) {\n const result = new Set();\n\n for (const value of set) {\n if (callback(value)) {\n result.add(value);\n }\n }\n\n return result;\n}\n\nvar Recoil_filterSet = filterSet;\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n * @oncall recoil\n */\n\nfunction mergeMaps(...maps) {\n const result = new Map();\n\n for (let i = 0; i < maps.length; i++) {\n const iterator = maps[i].keys();\n let nextKey;\n\n while (!(nextKey = iterator.next()).done) {\n // $FlowIssue[incompatible-call] - map/iterator knows nothing about flow types\n result.set(nextKey.value, maps[i].get(nextKey.value));\n }\n }\n\n return result;\n}\n\nvar Recoil_mergeMaps = mergeMaps;\n\nconst {\n batchUpdates: batchUpdates$3\n} = Recoil_Batching;\n\nconst {\n DEFAULT_VALUE: DEFAULT_VALUE$3,\n getNode: getNode$4,\n nodes: nodes$1\n} = Recoil_Node;\n\nconst {\n useStoreRef: useStoreRef$3\n} = Recoil_RecoilRoot;\n\nconst {\n AbstractRecoilValue: AbstractRecoilValue$4,\n setRecoilValueLoadable: setRecoilValueLoadable$1\n} = Recoil_RecoilValueInterface;\n\nconst {\n SUSPENSE_TIMEOUT_MS: SUSPENSE_TIMEOUT_MS$2\n} = Recoil_Retention;\n\nconst {\n cloneSnapshot: cloneSnapshot$1\n} = Recoil_Snapshot$1;\n\nconst {\n useCallback: useCallback$2,\n useEffect: useEffect$4,\n useRef: useRef$5,\n useState: useState$2\n} = react;\n\nconst {\n isSSR: isSSR$4\n} = Recoil_Environment;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction useTransactionSubscription(callback) {\n const storeRef = useStoreRef$3();\n useEffect$4(() => {\n const sub = storeRef.current.subscribeToTransactions(callback);\n return sub.release;\n }, [callback, storeRef]);\n}\n\nfunction externallyVisibleAtomValuesInState(state) {\n const atomValues = state.atomValues.toMap();\n const persistedAtomContentsValues = Recoil_mapMap(Recoil_filterMap(atomValues, (v, k) => {\n const node = getNode$4(k);\n const persistence = node.persistence_UNSTABLE;\n return persistence != null && persistence.type !== 'none' && v.state === 'hasValue';\n }), v => v.contents); // Merge in nonvalidated atoms; we may not have defs for them but they will\n // all have persistence on or they wouldn't be there in the first place.\n\n return Recoil_mergeMaps(state.nonvalidatedAtoms.toMap(), persistedAtomContentsValues);\n}\n\n/**\n Calls the given callback after any atoms have been modified and the consequent\n component re-renders have been committed. This is intended for persisting\n the values of the atoms to storage. The stored values can then be restored\n using the useSetUnvalidatedAtomValues hook.\n\n The callback receives the following info:\n\n atomValues: The current value of every atom that is both persistable (persistence\n type not set to 'none') and whose value is available (not in an\n error or loading state).\n\n previousAtomValues: The value of every persistable and available atom before\n the transaction began.\n\n atomInfo: A map containing the persistence settings for each atom. Every key\n that exists in atomValues will also exist in atomInfo.\n\n modifiedAtoms: The set of atoms that were written to during the transaction.\n\n transactionMetadata: Arbitrary information that was added via the\n useSetUnvalidatedAtomValues hook. Useful for ignoring the useSetUnvalidatedAtomValues\n transaction, to avoid loops.\n*/\nfunction useTransactionObservation_DEPRECATED(callback) {\n useTransactionSubscription(useCallback$2(store => {\n let previousTree = store.getState().previousTree;\n const currentTree = store.getState().currentTree;\n\n if (!previousTree) {\n Recoil_recoverableViolation('Transaction subscribers notified without a previous tree being present -- this is a bug in Recoil');\n previousTree = store.getState().currentTree; // attempt to trundle on\n }\n\n const atomValues = externallyVisibleAtomValuesInState(currentTree);\n const previousAtomValues = externallyVisibleAtomValuesInState(previousTree);\n const atomInfo = Recoil_mapMap(nodes$1, node => {\n var _node$persistence_UNS, _node$persistence_UNS2, _node$persistence_UNS3, _node$persistence_UNS4;\n\n return {\n persistence_UNSTABLE: {\n type: (_node$persistence_UNS = (_node$persistence_UNS2 = node.persistence_UNSTABLE) === null || _node$persistence_UNS2 === void 0 ? void 0 : _node$persistence_UNS2.type) !== null && _node$persistence_UNS !== void 0 ? _node$persistence_UNS : 'none',\n backButton: (_node$persistence_UNS3 = (_node$persistence_UNS4 = node.persistence_UNSTABLE) === null || _node$persistence_UNS4 === void 0 ? void 0 : _node$persistence_UNS4.backButton) !== null && _node$persistence_UNS3 !== void 0 ? _node$persistence_UNS3 : false\n }\n };\n }); // Filter on existance in atomValues so that externally-visible rules\n // are also applied to modified atoms (specifically exclude selectors):\n\n const modifiedAtoms = Recoil_filterSet(currentTree.dirtyAtoms, k => atomValues.has(k) || previousAtomValues.has(k));\n callback({\n atomValues,\n previousAtomValues,\n atomInfo,\n modifiedAtoms,\n transactionMetadata: { ...currentTree.transactionMetadata\n }\n });\n }, [callback]));\n}\n\nfunction useRecoilTransactionObserver(callback) {\n useTransactionSubscription(useCallback$2(store => {\n const snapshot = cloneSnapshot$1(store, 'latest');\n const previousSnapshot = cloneSnapshot$1(store, 'previous');\n callback({\n snapshot,\n previousSnapshot\n });\n }, [callback]));\n} // Return a snapshot of the current state and subscribe to all state changes\n\n\nfunction useRecoilSnapshot() {\n const storeRef = useStoreRef$3();\n const [snapshot, setSnapshot] = useState$2(() => cloneSnapshot$1(storeRef.current));\n const previousSnapshot = Recoil_usePrevious(snapshot);\n const timeoutID = useRef$5();\n const releaseRef = useRef$5();\n useTransactionSubscription(useCallback$2(store => setSnapshot(cloneSnapshot$1(store)), [])); // Retain snapshot for duration component is mounted\n\n useEffect$4(() => {\n const release = snapshot.retain(); // Release the retain from the rendering call\n\n if (timeoutID.current && !isSSR$4) {\n var _releaseRef$current;\n\n window.clearTimeout(timeoutID.current);\n timeoutID.current = null;\n (_releaseRef$current = releaseRef.current) === null || _releaseRef$current === void 0 ? void 0 : _releaseRef$current.call(releaseRef);\n releaseRef.current = null;\n }\n\n return () => {\n // Defer the release. If \"Fast Refresh\"\" is used then the component may\n // re-render with the same state. The previous cleanup will then run and\n // then the new effect will run. We don't want the snapshot to be released\n // by that cleanup before the new effect has a chance to retain it again.\n // Use timeout of 10 to workaround Firefox issue: https://github.com/facebookexperimental/Recoil/issues/1936\n window.setTimeout(release, 10);\n };\n }, [snapshot]); // Retain snapshot until above effect is run.\n // Release after a threshold in case component is suspended.\n\n if (previousSnapshot !== snapshot && !isSSR$4) {\n // Release the previous snapshot\n if (timeoutID.current) {\n var _releaseRef$current2;\n\n window.clearTimeout(timeoutID.current);\n timeoutID.current = null;\n (_releaseRef$current2 = releaseRef.current) === null || _releaseRef$current2 === void 0 ? void 0 : _releaseRef$current2.call(releaseRef);\n releaseRef.current = null;\n }\n\n releaseRef.current = snapshot.retain();\n timeoutID.current = window.setTimeout(() => {\n var _releaseRef$current3;\n\n timeoutID.current = null;\n (_releaseRef$current3 = releaseRef.current) === null || _releaseRef$current3 === void 0 ? void 0 : _releaseRef$current3.call(releaseRef);\n releaseRef.current = null;\n }, SUSPENSE_TIMEOUT_MS$2);\n }\n\n return snapshot;\n}\n\nfunction gotoSnapshot(store, snapshot) {\n var _storeState$nextTree;\n\n const storeState = store.getState();\n const prev = (_storeState$nextTree = storeState.nextTree) !== null && _storeState$nextTree !== void 0 ? _storeState$nextTree : storeState.currentTree;\n const next = snapshot.getStore_INTERNAL().getState().currentTree;\n batchUpdates$3(() => {\n const keysToUpdate = new Set();\n\n for (const keys of [prev.atomValues.keys(), next.atomValues.keys()]) {\n for (const key of keys) {\n var _prev$atomValues$get, _next$atomValues$get;\n\n if (((_prev$atomValues$get = prev.atomValues.get(key)) === null || _prev$atomValues$get === void 0 ? void 0 : _prev$atomValues$get.contents) !== ((_next$atomValues$get = next.atomValues.get(key)) === null || _next$atomValues$get === void 0 ? void 0 : _next$atomValues$get.contents) && getNode$4(key).shouldRestoreFromSnapshots) {\n keysToUpdate.add(key);\n }\n }\n }\n\n keysToUpdate.forEach(key => {\n setRecoilValueLoadable$1(store, new AbstractRecoilValue$4(key), next.atomValues.has(key) ? Recoil_nullthrows(next.atomValues.get(key)) : DEFAULT_VALUE$3);\n });\n store.replaceState(state => ({ ...state,\n stateID: snapshot.getID()\n }));\n });\n}\n\nfunction useGotoRecoilSnapshot() {\n const storeRef = useStoreRef$3();\n return useCallback$2(snapshot => gotoSnapshot(storeRef.current, snapshot), [storeRef]);\n}\n\nvar Recoil_SnapshotHooks = {\n useRecoilSnapshot,\n gotoSnapshot,\n useGotoRecoilSnapshot,\n useRecoilTransactionObserver,\n useTransactionObservation_DEPRECATED,\n useTransactionSubscription_DEPRECATED: useTransactionSubscription\n};\n\nconst {\n peekNodeInfo: peekNodeInfo$2\n} = Recoil_FunctionalCore;\n\nconst {\n useStoreRef: useStoreRef$4\n} = Recoil_RecoilRoot;\n\nfunction useGetRecoilValueInfo() {\n const storeRef = useStoreRef$4(); // $FlowFixMe[incompatible-return]\n\n return ({\n key\n }) => peekNodeInfo$2(storeRef.current, storeRef.current.getState().currentTree, key);\n}\n\nvar Recoil_useGetRecoilValueInfo = useGetRecoilValueInfo;\n\nconst {\n reactMode: reactMode$4\n} = Recoil_ReactMode;\n\nconst {\n RecoilRoot: RecoilRoot$1,\n useStoreRef: useStoreRef$5\n} = Recoil_RecoilRoot;\n\n\n\nconst {\n useMemo: useMemo$2\n} = react;\n\nfunction useRecoilBridgeAcrossReactRoots() {\n // The test fails when using useMutableSource(), but only if act() is used\n // for the nested root. So, this may only be a testing environment issue.\n if (reactMode$4().mode === 'MUTABLE_SOURCE') {\n // eslint-disable-next-line fb-www/no-console\n console.warn('Warning: There are known issues using useRecoilBridgeAcrossReactRoots() in recoil_mutable_source rendering mode. Please consider upgrading to recoil_sync_external_store mode.');\n }\n\n const store = useStoreRef$5().current;\n return useMemo$2(() => {\n // eslint-disable-next-line no-shadow\n function RecoilBridge({\n children\n }) {\n return /*#__PURE__*/react.createElement(RecoilRoot$1, {\n store_INTERNAL: store\n }, children);\n }\n\n return RecoilBridge;\n }, [store]);\n}\n\nvar Recoil_useRecoilBridgeAcrossReactRoots = useRecoilBridgeAcrossReactRoots;\n\nconst {\n loadableWithValue: loadableWithValue$1\n} = Recoil_Loadable$1;\n\nconst {\n initializeNode: initializeNode$3\n} = Recoil_FunctionalCore;\n\nconst {\n DEFAULT_VALUE: DEFAULT_VALUE$4,\n getNode: getNode$5\n} = Recoil_Node;\n\nconst {\n copyTreeState: copyTreeState$1,\n getRecoilValueAsLoadable: getRecoilValueAsLoadable$3,\n invalidateDownstreams: invalidateDownstreams$1,\n writeLoadableToTreeState: writeLoadableToTreeState$1\n} = Recoil_RecoilValueInterface;\n\n\n\nfunction isAtom(recoilValue) {\n return getNode$5(recoilValue.key).nodeType === 'atom';\n}\n\nclass TransactionInterfaceImpl {\n constructor(store, treeState) {\n _defineProperty(this, \"_store\", void 0);\n\n _defineProperty(this, \"_treeState\", void 0);\n\n _defineProperty(this, \"_changes\", void 0);\n\n _defineProperty(this, \"get\", recoilValue => {\n if (this._changes.has(recoilValue.key)) {\n // $FlowIssue[incompatible-return]\n return this._changes.get(recoilValue.key);\n }\n\n if (!isAtom(recoilValue)) {\n throw Recoil_err('Reading selectors within atomicUpdate is not supported');\n }\n\n const loadable = getRecoilValueAsLoadable$3(this._store, recoilValue, this._treeState);\n\n if (loadable.state === 'hasValue') {\n return loadable.contents;\n } else if (loadable.state === 'hasError') {\n throw loadable.contents;\n } else {\n throw Recoil_err(`Expected Recoil atom ${recoilValue.key} to have a value, but it is in a loading state.`);\n }\n });\n\n _defineProperty(this, \"set\", (recoilState, valueOrUpdater) => {\n if (!isAtom(recoilState)) {\n throw Recoil_err('Setting selectors within atomicUpdate is not supported');\n }\n\n if (typeof valueOrUpdater === 'function') {\n const current = this.get(recoilState);\n\n this._changes.set(recoilState.key, valueOrUpdater(current)); // flowlint-line unclear-type:off\n\n } else {\n // Initialize atom and run effects if not initialized yet\n initializeNode$3(this._store, recoilState.key, 'set');\n\n this._changes.set(recoilState.key, valueOrUpdater);\n }\n });\n\n _defineProperty(this, \"reset\", recoilState => {\n this.set(recoilState, DEFAULT_VALUE$4);\n });\n\n this._store = store;\n this._treeState = treeState;\n this._changes = new Map();\n } // Allow destructing\n // eslint-disable-next-line fb-www/extra-arrow-initializer\n\n\n newTreeState_INTERNAL() {\n if (this._changes.size === 0) {\n return this._treeState;\n }\n\n const newState = copyTreeState$1(this._treeState);\n\n for (const [k, v] of this._changes) {\n writeLoadableToTreeState$1(newState, k, loadableWithValue$1(v));\n }\n\n invalidateDownstreams$1(this._store, newState);\n return newState;\n }\n\n}\n\nfunction atomicUpdater(store) {\n return fn => {\n store.replaceState(treeState => {\n const changeset = new TransactionInterfaceImpl(store, treeState);\n fn(changeset);\n return changeset.newTreeState_INTERNAL();\n });\n };\n}\n\nvar Recoil_AtomicUpdates = {\n atomicUpdater\n};\n\nvar Recoil_AtomicUpdates_1 = Recoil_AtomicUpdates.atomicUpdater;\n\nvar Recoil_AtomicUpdates$1 = /*#__PURE__*/Object.freeze({\n __proto__: null,\n atomicUpdater: Recoil_AtomicUpdates_1\n});\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n * @oncall recoil\n */\n\nfunction invariant(condition, message) {\n if (!condition) {\n throw new Error(message);\n }\n}\n\nvar invariant_1 = invariant;\n\n// @oss-only\n\n\nvar Recoil_invariant = invariant_1;\n\nconst {\n atomicUpdater: atomicUpdater$1\n} = Recoil_AtomicUpdates$1;\n\nconst {\n batchUpdates: batchUpdates$4\n} = Recoil_Batching;\n\nconst {\n DEFAULT_VALUE: DEFAULT_VALUE$5\n} = Recoil_Node;\n\nconst {\n useStoreRef: useStoreRef$6\n} = Recoil_RecoilRoot;\n\nconst {\n refreshRecoilValue: refreshRecoilValue$1,\n setRecoilValue: setRecoilValue$3\n} = Recoil_RecoilValueInterface;\n\nconst {\n cloneSnapshot: cloneSnapshot$2\n} = Recoil_Snapshot$1;\n\nconst {\n gotoSnapshot: gotoSnapshot$1\n} = Recoil_SnapshotHooks;\n\nconst {\n useCallback: useCallback$3\n} = react;\n\n\n\n\n\n\n\n\n\nclass Sentinel {}\n\nconst SENTINEL = new Sentinel();\n\nfunction recoilCallback(store, fn, args, extraInterface) {\n let ret = SENTINEL;\n let releaseSnapshot;\n batchUpdates$4(() => {\n const errMsg = 'useRecoilCallback() expects a function that returns a function: ' + 'it accepts a function of the type (RecoilInterface) => (Args) => ReturnType ' + 'and returns a callback function (Args) => ReturnType, where RecoilInterface is ' + 'an object {snapshot, set, ...} and Args and ReturnType are the argument and return ' + 'types of the callback you want to create. Please see the docs ' + 'at recoiljs.org for details.';\n\n if (typeof fn !== 'function') {\n throw Recoil_err(errMsg);\n } // Clone the snapshot lazily to avoid overhead if the callback does not use it.\n // Note that this means the snapshot may represent later state from when\n // the callback was called if it first accesses the snapshot asynchronously.\n\n\n const callbackInterface = Recoil_lazyProxy({ ...(extraInterface !== null && extraInterface !== void 0 ? extraInterface : {}),\n // flowlint-line unclear-type:off\n // $FlowFixMe[missing-local-annot]\n set: (node, newValue) => setRecoilValue$3(store, node, newValue),\n // $FlowFixMe[missing-local-annot]\n reset: node => setRecoilValue$3(store, node, DEFAULT_VALUE$5),\n // $FlowFixMe[missing-local-annot]\n refresh: node => refreshRecoilValue$1(store, node),\n gotoSnapshot: snapshot => gotoSnapshot$1(store, snapshot),\n transact_UNSTABLE: transaction => atomicUpdater$1(store)(transaction)\n }, {\n snapshot: () => {\n const snapshot = cloneSnapshot$2(store);\n releaseSnapshot = snapshot.retain();\n return snapshot;\n }\n });\n const callback = fn(callbackInterface);\n\n if (typeof callback !== 'function') {\n throw Recoil_err(errMsg);\n }\n\n ret = callback(...args);\n });\n !!(ret instanceof Sentinel) ? process.env.NODE_ENV !== \"production\" ? Recoil_invariant(false, 'batchUpdates should return immediately') : Recoil_invariant(false) : void 0;\n\n if (Recoil_isPromise(ret)) {\n ret = ret.finally(() => {\n var _releaseSnapshot;\n\n (_releaseSnapshot = releaseSnapshot) === null || _releaseSnapshot === void 0 ? void 0 : _releaseSnapshot();\n });\n } else {\n var _releaseSnapshot2;\n\n (_releaseSnapshot2 = releaseSnapshot) === null || _releaseSnapshot2 === void 0 ? void 0 : _releaseSnapshot2();\n }\n\n return ret;\n}\n\nfunction useRecoilCallback(fn, deps) {\n const storeRef = useStoreRef$6();\n return useCallback$3( // $FlowIssue[incompatible-call]\n (...args) => {\n return recoilCallback(storeRef.current, fn, args);\n }, deps != null ? [...deps, storeRef] : undefined // eslint-disable-line fb-www/react-hooks-deps\n );\n}\n\nvar Recoil_useRecoilCallback = {\n recoilCallback,\n useRecoilCallback\n};\n\nconst {\n useStoreRef: useStoreRef$7\n} = Recoil_RecoilRoot;\n\nconst {\n refreshRecoilValue: refreshRecoilValue$2\n} = Recoil_RecoilValueInterface;\n\nconst {\n useCallback: useCallback$4\n} = react;\n\nfunction useRecoilRefresher(recoilValue) {\n const storeRef = useStoreRef$7();\n return useCallback$4(() => {\n const store = storeRef.current;\n refreshRecoilValue$2(store, recoilValue);\n }, [recoilValue, storeRef]);\n}\n\nvar Recoil_useRecoilRefresher = useRecoilRefresher;\n\nconst {\n atomicUpdater: atomicUpdater$2\n} = Recoil_AtomicUpdates$1;\n\nconst {\n useStoreRef: useStoreRef$8\n} = Recoil_RecoilRoot;\n\nconst {\n useMemo: useMemo$3\n} = react;\n\nfunction useRecoilTransaction(fn, deps) {\n const storeRef = useStoreRef$8();\n return useMemo$3(() => (...args) => {\n const atomicUpdate = atomicUpdater$2(storeRef.current);\n atomicUpdate(transactionInterface => {\n fn(transactionInterface)(...args);\n });\n }, deps != null ? [...deps, storeRef] : undefined // eslint-disable-line fb-www/react-hooks-deps\n );\n}\n\nvar Recoil_useRecoilTransaction = useRecoilTransaction;\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n * @oncall recoil\n */\n\nclass WrappedValue {\n constructor(value) {\n _defineProperty(this, \"value\", void 0);\n\n this.value = value;\n }\n\n}\n\nvar Recoil_Wrapper = {\n WrappedValue\n};\n\nvar Recoil_Wrapper_1 = Recoil_Wrapper.WrappedValue;\n\nvar Recoil_Wrapper$1 = /*#__PURE__*/Object.freeze({\n __proto__: null,\n WrappedValue: Recoil_Wrapper_1\n});\n\nconst {\n isFastRefreshEnabled: isFastRefreshEnabled$2\n} = Recoil_ReactMode;\n\n\n\nclass ChangedPathError extends Error {}\n\nclass TreeCache {\n // $FlowIssue[unclear-type]\n constructor(options) {\n var _options$onHit, _options$onSet, _options$mapNodeValue;\n\n _defineProperty(this, \"_name\", void 0);\n\n _defineProperty(this, \"_numLeafs\", void 0);\n\n _defineProperty(this, \"_root\", void 0);\n\n _defineProperty(this, \"_onHit\", void 0);\n\n _defineProperty(this, \"_onSet\", void 0);\n\n _defineProperty(this, \"_mapNodeValue\", void 0);\n\n this._name = options === null || options === void 0 ? void 0 : options.name;\n this._numLeafs = 0;\n this._root = null;\n this._onHit = (_options$onHit = options === null || options === void 0 ? void 0 : options.onHit) !== null && _options$onHit !== void 0 ? _options$onHit : () => {};\n this._onSet = (_options$onSet = options === null || options === void 0 ? void 0 : options.onSet) !== null && _options$onSet !== void 0 ? _options$onSet : () => {};\n this._mapNodeValue = (_options$mapNodeValue = options === null || options === void 0 ? void 0 : options.mapNodeValue) !== null && _options$mapNodeValue !== void 0 ? _options$mapNodeValue : val => val;\n }\n\n size() {\n return this._numLeafs;\n } // $FlowIssue[unclear-type]\n\n\n root() {\n return this._root;\n }\n\n get(getNodeValue, handlers) {\n var _this$getLeafNode;\n\n return (_this$getLeafNode = this.getLeafNode(getNodeValue, handlers)) === null || _this$getLeafNode === void 0 ? void 0 : _this$getLeafNode.value;\n }\n\n getLeafNode(getNodeValue, handlers) {\n if (this._root == null) {\n return undefined;\n } // Iterate down the tree based on the current node values until we hit a leaf\n // $FlowIssue[unclear-type]\n\n\n let node = this._root;\n\n while (node) {\n handlers === null || handlers === void 0 ? void 0 : handlers.onNodeVisit(node);\n\n if (node.type === 'leaf') {\n this._onHit(node);\n\n return node;\n }\n\n const nodeValue = this._mapNodeValue(getNodeValue(node.nodeKey));\n\n node = node.branches.get(nodeValue);\n }\n\n return undefined;\n }\n\n set(route, value, handlers) {\n const addLeaf = () => {\n var _node2, _node3, _this$_root2, _handlers$onNodeVisit2;\n\n // First, setup the branch nodes for the route:\n // Iterate down the tree to find or add branch nodes following the route\n let node;\n let branchKey;\n\n for (const [nodeKey, nodeValue] of route) {\n var _node, _handlers$onNodeVisit, _this$_root;\n\n // If the previous root was a leaf, while we not have a get(), it means\n // the selector has inconsistent values or implementation changed.\n const root = this._root;\n\n if ((root === null || root === void 0 ? void 0 : root.type) === 'leaf') {\n throw this.invalidCacheError();\n } // node now refers to the next node down in the tree\n\n\n const parent = node; // $FlowFixMe[prop-missing]\n // $FlowFixMe[incompatible-type]\n\n node = parent ? parent.branches.get(branchKey) : root; // $FlowFixMe[prop-missing]\n // $FlowFixMe[incompatible-type]\n\n node = (_node = node) !== null && _node !== void 0 ? _node : {\n type: 'branch',\n nodeKey,\n parent,\n branches: new Map(),\n branchKey\n }; // If we found an existing node, confirm it has a consistent value\n\n if (node.type !== 'branch' || node.nodeKey !== nodeKey) {\n throw this.invalidCacheError();\n } // Add the branch node to the tree\n\n\n parent === null || parent === void 0 ? void 0 : parent.branches.set(branchKey, node);\n handlers === null || handlers === void 0 ? void 0 : (_handlers$onNodeVisit = handlers.onNodeVisit) === null || _handlers$onNodeVisit === void 0 ? void 0 : _handlers$onNodeVisit.call(handlers, node); // Prepare for next iteration and install root if it is new.\n\n branchKey = this._mapNodeValue(nodeValue);\n this._root = (_this$_root = this._root) !== null && _this$_root !== void 0 ? _this$_root : node;\n } // Second, setup the leaf node:\n // If there is an existing leaf for this route confirm it is consistent\n\n\n const oldLeaf = node ? (_node2 = node) === null || _node2 === void 0 ? void 0 : _node2.branches.get(branchKey) : this._root;\n\n if (oldLeaf != null && (oldLeaf.type !== 'leaf' || oldLeaf.branchKey !== branchKey)) {\n throw this.invalidCacheError();\n } // Create a new or replacement leaf.\n\n\n const leafNode = {\n type: 'leaf',\n value,\n parent: node,\n branchKey\n }; // Install the leaf and call handlers\n\n (_node3 = node) === null || _node3 === void 0 ? void 0 : _node3.branches.set(branchKey, leafNode);\n this._root = (_this$_root2 = this._root) !== null && _this$_root2 !== void 0 ? _this$_root2 : leafNode;\n this._numLeafs++;\n\n this._onSet(leafNode);\n\n handlers === null || handlers === void 0 ? void 0 : (_handlers$onNodeVisit2 = handlers.onNodeVisit) === null || _handlers$onNodeVisit2 === void 0 ? void 0 : _handlers$onNodeVisit2.call(handlers, leafNode);\n };\n\n try {\n addLeaf();\n } catch (error) {\n // If the cache was stale or observed inconsistent values, such as with\n // Fast Refresh, then clear it and rebuild with the new values.\n if (error instanceof ChangedPathError) {\n this.clear();\n addLeaf();\n } else {\n throw error;\n }\n }\n } // Returns true if leaf was actually deleted from the tree\n\n\n delete(leaf) {\n const root = this.root();\n\n if (!root) {\n return false;\n }\n\n if (leaf === root) {\n this._root = null;\n this._numLeafs = 0;\n return true;\n } // Iterate up from the leaf deleteing it from it's parent's branches.\n\n\n let node = leaf.parent;\n let branchKey = leaf.branchKey;\n\n while (node) {\n var _node4;\n\n node.branches.delete(branchKey); // Stop iterating if we hit the root.\n\n if (node === root) {\n if (node.branches.size === 0) {\n this._root = null;\n this._numLeafs = 0;\n } else {\n this._numLeafs--;\n }\n\n return true;\n } // Stop iterating if there are other branches since we don't need to\n // remove any more nodes.\n\n\n if (node.branches.size > 0) {\n break;\n } // Iterate up to our parent\n\n\n branchKey = (_node4 = node) === null || _node4 === void 0 ? void 0 : _node4.branchKey;\n node = node.parent;\n } // Confirm that the leaf we are deleting is actually attached to our tree\n\n\n for (; node !== root; node = node.parent) {\n if (node == null) {\n return false;\n }\n }\n\n this._numLeafs--;\n return true;\n }\n\n clear() {\n this._numLeafs = 0;\n this._root = null;\n }\n\n invalidCacheError() {\n const CHANGED_PATH_ERROR_MESSAGE = isFastRefreshEnabled$2() ? 'Possible Fast Refresh module reload detected. ' + 'This may also be caused by an selector returning inconsistent values. ' + 'Resetting cache.' : 'Invalid cache values. This happens when selectors do not return ' + 'consistent values for the same input dependency values. That may also ' + 'be caused when using Fast Refresh to change a selector implementation. ' + 'Resetting cache.';\n Recoil_recoverableViolation(CHANGED_PATH_ERROR_MESSAGE + (this._name != null ? ` - ${this._name}` : ''));\n throw new ChangedPathError();\n }\n\n}\n\nvar Recoil_TreeCache = {\n TreeCache\n};\n\nvar Recoil_TreeCache_1 = Recoil_TreeCache.TreeCache;\n\nvar Recoil_TreeCache$1 = /*#__PURE__*/Object.freeze({\n __proto__: null,\n TreeCache: Recoil_TreeCache_1\n});\n\nclass LRUCache {\n constructor(options) {\n var _options$mapKey;\n\n _defineProperty(this, \"_maxSize\", void 0);\n\n _defineProperty(this, \"_size\", void 0);\n\n _defineProperty(this, \"_head\", void 0);\n\n _defineProperty(this, \"_tail\", void 0);\n\n _defineProperty(this, \"_map\", void 0);\n\n _defineProperty(this, \"_keyMapper\", void 0);\n\n this._maxSize = options.maxSize;\n this._size = 0;\n this._head = null;\n this._tail = null;\n this._map = new Map();\n this._keyMapper = (_options$mapKey = options.mapKey) !== null && _options$mapKey !== void 0 ? _options$mapKey : v => v;\n }\n\n head() {\n return this._head;\n }\n\n tail() {\n return this._tail;\n }\n\n size() {\n return this._size;\n }\n\n maxSize() {\n return this._maxSize;\n }\n\n has(key) {\n return this._map.has(this._keyMapper(key));\n }\n\n get(key) {\n const mappedKey = this._keyMapper(key);\n\n const node = this._map.get(mappedKey);\n\n if (!node) {\n return undefined;\n }\n\n this.set(key, node.value);\n return node.value;\n }\n\n set(key, val) {\n const mappedKey = this._keyMapper(key);\n\n const existingNode = this._map.get(mappedKey);\n\n if (existingNode) {\n this.delete(key);\n }\n\n const head = this.head();\n const node = {\n key,\n right: head,\n left: null,\n value: val\n };\n\n if (head) {\n head.left = node;\n } else {\n this._tail = node;\n }\n\n this._map.set(mappedKey, node);\n\n this._head = node;\n this._size++;\n\n this._maybeDeleteLRU();\n }\n\n _maybeDeleteLRU() {\n if (this.size() > this.maxSize()) {\n this.deleteLru();\n }\n }\n\n deleteLru() {\n const tail = this.tail();\n\n if (tail) {\n this.delete(tail.key);\n }\n }\n\n delete(key) {\n const mappedKey = this._keyMapper(key);\n\n if (!this._size || !this._map.has(mappedKey)) {\n return;\n }\n\n const node = Recoil_nullthrows(this._map.get(mappedKey));\n const right = node.right;\n const left = node.left;\n\n if (right) {\n right.left = node.left;\n }\n\n if (left) {\n left.right = node.right;\n }\n\n if (node === this.head()) {\n this._head = right;\n }\n\n if (node === this.tail()) {\n this._tail = left;\n }\n\n this._map.delete(mappedKey);\n\n this._size--;\n }\n\n clear() {\n this._size = 0;\n this._head = null;\n this._tail = null;\n this._map = new Map();\n }\n\n}\n\nvar Recoil_LRUCache = {\n LRUCache\n};\n\nvar Recoil_LRUCache_1 = Recoil_LRUCache.LRUCache;\n\nvar Recoil_LRUCache$1 = /*#__PURE__*/Object.freeze({\n __proto__: null,\n LRUCache: Recoil_LRUCache_1\n});\n\nconst {\n LRUCache: LRUCache$1\n} = Recoil_LRUCache$1;\n\nconst {\n TreeCache: TreeCache$1\n} = Recoil_TreeCache$1;\n\nfunction treeCacheLRU({\n name,\n maxSize,\n mapNodeValue = v => v\n}) {\n const lruCache = new LRUCache$1({\n maxSize\n });\n const cache = new TreeCache$1({\n name,\n mapNodeValue,\n onHit: node => {\n lruCache.set(node, true);\n },\n onSet: node => {\n const lruNode = lruCache.tail();\n lruCache.set(node, true);\n\n if (lruNode && cache.size() > maxSize) {\n // $FlowFixMe[incompatible-call]\n cache.delete(lruNode.key);\n }\n }\n });\n return cache;\n}\n\nvar Recoil_treeCacheLRU = treeCacheLRU;\n\nconst TIME_WARNING_THRESHOLD_MS = 15;\n\nfunction stringify(x, opt, key) {\n // A optimization to avoid the more expensive JSON.stringify() for simple strings\n // This may lose protection for u2028 and u2029, though.\n if (typeof x === 'string' && !x.includes('\"') && !x.includes('\\\\')) {\n return `\"${x}\"`;\n } // Handle primitive types\n\n\n switch (typeof x) {\n case 'undefined':\n return '';\n // JSON.stringify(undefined) returns undefined, but we always want to return a string\n\n case 'boolean':\n return x ? 'true' : 'false';\n\n case 'number':\n case 'symbol':\n // case 'bigint': // BigInt is not supported in www\n return String(x);\n\n case 'string':\n // Add surrounding quotes and escape internal quotes\n return JSON.stringify(x);\n\n case 'function':\n if ((opt === null || opt === void 0 ? void 0 : opt.allowFunctions) !== true) {\n throw Recoil_err('Attempt to serialize function in a Recoil cache key');\n }\n\n return `__FUNCTION(${x.name})__`;\n }\n\n if (x === null) {\n return 'null';\n } // Fallback case for unknown types\n\n\n if (typeof x !== 'object') {\n var _JSON$stringify;\n\n return (_JSON$stringify = JSON.stringify(x)) !== null && _JSON$stringify !== void 0 ? _JSON$stringify : '';\n } // Deal with all promises as equivalent for now.\n\n\n if (Recoil_isPromise(x)) {\n return '__PROMISE__';\n } // Arrays handle recursive stringification\n\n\n if (Array.isArray(x)) {\n // $FlowFixMe[missing-local-annot]\n return `[${x.map((v, i) => stringify(v, opt, i.toString()))}]`;\n } // If an object defines a toJSON() method, then use that to override the\n // serialization. This matches the behavior of JSON.stringify().\n // Pass the key for compatibility.\n // Immutable.js collections define this method to allow us to serialize them.\n\n\n if (typeof x.toJSON === 'function') {\n // flowlint-next-line unclear-type: off\n return stringify(x.toJSON(key), opt, key);\n } // For built-in Maps, sort the keys in a stable order instead of the\n // default insertion order. Support non-string keys.\n\n\n if (x instanceof Map) {\n const obj = {};\n\n for (const [k, v] of x) {\n // Stringify will escape any nested quotes\n obj[typeof k === 'string' ? k : stringify(k, opt)] = v;\n }\n\n return stringify(obj, opt, key);\n } // For built-in Sets, sort the keys in a stable order instead of the\n // default insertion order.\n\n\n if (x instanceof Set) {\n return stringify( // $FlowFixMe[missing-local-annot]\n Array.from(x).sort((a, b) => stringify(a, opt).localeCompare(stringify(b, opt))), opt, key);\n } // Anything else that is iterable serialize as an Array.\n\n\n if (Symbol !== undefined && x[Symbol.iterator] != null && typeof x[Symbol.iterator] === 'function') {\n // flowlint-next-line unclear-type: off\n return stringify(Array.from(x), opt, key);\n } // For all other Objects, sort the keys in a stable order.\n\n\n return `{${Object.keys(x).filter(k => x[k] !== undefined).sort() // stringify the key to add quotes and escape any nested slashes or quotes.\n .map(k => `${stringify(k, opt)}:${stringify(x[k], opt, k)}`).join(',')}}`;\n} // Utility similar to JSON.stringify() except:\n// * Serialize built-in Sets as an Array\n// * Serialize built-in Maps as an Object. Supports non-string keys.\n// * Serialize other iterables as arrays\n// * Sort the keys of Objects and Maps to have a stable order based on string conversion.\n// This overrides their default insertion order.\n// * Still uses toJSON() of any object to override serialization\n// * Support Symbols (though don't guarantee uniqueness)\n// * We could support BigInt, but Flow doesn't seem to like it.\n// See Recoil_stableStringify-test.js for examples\n\n\nfunction stableStringify(x, opt = {\n allowFunctions: false\n}) {\n if (process.env.NODE_ENV !== \"production\") {\n if (typeof window !== 'undefined') {\n const startTime = window.performance ? window.performance.now() : 0;\n const str = stringify(x, opt);\n const endTime = window.performance ? window.performance.now() : 0;\n\n if (endTime - startTime > TIME_WARNING_THRESHOLD_MS) {\n /* eslint-disable fb-www/no-console */\n console.groupCollapsed(`Recoil: Spent ${endTime - startTime}ms computing a cache key`);\n console.warn(x, str);\n console.groupEnd();\n /* eslint-enable fb-www/no-console */\n }\n\n return str;\n }\n }\n\n return stringify(x, opt);\n}\n\nvar Recoil_stableStringify = stableStringify;\n\nconst {\n TreeCache: TreeCache$2\n} = Recoil_TreeCache$1;\n\n\n\n\n\n\n\n\n\nconst defaultPolicy = {\n equality: 'reference',\n eviction: 'keep-all',\n maxSize: Infinity\n};\n\nfunction treeCacheFromPolicy({\n equality = defaultPolicy.equality,\n eviction = defaultPolicy.eviction,\n maxSize = defaultPolicy.maxSize\n} = defaultPolicy, name) {\n const valueMapper = getValueMapper(equality);\n return getTreeCache(eviction, maxSize, valueMapper, name);\n}\n\nfunction getValueMapper(equality) {\n switch (equality) {\n case 'reference':\n return val => val;\n\n case 'value':\n return val => Recoil_stableStringify(val);\n }\n\n throw Recoil_err(`Unrecognized equality policy ${equality}`);\n}\n\nfunction getTreeCache(eviction, maxSize, mapNodeValue, name) {\n switch (eviction) {\n case 'keep-all':\n return new TreeCache$2({\n name,\n mapNodeValue\n });\n\n case 'lru':\n return Recoil_treeCacheLRU({\n name,\n maxSize: Recoil_nullthrows(maxSize),\n mapNodeValue\n });\n\n case 'most-recent':\n return Recoil_treeCacheLRU({\n name,\n maxSize: 1,\n mapNodeValue\n });\n }\n\n throw Recoil_err(`Unrecognized eviction policy ${eviction}`);\n}\n\nvar Recoil_treeCacheFromPolicy = treeCacheFromPolicy;\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n * @oncall recoil\n */\n\nfunction isNode(object) {\n var _ownerDocument, _doc$defaultView;\n\n if (typeof window === 'undefined') {\n return false;\n }\n\n const doc = object != null ? (_ownerDocument = object.ownerDocument) !== null && _ownerDocument !== void 0 ? _ownerDocument : object : document;\n const defaultView = (_doc$defaultView = doc.defaultView) !== null && _doc$defaultView !== void 0 ? _doc$defaultView : window;\n return !!(object != null && (typeof defaultView.Node === 'function' ? object instanceof defaultView.Node : typeof object === 'object' && typeof object.nodeType === 'number' && typeof object.nodeName === 'string'));\n}\n\nvar Recoil_isNode = isNode;\n\nconst {\n isReactNative: isReactNative$1,\n isWindow: isWindow$1\n} = Recoil_Environment;\n\n\n\n\n\nfunction shouldNotBeFrozen(value) {\n // Primitives and functions:\n if (value === null || typeof value !== 'object') {\n return true;\n } // React elements:\n\n\n switch (typeof value.$$typeof) {\n case 'symbol':\n return true;\n\n case 'number':\n return true;\n } // Immutable structures:\n\n\n if (value['@@__IMMUTABLE_ITERABLE__@@'] != null || value['@@__IMMUTABLE_KEYED__@@'] != null || value['@@__IMMUTABLE_INDEXED__@@'] != null || value['@@__IMMUTABLE_ORDERED__@@'] != null || value['@@__IMMUTABLE_RECORD__@@'] != null) {\n return true;\n } // DOM nodes:\n\n\n if (Recoil_isNode(value)) {\n return true;\n }\n\n if (Recoil_isPromise(value)) {\n return true;\n }\n\n if (value instanceof Error) {\n return true;\n }\n\n if (ArrayBuffer.isView(value)) {\n return true;\n } // Some environments, just as Jest, don't work with the instanceof check\n\n\n if (!isReactNative$1 && isWindow$1(value)) {\n return true;\n }\n\n return false;\n} // Recursively freeze a value to enforce it is read-only.\n// This may also have minimal performance improvements for enumerating\n// objects (based on browser implementations, of course)\n\n\nfunction deepFreezeValue(value) {\n if (typeof value !== 'object' || shouldNotBeFrozen(value)) {\n return;\n }\n\n Object.freeze(value); // Make all properties read-only\n\n for (const key in value) {\n // $FlowIssue[method-unbinding] added when improving typing for this parameters\n if (Object.prototype.hasOwnProperty.call(value, key)) {\n const prop = value[key]; // Prevent infinite recurssion for circular references.\n\n if (typeof prop === 'object' && prop != null && !Object.isFrozen(prop)) {\n deepFreezeValue(prop);\n }\n }\n }\n\n Object.seal(value); // This also makes existing properties non-configurable.\n}\n\nvar Recoil_deepFreezeValue = deepFreezeValue;\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * This is a stub for some integration into FB internal stuff\n *\n * \n * @format\n * @oncall recoil\n */\nfunction startPerfBlock(_id) {\n return () => null;\n}\n\nvar Recoil_PerformanceTimings = {\n startPerfBlock\n};\n\nconst {\n isLoadable: isLoadable$1,\n loadableWithError: loadableWithError$1,\n loadableWithPromise: loadableWithPromise$1,\n loadableWithValue: loadableWithValue$2\n} = Recoil_Loadable$1;\n\nconst {\n WrappedValue: WrappedValue$1\n} = Recoil_Wrapper$1;\n\n\n\nconst {\n getNodeLoadable: getNodeLoadable$2,\n peekNodeLoadable: peekNodeLoadable$1,\n setNodeValue: setNodeValue$3\n} = Recoil_FunctionalCore;\n\nconst {\n saveDepsToStore: saveDepsToStore$1\n} = Recoil_Graph;\n\nconst {\n DEFAULT_VALUE: DEFAULT_VALUE$6,\n getConfigDeletionHandler: getConfigDeletionHandler$1,\n getNode: getNode$6,\n registerNode: registerNode$1\n} = Recoil_Node;\n\nconst {\n isRecoilValue: isRecoilValue$3\n} = Recoil_RecoilValue$1;\n\nconst {\n markRecoilValueModified: markRecoilValueModified$1\n} = Recoil_RecoilValueInterface;\n\nconst {\n retainedByOptionWithDefault: retainedByOptionWithDefault$1\n} = Recoil_Retention;\n\nconst {\n recoilCallback: recoilCallback$1\n} = Recoil_useRecoilCallback;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst {\n startPerfBlock: startPerfBlock$1\n} = Recoil_PerformanceTimings;\n\n\n\nclass Canceled {}\n\nconst CANCELED = new Canceled();\n/**\n * An ExecutionID is an arbitrary ID that lets us distinguish executions from\n * each other. This is necessary as we need a way of solving this problem:\n * \"given 3 async executions, only update state for the 'latest' execution when\n * it finishes running regardless of when the other 2 finish\". ExecutionIDs\n * provide a convenient way of identifying executions so that we can track and\n * manage them over time.\n */\n\nconst dependencyStack = []; // for detecting circular dependencies.\n\nconst waitingStores = new Map();\n\nconst getNewExecutionID = (() => {\n let executionID = 0;\n return () => executionID++;\n})();\n/* eslint-disable no-redeclare */\n\n\nfunction selector(options) {\n let recoilValue = null;\n const {\n key,\n get,\n cachePolicy_UNSTABLE: cachePolicy\n } = options;\n const set = options.set != null ? options.set : undefined; // flow\n\n if (process.env.NODE_ENV !== \"production\") {\n if (typeof key !== 'string') {\n throw Recoil_err('A key option with a unique string value must be provided when creating a selector.');\n }\n\n if (typeof get !== 'function') {\n throw Recoil_err('Selectors must specify a get callback option to get the selector value.');\n }\n } // This is every discovered dependency across all executions\n\n\n const discoveredDependencyNodeKeys = new Set();\n const cache = Recoil_treeCacheFromPolicy(cachePolicy !== null && cachePolicy !== void 0 ? cachePolicy : {\n equality: 'reference',\n eviction: 'keep-all'\n }, key);\n const retainedBy = retainedByOptionWithDefault$1(options.retainedBy_UNSTABLE);\n const executionInfoMap = new Map();\n let liveStoresCount = 0;\n\n function selectorIsLive() {\n return !Recoil_gkx('recoil_memory_managament_2020') || liveStoresCount > 0;\n }\n\n function selectorInit(store) {\n store.getState().knownSelectors.add(key);\n liveStoresCount++;\n return () => {\n liveStoresCount--;\n };\n }\n\n function selectorShouldDeleteConfigOnRelease() {\n return getConfigDeletionHandler$1(key) !== undefined && !selectorIsLive();\n }\n\n function resolveAsync(store, state, executionID, loadable, depValues) {\n setCache(state, loadable, depValues);\n notifyStoresOfResolvedAsync(store, executionID);\n }\n\n function notifyStoresOfResolvedAsync(store, executionID) {\n if (isLatestExecution(store, executionID)) {\n clearExecutionInfo(store);\n }\n\n notifyWaitingStores(executionID, true);\n }\n /**\n * Notify stores to pull the selector again if a new async dep was discovered.\n * 1) Async selector adds a new dep but doesn't resolve yet.\n * Note that deps for an async selector are based on the state when the\n * evaluation started, in order to provide a consistent picture of state.\n * 2) But, new value of dep based on the current state might cause the selector\n * to resolve or resolve differently.\n * 3) Therefore, this notification will pull the selector based on the current\n * state for the components\n */\n\n\n function notifyStoresOfNewAsyncDep(store, executionID) {\n if (isLatestExecution(store, executionID)) {\n const executionInfo = Recoil_nullthrows(getExecutionInfo(store));\n executionInfo.stateVersions.clear();\n notifyWaitingStores(executionID, false);\n }\n }\n\n function notifyWaitingStores(executionID, clearWaitlist) {\n const stores = waitingStores.get(executionID);\n\n if (stores != null) {\n for (const waitingStore of stores) {\n markRecoilValueModified$1(waitingStore, Recoil_nullthrows(recoilValue));\n }\n\n if (clearWaitlist) {\n waitingStores.delete(executionID);\n }\n }\n }\n\n function markStoreWaitingForResolvedAsync(store, executionID) {\n let stores = waitingStores.get(executionID);\n\n if (stores == null) {\n waitingStores.set(executionID, stores = new Set());\n }\n\n stores.add(store);\n }\n /**\n * This function attaches a then() and a catch() to a promise that was\n * returned from a selector's get() (either explicitly or implicitly by\n * running a function that uses the \"async\" keyword). If a selector's get()\n * returns a promise, we have two possibilities:\n *\n * 1. The promise will resolve, in which case it will have completely finished\n * executing without any remaining pending dependencies. No more retries\n * are needed and we can proceed with updating the cache and notifying\n * subscribers (if it is the latest execution, otherwise only the cache\n * will be updated and subscriptions will not be fired). This is the case\n * handled by the attached then() handler.\n *\n * 2. The promise will throw because it either has an error or it came across\n * an async dependency that has not yet resolved, in which case we will\n * call wrapDepdencyPromise(), whose responsibility is to handle dependency\n * promises. This case is handled by the attached catch() handler.\n *\n * Both branches will eventually resolve to the final result of the selector\n * (or an error if a real error occurred).\n *\n * The execution will run to completion even if it is stale, and its value\n * will be cached. But stale executions will not update global state or update\n * executionInfo as that is the responsibility of the 'latest' execution.\n *\n * Note this function should not be passed a promise that was thrown--AKA a\n * dependency promise. Dependency promises should be passed to\n * wrapPendingDependencyPromise()).\n */\n\n\n function wrapResultPromise(store, promise, state, depValues, executionID, loadingDepsState) {\n return promise.then(value => {\n if (!selectorIsLive()) {\n // The selector was released since the request began; ignore the response.\n clearExecutionInfo(store);\n throw CANCELED;\n }\n\n const loadable = loadableWithValue$2(value);\n resolveAsync(store, state, executionID, loadable, depValues);\n return value;\n }).catch(errorOrPromise => {\n if (!selectorIsLive()) {\n // The selector was released since the request began; ignore the response.\n clearExecutionInfo(store);\n throw CANCELED;\n }\n\n if (Recoil_isPromise(errorOrPromise)) {\n return wrapPendingDependencyPromise(store, errorOrPromise, state, depValues, executionID, loadingDepsState);\n }\n\n const loadable = loadableWithError$1(errorOrPromise);\n resolveAsync(store, state, executionID, loadable, depValues);\n throw errorOrPromise;\n });\n }\n /**\n * This function attaches a then() and a catch() to a promise that was\n * thrown from a selector's get(). If a selector's get() throws a promise,\n * we have two possibilities:\n *\n * 1. The promise will resolve, meaning one of our selector's dependencies is\n * now available and we should \"retry\" our get() by running it again. This\n * is the case handled by the attached then() handler.\n *\n * 2. The promise will throw because something went wrong with the dependency\n * promise (in other words a real error occurred). This case is handled by\n * the attached catch() handler. If the dependency promise throws, it is\n * _always_ a real error and not another dependency promise (any dependency\n * promises would have been handled upstream).\n *\n * The then() branch will eventually resolve to the final result of the\n * selector (or an error if a real error occurs), and the catch() will always\n * resolve to an error because the dependency promise is a promise that was\n * wrapped upstream, meaning it will only resolve to its real value or to a\n * real error.\n *\n * The execution will run to completion even if it is stale, and its value\n * will be cached. But stale executions will not update global state or update\n * executionInfo as that is the responsibility of the 'latest' execution.\n *\n * Note this function should not be passed a promise that was returned from\n * get(). The intention is that this function is only passed promises that\n * were thrown due to a pending dependency. Promises returned by get() should\n * be passed to wrapResultPromise() instead.\n */\n\n\n function wrapPendingDependencyPromise(store, promise, state, existingDeps, executionID, loadingDepsState) {\n return promise.then(resolvedDep => {\n if (!selectorIsLive()) {\n // The selector was released since the request began; ignore the response.\n clearExecutionInfo(store);\n throw CANCELED;\n } // Check if we are handling a pending Recoil dependency or if the user\n // threw their own Promise to \"suspend\" a selector evaluation. We need\n // to check that the loadingDepPromise actually matches the promise that\n // we caught in case the selector happened to catch the promise we threw\n // for a pending Recoil dependency from `getRecoilValue()` and threw\n // their own promise instead.\n\n\n if (loadingDepsState.loadingDepKey != null && loadingDepsState.loadingDepPromise === promise) {\n /**\n * Note for async atoms, this means we are changing the atom's value\n * in the store for the given version. This should be alright because\n * the version of state is now stale and a new version will have\n * already been triggered by the atom being resolved (see this logic\n * in Recoil_atom.js)\n */\n state.atomValues.set(loadingDepsState.loadingDepKey, loadableWithValue$2(resolvedDep));\n } else {\n /**\n * If resolvedDepKey is not defined, the promise was a user-thrown\n * promise. User-thrown promises are an advanced feature and they\n * should be avoided in almost all cases. Using `loadable.map()` inside\n * of selectors for loading loadables and then throwing that mapped\n * loadable's promise is an example of a user-thrown promise.\n *\n * When we hit a user-thrown promise, we have to bail out of an optimization\n * where we bypass calculating selector cache keys for selectors that\n * have been previously seen for a given state (these selectors are saved in\n * state.atomValues) to avoid stale state as we have no way of knowing\n * what state changes happened (if any) in result to the promise resolving.\n *\n * Ideally we would only bail out selectors that are in the chain of\n * dependencies for this selector, but there's currently no way to get\n * a full list of a selector's downstream nodes because the state that\n * is executing may be a discarded tree (so store.getGraph(state.version)\n * will be empty), and the full dep tree may not be in the selector\n * caches in the case where the selector's cache was cleared. To solve\n * for this we would have to keep track of all running selector\n * executions and their downstream deps. Because this only covers edge\n * cases, that complexity might not be justifyable.\n */\n store.getState().knownSelectors.forEach(nodeKey => {\n state.atomValues.delete(nodeKey);\n });\n }\n /**\n * Optimization: Now that the dependency has resolved, let's try hitting\n * the cache in case the dep resolved to a value we have previously seen.\n *\n * TODO:\n * Note this optimization is not perfect because it only prevents re-executions\n * _after_ the point where an async dependency is found. Any code leading\n * up to the async dependency may have run unnecessarily. The ideal case\n * would be to wait for the async dependency to resolve first, check the\n * cache, and prevent _any_ execution of the selector if the resulting\n * value of the dependency leads to a path that is found in the cache.\n * The ideal case is more difficult to implement as it would require that\n * we capture and wait for the the async dependency right after checking\n * the cache. The current approach takes advantage of the fact that running\n * the selector already has a code path that lets us exit early when\n * an async dep resolves.\n */\n\n\n const cachedLoadable = getLoadableFromCacheAndUpdateDeps(store, state);\n\n if (cachedLoadable && cachedLoadable.state !== 'loading') {\n /**\n * This has to notify stores of a resolved async, even if there is no\n * current pending execution for the following case:\n * 1) A component renders with this pending loadable.\n * 2) The upstream dependency resolves.\n * 3) While processing some other selector it reads this one, such as\n * while traversing its dependencies. At this point it gets the\n * new resolved value synchronously and clears the current\n * execution ID. The component wasn't getting the value itself,\n * though, so it still has the pending loadable.\n * 4) When this code executes the current execution id was cleared\n * and it wouldn't notify the component of the new value.\n *\n * I think this is only an issue with \"early\" rendering since the\n * components got their value using the in-progress execution.\n * We don't have a unit test for this case yet. I'm not sure it is\n * necessary with recoil_transition_support mode.\n */\n if (isLatestExecution(store, executionID) || getExecutionInfo(store) == null) {\n notifyStoresOfResolvedAsync(store, executionID);\n }\n\n if (cachedLoadable.state === 'hasValue') {\n return cachedLoadable.contents;\n } else {\n throw cachedLoadable.contents;\n }\n }\n /**\n * If this execution is stale, let's check to see if there is some in\n * progress execution with a matching state. If we find a match, then\n * we can take the value from that in-progress execution. Note this may\n * sound like an edge case, but may be very common in cases where a\n * loading dependency resolves from loading to having a value (thus\n * possibly triggering a re-render), and React re-renders before the\n * chained .then() functions run, thus starting a new execution as the\n * dep has changed value. Without this check we will run the selector\n * twice (once in the new execution and once again in this .then(), so\n * this check is necessary to keep unnecessary re-executions to a\n * minimum).\n *\n * Also note this code does not check across all executions that may be\n * running. It only optimizes for the _latest_ execution per store as\n * we currently do not maintain a list of all currently running executions.\n * This means in some cases we may run selectors more than strictly\n * necessary when there are multiple executions running for the same\n * selector. This may be a valid tradeoff as checking for dep changes\n * across all in-progress executions may take longer than just\n * re-running the selector. This will be app-dependent, and maybe in the\n * future we can make the behavior configurable. An ideal fix may be\n * to extend the tree cache to support caching loading states.\n */\n\n\n if (!isLatestExecution(store, executionID)) {\n const executionInfo = getInProgressExecutionInfo(store, state);\n\n if (executionInfo != null) {\n /**\n * Returning promise here without wrapping as the wrapper logic was\n * already done upstream when this promise was generated.\n */\n return executionInfo.loadingLoadable.contents;\n }\n } // Retry the selector evaluation now that the dependency has resolved\n\n\n const [loadable, depValues] = evaluateSelectorGetter(store, state, executionID);\n\n if (loadable.state !== 'loading') {\n resolveAsync(store, state, executionID, loadable, depValues);\n }\n\n if (loadable.state === 'hasError') {\n throw loadable.contents;\n }\n\n return loadable.contents;\n }).catch(error => {\n // The selector was released since the request began; ignore the response.\n if (error instanceof Canceled) {\n throw CANCELED;\n }\n\n if (!selectorIsLive()) {\n clearExecutionInfo(store);\n throw CANCELED;\n }\n\n const loadable = loadableWithError$1(error);\n resolveAsync(store, state, executionID, loadable, existingDeps);\n throw error;\n });\n }\n\n function updateDeps(store, state, deps, executionID) {\n var _store$getState, _store$getState$curre, _store$getState2, _store$getState2$next;\n\n if (isLatestExecution(store, executionID) || state.version === ((_store$getState = store.getState()) === null || _store$getState === void 0 ? void 0 : (_store$getState$curre = _store$getState.currentTree) === null || _store$getState$curre === void 0 ? void 0 : _store$getState$curre.version) || state.version === ((_store$getState2 = store.getState()) === null || _store$getState2 === void 0 ? void 0 : (_store$getState2$next = _store$getState2.nextTree) === null || _store$getState2$next === void 0 ? void 0 : _store$getState2$next.version)) {\n var _store$getState$nextT, _store$getState3, _store$getState3$next;\n\n saveDepsToStore$1(key, deps, store, (_store$getState$nextT = (_store$getState3 = store.getState()) === null || _store$getState3 === void 0 ? void 0 : (_store$getState3$next = _store$getState3.nextTree) === null || _store$getState3$next === void 0 ? void 0 : _store$getState3$next.version) !== null && _store$getState$nextT !== void 0 ? _store$getState$nextT : store.getState().currentTree.version);\n }\n\n for (const nodeKey of deps) {\n discoveredDependencyNodeKeys.add(nodeKey);\n }\n }\n\n function evaluateSelectorGetter(store, state, executionID) {\n const endPerfBlock = startPerfBlock$1(key); // TODO T63965866: use execution ID here\n\n let duringSynchronousExecution = true;\n let duringAsynchronousExecution = true;\n\n const finishEvaluation = () => {\n endPerfBlock();\n duringAsynchronousExecution = false;\n };\n\n let result;\n let resultIsError = false;\n let loadable;\n const loadingDepsState = {\n loadingDepKey: null,\n loadingDepPromise: null\n };\n /**\n * Starting a fresh set of deps that we'll be using to update state. We're\n * starting a new set versus adding it in existing state deps because\n * the version of state that we update deps for may be a more recent version\n * than the version the selector was called with. This is because the latest\n * execution will update the deps of the current/latest version of state\n * (This is safe to do because the fact that the selector is the latest\n * execution means the deps we discover below are our best guess at the\n * deps for the current/latest state in the store)\n */\n\n const depValues = new Map();\n\n function getRecoilValue({\n key: depKey\n }) {\n const depLoadable = getNodeLoadable$2(store, state, depKey);\n depValues.set(depKey, depLoadable); // We need to update asynchronous dependencies as we go so the selector\n // knows if it has to restart evaluation if one of them is updated before\n // the asynchronous selector completely resolves.\n\n if (!duringSynchronousExecution) {\n updateDeps(store, state, new Set(depValues.keys()), executionID);\n notifyStoresOfNewAsyncDep(store, executionID);\n }\n\n switch (depLoadable.state) {\n case 'hasValue':\n return depLoadable.contents;\n\n case 'hasError':\n throw depLoadable.contents;\n\n case 'loading':\n loadingDepsState.loadingDepKey = depKey;\n loadingDepsState.loadingDepPromise = depLoadable.contents;\n throw depLoadable.contents;\n }\n\n throw Recoil_err('Invalid Loadable state');\n }\n\n const getCallback = fn => {\n return (...args) => {\n if (duringAsynchronousExecution) {\n throw Recoil_err('Callbacks from getCallback() should only be called asynchronously after the selector is evalutated. It can be used for selectors to return objects with callbacks that can work with Recoil state without a subscription.');\n }\n\n !(recoilValue != null) ? process.env.NODE_ENV !== \"production\" ? Recoil_invariant(false, 'Recoil Value can never be null') : Recoil_invariant(false) : void 0;\n return recoilCallback$1(store, fn, args, {\n node: recoilValue\n } // flowlint-line unclear-type:off\n );\n };\n };\n\n try {\n result = get({\n get: getRecoilValue,\n getCallback\n });\n result = isRecoilValue$3(result) ? getRecoilValue(result) : result;\n\n if (isLoadable$1(result)) {\n if (result.state === 'hasError') {\n resultIsError = true;\n }\n\n result = result.contents;\n }\n\n if (Recoil_isPromise(result)) {\n result = wrapResultPromise(store, result, state, depValues, executionID, loadingDepsState).finally(finishEvaluation);\n } else {\n finishEvaluation();\n }\n\n result = result instanceof WrappedValue$1 ? result.value : result;\n } catch (errorOrDepPromise) {\n result = errorOrDepPromise;\n\n if (Recoil_isPromise(result)) {\n result = wrapPendingDependencyPromise(store, result, state, depValues, executionID, loadingDepsState).finally(finishEvaluation);\n } else {\n resultIsError = true;\n finishEvaluation();\n }\n }\n\n if (resultIsError) {\n loadable = loadableWithError$1(result);\n } else if (Recoil_isPromise(result)) {\n loadable = loadableWithPromise$1(result);\n } else {\n loadable = loadableWithValue$2(result);\n }\n\n duringSynchronousExecution = false;\n updateExecutionInfoDepValues(store, executionID, depValues);\n updateDeps(store, state, new Set(depValues.keys()), executionID);\n return [loadable, depValues];\n }\n\n function getLoadableFromCacheAndUpdateDeps(store, state) {\n // First, look up in the state cache\n // If it's here, then the deps in the store should already be valid.\n let cachedLoadable = state.atomValues.get(key);\n\n if (cachedLoadable != null) {\n return cachedLoadable;\n } // Second, look up in the selector cache and update the deps in the store\n\n\n const depsAfterCacheLookup = new Set();\n\n try {\n cachedLoadable = cache.get(nodeKey => {\n !(typeof nodeKey === 'string') ? process.env.NODE_ENV !== \"production\" ? Recoil_invariant(false, 'Cache nodeKey is type string') : Recoil_invariant(false) : void 0;\n return getNodeLoadable$2(store, state, nodeKey).contents;\n }, {\n onNodeVisit: node => {\n if (node.type === 'branch' && node.nodeKey !== key) {\n depsAfterCacheLookup.add(node.nodeKey);\n }\n }\n });\n } catch (error) {\n throw Recoil_err(`Problem with cache lookup for selector \"${key}\": ${error.message}`);\n }\n\n if (cachedLoadable) {\n var _getExecutionInfo;\n\n // Cache the results in the state to allow for cheaper lookup than\n // iterating the tree cache of dependencies.\n state.atomValues.set(key, cachedLoadable);\n /**\n * Ensure store contains correct dependencies if we hit the cache so that\n * the store deps and cache are in sync for a given state. This is important\n * because store deps are normally updated when new executions are created,\n * but cache hits don't trigger new executions but they still _may_ signify\n * a change in deps in the store if the store deps for this state are empty\n * or stale.\n */\n\n updateDeps(store, state, depsAfterCacheLookup, (_getExecutionInfo = getExecutionInfo(store)) === null || _getExecutionInfo === void 0 ? void 0 : _getExecutionInfo.executionID);\n }\n\n return cachedLoadable;\n }\n /**\n * Given a tree state, this function returns a Loadable of the current state.\n *\n * The selector's get() function will only be re-evaluated if _both_ of the\n * following statements are true:\n *\n * 1. The current dep values from the given state produced a cache key that\n * was not found in the cache.\n * 2. There is no currently running async execution OR there is an\n * async execution that is running, but after comparing the dep values in\n * the given state with the dep values that the execution has discovered so\n * far we find that at least one dep value has changed, in which case we\n * start a new execution (the previously running execution will continue to\n * run to completion, but only the new execution will be deemed the\n * 'latest' execution, meaning it will be the only execution that will\n * update global state when it is finished. Any non-latest executions will\n * run to completion and update the selector cache but not global state).\n */\n\n\n function getSelectorLoadableAndUpdateDeps(store, state) {\n // First, see if our current state is cached\n const cachedVal = getLoadableFromCacheAndUpdateDeps(store, state);\n\n if (cachedVal != null) {\n clearExecutionInfo(store);\n return cachedVal;\n } // Second, check if there is already an ongoing execution based on the current state\n\n\n const inProgressExecutionInfo = getInProgressExecutionInfo(store, state);\n\n if (inProgressExecutionInfo != null) {\n var _inProgressExecutionI;\n\n if (((_inProgressExecutionI = inProgressExecutionInfo.loadingLoadable) === null || _inProgressExecutionI === void 0 ? void 0 : _inProgressExecutionI.state) === 'loading') {\n markStoreWaitingForResolvedAsync(store, inProgressExecutionInfo.executionID);\n } // FIXME: check after the fact to see if we made the right choice by waiting\n\n\n return inProgressExecutionInfo.loadingLoadable;\n } // Third, start a new evaluation of the selector\n\n\n const newExecutionID = getNewExecutionID();\n const [loadable, newDepValues] = evaluateSelectorGetter(store, state, newExecutionID);\n /**\n * Conditionally updates the cache with a given loadable.\n *\n * We only cache loadables that are not loading because our cache keys are\n * based on dep values, which are in an unfinished state for loadables that\n * have a 'loading' state (new deps may be discovered while the selector\n * runs its async code). We never want to cache partial dependencies b/c it\n * could lead to errors, such as prematurely returning the result based on a\n * partial list of deps-- we need the full list of deps to ensure that we\n * are returning the correct result from cache.\n */\n\n if (loadable.state === 'loading') {\n setExecutionInfo(store, newExecutionID, loadable, newDepValues, state);\n markStoreWaitingForResolvedAsync(store, newExecutionID);\n } else {\n clearExecutionInfo(store);\n setCache(state, loadable, newDepValues);\n }\n\n return loadable;\n }\n /**\n * Searches execution info across all stores to see if there is an in-progress\n * execution whose dependency values match the values of the requesting store.\n */\n\n\n function getInProgressExecutionInfo(store, state) {\n // Sort the pending executions so that our current store is checked first.\n const pendingExecutions = Recoil_concatIterables([executionInfoMap.has(store) ? [Recoil_nullthrows(executionInfoMap.get(store))] : [], Recoil_mapIterable(Recoil_filterIterable(executionInfoMap, ([s]) => s !== store), ([, execInfo]) => execInfo)]);\n\n function anyDepChanged(execDepValues) {\n for (const [depKey, execLoadable] of execDepValues) {\n if (!getNodeLoadable$2(store, state, depKey).is(execLoadable)) {\n return true;\n }\n }\n\n return false;\n }\n\n for (const execInfo of pendingExecutions) {\n if ( // If this execution was already checked to be valid with this version\n // of state, then let's use it!\n execInfo.stateVersions.get(state.version) || // If the deps for the execution match our current state, then it's valid\n !anyDepChanged(execInfo.depValuesDiscoveredSoFarDuringAsyncWork)) {\n execInfo.stateVersions.set(state.version, true);\n return execInfo;\n } else {\n execInfo.stateVersions.set(state.version, false);\n }\n }\n\n return undefined;\n }\n\n function getExecutionInfo(store) {\n return executionInfoMap.get(store);\n }\n /**\n * This function will update the selector's execution info when the selector\n * has either finished running an execution or has started a new execution. If\n * the given loadable is in a 'loading' state, the intention is that a new\n * execution has started. Otherwise, the intention is that an execution has\n * just finished.\n */\n\n\n function setExecutionInfo(store, newExecutionID, loadable, depValues, state) {\n executionInfoMap.set(store, {\n depValuesDiscoveredSoFarDuringAsyncWork: depValues,\n executionID: newExecutionID,\n loadingLoadable: loadable,\n stateVersions: new Map([[state.version, true]])\n });\n }\n\n function updateExecutionInfoDepValues(store, executionID, depValues) {\n // We only need to bother updating the deps for the latest execution because\n // that's all getInProgressExecutionInfo() will be looking for.\n if (isLatestExecution(store, executionID)) {\n const executionInfo = getExecutionInfo(store);\n\n if (executionInfo != null) {\n executionInfo.depValuesDiscoveredSoFarDuringAsyncWork = depValues;\n }\n }\n }\n\n function clearExecutionInfo(store) {\n executionInfoMap.delete(store);\n }\n\n function isLatestExecution(store, executionID) {\n var _getExecutionInfo2;\n\n return executionID === ((_getExecutionInfo2 = getExecutionInfo(store)) === null || _getExecutionInfo2 === void 0 ? void 0 : _getExecutionInfo2.executionID);\n }\n /**\n * FIXME: dep keys should take into account the state of the loadable to\n * prevent the edge case where a loadable with an error and a loadable with\n * an error as a value are treated as the same thing incorrectly. For example\n * these two should be treated differently:\n *\n * selector({key: '', get: () => new Error('hi')});\n * selector({key: '', get () => {throw new Error('hi')}});\n *\n * With current implementation they are treated the same\n */\n\n\n function depValuesToDepRoute(depValues) {\n return Array.from(depValues.entries()).map(([depKey, valLoadable]) => [depKey, valLoadable.contents]);\n }\n\n function setCache(state, loadable, depValues) {\n if (process.env.NODE_ENV !== \"production\") {\n if (loadable.state !== 'loading' && Boolean(options.dangerouslyAllowMutability) === false) {\n Recoil_deepFreezeValue(loadable.contents);\n }\n }\n\n state.atomValues.set(key, loadable);\n\n try {\n cache.set(depValuesToDepRoute(depValues), loadable);\n } catch (error) {\n throw Recoil_err(`Problem with setting cache for selector \"${key}\": ${error.message}`);\n }\n }\n\n function detectCircularDependencies(fn) {\n if (dependencyStack.includes(key)) {\n const message = `Recoil selector has circular dependencies: ${dependencyStack.slice(dependencyStack.indexOf(key)).join(' \\u2192 ')}`;\n return loadableWithError$1(Recoil_err(message));\n }\n\n dependencyStack.push(key);\n\n try {\n return fn();\n } finally {\n dependencyStack.pop();\n }\n }\n\n function selectorPeek(store, state) {\n const cachedLoadable = state.atomValues.get(key);\n\n if (cachedLoadable != null) {\n return cachedLoadable;\n }\n\n return cache.get(nodeKey => {\n var _peekNodeLoadable;\n\n !(typeof nodeKey === 'string') ? process.env.NODE_ENV !== \"production\" ? Recoil_invariant(false, 'Cache nodeKey is type string') : Recoil_invariant(false) : void 0;\n return (_peekNodeLoadable = peekNodeLoadable$1(store, state, nodeKey)) === null || _peekNodeLoadable === void 0 ? void 0 : _peekNodeLoadable.contents;\n });\n }\n\n function selectorGet(store, state) {\n return detectCircularDependencies(() => getSelectorLoadableAndUpdateDeps(store, state));\n }\n\n function invalidateSelector(state) {\n state.atomValues.delete(key);\n }\n\n function clearSelectorCache(store, treeState) {\n !(recoilValue != null) ? process.env.NODE_ENV !== \"production\" ? Recoil_invariant(false, 'Recoil Value can never be null') : Recoil_invariant(false) : void 0;\n\n for (const nodeKey of discoveredDependencyNodeKeys) {\n var _node$clearCache;\n\n const node = getNode$6(nodeKey);\n (_node$clearCache = node.clearCache) === null || _node$clearCache === void 0 ? void 0 : _node$clearCache.call(node, store, treeState);\n }\n\n discoveredDependencyNodeKeys.clear();\n invalidateSelector(treeState);\n cache.clear();\n markRecoilValueModified$1(store, recoilValue);\n }\n\n if (set != null) {\n /**\n * ES5 strict mode prohibits defining non-top-level function declarations,\n * so don't use function declaration syntax here\n */\n const selectorSet = (store, state, newValue) => {\n let syncSelectorSetFinished = false;\n const writes = new Map();\n\n function getRecoilValue({\n key: depKey\n }) {\n if (syncSelectorSetFinished) {\n throw Recoil_err('Recoil: Async selector sets are not currently supported.');\n }\n\n const loadable = getNodeLoadable$2(store, state, depKey);\n\n if (loadable.state === 'hasValue') {\n return loadable.contents;\n } else if (loadable.state === 'loading') {\n const msg = `Getting value of asynchronous atom or selector \"${depKey}\" in a pending state while setting selector \"${key}\" is not yet supported.`;\n Recoil_recoverableViolation(msg);\n throw Recoil_err(msg);\n } else {\n throw loadable.contents;\n }\n }\n\n function setRecoilState(recoilState, valueOrUpdater // $FlowFixMe[missing-local-annot]\n ) {\n if (syncSelectorSetFinished) {\n const msg = 'Recoil: Async selector sets are not currently supported.';\n Recoil_recoverableViolation(msg);\n throw Recoil_err(msg);\n }\n\n const setValue = typeof valueOrUpdater === 'function' ? // cast to any because we can't restrict type S from being a function itself without losing support for opaque types\n // flowlint-next-line unclear-type:off\n valueOrUpdater(getRecoilValue(recoilState)) : valueOrUpdater;\n const upstreamWrites = setNodeValue$3(store, state, recoilState.key, setValue);\n upstreamWrites.forEach((v, k) => writes.set(k, v));\n }\n\n function resetRecoilState(recoilState) {\n setRecoilState(recoilState, DEFAULT_VALUE$6);\n }\n\n const ret = set({\n set: setRecoilState,\n get: getRecoilValue,\n reset: resetRecoilState\n }, newValue); // set should be a void method, but if the user makes it `async`, then it\n // will return a Promise, which we don't currently support.\n\n if (ret !== undefined) {\n throw Recoil_isPromise(ret) ? Recoil_err('Recoil: Async selector sets are not currently supported.') : Recoil_err('Recoil: selector set should be a void function.');\n }\n\n syncSelectorSetFinished = true;\n return writes;\n };\n\n return recoilValue = registerNode$1({\n key,\n nodeType: 'selector',\n peek: selectorPeek,\n get: selectorGet,\n set: selectorSet,\n init: selectorInit,\n invalidate: invalidateSelector,\n clearCache: clearSelectorCache,\n shouldDeleteConfigOnRelease: selectorShouldDeleteConfigOnRelease,\n dangerouslyAllowMutability: options.dangerouslyAllowMutability,\n shouldRestoreFromSnapshots: false,\n retainedBy\n });\n } else {\n return recoilValue = registerNode$1({\n key,\n nodeType: 'selector',\n peek: selectorPeek,\n get: selectorGet,\n init: selectorInit,\n invalidate: invalidateSelector,\n clearCache: clearSelectorCache,\n shouldDeleteConfigOnRelease: selectorShouldDeleteConfigOnRelease,\n dangerouslyAllowMutability: options.dangerouslyAllowMutability,\n shouldRestoreFromSnapshots: false,\n retainedBy\n });\n }\n}\n/* eslint-enable no-redeclare */\n// $FlowIssue[incompatible-use]\n// $FlowFixMe[missing-local-annot]\n\n\nselector.value = value => new WrappedValue$1(value);\n\nvar Recoil_selector = selector;\n\n// @fb-only: import type {ScopeRules} from 'Recoil_ScopedAtom';\n// @fb-only: const {scopedAtom} = require('Recoil_ScopedAtom');\nconst {\n isLoadable: isLoadable$2,\n loadableWithError: loadableWithError$2,\n loadableWithPromise: loadableWithPromise$2,\n loadableWithValue: loadableWithValue$3\n} = Recoil_Loadable$1;\n\nconst {\n WrappedValue: WrappedValue$2\n} = Recoil_Wrapper$1;\n\nconst {\n peekNodeInfo: peekNodeInfo$3\n} = Recoil_FunctionalCore;\n\nconst {\n DEFAULT_VALUE: DEFAULT_VALUE$7,\n DefaultValue: DefaultValue$2,\n getConfigDeletionHandler: getConfigDeletionHandler$2,\n registerNode: registerNode$2,\n setConfigDeletionHandler: setConfigDeletionHandler$1\n} = Recoil_Node;\n\nconst {\n isRecoilValue: isRecoilValue$4\n} = Recoil_RecoilValue$1;\n\nconst {\n getRecoilValueAsLoadable: getRecoilValueAsLoadable$4,\n markRecoilValueModified: markRecoilValueModified$2,\n setRecoilValue: setRecoilValue$4,\n setRecoilValueLoadable: setRecoilValueLoadable$2\n} = Recoil_RecoilValueInterface;\n\nconst {\n retainedByOptionWithDefault: retainedByOptionWithDefault$2\n} = Recoil_Retention;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst unwrap = x => x instanceof WrappedValue$2 ? x.value : x;\n\nfunction baseAtom(options) {\n const {\n key,\n persistence_UNSTABLE: persistence\n } = options;\n const retainedBy = retainedByOptionWithDefault$2(options.retainedBy_UNSTABLE);\n let liveStoresCount = 0;\n\n function unwrapPromise(promise) {\n return loadableWithPromise$2(promise.then(value => {\n defaultLoadable = loadableWithValue$3(value);\n return value;\n }).catch(error => {\n defaultLoadable = loadableWithError$2(error);\n throw error;\n }));\n }\n\n let defaultLoadable = Recoil_isPromise(options.default) ? unwrapPromise(options.default) : isLoadable$2(options.default) ? options.default.state === 'loading' ? unwrapPromise(options.default.contents) : options.default : // $FlowFixMe[incompatible-call]\n loadableWithValue$3(unwrap(options.default));\n maybeFreezeValueOrPromise(defaultLoadable.contents);\n let cachedAnswerForUnvalidatedValue = undefined; // Cleanup handlers for this atom\n // Rely on stable reference equality of the store to use it as a key per \n\n const cleanupEffectsByStore = new Map();\n\n function maybeFreezeValueOrPromise(valueOrPromise) {\n if (process.env.NODE_ENV !== \"production\") {\n if (options.dangerouslyAllowMutability !== true) {\n if (Recoil_isPromise(valueOrPromise)) {\n return valueOrPromise.then(value => {\n Recoil_deepFreezeValue(value);\n return value;\n });\n } else {\n Recoil_deepFreezeValue(valueOrPromise);\n return valueOrPromise;\n }\n }\n }\n\n return valueOrPromise;\n }\n\n function wrapPendingPromise(store, promise) {\n const wrappedPromise = promise.then(value => {\n var _store$getState$nextT, _state$atomValues$get;\n\n const state = (_store$getState$nextT = store.getState().nextTree) !== null && _store$getState$nextT !== void 0 ? _store$getState$nextT : store.getState().currentTree;\n\n if (((_state$atomValues$get = state.atomValues.get(key)) === null || _state$atomValues$get === void 0 ? void 0 : _state$atomValues$get.contents) === wrappedPromise) {\n setRecoilValue$4(store, node, value);\n }\n\n return value;\n }).catch(error => {\n var _store$getState$nextT2, _state$atomValues$get2;\n\n const state = (_store$getState$nextT2 = store.getState().nextTree) !== null && _store$getState$nextT2 !== void 0 ? _store$getState$nextT2 : store.getState().currentTree;\n\n if (((_state$atomValues$get2 = state.atomValues.get(key)) === null || _state$atomValues$get2 === void 0 ? void 0 : _state$atomValues$get2.contents) === wrappedPromise) {\n setRecoilValueLoadable$2(store, node, loadableWithError$2(error));\n }\n\n throw error;\n });\n return wrappedPromise;\n }\n\n function initAtom(store, initState, trigger) {\n var _options$effects;\n\n liveStoresCount++;\n\n const cleanupAtom = () => {\n var _cleanupEffectsByStor;\n\n liveStoresCount--;\n (_cleanupEffectsByStor = cleanupEffectsByStore.get(store)) === null || _cleanupEffectsByStor === void 0 ? void 0 : _cleanupEffectsByStor.forEach(cleanup => cleanup());\n cleanupEffectsByStore.delete(store);\n };\n\n store.getState().knownAtoms.add(key); // Setup async defaults to notify subscribers when they resolve\n\n if (defaultLoadable.state === 'loading') {\n const notifyDefaultSubscribers = () => {\n var _store$getState$nextT3;\n\n const state = (_store$getState$nextT3 = store.getState().nextTree) !== null && _store$getState$nextT3 !== void 0 ? _store$getState$nextT3 : store.getState().currentTree;\n\n if (!state.atomValues.has(key)) {\n markRecoilValueModified$2(store, node);\n }\n };\n\n defaultLoadable.contents.finally(notifyDefaultSubscribers);\n } ///////////////////\n // Run Atom Effects\n ///////////////////\n\n\n const effects = (_options$effects = options.effects) !== null && _options$effects !== void 0 ? _options$effects : options.effects_UNSTABLE;\n\n if (effects != null) {\n // This state is scoped by Store, since this is in the initAtom() closure\n let initValue = DEFAULT_VALUE$7;\n let isDuringInit = true;\n let isInitError = false;\n let pendingSetSelf = null;\n\n function getLoadable(recoilValue) {\n // Normally we can just get the current value of another atom.\n // But for our own value we need to check if there is a pending\n // initialized value or get the fallback default value.\n if (isDuringInit && recoilValue.key === key) {\n // Cast T to S\n const retValue = initValue; // flowlint-line unclear-type:off\n\n return retValue instanceof DefaultValue$2 ? peekAtom(store, initState) // flowlint-line unclear-type:off\n : Recoil_isPromise(retValue) ? loadableWithPromise$2(retValue.then(v => v instanceof DefaultValue$2 ? // Cast T to S\n defaultLoadable.toPromise() // flowlint-line unclear-type:off\n : v)) : // $FlowFixMe[incompatible-call]\n loadableWithValue$3(retValue);\n }\n\n return getRecoilValueAsLoadable$4(store, recoilValue);\n }\n\n function getPromise(recoilValue) {\n return getLoadable(recoilValue).toPromise();\n }\n\n function getInfo_UNSTABLE(recoilValue) {\n var _store$getState$nextT4;\n\n const info = peekNodeInfo$3(store, (_store$getState$nextT4 = store.getState().nextTree) !== null && _store$getState$nextT4 !== void 0 ? _store$getState$nextT4 : store.getState().currentTree, recoilValue.key);\n return isDuringInit && recoilValue.key === key && !(initValue instanceof DefaultValue$2) ? { ...info,\n isSet: true,\n loadable: getLoadable(recoilValue)\n } : info;\n }\n\n const setSelf = effect => valueOrUpdater => {\n if (isDuringInit) {\n const currentLoadable = getLoadable(node);\n const currentValue = currentLoadable.state === 'hasValue' ? currentLoadable.contents : DEFAULT_VALUE$7;\n initValue = typeof valueOrUpdater === 'function' ? // cast to any because we can't restrict T from being a function without losing support for opaque types\n valueOrUpdater(currentValue) // flowlint-line unclear-type:off\n : valueOrUpdater;\n\n if (Recoil_isPromise(initValue)) {\n initValue = initValue.then(value => {\n // Avoid calling onSet() when setSelf() initializes with a Promise\n pendingSetSelf = {\n effect,\n value\n };\n return value;\n });\n }\n } else {\n if (Recoil_isPromise(valueOrUpdater)) {\n throw Recoil_err('Setting atoms to async values is not implemented.');\n }\n\n if (typeof valueOrUpdater !== 'function') {\n pendingSetSelf = {\n effect,\n value: unwrap(valueOrUpdater)\n };\n }\n\n setRecoilValue$4(store, node, typeof valueOrUpdater === 'function' ? currentValue => {\n const newValue = unwrap( // cast to any because we can't restrict T from being a function without losing support for opaque types\n valueOrUpdater(currentValue) // flowlint-line unclear-type:off\n ); // $FlowFixMe[incompatible-type]\n\n pendingSetSelf = {\n effect,\n value: newValue\n };\n return newValue;\n } : unwrap(valueOrUpdater));\n }\n };\n\n const resetSelf = effect => () => setSelf(effect)(DEFAULT_VALUE$7);\n\n const onSet = effect => handler => {\n var _cleanupEffectsByStor2;\n\n const {\n release\n } = store.subscribeToTransactions(currentStore => {\n var _currentTree$atomValu;\n\n // eslint-disable-next-line prefer-const\n let {\n currentTree,\n previousTree\n } = currentStore.getState();\n\n if (!previousTree) {\n Recoil_recoverableViolation('Transaction subscribers notified without a next tree being present -- this is a bug in Recoil');\n previousTree = currentTree; // attempt to trundle on\n }\n\n const newLoadable = (_currentTree$atomValu = currentTree.atomValues.get(key)) !== null && _currentTree$atomValu !== void 0 ? _currentTree$atomValu : defaultLoadable;\n\n if (newLoadable.state === 'hasValue') {\n var _previousTree$atomVal, _pendingSetSelf, _pendingSetSelf2, _pendingSetSelf3;\n\n const newValue = newLoadable.contents;\n const oldLoadable = (_previousTree$atomVal = previousTree.atomValues.get(key)) !== null && _previousTree$atomVal !== void 0 ? _previousTree$atomVal : defaultLoadable;\n const oldValue = oldLoadable.state === 'hasValue' ? oldLoadable.contents : DEFAULT_VALUE$7; // TODO This isn't actually valid, use as a placeholder for now.\n // Ignore atom value changes that were set via setSelf() in the same effect.\n // We will still properly call the handler if there was a subsequent\n // set from something other than an atom effect which was batched\n // with the `setSelf()` call. However, we may incorrectly ignore\n // the handler if the subsequent batched call happens to set the\n // atom to the exact same value as the `setSelf()`. But, in that\n // case, it was kind of a noop, so the semantics are debatable..\n\n if (((_pendingSetSelf = pendingSetSelf) === null || _pendingSetSelf === void 0 ? void 0 : _pendingSetSelf.effect) !== effect || ((_pendingSetSelf2 = pendingSetSelf) === null || _pendingSetSelf2 === void 0 ? void 0 : _pendingSetSelf2.value) !== newValue) {\n handler(newValue, oldValue, !currentTree.atomValues.has(key));\n } else if (((_pendingSetSelf3 = pendingSetSelf) === null || _pendingSetSelf3 === void 0 ? void 0 : _pendingSetSelf3.effect) === effect) {\n pendingSetSelf = null;\n }\n }\n }, key);\n cleanupEffectsByStore.set(store, [...((_cleanupEffectsByStor2 = cleanupEffectsByStore.get(store)) !== null && _cleanupEffectsByStor2 !== void 0 ? _cleanupEffectsByStor2 : []), release]);\n };\n\n for (const effect of effects) {\n try {\n const cleanup = effect({\n node,\n storeID: store.storeID,\n parentStoreID_UNSTABLE: store.parentStoreID,\n trigger,\n setSelf: setSelf(effect),\n resetSelf: resetSelf(effect),\n onSet: onSet(effect),\n getPromise,\n getLoadable,\n getInfo_UNSTABLE\n });\n\n if (cleanup != null) {\n var _cleanupEffectsByStor3;\n\n cleanupEffectsByStore.set(store, [...((_cleanupEffectsByStor3 = cleanupEffectsByStore.get(store)) !== null && _cleanupEffectsByStor3 !== void 0 ? _cleanupEffectsByStor3 : []), cleanup]);\n }\n } catch (error) {\n initValue = error;\n isInitError = true;\n }\n }\n\n isDuringInit = false; // Mutate initial state in place since we know there are no other subscribers\n // since we are the ones initializing on first use.\n\n if (!(initValue instanceof DefaultValue$2)) {\n var _store$getState$nextT5;\n\n const initLoadable = isInitError ? loadableWithError$2(initValue) : Recoil_isPromise(initValue) ? loadableWithPromise$2(wrapPendingPromise(store, initValue)) : loadableWithValue$3(unwrap(initValue));\n maybeFreezeValueOrPromise(initLoadable.contents);\n initState.atomValues.set(key, initLoadable); // If there is a pending transaction, then also mutate the next state tree.\n // This could happen if the atom was first initialized in an action that\n // also updated some other atom's state.\n\n (_store$getState$nextT5 = store.getState().nextTree) === null || _store$getState$nextT5 === void 0 ? void 0 : _store$getState$nextT5.atomValues.set(key, initLoadable);\n }\n }\n\n return cleanupAtom;\n }\n\n function peekAtom(_store, state) {\n var _ref, _state$atomValues$get3;\n\n return (_ref = (_state$atomValues$get3 = state.atomValues.get(key)) !== null && _state$atomValues$get3 !== void 0 ? _state$atomValues$get3 : cachedAnswerForUnvalidatedValue) !== null && _ref !== void 0 ? _ref : defaultLoadable;\n }\n\n function getAtom(_store, state) {\n if (state.atomValues.has(key)) {\n // Atom value is stored in state:\n return Recoil_nullthrows(state.atomValues.get(key));\n } else if (state.nonvalidatedAtoms.has(key)) {\n // Atom value is stored but needs validation before use.\n // We might have already validated it and have a cached validated value:\n if (cachedAnswerForUnvalidatedValue != null) {\n return cachedAnswerForUnvalidatedValue;\n }\n\n if (persistence == null) {\n Recoil_expectationViolation(`Tried to restore a persisted value for atom ${key} but it has no persistence settings.`);\n return defaultLoadable;\n }\n\n const nonvalidatedValue = state.nonvalidatedAtoms.get(key);\n const validatorResult = persistence.validator(nonvalidatedValue, DEFAULT_VALUE$7);\n const validatedValueLoadable = validatorResult instanceof DefaultValue$2 ? defaultLoadable : loadableWithValue$3(validatorResult);\n cachedAnswerForUnvalidatedValue = validatedValueLoadable;\n return cachedAnswerForUnvalidatedValue;\n } else {\n return defaultLoadable;\n }\n }\n\n function invalidateAtom() {\n cachedAnswerForUnvalidatedValue = undefined;\n }\n\n function setAtom(_store, state, newValue) {\n // Bail out if we're being set to the existing value, or if we're being\n // reset but have no stored value (validated or unvalidated) to reset from:\n if (state.atomValues.has(key)) {\n const existing = Recoil_nullthrows(state.atomValues.get(key));\n\n if (existing.state === 'hasValue' && newValue === existing.contents) {\n return new Map();\n }\n } else if (!state.nonvalidatedAtoms.has(key) && newValue instanceof DefaultValue$2) {\n return new Map();\n }\n\n maybeFreezeValueOrPromise(newValue);\n cachedAnswerForUnvalidatedValue = undefined; // can be released now if it was previously in use\n\n return new Map().set(key, loadableWithValue$3(newValue));\n }\n\n function shouldDeleteConfigOnReleaseAtom() {\n return getConfigDeletionHandler$2(key) !== undefined && liveStoresCount <= 0;\n }\n\n const node = registerNode$2({\n key,\n nodeType: 'atom',\n peek: peekAtom,\n get: getAtom,\n set: setAtom,\n init: initAtom,\n invalidate: invalidateAtom,\n shouldDeleteConfigOnRelease: shouldDeleteConfigOnReleaseAtom,\n dangerouslyAllowMutability: options.dangerouslyAllowMutability,\n persistence_UNSTABLE: options.persistence_UNSTABLE ? {\n type: options.persistence_UNSTABLE.type,\n backButton: options.persistence_UNSTABLE.backButton\n } : undefined,\n shouldRestoreFromSnapshots: true,\n retainedBy\n });\n return node;\n} // prettier-ignore\n\n\nfunction atom(options) {\n if (process.env.NODE_ENV !== \"production\") {\n if (typeof options.key !== 'string') {\n throw Recoil_err('A key option with a unique string value must be provided when creating an atom.');\n }\n }\n\n const { // @fb-only: scopeRules_APPEND_ONLY_READ_THE_DOCS,\n ...restOptions\n } = options;\n const optionsDefault = 'default' in options ? // $FlowIssue[incompatible-type] No way to refine in Flow that property is not defined\n options.default : new Promise(() => {});\n\n if (isRecoilValue$4(optionsDefault) // Continue to use atomWithFallback for promise defaults for scoped atoms\n // for now, since scoped atoms don't support async defaults\n // @fb-only: || (isPromise(optionsDefault) && scopeRules_APPEND_ONLY_READ_THE_DOCS)\n // @fb-only: || (isLoadable(optionsDefault) && scopeRules_APPEND_ONLY_READ_THE_DOCS)\n ) {\n return atomWithFallback({ ...restOptions,\n default: optionsDefault // @fb-only: scopeRules_APPEND_ONLY_READ_THE_DOCS,\n\n }); // @fb-only: } else if (scopeRules_APPEND_ONLY_READ_THE_DOCS\n // @fb-only: && !isPromise(optionsDefault)\n // @fb-only: && !isLoadable(optionsDefault)\n // @fb-only: ) {\n // @fb-only: return scopedAtom({\n // @fb-only: ...restOptions,\n // @fb-only: default: unwrap(optionsDefault),\n // @fb-only: scopeRules_APPEND_ONLY_READ_THE_DOCS,\n // @fb-only: });\n } else {\n return baseAtom({ ...restOptions,\n default: optionsDefault\n });\n }\n}\n\nfunction atomWithFallback(options) {\n const base = atom({ ...options,\n default: DEFAULT_VALUE$7,\n persistence_UNSTABLE: options.persistence_UNSTABLE === undefined ? undefined : { ...options.persistence_UNSTABLE,\n validator: storedValue => storedValue instanceof DefaultValue$2 ? storedValue : Recoil_nullthrows(options.persistence_UNSTABLE).validator(storedValue, DEFAULT_VALUE$7)\n },\n // TODO Hack for now.\n effects: options.effects,\n // flowlint-line unclear-type: off\n effects_UNSTABLE: options.effects_UNSTABLE // flowlint-line unclear-type: off\n\n }); // $FlowFixMe[incompatible-call]\n\n const sel = Recoil_selector({\n key: `${options.key}__withFallback`,\n get: ({\n get\n }) => {\n const baseValue = get(base);\n return baseValue instanceof DefaultValue$2 ? options.default : baseValue;\n },\n // $FlowFixMe[incompatible-call]\n set: ({\n set\n }, newValue) => set(base, newValue),\n // This selector does not need to cache as it is a wrapper selector\n // and the selector within the wrapper selector will have a cache\n // option by default\n cachePolicy_UNSTABLE: {\n eviction: 'most-recent'\n },\n dangerouslyAllowMutability: options.dangerouslyAllowMutability\n });\n setConfigDeletionHandler$1(sel.key, getConfigDeletionHandler$2(options.key));\n return sel;\n} // $FlowFixMe[missing-local-annot]\n\n\natom.value = value => new WrappedValue$2(value);\n\nvar Recoil_atom = atom;\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n * @oncall recoil\n */\n\nclass MapCache {\n constructor(options) {\n var _options$mapKey;\n\n _defineProperty(this, \"_map\", void 0);\n\n _defineProperty(this, \"_keyMapper\", void 0);\n\n this._map = new Map();\n this._keyMapper = (_options$mapKey = options === null || options === void 0 ? void 0 : options.mapKey) !== null && _options$mapKey !== void 0 ? _options$mapKey : v => v;\n }\n\n size() {\n return this._map.size;\n }\n\n has(key) {\n return this._map.has(this._keyMapper(key));\n }\n\n get(key) {\n return this._map.get(this._keyMapper(key));\n }\n\n set(key, val) {\n this._map.set(this._keyMapper(key), val);\n }\n\n delete(key) {\n this._map.delete(this._keyMapper(key));\n }\n\n clear() {\n this._map.clear();\n }\n\n}\n\nvar Recoil_MapCache = {\n MapCache\n};\n\nvar Recoil_MapCache_1 = Recoil_MapCache.MapCache;\n\nvar Recoil_MapCache$1 = /*#__PURE__*/Object.freeze({\n __proto__: null,\n MapCache: Recoil_MapCache_1\n});\n\nconst {\n LRUCache: LRUCache$2\n} = Recoil_LRUCache$1;\n\nconst {\n MapCache: MapCache$1\n} = Recoil_MapCache$1;\n\n\n\n\n\n\n\nconst defaultPolicy$1 = {\n equality: 'reference',\n eviction: 'none',\n maxSize: Infinity\n};\n\nfunction cacheFromPolicy({\n equality = defaultPolicy$1.equality,\n eviction = defaultPolicy$1.eviction,\n maxSize = defaultPolicy$1.maxSize\n} = defaultPolicy$1) {\n const valueMapper = getValueMapper$1(equality);\n const cache = getCache(eviction, maxSize, valueMapper);\n return cache;\n}\n\nfunction getValueMapper$1(equality) {\n switch (equality) {\n case 'reference':\n return val => val;\n\n case 'value':\n return val => Recoil_stableStringify(val);\n }\n\n throw Recoil_err(`Unrecognized equality policy ${equality}`);\n}\n\nfunction getCache(eviction, maxSize, mapKey) {\n switch (eviction) {\n case 'keep-all':\n return new MapCache$1({\n mapKey\n });\n\n case 'lru':\n return new LRUCache$2({\n mapKey,\n maxSize: Recoil_nullthrows(maxSize)\n });\n\n case 'most-recent':\n return new LRUCache$2({\n mapKey,\n maxSize: 1\n });\n }\n\n throw Recoil_err(`Unrecognized eviction policy ${eviction}`);\n}\n\nvar Recoil_cacheFromPolicy = cacheFromPolicy;\n\n// @fb-only: import type {ScopeRules} from 'Recoil_ScopedAtom';\n\n\nconst {\n setConfigDeletionHandler: setConfigDeletionHandler$2\n} = Recoil_Node;\n\n\n\n\n\n// Process scopeRules to handle any entries which are functions taking parameters\n// prettier-ignore\n// @fb-only: function mapScopeRules

(\n// @fb-only: scopeRules?: ParameterizedScopeRules

,\n// @fb-only: param: P,\n// @fb-only: ): ScopeRules | void {\n// @fb-only: return scopeRules?.map(rule =>\n// @fb-only: Array.isArray(rule)\n// @fb-only: ? rule.map(entry => (typeof entry === 'function' ? entry(param) : entry))\n// @fb-only: : rule,\n// @fb-only: );\n// @fb-only: }\n\n/*\nA function which returns an atom based on the input parameter.\n\nEach unique parameter returns a unique atom. E.g.,\n\n const f = atomFamily(...);\n f({a: 1}) => an atom\n f({a: 2}) => a different atom\n\nThis allows components to persist local, private state using atoms. Each\ninstance of the component may have a different key, which it uses as the\nparameter for a family of atoms; in this way, each component will have\nits own atom not shared by other instances. These state keys may be composed\ninto children's state keys as well.\n*/\nfunction atomFamily(options) {\n var _options$cachePolicyF, _options$cachePolicyF2;\n\n const atomCache = Recoil_cacheFromPolicy({\n equality: (_options$cachePolicyF = (_options$cachePolicyF2 = options.cachePolicyForParams_UNSTABLE) === null || _options$cachePolicyF2 === void 0 ? void 0 : _options$cachePolicyF2.equality) !== null && _options$cachePolicyF !== void 0 ? _options$cachePolicyF : 'value',\n eviction: 'keep-all'\n }); // Simple atomFamily implementation to cache individual atoms based\n // on the parameter value equality.\n\n return params => {\n var _stableStringify, _options$effects;\n\n const cachedAtom = atomCache.get(params);\n\n if (cachedAtom != null) {\n return cachedAtom;\n }\n\n const {\n cachePolicyForParams_UNSTABLE,\n ...atomOptions\n } = options;\n const optionsDefault = 'default' in options ? // $FlowIssue[incompatible-type] No way to refine in Flow that property is not defined\n options.default : new Promise(() => {});\n const newAtom = Recoil_atom({ ...atomOptions,\n key: `${options.key}__${(_stableStringify = Recoil_stableStringify(params)) !== null && _stableStringify !== void 0 ? _stableStringify : 'void'}`,\n default: typeof optionsDefault === 'function' ? // The default was parameterized\n // Flow doesn't know that T isn't a function, so we need to case to any\n // $FlowIssue[incompatible-use]\n optionsDefault(params) : // Default may be a static value, promise, or RecoilValue\n optionsDefault,\n retainedBy_UNSTABLE: typeof options.retainedBy_UNSTABLE === 'function' ? options.retainedBy_UNSTABLE(params) : options.retainedBy_UNSTABLE,\n effects: typeof options.effects === 'function' ? options.effects(params) : typeof options.effects_UNSTABLE === 'function' ? options.effects_UNSTABLE(params) : (_options$effects = options.effects) !== null && _options$effects !== void 0 ? _options$effects : options.effects_UNSTABLE // prettier-ignore\n // @fb-only: scopeRules_APPEND_ONLY_READ_THE_DOCS: mapScopeRules(\n // @fb-only: options.scopeRules_APPEND_ONLY_READ_THE_DOCS,\n // @fb-only: params,\n // @fb-only: ),\n\n });\n atomCache.set(params, newAtom);\n setConfigDeletionHandler$2(newAtom.key, () => {\n atomCache.delete(params);\n });\n return newAtom;\n };\n}\n\nvar Recoil_atomFamily = atomFamily;\n\nconst {\n setConfigDeletionHandler: setConfigDeletionHandler$3\n} = Recoil_Node;\n\n\n\n\n\n // Keep in mind the parameter needs to be serializable as a cahche key\n// using Recoil_stableStringify\n\n\n// Add a unique index to each selector in case the cache implementation allows\n// duplicate keys based on equivalent stringified parameters\nlet nextIndex = 0;\n/* eslint-disable no-redeclare */\n\n// Return a function that returns members of a family of selectors of the same type\n// E.g.,\n//\n// const s = selectorFamily(...);\n// s({a: 1}) => a selector\n// s({a: 2}) => a different selector\n//\n// By default, the selectors are distinguished by distinct values of the\n// parameter based on value equality, not reference equality. This allows using\n// object literals or other equivalent objects at callsites to not create\n// duplicate cache entries. This behavior may be overridden with the\n// cacheImplementationForParams option.\nfunction selectorFamily(options) {\n var _options$cachePolicyF, _options$cachePolicyF2;\n\n const selectorCache = Recoil_cacheFromPolicy({\n equality: (_options$cachePolicyF = (_options$cachePolicyF2 = options.cachePolicyForParams_UNSTABLE) === null || _options$cachePolicyF2 === void 0 ? void 0 : _options$cachePolicyF2.equality) !== null && _options$cachePolicyF !== void 0 ? _options$cachePolicyF : 'value',\n eviction: 'keep-all'\n });\n return params => {\n var _stableStringify;\n\n // Throw an error with selector key so that it is clear which\n // selector is causing an error\n let cachedSelector;\n\n try {\n cachedSelector = selectorCache.get(params);\n } catch (error) {\n throw Recoil_err(`Problem with cache lookup for selector ${options.key}: ${error.message}`);\n }\n\n if (cachedSelector != null) {\n return cachedSelector;\n }\n\n const myKey = `${options.key}__selectorFamily/${(_stableStringify = Recoil_stableStringify(params, {\n // It is possible to use functions in parameters if the user uses\n // a cache with reference equality thanks to the incrementing index.\n allowFunctions: true\n })) !== null && _stableStringify !== void 0 ? _stableStringify : 'void'}/${nextIndex++}`; // Append index in case values serialize to the same key string\n\n const myGet = callbacks => options.get(params)(callbacks);\n\n const myCachePolicy = options.cachePolicy_UNSTABLE;\n const retainedBy = typeof options.retainedBy_UNSTABLE === 'function' ? options.retainedBy_UNSTABLE(params) : options.retainedBy_UNSTABLE;\n let newSelector;\n\n if (options.set != null) {\n const set = options.set;\n\n const mySet = (callbacks, newValue) => set(params)(callbacks, newValue);\n\n newSelector = Recoil_selector({\n key: myKey,\n get: myGet,\n set: mySet,\n cachePolicy_UNSTABLE: myCachePolicy,\n dangerouslyAllowMutability: options.dangerouslyAllowMutability,\n retainedBy_UNSTABLE: retainedBy\n });\n } else {\n newSelector = Recoil_selector({\n key: myKey,\n get: myGet,\n cachePolicy_UNSTABLE: myCachePolicy,\n dangerouslyAllowMutability: options.dangerouslyAllowMutability,\n retainedBy_UNSTABLE: retainedBy\n });\n }\n\n selectorCache.set(params, newSelector);\n setConfigDeletionHandler$3(newSelector.key, () => {\n selectorCache.delete(params);\n });\n return newSelector;\n };\n}\n/* eslint-enable no-redeclare */\n\n\nvar Recoil_selectorFamily = selectorFamily;\n\n// flowlint-next-line unclear-type:off\n\n\nconst constantSelector = Recoil_selectorFamily({\n key: '__constant',\n get: constant => () => constant,\n cachePolicyForParams_UNSTABLE: {\n equality: 'reference'\n }\n}); // Function that returns a selector which always produces the\n// same constant value. It may be called multiple times with the\n// same value, based on reference equality, and will provide the\n// same selector.\n\nfunction constSelector(constant) {\n return constantSelector(constant);\n}\n\nvar Recoil_constSelector = constSelector;\n\n// flowlint-next-line unclear-type:off\n\n\nconst throwingSelector = Recoil_selectorFamily({\n key: '__error',\n get: message => () => {\n throw Recoil_err(message);\n },\n // TODO Why?\n cachePolicyForParams_UNSTABLE: {\n equality: 'reference'\n }\n}); // Function that returns a selector which always throws an error\n// with the provided message.\n\nfunction errorSelector(message) {\n return throwingSelector(message);\n}\n\nvar Recoil_errorSelector = errorSelector;\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * Wraps another recoil value and prevents writing to it.\n *\n * \n * @format\n * @oncall recoil\n */\n\nfunction readOnlySelector(atom) {\n // flowlint-next-line unclear-type: off\n return atom;\n}\n\nvar Recoil_readOnlySelector = readOnlySelector;\n\nconst {\n loadableWithError: loadableWithError$3,\n loadableWithPromise: loadableWithPromise$3,\n loadableWithValue: loadableWithValue$4\n} = Recoil_Loadable$1;\n\n\n\n\n\n /////////////////\n// TRUTH TABLE\n/////////////////\n// Dependencies waitForNone waitForAny waitForAll waitForAllSettled\n// [loading, loading] [Promise, Promise] Promise Promise Promise\n// [value, loading] [value, Promise] [value, Promise] Promise Promise\n// [value, value] [value, value] [value, value] [value, value] [value, value]\n//\n// [error, loading] [Error, Promise] [Error, Promise] Error Promise\n// [error, error] [Error, Error] [Error, Error] Error [error, error]\n// [value, error] [value, Error] [value, Error] Error [value, error]\n// Issue parallel requests for all dependencies and return the current\n// status if they have results, have some error, or are still pending.\n\n\nfunction concurrentRequests(getRecoilValue, deps) {\n const results = Array(deps.length).fill(undefined);\n const exceptions = Array(deps.length).fill(undefined);\n\n for (const [i, dep] of deps.entries()) {\n try {\n results[i] = getRecoilValue(dep);\n } catch (e) {\n // exceptions can either be Promises of pending results or real errors\n exceptions[i] = e;\n }\n }\n\n return [results, exceptions];\n}\n\nfunction isError(exp) {\n return exp != null && !Recoil_isPromise(exp);\n}\n\nfunction unwrapDependencies(dependencies) {\n return Array.isArray(dependencies) ? dependencies : Object.getOwnPropertyNames(dependencies).map(key => dependencies[key]);\n}\n\nfunction wrapResults(dependencies,\n/* $FlowFixMe[missing-local-annot] The type annotation(s) required by Flow's\n * LTI update could not be added via codemod */\nresults) {\n return Array.isArray(dependencies) ? results : // Object.getOwnPropertyNames() has consistent key ordering with ES6\n Object.getOwnPropertyNames(dependencies).reduce((out, key, idx) => ({ ...out,\n [key]: results[idx]\n }), {});\n}\n\nfunction wrapLoadables(dependencies, results, exceptions) {\n const output = exceptions.map((exception, idx) => exception == null ? loadableWithValue$4(results[idx]) : Recoil_isPromise(exception) ? loadableWithPromise$3(exception) : loadableWithError$3(exception));\n return wrapResults(dependencies, output);\n}\n\nfunction combineAsyncResultsWithSyncResults(syncResults, asyncResults) {\n return asyncResults.map((result, idx) =>\n /**\n * it's important we use === undefined as opposed to == null, because the\n * resolved value of the async promise could be `null`, in which case we\n * don't want to use syncResults[idx], which would be undefined. If async\n * promise resolves to `undefined`, that's ok because `syncResults[idx]`\n * will also be `undefined`. That's a little hacky, but it works.\n */\n result === undefined ? syncResults[idx] : result);\n} // Selector that requests all dependencies in parallel and immediately returns\n// current results without waiting.\n\n\nconst waitForNone = Recoil_selectorFamily({\n key: '__waitForNone',\n get: dependencies => ({\n get\n }) => {\n // Issue requests for all dependencies in parallel.\n const deps = unwrapDependencies(dependencies);\n const [results, exceptions] = concurrentRequests(get, deps); // Always return the current status of the results; never block.\n\n return wrapLoadables(dependencies, results, exceptions);\n },\n dangerouslyAllowMutability: true\n}); // Selector that requests all dependencies in parallel and waits for at least\n// one to be available before returning results. It will only error if all\n// dependencies have errors.\n\nconst waitForAny = Recoil_selectorFamily({\n key: '__waitForAny',\n get: dependencies => ({\n get\n }) => {\n // Issue requests for all dependencies in parallel.\n // Exceptions can either be Promises of pending results or real errors\n const deps = unwrapDependencies(dependencies);\n const [results, exceptions] = concurrentRequests(get, deps); // If any results are available, value or error, return the current status\n\n if (exceptions.some(exp => !Recoil_isPromise(exp))) {\n return wrapLoadables(dependencies, results, exceptions);\n } // Otherwise, return a promise that will resolve when the next result is\n // available, whichever one happens to be next. But, if all pending\n // dependencies end up with errors, then reject the promise.\n\n\n return new Promise(resolve => {\n for (const [i, exp] of exceptions.entries()) {\n if (Recoil_isPromise(exp)) {\n exp.then(result => {\n results[i] = result;\n exceptions[i] = undefined;\n resolve(wrapLoadables(dependencies, results, exceptions));\n }).catch(error => {\n exceptions[i] = error;\n resolve(wrapLoadables(dependencies, results, exceptions));\n });\n }\n }\n });\n },\n dangerouslyAllowMutability: true\n}); // Selector that requests all dependencies in parallel and waits for all to be\n// available before returning a value. It will error if any dependencies error.\n\nconst waitForAll = Recoil_selectorFamily({\n key: '__waitForAll',\n get: dependencies => ({\n get\n }) => {\n // Issue requests for all dependencies in parallel.\n // Exceptions can either be Promises of pending results or real errors\n const deps = unwrapDependencies(dependencies);\n const [results, exceptions] = concurrentRequests(get, deps); // If all results are available, return the results\n\n if (exceptions.every(exp => exp == null)) {\n return wrapResults(dependencies, results);\n } // If we have any errors, throw the first error\n\n\n const error = exceptions.find(isError);\n\n if (error != null) {\n throw error;\n } // Otherwise, return a promise that will resolve when all results are available\n\n\n return Promise.all(exceptions).then(exceptionResults => wrapResults(dependencies, combineAsyncResultsWithSyncResults(results, exceptionResults)));\n },\n dangerouslyAllowMutability: true\n});\nconst waitForAllSettled = Recoil_selectorFamily({\n key: '__waitForAllSettled',\n get: dependencies => ({\n get\n }) => {\n // Issue requests for all dependencies in parallel.\n // Exceptions can either be Promises of pending results or real errors\n const deps = unwrapDependencies(dependencies);\n const [results, exceptions] = concurrentRequests(get, deps); // If all results are available, return the results\n\n if (exceptions.every(exp => !Recoil_isPromise(exp))) {\n return wrapLoadables(dependencies, results, exceptions);\n } // Wait for all results to settle\n\n\n return Promise.all(exceptions.map((exp, i) => Recoil_isPromise(exp) ? exp.then(result => {\n results[i] = result;\n exceptions[i] = undefined;\n }).catch(error => {\n results[i] = undefined;\n exceptions[i] = error;\n }) : null)) // Then wrap them as loadables\n .then(() => wrapLoadables(dependencies, results, exceptions));\n },\n dangerouslyAllowMutability: true\n});\nconst noWait = Recoil_selectorFamily({\n key: '__noWait',\n get: dependency => ({\n get\n }) => {\n try {\n return Recoil_selector.value(loadableWithValue$4(get(dependency)));\n } catch (exception) {\n return Recoil_selector.value(Recoil_isPromise(exception) ? loadableWithPromise$3(exception) : loadableWithError$3(exception));\n }\n },\n dangerouslyAllowMutability: true\n});\nvar Recoil_WaitFor = {\n waitForNone,\n waitForAny,\n waitForAll,\n waitForAllSettled,\n noWait\n};\n\nconst {\n RecoilLoadable\n} = Recoil_Loadable$1;\n\nconst {\n DefaultValue: DefaultValue$3\n} = Recoil_Node;\n\nconst {\n RecoilRoot: RecoilRoot$2,\n useRecoilStoreID: useRecoilStoreID$1\n} = Recoil_RecoilRoot;\n\nconst {\n isRecoilValue: isRecoilValue$5\n} = Recoil_RecoilValue$1;\n\nconst {\n retentionZone: retentionZone$1\n} = Recoil_RetentionZone;\n\nconst {\n freshSnapshot: freshSnapshot$2\n} = Recoil_Snapshot$1;\n\nconst {\n useRecoilState: useRecoilState$1,\n useRecoilState_TRANSITION_SUPPORT_UNSTABLE: useRecoilState_TRANSITION_SUPPORT_UNSTABLE$1,\n useRecoilStateLoadable: useRecoilStateLoadable$1,\n useRecoilValue: useRecoilValue$1,\n useRecoilValue_TRANSITION_SUPPORT_UNSTABLE: useRecoilValue_TRANSITION_SUPPORT_UNSTABLE$1,\n useRecoilValueLoadable: useRecoilValueLoadable$1,\n useRecoilValueLoadable_TRANSITION_SUPPORT_UNSTABLE: useRecoilValueLoadable_TRANSITION_SUPPORT_UNSTABLE$1,\n useResetRecoilState: useResetRecoilState$1,\n useSetRecoilState: useSetRecoilState$1\n} = Recoil_Hooks;\n\nconst {\n useGotoRecoilSnapshot: useGotoRecoilSnapshot$1,\n useRecoilSnapshot: useRecoilSnapshot$1,\n useRecoilTransactionObserver: useRecoilTransactionObserver$1\n} = Recoil_SnapshotHooks;\n\n\n\n\n\nconst {\n useRecoilCallback: useRecoilCallback$1\n} = Recoil_useRecoilCallback;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst {\n noWait: noWait$1,\n waitForAll: waitForAll$1,\n waitForAllSettled: waitForAllSettled$1,\n waitForAny: waitForAny$1,\n waitForNone: waitForNone$1\n} = Recoil_WaitFor;\n\n\n\nvar Recoil_index = {\n // Types\n DefaultValue: DefaultValue$3,\n isRecoilValue: isRecoilValue$5,\n RecoilLoadable,\n // Global Recoil environment settiongs\n RecoilEnv: Recoil_RecoilEnv,\n // Recoil Root\n RecoilRoot: RecoilRoot$2,\n useRecoilStoreID: useRecoilStoreID$1,\n useRecoilBridgeAcrossReactRoots_UNSTABLE: Recoil_useRecoilBridgeAcrossReactRoots,\n // Atoms/Selectors\n atom: Recoil_atom,\n selector: Recoil_selector,\n // Convenience Atoms/Selectors\n atomFamily: Recoil_atomFamily,\n selectorFamily: Recoil_selectorFamily,\n constSelector: Recoil_constSelector,\n errorSelector: Recoil_errorSelector,\n readOnlySelector: Recoil_readOnlySelector,\n // Concurrency Helpers for Atoms/Selectors\n noWait: noWait$1,\n waitForNone: waitForNone$1,\n waitForAny: waitForAny$1,\n waitForAll: waitForAll$1,\n waitForAllSettled: waitForAllSettled$1,\n // Hooks for Atoms/Selectors\n useRecoilValue: useRecoilValue$1,\n useRecoilValueLoadable: useRecoilValueLoadable$1,\n useRecoilState: useRecoilState$1,\n useRecoilStateLoadable: useRecoilStateLoadable$1,\n useSetRecoilState: useSetRecoilState$1,\n useResetRecoilState: useResetRecoilState$1,\n useGetRecoilValueInfo_UNSTABLE: Recoil_useGetRecoilValueInfo,\n useRecoilRefresher_UNSTABLE: Recoil_useRecoilRefresher,\n useRecoilValueLoadable_TRANSITION_SUPPORT_UNSTABLE: useRecoilValueLoadable_TRANSITION_SUPPORT_UNSTABLE$1,\n useRecoilValue_TRANSITION_SUPPORT_UNSTABLE: useRecoilValue_TRANSITION_SUPPORT_UNSTABLE$1,\n useRecoilState_TRANSITION_SUPPORT_UNSTABLE: useRecoilState_TRANSITION_SUPPORT_UNSTABLE$1,\n // Hooks for complex operations\n useRecoilCallback: useRecoilCallback$1,\n useRecoilTransaction_UNSTABLE: Recoil_useRecoilTransaction,\n // Snapshots\n useGotoRecoilSnapshot: useGotoRecoilSnapshot$1,\n useRecoilSnapshot: useRecoilSnapshot$1,\n useRecoilTransactionObserver_UNSTABLE: useRecoilTransactionObserver$1,\n snapshot_UNSTABLE: freshSnapshot$2,\n // Memory Management\n useRetain: Recoil_useRetain,\n retentionZone: retentionZone$1\n};\nvar Recoil_index_1 = Recoil_index.DefaultValue;\nvar Recoil_index_2 = Recoil_index.isRecoilValue;\nvar Recoil_index_3 = Recoil_index.RecoilLoadable;\nvar Recoil_index_4 = Recoil_index.RecoilEnv;\nvar Recoil_index_5 = Recoil_index.RecoilRoot;\nvar Recoil_index_6 = Recoil_index.useRecoilStoreID;\nvar Recoil_index_7 = Recoil_index.useRecoilBridgeAcrossReactRoots_UNSTABLE;\nvar Recoil_index_8 = Recoil_index.atom;\nvar Recoil_index_9 = Recoil_index.selector;\nvar Recoil_index_10 = Recoil_index.atomFamily;\nvar Recoil_index_11 = Recoil_index.selectorFamily;\nvar Recoil_index_12 = Recoil_index.constSelector;\nvar Recoil_index_13 = Recoil_index.errorSelector;\nvar Recoil_index_14 = Recoil_index.readOnlySelector;\nvar Recoil_index_15 = Recoil_index.noWait;\nvar Recoil_index_16 = Recoil_index.waitForNone;\nvar Recoil_index_17 = Recoil_index.waitForAny;\nvar Recoil_index_18 = Recoil_index.waitForAll;\nvar Recoil_index_19 = Recoil_index.waitForAllSettled;\nvar Recoil_index_20 = Recoil_index.useRecoilValue;\nvar Recoil_index_21 = Recoil_index.useRecoilValueLoadable;\nvar Recoil_index_22 = Recoil_index.useRecoilState;\nvar Recoil_index_23 = Recoil_index.useRecoilStateLoadable;\nvar Recoil_index_24 = Recoil_index.useSetRecoilState;\nvar Recoil_index_25 = Recoil_index.useResetRecoilState;\nvar Recoil_index_26 = Recoil_index.useGetRecoilValueInfo_UNSTABLE;\nvar Recoil_index_27 = Recoil_index.useRecoilRefresher_UNSTABLE;\nvar Recoil_index_28 = Recoil_index.useRecoilValueLoadable_TRANSITION_SUPPORT_UNSTABLE;\nvar Recoil_index_29 = Recoil_index.useRecoilValue_TRANSITION_SUPPORT_UNSTABLE;\nvar Recoil_index_30 = Recoil_index.useRecoilState_TRANSITION_SUPPORT_UNSTABLE;\nvar Recoil_index_31 = Recoil_index.useRecoilCallback;\nvar Recoil_index_32 = Recoil_index.useRecoilTransaction_UNSTABLE;\nvar Recoil_index_33 = Recoil_index.useGotoRecoilSnapshot;\nvar Recoil_index_34 = Recoil_index.useRecoilSnapshot;\nvar Recoil_index_35 = Recoil_index.useRecoilTransactionObserver_UNSTABLE;\nvar Recoil_index_36 = Recoil_index.snapshot_UNSTABLE;\nvar Recoil_index_37 = Recoil_index.useRetain;\nvar Recoil_index_38 = Recoil_index.retentionZone;\n\nexport default Recoil_index;\nexport { Recoil_index_1 as DefaultValue, Recoil_index_4 as RecoilEnv, Recoil_index_3 as RecoilLoadable, Recoil_index_5 as RecoilRoot, Recoil_index_8 as atom, Recoil_index_10 as atomFamily, Recoil_index_12 as constSelector, Recoil_index_13 as errorSelector, Recoil_index_2 as isRecoilValue, Recoil_index_15 as noWait, Recoil_index_14 as readOnlySelector, Recoil_index_38 as retentionZone, Recoil_index_9 as selector, Recoil_index_11 as selectorFamily, Recoil_index_36 as snapshot_UNSTABLE, Recoil_index_26 as useGetRecoilValueInfo_UNSTABLE, Recoil_index_33 as useGotoRecoilSnapshot, Recoil_index_7 as useRecoilBridgeAcrossReactRoots_UNSTABLE, Recoil_index_31 as useRecoilCallback, Recoil_index_27 as useRecoilRefresher_UNSTABLE, Recoil_index_34 as useRecoilSnapshot, Recoil_index_22 as useRecoilState, Recoil_index_23 as useRecoilStateLoadable, Recoil_index_30 as useRecoilState_TRANSITION_SUPPORT_UNSTABLE, Recoil_index_6 as useRecoilStoreID, Recoil_index_35 as useRecoilTransactionObserver_UNSTABLE, Recoil_index_32 as useRecoilTransaction_UNSTABLE, Recoil_index_20 as useRecoilValue, Recoil_index_21 as useRecoilValueLoadable, Recoil_index_28 as useRecoilValueLoadable_TRANSITION_SUPPORT_UNSTABLE, Recoil_index_29 as useRecoilValue_TRANSITION_SUPPORT_UNSTABLE, Recoil_index_25 as useResetRecoilState, Recoil_index_37 as useRetain, Recoil_index_24 as useSetRecoilState, Recoil_index_18 as waitForAll, Recoil_index_19 as waitForAllSettled, Recoil_index_17 as waitForAny, Recoil_index_16 as waitForNone };\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = throttle;\n","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n","import { DailyEventObject } from '@daily-co/daily-js';\nimport { useCallback, useDebugValue } from 'react';\nimport { useRecoilValue } from 'recoil';\n\nimport { allWaitingParticipantsSelector } from '../DailyParticipants';\nimport { useDaily } from './useDaily';\nimport { useDailyEvent } from './useDailyEvent';\n\ninterface UseWaitingParticipantsArgs {\n onWaitingParticipantAdded?(\n ev: DailyEventObject<'waiting-participant-added'>\n ): void;\n onWaitingParticipantUpdated?(\n ev: DailyEventObject<'waiting-participant-updated'>\n ): void;\n onWaitingParticipantRemoved?(\n ev: DailyEventObject<'waiting-participant-removed'>\n ): void;\n}\n\n/**\n * Hook to access and manage waiting participants.\n */\nexport const useWaitingParticipants = ({\n onWaitingParticipantAdded,\n onWaitingParticipantRemoved,\n onWaitingParticipantUpdated,\n}: UseWaitingParticipantsArgs = {}) => {\n const daily = useDaily();\n\n const waitingParticipants = useRecoilValue(allWaitingParticipantsSelector);\n\n useDailyEvent(\n 'waiting-participant-added',\n useCallback(\n (ev) => {\n onWaitingParticipantAdded?.(ev);\n },\n [onWaitingParticipantAdded]\n )\n );\n useDailyEvent(\n 'waiting-participant-removed',\n useCallback(\n (ev) => {\n onWaitingParticipantRemoved?.(ev);\n },\n [onWaitingParticipantRemoved]\n )\n );\n useDailyEvent(\n 'waiting-participant-updated',\n useCallback(\n (ev) => {\n onWaitingParticipantUpdated?.(ev);\n },\n [onWaitingParticipantUpdated]\n )\n );\n\n const updateWaitingParticipantAccess = useCallback(\n (id: '*' | string, grantRequestedAccess: boolean) => {\n if (id === '*') {\n daily?.updateWaitingParticipants({\n '*': {\n grantRequestedAccess,\n },\n });\n return;\n }\n daily?.updateWaitingParticipant(id, {\n grantRequestedAccess,\n });\n },\n [daily]\n );\n\n const grantAccess = useCallback(\n (id: '*' | string) => {\n updateWaitingParticipantAccess(id, true);\n },\n [updateWaitingParticipantAccess]\n );\n\n const denyAccess = useCallback(\n (id: '*' | string) => {\n updateWaitingParticipantAccess(id, false);\n },\n [updateWaitingParticipantAccess]\n );\n\n const result = {\n waitingParticipants,\n grantAccess,\n denyAccess,\n };\n\n useDebugValue(result);\n\n return result;\n};\n","import { DailyCall } from '@daily-co/daily-js';\nimport { createContext } from 'react';\n\nexport const DailyContext = createContext(null);\n","import { useContext, useDebugValue } from 'react';\n\nimport { DailyContext } from '../DailyContext';\n\n/**\n * Returns callObject instance passed to or created by closest .\n */\nexport const useDaily = () => {\n const daily = useContext(DailyContext);\n useDebugValue(daily);\n return daily;\n};\n","import { DailyEvent } from '@daily-co/daily-js';\nimport { createContext } from 'react';\n\ninterface EventContextValue {\n on(ev: DailyEvent, callback: Function, key: number): void;\n off(ev: DailyEvent, key: number): void;\n}\n\nexport const DailyEventContext = createContext({\n on: () => {},\n off: () => {},\n});\n","import { DailyEvent, DailyEventObject } from '@daily-co/daily-js';\nimport {\n useContext,\n useDebugValue,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport { DailyEventContext } from '../DailyEventContext';\n\ntype EventCallback = (event: DailyEventObject) => void;\n\nlet uniqueCounter = 0;\nexport const getUnique = () => uniqueCounter++;\n\n/**\n * Sets up a daily event listener using [on](https://docs.daily.co/reference/daily-js/instance-methods/on) method.\n * When this hook is unmounted the event listener is unregistered using [off](https://docs.daily.co/reference/daily-js/instance-methods/off).\n *\n * Warning: callback has to be a memoized reference (e.g. via [useCallback](https://reactjs.org/docs/hooks-reference.html#usecallback)).\n * Otherwise a console error might be thrown indicating a re-render loop issue.\n *\n * @param ev The DailyEvent to register.\n * @param callback A memoized callback reference to run when the event is emitted.\n */\nexport const useDailyEvent = (\n ev: T,\n callback: EventCallback\n) => {\n const { off, on } = useContext(DailyEventContext);\n const [isBlocked, setIsBlocked] = useState(false);\n const reassignCount = useRef(0);\n\n const eventId = useMemo(() => getUnique(), []);\n\n useEffect(() => {\n if (!ev || isBlocked) return;\n /**\n * Check if callback has been reassigned often enough without hitting the 50ms timeout.\n */\n if (reassignCount.current > 100000) {\n console.error(\n `useDailyEvent called with potentially non-memoized event callback or due to too many re-renders.\n Memoize using useCallback to avoid re-render loop or reduce the amount of state transitions the callback depends on.\n Passed callback for '${ev}' event is NOT registered.`,\n callback\n );\n setIsBlocked(true);\n return;\n }\n reassignCount.current++;\n const timeout = setTimeout(() => {\n reassignCount.current = 0;\n }, 50);\n on(ev, callback, eventId);\n return () => {\n clearTimeout(timeout);\n off(ev, eventId);\n };\n }, [callback, ev, eventId, isBlocked, off, on]);\n\n useDebugValue({\n event: ev,\n eventId,\n isBlocked,\n callback,\n });\n};\n","export const RECOIL_PREFIX = 'daily-react-';\n","import { useDebugValue } from 'react';\nimport { atomFamily, selectorFamily, useRecoilValue } from 'recoil';\n\nimport { ExtendedDailyParticipant } from '../DailyParticipants';\nimport { RECOIL_PREFIX } from '../lib/constants';\nimport type { NumericKeys } from '../types/NumericKeys';\nimport type { Paths } from '../types/paths';\nimport type { PathValue } from '../types/pathValue';\n\ntype PropertyType = {\n id: string;\n property: Paths;\n};\n\ntype PropertiesType = {\n id: string;\n properties: Paths[];\n};\n\n/**\n * Stores all property paths for a given participant.\n */\nexport const participantPropertyPathsState = atomFamily<\n Paths[],\n string\n>({\n key: RECOIL_PREFIX + 'participant-property-paths',\n default: [],\n});\n\n/**\n * Stores resolved values for each participant and property path.\n */\nexport const participantPropertyState = atomFamily({\n key: RECOIL_PREFIX + 'participant-property',\n default: null,\n dangerouslyAllowMutability: true, // daily-js mutates track props (_managedByDaily, etc)\n});\n\n/**\n * Stores resolved values for each participant and property path.\n */\nexport const participantPropertiesState = selectorFamily({\n key: RECOIL_PREFIX + 'participant-properties',\n get:\n ({ id, properties }) =>\n ({ get }) => {\n return properties.map((path) =>\n get(participantPropertyState({ id, property: path }))\n );\n },\n dangerouslyAllowMutability: true, // daily-js mutates track props (_managedByDaily, etc)\n});\n\ntype UseParticipantPropertyReturnType<\n T extends ExtendedDailyParticipant,\n P extends Paths | Paths[]\n> = P extends Paths[]\n ? { [K in keyof P]: K extends NumericKeys ? PathValue : unknown }\n : P extends Paths\n ? PathValue\n : never;\n\n/**\n * Returns a participant's property that you subscribe to.\n * @param participantId The participant's session_id.\n * @param propertyPaths the array of participant property that you want to subscribe to.\n */\nexport const useParticipantProperty = <\n T extends ExtendedDailyParticipant = ExtendedDailyParticipant,\n P extends Paths | [Paths, ...Paths[]] =\n | Paths\n | [Paths, ...Paths[]]\n>(\n participantId: string,\n propertyPaths: P\n): UseParticipantPropertyReturnType => {\n const properties = useRecoilValue(\n Array.isArray(propertyPaths)\n ? participantPropertiesState({\n id: participantId,\n properties: propertyPaths as Paths[],\n })\n : participantPropertyState({\n id: participantId,\n property: propertyPaths as Paths,\n })\n );\n\n useDebugValue(\n Array.isArray(propertyPaths)\n ? propertyPaths.reduce(\n (o: Record, path: Paths, i: number) => {\n o[path] = properties[i];\n return o;\n },\n {}\n )\n : {\n [propertyPaths as any]: properties,\n }\n );\n\n return properties;\n};\n","import { DailyEvent, DailyEventObject } from '@daily-co/daily-js';\nimport throttle from 'lodash.throttle';\nimport {\n useCallback,\n useContext,\n useDebugValue,\n useEffect,\n useMemo,\n useRef,\n} from 'react';\n\nimport { DailyEventContext } from '../DailyEventContext';\nimport { getUnique, useDailyEvent } from './useDailyEvent';\n\ntype EnsureArray = T extends DailyEvent ? [T] : T;\n\ntype EventObjectsFor = EnsureArray extends (infer U)[]\n ? U extends DailyEvent\n ? DailyEventObject\n : never\n : never;\n\ntype EventCallback = (\n events: EventObjectsFor[]\n) => void;\n\n/**\n * Sets up a throttled daily event listener using [on](https://docs.daily.co/reference/daily-js/instance-methods/on) method.\n * When this hook is unmounted the event listener is unregistered using [off](https://docs.daily.co/reference/daily-js/instance-methods/off).\n *\n * In comparison to useDailyEvent the callback passed here will be called with an array of event objects.\n *\n * You can pass an array of DailyEvents to register multiple daily events with a single callback handler.\n * The events returned in the callback parameter are guaranteed to be in the same order as they were emitted.\n *\n * @param ev The DailyEvent to register or an array of DailyEvent to register.\n * @param callback A memoized callback reference to run when throttled events are emitted.\n * @param throttleTimeout The minimum waiting time until the callback is called again. Default: 100\n */\nexport const useThrottledDailyEvent = (\n ev: T | T[],\n callback: EventCallback>,\n throttleTimeout = 500\n) => {\n const { off, on } = useContext(DailyEventContext);\n const eventId = useMemo(() => {\n if (Array.isArray(ev))\n return ev.reduce>((r, e) => {\n r[e] = getUnique();\n return r;\n }, {});\n return { [ev]: getUnique() };\n }, [ev]);\n\n const throttledEvents = useRef[]>([]);\n\n useDailyEvent(\n 'call-instance-destroyed',\n useCallback(() => {\n throttledEvents.current.length = 0;\n }, [])\n );\n\n const emitEvents = useMemo(\n () =>\n throttle(\n () => {\n if (throttledEvents.current.length === 0) return;\n callback(throttledEvents.current);\n throttledEvents.current.length = 0;\n },\n throttleTimeout,\n {\n trailing: true,\n }\n ),\n [callback, throttleTimeout]\n );\n\n useEffect(() => {\n if (!ev) return;\n const addEvent = (ev: DailyEventObject) => {\n throttledEvents.current.push(ev);\n emitEvents();\n };\n if (Array.isArray(ev)) {\n ev.forEach((e) => on(e, addEvent, eventId[e]));\n } else {\n on(ev, addEvent, eventId[ev]);\n }\n return () => {\n if (Array.isArray(ev)) {\n ev.forEach((e) => off(e, eventId[e]));\n } else {\n off(ev, eventId[ev]);\n }\n };\n }, [emitEvents, ev, eventId, off, on]);\n\n useDebugValue({\n event: ev,\n eventId,\n });\n};\n","/**\n * Compares two variables for deep equality.\n * Gracefully handles equality checks on MediaStreamTracks by comparing their ids.\n */\nexport function customDeepEqual(a: any, b: any): boolean {\n if (a === b) return true;\n\n // Handle special case for MediaStream\n if (a instanceof MediaStream && b instanceof MediaStream) {\n return (\n a.id === b.id &&\n a.active === b.active &&\n a.getTracks().length === b.getTracks().length &&\n a\n .getTracks()\n .every((track, idx) => customDeepEqual(track, b.getTracks()[idx]))\n );\n }\n\n // Handle special case for MediaStreamTrack\n if (a instanceof MediaStreamTrack && b instanceof MediaStreamTrack) {\n return a.id === b.id && a.kind === b.kind && a.readyState === b.readyState;\n }\n\n // Handle special case for Date\n if (a instanceof Date && b instanceof Date) {\n return a.getTime() === b.getTime();\n }\n\n // Handle special case for RegExp\n if (a instanceof RegExp && b instanceof RegExp) {\n return a.source === b.source && a.flags === b.flags;\n }\n\n // Handle special case for Set\n if (a instanceof Set && b instanceof Set) {\n if (a.size !== b.size) {\n return false;\n }\n\n for (const value of a.values()) {\n if (!b.has(value)) {\n return false;\n }\n }\n\n return true;\n }\n\n // Handle special case for Map\n if (a instanceof Map && b instanceof Map) {\n if (a.size !== b.size) {\n return false;\n }\n for (const [key, value] of a.entries()) {\n if (!b.has(key)) {\n return false;\n }\n if (!customDeepEqual(value, b.get(key))) {\n return false;\n }\n }\n\n return true;\n }\n\n // If a or b are not objects or null, they can't be deeply equal\n if (\n typeof a !== 'object' ||\n a === null ||\n typeof b !== 'object' ||\n b === null\n ) {\n return false;\n }\n\n // Get the keys of a and b. This handles both arrays and objects, since arrays are technically objects.\n let keysA = Object.keys(a);\n let keysB = Object.keys(b);\n\n // If the number of keys are different, the objects are not equal\n if (keysA.length !== keysB.length) return false;\n\n for (let key of keysA) {\n if (\n // If key exists in a, but not in b -> not equal\n !(key in b) ||\n // Both keys exist in both object -> run nested equality check\n !customDeepEqual(a[key], b[key])\n )\n return false;\n }\n\n // All keys and values match -> the objects are deeply equal\n return true;\n}\n","import {\n ReadOnlySelectorFamilyOptions,\n ReadOnlySelectorOptions,\n RecoilValueReadOnly,\n selector,\n selectorFamily,\n SerializableParam,\n} from 'recoil';\n\ninterface EqualSelectorOptions\n extends Pick, 'key' | 'get'> {\n equals: (a: T, b: T) => boolean;\n}\n\n/**\n * Same API as [selector](https://recoiljs.org/docs/api-reference/core/selector), but with an additional `equals` key.\n * Allows to run custom equality checks before returning a new calculated value.\n * Use this, when returning non-primitive types from state.\n * Resource: https://github.com/facebookexperimental/Recoil/issues/1416#issuecomment-1044953271\n */\nexport function equalSelector(\n options: EqualSelectorOptions\n): RecoilValueReadOnly {\n const inner = selector({\n key: `${options.key}_inner`,\n get: options.get,\n });\n\n let prior: T | undefined;\n\n return selector({\n key: options.key,\n get: ({ get }) => {\n const latest = get(inner);\n if (prior != null && options.equals(latest, prior)) {\n return prior;\n }\n prior = latest;\n return latest as T;\n },\n });\n}\n\ninterface EqualSelectorFamilyOptions\n extends Pick, 'key' | 'get'> {\n equals: (a: T, b: T) => boolean;\n}\n\n/**\n * Same API as [selectorFamily](https://recoiljs.org/docs/api-reference/utils/selectorFamily/), but with an additional `equals` key.\n * Allows to run custom equality checks before returning a new calculated value.\n * Use this, when returning non-primitive types from state.\n * Resource: https://github.com/facebookexperimental/Recoil/issues/1416#issuecomment-1168603409\n */\nexport function equalSelectorFamily(\n options: EqualSelectorFamilyOptions\n) {\n const inner = selectorFamily({\n key: `${options.key}_inner`,\n get: options.get,\n });\n\n const priorValues: Map = new Map();\n\n return selectorFamily({\n ...options,\n key: options.key,\n get:\n (param: P) =>\n ({ get }) => {\n const latest = get(inner(param));\n const prior = priorValues.get(param);\n if (prior != null && options.equals(latest, prior)) {\n return prior;\n }\n priorValues.set(param, latest);\n return latest;\n },\n });\n}\n","import { ExtendedDailyParticipant } from '../DailyParticipants';\nimport { Paths } from '../types/paths';\n\n/**\n * Returns all property paths for an object.\n */\nconst getPaths = (\n o: Record,\n currentPath = '',\n visited = new Set()\n): string[] => {\n if (typeof o !== 'object' || o === null || visited.has(o)) {\n return [currentPath];\n }\n\n visited.add(o);\n\n const paths = [];\n for (const key in o) {\n if (Object.prototype.hasOwnProperty.call(o, key)) {\n const newPath = currentPath ? `${currentPath}.${key}` : key;\n paths.push(newPath, ...getPaths(o[key], newPath, visited));\n }\n }\n\n visited.delete(o);\n\n return paths;\n};\n\n/**\n * Returns all property paths for a given participant object.\n */\nexport const getParticipantPaths = (p: ExtendedDailyParticipant) => {\n return getPaths(p) as Paths[];\n};\n","import { ExtendedDailyParticipant } from '../DailyParticipants';\nimport type { NumericKeys } from '../types/NumericKeys';\nimport type { Paths } from '../types/paths';\nimport type { PathValue } from '../types/pathValue';\n\nconst resolvePath = >(\n participant: T | null,\n path: P\n): PathValue => {\n return String(path)\n .split('.')\n .filter((key) => key.length)\n .reduce((p: any, key) => p && p[key], participant);\n};\n\ntype ResolveParticipantPathsReturnType<\n T extends ExtendedDailyParticipant,\n P extends Paths[]\n> = { [K in keyof P]: K extends NumericKeys ? PathValue : never };\n\nexport const resolveParticipantPaths = <\n T extends ExtendedDailyParticipant,\n P extends Paths[]\n>(\n participant: T | null,\n paths: P\n): ResolveParticipantPathsReturnType => {\n return paths.map((path) =>\n resolvePath(participant, path)\n ) as ResolveParticipantPathsReturnType;\n};\n","import {\n DailyParticipant,\n DailyParticipantsObject,\n DailyParticipantTracks,\n DailyWaitingParticipant,\n} from '@daily-co/daily-js';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { atom, atomFamily, selector, useRecoilCallback } from 'recoil';\n\nimport { useDaily } from './hooks/useDaily';\nimport { useDailyEvent } from './hooks/useDailyEvent';\nimport {\n participantPropertyPathsState,\n participantPropertyState,\n} from './hooks/useParticipantProperty';\nimport { useThrottledDailyEvent } from './hooks/useThrottledDailyEvent';\nimport { RECOIL_PREFIX } from './lib/constants';\nimport { customDeepEqual } from './lib/customDeepEqual';\nimport { equalSelector } from './lib/recoil-custom';\nimport { getParticipantPaths } from './utils/getParticipantPaths';\nimport { resolveParticipantPaths } from './utils/resolveParticipantPaths';\n\n/**\n * Extends DailyParticipant with convenient additional properties.\n * The `tracks` object needs to omit custom track keys, otherwise\n * autocomplete for `tracks` in useParticipantProperty doesn't work.\n */\nexport interface ExtendedDailyParticipant\n extends Omit {\n last_active?: Date;\n tracks: DailyParticipantTracks;\n}\n\n/**\n * Stores the most recent peerId as reported from [active-speaker-change](https://docs.daily.co/reference/daily-js/events/meeting-events#active-speaker-change) event.\n */\nexport const activeIdState = atom({\n key: RECOIL_PREFIX + 'active-id',\n default: null,\n});\n\nexport const localIdState = atom({\n key: RECOIL_PREFIX + 'local-id',\n default: '',\n});\n\nexport const localJoinDateState = atom({\n key: RECOIL_PREFIX + 'local-joined-date',\n default: null,\n});\n\nexport const participantIdsState = atom({\n key: RECOIL_PREFIX + 'participant-ids',\n default: [],\n});\n\nexport const participantState = atomFamily<\n ExtendedDailyParticipant | null,\n string\n>({\n key: RECOIL_PREFIX + 'participant-state',\n default: null,\n dangerouslyAllowMutability: true, // daily-js mutates track props (_managedByDaily, etc)\n});\n\nexport const participantsState = selector({\n key: RECOIL_PREFIX + 'participants',\n get: ({ get }) => {\n const ids = get(participantIdsState);\n const participants = ids\n .map((id) => get(participantState(id)))\n .filter(Boolean) as ExtendedDailyParticipant[];\n return participants;\n },\n dangerouslyAllowMutability: true, // daily-js mutates track props (_managedByDaily, etc)\n});\n\n/**\n * Holds all participants in the waiting room.\n */\nexport const waitingParticipantsState = atom({\n key: RECOIL_PREFIX + 'waiting-participants',\n default: [],\n});\n\n/**\n * Holds each invidiual waiting participant's information.\n */\nexport const waitingParticipantState = atomFamily<\n DailyWaitingParticipant,\n string\n>({\n key: RECOIL_PREFIX + 'waiting-participant',\n default: {\n awaitingAccess: {\n level: 'full',\n },\n id: '',\n name: '',\n },\n});\n\n/**\n * Returns all waiting participant objects in an array.\n */\nexport const allWaitingParticipantsSelector = equalSelector({\n key: RECOIL_PREFIX + 'waitingParticipantsSelector',\n equals: customDeepEqual,\n get: ({ get }) => {\n const ids = get(waitingParticipantsState);\n return ids.map((id) => get(waitingParticipantState(id)));\n },\n});\n\nexport const DailyParticipants: React.FC> = ({\n children,\n}) => {\n const daily = useDaily();\n const [initialized, setInitialized] = useState(false);\n\n const initParticipants = useRecoilCallback(\n ({ transact_UNSTABLE }) =>\n (participants: DailyParticipantsObject) => {\n transact_UNSTABLE(({ set }) => {\n set(localIdState, participants.local.session_id);\n const participantsArray = Object.values(participants);\n const ids = participantsArray.map((p) => p.session_id);\n set(participantIdsState, ids);\n participantsArray.forEach((p) => {\n set(participantState(p.session_id), p);\n const paths = getParticipantPaths(p);\n // Set list of property paths\n set(participantPropertyPathsState(p.session_id), paths);\n // Set all property path values\n paths.forEach((property) => {\n const [value] = resolveParticipantPaths(\n p as ExtendedDailyParticipant,\n [property]\n );\n set(\n participantPropertyState({\n id: p.session_id,\n property,\n }),\n value\n );\n });\n });\n setInitialized(true);\n });\n },\n []\n );\n /**\n * Initialize participants state based on daily.participants().\n * Retries every 100ms to initialize the state, until daily is ready.\n */\n useEffect(() => {\n if (!daily || initialized) return;\n const interval = setInterval(() => {\n const participants = daily.participants();\n if (!('local' in participants)) return;\n initParticipants(participants);\n clearInterval(interval);\n }, 100);\n return () => {\n clearInterval(interval);\n };\n }, [daily, initialized, initParticipants]);\n const handleInitEvent = useCallback(() => {\n if (!daily) return;\n const participants = daily?.participants();\n if (!participants.local) return;\n initParticipants(participants);\n }, [daily, initParticipants]);\n useDailyEvent('started-camera', handleInitEvent);\n useDailyEvent('access-state-updated', handleInitEvent);\n useDailyEvent(\n 'joining-meeting',\n useRecoilCallback(\n ({ set }) =>\n () => {\n set(localJoinDateState, new Date());\n handleInitEvent();\n },\n [handleInitEvent]\n )\n );\n useDailyEvent(\n 'joined-meeting',\n useCallback(\n (ev) => {\n initParticipants(ev.participants);\n },\n [initParticipants]\n )\n );\n\n useThrottledDailyEvent(\n [\n 'active-speaker-change',\n 'call-instance-destroyed',\n 'left-meeting',\n 'participant-joined',\n 'participant-updated',\n 'participant-left',\n ],\n useRecoilCallback(\n ({ transact_UNSTABLE }) =>\n (evts) => {\n transact_UNSTABLE(({ get, reset, set }) => {\n evts.forEach((ev) => {\n switch (ev.action) {\n case 'active-speaker-change': {\n set(activeIdState, ev.activeSpeaker.peerId);\n set(participantState(ev.activeSpeaker.peerId), (prev) => {\n if (!prev) return null;\n return {\n ...prev,\n last_active: new Date(),\n };\n });\n break;\n }\n case 'participant-joined': {\n // Update list of ids\n set(participantIdsState, (prevIds) =>\n prevIds.includes(ev.participant.session_id)\n ? prevIds\n : [...prevIds, ev.participant.session_id]\n );\n // Store entire object\n set(\n participantState(ev.participant.session_id),\n ev.participant\n );\n\n const paths = getParticipantPaths(ev.participant);\n // Set list of property paths\n set(\n participantPropertyPathsState(ev.participant.session_id),\n paths\n );\n // Set all property path values\n paths.forEach((property) => {\n const [value] = resolveParticipantPaths(\n ev.participant as ExtendedDailyParticipant,\n [property]\n );\n set(\n participantPropertyState({\n id: ev.participant.session_id,\n property,\n }),\n value\n );\n });\n break;\n }\n case 'participant-updated': {\n // Update entire object\n set(participantState(ev.participant.session_id), (prev) => ({\n ...prev,\n ...ev.participant,\n }));\n // Update local session_id\n if (ev.participant.local) {\n set(localIdState, (prevId) =>\n prevId !== ev.participant.session_id\n ? ev.participant.session_id\n : prevId\n );\n }\n\n const paths = getParticipantPaths(ev.participant);\n const oldPaths = get(\n participantPropertyPathsState(ev.participant.session_id)\n );\n // Set list of property paths\n set(\n participantPropertyPathsState(ev.participant.session_id),\n (prev) => (customDeepEqual(prev, paths) ? prev : paths)\n );\n // Reset old path values\n oldPaths\n .filter((p) => !paths.includes(p))\n .forEach((property) => {\n reset(\n participantPropertyState({\n id: ev.participant.session_id,\n property,\n })\n );\n });\n // Set all property path values\n paths.forEach((property) => {\n const [value] = resolveParticipantPaths(\n ev.participant as ExtendedDailyParticipant,\n [property]\n );\n set(\n participantPropertyState({\n id: ev.participant.session_id,\n property,\n }),\n (prev) => (customDeepEqual(prev, value) ? prev : value)\n );\n });\n break;\n }\n case 'participant-left': {\n // Remove from list of ids\n set(participantIdsState, (prevIds) =>\n prevIds.includes(ev.participant.session_id)\n ? [\n ...prevIds.filter(\n (id) => id !== ev.participant.session_id\n ),\n ]\n : prevIds\n );\n // Remove entire object\n reset(participantState(ev.participant.session_id));\n\n const oldPaths = get(\n participantPropertyPathsState(ev.participant.session_id)\n );\n // Remove property path values\n oldPaths.forEach((property) => {\n reset(\n participantPropertyState({\n id: ev.participant.session_id,\n property,\n })\n );\n });\n // Remove all property paths\n reset(\n participantPropertyPathsState(ev.participant.session_id)\n );\n break;\n }\n /**\n * Reset stored participants, when meeting has ended.\n */\n case 'call-instance-destroyed':\n case 'left-meeting': {\n reset(localIdState);\n reset(activeIdState);\n const ids = get(participantIdsState);\n if (Array.isArray(ids))\n ids.forEach((id) => reset(participantState(id)));\n reset(participantIdsState);\n break;\n }\n }\n });\n });\n },\n []\n )\n );\n\n useThrottledDailyEvent(\n [\n 'waiting-participant-added',\n 'waiting-participant-updated',\n 'waiting-participant-removed',\n ],\n useRecoilCallback(\n ({ transact_UNSTABLE }) =>\n (evts) => {\n transact_UNSTABLE(({ reset, set }) => {\n evts.forEach((ev) => {\n switch (ev.action) {\n case 'waiting-participant-added':\n set(waitingParticipantsState, (wps) => {\n if (!wps.includes(ev.participant.id)) {\n return [...wps, ev.participant.id];\n }\n return wps;\n });\n set(\n waitingParticipantState(ev.participant.id),\n ev.participant\n );\n break;\n case 'waiting-participant-updated':\n set(\n waitingParticipantState(ev.participant.id),\n ev.participant\n );\n break;\n case 'waiting-participant-removed':\n set(waitingParticipantsState, (wps) =>\n wps.filter((wp) => wp !== ev.participant.id)\n );\n reset(waitingParticipantState(ev.participant.id));\n break;\n }\n });\n });\n },\n []\n )\n );\n\n return <>{children};\n};\n","import { useDebugValue } from 'react';\nimport { useRecoilValue } from 'recoil';\n\nimport { localIdState } from '../DailyParticipants';\n\n/**\n * Returns the local participant's session_id or empty string '',\n * if the local participant doesn't exist.\n */\nexport const useLocalSessionId = () => {\n const localId = useRecoilValue(localIdState);\n useDebugValue(localId);\n return localId;\n};\n","import { useDebugValue, useEffect, useState } from 'react';\nimport { useRecoilValue } from 'recoil';\n\nimport { activeIdState } from '../DailyParticipants';\nimport { useLocalSessionId } from './useLocalSessionId';\n\ninterface UseActiveSpeakerIdArgs {\n /**\n * Anytime the active-speaker-change event emits a new id, this callback can be used\n * to determine if the new speaker id should be ignored or not.\n * Return false from the callback to ignore the new speaker id in this hook's instance.\n */\n filter?(id: string | null): boolean;\n /**\n * If set to true, useActiveParticipant will never return the local participant.\n */\n ignoreLocal?: boolean;\n}\n\nconst noopFilter = () => true;\n\n/**\n * Returns the most recent speaker id mentioned in an [active-speaker-change](https://docs.daily.co/reference/daily-js/events/meeting-events#active-speaker-change) event.\n */\nexport const useActiveSpeakerId = ({\n filter = noopFilter,\n ignoreLocal = false,\n}: UseActiveSpeakerIdArgs = {}) => {\n const localSessionId = useLocalSessionId();\n const recentActiveId = useRecoilValue(activeIdState);\n const isIgnoredLocalId = ignoreLocal && recentActiveId === localSessionId;\n const isFilteredOut = !filter?.(recentActiveId);\n const isRecentIdRelevant = !isIgnoredLocalId && !isFilteredOut;\n const [activeId, setActiveId] = useState(\n isRecentIdRelevant ? recentActiveId : null\n );\n\n useEffect(() => {\n if (isIgnoredLocalId || isFilteredOut) return;\n setActiveId(recentActiveId);\n }, [isFilteredOut, isIgnoredLocalId, recentActiveId]);\n\n useDebugValue(activeId);\n\n return activeId;\n};\n","import { DailyTrackState } from '@daily-co/daily-js';\n\nexport const isTrackOff = (trackState: DailyTrackState['state']) =>\n ['blocked', 'off'].includes(trackState);\n","import { DailyEventObject } from '@daily-co/daily-js';\nimport { useCallback, useDebugValue, useEffect, useState } from 'react';\nimport {\n Snapshot,\n useRecoilCallback,\n useRecoilTransactionObserver_UNSTABLE,\n useRecoilValue,\n} from 'recoil';\n\nimport {\n ExtendedDailyParticipant,\n participantIdsState,\n participantState,\n} from '../DailyParticipants';\nimport { RECOIL_PREFIX } from '../lib/constants';\nimport { customDeepEqual } from '../lib/customDeepEqual';\nimport { equalSelectorFamily } from '../lib/recoil-custom';\nimport { isTrackOff } from '../utils/isTrackOff';\nimport {\n participantPropertiesState,\n participantPropertyState,\n} from './useParticipantProperty';\nimport { useThrottledDailyEvent } from './useThrottledDailyEvent';\n\ntype FilterParticipantsFunction = (\n p: ExtendedDailyParticipant,\n index: number,\n arr: ExtendedDailyParticipant[]\n) => boolean;\ntype SerializableFilterParticipants =\n | 'local'\n | 'remote'\n | 'owner'\n | 'record'\n | 'screen';\ntype FilterParticipants =\n | SerializableFilterParticipants\n | FilterParticipantsFunction;\n\ntype SortParticipantsFunction = (\n a: ExtendedDailyParticipant,\n b: ExtendedDailyParticipant\n) => 1 | -1 | 0;\ntype SerializableSortParticipants =\n | 'joined_at'\n | 'session_id'\n | 'user_id'\n | 'user_name';\ntype SortParticipants = SerializableSortParticipants | SortParticipantsFunction;\n\n/**\n * Short-cut state selector for useParticipantIds({ filter: 'local' })\n */\nexport const participantIdsFilteredAndSortedState = equalSelectorFamily<\n string[],\n {\n filter: SerializableFilterParticipants | null;\n sort: SerializableSortParticipants | null;\n }\n>({\n key: RECOIL_PREFIX + 'participant-ids-filtered-sorted',\n equals: customDeepEqual,\n get:\n ({ filter, sort }) =>\n ({ get }) => {\n const ids = get(participantIdsState);\n return ids\n .filter((id) => {\n switch (filter) {\n /**\n * Simple boolean fields first.\n */\n case 'local':\n case 'owner':\n case 'record': {\n return get(participantPropertyState({ id, property: filter }));\n }\n case 'remote': {\n return !get(participantPropertyState({ id, property: 'local' }));\n }\n case 'screen': {\n const [screenAudioState, screenVideoState] = get(\n participantPropertiesState({\n id,\n properties: [\n 'tracks.screenAudio.state',\n 'tracks.screenVideo.state',\n ],\n })\n );\n return (\n !isTrackOff(screenAudioState) || !isTrackOff(screenVideoState)\n );\n }\n default:\n return true;\n }\n })\n .sort((idA, idB) => {\n switch (sort) {\n case 'joined_at':\n case 'session_id':\n case 'user_id':\n case 'user_name': {\n const [aSort] = get(\n participantPropertiesState({ id: idA, properties: [sort] })\n );\n const [bSort] = get(\n participantPropertiesState({ id: idB, properties: [sort] })\n );\n if (aSort !== undefined || bSort !== undefined) {\n if (aSort === undefined) return -1;\n if (bSort === undefined) return 1;\n if (aSort > bSort) return 1;\n if (aSort < bSort) return -1;\n }\n return 0;\n }\n default:\n return 0;\n }\n });\n },\n});\n\ninterface UseParticipantIdsArgs {\n filter?: FilterParticipants;\n onActiveSpeakerChange?(ev: DailyEventObject<'active-speaker-change'>): void;\n onParticipantJoined?(ev: DailyEventObject<'participant-joined'>): void;\n onParticipantLeft?(ev: DailyEventObject<'participant-left'>): void;\n onParticipantUpdated?(ev: DailyEventObject<'participant-updated'>): void;\n sort?: SortParticipants;\n}\n\n/**\n * Returns a list of participant ids (= session_id).\n * The list can optionally be filtered and sorted, using the filter and sort options.\n */\nexport const useParticipantIds = ({\n filter,\n onActiveSpeakerChange,\n onParticipantJoined,\n onParticipantLeft,\n onParticipantUpdated,\n sort,\n}: UseParticipantIdsArgs = {}) => {\n /**\n * For instances of useParticipantIds with string-based filter and sort,\n * we can immediately return the correct ids from Recoil's state.\n */\n const preFilteredSortedIds = useRecoilValue(\n participantIdsFilteredAndSortedState({\n filter: typeof filter === 'string' ? filter : null,\n sort: typeof sort === 'string' ? sort : null,\n })\n );\n\n const shouldUseCustomIds =\n typeof filter === 'function' || typeof sort === 'function';\n\n const getCustomFilteredIds = useCallback(\n (snapshot: Snapshot) => {\n if (\n // Ignore if both filter and sort are not functions.\n typeof filter !== 'function' &&\n typeof sort !== 'function'\n )\n return [];\n\n const participants: ExtendedDailyParticipant[] = preFilteredSortedIds.map(\n (id) =>\n snapshot.getLoadable(participantState(id))\n .contents as ExtendedDailyParticipant\n );\n\n return (\n participants\n // Make sure we don't accidentally try to filter/sort `null` participants\n // This can happen when a participant's id is already present in store\n // but the participant object is not stored, yet.\n .filter(Boolean)\n // Run custom filter, if it's a function. Otherwise don't filter any participants.\n .filter(typeof filter === 'function' ? filter : () => true)\n // Run custom sort, if it's a function. Otherwise don't sort.\n .sort(typeof sort === 'function' ? sort : () => 0)\n // Map back to session_id.\n .map((p) => p.session_id)\n // Filter any potential null/undefined ids.\n // This shouldn't really happen, but better safe than sorry.\n .filter(Boolean)\n );\n },\n [filter, preFilteredSortedIds, sort]\n );\n\n const [customIds, setCustomIds] = useState([]);\n\n useRecoilTransactionObserver_UNSTABLE(({ previousSnapshot, snapshot }) => {\n if (!shouldUseCustomIds) return;\n const newIds = getCustomFilteredIds(snapshot);\n const oldIds = getCustomFilteredIds(previousSnapshot);\n if (customDeepEqual(newIds, oldIds)) return;\n setCustomIds(newIds);\n });\n\n const maybeUpdateCustomIds = useRecoilCallback(\n ({ snapshot }) =>\n () => {\n if (!shouldUseCustomIds) return;\n const newIds = getCustomFilteredIds(snapshot);\n if (customDeepEqual(newIds, customIds)) return;\n setCustomIds(newIds);\n },\n [customIds, getCustomFilteredIds, shouldUseCustomIds]\n );\n\n useEffect(() => {\n maybeUpdateCustomIds();\n }, [maybeUpdateCustomIds]);\n\n useThrottledDailyEvent(\n [\n 'participant-joined',\n 'participant-updated',\n 'active-speaker-change',\n 'participant-left',\n ],\n useCallback(\n (evts) => {\n if (!evts.length) return;\n evts.forEach((ev) => {\n switch (ev.action) {\n case 'participant-joined':\n onParticipantJoined?.(ev);\n break;\n case 'participant-updated':\n onParticipantUpdated?.(ev);\n break;\n case 'active-speaker-change':\n onActiveSpeakerChange?.(ev);\n break;\n case 'participant-left':\n onParticipantLeft?.(ev);\n break;\n }\n });\n maybeUpdateCustomIds();\n },\n [\n maybeUpdateCustomIds,\n onActiveSpeakerChange,\n onParticipantJoined,\n onParticipantLeft,\n onParticipantUpdated,\n ]\n )\n );\n\n const result =\n typeof filter === 'function' || typeof sort === 'function'\n ? customIds\n : preFilteredSortedIds;\n\n useDebugValue(result);\n\n return result;\n};\n","import {\n DailyCall,\n DailyEventObjectNonFatalError,\n DailyTrackState,\n} from '@daily-co/daily-js';\nimport { useCallback, useDebugValue } from 'react';\nimport { useRecoilValue } from 'recoil';\n\nimport { RECOIL_PREFIX } from '../lib/constants';\nimport { customDeepEqual } from '../lib/customDeepEqual';\nimport { equalSelector } from '../lib/recoil-custom';\nimport { Reconstruct } from '../types/Reconstruct';\nimport { useDaily } from './useDaily';\nimport { useDailyEvent } from './useDailyEvent';\nimport { participantIdsFilteredAndSortedState } from './useParticipantIds';\nimport { participantPropertyState } from './useParticipantProperty';\n\nexport interface ScreenShare {\n local: boolean;\n screenAudio: DailyTrackState;\n screenVideo: DailyTrackState;\n screenId: string;\n session_id: string;\n}\n\nconst screenSharesState = equalSelector({\n key: RECOIL_PREFIX + 'screen-shares',\n equals: customDeepEqual,\n get: ({ get }) => {\n const screenIds = get(\n participantIdsFilteredAndSortedState({ filter: 'screen', sort: null })\n );\n return screenIds.map((id) => {\n return {\n local: get(participantPropertyState({ id, property: 'local' })),\n screenAudio: get(\n participantPropertyState({ id, property: 'tracks.screenAudio' })\n ),\n screenVideo: get(\n participantPropertyState({ id, property: 'tracks.screenVideo' })\n ),\n screenId: `${id}-screen`,\n session_id: id,\n };\n });\n },\n});\n\ntype DailyEventObjectScreenShareError = Reconstruct<\n DailyEventObjectNonFatalError,\n 'type',\n 'screen-share-error'\n>;\n\ninterface UseScreenShareArgs {\n onError?(ev: DailyEventObjectScreenShareError): void;\n onLocalScreenShareStarted?(): void;\n onLocalScreenShareStopped?(): void;\n}\n\n/**\n * Allows access to information about shared screens, and methods to start or stop a local screen share.\n */\nexport const useScreenShare = ({\n onError,\n onLocalScreenShareStarted,\n onLocalScreenShareStopped,\n}: UseScreenShareArgs = {}) => {\n const daily = useDaily();\n\n const startScreenShare = useCallback(\n (...args: Parameters) => {\n daily?.startScreenShare(...args);\n },\n [daily]\n );\n\n const stopScreenShare = useCallback(\n (...args: Parameters) => {\n daily?.stopScreenShare(...args);\n },\n [daily]\n );\n\n useDailyEvent(\n 'local-screen-share-started',\n useCallback(\n () => onLocalScreenShareStarted?.(),\n [onLocalScreenShareStarted]\n )\n );\n useDailyEvent(\n 'local-screen-share-stopped',\n useCallback(\n () => onLocalScreenShareStopped?.(),\n [onLocalScreenShareStopped]\n )\n );\n useDailyEvent(\n 'nonfatal-error',\n useCallback(\n (ev) => {\n if (ev.type !== 'screen-share-error') return;\n onError?.(ev as DailyEventObjectScreenShareError);\n },\n [onError]\n )\n );\n\n const screens = useRecoilValue(screenSharesState);\n\n const result = {\n isSharingScreen: screens.some((s) => s.local),\n screens,\n startScreenShare,\n stopScreenShare,\n };\n\n useDebugValue(result);\n\n return result;\n};\n","import { DailyParticipantTracks, DailyTrackState } from '@daily-co/daily-js';\nimport { useDebugValue } from 'react';\n\nimport { isTrackOff } from '../utils/isTrackOff';\nimport { useParticipantProperty } from './useParticipantProperty';\n\ntype MediaType = keyof DailyParticipantTracks;\n\nexport interface MediaTrackState extends DailyTrackState {\n isOff: boolean;\n}\n\n/**\n * Returns a participant's track and state, based on the given MediaType.\n *\n * Equivalent to daily.participants()[participantId].tracks[type].\n *\n * @param participantId The participant's session_id.\n * @param type The track type. Default: \"video\"\n */\nexport const useMediaTrack = (\n participantId: string,\n type: MediaType = 'video'\n): MediaTrackState => {\n const trackState = useParticipantProperty(participantId, `tracks.${type}`);\n\n const result: MediaTrackState = trackState\n ? {\n ...trackState,\n isOff: isTrackOff(trackState.state),\n }\n : {\n isOff: true,\n persistentTrack: undefined,\n state: 'off',\n subscribed: false,\n };\n\n useDebugValue(result);\n\n return result;\n};\n","/**\n * Original source: https://github.com/jaredLunde/react-hook/blob/master/packages/merged-ref/src/index.tsx\n * Original author: Jared Lunde (https://github.com/jaredLunde)\n * Originally published under the MIT license: https://github.com/jaredLunde/react-hook/blob/master/LICENSE\n */\n\nimport React, { useCallback } from 'react';\n\nfunction useMergedRef(...refs: React.Ref[]): React.RefCallback {\n return useCallback(\n (element: T) => {\n for (let i = 0; i < refs.length; i++) {\n const ref = refs[i];\n if (typeof ref === 'function') ref(element);\n else if (ref && typeof ref === 'object')\n (ref as React.MutableRefObject).current = element;\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n refs\n );\n}\n\nexport default useMergedRef;\n","import React, { forwardRef, memo, useEffect, useRef } from 'react';\n\nimport { useMediaTrack } from '../hooks/useMediaTrack';\nimport useMergedRef from '../hooks/useMergedRef';\n\nexport interface DailyAudioPlayException {\n name?: string;\n message?: string;\n sessionId: string;\n target: HTMLAudioElement;\n type: string;\n}\n\ninterface Props extends React.AudioHTMLAttributes {\n /**\n * Callback to handle failed attempt to play audio.\n */\n onPlayFailed?(e: DailyAudioPlayException): void;\n sessionId: string;\n type?: 'audio' | 'screenAudio' | 'rmpAudio';\n}\n\nexport const DailyAudioTrack = memo(\n forwardRef(\n ({ onPlayFailed, sessionId, type = 'audio', ...props }, ref) => {\n const audioEl = useRef(null);\n const audio = useMediaTrack(sessionId, type);\n const audioRef = useMergedRef(audioEl, ref);\n const subscribedState = audio?.subscribed;\n\n /**\n * Setup audio tag.\n */\n useEffect(() => {\n const audioTag = audioEl.current;\n if (!audioTag || !audio?.persistentTrack) return;\n let playTimeout: ReturnType;\n const handleCanPlay = () => {\n audioTag.play().catch((e) => {\n onPlayFailed?.({\n sessionId,\n target: audioTag,\n type,\n message: e.message,\n name: e.name,\n });\n });\n };\n const handlePlay = () => {\n clearTimeout(playTimeout);\n };\n audioTag.addEventListener('canplay', handleCanPlay);\n audioTag.addEventListener('play', handlePlay);\n audioTag.srcObject = new MediaStream([audio?.persistentTrack]);\n\n return () => {\n audioTag?.removeEventListener('canplay', handleCanPlay);\n audioTag?.removeEventListener('play', handlePlay);\n };\n }, [audio?.persistentTrack, onPlayFailed, sessionId, type]);\n\n return (\n \n );\n }\n )\n);\nDailyAudioTrack.displayName = 'DailyAudioTrack';\n","import React, {\n forwardRef,\n memo,\n useCallback,\n useImperativeHandle,\n useRef,\n useState,\n} from 'react';\nimport { useRecoilCallback } from 'recoil';\n\nimport { ExtendedDailyParticipant } from '../DailyParticipants';\nimport { useActiveSpeakerId } from '../hooks/useActiveSpeakerId';\nimport { useDaily } from '../hooks/useDaily';\nimport { useLocalSessionId } from '../hooks/useLocalSessionId';\nimport { useParticipantIds } from '../hooks/useParticipantIds';\nimport { participantPropertyState } from '../hooks/useParticipantProperty';\nimport { useScreenShare } from '../hooks/useScreenShare';\nimport { useThrottledDailyEvent } from '../hooks/useThrottledDailyEvent';\nimport { isTrackOff } from '../utils/isTrackOff';\nimport { DailyAudioPlayException, DailyAudioTrack } from './DailyAudioTrack';\n\ninterface Props {\n /**\n * When enabled and the call is configured for manual track subscriptions,\n * DailyAudio will automatically subscribe to the active speaker's audio track.\n */\n autoSubscribeActiveSpeaker?: boolean;\n /**\n * Maximum amount of parallel speakers. Default: 5.\n */\n maxSpeakers?: number;\n /**\n * Callback to handle failed attempt to play audio.\n */\n onPlayFailed?(e: DailyAudioPlayException): void;\n /**\n * When enabled, plays audio from a local screenAudio track.\n */\n playLocalScreenAudio?: boolean;\n}\n\nexport interface DailyAudioHandle {\n /**\n * Returns all rendered audio elements.\n */\n getAllAudio(): HTMLAudioElement[];\n /**\n * Returns the audio element assigned to the current active speaker.\n */\n getActiveSpeakerAudio(): HTMLAudioElement | null;\n /**\n * Returns all rendered audio elements for rmpAudio tracks.\n */\n getRmpAudio(): HTMLAudioElement[];\n /**\n * Returns all rendered audio elements for screenAudio tracks.\n */\n getScreenAudio(): HTMLAudioElement[];\n /**\n * Returns the audio track for the given sessionId.\n */\n getAudioBySessionId(sessionId: string): HTMLAudioElement | null;\n /**\n * Returns the rmpAudio track for the given sessionId.\n */\n getRmpAudioBySessionId(sessionId: string): HTMLAudioElement | null;\n /**\n * Returns the screenAudio track for the given sessionId.\n */\n getScreenAudioBySessionId(sessionId: string): HTMLAudioElement | null;\n}\n\nexport const DailyAudio = memo(\n forwardRef(\n (\n {\n autoSubscribeActiveSpeaker = false,\n maxSpeakers = 5,\n onPlayFailed,\n playLocalScreenAudio = false,\n },\n ref\n ) => {\n const daily = useDaily();\n const [speakers, setSpeakers] = useState(\n new Array(maxSpeakers).fill('')\n );\n const { screens } = useScreenShare();\n const localSessionId = useLocalSessionId();\n const activeSpeakerId = useActiveSpeakerId({\n ignoreLocal: true,\n });\n\n const containerRef = useRef(null);\n useImperativeHandle(\n ref,\n () => ({\n getActiveSpeakerAudio: () => {\n return (\n containerRef.current?.querySelector(\n `audio[data-session-id=\"${activeSpeakerId}\"][data-audio-type=\"audio\"]`\n ) ?? null\n );\n },\n getAllAudio: () => {\n return Array.from(\n containerRef.current?.querySelectorAll('audio') ?? []\n );\n },\n getAudioBySessionId: (id) => {\n return (\n containerRef.current?.querySelector(\n `audio[data-session-id=\"${id}\"][data-audio-type=\"audio\"]`\n ) ?? null\n );\n },\n getRmpAudio: () => {\n return Array.from(\n containerRef.current?.querySelectorAll(\n 'audio[data-audio-type=\"rmpAudio\"]'\n ) ?? []\n );\n },\n getScreenAudio: () => {\n return Array.from(\n containerRef.current?.querySelectorAll(\n 'audio[data-audio-type=\"screenAudio\"]'\n ) ?? []\n );\n },\n getRmpAudioBySessionId: (id) => {\n return (\n containerRef.current?.querySelector(\n `audio[data-session-id=\"${id}\"][data-audio-type=\"rmpAudio\"]`\n ) ?? null\n );\n },\n getScreenAudioBySessionId: (id) => {\n return (\n containerRef.current?.querySelector(\n `audio[data-session-id=\"${id}\"][data-audio-type=\"screenAudio\"]`\n ) ?? null\n );\n },\n }),\n [activeSpeakerId]\n );\n\n const assignSpeaker = useRecoilCallback(\n ({ snapshot }) =>\n async (sessionId: string) => {\n /**\n * Only consider remote participants with subscribed or staged audio.\n */\n const subscribedParticipants = Object.values(\n daily?.participants() ?? {}\n ).filter((p) => !p.local && Boolean(p.tracks.audio.subscribed));\n\n const isSubscribed = (id: string) =>\n subscribedParticipants.some((p) => p.session_id === id);\n\n if (!isSubscribed(sessionId)) {\n if (\n daily &&\n !daily.isDestroyed() &&\n autoSubscribeActiveSpeaker &&\n !daily.subscribeToTracksAutomatically()\n ) {\n daily.updateParticipant(sessionId, {\n setSubscribedTracks: {\n audio: true,\n },\n });\n } else {\n return;\n }\n }\n\n setSpeakers((prevSpeakers) => {\n // New speaker is already present\n if (prevSpeakers.includes(sessionId)) return prevSpeakers;\n\n // Try to find a free slot: either unassigned or unsubscribed\n const freeSlotCheck = (id: string) => !id || !isSubscribed(id);\n if (prevSpeakers.some(freeSlotCheck)) {\n const idx = prevSpeakers.findIndex(freeSlotCheck);\n prevSpeakers[idx] = sessionId;\n return [...prevSpeakers];\n }\n\n // From here on we can assume that all assigned audio tracks are subscribed.\n\n // Try to find muted recent speaker\n const mutedIdx = prevSpeakers.findIndex((id) =>\n subscribedParticipants.some(\n (p) => p.session_id === id && isTrackOff(p.tracks.audio.state)\n )\n );\n if (mutedIdx >= 0) {\n prevSpeakers[mutedIdx] = sessionId;\n return [...prevSpeakers];\n }\n\n // Find least recent non-active speaker and replace with new speaker\n const speakerObjects = subscribedParticipants\n .filter(\n (p) =>\n // Only consider participants currently assigned to speaker slots\n prevSpeakers.includes(p.session_id) &&\n // Don't replace current active participant, to avoid audio drop-outs\n p.session_id !== activeSpeakerId\n )\n .sort((a, b) => {\n const lastActiveA =\n snapshot.getLoadable(\n participantPropertyState({\n id: a.session_id,\n property: 'last_active',\n })\n ).contents ?? new Date('1970-01-01');\n const lastActiveB =\n snapshot.getLoadable(\n participantPropertyState({\n id: b.session_id,\n property: 'last_active',\n })\n ).contents ?? new Date('1970-01-01');\n if (lastActiveA > lastActiveB) return 1;\n if (lastActiveA < lastActiveB) return -1;\n return 0;\n });\n\n // No previous speaker in call anymore. Assign first free slot.\n if (!speakerObjects.length) {\n // Don't replace the active speaker. Instead find first non-active speaker slot.\n const replaceIdx = prevSpeakers.findIndex(\n (id) => id !== activeSpeakerId\n );\n prevSpeakers[replaceIdx] = sessionId;\n return [...prevSpeakers];\n }\n\n // Replace least recent speaker with new speaker\n const replaceIdx = prevSpeakers.indexOf(\n speakerObjects[0]?.session_id\n );\n prevSpeakers[replaceIdx] = sessionId;\n return [...prevSpeakers];\n });\n },\n [activeSpeakerId, autoSubscribeActiveSpeaker, daily]\n );\n\n /**\n * Unassigns speaker from speaker slot, e.g. because participant left the call.\n */\n const removeSpeaker = useCallback((sessionId: string) => {\n setSpeakers((prevSpeakers) => {\n if (!prevSpeakers.includes(sessionId)) return prevSpeakers;\n const newSpeakers = [...prevSpeakers];\n const idx = newSpeakers.indexOf(sessionId);\n newSpeakers[idx] = '';\n return newSpeakers;\n });\n }, []);\n\n useThrottledDailyEvent(\n ['active-speaker-change', 'track-started', 'participant-left'],\n useCallback(\n (evts) => {\n evts.forEach((ev) => {\n switch (ev.action) {\n case 'active-speaker-change':\n if (ev.activeSpeaker.peerId === localSessionId) return;\n assignSpeaker(ev.activeSpeaker.peerId);\n break;\n case 'track-started':\n if (\n ev.track.kind === 'audio' &&\n ev.participant &&\n !ev.participant.local\n ) {\n assignSpeaker(ev.participant.session_id);\n }\n break;\n case 'participant-left':\n removeSpeaker(ev.participant.session_id);\n break;\n }\n });\n },\n [assignSpeaker, localSessionId, removeSpeaker]\n ),\n 200\n );\n\n const rmpAudioIds = useParticipantIds({\n filter: useCallback(\n (p: ExtendedDailyParticipant) => Boolean(p?.tracks?.rmpAudio),\n []\n ),\n });\n\n return (\n

\n {speakers.map((sessionId, idx) => (\n \n ))}\n {screens\n .filter((screen) => (playLocalScreenAudio ? true : !screen.local))\n .map((screen) => (\n \n ))}\n {rmpAudioIds.map((id) => (\n \n ))}\n
\n );\n }\n )\n);\nDailyAudio.displayName = 'DailyAudio';\n","import React, { forwardRef, useEffect, useMemo, useRef } from 'react';\n\nimport { useLocalSessionId } from '../hooks/useLocalSessionId';\nimport { useMediaTrack } from '../hooks/useMediaTrack';\nimport useMergedRef from '../hooks/useMergedRef';\nimport { useParticipantProperty } from '../hooks/useParticipantProperty';\n\ninterface DailyVideoDimensions {\n aspectRatio: number;\n height: number;\n width: number;\n}\n\ninterface Props\n extends Omit, 'onResize'> {\n /**\n * For local user-facing camera streams, we'll automatically mirror the video.\n */\n automirror?: boolean;\n /**\n * Defines whether the video should be fully contained or cover the box. Default: 'contain'.\n */\n fit?: 'contain' | 'cover';\n /**\n * Forces the video to be mirrored, if set.\n */\n mirror?: boolean;\n /**\n * Optional styles to apply, when video is playable.\n */\n playableStyle?: React.CSSProperties;\n /**\n * Optional callback, which is triggered whenever the video's rendered width or height changes.\n * Returns the video's native width, height and aspectRatio.\n */\n onResize?(dimensions: DailyVideoDimensions): void;\n /**\n * Identifies the participant for which a video stream should be rendered.\n */\n sessionId: string;\n /**\n * Defines the track type being used.\n */\n type: 'video' | 'screenVideo' | 'rmpVideo';\n}\n\nexport const DailyVideo = forwardRef(\n function DailyVideo(\n {\n automirror,\n fit = 'contain',\n mirror,\n onResize,\n playableStyle = {},\n sessionId,\n style = {},\n type = 'video',\n ...props\n },\n ref\n ) {\n const localSessionId = useLocalSessionId();\n const isLocal = localSessionId === sessionId;\n const isScreen = type === 'screenVideo';\n const isLocalCam = isLocal && !isScreen;\n\n const videoEl = useRef(null);\n const videoRef = useMergedRef(videoEl, ref);\n\n const videoState = useMediaTrack(sessionId, type);\n const videoTrack = videoState.persistentTrack;\n /**\n * Considered as playable video:\n * - local cam feed\n * - any screen share\n * - remote cam feed that is subscribed and reported as playable\n */\n const isPlayable = isLocalCam || isScreen || !videoState.isOff;\n const trackState = useParticipantProperty(sessionId, `tracks.${type}`);\n const subscribedState = trackState?.subscribed;\n\n /**\n * Determine if video needs to be mirrored.\n */\n const isMirrored = useMemo(() => {\n if (typeof mirror === 'boolean') return mirror;\n if (!automirror) return false;\n if (!videoTrack) return isLocalCam;\n\n const videoTrackSettings = videoTrack.getSettings();\n const isUsersFrontCamera =\n 'facingMode' in videoTrackSettings\n ? isLocalCam && videoTrackSettings.facingMode === 'user'\n : isLocalCam;\n // only apply mirror effect to user facing camera\n return isUsersFrontCamera;\n }, [automirror, isLocalCam, mirror, videoTrack]);\n\n /**\n * Handle canplay & picture-in-picture events.\n */\n useEffect(function setupVideoEvents() {\n const video = videoEl.current;\n if (!video) return;\n\n const playVideo = () => {\n const promise = video.play();\n if (promise !== undefined) {\n promise\n .then(() => {\n // All good, playback started.\n video.controls = false;\n })\n .catch((error) => {\n // Auto-play was prevented. Show video controls, so user can play video manually.\n video.controls = true;\n console.warn('Failed to play video', error);\n });\n }\n };\n\n const handleCanPlay = () => {\n if (!video.paused) return;\n playVideo();\n };\n const handleEnterPIP = () => {\n video.style.transform = 'scale(1)';\n };\n const handleLeavePIP = () => {\n video.style.transform = '';\n setTimeout(() => {\n if (video.paused) playVideo();\n }, 100);\n };\n const handleVisibilityChange = () => {\n if (document.visibilityState === 'hidden') return;\n if (!video.paused) return;\n playVideo();\n };\n video.addEventListener('canplay', handleCanPlay);\n video.addEventListener('enterpictureinpicture', handleEnterPIP);\n video.addEventListener('leavepictureinpicture', handleLeavePIP);\n\n // Videos can be paused if media was played in another app on iOS.\n // Resuming here, when returning back to Daily call.\n document.addEventListener('visibilitychange', handleVisibilityChange);\n return () => {\n video.removeEventListener('canplay', handleCanPlay);\n video.removeEventListener('enterpictureinpicture', handleEnterPIP);\n video.removeEventListener('leavepictureinpicture', handleLeavePIP);\n document.removeEventListener(\n 'visibilitychange',\n handleVisibilityChange\n );\n };\n }, []);\n\n /**\n * Update srcObject.\n */\n useEffect(\n function updateSrcObject() {\n const video = videoEl.current;\n if (!video || !videoTrack) return;\n video.srcObject = new MediaStream([videoTrack]);\n video.load();\n return () => {\n // clean up when unmounted\n video.srcObject = null;\n video.load();\n };\n },\n [videoTrack, videoTrack?.id]\n );\n\n /**\n * Add optional event listener for resize event so the parent component\n * can know the video's native aspect ratio.\n */\n useEffect(\n function reportVideoDimensions() {\n const video = videoEl.current;\n if (!onResize || !video) return;\n\n let frame: ReturnType;\n function handleResize() {\n if (frame) cancelAnimationFrame(frame);\n frame = requestAnimationFrame(() => {\n const video = videoEl.current;\n if (!video || document.hidden) return;\n const videoWidth = video.videoWidth;\n const videoHeight = video.videoHeight;\n if (videoWidth && videoHeight) {\n onResize?.({\n aspectRatio: videoWidth / videoHeight,\n height: videoHeight,\n width: videoWidth,\n });\n }\n });\n }\n\n handleResize();\n video.addEventListener('loadedmetadata', handleResize);\n video.addEventListener('resize', handleResize);\n\n return () => {\n if (frame) cancelAnimationFrame(frame);\n video.removeEventListener('loadedmetadata', handleResize);\n video.removeEventListener('resize', handleResize);\n };\n },\n [onResize]\n );\n\n return (\n \n );\n }\n);\nDailyVideo.displayName = 'DailyVideo';\n","import { createContext } from 'react';\n\ninterface DevicesContextValue {\n refreshDevices(): Promise;\n}\n\nexport const DailyDevicesContext = createContext({\n refreshDevices: () => Promise.resolve(),\n});\n","import {\n DailyCameraErrorObject,\n DailyCameraErrorType,\n} from '@daily-co/daily-js';\nimport React, { useCallback } from 'react';\nimport { atom, useRecoilCallback } from 'recoil';\n\nimport { DailyDevicesContext } from './DailyDevicesContext';\nimport { useDaily } from './hooks/useDaily';\nimport { useDailyEvent } from './hooks/useDailyEvent';\nimport { RECOIL_PREFIX } from './lib/constants';\n\ntype GeneralState =\n | 'idle'\n | 'pending'\n | 'not-supported'\n | 'granted'\n | 'blocked'\n | 'in-use'\n | 'not-found'\n | 'constraints-invalid'\n | 'constraints-none-specified'\n | 'undefined-mediadevices'\n | 'unknown';\n\ntype DeviceState = 'granted' | 'in-use';\nexport interface StatefulDevice {\n device: MediaDeviceInfo;\n selected: boolean;\n state: DeviceState;\n}\n\nexport const generalCameraState = atom({\n key: RECOIL_PREFIX + 'general-camera-state',\n default: 'idle',\n});\nexport const generalMicrophoneState = atom({\n key: RECOIL_PREFIX + 'general-microphone-state',\n default: 'idle',\n});\nexport const cameraDevicesState = atom({\n key: RECOIL_PREFIX + 'camera-devices',\n default: [],\n});\nexport const microphoneDevicesState = atom({\n key: RECOIL_PREFIX + 'microphone-devices',\n default: [],\n});\nexport const speakerDevicesState = atom({\n key: RECOIL_PREFIX + 'speaker-devices',\n default: [],\n});\nexport const lastCameraErrorState =\n atom | null>({\n key: RECOIL_PREFIX + 'last-camera-error',\n default: null,\n });\n\nexport const DailyDevices: React.FC> = ({\n children,\n}) => {\n const daily = useDaily();\n\n /**\n * Refreshes list of available devices using enumerateDevices.\n * Previous device states are kept in place, otherwise states are initialized as 'granted'.\n */\n const refreshDevices = useRecoilCallback(\n ({ transact_UNSTABLE }) =>\n async () => {\n /**\n * Check for legacy browsers.\n */\n if (\n typeof navigator?.mediaDevices?.getUserMedia === 'undefined' ||\n typeof navigator?.mediaDevices?.enumerateDevices === 'undefined'\n ) {\n transact_UNSTABLE(({ set }) => {\n set(generalCameraState, 'not-supported');\n set(generalMicrophoneState, 'not-supported');\n });\n return;\n }\n\n if (!daily) return;\n\n try {\n const { devices } = await daily.enumerateDevices();\n /**\n * Filter out \"empty\" devices for when device access has not been granted (yet).\n */\n const cams = devices.filter(\n (d) => d.kind === 'videoinput' && d.deviceId !== ''\n );\n const mics = devices.filter(\n (d) => d.kind === 'audioinput' && d.deviceId !== ''\n );\n const speakers = devices.filter(\n (d) => d.kind === 'audiooutput' && d.deviceId !== ''\n );\n const { camera, mic, speaker } = await daily.getInputDevices();\n\n const mapDevice = (\n device: {} | MediaDeviceInfo,\n d: MediaDeviceInfo,\n prevDevices: StatefulDevice[]\n ) => ({\n device: d,\n selected: 'deviceId' in device && d.deviceId === device.deviceId,\n state:\n prevDevices.find((p) => p.device.deviceId === d.deviceId)\n ?.state ?? 'granted',\n });\n const sortDeviceByLabel = (a: StatefulDevice, b: StatefulDevice) => {\n if (a.device.deviceId === 'default') return -1;\n if (b.device.deviceId === 'default') return 1;\n if (a.device.label < b.device.label) return -1;\n if (a.device.label > b.device.label) return 1;\n return 0;\n };\n\n transact_UNSTABLE(({ set }) => {\n set(cameraDevicesState, (prevCams) =>\n cams\n .filter(Boolean)\n .map((d) => mapDevice(camera, d, prevCams))\n .sort(sortDeviceByLabel)\n );\n set(microphoneDevicesState, (prevMics) =>\n mics\n .filter(Boolean)\n .map((d) => mapDevice(mic, d, prevMics))\n .sort(sortDeviceByLabel)\n );\n set(speakerDevicesState, (prevSpeakers) =>\n speakers\n .filter(Boolean)\n .map((d) => mapDevice(speaker, d, prevSpeakers))\n .sort(sortDeviceByLabel)\n );\n });\n } catch (e) {\n transact_UNSTABLE(({ set }) => {\n set(generalCameraState, 'not-supported');\n set(generalMicrophoneState, 'not-supported');\n });\n }\n },\n [daily]\n );\n\n /**\n * Updates general and specific device states, based on blocked status.\n */\n const updateDeviceStates = useRecoilCallback(\n ({ set, snapshot, transact_UNSTABLE }) =>\n async () => {\n if (!daily) return;\n\n const currentCamState = await snapshot.getPromise(generalCameraState);\n const currentMicState = await snapshot.getPromise(\n generalMicrophoneState\n );\n\n const participants = daily.participants();\n // Guard against potentially uninitialized local participant\n if (!participants.local) return;\n\n const { tracks } = participants.local;\n\n let camPermissionState: PermissionState = 'prompt';\n let micPermissionState: PermissionState = 'prompt';\n if (navigator.permissions) {\n try {\n const camPermission = await navigator.permissions.query({\n // @ts-ignore\n name: 'camera',\n });\n camPermissionState = camPermission.state;\n const micPermission = await navigator.permissions.query({\n // @ts-ignore\n name: 'microphone',\n });\n micPermissionState = micPermission.state;\n } catch {\n // Permissions query not available\n }\n }\n\n const awaitingCamAccess =\n camPermissionState === 'prompt' &&\n ['idle', 'pending'].includes(currentCamState) &&\n tracks.video.state === 'interrupted' &&\n !tracks.video.persistentTrack;\n const initialCamOff =\n ['idle', 'pending'].includes(currentCamState) &&\n !tracks.video.persistentTrack &&\n Boolean(tracks.video.off?.byUser);\n const awaitingMicAccess =\n micPermissionState === 'prompt' &&\n ['idle', 'pending'].includes(currentMicState) &&\n tracks.audio.state === 'interrupted' &&\n !tracks.audio.persistentTrack;\n const initialMicOff =\n ['idle', 'pending'].includes(currentMicState) &&\n !tracks.audio.persistentTrack &&\n Boolean(tracks.audio.off?.byUser);\n\n if (tracks.audio?.blocked?.byDeviceInUse) {\n transact_UNSTABLE(({ set }) => {\n set(generalMicrophoneState, 'in-use');\n set(microphoneDevicesState, (mics) =>\n mics.map((m) =>\n m.selected ? { ...m, state: 'in-use' } : m\n )\n );\n });\n } else if (tracks.audio?.blocked?.byDeviceMissing) {\n set(generalMicrophoneState, 'not-found');\n } else if (\n tracks.audio?.blocked?.byPermissions ||\n micPermissionState === 'denied'\n ) {\n set(generalMicrophoneState, 'blocked');\n } else if (awaitingMicAccess) {\n set(generalMicrophoneState, 'pending');\n } else if (initialMicOff) {\n set(generalMicrophoneState, 'idle');\n } else {\n transact_UNSTABLE(({ set }) => {\n set(generalMicrophoneState, 'granted');\n set(microphoneDevicesState, (mics) =>\n mics.map((m) =>\n m.selected ? { ...m, state: 'granted' } : m\n )\n );\n });\n }\n\n if (tracks.video?.blocked?.byDeviceInUse) {\n transact_UNSTABLE(({ set }) => {\n set(generalCameraState, 'in-use');\n set(cameraDevicesState, (cams) =>\n cams.map((m) =>\n m.selected ? { ...m, state: 'in-use' } : m\n )\n );\n });\n } else if (tracks.video?.blocked?.byDeviceMissing) {\n set(generalCameraState, 'not-found');\n } else if (\n tracks.video?.blocked?.byPermissions ||\n camPermissionState === 'denied'\n ) {\n set(generalCameraState, 'blocked');\n } else if (awaitingCamAccess) {\n set(generalCameraState, 'pending');\n } else if (initialCamOff) {\n set(generalCameraState, 'idle');\n } else {\n transact_UNSTABLE(({ set }) => {\n set(generalCameraState, 'granted');\n set(cameraDevicesState, (cams) =>\n cams.map((m) =>\n m.selected ? { ...m, state: 'granted' } : m\n )\n );\n });\n }\n refreshDevices();\n },\n [daily, refreshDevices]\n );\n\n useDailyEvent(\n 'participant-updated',\n useCallback(\n (ev) => {\n if (!ev.participant.local) return;\n updateDeviceStates();\n },\n [updateDeviceStates]\n )\n );\n\n useDailyEvent('available-devices-updated', refreshDevices);\n useDailyEvent('selected-devices-updated', refreshDevices);\n\n useDailyEvent(\n 'camera-error',\n useRecoilCallback(\n ({ transact_UNSTABLE }) =>\n (ev) => {\n transact_UNSTABLE(({ set }) => {\n set(lastCameraErrorState, ev.error);\n switch (ev.error?.type) {\n case 'cam-in-use':\n set(generalCameraState, 'in-use');\n break;\n case 'mic-in-use':\n set(generalMicrophoneState, 'in-use');\n break;\n case 'cam-mic-in-use':\n set(generalCameraState, 'in-use');\n set(generalMicrophoneState, 'in-use');\n break;\n case 'not-found':\n if (ev.error?.missingMedia.includes('video'))\n set(generalCameraState, 'not-found');\n if (ev.error?.missingMedia.includes('audio'))\n set(generalMicrophoneState, 'not-found');\n break;\n case 'permissions':\n if (ev.error?.blockedMedia.includes('video'))\n set(generalCameraState, 'blocked');\n if (ev.error?.blockedMedia.includes('audio'))\n set(generalMicrophoneState, 'blocked');\n break;\n case 'constraints':\n if (ev.error?.reason === 'invalid') {\n set(generalCameraState, 'constraints-invalid');\n set(generalMicrophoneState, 'constraints-invalid');\n } else if (ev.error?.reason === 'none-specified') {\n set(generalCameraState, 'constraints-none-specified');\n set(generalMicrophoneState, 'constraints-none-specified');\n }\n break;\n case 'undefined-mediadevices':\n set(generalCameraState, 'undefined-mediadevices');\n set(generalMicrophoneState, 'undefined-mediadevices');\n break;\n case 'unknown':\n default:\n set(generalCameraState, 'unknown');\n set(generalMicrophoneState, 'unknown');\n break;\n }\n });\n },\n []\n )\n );\n\n /**\n * Update all device state, when camera is started.\n */\n useDailyEvent(\n 'started-camera',\n useRecoilCallback(\n ({ transact_UNSTABLE }) =>\n () => {\n transact_UNSTABLE(({ set }) => {\n set(generalCameraState, 'granted');\n set(generalMicrophoneState, 'granted');\n });\n updateDeviceStates();\n },\n [updateDeviceStates]\n )\n );\n\n return (\n \n {children}\n \n );\n};\n","import { DailyStreamingLayoutConfig } from '@daily-co/daily-js';\nimport React from 'react';\nimport { atom, useRecoilCallback } from 'recoil';\n\nimport { useDailyEvent } from './hooks/useDailyEvent';\nimport { RECOIL_PREFIX } from './lib/constants';\n\ninterface LiveStreamingState {\n errorMsg?: string;\n isLiveStreaming: boolean;\n layout?: DailyStreamingLayoutConfig;\n}\n\nexport const liveStreamingState = atom({\n key: RECOIL_PREFIX + 'live-streaming',\n default: {\n errorMsg: undefined,\n isLiveStreaming: false,\n layout: undefined,\n },\n});\n\nexport const DailyLiveStreaming: React.FC> = ({\n children,\n}) => {\n useDailyEvent(\n 'live-streaming-started',\n useRecoilCallback(\n ({ set }) =>\n (ev) => {\n set(liveStreamingState, {\n isLiveStreaming: true,\n layout: ev?.layout,\n });\n },\n []\n )\n );\n\n useDailyEvent(\n 'live-streaming-stopped',\n useRecoilCallback(\n ({ set }) =>\n () => {\n set(liveStreamingState, (prevState) => ({\n ...prevState,\n isLiveStreaming: false,\n layout: undefined,\n }));\n },\n []\n )\n );\n\n useDailyEvent(\n 'live-streaming-error',\n useRecoilCallback(\n ({ set }) =>\n (ev) => {\n set(liveStreamingState, (prevState) => ({\n ...prevState,\n errorMsg: ev.errorMsg,\n }));\n },\n []\n )\n );\n\n useDailyEvent(\n 'left-meeting',\n useRecoilCallback(\n ({ reset }) =>\n () => {\n reset(liveStreamingState);\n },\n []\n )\n );\n\n return <>{children};\n};\n","import {\n DailyEventObjectFatalError,\n DailyEventObjectNonFatalError,\n DailyMeetingSessionState,\n DailyMeetingState,\n} from '@daily-co/daily-js';\nimport React from 'react';\nimport { atom, useRecoilCallback } from 'recoil';\n\nimport { useDaily } from './hooks/useDaily';\nimport { useDailyEvent } from './hooks/useDailyEvent';\nimport { RECOIL_PREFIX } from './lib/constants';\n\nexport const meetingStateState = atom({\n key: RECOIL_PREFIX + 'meeting-state',\n default: 'new',\n});\n\nexport const meetingErrorState = atom({\n key: RECOIL_PREFIX + 'meeting-error',\n default: null,\n});\n\nexport const nonFatalErrorState = atom({\n key: RECOIL_PREFIX + 'non-fatal-error',\n default: null,\n});\n\nexport const meetingSessionDataState = atom({\n key: 'meeting-session-data',\n default: {\n data: undefined,\n topology: 'none',\n },\n});\n\nexport const DailyMeeting: React.FC> = ({\n children,\n}) => {\n const daily = useDaily();\n\n /**\n * Updates meeting state.\n */\n const updateMeetingState = useRecoilCallback(\n ({ set }) =>\n () => {\n if (!daily) return;\n const meetingState = daily.meetingState();\n set(meetingStateState, meetingState);\n return meetingState;\n },\n [daily]\n );\n\n useDailyEvent('loading', updateMeetingState);\n useDailyEvent('loaded', updateMeetingState);\n useDailyEvent('joining-meeting', updateMeetingState);\n useDailyEvent('joined-meeting', updateMeetingState);\n useDailyEvent('left-meeting', updateMeetingState);\n useDailyEvent(\n 'error',\n useRecoilCallback(\n ({ set }) =>\n (ev) => {\n set(meetingErrorState, ev);\n updateMeetingState();\n },\n [updateMeetingState]\n )\n );\n useDailyEvent(\n 'nonfatal-error',\n useRecoilCallback(\n ({ set }) =>\n (ev) => {\n set(nonFatalErrorState, ev);\n },\n []\n )\n );\n\n /**\n * Updates meeting session state.\n */\n const initMeetingSessionState = useRecoilCallback(\n ({ set }) =>\n () => {\n if (!daily) return;\n set(meetingSessionDataState, daily.meetingSessionState());\n },\n [daily]\n );\n\n /**\n * Initialize state when joined meeting or setting up the hook.\n */\n useDailyEvent('joined-meeting', initMeetingSessionState);\n\n /**\n * Update Recoil state whenever meeting session state is updated.\n */\n useDailyEvent(\n 'meeting-session-state-updated',\n useRecoilCallback(\n ({ set }) =>\n (ev) => {\n set(meetingSessionDataState, ev.meetingSessionState);\n },\n []\n )\n );\n\n /**\n * Reset Recoil state when meeting ends.\n */\n useDailyEvent(\n 'left-meeting',\n useRecoilCallback(\n ({ reset }) =>\n () => {\n reset(meetingSessionDataState);\n },\n []\n )\n );\n\n /**\n * Reset Recoil state when call instance is destroyed.\n */\n useDailyEvent(\n 'call-instance-destroyed',\n useRecoilCallback(\n ({ transact_UNSTABLE }) =>\n () => {\n transact_UNSTABLE(({ reset }) => {\n reset(meetingStateState);\n reset(meetingErrorState);\n reset(nonFatalErrorState);\n reset(meetingSessionDataState);\n });\n },\n []\n )\n );\n\n return <>{children};\n};\n","import { DailyNetworkStats, DailyNetworkTopology } from '@daily-co/daily-js';\nimport React, { useEffect } from 'react';\nimport { atom, useRecoilCallback, useRecoilValue } from 'recoil';\n\nimport { useDaily } from './hooks/useDaily';\nimport { useDailyEvent } from './hooks/useDailyEvent';\nimport { RECOIL_PREFIX } from './lib/constants';\n\nexport const topologyState = atom({\n key: RECOIL_PREFIX + 'topology',\n default: 'none',\n});\nexport const networkQualityState = atom({\n key: RECOIL_PREFIX + 'networkQuality',\n default: 100,\n});\nexport const networkThresholdState = atom({\n key: RECOIL_PREFIX + 'networkThreshold',\n default: 'good',\n});\n\nexport const DailyNetwork: React.FC> = ({\n children,\n}) => {\n const daily = useDaily();\n\n const topology = useRecoilValue(topologyState);\n\n const initTopology = useRecoilCallback(\n ({ set }) =>\n async () => {\n if (!daily) return;\n const topology = await daily.getNetworkTopology();\n if (!topology || topology?.topology === 'none') return;\n set(topologyState, topology.topology);\n },\n [daily]\n );\n\n useDailyEvent('joined-meeting', initTopology);\n useDailyEvent(\n 'network-connection',\n useRecoilCallback(\n ({ set }) =>\n (ev) => {\n switch (ev.event) {\n case 'connected':\n if (ev.type === 'peer-to-peer') set(topologyState, 'peer');\n if (ev.type === 'sfu') set(topologyState, 'sfu');\n break;\n }\n },\n []\n )\n );\n useDailyEvent(\n 'network-quality-change',\n useRecoilCallback(\n ({ transact_UNSTABLE }) =>\n (ev) => {\n transact_UNSTABLE(({ set }) => {\n set(networkQualityState, (prevQuality) =>\n prevQuality !== ev.quality ? ev.quality : prevQuality\n );\n set(networkThresholdState, (prevThreshold) =>\n prevThreshold !== ev.threshold ? ev.threshold : prevThreshold\n );\n });\n },\n []\n )\n );\n\n useDailyEvent(\n 'left-meeting',\n useRecoilCallback(\n ({ transact_UNSTABLE }) =>\n () => {\n transact_UNSTABLE(({ reset }) => {\n reset(topologyState);\n reset(networkQualityState);\n reset(networkThresholdState);\n });\n },\n []\n )\n );\n\n useEffect(() => {\n if (!daily || topology !== 'none') return;\n initTopology();\n }, [daily, initTopology, topology]);\n\n return <>{children};\n};\n","import { DailyStreamingLayoutConfig } from '@daily-co/daily-js';\nimport React, { useEffect } from 'react';\nimport { atom, useRecoilCallback, useSetRecoilState } from 'recoil';\n\nimport { useDailyEvent } from './hooks/useDailyEvent';\nimport { useLocalSessionId } from './hooks/useLocalSessionId';\nimport { useParticipantIds } from './hooks/useParticipantIds';\nimport { RECOIL_PREFIX } from './lib/constants';\n\ninterface RecordingState {\n /**\n * Determines whether an error occurred during the last recording attempt.\n */\n error?: boolean;\n /**\n * Determines whether the local participant is being recorded, based on the recording settings.\n */\n isLocalParticipantRecorded: boolean;\n /**\n * Determines whether a recording is currently running or not.\n */\n isRecording: boolean;\n /**\n * Contains the last applied cloud recording layout config.\n */\n layout?: DailyStreamingLayoutConfig;\n /**\n * Determines whether the recording is running locally.\n * See [enable_recording](https://docs.daily.co/reference/rest-api/rooms/config#enable_recording).\n */\n local?: boolean;\n /**\n * Contains the recording id.\n */\n recordingId?: string;\n /**\n * Contains the date when the 'recording-started' event was received.\n * This doesn't necessarily match the date the recording was actually started.\n */\n recordingStartedDate?: Date;\n /**\n * Contains the session_id of the participant who started the recording.\n */\n startedBy?: string;\n /**\n * Contains the recording type.\n * See [enable_recording](https://docs.daily.co/reference/rest-api/rooms/config#enable_recording).\n */\n type?: string;\n}\n\nexport const recordingState = atom({\n key: RECOIL_PREFIX + 'recording',\n default: {\n isLocalParticipantRecorded: false,\n isRecording: false,\n },\n});\n\nexport const DailyRecordings: React.FC> = ({\n children,\n}) => {\n const setState = useSetRecoilState(recordingState);\n\n const localSessionId = useLocalSessionId();\n\n const recordingParticipantIds = useParticipantIds({\n filter: 'record',\n });\n /**\n * Update recording state, whenever amount of recording participants changes.\n */\n useEffect(() => {\n const hasRecordingParticipants = recordingParticipantIds.length > 0;\n const isLocalParticipantRecording = recordingParticipantIds.includes(\n localSessionId || 'local'\n );\n setState((s) => ({\n ...s,\n // In case type is local or not set, determine based on recording participants\n isLocalParticipantRecorded:\n s?.type === 'local' || !s?.type\n ? hasRecordingParticipants\n : s.isLocalParticipantRecorded,\n isRecording:\n s?.type === 'local' || !s?.type\n ? hasRecordingParticipants\n : s.isRecording,\n local:\n (s?.type === 'local' || !s?.type) && hasRecordingParticipants\n ? isLocalParticipantRecording\n : s?.local,\n /**\n * Set type in case recording participants are detected.\n * We only set `record` on participants, when recording type is 'local'.\n */\n type: hasRecordingParticipants ? 'local' : s?.type,\n }));\n }, [localSessionId, recordingParticipantIds, setState]);\n\n useDailyEvent(\n 'recording-started',\n useRecoilCallback(\n ({ set }) =>\n (ev) => {\n let isLocalParticipantRecorded = true;\n switch (ev.type) {\n case 'cloud-beta':\n case 'cloud': {\n if (\n localSessionId &&\n ev.layout?.preset === 'single-participant' &&\n ev.layout.session_id !== localSessionId\n ) {\n isLocalParticipantRecorded = false;\n }\n break;\n }\n }\n set(recordingState, {\n error: false,\n isLocalParticipantRecorded,\n isRecording: true,\n layout: ev?.layout,\n local: ev?.local,\n recordingId: ev?.recordingId,\n recordingStartedDate: new Date(),\n startedBy: ev?.startedBy,\n type: ev?.type,\n });\n },\n [localSessionId]\n )\n );\n useDailyEvent(\n 'recording-stopped',\n useRecoilCallback(\n ({ set }) =>\n () => {\n set(recordingState, (prevState) => ({\n ...prevState,\n isLocalParticipantRecorded: false,\n isRecording: false,\n }));\n },\n []\n )\n );\n useDailyEvent(\n 'recording-error',\n useRecoilCallback(\n ({ set }) =>\n () => {\n set(recordingState, (prevState) => ({\n ...prevState,\n error: true,\n isLocalParticipantRecorded: false,\n isRecording: false,\n }));\n },\n []\n )\n );\n useDailyEvent(\n 'left-meeting',\n useRecoilCallback(\n ({ reset }) =>\n () => {\n reset(recordingState);\n },\n []\n )\n );\n return <>{children};\n};\n","import { DailyMeetingState } from '@daily-co/daily-js';\nimport { useDebugValue } from 'react';\nimport { useRecoilValue } from 'recoil';\n\nimport { meetingStateState } from '../DailyMeeting';\n\n/**\n * Returns a meeting's current state.\n */\nexport const useMeetingState = (): DailyMeetingState | null => {\n const meetingState = useRecoilValue(meetingStateState);\n useDebugValue(meetingState);\n return meetingState;\n};\n","import { DailyRoomInfo } from '@daily-co/daily-js';\nimport React from 'react';\nimport { atom, useRecoilCallback } from 'recoil';\n\nimport { useDaily } from './hooks/useDaily';\nimport { useDailyEvent } from './hooks/useDailyEvent';\nimport { useMeetingState } from './hooks/useMeetingState';\nimport { RECOIL_PREFIX } from './lib/constants';\n\nexport const roomState = atom({\n key: RECOIL_PREFIX + 'room',\n default: null,\n});\n\nexport const DailyRoom: React.FC> = ({\n children,\n}) => {\n const daily = useDaily();\n const meetingState = useMeetingState();\n\n const updateRoom = useRecoilCallback(\n ({ set }) =>\n async () => {\n if (!daily || meetingState === 'left-meeting') return;\n const room = await daily.room();\n if (room && 'id' in room) {\n set(roomState, room);\n }\n return room;\n },\n [daily, meetingState]\n );\n\n useDailyEvent('access-state-updated', updateRoom);\n\n useDailyEvent(\n 'left-meeting',\n useRecoilCallback(\n ({ reset }) =>\n () => {\n reset(roomState);\n },\n []\n )\n );\n\n return <>{children};\n};\n","import {\n DailyEventObjectAppMessage,\n DailyTranscriptionDeepgramOptions,\n} from '@daily-co/daily-js';\nimport React from 'react';\nimport { atom, useRecoilCallback } from 'recoil';\n\nimport { useDailyEvent } from './hooks/useDailyEvent';\nimport { RECOIL_PREFIX } from './lib/constants';\n\nexport interface Transcription {\n session_id: string;\n user_id: string;\n text: string;\n timestamp: string;\n // Deprecated\n is_final: boolean;\n}\n\ninterface TranscriptionState extends DailyTranscriptionDeepgramOptions {\n /**\n * Determines whether an error occurred during the last transcription attempt.\n */\n error?: boolean;\n /**\n * Determines whether a transcription is currently running or not.\n */\n isTranscribing: boolean;\n /**\n * Contains the date when the 'transcription-started' event was received.\n * This doesn't necessarily match the date the transcription was actually started.\n */\n transcriptionStartDate?: Date;\n /**\n * Contains the session_id of the participant who started the transcription.\n */\n startedBy?: string;\n /**\n * Contains the session_id of the participant who updated the transcription.\n */\n updatedBy?: string;\n /**\n * Contains the transcriptions that we received.\n */\n transcriptions: Transcription[];\n}\n\nexport const transcriptionState = atom({\n key: RECOIL_PREFIX + 'transcription',\n default: {\n isTranscribing: false,\n model: 'general',\n language: 'en',\n transcriptions: [],\n },\n});\n\nexport const DailyTranscriptions: React.FC> = ({\n children,\n}) => {\n useDailyEvent(\n 'transcription-started',\n useRecoilCallback(\n ({ set }) =>\n (ev) => {\n set(transcriptionState, {\n error: false,\n isTranscribing: true,\n transcriptionStartDate: new Date(),\n transcriptions: [],\n ...ev,\n });\n },\n []\n )\n );\n useDailyEvent(\n 'transcription-stopped',\n useRecoilCallback(\n ({ set }) =>\n (ev) => {\n set(transcriptionState, (prevState) => ({\n ...prevState,\n updatedBy: ev?.updatedBy,\n isTranscribing: false,\n }));\n },\n []\n )\n );\n useDailyEvent(\n 'transcription-error',\n useRecoilCallback(\n ({ set }) =>\n () => {\n set(transcriptionState, (prevState) => ({\n ...prevState,\n error: true,\n isTranscribing: false,\n }));\n },\n []\n )\n );\n useDailyEvent(\n 'left-meeting',\n useRecoilCallback(\n ({ set }) =>\n () => {\n set(transcriptionState, (prevState) => ({\n ...prevState,\n isTranscribing: false,\n }));\n },\n []\n )\n );\n useDailyEvent(\n 'app-message',\n useRecoilCallback(\n ({ set }) =>\n (ev: DailyEventObjectAppMessage) => {\n if (ev?.fromId === 'transcription') {\n set(transcriptionState, (prevState) => ({\n ...prevState,\n // setting it to true whenever a new message is received\n // as the participants who joined after the transcription-started event\n // won't be knowing if transcription is started or not\n isTranscribing: true,\n transcriptions: [...prevState.transcriptions, ev.data],\n }));\n }\n },\n []\n )\n );\n\n return <>{children};\n};\n","import Daily, { DailyCall, DailyFactoryOptions } from '@daily-co/daily-js';\nimport { MutableRefObject, useEffect, useRef, useState } from 'react';\n\nimport { customDeepEqual } from '../lib/customDeepEqual';\n\ntype InstanceType = 'callFrame' | 'callObject';\n\nconst defaultOptions: DailyFactoryOptions = {};\nconst defaultShouldCreateInstance = () => true;\n\nexport interface Props {\n parentElRef?: MutableRefObject;\n options?: DailyFactoryOptions;\n shouldCreateInstance?(): boolean;\n}\n\nconst defaultProps: Props = {\n options: defaultOptions,\n shouldCreateInstance: defaultShouldCreateInstance,\n};\n\n/**\n * Helper hook to maintain custom call instances in React codebases.\n */\nexport const useCallInstance = (\n type: InstanceType,\n {\n parentElRef,\n options = defaultOptions,\n shouldCreateInstance = defaultShouldCreateInstance,\n }: Props = defaultProps\n) => {\n const [callInstance, setCallInstance] = useState(null);\n\n /**\n * Holds last used props when callObject instance was created.\n */\n const lastUsedOptions = useRef();\n useEffect(() => {\n /**\n * Call frame instances with a defined parentEl likely pass a ref.\n * Typically a DOM ref is initialized with useRef(null).\n * We'll want to wait until parentEl is defined, meaning that the ref is\n * correctly wired up with a DOM element.\n * Otherwise we'll just check shouldCreateInstance().\n */\n if (\n (type === 'callFrame' && parentElRef?.current === null) ||\n !shouldCreateInstance()\n )\n return;\n\n async function destroyCallInstance(co: DailyCall) {\n await co.destroy();\n }\n\n /**\n * Once instance is destroyed, nullify callInstance, so a new one can be created.\n */\n const handleDestroyedInstance = () => {\n /**\n * Setting a timeout makes sure the destruction and creation\n * of call instances happen in separate call stacks.\n * Otherwise there's a risk for duplicate call instances.\n */\n setTimeout(() => setCallInstance(null), 0);\n };\n\n let co = Daily.getCallInstance();\n\n /**\n * In case a call instance exists outside of this hook instance's knowledge,\n * store it in state.\n */\n if (!callInstance && co && !co.isDestroyed()) {\n co.once('call-instance-destroyed', handleDestroyedInstance);\n setCallInstance(co);\n return;\n }\n\n /**\n * callInstance exists.\n */\n if (callInstance) {\n /**\n * Props have changed. Destroy current instance, so a new one can be created.\n */\n if (!customDeepEqual(lastUsedOptions.current, options)) {\n destroyCallInstance(callInstance);\n }\n /**\n * Return early.\n */\n return;\n }\n\n if (!co || co.isDestroyed()) {\n /**\n * callInstance doesn't exist or is destroyed (TODO: Check why getCallInstance() can return a destroyed instance),\n * but should be created.\n * Important to spread props, because createCallObject/createFrame alters the passed object (adds layout and dailyJsVersion).\n */\n switch (type) {\n case 'callFrame':\n co = parentElRef?.current\n ? Daily.createFrame(parentElRef.current, { ...options })\n : Daily.createFrame({ ...options });\n break;\n case 'callObject':\n co = Daily.createCallObject({ ...options });\n break;\n }\n lastUsedOptions.current = options;\n }\n\n setCallInstance(co);\n\n co.once('call-instance-destroyed', handleDestroyedInstance);\n\n /**\n * No cleanup phase here, because callObject.destroy() returns a Promise.\n * We can't have asynchronous cleanups in a useEffect.\n * To avoid infinite render loops we compare the props when creating call object instances.\n */\n }, [callInstance, options, parentElRef, shouldCreateInstance, type]);\n\n return callInstance;\n};\n","import { Props, useCallInstance } from './useCallInstance';\n\ntype CallObjectProps = Omit;\n\n/**\n * Helper hook to maintain custom callObject instances in React codebases.\n */\nexport const useCallObject = (props: CallObjectProps) =>\n useCallInstance('callObject', props);\n","import {\n DailyCall,\n DailyEvent,\n DailyEventObject,\n DailyFactoryOptions,\n} from '@daily-co/daily-js';\nimport React, { useCallback, useEffect, useMemo, useRef } from 'react';\nimport { RecoilRoot, RecoilRootProps } from 'recoil';\n\nimport { DailyContext } from './DailyContext';\nimport { DailyDevices } from './DailyDevices';\nimport { DailyEventContext } from './DailyEventContext';\nimport { DailyLiveStreaming } from './DailyLiveStreaming';\nimport { DailyMeeting } from './DailyMeeting';\nimport { DailyNetwork } from './DailyNetwork';\nimport { DailyParticipants } from './DailyParticipants';\nimport { DailyRecordings } from './DailyRecordings';\nimport { DailyRoom } from './DailyRoom';\nimport { DailyTranscriptions } from './DailyTranscriptions';\nimport { useCallObject } from './hooks/useCallObject';\n\ntype BaseProps =\n | DailyFactoryOptions\n | {\n callObject: DailyCall | null;\n };\n\ntype Props = BaseProps & {\n /**\n * Allows to override props for [RecoilRoot](https://recoiljs.org/docs/api-reference/core/RecoilRoot/).\n * In case you use Recoil in your own application, you can pass `override: false` to allow\n * daily-react to store its state in your application's RecoilRoot.\n * Default value: {}\n */\n recoilRootProps?: Omit;\n};\n\ntype EventsMap = Partial>>;\n\nexport const DailyProvider: React.FC> = ({\n children,\n recoilRootProps = {},\n ...props\n}) => {\n const eventsMap = useRef({});\n\n /**\n * Generic event handler to loop through registered event callbacks.\n */\n const handleEvent = useCallback((ev: DailyEventObject) => {\n if (!('action' in ev)) return;\n const event = ev.action as DailyEvent;\n for (let cb of eventsMap.current?.[event]?.values() ?? []) {\n cb(ev);\n }\n }, []);\n\n /**\n * In case events are set up via useDailyEvent before a DailyCall instance is available,\n * we'll register the events whenever daily is set.\n */\n const initEventHandlers = useCallback(\n (daily: DailyCall) => {\n if (!daily) return;\n (Object.keys(eventsMap.current) as DailyEvent[]).forEach((event) => {\n daily.off(event as DailyEvent, handleEvent);\n if (!daily.isDestroyed()) {\n daily.on(event as DailyEvent, handleEvent);\n }\n });\n },\n [handleEvent]\n );\n\n const externalCallObject = 'callObject' in props ? props.callObject : null;\n\n const memoizedOptions = useMemo(\n () => ('callObject' in props ? {} : props),\n [props]\n );\n const internalCallObject = useCallObject({\n options: memoizedOptions,\n shouldCreateInstance: useCallback(() => {\n return !('callObject' in props);\n }, [props]),\n });\n\n const callObject = externalCallObject ?? internalCallObject;\n\n useEffect(() => {\n if (!callObject) return;\n initEventHandlers(callObject);\n }, [callObject, initEventHandlers]);\n\n /**\n * Registers event callback.\n */\n const on = useCallback(\n (ev: DailyEvent, cb: Function, key: number) => {\n if (!eventsMap.current[ev]) {\n eventsMap.current[ev] = new Map();\n if (callObject) {\n /**\n * Make sure only 1 event listener is registered at anytime for handleEvent.\n * Otherwise, events sent from daily-js might be handled multiple times.\n */\n callObject.off(ev, handleEvent);\n if (!callObject.isDestroyed()) {\n callObject.on(ev, handleEvent);\n }\n }\n }\n if (!eventsMap.current[ev]?.has(key)) {\n eventsMap.current[ev]?.set(key, cb);\n }\n },\n [callObject, handleEvent]\n );\n\n /**\n * Unregisters event callback.\n */\n const off = useCallback(\n (ev: DailyEvent, key: number) => {\n eventsMap.current[ev]?.delete(key);\n if (eventsMap.current[ev]?.size === 0) {\n callObject?.off(ev, handleEvent);\n delete eventsMap.current[ev];\n }\n },\n [callObject, handleEvent]\n );\n\n return (\n \n \n \n \n \n \n \n \n \n \n {children}\n \n \n \n \n \n \n \n \n \n \n );\n};\n","import { DailyEventObject } from '@daily-co/daily-js';\nimport { useCallback, useDebugValue } from 'react';\nimport { useRecoilValue } from 'recoil';\n\nimport { participantState } from '../DailyParticipants';\nimport { useThrottledDailyEvent } from './useThrottledDailyEvent';\n\ninterface UseParticipantArgs {\n onParticipantLeft?(ev: DailyEventObject<'participant-left'>): void;\n onParticipantUpdated?(ev: DailyEventObject<'participant-updated'>): void;\n}\n\n/**\n * Returns the participant identified by the given sessionId.\n * @param sessionId – The participant's session_id or \"local\".\n * @deprecated Use [useParticipantProperty](https://docs.daily.co/reference/daily-react/use-participant-property) instead to only subscribe to required participant properties.\n */\nexport const useParticipant = (\n sessionId: string,\n { onParticipantLeft, onParticipantUpdated }: UseParticipantArgs = {}\n) => {\n const participant = useRecoilValue(participantState(sessionId));\n\n useThrottledDailyEvent(\n ['participant-updated', 'participant-left'],\n useCallback(\n (evts) => {\n const filteredEvts = evts.filter(\n (ev) => ev.participant.session_id === sessionId\n );\n if (!filteredEvts.length) return;\n filteredEvts.forEach((ev) => {\n switch (ev.action) {\n case 'participant-updated':\n onParticipantUpdated?.(ev);\n break;\n case 'participant-left':\n onParticipantLeft?.(ev);\n break;\n }\n });\n },\n [onParticipantLeft, onParticipantUpdated, sessionId]\n )\n );\n\n useDebugValue(participant);\n\n return participant;\n};\n","import { DailyEventObject } from '@daily-co/daily-js';\nimport { useCallback, useDebugValue, useEffect, useState } from 'react';\nimport { useRecoilValue } from 'recoil';\n\nimport { activeIdState } from '../DailyParticipants';\nimport { useDaily } from './useDaily';\nimport { useDailyEvent } from './useDailyEvent';\nimport { useParticipant } from './useParticipant';\n\ninterface UseActiveParticipantArgs {\n /**\n * If set to true, useActiveParticipant will never return the local participant.\n */\n ignoreLocal?: boolean;\n /**\n * Optional event callback for [active-speaker-change](https://docs.daily.co/reference/daily-js/events/meeting-events#active-speaker-change) event listener.\n */\n onActiveSpeakerChange?(ev: DailyEventObject<'active-speaker-change'>): void;\n}\n\n/**\n * Returns the most recent participant mentioned in an [active-speaker-change](https://docs.daily.co/reference/daily-js/events/meeting-events#active-speaker-change) event.\n * @deprecated Use [useActiveSpeakerId](https://docs.daily.co/reference/daily-react/use-active-speaker-id) instead.\n */\nexport const useActiveParticipant = ({\n ignoreLocal = false,\n onActiveSpeakerChange,\n}: UseActiveParticipantArgs = {}) => {\n const daily = useDaily();\n const recentActiveId = useRecoilValue(activeIdState);\n const [activeId, setActiveId] = useState('');\n const activeParticipant = useParticipant(activeId);\n\n useEffect(() => {\n if (!daily) return;\n const local = daily?.participants()?.local;\n if (ignoreLocal && recentActiveId === local?.session_id) return;\n\n // setting activeId as string to avoid passing null to useParticipant hook\n setActiveId(recentActiveId ?? '');\n }, [daily, ignoreLocal, recentActiveId]);\n\n useDailyEvent(\n 'active-speaker-change',\n useCallback(\n (ev) => {\n onActiveSpeakerChange?.(ev);\n },\n [onActiveSpeakerChange]\n )\n );\n\n useDebugValue(activeParticipant);\n\n return activeParticipant;\n};\n","import { DailyEventObjectAppMessage } from '@daily-co/daily-js';\nimport { useCallback } from 'react';\n\nimport { useDaily } from './useDaily';\nimport { useDailyEvent } from './useDailyEvent';\n\ntype SendAppMessage = (data: Data, to?: string) => void;\n\ninterface UseAppMessageArgs {\n /**\n * Optional event callback for [app-message](https://docs.daily.co/reference/daily-js/events/participant-events#app-message) event listener.\n * Receives this hook's sendAppMessage as an additional argument to avoid circular dependencies.\n */\n onAppMessage?(\n ev: DailyEventObjectAppMessage,\n sendAppMessage?: SendAppMessage\n ): void;\n}\n\n/**\n * React hook to setup [app-message](https://docs.daily.co/reference/daily-js/events/participant-events#app-message) listeners and\n * to send messages via [sendAppMessage](https://docs.daily.co/reference/daily-js/instance-methods/send-app-message).\n */\nexport const useAppMessage = ({\n onAppMessage,\n}: UseAppMessageArgs = {}) => {\n const daily = useDaily();\n\n const sendAppMessage: SendAppMessage = useCallback(\n (data, to = '*') => {\n if (!daily) return;\n daily.sendAppMessage(data, to);\n },\n [daily]\n );\n\n const handleAppMessage = useCallback(\n (ev: DailyEventObjectAppMessage) => {\n onAppMessage?.(ev, sendAppMessage);\n },\n [onAppMessage, sendAppMessage]\n );\n\n useDailyEvent('app-message', handleAppMessage);\n\n return sendAppMessage;\n};\n","const audioLevelProcessor = `\n class AudioLevelProcessor extends AudioWorkletProcessor {\n volume;\n interval;\n nextFrame;\n \n constructor() {\n super();\n this.volume = 0;\n this.interval = 25;\n this.nextFrame = this.interval;\n }\n \n get intervalInFrames() {\n // sampleRate is globally defined in AudioWorklets.\n // See https://developer.mozilla.org/en-US/docs/Web/API/AudioWorkletGlobalScope\n // eslint-disable-next-line no-undef\n return (this.interval / 1000) * sampleRate;\n }\n \n process(inputList) {\n const firstInput = inputList[0];\n \n if (firstInput.length > 0) {\n const inputData = firstInput[0];\n let total = 0;\n \n for (let i = 0; i < inputData.length; ++i) {\n total += Math.abs(inputData[i]);\n }\n \n const rms = Math.sqrt(total / inputData.length);\n this.volume = Math.max(0, Math.min(1, rms));\n \n this.nextFrame -= inputData.length;\n if (this.nextFrame < 0) {\n this.nextFrame += this.intervalInFrames;\n this.port.postMessage({ volume: this.volume });\n }\n }\n \n return true;\n }\n }\n \n registerProcessor('audiolevel', AudioLevelProcessor); \n`;\n\nexport const inlineAudioWorklet = `data:application/javascript;charset=utf8,${encodeURIComponent(\n audioLevelProcessor\n)}`;\n","import { useEffect, useRef } from 'react';\n\nimport { inlineAudioWorklet } from '../lib/inlineAudioWorklet';\n/**\n * Returns the volume level of a given MediaStreamTrack.\n * @param mediaTrack The MediaStreamTrack to be analysed.\n * @param onVolumeChange The function to execute when the volume changes. Can be used to visualise audio output.\n */\nexport const useAudioLevel = (\n mediaTrack: MediaStreamTrack | undefined,\n onVolumeChange: (volume: number) => void\n) => {\n const audioCtx = useRef();\n\n useEffect(\n function setupStreamAndStartProcessing() {\n // No mediaTrack. Stop immediately.\n if (!mediaTrack) return;\n const AudioCtx =\n typeof AudioContext !== 'undefined'\n ? AudioContext\n : typeof window.webkitAudioContext !== 'undefined'\n ? window.webkitAudioContext\n : null;\n // No AudioContext available in browser. Can't measure audio volume.\n if (!AudioCtx) return;\n if (!audioCtx.current) {\n // No audio context initialized. Initializing now.\n audioCtx.current = new AudioCtx();\n }\n const audioContext = audioCtx.current;\n // Audio context could not be initialized. Stopping.\n if (!audioContext) return;\n\n const mediaStreamSource = audioContext.createMediaStreamSource(\n new MediaStream([mediaTrack])\n );\n let node: AudioWorkletNode | null;\n let gainNode: GainNode;\n\n const startProcessing = async () => {\n /**\n * Try to add the module only once.\n * In case it's not added to the audio context, yet, trying to initialize it will fail.\n * There's only one real reason for `new AudioWorkletNode` to fail and that is\n * when the corresponding module isn't added to the audio context, yet.\n * This makes sure we only add the module once.\n *\n * We're inlining the worklet instead of loading it via a URL as not to complicate bundling\n * this package.\n */\n try {\n node = new AudioWorkletNode(audioContext, 'audiolevel');\n gainNode = audioContext.createGain();\n } catch {\n try {\n await audioContext.audioWorklet.addModule(inlineAudioWorklet);\n node = new AudioWorkletNode(audioContext, 'audiolevel');\n gainNode = audioContext.createGain();\n } catch (e) {\n console.error(e);\n }\n }\n\n if (!(node && gainNode)) return;\n\n node.port.onmessage = (event) => {\n let volume = 0;\n if (event.data.volume) volume = event.data.volume;\n if (!node) return;\n onVolumeChange(volume);\n };\n\n gainNode.gain.value = 0;\n\n try {\n mediaStreamSource\n .connect(node)\n .connect(gainNode)\n .connect(audioContext.destination);\n } catch (e) {\n console.warn(e);\n }\n };\n\n startProcessing();\n\n return () => {\n node?.disconnect();\n node = null;\n mediaStreamSource?.disconnect();\n };\n },\n [onVolumeChange, mediaTrack]\n );\n};\n","import { MediaTrackState, useMediaTrack } from './useMediaTrack';\n\n/**\n * Returns a participant's audio track and state.\n * @param participantId The participant's session_id.\n */\nexport const useAudioTrack = (participantId: string): MediaTrackState =>\n useMediaTrack(participantId, 'audio');\n","import { useCallInstance } from './useCallInstance';\n\ntype Props = Parameters[1];\n\n/**\n * Helper hook to maintain custom callFrame instances in React codebases.\n */\nexport const useCallFrame = (props: Props) =>\n useCallInstance('callFrame', props);\n","import { DailyCpuLoadStats, DailyEventObject } from '@daily-co/daily-js';\nimport deepEqual from 'fast-deep-equal';\nimport { useCallback, useDebugValue, useEffect } from 'react';\nimport { atom, useRecoilCallback, useRecoilValue } from 'recoil';\n\nimport { useDaily } from './useDaily';\nimport { useDailyEvent } from './useDailyEvent';\nimport { useMeetingState } from './useMeetingState';\n\ninterface CPULoad {\n state: DailyCpuLoadStats['cpuLoadState'];\n reason: DailyCpuLoadStats['cpuLoadStateReason'];\n}\n\nconst CPULoadState = atom({\n key: 'cpu-load-state',\n default: {\n state: 'low',\n reason: 'none',\n },\n});\n\ninterface Props {\n onCPULoadChange?(ev: DailyEventObject<'cpu-load-change'>): void;\n}\n\n/**\n * Returns the current CPU load as reported by daily-js [cpu-load-change](https://docs.daily.co/reference/daily-js/events/quality-events#cpu-load-change) events\n * and [getCpuLoadStats](https://docs.daily.co/reference/daily-js/instance-methods/get-cpu-load-stats).\n */\nexport const useCPULoad = ({ onCPULoadChange }: Props = {}) => {\n const cpu = useRecoilValue(CPULoadState);\n const daily = useDaily();\n const meetingState = useMeetingState();\n\n const updateCPULoadState = useRecoilCallback(\n ({ set, snapshot }) =>\n async (cpu: CPULoad) => {\n const prev = await snapshot.getPromise(CPULoadState);\n if (deepEqual(prev, cpu)) return;\n set(CPULoadState, cpu);\n },\n []\n );\n\n useEffect(() => {\n let mounted = true;\n if (!daily || daily.isDestroyed() || meetingState !== 'joined-meeting')\n return;\n daily.getCpuLoadStats().then((stats) => {\n if (!mounted) return;\n updateCPULoadState({\n state: stats.cpuLoadState,\n reason: stats.cpuLoadStateReason,\n });\n });\n return () => {\n mounted = false;\n };\n }, [daily, meetingState, updateCPULoadState]);\n\n useDailyEvent(\n 'cpu-load-change',\n useCallback(\n (ev) => {\n updateCPULoadState({\n state: ev.cpuLoadState,\n reason: ev.cpuLoadStateReason,\n });\n onCPULoadChange?.(ev);\n },\n [onCPULoadChange, updateCPULoadState]\n )\n );\n\n useDebugValue(cpu);\n\n return cpu;\n};\n","import { useDebugValue } from 'react';\nimport { useRecoilValue } from 'recoil';\n\nimport { meetingErrorState, nonFatalErrorState } from '../DailyMeeting';\n\n/**\n * Returns a meeting's last known errors.\n */\nexport const useDailyError = () => {\n const meetingError = useRecoilValue(meetingErrorState);\n const nonFatalError = useRecoilValue(nonFatalErrorState);\n const result = {\n meetingError,\n nonFatalError,\n };\n useDebugValue(result);\n return result;\n};\n","import { useCallback, useContext, useDebugValue } from 'react';\nimport { useRecoilValue } from 'recoil';\n\nimport {\n cameraDevicesState,\n generalCameraState,\n generalMicrophoneState,\n lastCameraErrorState,\n microphoneDevicesState,\n speakerDevicesState,\n} from '../DailyDevices';\nimport { DailyDevicesContext } from '../DailyDevicesContext';\nimport { useDaily } from './useDaily';\n\n/**\n * This hook allows access to information about the user's devices and their state.\n */\nexport const useDevices = () => {\n const daily = useDaily();\n\n const camState = useRecoilValue(generalCameraState);\n const micState = useRecoilValue(generalMicrophoneState);\n const camDevices = useRecoilValue(cameraDevicesState);\n const micDevices = useRecoilValue(microphoneDevicesState);\n const speakerDevices = useRecoilValue(speakerDevicesState);\n const cameraError = useRecoilValue(lastCameraErrorState);\n\n const { refreshDevices } = useContext(DailyDevicesContext);\n\n /**\n * Sets video input device to given deviceId.\n */\n const setCamera = useCallback(\n async (deviceId: string) => {\n await daily?.setInputDevicesAsync({\n audioDeviceId: null,\n videoDeviceId: deviceId,\n });\n },\n [daily]\n );\n\n /**\n * Sets audio input device to given deviceId.\n */\n const setMicrophone = useCallback(\n async (deviceId: string) => {\n await daily?.setInputDevicesAsync({\n audioDeviceId: deviceId,\n videoDeviceId: null,\n });\n },\n [daily]\n );\n\n /**\n * Sets audio output device to given deviceId.\n */\n const setSpeaker = useCallback(\n async (deviceId: string) => {\n await daily?.setOutputDeviceAsync({\n outputDeviceId: deviceId,\n });\n },\n [daily]\n );\n\n const errorStates: typeof camState[] = [\n 'blocked',\n 'in-use',\n 'not-found',\n 'constraints-invalid',\n 'constraints-none-specified',\n 'undefined-mediadevices',\n 'unknown',\n ];\n\n const result = {\n /**\n * Most recent error object emitted via [camera-error event](https://docs.daily.co/reference/daily-js/events/meeting-events#camera-error).\n */\n cameraError,\n /**\n * A list of the user's camera (videoinput) devices. See [MediaDeviceInfo](https://developer.mozilla.org/en-US/docs/Web/API/MediaDeviceInfo) for more info.\n */\n cameras: camDevices,\n /**\n * The general state for camera access.\n */\n camState,\n /**\n * Holds the currently selected camera.\n */\n currentCam: camDevices.find((cam) => cam.selected),\n /**\n * Holds the currently selected microphone.\n */\n currentMic: micDevices.find((mic) => mic.selected),\n /**\n * Holds the currently selected speaker.\n */\n currentSpeaker: speakerDevices.find((speaker) => speaker.selected),\n /**\n * Indicates that there's an issue with camera devices.\n */\n hasCamError: errorStates.includes(camState),\n /**\n * Indicates that there's an issue with microphone devices.\n */\n hasMicError: errorStates.includes(micState),\n /**\n * A list of the user's microphone (audioinput) devices. See [MediaDeviceInfo](https://developer.mozilla.org/en-US/docs/Web/API/MediaDeviceInfo) for more info.\n */\n microphones: micDevices,\n /**\n * The general state for microphone access.\n */\n micState,\n /**\n * Refreshes the list of devices using [enumerateDevices](https://docs.daily.co/reference/daily-js/instance-methods/enumerate-devices).\n */\n refreshDevices,\n /**\n * Allows to switch to the camera with the specified deviceId. Calls [setInputDevicesAsync](https://docs.daily.co/reference/daily-js/instance-methods/set-input-devices-async) internally.\n */\n setCamera,\n /**\n * Allows to switch to the microphone with the specified deviceId. Calls [setInputDevicesAsync](https://docs.daily.co/reference/daily-js/instance-methods/set-input-devices-async) internally.\n */\n setMicrophone,\n /**\n * Allows to switch to the speaker with the specified deviceId. Calls [setOutputDevice](https://docs.daily.co/reference/daily-js/instance-methods/set-output-device) internally.\n */\n setSpeaker,\n /**\n * A list of the user's speaker (audiooutput) devices. See [MediaDeviceInfo](https://developer.mozilla.org/en-US/docs/Web/API/MediaDeviceInfo) for more info.\n */\n speakers: speakerDevices,\n };\n\n useDebugValue(result);\n\n return result;\n};\n","import {\n DailyCall,\n DailyEventObject,\n DailyEventObjectNonFatalError,\n DailyInputSettings,\n} from '@daily-co/daily-js';\nimport { useCallback, useDebugValue, useEffect } from 'react';\nimport { atom, useRecoilCallback, useRecoilValue } from 'recoil';\n\nimport { RECOIL_PREFIX } from '../lib/constants';\nimport { Reconstruct } from '../types/Reconstruct';\nimport { useDaily } from './useDaily';\nimport { useDailyError } from './useDailyError';\nimport { useDailyEvent } from './useDailyEvent';\n\ntype DailyEventObjectInputSettingsError = Reconstruct<\n DailyEventObjectNonFatalError,\n 'type',\n 'input-settings-error'\n>;\n\ninterface UseInputSettingsArgs {\n onError?(ev: DailyEventObjectInputSettingsError): void;\n onInputSettingsUpdated?(ev: DailyEventObject<'input-settings-updated'>): void;\n}\n\nconst inputSettingsState = atom({\n key: RECOIL_PREFIX + 'input-settings',\n default: null,\n});\n\nexport const useInputSettings = ({\n onError,\n onInputSettingsUpdated,\n}: UseInputSettingsArgs = {}) => {\n const inputSettings = useRecoilValue(inputSettingsState);\n const { nonFatalError } = useDailyError();\n const daily = useDaily();\n\n const updateInputSettingsState = useRecoilCallback(\n ({ set }) =>\n (inputSettings: DailyInputSettings) => {\n set(inputSettingsState, inputSettings);\n },\n []\n );\n\n useEffect(() => {\n if (!daily) return;\n daily.getInputSettings().then(updateInputSettingsState);\n }, [daily, updateInputSettingsState]);\n\n /**\n * Handle 'input-settings-updated' events.\n */\n useDailyEvent(\n 'input-settings-updated',\n useCallback(\n (ev) => {\n updateInputSettingsState(ev.inputSettings);\n onInputSettingsUpdated?.(ev);\n },\n [onInputSettingsUpdated, updateInputSettingsState]\n )\n );\n\n /**\n * Handle nonfatal errors of type 'input-settings-error'.\n */\n useDailyEvent(\n 'nonfatal-error',\n useCallback(\n (ev) => {\n if (ev.type !== 'input-settings-error') return;\n onError?.(ev as DailyEventObjectInputSettingsError);\n },\n [onError]\n )\n );\n\n /**\n * Calls daily.updateInputSettings internally.\n */\n const updateInputSettings = useCallback(\n (...args: Parameters) => {\n return daily?.updateInputSettings(...args);\n },\n [daily]\n );\n\n const result = {\n errorMsg:\n nonFatalError?.type === 'input-settings-error'\n ? nonFatalError.errorMsg\n : null,\n inputSettings,\n updateInputSettings,\n };\n\n useDebugValue(result);\n\n return result;\n};\n","import {\n DailyCall,\n DailyEventObject,\n DailyEventObjectNonFatalError,\n} from '@daily-co/daily-js';\nimport { useCallback, useDebugValue } from 'react';\nimport { useRecoilValue } from 'recoil';\n\nimport { liveStreamingState } from '../DailyLiveStreaming';\nimport { Reconstruct } from '../types/Reconstruct';\nimport { useDaily } from './useDaily';\nimport { useDailyEvent } from './useDailyEvent';\n\ntype DailyEventObjectLiveStreamingWarning = Reconstruct<\n DailyEventObjectNonFatalError,\n 'type',\n 'live-streaming-warning'\n>;\n\ninterface UseLiveStreamingArgs {\n onLiveStreamingStarted?(ev: DailyEventObject<'live-streaming-started'>): void;\n onLiveStreamingStopped?(ev: DailyEventObject<'live-streaming-stopped'>): void;\n onLiveStreamingUpdated?(ev: DailyEventObject<'live-streaming-updated'>): void;\n onLiveStreamingError?(ev: DailyEventObject<'live-streaming-error'>): void;\n onLiveStreamingWarning?(ev: DailyEventObjectLiveStreamingWarning): void;\n}\n\n/**\n * This hook allows to setup [live streaming events](https://docs.daily.co/reference/daily-js/events/live-streaming-events),\n * as well as starting, stopping and updating live streams.\n *\n * Returns the current live streaming state, incl. the current layout and potential errorMsg.\n */\nexport const useLiveStreaming = ({\n onLiveStreamingError,\n onLiveStreamingStarted,\n onLiveStreamingStopped,\n onLiveStreamingUpdated,\n onLiveStreamingWarning,\n}: UseLiveStreamingArgs = {}) => {\n const daily = useDaily();\n const state = useRecoilValue(liveStreamingState);\n\n useDailyEvent(\n 'live-streaming-started',\n useCallback(\n (ev) => {\n onLiveStreamingStarted?.(ev);\n },\n [onLiveStreamingStarted]\n )\n );\n useDailyEvent(\n 'live-streaming-stopped',\n useCallback(\n (ev) => {\n onLiveStreamingStopped?.(ev);\n },\n [onLiveStreamingStopped]\n )\n );\n useDailyEvent(\n 'live-streaming-updated',\n useCallback(\n (ev) => {\n onLiveStreamingUpdated?.(ev);\n },\n [onLiveStreamingUpdated]\n )\n );\n useDailyEvent(\n 'live-streaming-error',\n useCallback(\n (ev) => {\n onLiveStreamingError?.(ev);\n },\n [onLiveStreamingError]\n )\n );\n useDailyEvent(\n 'nonfatal-error',\n useCallback(\n (ev) => {\n if (ev.type !== 'live-streaming-warning') return;\n onLiveStreamingWarning?.(ev as DailyEventObjectLiveStreamingWarning);\n },\n [onLiveStreamingWarning]\n )\n );\n\n const startLiveStreaming = useCallback(\n (...args: Parameters) => {\n if (!daily) return;\n daily.startLiveStreaming(...args);\n },\n [daily]\n );\n\n const stopLiveStreaming = useCallback(\n (...args: Parameters) => {\n if (!daily) return;\n daily.stopLiveStreaming(...args);\n },\n [daily]\n );\n\n const updateLiveStreaming = useCallback(\n (...args: Parameters) => {\n if (!daily) return;\n daily.updateLiveStreaming(...args);\n },\n [daily]\n );\n\n const result = {\n ...state,\n startLiveStreaming,\n stopLiveStreaming,\n updateLiveStreaming,\n };\n\n useDebugValue(result);\n\n return result;\n};\n","import { useDebugValue } from 'react';\nimport { useRecoilValue } from 'recoil';\n\nimport { localIdState } from '../DailyParticipants';\nimport { useParticipant } from './useParticipant';\n\n/**\n * Returns the [participants() object](https://docs.daily.co/reference/daily-js/instance-methods/participants) for the local user.\n * @deprecated Use [useLocalSessionId](https://docs.daily.co/reference/daily-react/use-local-session-id) instead.\n */\nexport const useLocalParticipant = (): ReturnType => {\n const localId = useRecoilValue(localIdState);\n const localParticipant = useParticipant(localId);\n useDebugValue(localParticipant);\n return localParticipant;\n};\n","import { DailyEventObjectNonFatalError } from '@daily-co/daily-js';\nimport { useCallback, useDebugValue } from 'react';\nimport { useRecoilValue } from 'recoil';\n\nimport { meetingSessionDataState } from '../DailyMeeting';\nimport { Reconstruct } from '../types/Reconstruct';\nimport { useDailyEvent } from './useDailyEvent';\n\ntype DailyEventObjectMeetingSessionDataError = Reconstruct<\n DailyEventObjectNonFatalError,\n 'type',\n 'meeting-session-data-error'\n>;\n\ninterface Props {\n onError?(ev: DailyEventObjectMeetingSessionDataError): void;\n}\n\n/**\n * Returns a meeting's current session data and topology.\n */\nexport const useMeetingSessionState = ({ onError }: Props = {}) => {\n const meetingSessionState = useRecoilValue(meetingSessionDataState);\n\n useDailyEvent(\n 'nonfatal-error',\n useCallback(\n (ev) => {\n if (ev.type !== 'meeting-session-data-error') return;\n onError?.(ev as DailyEventObjectMeetingSessionDataError);\n },\n [onError]\n )\n );\n\n const result = {\n data: meetingSessionState?.data as T,\n topology: meetingSessionState?.topology,\n };\n\n useDebugValue(result);\n\n return result;\n};\n","import { DailyEventObject } from '@daily-co/daily-js';\nimport { useCallback, useDebugValue } from 'react';\nimport { useRecoilValue } from 'recoil';\n\nimport {\n networkQualityState,\n networkThresholdState,\n topologyState,\n} from '../DailyNetwork';\nimport { useDaily } from './useDaily';\nimport { useDailyEvent } from './useDailyEvent';\n\ninterface UseNetworkArgs {\n onNetworkConnection?(ev: DailyEventObject<'network-connection'>): void;\n onNetworkQualityChange?(ev: DailyEventObject<'network-quality-change'>): void;\n}\n\n/**\n * Returns current information about network quality and topology.\n * Allows to setup event listeners for daily's [network events](https://docs.daily.co/reference/daily-js/events/network-events).\n */\nexport const useNetwork = ({\n onNetworkConnection,\n onNetworkQualityChange,\n}: UseNetworkArgs = {}) => {\n const daily = useDaily();\n\n const topology = useRecoilValue(topologyState);\n const quality = useRecoilValue(networkQualityState);\n const threshold = useRecoilValue(networkThresholdState);\n\n useDailyEvent(\n 'network-connection',\n useCallback(\n (ev) => {\n onNetworkConnection?.(ev);\n },\n [onNetworkConnection]\n )\n );\n useDailyEvent(\n 'network-quality-change',\n useCallback(\n (ev) => {\n onNetworkQualityChange?.(ev);\n },\n [onNetworkQualityChange]\n )\n );\n\n const getStats = useCallback(async () => {\n const newStats = await daily?.getNetworkStats();\n return newStats?.stats;\n }, [daily]);\n\n const result = {\n getStats,\n quality,\n threshold,\n topology,\n };\n\n useDebugValue(result);\n\n return result;\n};\n","import { DailyEventObject, DailyParticipantCounts } from '@daily-co/daily-js';\nimport { useCallback, useDebugValue, useEffect } from 'react';\nimport { atom, useRecoilCallback, useRecoilValue } from 'recoil';\n\nimport { RECOIL_PREFIX } from '../lib/constants';\nimport { useDaily } from './useDaily';\nimport { useDailyEvent } from './useDailyEvent';\n\nconst participantCountsState = atom({\n key: RECOIL_PREFIX + 'participant-counts',\n default: {\n hidden: 0,\n present: 0,\n },\n});\n\ninterface Props {\n onParticipantCountsUpdated?(\n ev: DailyEventObject<'participant-counts-updated'>\n ): void;\n}\n\n/**\n * Returns participant counts for hidden and present participants.\n */\nexport const useParticipantCounts = ({\n onParticipantCountsUpdated,\n}: Props = {}) => {\n const daily = useDaily();\n const participantCounts = useRecoilValue(participantCountsState);\n\n const updateCounts = useRecoilCallback(\n ({ set }) =>\n (counts: DailyParticipantCounts) => {\n set(participantCountsState, counts);\n },\n []\n );\n\n useDailyEvent(\n 'participant-counts-updated',\n useCallback(\n (ev) => {\n updateCounts(ev.participantCounts);\n onParticipantCountsUpdated?.(ev);\n },\n [onParticipantCountsUpdated, updateCounts]\n )\n );\n\n useEffect(() => {\n if (!daily || daily.isDestroyed()) return;\n updateCounts(daily.participantCounts());\n }, [daily, updateCounts]);\n\n useDebugValue(participantCounts);\n\n return participantCounts;\n};\n","import { useDebugValue } from 'react';\n\nimport { useLocalSessionId } from './useLocalSessionId';\nimport { useParticipantProperty } from './useParticipantProperty';\n\n/**\n * Returns parsed permissions for a given participant.\n * In case no `sessionId` is passed, the hook returns permissions for the local participant.\n * @param sessionId The participant's session_id (optional)\n */\nexport const usePermissions = (sessionId?: string) => {\n const localSessionId = useLocalSessionId();\n const permissions = useParticipantProperty(\n sessionId ?? localSessionId,\n 'permissions'\n );\n\n const canSendAudio =\n typeof permissions?.canSend === 'boolean'\n ? permissions?.canSend\n : Boolean(permissions?.canSend?.has('audio'));\n const canSendVideo =\n typeof permissions?.canSend === 'boolean'\n ? permissions?.canSend\n : Boolean(permissions?.canSend?.has('video'));\n const canSendCustomAudio =\n typeof permissions?.canSend === 'boolean'\n ? permissions?.canSend\n : Boolean(permissions?.canSend?.has('customAudio'));\n const canSendCustomVideo =\n typeof permissions?.canSend === 'boolean'\n ? permissions?.canSend\n : Boolean(permissions?.canSend?.has('customVideo'));\n const canSendScreenAudio =\n typeof permissions?.canSend === 'boolean'\n ? permissions?.canSend\n : Boolean(permissions?.canSend?.has('screenAudio'));\n const canSendScreenVideo =\n typeof permissions?.canSend === 'boolean'\n ? permissions?.canSend\n : Boolean(permissions?.canSend?.has('screenVideo'));\n const canAdminParticipants =\n typeof permissions?.canAdmin === 'boolean'\n ? permissions?.canAdmin\n : Boolean(permissions?.canAdmin?.has('participants'));\n const canAdminStreaming =\n typeof permissions?.canAdmin === 'boolean'\n ? permissions?.canAdmin\n : Boolean(permissions?.canAdmin?.has('streaming'));\n const canAdminTranscription =\n typeof permissions?.canAdmin === 'boolean'\n ? permissions?.canAdmin\n : Boolean(permissions?.canAdmin?.has('transcription'));\n\n const result = {\n canAdminParticipants,\n canAdminStreaming,\n canAdminTranscription,\n canSendAudio,\n canSendCustomAudio,\n canSendCustomVideo,\n canSendScreenAudio,\n canSendScreenVideo,\n canSendVideo,\n hasPresence: permissions?.hasPresence,\n permissions,\n };\n\n useDebugValue(result);\n\n return result;\n};\n","import {\n DailyCall,\n DailyEventObject,\n DailyReceiveSettings,\n DailySingleParticipantReceiveSettings,\n} from '@daily-co/daily-js';\nimport { useCallback, useDebugValue, useEffect } from 'react';\nimport { atomFamily, useRecoilCallback, useRecoilValue } from 'recoil';\n\nimport { RECOIL_PREFIX } from '../lib/constants';\nimport { useDaily } from './useDaily';\nimport { useDailyEvent } from './useDailyEvent';\nimport { useMeetingState } from './useMeetingState';\n\nconst participantReceiveSettingsState = atomFamily<\n DailySingleParticipantReceiveSettings,\n string\n>({\n key: RECOIL_PREFIX + 'participant-receive-settings',\n default: {},\n});\n\ninterface UseReceiveSettingsArgs {\n id?: string;\n onReceiveSettingsUpdated?(\n ev: DailyEventObject<'receive-settings-updated'>\n ): void;\n}\n\n/**\n * Allows to read and set receiveSettings.\n * In case receiveSettings for participant specified by id are empty, not set or 'inherit',\n * base receiveSettings will be returned.\n * In case meeting is not in joined state, calls to updateReceiveSettings will be silently ignored.\n */\nexport const useReceiveSettings = ({\n id = 'base',\n onReceiveSettingsUpdated,\n}: UseReceiveSettingsArgs = {}) => {\n const baseSettings = useRecoilValue(participantReceiveSettingsState('base'));\n const receiveSettings = useRecoilValue(participantReceiveSettingsState(id));\n const daily = useDaily();\n const meetingState = useMeetingState();\n\n const updateReceiveSettingsState = useRecoilCallback(\n ({ transact_UNSTABLE }) =>\n (receiveSettings: DailyReceiveSettings) => {\n transact_UNSTABLE(({ reset, set }) => {\n const { ...ids } = receiveSettings;\n for (let [id, settings] of Object.entries(ids)) {\n set(participantReceiveSettingsState(id), settings);\n }\n if (!(id in ids)) {\n reset(participantReceiveSettingsState(id));\n }\n });\n },\n [id]\n );\n useDailyEvent(\n 'receive-settings-updated',\n useCallback(\n (ev) => {\n updateReceiveSettingsState(ev.receiveSettings);\n onReceiveSettingsUpdated?.(ev);\n },\n [onReceiveSettingsUpdated, updateReceiveSettingsState]\n )\n );\n\n useEffect(() => {\n if (!daily || daily.isDestroyed()) return;\n daily.getReceiveSettings().then(updateReceiveSettingsState);\n }, [daily, updateReceiveSettingsState]);\n\n const updateReceiveSettings = useCallback(\n (...args: Parameters) => {\n if (!daily || meetingState !== 'joined-meeting') return;\n daily?.updateReceiveSettings?.(...args);\n },\n [daily, meetingState]\n );\n\n const result = {\n receiveSettings:\n id === 'base' || Object.keys(receiveSettings).length === 0\n ? baseSettings\n : receiveSettings,\n updateReceiveSettings,\n };\n\n useDebugValue(result);\n\n return result;\n};\n","import { DailyCall, DailyEventObject } from '@daily-co/daily-js';\nimport { useCallback, useDebugValue } from 'react';\nimport { useRecoilValue } from 'recoil';\n\nimport { recordingState } from '../DailyRecordings';\nimport { useDaily } from './useDaily';\nimport { useDailyEvent } from './useDailyEvent';\n\ninterface UseRecordingArgs {\n onRecordingData?(ev: DailyEventObject<'recording-data'>): void;\n onRecordingError?(ev: DailyEventObject<'recording-error'>): void;\n onRecordingStarted?(ev: DailyEventObject<'recording-started'>): void;\n onRecordingStopped?(ev: DailyEventObject<'recording-stopped'>): void;\n}\n\nexport const useRecording = ({\n onRecordingData,\n onRecordingError,\n onRecordingStarted,\n onRecordingStopped,\n}: UseRecordingArgs = {}) => {\n const daily = useDaily();\n const state = useRecoilValue(recordingState);\n\n useDailyEvent(\n 'recording-started',\n useCallback(\n (ev) => {\n onRecordingStarted?.(ev);\n },\n [onRecordingStarted]\n )\n );\n useDailyEvent(\n 'recording-stopped',\n useCallback(\n (ev) => {\n onRecordingStopped?.(ev);\n },\n [onRecordingStopped]\n )\n );\n useDailyEvent(\n 'recording-error',\n useCallback(\n (ev) => {\n onRecordingError?.(ev);\n },\n [onRecordingError]\n )\n );\n useDailyEvent(\n 'recording-data',\n useCallback(\n (ev) => {\n onRecordingData?.(ev);\n },\n [onRecordingData]\n )\n );\n\n /**\n * Starts the recording with the given optional options.\n */\n const startRecording = useCallback(\n (...args: Parameters) => {\n if (!daily) return;\n daily.startRecording(...args);\n },\n [daily]\n );\n\n /**\n * Stops a recording.\n */\n const stopRecording = useCallback(\n (...args: Parameters) => {\n if (!daily) return;\n daily.stopRecording(...args);\n },\n [daily]\n );\n\n /**\n * Updates a running recording's layout configuration.\n */\n const updateRecording = useCallback(\n (...args: Parameters) => {\n if (!daily) return;\n daily.updateRecording(...args);\n },\n [daily]\n );\n\n const result = {\n ...state,\n startRecording,\n stopRecording,\n updateRecording,\n };\n\n useDebugValue(result);\n\n return result;\n};\n","import { DailyRoomInfo } from '@daily-co/daily-js';\nimport { useDebugValue } from 'react';\nimport { useRecoilValue } from 'recoil';\n\nimport { roomState } from '../DailyRoom';\n\n/**\n * Stateful hook to work with room, domain and token configuration for a daily room.\n * Includes room default values.\n */\nexport const useRoom = (): DailyRoomInfo | null => {\n const room = useRecoilValue(roomState);\n useDebugValue(room);\n return room;\n};\n","import { useDebugValue, useEffect, useState } from 'react';\nimport { useRecoilValue } from 'recoil';\n\nimport { localJoinDateState } from '../DailyParticipants';\nimport { useRoom } from './useRoom';\n\ninterface Countdown {\n hours: number;\n minutes: number;\n seconds: number;\n}\n\ninterface Props {\n onCountdown?(countdown: Countdown): void;\n}\n\nexport const useRoomExp = ({ onCountdown }: Props = {}) => {\n const localJoinDate = useRecoilValue(localJoinDateState);\n const room = useRoom();\n\n const [ejectDate, setEjectDate] = useState(null);\n\n useEffect(() => {\n const ejectAfterElapsed =\n room?.tokenConfig?.eject_after_elapsed ??\n room?.config?.eject_after_elapsed ??\n 0;\n const expUTCTimeStamp = room?.tokenConfig?.exp ?? room?.config?.exp ?? 0;\n const ejectAtExp =\n room?.tokenConfig?.eject_at_token_exp ??\n room?.config?.eject_at_room_exp ??\n false;\n\n let newEjectDate: Date = new Date(0);\n\n if (ejectAfterElapsed && localJoinDate) {\n newEjectDate = new Date(\n localJoinDate.getTime() + 1000 * ejectAfterElapsed\n );\n }\n\n if (ejectAtExp && expUTCTimeStamp) {\n const expDate = new Date(expUTCTimeStamp * 1000);\n if (\n !newEjectDate.getTime() ||\n (newEjectDate.getTime() > 0 && expDate < newEjectDate)\n )\n newEjectDate = expDate;\n }\n\n if (newEjectDate.getTime() === 0) return;\n\n setEjectDate((oldEjectDate) =>\n oldEjectDate?.getTime() !== newEjectDate.getTime()\n ? newEjectDate\n : oldEjectDate\n );\n }, [\n localJoinDate,\n room?.config?.eject_after_elapsed,\n room?.config?.eject_at_room_exp,\n room?.config?.exp,\n room?.tokenConfig?.eject_after_elapsed,\n room?.tokenConfig?.eject_at_token_exp,\n room?.tokenConfig?.exp,\n ]);\n\n useEffect(() => {\n if (!ejectDate || ejectDate.getTime() === 0) return;\n\n const interval = setInterval(() => {\n const eject = (ejectDate?.getTime() ?? 0) / 1000;\n const now = Date.now() / 1000;\n const diff = eject - now;\n if (diff < 0) return;\n const hours = Math.max(0, Math.floor(diff / 3600));\n const minutes = Math.max(0, Math.floor((diff % 3600) / 60));\n const seconds = Math.max(0, Math.floor(diff % 60));\n onCountdown?.({\n hours,\n minutes,\n seconds,\n });\n }, 1000);\n return () => {\n clearInterval(interval);\n };\n }, [ejectDate, onCountdown]);\n\n const result = {\n ejectDate,\n };\n\n useDebugValue(result);\n\n return result;\n};\n","import { MediaTrackState, useMediaTrack } from './useMediaTrack';\n\n/**\n * Returns a participant's screenAudio track and state.\n * @param participantId The participant's session_id.\n */\nexport const useScreenAudioTrack = (participantId: string): MediaTrackState =>\n useMediaTrack(participantId, 'screenAudio');\n","import { MediaTrackState, useMediaTrack } from './useMediaTrack';\n\n/**\n * Returns a participant's screenVideo track and state.\n * @param participantId The participant's session_id.\n */\nexport const useScreenVideoTrack = (participantId: string): MediaTrackState =>\n useMediaTrack(participantId, 'screenVideo');\n","import {\n DailyCall,\n DailyEventObject,\n DailySendSettings,\n} from '@daily-co/daily-js';\nimport { useCallback, useDebugValue, useEffect } from 'react';\nimport { atom, useRecoilCallback, useRecoilValue } from 'recoil';\n\nimport { RECOIL_PREFIX } from '../lib/constants';\nimport { useDaily } from './useDaily';\nimport { useDailyEvent } from './useDailyEvent';\n\nconst sendSettingsState = atom({\n key: RECOIL_PREFIX + 'send-settings',\n default: null,\n});\n\ninterface Props {\n onSendSettingsUpdated?(ev: DailyEventObject<'send-settings-updated'>): void;\n}\n\n/**\n * Returns the current media send settings and an updater function to change the settings.\n */\nexport const useSendSettings = ({ onSendSettingsUpdated }: Props = {}) => {\n const daily = useDaily();\n const sendSettings = useRecoilValue(sendSettingsState);\n\n useDailyEvent(\n 'send-settings-updated',\n useRecoilCallback(\n ({ set }) =>\n (ev) => {\n set(sendSettingsState, ev.sendSettings);\n onSendSettingsUpdated?.(ev);\n },\n [onSendSettingsUpdated]\n )\n );\n\n const storeSendSettings = useRecoilCallback(\n ({ set }) =>\n (sendSettings: DailySendSettings | null) => {\n set(sendSettingsState, sendSettings);\n },\n []\n );\n\n useEffect(() => {\n if (!daily || daily.isDestroyed()) return;\n storeSendSettings(daily.getSendSettings());\n }, [daily, storeSendSettings]);\n\n /**\n * Updates the local clients send settings.\n * See https://docs.daily.co/reference/daily-js/instance-methods/update-send-settings for details.\n */\n const updateSendSettings = useCallback(\n async (...args: Parameters) => {\n const newSendSettings = await daily?.updateSendSettings(...args);\n if (!newSendSettings) return;\n storeSendSettings(newSendSettings);\n return newSendSettings;\n },\n [daily, storeSendSettings]\n );\n\n const result = {\n sendSettings,\n updateSendSettings,\n };\n\n useDebugValue(result);\n\n return result;\n};\n","import {\n DailyCall,\n DailyEventObject,\n DailyEventObjectAppMessage,\n} from '@daily-co/daily-js';\nimport { useCallback, useDebugValue } from 'react';\nimport { useRecoilValue } from 'recoil';\n\nimport { Transcription, transcriptionState } from '../DailyTranscriptions';\nimport { useDaily } from './useDaily';\nimport { useDailyEvent } from './useDailyEvent';\n\ninterface UseTranscriptionArgs {\n onTranscriptionStarted?(ev: DailyEventObject<'transcription-started'>): void;\n onTranscriptionStopped?(ev: DailyEventObject<'transcription-stopped'>): void;\n onTranscriptionError?(ev: DailyEventObject<'transcription-error'>): void;\n /**\n * @deprecated Please use onTranscriptionMessage instead.\n */\n onTranscriptionAppData?(ev: DailyEventObjectAppMessage): void;\n onTranscriptionMessage?(ev: DailyEventObject<'transcription-message'>): void;\n}\n\nexport const useTranscription = ({\n onTranscriptionAppData,\n onTranscriptionError,\n onTranscriptionMessage,\n onTranscriptionStarted,\n onTranscriptionStopped,\n}: UseTranscriptionArgs = {}) => {\n const daily = useDaily();\n\n const state = useRecoilValue(transcriptionState);\n\n useDailyEvent(\n 'transcription-started',\n useCallback(\n (ev) => {\n onTranscriptionStarted?.(ev);\n },\n [onTranscriptionStarted]\n )\n );\n useDailyEvent(\n 'transcription-stopped',\n useCallback(\n (ev) => {\n onTranscriptionStopped?.(ev);\n },\n [onTranscriptionStopped]\n )\n );\n useDailyEvent(\n 'transcription-error',\n useCallback(\n (ev) => {\n onTranscriptionError?.(ev);\n },\n [onTranscriptionError]\n )\n );\n useDailyEvent(\n 'transcription-message',\n useCallback(\n (ev) => {\n onTranscriptionMessage?.(ev);\n },\n [onTranscriptionMessage]\n )\n );\n useDailyEvent(\n 'app-message',\n useCallback(\n (ev: DailyEventObjectAppMessage) => {\n if (ev?.fromId === 'transcription') {\n onTranscriptionAppData?.(ev);\n }\n },\n [onTranscriptionAppData]\n )\n );\n\n /**\n * Starts the transcription with the given optional options.\n */\n const startTranscription = useCallback(\n (...args: Parameters) => {\n if (!daily) return;\n daily.startTranscription(...args);\n },\n [daily]\n );\n\n /**\n * Stops a transcription.\n */\n const stopTranscription = useCallback(\n (...args: Parameters) => {\n if (!daily) return;\n daily.stopTranscription(...args);\n },\n [daily]\n );\n\n const result = {\n ...state,\n startTranscription,\n stopTranscription,\n };\n\n useDebugValue(result);\n\n return result;\n};\n","import { MediaTrackState, useMediaTrack } from './useMediaTrack';\n\n/**\n * Returns a participant's video track and state.\n * @param participantId The participant's session_id.\n */\nexport const useVideoTrack = (participantId: string): MediaTrackState =>\n useMediaTrack(participantId, 'video');\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Network test data table component\n * @author Noah Allen\n * @module Epic.VideoApp.Features.TestNetwork.DataTable\n */\n\nimport React from \"react\";\n\nexport interface IData {\n\tmaxRoundTripTime: number | null;\n\tavgRoundTripTime: number | null;\n\tavgSendPacketLoss: number | null;\n\tavgAvailableOutgoingBitrate: number | null;\n\tavgSendBitsPerSecond: number | null;\n}\n\ninterface IDataTableProps {\n\tdata: IData;\n}\n\nconst NetworkDataResultsTable: React.FC = ({ data }) => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t{data.maxRoundTripTime !== null && (\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t\t{data.avgRoundTripTime !== null && (\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t\t{data.avgSendPacketLoss !== null && (\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t\t{data.avgAvailableOutgoingBitrate !== null && (\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t\t{data.avgSendBitsPerSecond !== null && (\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t\n\t\t
Max Round Trip Time:{`${(data.maxRoundTripTime * 1000).toFixed(\n\t\t\t\t\t\t\t3,\n\t\t\t\t\t\t)}ms`}
Avg Round Trip Time:{`${(data.avgRoundTripTime * 1000).toFixed(\n\t\t\t\t\t\t\t3,\n\t\t\t\t\t\t)}ms`}
Avg Send Packet Loss:{`${data.avgSendPacketLoss}%`}
\n\t\t\t\t\t\t\tAvg Available Outgoing Bitrate:\n\t\t\t\t\t\t{`${data.avgAvailableOutgoingBitrate}bps`}
Avg Send Bits Per Second:{`${data.avgSendBitsPerSecond}bps`}
\n\t);\n};\n\nexport default NetworkDataResultsTable;\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Network test connection state\n * @author Noah Allen\n * @module Epic.VideoApp.Features.TestNetwork.FormattedConnectionState\n */\n\n/* eslint-disable @typescript-eslint/naming-convention */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n\nimport React from \"react\";\nimport { CONNECTION_MODES } from \"./TestPage\";\n\ninterface IceCandidate {\n\tcandidate: string;\n\tsdpMid: string;\n\tsdpMLineIndex: number;\n\tusernameFragment: string;\n}\n\ninterface ConnectionType {\n\tresult: string;\n\ticeCandidates: IceCandidate[];\n}\n\ninterface IProps {\n\tconnectionState: any | null;\n}\n\nconst renderIceCandidates = (iceCandidates: IceCandidate[], keyPrefix: string): JSX.Element => {\n\tif (iceCandidates.length === 0) {\n\t\treturn ;\n\t}\n\treturn (\n\t\t
    \n\t\t\t{iceCandidates.map((candidate, index) => (\n\t\t\t\t
  • \n\t\t\t\t\t
    \n\t\t\t\t\t\tCandidate: {candidate.candidate}\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\tSDP Mid: {candidate.sdpMid}\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\tSDP MLine Index: {candidate.sdpMLineIndex}\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\tUsername Fragment: {candidate.usernameFragment}\n\t\t\t\t\t
    \n\t\t\t\t
  • \n\t\t\t))}\n\t\t
\n\t);\n};\n\nconst renderConnectionType = (connectionType: ConnectionType, keyPrefix: string): JSX.Element => {\n\treturn (\n\t\t
\n\t\t\t
\n\t\t\t\tResult: {connectionType.result}\n\t\t\t
\n\t\t\t
\n\t\t\t\tICE Candidates:{\" \"}\n\t\t\t\t{renderIceCandidates(connectionType.iceCandidates, keyPrefix)}\n\t\t\t
\n\t\t
\n\t);\n};\n\nconst renderData = (data: any, keyPrefix: string = \"\"): JSX.Element => {\n\treturn (\n\t\t
\n\t\t\t
\n\t\t\t\t

All:

\n\t\t\t\t{renderConnectionType(data[\"all\"], `${keyPrefix}-${CONNECTION_MODES.ALL}`)}\n\t\t\t
\n\t\t\t
\n\t\t\t\t

Relay:

\n\t\t\t\t{renderConnectionType(data[\"relay\"], `${keyPrefix}-${CONNECTION_MODES.RELAY_ONLY}`)}\n\t\t\t
\n\t\t\t
\n\t\t\t\t

Stun:

\n\t\t\t\t{renderConnectionType(data[\"stun\"], `${keyPrefix}-${CONNECTION_MODES.STUN}`)}\n\t\t\t
\n\t\t\t
\n\t\t\t\t

Turn-UDP:

\n\t\t\t\t{renderConnectionType(data[\"turn-udp\"], `${keyPrefix}-${CONNECTION_MODES.TURN_UDP}`)}\n\t\t\t
\n\t\t\t
\n\t\t\t\t

Turn-TCP:

\n\t\t\t\t{renderConnectionType(data[\"turn-tcp\"], `${keyPrefix}-${CONNECTION_MODES.TURN_TCP}`)}\n\t\t\t
\n\t\t\t
\n\t\t\t\t

Turn-TLS:

\n\t\t\t\t{renderConnectionType(data[\"turn-tls\"], `${keyPrefix}-${CONNECTION_MODES.TURN_TLS}`)}\n\t\t\t
\n\t\t
\n\t);\n};\n\nconst FormattedConnectionState: React.FC = ({ connectionState }) => {\n\tif (!connectionState) {\n\t\treturn
No connection state available
;\n\t}\n\treturn
{renderData(connectionState)}
;\n};\n\nexport default FormattedConnectionState;\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Network test websocket connectivity\n * @author Noah Allen\n * @module Epic.VideoApp.Features.TestNetwork.FormattedWebsocketConnectivity\n */\n\nimport { DailyWebsocketConnectivityTestResults } from \"@daily-co/daily-js\";\nimport React from \"react\";\n\ninterface IProps {\n\tdata: DailyWebsocketConnectivityTestResults | null;\n}\n\nconst FormattedWebsocketConnectivity: React.FC = ({ data }) => {\n\treturn (\n\t\t
\n\t\t\t
\n\t\t\t\tAborted Regions: {JSON.stringify(data?.abortedRegions)}\n\t\t\t
\n\t\t\t
\n\t\t\t\tFailed Regions: {JSON.stringify(data?.failedRegions)}\n\t\t\t
\n\t\t\t
\n\t\t\t\tPassed Regions: {JSON.stringify(data?.passedRegions)}\n\t\t\t
\n\t\t\t
\n\t\t\t\tResult: {data?.result}\n\t\t\t
\n\t\t
\n\t);\n};\n\nexport default FormattedWebsocketConnectivity;\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Network test core logic\n * @author Noah Allen\n * @module Epic.VideoApp.Features.TestNetwork.NetworkTester\n */\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable @typescript-eslint/naming-convention */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/* eslint-disable @typescript-eslint/no-unsafe-return */\n\n// Due to this being code that interacts with the daily API, a lot of types are not defined here\n// and just use \"any\" types\n\nconst CONNECTION_MODES = {\n\tANY: \"any\", // used to gather all candidates\n\tSTUN: \"stun\",\n\tTURN_UDP: \"turn-udp\",\n\tTURN_TCP: \"turn-tcp\",\n\tTURN_TLS: \"turn-tls\",\n\tRELAY_ONLY: \"relay\",\n};\n\nconst NAT_SERVICES = {\n\tTWILIO: \"twilio\",\n\tXIRSYS: \"xirsys\",\n};\n\nconst CONNECTION_STATUS = {\n\tCONNECTED: \"connected\",\n\tFAILED: \"failed\",\n\tSTOPPED: \"stopped\",\n};\n\ninterface ConnectionInfoType {\n\ticeCandidates: any[];\n\tstatus: string;\n}\n\nexport default class NetworkTester {\n\ticeServers: any;\n\tnatService: any;\n\tconnectionMode: any;\n\tconstraints: {\n\t\tvideo: {\n\t\t\tdeviceId: string;\n\t\t\tfacingMode: string;\n\t\t\twidth: number;\n\t\t\theight: number;\n\t\t};\n\t\taudio: { deviceId: string };\n\t};\n\tofferOptions: { offerToReceiveAudio: boolean; offerToReceiveVideo: boolean };\n\tlocalPeer: any;\n\tremotePeer: any;\n\tresolve?: (value: ConnectionInfoType) => void;\n\tconnectionTimeout?: NodeJS.Timeout | number;\n\tflushTimeout?: NodeJS.Timeout | number;\n\n\tconstructor({\n\t\tnatService = NAT_SERVICES.TWILIO,\n\t\tconnectionMode = CONNECTION_MODES.ANY,\n\t\ticeServers,\n\t}: any) {\n\t\tif (natService === NAT_SERVICES.TWILIO) {\n\t\t\tswitch (connectionMode) {\n\t\t\t\tcase CONNECTION_MODES.ANY:\n\t\t\t\tcase CONNECTION_MODES.RELAY_ONLY:\n\t\t\t\t\tthis.iceServers = iceServers;\n\t\t\t\t\tbreak;\n\t\t\t\tcase CONNECTION_MODES.STUN:\n\t\t\t\t\tthis.iceServers = iceServers.filter(\n\t\t\t\t\t\t(url: { url: string; urls: string }) =>\n\t\t\t\t\t\t\turl?.url.startsWith(\"stun:\") || url?.urls.startsWith(\"stun:\"),\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tcase CONNECTION_MODES.TURN_UDP:\n\t\t\t\t\tthis.iceServers = iceServers.filter(\n\t\t\t\t\t\t(url: { url: string; urls: string }) =>\n\t\t\t\t\t\t\turl?.url.startsWith(\"turn:\") && url?.url.endsWith(\"udp\"),\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tcase CONNECTION_MODES.TURN_TCP:\n\t\t\t\t\tthis.iceServers = iceServers.filter(\n\t\t\t\t\t\t(url: { url: string; urls: string }) =>\n\t\t\t\t\t\t\turl?.url.startsWith(\"turn:\") && url?.url.endsWith(\"tcp\"),\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tcase CONNECTION_MODES.TURN_TLS:\n\t\t\t\t\tthis.iceServers = iceServers.filter((url: { url: string; urls: string }) =>\n\t\t\t\t\t\turl?.url.includes(\"turns:\"),\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthis.iceServers = iceServers;\n\t\t\t}\n\t\t} else {\n\t\t\tswitch (connectionMode) {\n\t\t\t\tcase CONNECTION_MODES.ANY:\n\t\t\t\tcase CONNECTION_MODES.RELAY_ONLY:\n\t\t\t\t\t// Xirsys returns an object when we need an array\n\t\t\t\t\tthis.iceServers = [iceServers];\n\t\t\t\t\tbreak;\n\t\t\t\tcase CONNECTION_MODES.STUN:\n\t\t\t\t\tthis.iceServers = [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t...iceServers,\n\t\t\t\t\t\t\turls: iceServers.urls.filter((url: string) => url.startsWith(\"stun:\")),\n\t\t\t\t\t\t},\n\t\t\t\t\t];\n\t\t\t\t\tbreak;\n\t\t\t\tcase CONNECTION_MODES.TURN_UDP:\n\t\t\t\t\tthis.iceServers = [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t...iceServers,\n\t\t\t\t\t\t\turls: iceServers.urls.filter(\n\t\t\t\t\t\t\t\t(url: string) => url.startsWith(\"turn:\") && url.endsWith(\"udp\"),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t},\n\t\t\t\t\t];\n\t\t\t\t\tbreak;\n\t\t\t\tcase CONNECTION_MODES.TURN_TCP:\n\t\t\t\t\tthis.iceServers = [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t...iceServers,\n\t\t\t\t\t\t\turls: iceServers.urls.filter(\n\t\t\t\t\t\t\t\t(url: string) => url.startsWith(\"turn:\") && url.endsWith(\"tcp\"),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t},\n\t\t\t\t\t];\n\t\t\t\t\tbreak;\n\t\t\t\tcase CONNECTION_MODES.TURN_TLS:\n\t\t\t\t\tthis.iceServers = [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t...iceServers,\n\t\t\t\t\t\t\turls: iceServers.urls.filter((url: string) => url.startsWith(\"turns:\")),\n\t\t\t\t\t\t},\n\t\t\t\t\t];\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthis.iceServers = [iceServers];\n\t\t\t}\n\t\t}\n\t\tthis.connectionMode = connectionMode;\n\t\tthis.natService = natService;\n\t\tthis.localPeer = null;\n\t\tthis.remotePeer = null;\n\t\tthis.constraints = {\n\t\t\tvideo: {\n\t\t\t\tdeviceId: \"default\",\n\t\t\t\tfacingMode: \"user\",\n\t\t\t\twidth: 1280,\n\t\t\t\theight: 720,\n\t\t\t},\n\t\t\taudio: {\n\t\t\t\tdeviceId: \"default\",\n\t\t\t},\n\t\t};\n\t\tthis.offerOptions = {\n\t\t\tofferToReceiveAudio: true,\n\t\t\tofferToReceiveVideo: true,\n\t\t};\n\t}\n\n\tasync setupRTCPeerConnection(): Promise {\n\t\tconst RELAY_ONLY_CONNECTION_MODES = [\n\t\t\tCONNECTION_MODES.TURN_UDP,\n\t\t\tCONNECTION_MODES.TURN_TCP,\n\t\t\tCONNECTION_MODES.TURN_TLS,\n\t\t\tCONNECTION_MODES.RELAY_ONLY,\n\t\t];\n\t\tconst iceTransportPolicy = RELAY_ONLY_CONNECTION_MODES.includes(this.connectionMode)\n\t\t\t? \"relay\"\n\t\t\t: \"all\";\n\n\t\tconst rtcConfig: RTCConfiguration = {\n\t\t\ticeServers: this.iceServers,\n\t\t\ticeTransportPolicy,\n\t\t};\n\n\t\tthis.localPeer = new RTCPeerConnection(rtcConfig);\n\t\tthis.remotePeer = new RTCPeerConnection(rtcConfig);\n\t\tthis.localPeer.bufferedIceCandidates = [];\n\t\tthis.remotePeer.bufferedIceCandidates = [];\n\n\t\tthis.localPeer.iceCandidates = [];\n\t\tthis.setupPeerListeners();\n\t\tawait this.start();\n\t\treturn new Promise((resolve) => {\n\t\t\tthis.resolve = resolve;\n\t\t\tthis.connectionTimeout = global.setTimeout(() => {\n\t\t\t\tvoid (async () => {\n\t\t\t\t\tconst connectionInfo = await this.getConnectionInfo();\n\t\t\t\t\tif (this.resolve) {\n\t\t\t\t\t\tthis.resolve(connectionInfo);\n\t\t\t\t\t}\n\t\t\t\t})();\n\t\t\t}, 15000);\n\n\t\t\tthis.flushTimeout = global.setTimeout(() => {\n\t\t\t\tvoid (async () => {\n\t\t\t\t\t// always flush candidates after 7 seconds of gathering\n\t\t\t\t\tthis.flushIceCandidates(this.localPeer);\n\t\t\t\t\tthis.flushIceCandidates(this.remotePeer);\n\t\t\t\t\tawait Promise.resolve();\n\t\t\t\t})();\n\t\t\t}, 7500);\n\t\t});\n\t}\n\n\tsetupPeerListeners(): void {\n\t\tthis.localPeer.onicecandidate = (event: any) => {\n\t\t\tif (\n\t\t\t\tthis.connectionMode === CONNECTION_MODES.STUN &&\n\t\t\t\t// Firefox doesn't support the \"type\" property, so better be safe and parse\n\t\t\t\tevent.candidate?.candidate.includes(\"host\")\n\t\t\t) {\n\t\t\t\t// Don't allow host candidates in STUN mode.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!event.candidate || !event.candidate.candidate) {\n\t\t\t\tthis.flushIceCandidates(this.remotePeer);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.localPeer.iceCandidates.push(event.candidate);\n\t\t\tthis.remotePeer.bufferedIceCandidates.push(event.candidate);\n\t\t};\n\n\t\tthis.remotePeer.onicecandidate = (event: any) => {\n\t\t\tif (!event.candidate || !event.candidate.candidate) {\n\t\t\t\tthis.flushIceCandidates(this.localPeer);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.localPeer.bufferedIceCandidates.push(event.candidate);\n\t\t};\n\n\t\tif (this.localPeer.connectionState) {\n\t\t\tthis.localPeer.onconnectionstatechange = () =>\n\t\t\t\t//this.onConnectionStateChange(this.localPeer.connectionState);\n\t\t\t\tthis.onConnectionStateChange();\n\t\t} else {\n\t\t\t// Legacy connection state\n\t\t\tthis.localPeer.oniceconnectionstatechange = (_event: any) =>\n\t\t\t\t//this.onIceConnectionStateChange(event);\n\t\t\t\tthis.onIceConnectionStateChange();\n\t\t}\n\t}\n\n\tasync start(): Promise {\n\t\tawait this.createOffer();\n\t\tawait this.createAnswer();\n\t}\n\n\tflushIceCandidates(peer: any): void {\n\t\tpeer.bufferedIceCandidates.forEach((c: any) => peer.addIceCandidate(c));\n\t\tpeer.bufferedIceCandidates = [];\n\t}\n\n\tcreateOffer(): Promise {\n\t\treturn this.localPeer\n\t\t\t.createOffer(this.offerOptions)\n\t\t\t.then((desc: any) => this.setDescription(desc, this.localPeer, this.remotePeer));\n\t}\n\n\tasync setDescription(desc: any, local: any, remote: any): Promise {\n\t\tawait local.setLocalDescription(desc);\n\t\tawait remote.setRemoteDescription(desc);\n\t}\n\n\tcreateAnswer(): Promise {\n\t\treturn this.remotePeer\n\t\t\t.createAnswer(this.offerOptions)\n\t\t\t.then((desc: any) => this.setDescription(desc, this.remotePeer, this.localPeer));\n\t}\n\n\tasync getConnectionInfo(): Promise {\n\t\tconst { iceCandidates } = this.localPeer;\n\t\t// need to check both because of Firefox\n\t\tconst connectionState = this.localPeer.connectionState || this.localPeer.iceConnectionState;\n\t\treturn Promise.resolve({\n\t\t\ticeCandidates,\n\t\t\tstatus:\n\t\t\t\tconnectionState === \"connected\" || connectionState === \"completed\"\n\t\t\t\t\t? CONNECTION_STATUS.CONNECTED\n\t\t\t\t\t: CONNECTION_STATUS.FAILED,\n\t\t});\n\t}\n\n\tasync onConnectionStateChange(): Promise {\n\t\tif (this.localPeer.connectionState === \"failed\" || this.localPeer.connectionState === \"connected\") {\n\t\t\tconst connectionInfo = await this.getConnectionInfo();\n\t\t\tif (this.resolve) {\n\t\t\t\tthis.resolve(connectionInfo);\n\t\t\t}\n\t\t\tthis.stop();\n\t\t}\n\t}\n\n\t// We need this for Firefox, since it doesn't support connectionState, only iceConnectionState.\n\tasync onIceConnectionStateChange(): Promise {\n\t\tconst { iceConnectionState } = this.localPeer;\n\t\tif (iceConnectionState === \"failed\") {\n\t\t\tconst connectionInfo = await this.getConnectionInfo();\n\t\t\tif (this.resolve) {\n\t\t\t\tthis.resolve(connectionInfo);\n\t\t\t}\n\t\t\tthis.stop();\n\t\t}\n\t\tif (iceConnectionState === \"connected\" || iceConnectionState === \"completed\") {\n\t\t\tconst connectionInfo = await this.getConnectionInfo();\n\t\t\tif (this.resolve) {\n\t\t\t\tthis.resolve(connectionInfo);\n\t\t\t}\n\t\t\tglobal.clearTimeout(this.connectionTimeout);\n\t\t\tglobal.clearTimeout(this.flushTimeout);\n\t\t}\n\t}\n\n\tstop(): void {\n\t\ttry {\n\t\t\tthis.localPeer.close();\n\t\t\tthis.remotePeer.close();\n\t\t\tglobal.clearTimeout(this.connectionTimeout);\n\t\t\tglobal.clearTimeout(this.flushTimeout);\n\t\t} catch (e) {\n\t\t\t// ignore errors from close\n\t\t}\n\t}\n}\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Network test page\n * @author Noah Allen\n * @module Epic.VideoApp.Features.TestNetwork.TestPage\n */\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable @typescript-eslint/naming-convention */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/* eslint-disable @typescript-eslint/no-unsafe-return */\n\nimport { DailyCallQualityTestResults, DailyWebsocketConnectivityTestResults } from \"@daily-co/daily-js\";\nimport { useDaily } from \"@daily-co/daily-react\";\nimport React, { FC, useCallback, useEffect, useMemo, useState } from \"react\";\nimport Card from \"~/components/Cards/Card\";\nimport CardContainer from \"~/components/Cards/CardContainer\";\nimport Spinner from \"~/components/Loading/Spinner\";\nimport ActionButton from \"~/components/Utilities/ActionButton\";\nimport NetworkDataResultsTable, { IData } from \"./DataTable\";\nimport FormattedConnectionState from \"./FormattedConnectionState\";\nimport FormattedWebsocketConnectivity from \"./FormattedWebsocketConnectivity\";\nimport NetworkTester from \"./NetworkTester\";\nimport styles from \"./TestPage.module.scss\";\n\nexport const CONNECTION_MODES = {\n\tALL: \"all\", // used to gather all candidates\n\tSTUN: \"stun\",\n\tTURN_UDP: \"turn-udp\",\n\tTURN_TCP: \"turn-tcp\",\n\tTURN_TLS: \"turn-tls\",\n\tRELAY_ONLY: \"relay\",\n};\n\ntype TestState =\n\t| \"idle\"\n\t| \"starting_call_quality\"\n\t| \"running_call_quality\"\n\t| \"finished_call_quality\"\n\t| \"starting_advanced\"\n\t| \"running_advanced\"\n\t| \"finished_advanced\";\n\nconst TestPage: FC = () => {\n\tconst callMachine = useDaily();\n\tconst [data, setData] = useState(null);\n\tconst [testState, setTestState] = useState(\"idle\");\n\tconst [callQuality, setCallQuality] = useState(null);\n\tconst [websocketConnectivity, setWebsocketConnectivity] =\n\t\tuseState(null);\n\tconst [connectionState, setConnectionState] = useState({\n\t\t[CONNECTION_MODES.ALL]: {\n\t\t\tresult: null,\n\t\t\ticeCandidates: null,\n\t\t},\n\t\t[CONNECTION_MODES.RELAY_ONLY]: {\n\t\t\tresult: null,\n\t\t\ticeCandidates: null,\n\t\t},\n\t\t[CONNECTION_MODES.STUN]: {\n\t\t\tresult: null,\n\t\t\ticeCandidates: null,\n\t\t},\n\t\t[CONNECTION_MODES.TURN_UDP]: {\n\t\t\tresult: null,\n\t\t\ticeCandidates: null,\n\t\t},\n\t\t[CONNECTION_MODES.TURN_TCP]: {\n\t\t\tresult: null,\n\t\t\ticeCandidates: null,\n\t\t},\n\t\t[CONNECTION_MODES.TURN_TLS]: {\n\t\t\tresult: null,\n\t\t\ticeCandidates: null,\n\t\t},\n\t});\n\n\tconst startCallQuality = useCallback(async () => {\n\t\tsetTestState(\"starting_call_quality\");\n\t\tif (!callMachine) {\n\t\t\tconsole.error(\"DailyCall object is null\");\n\t\t\treturn;\n\t\t}\n\t\tcallMachine.on(\"error\", (e) => {\n\t\t\tconsole.log(\"daily-js error: \", e);\n\t\t});\n\t\tawait callMachine?.preAuth({ url: \"https://epic-demo.daily.co/NetworkTestRoom\" });\n\t\tconsole.log(\"Starting call quality test\");\n\t\tsetTestState(\"running_call_quality\");\n\n\t\ttry {\n\t\t\tconst callQuality = await callMachine?.testCallQuality();\n\t\t\tif (callQuality) {\n\t\t\t\tconsole.log(\"No call quality test results.\");\n\t\t\t\tsetCallQuality(callQuality);\n\t\t\t} else {\n\t\t\t\tconsole.log(\"No call quality test results.\");\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error(\"An error occurred during the call quality test:\", error);\n\t\t}\n\t\tsetTestState(\"finished_call_quality\");\n\t}, [callMachine, setCallQuality, setTestState]);\n\n\tconst runWebsocketTest = useCallback(async () => {\n\t\tconsole.log(\"starting websocket test\");\n\t\tconst webSocket = await callMachine?.testWebsocketConnectivity();\n\t\tif (webSocket) {\n\t\t\tsetWebsocketConnectivity(webSocket);\n\t\t\tconsole.log({ ws: webSocket });\n\t\t}\n\t}, [callMachine, setWebsocketConnectivity]);\n\n\tconst startAdvanced = useCallback(async () => {\n\t\tsetTestState(\"starting_advanced\");\n\t\tconst iceResp = await fetch(\"https://prod-ks.pluot.blue/tt-150331.json\");\n\t\tconst iceServers = await iceResp.json();\n\t\tsetTestState(\"running_advanced\");\n\t\tconst promises = Object.keys(connectionState).map((test) => initiateTester(test, iceServers));\n\t\tpromises.push(runWebsocketTest());\n\t\tawait Promise.all(promises);\n\t\tsetTestState(\"finished_advanced\");\n\t}, [connectionState, runWebsocketTest]);\n\n\tasync function initiateTester(connectionMode: any, iceServers: any): Promise {\n\t\tconst instance = new NetworkTester({\n\t\t\tnatService: \"twilio\",\n\t\t\tconnectionMode,\n\t\t\ticeServers,\n\t\t});\n\t\tconsole.log(\"created test instance: \", instance);\n\n\t\tconst result = await instance.setupRTCPeerConnection();\n\t\tconsole.log(\"RTC Peer connection test result: \", result);\n\t\tsetConnectionState((prevState) => ({\n\t\t\t...prevState,\n\t\t\t[connectionMode]: {\n\t\t\t\tresult: result.status,\n\t\t\t\ticeCandidates: result.iceCandidates,\n\t\t\t},\n\t\t}));\n\t}\n\tconst getResultMessage = (status?: string): string => {\n\t\tswitch (status) {\n\t\t\tcase \"aborted\":\n\t\t\t\treturn \"Test canceled.\";\n\t\t\tcase \"failed\":\n\t\t\t\treturn \"Test failed to run.\";\n\t\t\tcase \"bad\":\n\t\t\t\treturn \"Issues detected with your network.\";\n\t\t\tcase \"warning\":\n\t\t\t\treturn \"Issues detected with your network may impact video and audio quality.\";\n\t\t\tcase \"good\":\n\t\t\t\treturn \"No issues detected with your network.\";\n\t\t\tdefault:\n\t\t\t\treturn \"The network test failed to complete.\";\n\t\t}\n\t};\n\n\tuseEffect(() => {\n\t\tif (callQuality && [\"aborted\", \"failed\", \"bad\", \"warning\"].includes(callQuality.result)) {\n\t\t\tif (\"data\" in callQuality) {\n\t\t\t\tsetData(callQuality.data);\n\t\t\t} else {\n\t\t\t\tsetData(null);\n\t\t\t}\n\t\t}\n\t}, [callQuality]);\n\n\tconst callQualityResultDescription = useCallback((): React.JSX.Element => {\n\t\tswitch (callQuality?.result) {\n\t\t\tcase \"aborted\":\n\t\t\tcase \"failed\":\n\t\t\tcase \"bad\":\n\t\t\tcase \"warning\":\n\t\t\t\treturn (\n\t\t\t\t\t<>\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

{getResultMessage(callQuality?.result)}

\n\t\t\t\t\t\t\t

Please run these additional advanced tests to get more information.

\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tRun Advanced Tests\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t);\n\t\t\tcase \"good\":\n\t\t\t\treturn

{getResultMessage(callQuality?.result)}

;\n\t\t\tdefault:\n\t\t\t\treturn

{getResultMessage()}

;\n\t\t}\n\t}, [callQuality, startAdvanced]);\n\n\tconst displayMessage = useMemo(() => {\n\t\treturn () => {\n\t\t\tswitch (testState) {\n\t\t\t\tcase \"starting_call_quality\":\n\t\t\t\t\treturn

Starting call quality test, please wait a few seconds.

;\n\t\t\t\tcase \"starting_advanced\":\n\t\t\t\t\treturn

Starting advanced tests, please wait a few seconds.

;\n\t\t\t\tcase \"running_advanced\":\n\t\t\t\t\treturn

Running advanced tests, please wait a few seconds.

;\n\t\t\t\tcase \"running_call_quality\":\n\t\t\t\t\treturn (\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

Running call quality test.

\n\t\t\t\t\t\t\t

This will take up to 30 seconds. It will complete automatically.

\n\t\t\t\t\t\t
\n\t\t\t\t\t);\n\t\t\t\tcase \"finished_call_quality\":\n\t\t\t\t\treturn (\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

Finished call quality test.

\n\t\t\t\t\t\t\t{callQualityResultDescription()}\n\t\t\t\t\t\t
\n\t\t\t\t\t);\n\t\t\t\tcase \"finished_advanced\":\n\t\t\t\t\treturn (\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t

Initial call quality test results:

\n\t\t\t\t\t\t\t\t

{getResultMessage(callQuality?.result)}

\n\t\t\t\t\t\t\t\t{data ? (\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t

Network statistics results:

\n\t\t\t\t\t\t\t\t\t\t
{data ? : null}
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t

Websocket connectivity results:

\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t

Network connectivity results:

\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t);\n\t\t\t\tdefault:\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t

Video call network quality test

\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tTest your network\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t);\n\t\t\t}\n\t\t};\n\t}, [\n\t\tcallQuality,\n\t\tcallQualityResultDescription,\n\t\tconnectionState,\n\t\tdata,\n\t\tstartCallQuality,\n\t\ttestState,\n\t\twebsocketConnectivity,\n\t]);\n\n\tconst shouldShowSpinner = useMemo(() => {\n\t\treturn (\n\t\t\ttestState === \"running_advanced\" ||\n\t\t\ttestState === \"running_call_quality\" ||\n\t\t\ttestState === \"starting_call_quality\" ||\n\t\t\ttestState === \"starting_advanced\"\n\t\t);\n\t}, [testState]);\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t
{displayMessage()}
\n\t\t\t\t{shouldShowSpinner && }\n\t\t\t
\n\t\t
\n\t);\n};\n\nexport default TestPage;\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Test Network component\n * @author Noah Allen\n * @module Epic.VideoApp.Features.TestNetwork.TestNetwork\n */\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable @typescript-eslint/naming-convention */\n\nimport { DailyProvider } from \"@daily-co/daily-react\";\nimport { RouteComponentProps } from \"@reach/router\";\nimport React, { FC } from \"react\";\nimport CopyrightLinkButton from \"~/components/Copyright/CopyrightLinkButton\";\nimport HeaderBar from \"~/components/Header/HeaderBar\";\nimport FeatureWrapper from \"~/components/StandardLayout/FeatureWrapper\";\nimport { BackgroundStyleContextProvider } from \"~/components/Utilities/BackgroundStyleContext\";\nimport { useDocumentTitle, useSharedStrings } from \"~/hooks\";\nimport { StyleContext } from \"~/types\";\nimport { SharedStringTokens } from \"~/utils/strings\";\nimport styles from \"./TestNetwork.module.scss\";\nimport TestPage from \"./TestPage\";\n\n/**\n * The TestNetwork component\n * Tests the network connections and configuration for the video call endpoints\n *\n * @param _props The props ;)\n */\n\nconst TestNetwork: FC = (_props) => {\n\tconst strings = useSharedStrings([SharedStringTokens.defaultPageTitle]);\n\tuseDocumentTitle(strings[SharedStringTokens.defaultPageTitle]);\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t);\n};\n\nTestNetwork.displayName = \"TestNetwork\";\n\nexport default TestNetwork;\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Test Network routes\n * @author Noah Allen\n * @module Epic.VideoApp.Features.TestNetwork.TestNetwork\n */\n\nimport { IAddRouteFunction } from \"~/app/routes\";\nimport TestNetwork from \"./TestNetwork\";\n\n/*\n *\n * IMPORTANT! READ THIS!\n *\n * The contents of this file are loaded and executed during the initial load of the application\n * in the browser even if the route is never actually accessed. DO NOT put any additional code\n * in this file, or import any addition modules as doing so would just add extra bloat to the\n * initial load / startup time for the application.\n *\n * IMPORTANT! READ THIS!\n *\n */\n\n/**\n * Return the URL used to access this page\n */\nexport function getTestModeUrl(): string {\n\treturn \"/TestNetwork\";\n}\n\n/**\n * Return any URLs that should redirect to this page\n */\nexport function getTestModeRedirectPaths(): string[] {\n\treturn [\"/Home/TestNetwork\"];\n}\n\n/**\n * Return whether or not this page requires WebRTC\n */\nexport function getTestModeRequiresWebRTC(): boolean {\n\treturn true;\n}\n\n/**\n * Register the routes associated with this page\n *\n * @param addRoute A function used to add a route\n */\nexport default function register(addRoute: IAddRouteFunction): void {\n\taddRoute(getTestModeUrl(), TestNetwork, getTestModeRedirectPaths(), getTestModeRequiresWebRTC());\n}\n","/**\n * @copyright Copyright 2023 Epic Systems Corporation\n * @file hook to get survey questionnaire\n * @author Ben Vuong\n * @module Epic.VideoApp.Components.FeedbackSurvey.Hooks.UseLoadFeedbackSurveyQuestionnaire\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster/dist/use-dispatch\";\nimport { useRef } from \"react\";\nimport { combinedActions, useAuthState } from \"~/state\";\nimport { feedbackSurveyActions, useFeedbackSurveyState } from \"~/state/feedbackSurvey\";\nimport { FeedbackPageStep, FeedbackSurveyLoadingStatus, ISurvey } from \"~/types/survey\";\nimport { makeRequest } from \"~/utils/request\";\n\n/**\n * Attempts to grab the feedback survey questionnaire\n */\nexport function useLoadFeedbackSurveyQuestionnaire(): void {\n\tconst JWT = useAuthState((selectors) => selectors.getJWT(), []);\n\tconst initialStep = useFeedbackSurveyState((selectors) => selectors.getFeedbackStep(), []);\n\tconst feedbackSurveyQuestionnaire = useFeedbackSurveyState(\n\t\t(selectors) => selectors.getFeedbackSurveyQuestionnaire(),\n\t\t[],\n\t);\n\tconst dispatch = useDispatch();\n\tconst hasRequestedSurvey = useRef(false);\n\n\tif (\n\t\tJWT &&\n\t\t!feedbackSurveyQuestionnaire &&\n\t\t!hasRequestedSurvey.current &&\n\t\tinitialStep !== FeedbackPageStep.hidden\n\t) {\n\t\thasRequestedSurvey.current = true;\n\t\tgetFeedbackSurveyQuestionnaire(JWT)\n\t\t\t.then((loadedFeedbackQuestionnaire) => {\n\t\t\t\tif (loadedFeedbackQuestionnaire) {\n\t\t\t\t\tdispatch(\n\t\t\t\t\t\tfeedbackSurveyActions.setFeedbackSurveyQuestionnaire(loadedFeedbackQuestionnaire),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch(() => {\n\t\t\t\tdispatch(\n\t\t\t\t\tfeedbackSurveyActions.setFeedbackLoadingState(FeedbackSurveyLoadingStatus.failedToLoad),\n\t\t\t\t);\n\t\t\t\tdispatch(combinedActions.clearSurveyState(false));\n\t\t\t});\n\t}\n}\n\nasync function getFeedbackSurveyQuestionnaire(jwt: string): Promise {\n\treturn makeRequest(\"/api/FeedbackSurvey/GetSurveyQuestionnaire\", \"POST\", jwt);\n}\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file types used for chat\n * @author Noah Allen\n * @module Epic.VideoApp.Types.Chat\n */\n\nexport interface IChatConfig {\n\tchatEnabled: boolean;\n}\n\nexport const MAX_MESSAGE_LENGTH = 1000;\n\nexport const SEND_GROUP_MESSAGE = \"SendGroupMessage\";\nexport const TYPING = \"Typing\";\nexport const HEARTBEAT = \"Heartbeat\";\nexport const ACK = \"ACK\";\nexport const LOAD_CHAT = \"LoadChat\";\nexport const UPDATE_USER_MAP = \"UpdateUserMap\";\n\nexport const TIME_UNTIL_NEXT_TYPING_EVENT_SECONDS = 5;\nexport const TIME_UNTIL_CAN_SEND_ANOTHER_TYPING_SECONDS = 1;\nexport const TIME_FOR_HEARTBEAT_INTERVAL_SECONDS = 30;\nexport const BACK_OFF_TIMES_PER_RETRY = [1, 5, 10, 15, 15, 20, 20, 30, 30, 30, 60, 60, 60, 60, 120];\nexport const TIME_TO_MESSAGE_FAIL_SECONDS = 5;\n\nexport const NUMBER_OF_TIMES_BEFORE_NOT_TRYING_TO_RECONNECT = 15;\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Implements a rate limiting mechanism to limit the number of negotiation attempts within a certain time window.\n * @author Noah Allen\n * @module Epic.VideoApp.Components.Chat.Hooks.UseCanGetToken\n */\n\nimport { BACK_OFF_TIMES_PER_RETRY } from \"~/types/chat\";\nimport { secondsToMs } from \"~/utils/dateTime\";\n\nexport async function canGetToken(\n\tlastCallTime: React.MutableRefObject,\n\tcallCounter: React.MutableRefObject,\n): Promise {\n\tconst now = Date.now();\n\n\tif (callCounter.current > 15) {\n\t\treturn false;\n\t}\n\n\tif (lastCallTime.current === 0) {\n\t\tlastCallTime.current = now;\n\t\tcallCounter.current += 1;\n\t\treturn true;\n\t}\n\n\tconst timeSinceLastCall = now - lastCallTime.current;\n\tconst WINDOW_DURATION = secondsToMs(BACK_OFF_TIMES_PER_RETRY[callCounter.current]);\n\n\tif (timeSinceLastCall < WINDOW_DURATION) {\n\t\tconst timeToWait = WINDOW_DURATION - timeSinceLastCall;\n\t\tawait new Promise((resolve) => setTimeout(resolve, timeToWait));\n\t}\n\n\tlastCallTime.current = Date.now();\n\tcallCounter.current += 1;\n\n\treturn true;\n}\n","(function(){\"use strict\";try{if(typeof document<\"u\"){var e=document.createElement(\"style\");e.id=\"epic-chat\",e.appendChild(document.createTextNode(':root{--WPColor-BrandPrimary: #246fb5;--WPColor-BrandSecondary: #0091ea;--LCFont-FontFamily: Source Sans Pro, Calibri, Arial, sans-serif}.App *{box-sizing:border-box;font-family:Source Sans Pro,Calibri,Arial,sans-serif}.App{all:initial}.App ul{list-style:none}.left{text-align:start}.App .middle{text-align:center;margin:0}.right{text-align:end}.App .hidden{display:none}.fullWidth{width:100%}.chatHeading{color:var(--WPColor-BrandPrimary);font-weight:500;padding-bottom:.25rem;padding-inline-start:1rem;padding-top:1rem;font-size:1.1rem;line-height:1.25rem;display:inline-flex;align-items:center;gap:.125rem;fill:var(--WPColor-BrandPrimary)}.chatSubHeading{color:#363636;padding-bottom:.5rem;padding-inline-start:1rem}.App{font-family:var(--LCFont-FontFamily);z-index:999}.App.nonmodal{position:fixed;bottom:0;right:0;margin:0 .5rem .5rem 0;border-radius:.5rem;width:30rem;min-width:25rem;max-width:40rem;height:40rem;min-height:40rem;max-height:calc(100% - 1rem);box-shadow:0 2px 3px #000000a8;overflow:hidden;z-index:1000}@media only screen and (max-width: 1300px){.App{width:35%}.App.nonmodal{margin:.5rem .5rem .5rem 0;min-height:250px;max-height:calc(100% - 1rem);width:calc(100% - 1rem);min-width:25rem;max-width:900px}}@media only screen and (max-width: 480px){.App.nonmodal{height:100%;width:100%;margin:0;max-height:none;min-width:unset;min-height:unset;border-radius:0;top:0;left:0;right:0;bottom:0}}.App>.childrenWrapper{display:flex;flex-direction:column;height:100%}.innerChatContent{display:flex;flex-direction:column;flex-grow:1;overflow:hidden}.innerChatContent *::-webkit-scrollbar{width:12px;height:12px}.innerChatContent *::-webkit-scrollbar-track{background-color:transparent}.innerChatContent *::-webkit-scrollbar-thumb{background-color:#c2bfc2;border-radius:8px;border:3px solid transparent;background-clip:content-box;opacity:30}.innerChatContent *::-webkit-scrollbar-thumb:hover{background-color:#888688;opacity:100}.innerChatContent.darkMode *::-webkit-scrollbar-thumb{background-color:#8d8d8d}.innerChatContent.darkMode *::-webkit-scrollbar-thumb:hover{background-color:#636363}.App *{font-family:var(--LCFont-FontFamily)}iframe.MyChartIframeReact{width:100%;overflow:scroll;border:none;min-width:320px;min-height:400px;height:1500px}.clearlabel{color:transparent!important;display:block!important;height:0!important;line-height:0!important;margin:0!important;opacity:0!important;overflow:hidden!important;padding:0!important;position:relative!important;width:0!important;overflow-wrap:normal!important;word-break:normal!important}.Banner{border:1px solid #dbdbdb;color:#363636;display:flex;border-radius:6px;background-color:#fff;min-width:50%}@media only screen and (max-width: 768px){.Banner{flex-direction:column}}.Banner ._Icon{flex-shrink:0;align-self:flex-start}.Banner .bannerContent{display:flex;flex-wrap:nowrap}.Banner .bannerActions{width:100%;flex-shrink:0;display:inline-flex;align-self:center;flex-direction:row;justify-content:flex-end}.Banner .bannerText{width:100%;display:inline-flex;padding:0 .5rem;text-align:start;white-space:pre-line}.Banner .bannerHeading{display:flex;justify-content:space-between;align-items:center;font-size:1.25rem;color:#363636;flex:0 0 auto;padding:.5rem;background-color:#dbdbdbe6;border-radius:6px 6px 0 0;margin-bottom:10px;border-bottom:1px solid #dbdbdb}.Banner .topRightClose{display:flex;position:relative;background:none;border:none;cursor:pointer;inset-inline-end:-3px;inset-inline-start:0px}.Banner .topRightCloseSVG{fill:#464646;height:1.5rem;width:1.5rem;margin-top:.1rem;padding-inline-start:.5rem}.botOptionsList{padding:.25rem 0 0;display:flex;flex-wrap:wrap;justify-content:flex-end;border:none}.botOptionsList .chatButton{margin-top:.4rem;margin-inline-start:.4rem;background-color:#fff;color:var(--WPColor-BrandSecondary);border-radius:1rem;box-shadow:none;padding-inline:1rem;font-size:.8rem;box-shadow:0 1px 5px #0003;border:none}.botOptionsList .chatButton{padding:.375rem .75rem;padding-top:calc(.375rem - 1px);padding-bottom:calc(.375rem - 1px)}@media only screen and (max-width: 480px){.botOptionsList .chatButton{padding:.625rem .75rem;padding-top:calc(.625rem - 1px);padding-bottom:calc(.625rem - 1px)}}.botOptionsList .chatButton:focus,.botOptionsList .chatButton:hover{text-decoration:underline;outline:auto;outline-color:var(--WPColor-BrandSecondary);box-shadow:none}.botOptionsList svg{height:1rem;width:1rem;margin-inline-end:.25rem;fill:#007bc6;vertical-align:bottom}.botOptionsList .break{flex-basis:100%;height:0}.botOptionsList .chatButton.backButton{border:1px solid transparent;background:none;box-shadow:none}.botOptionsList .chatButton.backButton svg{fill:var(--WPColor-BrandSecondary)}.botOptionsList .chatButton.backButton:focus{border:1px solid var(--WPColor-BrandSecondary);text-decoration:none}.botOptionsList .chatButton.backButton:hover{background-color:transparent;text-decoration:underline}.chatButton svg{height:1rem;width:1rem}.chatButton{border-radius:4px;padding:.375rem .75rem;padding-top:calc(.375rem - 1px);padding-bottom:calc(.375rem - 1px);font-weight:400;font-size:1rem;min-width:5rem}.chatButton:not([aria-disabled=true]):hover{cursor:pointer}@media only screen and (max-width: 480px){.chatButton{border-radius:4px;padding:.625rem .75rem;padding-top:calc(.625rem - 1px);padding-bottom:calc(.625rem - 1px);font-weight:400;font-size:1rem;min-width:5rem}}.chatButton[aria-disabled=true],.chatButton[aria-disabled=true].darkMode{background-color:#dbdbdb;color:#565656}.chatButton.positive{background-color:#048658;color:#fff;border:1px solid rgb(4,134,88)}.chatButton.positive.darkMode{background-color:#048658;color:#fff}.chatButton.positive:focus,.chatButton.positive:hover{background-color:#03724b;color:#fff}.chatButton.positive:focus.darkMode,.chatButton.positive:hover.darkMode{background-color:#03724b;color:#fff}.chatButton.negative{background-color:#d43f35;color:#fff;border:1px solid rgb(212,63,53)}.chatButton.negative.darkMode{background-color:#d43f35;color:#fff}.chatButton.negative.commandsecondary{background-color:#fff;color:#d80000;border:1px solid currentColor;box-shadow:none}.chatButton.negative.commandsecondary.darkMode{background-color:#fff;color:#d80000}.chatButton.negative.commandsecondary:focus,.chatButton.negative.commandsecondary:hover{background-color:#dbdbdbe6;color:#b80000;text-decoration:underline}.chatButton.neutral{background-color:#fff;color:var(--WPColor-BrandSecondary);border:1px solid var(--WPColor-BrandSecondary);box-shadow:none}.chatButton.neutral.darkMode{background-color:#007bc6;color:#fff}.chatButton.neutral:focus,.chatButton.neutral:hover{background-color:#dbdbdbe6;text-decoration:underline}.chatButton.neutral:focus.darkMode,.chatButton.neutral:hover.darkMode{background-color:#0069a8}.chatButton.neutral.commandprimary{background-color:var(--WPColor-BrandPrimary);color:#fff}.chatButton.neutral.commandprimary.darkMode{background-color:#007bc6;color:#fff}.chatButton.neutral.commandprimary:focus,.chatButton.neutral.commandprimary:hover{filter:brightness(.9)}.chatButton.floating{box-shadow:0 2px 3px #00000085}button.link{background-color:transparent;border:none;display:flex;align-items:center;min-width:unset}button.link p{color:#00a1db}button.link p:focus,button.link p:hover{color:#008dc0;text-decoration:underline}._ActionGroup{margin:.5rem}._ActionGroup .chatButton{margin-top:.5rem;margin-inline-start:.5rem}@media only screen and (max-width: 480px){._ActionGroup .chatButton{margin-top:.5rem;margin-inline-start:.5rem}}.chatButton.toggle{background-color:#fff;color:#565656;border:1px solid #767676;box-shadow:none}.chatButton.toggle:focus,.chatButton.toggle:hover{background-color:#e6f2f9;color:#0069a8}.chatButton.toggle.chosen{background-color:var(--WPColor-BrandPrimary);color:#fff;border:1px solid #767676;text-decoration:underline}.inline{display:inline}.subtleText{font-size:.8rem;color:#767676}.subtleText.darkMode{color:#ccc}.overLimit{font-size:.8rem;color:#d80000}.overLimit.darkMode{color:#f88787}.chatBotImage{border-radius:50%;width:1.75rem;min-width:1.75rem;height:1.75rem;min-height:1.75rem;display:inline-block;background-color:#fff;border:none;display:flex;justify-content:center;vertical-align:top}.chatBotImage svg{width:100%}[dir=rtl] .chatBotImage svg{transform:scaleX(-1)}.svgColor1{fill:#fff}.svgColor2{fill:#0d1f77}.svgColor3{fill:var(--WPColor-BrandSecondary)}#ChatScrollingSection{overflow-y:auto;overflow-x:hidden;flex-grow:1;background-color:#fff;display:flex;flex-direction:column-reverse;padding-inline-start:15px}:not([dir=rtl]) #ChatScrollingSection{scrollbar-gutter:stable}#ChatScrollingSection.darkMode{background-color:#262626}#ChatScrollingInnerContent{display:flex;flex-direction:column}#ChatScrollingInnerContent.isIos{transform:translateZ(0);-webkit-transform:translateZ(0)}#ChatScrollingInnerContent.shouldLoadFromBottom{padding-top:.5rem;flex-grow:0}#ChatScrollingInnerContent.shouldLoadFromTop{padding-bottom:.5rem;flex-grow:1}.newMessageButtonContainer{height:0}.newMessageButton{margin:0 auto;width:fit-content;margin-bottom:.25rem;position:relative;bottom:2.5rem;left:0;right:0;align-self:end;display:flex;align-items:center}@media only screen and (max-width: 480px){.newMessageButton{bottom:60px}}.newMessageButton svg{width:1rem;fill:#fff;margin-inline-end:.25rem}.CurrentlyTypingUsers{display:flex;font-size:.8rem;color:#565656;height:1.25rem;width:80%}.demographicVerificationForm{background-color:#fff;border:none;border-top:1px solid #cccccc;box-shadow:none;font-family:var(--LCFont-FontFamily);text-align:center;padding-top:.5rem;margin-top:1.5rem}.demographicVerificationForm .middle{margin:1rem 0}.prospectFormWidget{min-height:calc(39rem - 48px)}.phoneNumberLink{padding-inline-start:.25rem}.emptyRowBelow{padding-bottom:1rem}.MessageInputScaling{padding:.5rem;outline:0;border:0;white-space:break-spaces;word-wrap:break-word;display:block;visibility:hidden;margin:0;word-break:break-word}@media only screen and (max-width: 480px){.MessageInputScaling pre{min-height:34px}}.branding,.organizationLogoBrandingContainer,.epicBrandingContainer{align-self:center;display:flex;flex-direction:row}.epicBrandingContainer{margin-inline-start:4.4rem;margin-block:12px;height:1.5rem;width:12rem;align-items:center}.organizationLogoBrandingContainer{margin:12px 0 0}.organizationLogoURL{max-height:5rem;max-width:12rem;object-fit:contain}.brandingSVG{transform:translateY(.1rem);width:22%;margin-left:.6ch}.poweredByText{font-family:Source Sans Pro,Calibri,Arial,sans-serif!important;color:#565656;width:-moz-fit-content;width:fit-content;line-height:normal}.infoOverlay{min-width:300px;width:375px;text-align:start}@media only screen and (max-width: 480px){.infoOverlay{min-width:300px;width:90%;text-align:start}}.infoContent{padding-inline:1rem}.infoTable{display:flex;flex-flow:column nowrap;margin:0 auto}.infoRow{display:flex;flex-flow:row nowrap;width:100%;min-height:1.5rem}.infoCell,.notificationToggleCell,.notificationLabelCell,.shortcutAcceleratorCell,.shortcutBehaviorCell{display:flex;justify-content:start;align-items:center;flex:1}.shortcutBehaviorCell{flex:2}.shortcutAcceleratorCell{font-weight:700}.notificationLabelCell{flex:2}.notificationButton{min-width:unset;margin-inline-end:2px}.interactionMessageContainer{display:flex;align-content:space-between}.interactionMessageIcon{width:2.5rem;margin-top:auto}.inlineMessageContent{color:#565656;padding-inline-end:1rem}.middle .inlineMessageContent{color:#000}.senderName+.sentTime{margin-inline-start:.25rem}.sentTime,.senderName{display:inline-block;font-size:.8rem;color:#565656}.sentTime.darkMode,.senderName.darkMode{color:#fff}.loadingChatDataMessage{display:inline-block;padding:.5rem;margin:.5rem;border-radius:1rem;text-align:center;border:solid 1px #dbdbdb;background-color:#fff}.messageEntry{margin:.5rem .5rem .25rem}.messageEntryWithLessPadding{margin:.25rem .5rem}#MessageInputError dl{margin-block-start:0;margin-block-end:0;color:#d80000;font-size:.8rem;margin-bottom:.25rem}#MessageInputError dl dt.darkMode{color:#f88787}.messageComposerContainer{border-top:1px solid #cccccc;background-color:#fff}.messageComposerContainer.darkMode{background-color:#262626;border-top:1px solid #767676}.sendingStateContainer{min-height:.925rem}.sendingStatusMessage{display:inline-flex;flex-direction:column;align-items:flex-end;margin-top:.125rem}.sendingStatusMessage .failToSend{fill:#d80000;gap:1px;display:inline-flex;align-items:center}.sendingStatusMessage .failToSend.darkMode p{color:#f88787}.sendingStatusMessage .failToSend p{font-size:.925rem}.sendingStatusMessage.darkMode p{color:#ccc}.sendingStatusMessage .resendButton{fill:#00a1db;border:0px;padding:.25rem}.sendingStatusMessage .resendButton.darkMode{fill:#007099}@media only screen and (max-width: 480px){.sendingStatusMessage .resendButton{padding:.625rem;padding-top:calc(.625rem - 1px);padding-bottom:calc(.625rem - 1px)}}.sendingStatusMessage p{margin-inline-start:.125rem;margin-block:0;font-size:.8rem;color:#565656}.sendingStatusMessage svg{height:1rem;width:1rem}.sendingStatusMessage:hover .sendingStatusMessage:focus{color:#008dc0;fill:#008dc0}.sendingStatusMessage:hover .sendingStatusMessage:focus.darkMode{color:#ccc}.verificationErrorIcon{fill:#d80000;margin-left:.25rem;cursor:pointer}.verificationErrorIcon.darkMode{fill:#f88787}#MessageInteractiveContent{display:flex;flex-direction:row;margin-bottom:.5rem}.textContainer{position:relative;margin-inline-end:.5rem;display:inline-block;width:100%;height:100%;max-height:10rem;min-height:2.5rem;overflow:hidden;padding-top:2px;padding-bottom:2px;border:1px solid #cccccc;border-radius:.5rem}.textContainer.darkMode{background-color:#262626;border:1px solid #767676}.messageInputTextArea{width:100%;height:100%;overflow-x:hidden;overflow-y:hidden}.messageInputTextArea textarea{border:1px solid transparent;border-radius:.5rem;width:100%;height:100%;position:absolute;overflow-y:auto;top:0;left:0;right:0;padding:.5rem;font-size:1rem;resize:none;outline:none;background-color:#fff;color:#000}.messageInputTextArea textarea::placeholder{color:#565656}.messageInputTextArea textarea.darkMode{background-color:#262626;color:#fff}.messageInputTextArea textarea.darkMode::placeholder{color:#8d8d8d}@media only screen and (max-width: 480px){.messageInputTextArea textarea{padding-top:8px}}.messageInputTextArea textarea:focus{border:1px solid #767676;outline:none}.sendMessageButton{background-color:var(--WPColor-BrandSecondary);color:#fff;border:none;margin:0;border-radius:.5rem;align-self:end;display:flex;align-items:center;font-size:1rem;height:1.75rem;min-height:2.5rem}.sendMessageButton.darkMode{background-color:#007bc6;color:#fff}@media only screen and (max-width: 480px){.sendMessageButton{height:2.5rem}}.sendMessageButton[aria-disabled=true]:focus,.sendMessageButton[aria-disabled=true]:hover,.sendMessageButton[aria-disabled=true]{background-color:#dbdbdb;border:none;box-shadow:none;color:#565656;text-decoration:none;transform:none;filter:none;cursor:default}.sendMessageButton[aria-disabled=true]:focus.darkMode,.sendMessageButton[aria-disabled=true]:hover.darkMode,.sendMessageButton[aria-disabled=true].darkMode{background-color:#dbdbdb;color:#565656}.sendMessageButton p{margin-inline-end:6px;margin-inline-start:2px;padding-bottom:1px}.sendMessageButton svg{height:1.5rem;width:1.5rem;fill:#fff;margin-inline-end:2px}.sendMessageButton svg.darkMode{fill:#fff}[dir=rtl] .sendMessageButton svg{transform:scaleX(-1)}.sendMessageButton[aria-disabled=true] svg{fill:#565656}.sendMessageButton:focus{filter:opacity(.9);outline:none}.sendMessageButton:hover{filter:opacity(.9);cursor:pointer}.messageList{margin:0;padding:0}.messageList .System{margin:6px 0}.messageList>li{padding-bottom:2px}.messageList li .otherParticipant{margin-inline-end:2px}.messageList li .self{margin-inline-start:2px}.includeRetryIcon{display:inline-flex;align-items:center}.includeRetryIcon.firstMessage .verificationErrorIcon{margin-top:.25rem}.includeRetryIcon:first-child{margin-inline-end:.5rem}.textNoDisp{position:absolute;opacity:0;left:-9999px}.senderInfo{vertical-align:top;color:#767676;height:.925rem;font-size:.8rem;margin-bottom:.125rem;display:flex;margin-top:2px}.senderInfo.darkMode{margin-top:.7rem}.right .senderInfo{justify-content:end;margin-inline-end:1.5rem;margin-inline-start:auto}.left .senderInfo{justify-content:start;margin-inline-start:3rem;margin-inline-end:auto}.middle .senderInfo{justify-content:center}.minimizedChat{background-color:var(--WPColor-BrandPrimary);color:#fff;border:none;display:flex;align-items:center;box-shadow:0 2px 3px #00000085}@media only screen and (max-width: 480px){.minimizedChat{padding:.625rem .75rem;padding-top:calc(.625rem - 1px);padding-bottom:calc(.625rem - 1px)}}.minimizedChatWithText{font-size:1.25rem;border-radius:1.5rem;padding:.475rem .9rem}.minimizedChatNoText{height:60px;width:60px;min-width:60px;border-radius:50%;display:flex;justify-content:center;padding:.375rem .75rem}.minimizedChat *{font-family:var(--LCFont-FontFamily)}.minimizedChatNoText svg{height:70%;width:70%;fill:#fff;margin:0}.minimizedChatWithText svg{height:1rem;width:1rem;fill:#fff}.minimizedChat .minTitle{display:block;margin-bottom:.15rem;margin-inline-end:.3rem;margin-inline-start:.375rem;font-size:large;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;max-width:250px}.minimizedChat .notificationDot{fill:#d80000;stroke:#fff;position:absolute;inset-inline-end:0;inset-inline-start:auto;top:-.4rem;width:1rem;height:1rem}.minimizedChat .ongoingChatNotificationDot{fill:#09aa71;stroke:#fff;position:absolute;inset-inline-end:0;inset-inline-start:auto;top:-.4rem;width:1rem;height:1rem}.minimizedChat:hover{filter:brightness(.9);cursor:pointer}[dir=rtl] .flipChatIconForRtl{transform:scaleX(-1)}.mycWidgetContainer{visibility:\"visible\";max-height:2000px}.participantInitial{border-radius:50%;width:1.75rem;min-width:1.75rem;height:1.75rem;min-height:1.75rem;line-height:1.75rem;display:inline-block;text-align:center;color:#fff;background-color:var(--WPColor-BrandPrimary)}.participantInitial.userIconColor0{background-color:#09aa71;color:#fff}.participantInitial.userIconColor1{background-color:#abeaef;color:#015894}.participantInitial.userIconColor2{background-color:#f7d6fe;color:#940194}.participantInitial.userIconColor3{background-color:#ddef94;color:#3b6000}.participantInitial.userIconColor4{background-color:#eed6fe;color:#711ab8}.participantInitial.userIconColor5{background-color:#fbd4a2;color:#9d3100}.participantInitial.userIconColor6{background-color:#b6f5cc;color:#135850}.participantInitial.userIconColor7{background-color:#dadafe;color:#4045cf}.participantInitial.userIconColor8{background-color:#cbebfe;color:#014094}.participantInitial.userIconColor9{background-color:#e6dafe;color:#9e1573}.participantInitial.userIconColor10{background-color:#fccde6;color:#1d592a}.participantInitial.userIconColor11{background-color:#cdefb4;color:#1b6172}.participantInitial.userIconColor12{background-color:#bef5e6;color:#2249bd}.participantInitial.userIconColor13{background-color:#d0dffe;color:#2249bd}.participantInitial.userIconColor14{background-color:#dddde5;color:#57576c}.messageBodyContainer{text-align:start;display:inline-block;padding:.5rem 1rem;min-height:1rem;max-height:5000rem;border-radius:1rem;white-space:pre-wrap;overflow-wrap:anywhere;position:relative;max-width:calc(100% - 2.5rem)}.messageBody{overflow-wrap:anywhere;word-wrap:anywhere}.messageBodyContainer.otherParticipant{background-color:#eaeaea;color:#363636;border-end-start-radius:0px;border-end-end-radius:1rem}.messageBodyContainer.otherParticipant.darkMode{background-color:#434343;color:#fff}.messageBodyContainer.otherParticipant.darkMode a:-webkit-any-link{color:#84b3fb}.messageBodyContainer.otherParticipant.darkMode a:-webkit-any-link:visited{color:#84b3fb}.messageBodyContainer.self{background-color:var(--WPColor-BrandPrimary);color:#fff;border-end-end-radius:0px;border-end-start-radius:1rem}.messageBodyContainer.self.darkMode{background-color:#eaeaea;color:#363636}.messageBodyContainer.self.darkMode a:-webkit-any-link{color:#007099}.messageBodyContainer.self.darkMode a:-webkit-any-link:visited{color:#007099}.messageBodyContainer.System{border:none;background:#e0f1ff;color:#000;margin:0 1rem}.selfChatTail,.messageBodyContainer.self.single.darkMode :before,.messageBodyContainer.self.group-last.darkMode :before,.messageBodyContainer.self.single :before,.messageBodyContainer.self.group-last :before{content:\"\";position:absolute;bottom:0;inset-inline-start:auto;inset-inline-end:-9px;width:10px;height:10px;background:radial-gradient(10px at top right,transparent 10px,transparent 10px,transparent 10px,var(--WPColor-BrandPrimary) 102%)}[dir=rtl] .selfChatTail,[dir=rtl] .messageBodyContainer.self.single :before,.messageBodyContainer.self.single [dir=rtl] :before,[dir=rtl] .messageBodyContainer.self.group-last :before,.messageBodyContainer.self.group-last [dir=rtl] :before{background:radial-gradient(10px at top left,transparent 10px,transparent 10px,transparent 10px,var(--WPColor-BrandPrimary) 102%)}.otherParticipantChatTail,.messageBodyContainer.otherParticipant.single.darkMode :before,.messageBodyContainer.otherParticipant.group-last.darkMode :before,.messageBodyContainer.otherParticipant.single :before,.messageBodyContainer.otherParticipant.group-last :before{content:\"\";position:absolute;bottom:0;inset-inline-end:auto;inset-inline-start:-10px;width:11px;height:10px;background:radial-gradient(10px at top left,transparent 10px,transparent 10px,transparent 10px,#eaeaea 102%)}[dir=rtl] .otherParticipantChatTail,[dir=rtl] .messageBodyContainer.otherParticipant.single :before,.messageBodyContainer.otherParticipant.single [dir=rtl] :before,[dir=rtl] .messageBodyContainer.otherParticipant.group-last :before,.messageBodyContainer.otherParticipant.group-last [dir=rtl] :before{background:radial-gradient(10px at top right,transparent 10px,transparent 10px,transparent 10px,#eaeaea 102%)}.messageBodyContainer.self.single.darkMode :before,.messageBodyContainer.self.group-last.darkMode :before{background:radial-gradient(10px at top right,transparent 10px,transparent 10px,transparent 10px,rgb(234,234,234) 102%)}[dir=rtl] .messageBodyContainer.self.single.darkMode :before,[dir=rtl] .messageBodyContainer.self.group-last.darkMode :before{background:radial-gradient(10px at top left,transparent 10px,transparent 10px,transparent 10px,rgb(234,234,234) 102%)}.messageBodyContainer.self.single{margin-top:.5rem}.messageBodyContainer.self.group-first{border-end-end-radius:1rem;margin-top:.5rem}.messageBodyContainer.self.group-middle{border-end-end-radius:1rem}.messageBodyContainer.self.hasMetadataAbove{margin-top:0rem}.messageBodyContainer.otherParticipant.single.darkMode :before,.messageBodyContainer.otherParticipant.group-last.darkMode :before{background:radial-gradient(10px at top left,transparent 10px,transparent 10px,transparent 10px,#434343 102%)}[dir=rtl] .messageBodyContainer.otherParticipant.single.darkMode :before,[dir=rtl] .messageBodyContainer.otherParticipant.group-last.darkMode :before{background:radial-gradient(10px at top right,transparent 10px,transparent 10px,transparent 10px,#434343 102%)}.messageBodyContainer.otherParticipant.group-first,.messageBodyContainer.otherParticipant.group-middle{border-end-start-radius:1rem;margin-inline-start:2.25rem}.skeleton,.skeleton-button,.skeleton-subheading,.skeleton-heading,.skeleton-field,.skeleton-label{background:linear-gradient(90deg,#eaeaea 25%,#dbdbdb 50%,#eaeaea 75%);background-size:200% 100%;animation:loading 4s infinite ease-in-out;border-radius:4px;margin-bottom:.5rem}.skeleton-label{width:100px;height:20px;margin-bottom:.25rem}.skeleton-field{width:100%;height:50px}.skeleton-heading{width:200px;height:20px;margin-bottom:.25rem}.skeleton-subheading{width:150px;height:20px}.skeleton-button{width:100%;height:30px;margin-bottom:.25rem}@keyframes loading{0%{background-position:200% 0}to{background-position:-200% 0}}.titleBar{display:flex;background-color:var(--WPColor-BrandPrimary);color:#fff;min-height:48px;padding-inline-start:.25rem}@media only screen and (max-width: 480px){.titleBar{min-height:48px}}.titleBar .title{display:block;width:calc(100% - (142px + 3rem));padding:0 .5rem;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;line-height:46px}.titleBar .title h2{display:block;font-size:1.25rem;font-weight:unset;margin:unset;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;align-items:center}.titleBar svg{width:1.5rem;fill:#fff;align-items:center;margin-top:1px}.chatIconTitlebar{padding-inline-start:.5rem}[dir=rtl] .chatIconTitlebar{transform:scaleX(-1)}.barButtons{display:flex;position:absolute;inset-inline-end:0;inset-inline-start:auto}.barButtons svg{width:16px;height:16px;display:inline}.barButtons button{display:block;border-radius:unset;min-width:44px;padding:0;border:none}@media only screen and (max-width: 480px){.barButtons button{padding:2px;min-width:48px;min-height:47px}}.barButtons button:focus,.barButtons button:hover{filter:brightness(.9)}.closeButton button:focus,.closeButton:hover{background-color:#d80000!important}.helpButton svg{width:24px;height:24px}.TransparentOverlay,.TransparentOverlayBackground{align-items:center;background-repeat:no-repeat;display:flex;flex-direction:column;height:0%;justify-content:center;position:absolute;text-align:center;width:0%;z-index:100;color:#fff;padding:2rem}.TransparentOverlayBackground{background-color:#000;opacity:60%;height:100%;width:100%}.TransparentOverlay.show,.show.TransparentOverlayBackground{height:100%;width:100%}.typingIndicator{display:flex;align-items:flex-end;margin:0 .25rem}.typingIndicator span{height:5px;width:5px;margin-inline-end:4px;background-color:#767676;border-radius:50%;position:relative;animation:bouncingCircle 1.5s infinite ease-in-out}.typingIndicator span.darkMode{background-color:#ccc}.typingIndicatorText{padding-top:.25rem;color:#767676}.typingIndicatorText.darkMode{color:#ccc}@keyframes bouncingCircle{0%{-webkit-transform:translateY(0px)}28%{-webkit-transform:translateY(-3px)}44%{-webkit-transform:translateY(0px)}}.typingIndicator span:nth-of-type(1){animation-delay:.2s}.typingIndicator span:nth-of-type(2){animation-delay:.3s}.typingIndicator span:nth-of-type(3){animation-delay:.4s}')),document.head.appendChild(e)}}catch(r){console.error(\"vite-plugin-css-injected-by-js\",r)}})();\nimport * as Ye from \"react\";\nimport pe, { useContext as ho, useRef as G, useCallback as x, useDebugValue as es, useMemo as Me, createContext as ts, memo as R, useState as ie, useEffect as Y, Fragment as ns } from \"react\";\nimport { unstable_batchedUpdates as rs } from \"react-dom\";\nvar Fn = { exports: {} }, cn = {};\n/**\n * @license React\n * use-sync-external-store-shim.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nvar dr;\nfunction os() {\n if (dr)\n return cn;\n dr = 1;\n var e = pe;\n function t(d, h) {\n return d === h && (d !== 0 || 1 / d === 1 / h) || d !== d && h !== h;\n }\n var n = typeof Object.is == \"function\" ? Object.is : t, r = e.useState, o = e.useEffect, a = e.useLayoutEffect, s = e.useDebugValue;\n function i(d, h) {\n var y = h(), v = r({ inst: { value: y, getSnapshot: h } }), p = v[0].inst, g = v[1];\n return a(function() {\n p.value = y, p.getSnapshot = h, l(p) && g({ inst: p });\n }, [d, y, h]), o(function() {\n return l(p) && g({ inst: p }), d(function() {\n l(p) && g({ inst: p });\n });\n }, [d]), s(y), y;\n }\n function l(d) {\n var h = d.getSnapshot;\n d = d.value;\n try {\n var y = h();\n return !n(d, y);\n } catch {\n return !0;\n }\n }\n function c(d, h) {\n return h();\n }\n var u = typeof window > \"u\" || typeof window.document > \"u\" || typeof window.document.createElement > \"u\" ? c : i;\n return cn.useSyncExternalStore = e.useSyncExternalStore !== void 0 ? e.useSyncExternalStore : u, cn;\n}\nvar un = {};\n/**\n * @license React\n * use-sync-external-store-shim.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nvar fr;\nfunction as() {\n return fr || (fr = 1, process.env.NODE_ENV !== \"production\" && function() {\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ < \"u\" && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart == \"function\" && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error());\n var e = pe, t = e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n function n(T) {\n {\n for (var w = arguments.length, m = new Array(w > 1 ? w - 1 : 0), I = 1; I < w; I++)\n m[I - 1] = arguments[I];\n r(\"error\", T, m);\n }\n }\n function r(T, w, m) {\n {\n var I = t.ReactDebugCurrentFrame, k = I.getStackAddendum();\n k !== \"\" && (w += \"%s\", m = m.concat([k]));\n var L = m.map(function(P) {\n return String(P);\n });\n L.unshift(\"Warning: \" + w), Function.prototype.apply.call(console[T], console, L);\n }\n }\n function o(T, w) {\n return T === w && (T !== 0 || 1 / T === 1 / w) || T !== T && w !== w;\n }\n var a = typeof Object.is == \"function\" ? Object.is : o, s = e.useState, i = e.useEffect, l = e.useLayoutEffect, c = e.useDebugValue, u = !1, d = !1;\n function h(T, w, m) {\n u || e.startTransition !== void 0 && (u = !0, n(\"You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release.\"));\n var I = w();\n if (!d) {\n var k = w();\n a(I, k) || (n(\"The result of getSnapshot should be cached to avoid an infinite loop\"), d = !0);\n }\n var L = s({\n inst: {\n value: I,\n getSnapshot: w\n }\n }), P = L[0].inst, V = L[1];\n return l(function() {\n P.value = I, P.getSnapshot = w, y(P) && V({\n inst: P\n });\n }, [T, I, w]), i(function() {\n y(P) && V({\n inst: P\n });\n var j = function() {\n y(P) && V({\n inst: P\n });\n };\n return T(j);\n }, [T]), c(I), I;\n }\n function y(T) {\n var w = T.getSnapshot, m = T.value;\n try {\n var I = w();\n return !a(m, I);\n } catch {\n return !0;\n }\n }\n function v(T, w, m) {\n return w();\n }\n var p = typeof window < \"u\" && typeof window.document < \"u\" && typeof window.document.createElement < \"u\", g = !p, E = g ? v : h, b = e.useSyncExternalStore !== void 0 ? e.useSyncExternalStore : E;\n un.useSyncExternalStore = b, typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ < \"u\" && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop == \"function\" && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error());\n }()), un;\n}\n(function(e) {\n process.env.NODE_ENV === \"production\" ? e.exports = os() : e.exports = as();\n})(Fn);\nvar go = { exports: {} }, ln = {};\n/**\n * @license React\n * use-sync-external-store-shim/with-selector.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nvar hr;\nfunction ss() {\n if (hr)\n return ln;\n hr = 1;\n var e = pe, t = Fn.exports;\n function n(c, u) {\n return c === u && (c !== 0 || 1 / c === 1 / u) || c !== c && u !== u;\n }\n var r = typeof Object.is == \"function\" ? Object.is : n, o = t.useSyncExternalStore, a = e.useRef, s = e.useEffect, i = e.useMemo, l = e.useDebugValue;\n return ln.useSyncExternalStoreWithSelector = function(c, u, d, h, y) {\n var v = a(null);\n if (v.current === null) {\n var p = { hasValue: !1, value: null };\n v.current = p;\n } else\n p = v.current;\n v = i(function() {\n function E(I) {\n if (!b) {\n if (b = !0, T = I, I = h(I), y !== void 0 && p.hasValue) {\n var k = p.value;\n if (y(k, I))\n return w = k;\n }\n return w = I;\n }\n if (k = w, r(T, I))\n return k;\n var L = h(I);\n return y !== void 0 && y(k, L) ? k : (T = I, w = L);\n }\n var b = !1, T, w, m = d === void 0 ? null : d;\n return [function() {\n return E(u());\n }, m === null ? void 0 : function() {\n return E(m());\n }];\n }, [u, d, h, y]);\n var g = o(c, v[0], v[1]);\n return s(function() {\n p.hasValue = !0, p.value = g;\n }, [g]), l(g), g;\n }, ln;\n}\nvar dn = {};\n/**\n * @license React\n * use-sync-external-store-shim/with-selector.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nvar gr;\nfunction is() {\n return gr || (gr = 1, process.env.NODE_ENV !== \"production\" && function() {\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ < \"u\" && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart == \"function\" && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error());\n var e = pe, t = Fn.exports;\n function n(u, d) {\n return u === d && (u !== 0 || 1 / u === 1 / d) || u !== u && d !== d;\n }\n var r = typeof Object.is == \"function\" ? Object.is : n, o = t.useSyncExternalStore, a = e.useRef, s = e.useEffect, i = e.useMemo, l = e.useDebugValue;\n function c(u, d, h, y, v) {\n var p = a(null), g;\n p.current === null ? (g = {\n hasValue: !1,\n value: null\n }, p.current = g) : g = p.current;\n var E = i(function() {\n var m = !1, I, k, L = function(K) {\n if (!m) {\n m = !0, I = K;\n var ce = y(K);\n if (v !== void 0 && g.hasValue) {\n var te = g.value;\n if (v(te, ce))\n return k = te, te;\n }\n return k = ce, ce;\n }\n var _e = I, X = k;\n if (r(_e, K))\n return X;\n var de = y(K);\n return v !== void 0 && v(X, de) ? X : (I = K, k = de, de);\n }, P = h === void 0 ? null : h, V = function() {\n return L(d());\n }, j = P === null ? void 0 : function() {\n return L(P());\n };\n return [V, j];\n }, [d, h, y, v]), b = E[0], T = E[1], w = o(u, b, T);\n return s(function() {\n g.hasValue = !0, g.value = w;\n }, [w]), l(w), w;\n }\n dn.useSyncExternalStoreWithSelector = c, typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ < \"u\" && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop == \"function\" && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error());\n }()), dn;\n}\n(function(e) {\n process.env.NODE_ENV === \"production\" ? e.exports = ss() : e.exports = is();\n})(go);\nfunction cs(e) {\n e();\n}\nlet mo = cs;\nconst us = (e) => mo = e, ls = () => mo, mr = Symbol.for(\"react-redux-context\"), pr = typeof globalThis < \"u\" ? globalThis : {};\nfunction ds() {\n var e;\n if (!Ye.createContext)\n return {};\n const t = (e = pr[mr]) != null ? e : pr[mr] = /* @__PURE__ */ new Map();\n let n = t.get(Ye.createContext);\n return n || (n = Ye.createContext(null), process.env.NODE_ENV !== \"production\" && (n.displayName = \"ReactRedux\"), t.set(Ye.createContext, n)), n;\n}\nconst Je = /* @__PURE__ */ ds();\nfunction jn(e = Je) {\n return function() {\n const n = ho(e);\n if (process.env.NODE_ENV !== \"production\" && !n)\n throw new Error(\"could not find react-redux context value; please ensure the component is wrapped in a \");\n return n;\n };\n}\nconst po = /* @__PURE__ */ jn(), fs = () => {\n throw new Error(\"uSES not initialized!\");\n};\nlet yo = fs;\nconst hs = (e) => {\n yo = e;\n}, gs = (e, t) => e === t;\nfunction ms(e = Je) {\n const t = e === Je ? po : jn(e);\n return function(r, o = {}) {\n const {\n equalityFn: a = gs,\n stabilityCheck: s = void 0,\n noopCheck: i = void 0\n } = typeof o == \"function\" ? {\n equalityFn: o\n } : o;\n if (process.env.NODE_ENV !== \"production\") {\n if (!r)\n throw new Error(\"You must pass a selector to useSelector\");\n if (typeof r != \"function\")\n throw new Error(\"You must pass a function as a selector to useSelector\");\n if (typeof a != \"function\")\n throw new Error(\"You must pass a function as an equality function to useSelector\");\n }\n const {\n store: l,\n subscription: c,\n getServerState: u,\n stabilityCheck: d,\n noopCheck: h\n } = t(), y = G(!0), v = x({\n [r.name](g) {\n const E = r(g);\n if (process.env.NODE_ENV !== \"production\") {\n const b = typeof s > \"u\" ? d : s;\n if (b === \"always\" || b === \"once\" && y.current) {\n const w = r(g);\n if (!a(E, w)) {\n let m;\n try {\n throw new Error();\n } catch (I) {\n ({\n stack: m\n } = I);\n }\n console.warn(\"Selector \" + (r.name || \"unknown\") + ` returned a different result when called with the same parameters. This can lead to unnecessary rerenders.\nSelectors that return a new reference (such as an object or an array) should be memoized: https://redux.js.org/usage/deriving-data-selectors#optimizing-selectors-with-memoization`, {\n state: g,\n selected: E,\n selected2: w,\n stack: m\n });\n }\n }\n const T = typeof i > \"u\" ? h : i;\n if ((T === \"always\" || T === \"once\" && y.current) && E === g) {\n let w;\n try {\n throw new Error();\n } catch (m) {\n ({\n stack: w\n } = m);\n }\n console.warn(\"Selector \" + (r.name || \"unknown\") + ` returned the root state when called. This can lead to unnecessary rerenders.\nSelectors that return the entire state are almost certainly a mistake, as they will cause a rerender whenever *anything* in state changes.`, {\n stack: w\n });\n }\n y.current && (y.current = !1);\n }\n return E;\n }\n }[r.name], [r, d, s]), p = yo(c.addNestedSub, l.getState, u || l.getState, v, a);\n return es(p), p;\n };\n}\nconst ps = /* @__PURE__ */ ms();\nvar vo = { exports: {} }, q = {};\n/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nvar yr;\nfunction ys() {\n if (yr)\n return q;\n yr = 1;\n var e = typeof Symbol == \"function\" && Symbol.for, t = e ? Symbol.for(\"react.element\") : 60103, n = e ? Symbol.for(\"react.portal\") : 60106, r = e ? Symbol.for(\"react.fragment\") : 60107, o = e ? Symbol.for(\"react.strict_mode\") : 60108, a = e ? Symbol.for(\"react.profiler\") : 60114, s = e ? Symbol.for(\"react.provider\") : 60109, i = e ? Symbol.for(\"react.context\") : 60110, l = e ? Symbol.for(\"react.async_mode\") : 60111, c = e ? Symbol.for(\"react.concurrent_mode\") : 60111, u = e ? Symbol.for(\"react.forward_ref\") : 60112, d = e ? Symbol.for(\"react.suspense\") : 60113, h = e ? Symbol.for(\"react.suspense_list\") : 60120, y = e ? Symbol.for(\"react.memo\") : 60115, v = e ? Symbol.for(\"react.lazy\") : 60116, p = e ? Symbol.for(\"react.block\") : 60121, g = e ? Symbol.for(\"react.fundamental\") : 60117, E = e ? Symbol.for(\"react.responder\") : 60118, b = e ? Symbol.for(\"react.scope\") : 60119;\n function T(m) {\n if (typeof m == \"object\" && m !== null) {\n var I = m.$$typeof;\n switch (I) {\n case t:\n switch (m = m.type, m) {\n case l:\n case c:\n case r:\n case a:\n case o:\n case d:\n return m;\n default:\n switch (m = m && m.$$typeof, m) {\n case i:\n case u:\n case v:\n case y:\n case s:\n return m;\n default:\n return I;\n }\n }\n case n:\n return I;\n }\n }\n }\n function w(m) {\n return T(m) === c;\n }\n return q.AsyncMode = l, q.ConcurrentMode = c, q.ContextConsumer = i, q.ContextProvider = s, q.Element = t, q.ForwardRef = u, q.Fragment = r, q.Lazy = v, q.Memo = y, q.Portal = n, q.Profiler = a, q.StrictMode = o, q.Suspense = d, q.isAsyncMode = function(m) {\n return w(m) || T(m) === l;\n }, q.isConcurrentMode = w, q.isContextConsumer = function(m) {\n return T(m) === i;\n }, q.isContextProvider = function(m) {\n return T(m) === s;\n }, q.isElement = function(m) {\n return typeof m == \"object\" && m !== null && m.$$typeof === t;\n }, q.isForwardRef = function(m) {\n return T(m) === u;\n }, q.isFragment = function(m) {\n return T(m) === r;\n }, q.isLazy = function(m) {\n return T(m) === v;\n }, q.isMemo = function(m) {\n return T(m) === y;\n }, q.isPortal = function(m) {\n return T(m) === n;\n }, q.isProfiler = function(m) {\n return T(m) === a;\n }, q.isStrictMode = function(m) {\n return T(m) === o;\n }, q.isSuspense = function(m) {\n return T(m) === d;\n }, q.isValidElementType = function(m) {\n return typeof m == \"string\" || typeof m == \"function\" || m === r || m === c || m === a || m === o || m === d || m === h || typeof m == \"object\" && m !== null && (m.$$typeof === v || m.$$typeof === y || m.$$typeof === s || m.$$typeof === i || m.$$typeof === u || m.$$typeof === g || m.$$typeof === E || m.$$typeof === b || m.$$typeof === p);\n }, q.typeOf = T, q;\n}\nvar z = {};\n/** @license React v16.13.1\n * react-is.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nvar vr;\nfunction vs() {\n return vr || (vr = 1, process.env.NODE_ENV !== \"production\" && function() {\n var e = typeof Symbol == \"function\" && Symbol.for, t = e ? Symbol.for(\"react.element\") : 60103, n = e ? Symbol.for(\"react.portal\") : 60106, r = e ? Symbol.for(\"react.fragment\") : 60107, o = e ? Symbol.for(\"react.strict_mode\") : 60108, a = e ? Symbol.for(\"react.profiler\") : 60114, s = e ? Symbol.for(\"react.provider\") : 60109, i = e ? Symbol.for(\"react.context\") : 60110, l = e ? Symbol.for(\"react.async_mode\") : 60111, c = e ? Symbol.for(\"react.concurrent_mode\") : 60111, u = e ? Symbol.for(\"react.forward_ref\") : 60112, d = e ? Symbol.for(\"react.suspense\") : 60113, h = e ? Symbol.for(\"react.suspense_list\") : 60120, y = e ? Symbol.for(\"react.memo\") : 60115, v = e ? Symbol.for(\"react.lazy\") : 60116, p = e ? Symbol.for(\"react.block\") : 60121, g = e ? Symbol.for(\"react.fundamental\") : 60117, E = e ? Symbol.for(\"react.responder\") : 60118, b = e ? Symbol.for(\"react.scope\") : 60119;\n function T(D) {\n return typeof D == \"string\" || typeof D == \"function\" || D === r || D === c || D === a || D === o || D === d || D === h || typeof D == \"object\" && D !== null && (D.$$typeof === v || D.$$typeof === y || D.$$typeof === s || D.$$typeof === i || D.$$typeof === u || D.$$typeof === g || D.$$typeof === E || D.$$typeof === b || D.$$typeof === p);\n }\n function w(D) {\n if (typeof D == \"object\" && D !== null) {\n var fe = D.$$typeof;\n switch (fe) {\n case t:\n var N = D.type;\n switch (N) {\n case l:\n case c:\n case r:\n case a:\n case o:\n case d:\n return N;\n default:\n var se = N && N.$$typeof;\n switch (se) {\n case i:\n case u:\n case v:\n case y:\n case s:\n return se;\n default:\n return fe;\n }\n }\n case n:\n return fe;\n }\n }\n }\n var m = l, I = c, k = i, L = s, P = t, V = u, j = r, K = v, ce = y, te = n, _e = a, X = o, de = d, ae = !1;\n function Ee(D) {\n return ae || (ae = !0, console.warn(\"The ReactIs.isAsyncMode() alias has been deprecated, and will be removed in React 17+. Update your code to use ReactIs.isConcurrentMode() instead. It has the exact same API.\")), Be(D) || w(D) === l;\n }\n function Be(D) {\n return w(D) === c;\n }\n function we(D) {\n return w(D) === i;\n }\n function Ne(D) {\n return w(D) === s;\n }\n function Ze(D) {\n return typeof D == \"object\" && D !== null && D.$$typeof === t;\n }\n function Re(D) {\n return w(D) === u;\n }\n function ke(D) {\n return w(D) === r;\n }\n function Ie(D) {\n return w(D) === v;\n }\n function Ue(D) {\n return w(D) === y;\n }\n function Fe(D) {\n return w(D) === n;\n }\n function je(D) {\n return w(D) === a;\n }\n function De(D) {\n return w(D) === o;\n }\n function Ve(D) {\n return w(D) === d;\n }\n z.AsyncMode = m, z.ConcurrentMode = I, z.ContextConsumer = k, z.ContextProvider = L, z.Element = P, z.ForwardRef = V, z.Fragment = j, z.Lazy = K, z.Memo = ce, z.Portal = te, z.Profiler = _e, z.StrictMode = X, z.Suspense = de, z.isAsyncMode = Ee, z.isConcurrentMode = Be, z.isContextConsumer = we, z.isContextProvider = Ne, z.isElement = Ze, z.isForwardRef = Re, z.isFragment = ke, z.isLazy = Ie, z.isMemo = Ue, z.isPortal = Fe, z.isProfiler = je, z.isStrictMode = De, z.isSuspense = Ve, z.isValidElementType = T, z.typeOf = w;\n }()), z;\n}\n(function(e) {\n process.env.NODE_ENV === \"production\" ? e.exports = ys() : e.exports = vs();\n})(vo);\nvar So = vo.exports, Ss = {\n $$typeof: !0,\n render: !0,\n defaultProps: !0,\n displayName: !0,\n propTypes: !0\n}, bs = {\n $$typeof: !0,\n compare: !0,\n defaultProps: !0,\n displayName: !0,\n propTypes: !0,\n type: !0\n}, bo = {};\nbo[So.ForwardRef] = Ss;\nbo[So.Memo] = bs;\nvar Es = { exports: {} }, W = {};\n/**\n * @license React\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nvar Sr;\nfunction ws() {\n if (Sr)\n return W;\n Sr = 1;\n var e = Symbol.for(\"react.element\"), t = Symbol.for(\"react.portal\"), n = Symbol.for(\"react.fragment\"), r = Symbol.for(\"react.strict_mode\"), o = Symbol.for(\"react.profiler\"), a = Symbol.for(\"react.provider\"), s = Symbol.for(\"react.context\"), i = Symbol.for(\"react.server_context\"), l = Symbol.for(\"react.forward_ref\"), c = Symbol.for(\"react.suspense\"), u = Symbol.for(\"react.suspense_list\"), d = Symbol.for(\"react.memo\"), h = Symbol.for(\"react.lazy\"), y = Symbol.for(\"react.offscreen\"), v;\n v = Symbol.for(\"react.module.reference\");\n function p(g) {\n if (typeof g == \"object\" && g !== null) {\n var E = g.$$typeof;\n switch (E) {\n case e:\n switch (g = g.type, g) {\n case n:\n case o:\n case r:\n case c:\n case u:\n return g;\n default:\n switch (g = g && g.$$typeof, g) {\n case i:\n case s:\n case l:\n case h:\n case d:\n case a:\n return g;\n default:\n return E;\n }\n }\n case t:\n return E;\n }\n }\n }\n return W.ContextConsumer = s, W.ContextProvider = a, W.Element = e, W.ForwardRef = l, W.Fragment = n, W.Lazy = h, W.Memo = d, W.Portal = t, W.Profiler = o, W.StrictMode = r, W.Suspense = c, W.SuspenseList = u, W.isAsyncMode = function() {\n return !1;\n }, W.isConcurrentMode = function() {\n return !1;\n }, W.isContextConsumer = function(g) {\n return p(g) === s;\n }, W.isContextProvider = function(g) {\n return p(g) === a;\n }, W.isElement = function(g) {\n return typeof g == \"object\" && g !== null && g.$$typeof === e;\n }, W.isForwardRef = function(g) {\n return p(g) === l;\n }, W.isFragment = function(g) {\n return p(g) === n;\n }, W.isLazy = function(g) {\n return p(g) === h;\n }, W.isMemo = function(g) {\n return p(g) === d;\n }, W.isPortal = function(g) {\n return p(g) === t;\n }, W.isProfiler = function(g) {\n return p(g) === o;\n }, W.isStrictMode = function(g) {\n return p(g) === r;\n }, W.isSuspense = function(g) {\n return p(g) === c;\n }, W.isSuspenseList = function(g) {\n return p(g) === u;\n }, W.isValidElementType = function(g) {\n return typeof g == \"string\" || typeof g == \"function\" || g === n || g === o || g === r || g === c || g === u || g === y || typeof g == \"object\" && g !== null && (g.$$typeof === h || g.$$typeof === d || g.$$typeof === a || g.$$typeof === s || g.$$typeof === l || g.$$typeof === v || g.getModuleId !== void 0);\n }, W.typeOf = p, W;\n}\nvar $ = {};\n/**\n * @license React\n * react-is.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nvar br;\nfunction Ts() {\n return br || (br = 1, process.env.NODE_ENV !== \"production\" && function() {\n var e = Symbol.for(\"react.element\"), t = Symbol.for(\"react.portal\"), n = Symbol.for(\"react.fragment\"), r = Symbol.for(\"react.strict_mode\"), o = Symbol.for(\"react.profiler\"), a = Symbol.for(\"react.provider\"), s = Symbol.for(\"react.context\"), i = Symbol.for(\"react.server_context\"), l = Symbol.for(\"react.forward_ref\"), c = Symbol.for(\"react.suspense\"), u = Symbol.for(\"react.suspense_list\"), d = Symbol.for(\"react.memo\"), h = Symbol.for(\"react.lazy\"), y = Symbol.for(\"react.offscreen\"), v = !1, p = !1, g = !1, E = !1, b = !1, T;\n T = Symbol.for(\"react.module.reference\");\n function w(N) {\n return !!(typeof N == \"string\" || typeof N == \"function\" || N === n || N === o || b || N === r || N === c || N === u || E || N === y || v || p || g || typeof N == \"object\" && N !== null && (N.$$typeof === h || N.$$typeof === d || N.$$typeof === a || N.$$typeof === s || N.$$typeof === l || N.$$typeof === T || N.getModuleId !== void 0));\n }\n function m(N) {\n if (typeof N == \"object\" && N !== null) {\n var se = N.$$typeof;\n switch (se) {\n case e:\n var Te = N.type;\n switch (Te) {\n case n:\n case o:\n case r:\n case c:\n case u:\n return Te;\n default:\n var He = Te && Te.$$typeof;\n switch (He) {\n case i:\n case s:\n case l:\n case h:\n case d:\n case a:\n return He;\n default:\n return se;\n }\n }\n case t:\n return se;\n }\n }\n }\n var I = s, k = a, L = e, P = l, V = n, j = h, K = d, ce = t, te = o, _e = r, X = c, de = u, ae = !1, Ee = !1;\n function Be(N) {\n return ae || (ae = !0, console.warn(\"The ReactIs.isAsyncMode() alias has been deprecated, and will be removed in React 18+.\")), !1;\n }\n function we(N) {\n return Ee || (Ee = !0, console.warn(\"The ReactIs.isConcurrentMode() alias has been deprecated, and will be removed in React 18+.\")), !1;\n }\n function Ne(N) {\n return m(N) === s;\n }\n function Ze(N) {\n return m(N) === a;\n }\n function Re(N) {\n return typeof N == \"object\" && N !== null && N.$$typeof === e;\n }\n function ke(N) {\n return m(N) === l;\n }\n function Ie(N) {\n return m(N) === n;\n }\n function Ue(N) {\n return m(N) === h;\n }\n function Fe(N) {\n return m(N) === d;\n }\n function je(N) {\n return m(N) === t;\n }\n function De(N) {\n return m(N) === o;\n }\n function Ve(N) {\n return m(N) === r;\n }\n function D(N) {\n return m(N) === c;\n }\n function fe(N) {\n return m(N) === u;\n }\n $.ContextConsumer = I, $.ContextProvider = k, $.Element = L, $.ForwardRef = P, $.Fragment = V, $.Lazy = j, $.Memo = K, $.Portal = ce, $.Profiler = te, $.StrictMode = _e, $.Suspense = X, $.SuspenseList = de, $.isAsyncMode = Be, $.isConcurrentMode = we, $.isContextConsumer = Ne, $.isContextProvider = Ze, $.isElement = Re, $.isForwardRef = ke, $.isFragment = Ie, $.isLazy = Ue, $.isMemo = Fe, $.isPortal = je, $.isProfiler = De, $.isStrictMode = Ve, $.isSuspense = D, $.isSuspenseList = fe, $.isValidElementType = w, $.typeOf = m;\n }()), $;\n}\n(function(e) {\n process.env.NODE_ENV === \"production\" ? e.exports = ws() : e.exports = Ts();\n})(Es);\nfunction Ms() {\n const e = ls();\n let t = null, n = null;\n return {\n clear() {\n t = null, n = null;\n },\n notify() {\n e(() => {\n let r = t;\n for (; r; )\n r.callback(), r = r.next;\n });\n },\n get() {\n let r = [], o = t;\n for (; o; )\n r.push(o), o = o.next;\n return r;\n },\n subscribe(r) {\n let o = !0, a = n = {\n callback: r,\n next: null,\n prev: n\n };\n return a.prev ? a.prev.next = a : t = a, function() {\n !o || t === null || (o = !1, a.next ? a.next.prev = a.prev : n = a.prev, a.prev ? a.prev.next = a.next : t = a.next);\n };\n }\n };\n}\nconst Er = {\n notify() {\n },\n get: () => []\n};\nfunction Cs(e, t) {\n let n, r = Er, o = 0, a = !1;\n function s(p) {\n u();\n const g = r.subscribe(p);\n let E = !1;\n return () => {\n E || (E = !0, g(), d());\n };\n }\n function i() {\n r.notify();\n }\n function l() {\n v.onStateChange && v.onStateChange();\n }\n function c() {\n return a;\n }\n function u() {\n o++, n || (n = t ? t.addNestedSub(l) : e.subscribe(l), r = Ms());\n }\n function d() {\n o--, n && o === 0 && (n(), n = void 0, r.clear(), r = Er);\n }\n function h() {\n a || (a = !0, u());\n }\n function y() {\n a && (a = !1, d());\n }\n const v = {\n addNestedSub: s,\n notifyNestedSubs: i,\n handleChangeWrapper: l,\n isSubscribed: c,\n trySubscribe: h,\n tryUnsubscribe: y,\n getListeners: () => r\n };\n return v;\n}\nconst Is = typeof window < \"u\" && typeof window.document < \"u\" && typeof window.document.createElement < \"u\", As = Is ? Ye.useLayoutEffect : Ye.useEffect;\nvar Kt = { exports: {} }, ct = {};\n/** @license React v16.14.0\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nvar wr;\nfunction Os() {\n if (wr)\n return ct;\n wr = 1;\n var e = pe, t = 60103;\n if (ct.Fragment = 60107, typeof Symbol == \"function\" && Symbol.for) {\n var n = Symbol.for;\n t = n(\"react.element\"), ct.Fragment = n(\"react.fragment\");\n }\n var r = e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner, o = Object.prototype.hasOwnProperty, a = { key: !0, ref: !0, __self: !0, __source: !0 };\n function s(i, l, c) {\n var u, d = {}, h = null, y = null;\n c !== void 0 && (h = \"\" + c), l.key !== void 0 && (h = \"\" + l.key), l.ref !== void 0 && (y = l.ref);\n for (u in l)\n o.call(l, u) && !a.hasOwnProperty(u) && (d[u] = l[u]);\n if (i && i.defaultProps)\n for (u in l = i.defaultProps, l)\n d[u] === void 0 && (d[u] = l[u]);\n return { $$typeof: t, type: i, key: h, ref: y, props: d, _owner: r.current };\n }\n return ct.jsx = s, ct.jsxs = s, ct;\n}\nvar fn = {};\n/** @license React v16.14.0\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nvar Tr;\nfunction _s() {\n return Tr || (Tr = 1, function(e) {\n process.env.NODE_ENV !== \"production\" && function() {\n var t = pe, n = 60103, r = 60106;\n e.Fragment = 60107;\n var o = 60108, a = 60114, s = 60109, i = 60110, l = 60112, c = 60113, u = 60120, d = 60115, h = 60116, y = 60121, v = 60122, p = 60117, g = 60129, E = 60131;\n if (typeof Symbol == \"function\" && Symbol.for) {\n var b = Symbol.for;\n n = b(\"react.element\"), r = b(\"react.portal\"), e.Fragment = b(\"react.fragment\"), o = b(\"react.strict_mode\"), a = b(\"react.profiler\"), s = b(\"react.provider\"), i = b(\"react.context\"), l = b(\"react.forward_ref\"), c = b(\"react.suspense\"), u = b(\"react.suspense_list\"), d = b(\"react.memo\"), h = b(\"react.lazy\"), y = b(\"react.block\"), v = b(\"react.server.block\"), p = b(\"react.fundamental\"), b(\"react.scope\"), b(\"react.opaque.id\"), g = b(\"react.debug_trace_mode\"), b(\"react.offscreen\"), E = b(\"react.legacy_hidden\");\n }\n var T = typeof Symbol == \"function\" && Symbol.iterator, w = \"@@iterator\";\n function m(S) {\n if (S === null || typeof S != \"object\")\n return null;\n var C = T && S[T] || S[w];\n return typeof C == \"function\" ? C : null;\n }\n var I = t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n function k(S) {\n {\n for (var C = arguments.length, O = new Array(C > 1 ? C - 1 : 0), U = 1; U < C; U++)\n O[U - 1] = arguments[U];\n L(\"error\", S, O);\n }\n }\n function L(S, C, O) {\n {\n var U = I.ReactDebugCurrentFrame, Q = \"\";\n if (ae) {\n var J = X(ae.type), H = ae._owner;\n Q += K(J, ae._source, H && X(H.type));\n }\n Q += U.getStackAddendum(), Q !== \"\" && (C += \"%s\", O = O.concat([Q]));\n var F = O.map(function(ne) {\n return \"\" + ne;\n });\n F.unshift(\"Warning: \" + C), Function.prototype.apply.call(console[S], console, F);\n }\n }\n var P = !1;\n function V(S) {\n return !!(typeof S == \"string\" || typeof S == \"function\" || S === e.Fragment || S === a || S === g || S === o || S === c || S === u || S === E || P || typeof S == \"object\" && S !== null && (S.$$typeof === h || S.$$typeof === d || S.$$typeof === s || S.$$typeof === i || S.$$typeof === l || S.$$typeof === p || S.$$typeof === y || S[0] === v));\n }\n var j = /^(.*)[\\\\\\/]/;\n function K(S, C, O) {\n var U = \"\";\n if (C) {\n var Q = C.fileName, J = Q.replace(j, \"\");\n if (/^index\\./.test(J)) {\n var H = Q.match(j);\n if (H) {\n var F = H[1];\n if (F) {\n var ne = F.replace(j, \"\");\n J = ne + \"/\" + J;\n }\n }\n }\n U = \" (at \" + J + \":\" + C.lineNumber + \")\";\n } else\n O && (U = \" (created by \" + O + \")\");\n return `\n in ` + (S || \"Unknown\") + U;\n }\n var ce = 1;\n function te(S) {\n return S._status === ce ? S._result : null;\n }\n function _e(S, C, O) {\n var U = C.displayName || C.name || \"\";\n return S.displayName || (U !== \"\" ? O + \"(\" + U + \")\" : O);\n }\n function X(S) {\n if (S == null)\n return null;\n if (typeof S.tag == \"number\" && k(\"Received an unexpected object in getComponentName(). This is likely a bug in React. Please file an issue.\"), typeof S == \"function\")\n return S.displayName || S.name || null;\n if (typeof S == \"string\")\n return S;\n switch (S) {\n case e.Fragment:\n return \"Fragment\";\n case r:\n return \"Portal\";\n case a:\n return \"Profiler\";\n case o:\n return \"StrictMode\";\n case c:\n return \"Suspense\";\n case u:\n return \"SuspenseList\";\n }\n if (typeof S == \"object\")\n switch (S.$$typeof) {\n case i:\n return \"Context.Consumer\";\n case s:\n return \"Context.Provider\";\n case l:\n return _e(S, S.render, \"ForwardRef\");\n case d:\n return X(S.type);\n case y:\n return X(S.render);\n case h: {\n var C = S, O = te(C);\n if (O)\n return X(O);\n break;\n }\n }\n return null;\n }\n var de = {};\n I.ReactDebugCurrentFrame;\n var ae = null;\n function Ee(S) {\n ae = S;\n }\n function Be(S, C, O, U, Q) {\n {\n var J = Function.call.bind(Object.prototype.hasOwnProperty);\n for (var H in S)\n if (J(S, H)) {\n var F = void 0;\n try {\n if (typeof S[H] != \"function\") {\n var ne = Error((U || \"React class\") + \": \" + O + \" type `\" + H + \"` is invalid; it must be a function, usually from the `prop-types` package, but received `\" + typeof S[H] + \"`.This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.\");\n throw ne.name = \"Invariant Violation\", ne;\n }\n F = S[H](C, H, U, O, null, \"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED\");\n } catch (me) {\n F = me;\n }\n F && !(F instanceof Error) && (Ee(Q), k(\"%s: type specification of %s `%s` is invalid; the type checker function must return `null` or an `Error` but returned a %s. You may have forgotten to pass an argument to the type checker creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and shape all require an argument).\", U || \"React class\", O, H, typeof F), Ee(null)), F instanceof Error && !(F.message in de) && (de[F.message] = !0, Ee(Q), k(\"Failed %s type: %s\", O, F.message), Ee(null));\n }\n }\n }\n var we = I.ReactCurrentOwner, Ne = Object.prototype.hasOwnProperty, Ze = {\n key: !0,\n ref: !0,\n __self: !0,\n __source: !0\n }, Re, ke, Ie;\n Ie = {};\n function Ue(S) {\n if (Ne.call(S, \"ref\")) {\n var C = Object.getOwnPropertyDescriptor(S, \"ref\").get;\n if (C && C.isReactWarning)\n return !1;\n }\n return S.ref !== void 0;\n }\n function Fe(S) {\n if (Ne.call(S, \"key\")) {\n var C = Object.getOwnPropertyDescriptor(S, \"key\").get;\n if (C && C.isReactWarning)\n return !1;\n }\n return S.key !== void 0;\n }\n function je(S, C) {\n if (typeof S.ref == \"string\" && we.current && C && we.current.stateNode !== C) {\n var O = X(we.current.type);\n Ie[O] || (k('Component \"%s\" contains the string ref \"%s\". Support for string refs will be removed in a future major release. This case cannot be automatically converted to an arrow function. We ask you to manually fix this case by using useRef() or createRef() instead. Learn more about using refs safely here: https://reactjs.org/link/strict-mode-string-ref', X(we.current.type), S.ref), Ie[O] = !0);\n }\n }\n function De(S, C) {\n {\n var O = function() {\n Re || (Re = !0, k(\"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)\", C));\n };\n O.isReactWarning = !0, Object.defineProperty(S, \"key\", {\n get: O,\n configurable: !0\n });\n }\n }\n function Ve(S, C) {\n {\n var O = function() {\n ke || (ke = !0, k(\"%s: `ref` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://reactjs.org/link/special-props)\", C));\n };\n O.isReactWarning = !0, Object.defineProperty(S, \"ref\", {\n get: O,\n configurable: !0\n });\n }\n }\n var D = function(S, C, O, U, Q, J, H) {\n var F = {\n $$typeof: n,\n type: S,\n key: C,\n ref: O,\n props: H,\n _owner: J\n };\n return F._store = {}, Object.defineProperty(F._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: !1\n }), Object.defineProperty(F, \"_self\", {\n configurable: !1,\n enumerable: !1,\n writable: !1,\n value: U\n }), Object.defineProperty(F, \"_source\", {\n configurable: !1,\n enumerable: !1,\n writable: !1,\n value: Q\n }), Object.freeze && (Object.freeze(F.props), Object.freeze(F)), F;\n };\n function fe(S, C, O, U, Q) {\n {\n var J, H = {}, F = null, ne = null;\n O !== void 0 && (F = \"\" + O), Fe(C) && (F = \"\" + C.key), Ue(C) && (ne = C.ref, je(C, Q));\n for (J in C)\n Ne.call(C, J) && !Ze.hasOwnProperty(J) && (H[J] = C[J]);\n if (S && S.defaultProps) {\n var me = S.defaultProps;\n for (J in me)\n H[J] === void 0 && (H[J] = me[J]);\n }\n if (F || ne) {\n var Ae = typeof S == \"function\" ? S.displayName || S.name || \"Unknown\" : S;\n F && De(H, Ae), ne && Ve(H, Ae);\n }\n return D(S, F, ne, Q, U, we.current, H);\n }\n }\n var N = I.ReactCurrentOwner;\n I.ReactDebugCurrentFrame;\n function se(S) {\n ae = S;\n }\n var Te;\n Te = !1;\n function He(S) {\n return typeof S == \"object\" && S !== null && S.$$typeof === n;\n }\n function Rt() {\n {\n if (N.current) {\n var S = X(N.current.type);\n if (S)\n return `\n\nCheck the render method of \\`` + S + \"`.\";\n }\n return \"\";\n }\n }\n function en(S) {\n {\n if (S !== void 0) {\n var C = S.fileName.replace(/^.*[\\\\\\/]/, \"\"), O = S.lineNumber;\n return `\n\nCheck your code at ` + C + \":\" + O + \".\";\n }\n return \"\";\n }\n }\n var kt = {};\n function Dt(S) {\n {\n var C = Rt();\n if (!C) {\n var O = typeof S == \"string\" ? S : S.displayName || S.name;\n O && (C = `\n\nCheck the top-level render call using <` + O + \">.\");\n }\n return C;\n }\n }\n function xt(S, C) {\n {\n if (!S._store || S._store.validated || S.key != null)\n return;\n S._store.validated = !0;\n var O = Dt(C);\n if (kt[O])\n return;\n kt[O] = !0;\n var U = \"\";\n S && S._owner && S._owner !== N.current && (U = \" It was passed a child from \" + X(S._owner.type) + \".\"), se(S), k('Each child in a list should have a unique \"key\" prop.%s%s See https://reactjs.org/link/warning-keys for more information.', O, U), se(null);\n }\n }\n function Lt(S, C) {\n {\n if (typeof S != \"object\")\n return;\n if (Array.isArray(S))\n for (var O = 0; O < S.length; O++) {\n var U = S[O];\n He(U) && xt(U, C);\n }\n else if (He(S))\n S._store && (S._store.validated = !0);\n else if (S) {\n var Q = m(S);\n if (typeof Q == \"function\" && Q !== S.entries)\n for (var J = Q.call(S), H; !(H = J.next()).done; )\n He(H.value) && xt(H.value, C);\n }\n }\n }\n function tn(S) {\n {\n var C = S.type;\n if (C == null || typeof C == \"string\")\n return;\n var O;\n if (typeof C == \"function\")\n O = C.propTypes;\n else if (typeof C == \"object\" && (C.$$typeof === l || C.$$typeof === d))\n O = C.propTypes;\n else\n return;\n if (O) {\n var U = X(C);\n Be(O, S.props, \"prop\", U, S);\n } else if (C.PropTypes !== void 0 && !Te) {\n Te = !0;\n var Q = X(C);\n k(\"Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?\", Q || \"Unknown\");\n }\n typeof C.getDefaultProps == \"function\" && !C.getDefaultProps.isReactClassApproved && k(\"getDefaultProps is only used on classic React.createClass definitions. Use a static property named `defaultProps` instead.\");\n }\n }\n function nn(S) {\n {\n for (var C = Object.keys(S.props), O = 0; O < C.length; O++) {\n var U = C[O];\n if (U !== \"children\" && U !== \"key\") {\n se(S), k(\"Invalid prop `%s` supplied to `React.Fragment`. React.Fragment can only have `key` and `children` props.\", U), se(null);\n break;\n }\n }\n S.ref !== null && (se(S), k(\"Invalid attribute `ref` supplied to `React.Fragment`.\"), se(null));\n }\n }\n function Pt(S, C, O, U, Q, J) {\n {\n var H = V(S);\n if (!H) {\n var F = \"\";\n (S === void 0 || typeof S == \"object\" && S !== null && Object.keys(S).length === 0) && (F += \" You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\");\n var ne = en(Q);\n ne ? F += ne : F += Rt();\n var me;\n S === null ? me = \"null\" : Array.isArray(S) ? me = \"array\" : S !== void 0 && S.$$typeof === n ? (me = \"<\" + (X(S.type) || \"Unknown\") + \" />\", F = \" Did you accidentally export a JSX literal instead of a component?\") : me = typeof S, k(\"React.jsx: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s\", me, F);\n }\n var Ae = fe(S, C, O, Q, J);\n if (Ae == null)\n return Ae;\n if (H) {\n var qe = C.children;\n if (qe !== void 0)\n if (U)\n if (Array.isArray(qe)) {\n for (var et = 0; et < qe.length; et++)\n Lt(qe[et], S);\n Object.freeze && Object.freeze(qe);\n } else\n k(\"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\");\n else\n Lt(qe, S);\n }\n return S === e.Fragment ? nn(Ae) : tn(Ae), Ae;\n }\n }\n function rn(S, C, O) {\n return Pt(S, C, O, !0);\n }\n function on(S, C, O) {\n return Pt(S, C, O, !1);\n }\n var an = on, Bt = rn;\n e.jsx = an, e.jsxs = Bt;\n }();\n }(fn)), fn;\n}\n(function(e) {\n process.env.NODE_ENV === \"production\" ? e.exports = Os() : e.exports = _s();\n})(Kt);\nconst B = Kt.exports.Fragment, f = Kt.exports.jsx, _ = Kt.exports.jsxs;\nfunction Ns({\n store: e,\n context: t,\n children: n,\n serverState: r,\n stabilityCheck: o = \"once\",\n noopCheck: a = \"once\"\n}) {\n const s = Ye.useMemo(() => {\n const c = Cs(e);\n return {\n store: e,\n subscription: c,\n getServerState: r ? () => r : void 0,\n stabilityCheck: o,\n noopCheck: a\n };\n }, [e, r, o, a]), i = Ye.useMemo(() => e.getState(), [e]);\n return As(() => {\n const {\n subscription: c\n } = s;\n return c.onStateChange = c.notifyNestedSubs, c.trySubscribe(), i !== e.getState() && c.notifyNestedSubs(), () => {\n c.tryUnsubscribe(), c.onStateChange = void 0;\n };\n }, [s, i]), /* @__PURE__ */ f((t || Je).Provider, {\n value: s,\n children: n\n });\n}\nfunction Eo(e = Je) {\n const t = e === Je ? po : jn(e);\n return function() {\n const {\n store: r\n } = t();\n return r;\n };\n}\nconst Rs = /* @__PURE__ */ Eo();\nfunction ks(e = Je) {\n const t = e === Je ? Rs : Eo(e);\n return function() {\n return t().dispatch;\n };\n}\nconst Ds = /* @__PURE__ */ ks();\nhs(go.exports.useSyncExternalStoreWithSelector);\nus(rs);\nfunction ee(e) {\n for (var t = arguments.length, n = Array(t > 1 ? t - 1 : 0), r = 1; r < t; r++)\n n[r - 1] = arguments[r];\n if (process.env.NODE_ENV !== \"production\") {\n var o = Hs[e], a = o ? typeof o == \"function\" ? o.apply(null, n) : o : \"unknown error nr: \" + e;\n throw Error(\"[Immer] \" + a);\n }\n throw Error(\"[Immer] minified error nr: \" + e + (n.length ? \" \" + n.map(function(s) {\n return \"'\" + s + \"'\";\n }).join(\",\") : \"\") + \". Find the full error at: https://bit.ly/3cXEKWf\");\n}\nfunction Xe(e) {\n return !!e && !!e[Z];\n}\nfunction Le(e) {\n var t;\n return !!e && (function(n) {\n if (!n || typeof n != \"object\")\n return !1;\n var r = Object.getPrototypeOf(n);\n if (r === null)\n return !0;\n var o = Object.hasOwnProperty.call(r, \"constructor\") && r.constructor;\n return o === Object || typeof o == \"function\" && Function.toString.call(o) === qs;\n }(e) || Array.isArray(e) || !!e[Nr] || !!(!((t = e.constructor) === null || t === void 0) && t[Nr]) || Vn(e) || Hn(e));\n}\nfunction ot(e, t, n) {\n n === void 0 && (n = !1), St(e) === 0 ? (n ? Object.keys : lt)(e).forEach(function(r) {\n n && typeof r == \"symbol\" || t(r, e[r], e);\n }) : e.forEach(function(r, o) {\n return t(o, r, e);\n });\n}\nfunction St(e) {\n var t = e[Z];\n return t ? t.i > 3 ? t.i - 4 : t.i : Array.isArray(e) ? 1 : Vn(e) ? 2 : Hn(e) ? 3 : 0;\n}\nfunction ut(e, t) {\n return St(e) === 2 ? e.has(t) : Object.prototype.hasOwnProperty.call(e, t);\n}\nfunction xs(e, t) {\n return St(e) === 2 ? e.get(t) : e[t];\n}\nfunction wo(e, t, n) {\n var r = St(e);\n r === 2 ? e.set(t, n) : r === 3 ? e.add(n) : e[t] = n;\n}\nfunction To(e, t) {\n return e === t ? e !== 0 || 1 / e == 1 / t : e != e && t != t;\n}\nfunction Vn(e) {\n return js && e instanceof Map;\n}\nfunction Hn(e) {\n return Vs && e instanceof Set;\n}\nfunction We(e) {\n return e.o || e.t;\n}\nfunction qn(e) {\n if (Array.isArray(e))\n return Array.prototype.slice.call(e);\n var t = Co(e);\n delete t[Z];\n for (var n = lt(t), r = 0; r < n.length; r++) {\n var o = n[r], a = t[o];\n a.writable === !1 && (a.writable = !0, a.configurable = !0), (a.get || a.set) && (t[o] = { configurable: !0, writable: !0, enumerable: a.enumerable, value: e[o] });\n }\n return Object.create(Object.getPrototypeOf(e), t);\n}\nfunction zn(e, t) {\n return t === void 0 && (t = !1), Wn(e) || Xe(e) || !Le(e) || (St(e) > 1 && (e.set = e.add = e.clear = e.delete = Ls), Object.freeze(e), t && ot(e, function(n, r) {\n return zn(r, !0);\n }, !0)), e;\n}\nfunction Ls() {\n ee(2);\n}\nfunction Wn(e) {\n return e == null || typeof e != \"object\" || Object.isFrozen(e);\n}\nfunction Oe(e) {\n var t = Nn[e];\n return t || ee(18, e), t;\n}\nfunction Ps(e, t) {\n Nn[e] || (Nn[e] = t);\n}\nfunction An() {\n return process.env.NODE_ENV === \"production\" || gt || ee(0), gt;\n}\nfunction hn(e, t) {\n t && (Oe(\"Patches\"), e.u = [], e.s = [], e.v = t);\n}\nfunction jt(e) {\n On(e), e.p.forEach(Bs), e.p = null;\n}\nfunction On(e) {\n e === gt && (gt = e.l);\n}\nfunction Mr(e) {\n return gt = { p: [], l: gt, h: e, m: !0, _: 0 };\n}\nfunction Bs(e) {\n var t = e[Z];\n t.i === 0 || t.i === 1 ? t.j() : t.g = !0;\n}\nfunction gn(e, t) {\n t._ = t.p.length;\n var n = t.p[0], r = e !== void 0 && e !== n;\n return t.h.O || Oe(\"ES5\").S(t, e, r), r ? (n[Z].P && (jt(t), ee(4)), Le(e) && (e = Vt(t, e), t.l || Ht(t, e)), t.u && Oe(\"Patches\").M(n[Z].t, e, t.u, t.s)) : e = Vt(t, n, []), jt(t), t.u && t.v(t.u, t.s), e !== Mo ? e : void 0;\n}\nfunction Vt(e, t, n) {\n if (Wn(t))\n return t;\n var r = t[Z];\n if (!r)\n return ot(t, function(i, l) {\n return Cr(e, r, t, i, l, n);\n }, !0), t;\n if (r.A !== e)\n return t;\n if (!r.P)\n return Ht(e, r.t, !0), r.t;\n if (!r.I) {\n r.I = !0, r.A._--;\n var o = r.i === 4 || r.i === 5 ? r.o = qn(r.k) : r.o, a = o, s = !1;\n r.i === 3 && (a = new Set(o), o.clear(), s = !0), ot(a, function(i, l) {\n return Cr(e, r, o, i, l, n, s);\n }), Ht(e, o, !1), n && e.u && Oe(\"Patches\").N(r, n, e.u, e.s);\n }\n return r.o;\n}\nfunction Cr(e, t, n, r, o, a, s) {\n if (process.env.NODE_ENV !== \"production\" && o === n && ee(5), Xe(o)) {\n var i = Vt(e, o, a && t && t.i !== 3 && !ut(t.R, r) ? a.concat(r) : void 0);\n if (wo(n, r, i), !Xe(i))\n return;\n e.m = !1;\n } else\n s && n.add(o);\n if (Le(o) && !Wn(o)) {\n if (!e.h.D && e._ < 1)\n return;\n Vt(e, o), t && t.A.l || Ht(e, o);\n }\n}\nfunction Ht(e, t, n) {\n n === void 0 && (n = !1), !e.l && e.h.D && e.m && zn(t, n);\n}\nfunction mn(e, t) {\n var n = e[Z];\n return (n ? We(n) : e)[t];\n}\nfunction Ir(e, t) {\n if (t in e)\n for (var n = Object.getPrototypeOf(e); n; ) {\n var r = Object.getOwnPropertyDescriptor(n, t);\n if (r)\n return r;\n n = Object.getPrototypeOf(n);\n }\n}\nfunction $e(e) {\n e.P || (e.P = !0, e.l && $e(e.l));\n}\nfunction pn(e) {\n e.o || (e.o = qn(e.t));\n}\nfunction _n(e, t, n) {\n var r = Vn(t) ? Oe(\"MapSet\").F(t, n) : Hn(t) ? Oe(\"MapSet\").T(t, n) : e.O ? function(o, a) {\n var s = Array.isArray(o), i = { i: s ? 1 : 0, A: a ? a.A : An(), P: !1, I: !1, R: {}, l: a, t: o, k: null, o: null, j: null, C: !1 }, l = i, c = Ct;\n s && (l = [i], c = Tt);\n var u = Proxy.revocable(l, c), d = u.revoke, h = u.proxy;\n return i.k = h, i.j = d, h;\n }(t, n) : Oe(\"ES5\").J(t, n);\n return (n ? n.A : An()).p.push(r), r;\n}\nfunction Us(e) {\n return Xe(e) || ee(22, e), function t(n) {\n if (!Le(n))\n return n;\n var r, o = n[Z], a = St(n);\n if (o) {\n if (!o.P && (o.i < 4 || !Oe(\"ES5\").K(o)))\n return o.t;\n o.I = !0, r = Ar(n, a), o.I = !1;\n } else\n r = Ar(n, a);\n return ot(r, function(s, i) {\n o && xs(o.t, s) === i || wo(r, s, t(i));\n }), a === 3 ? new Set(r) : r;\n }(e);\n}\nfunction Ar(e, t) {\n switch (t) {\n case 2:\n return new Map(e);\n case 3:\n return Array.from(e);\n }\n return qn(e);\n}\nfunction Fs() {\n function e(s, i) {\n var l = a[s];\n return l ? l.enumerable = i : a[s] = l = { configurable: !0, enumerable: i, get: function() {\n var c = this[Z];\n return process.env.NODE_ENV !== \"production\" && o(c), Ct.get(c, s);\n }, set: function(c) {\n var u = this[Z];\n process.env.NODE_ENV !== \"production\" && o(u), Ct.set(u, s, c);\n } }, l;\n }\n function t(s) {\n for (var i = s.length - 1; i >= 0; i--) {\n var l = s[i][Z];\n if (!l.P)\n switch (l.i) {\n case 5:\n r(l) && $e(l);\n break;\n case 4:\n n(l) && $e(l);\n }\n }\n }\n function n(s) {\n for (var i = s.t, l = s.k, c = lt(l), u = c.length - 1; u >= 0; u--) {\n var d = c[u];\n if (d !== Z) {\n var h = i[d];\n if (h === void 0 && !ut(i, d))\n return !0;\n var y = l[d], v = y && y[Z];\n if (v ? v.t !== h : !To(y, h))\n return !0;\n }\n }\n var p = !!i[Z];\n return c.length !== lt(i).length + (p ? 0 : 1);\n }\n function r(s) {\n var i = s.k;\n if (i.length !== s.t.length)\n return !0;\n var l = Object.getOwnPropertyDescriptor(i, i.length - 1);\n if (l && !l.get)\n return !0;\n for (var c = 0; c < i.length; c++)\n if (!i.hasOwnProperty(c))\n return !0;\n return !1;\n }\n function o(s) {\n s.g && ee(3, JSON.stringify(We(s)));\n }\n var a = {};\n Ps(\"ES5\", { J: function(s, i) {\n var l = Array.isArray(s), c = function(d, h) {\n if (d) {\n for (var y = Array(h.length), v = 0; v < h.length; v++)\n Object.defineProperty(y, \"\" + v, e(v, !0));\n return y;\n }\n var p = Co(h);\n delete p[Z];\n for (var g = lt(p), E = 0; E < g.length; E++) {\n var b = g[E];\n p[b] = e(b, d || !!p[b].enumerable);\n }\n return Object.create(Object.getPrototypeOf(h), p);\n }(l, s), u = { i: l ? 5 : 4, A: i ? i.A : An(), P: !1, I: !1, R: {}, l: i, t: s, k: c, o: null, g: !1, C: !1 };\n return Object.defineProperty(c, Z, { value: u, writable: !0 }), c;\n }, S: function(s, i, l) {\n l ? Xe(i) && i[Z].A === s && t(s.p) : (s.u && function c(u) {\n if (u && typeof u == \"object\") {\n var d = u[Z];\n if (d) {\n var h = d.t, y = d.k, v = d.R, p = d.i;\n if (p === 4)\n ot(y, function(w) {\n w !== Z && (h[w] !== void 0 || ut(h, w) ? v[w] || c(y[w]) : (v[w] = !0, $e(d)));\n }), ot(h, function(w) {\n y[w] !== void 0 || ut(y, w) || (v[w] = !1, $e(d));\n });\n else if (p === 5) {\n if (r(d) && ($e(d), v.length = !0), y.length < h.length)\n for (var g = y.length; g < h.length; g++)\n v[g] = !1;\n else\n for (var E = h.length; E < y.length; E++)\n v[E] = !0;\n for (var b = Math.min(y.length, h.length), T = 0; T < b; T++)\n y.hasOwnProperty(T) || (v[T] = !0), v[T] === void 0 && c(y[T]);\n }\n }\n }\n }(s.p[0]), t(s.p));\n }, K: function(s) {\n return s.i === 4 ? n(s) : r(s);\n } });\n}\nvar Or, gt, $n = typeof Symbol < \"u\" && typeof Symbol(\"x\") == \"symbol\", js = typeof Map < \"u\", Vs = typeof Set < \"u\", _r = typeof Proxy < \"u\" && Proxy.revocable !== void 0 && typeof Reflect < \"u\", Mo = $n ? Symbol.for(\"immer-nothing\") : ((Or = {})[\"immer-nothing\"] = !0, Or), Nr = $n ? Symbol.for(\"immer-draftable\") : \"__$immer_draftable\", Z = $n ? Symbol.for(\"immer-state\") : \"__$immer_state\", Hs = { 0: \"Illegal state\", 1: \"Immer drafts cannot have computed properties\", 2: \"This object has been frozen and should not be mutated\", 3: function(e) {\n return \"Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? \" + e;\n}, 4: \"An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.\", 5: \"Immer forbids circular references\", 6: \"The first or second argument to `produce` must be a function\", 7: \"The third argument to `produce` must be a function or undefined\", 8: \"First argument to `createDraft` must be a plain object, an array, or an immerable object\", 9: \"First argument to `finishDraft` must be a draft returned by `createDraft`\", 10: \"The given draft is already finalized\", 11: \"Object.defineProperty() cannot be used on an Immer draft\", 12: \"Object.setPrototypeOf() cannot be used on an Immer draft\", 13: \"Immer only supports deleting array indices\", 14: \"Immer only supports setting array indices and the 'length' property\", 15: function(e) {\n return \"Cannot apply patch, path doesn't resolve: \" + e;\n}, 16: 'Sets cannot have \"replace\" patches.', 17: function(e) {\n return \"Unsupported patch operation: \" + e;\n}, 18: function(e) {\n return \"The plugin for '\" + e + \"' has not been loaded into Immer. To enable the plugin, import and call `enable\" + e + \"()` when initializing your application.\";\n}, 20: \"Cannot use proxies if Proxy, Proxy.revocable or Reflect are not available\", 21: function(e) {\n return \"produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '\" + e + \"'\";\n}, 22: function(e) {\n return \"'current' expects a draft, got: \" + e;\n}, 23: function(e) {\n return \"'original' expects a draft, got: \" + e;\n}, 24: \"Patching reserved attributes like __proto__, prototype and constructor is not allowed\" }, qs = \"\" + Object.prototype.constructor, lt = typeof Reflect < \"u\" && Reflect.ownKeys ? Reflect.ownKeys : Object.getOwnPropertySymbols !== void 0 ? function(e) {\n return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e));\n} : Object.getOwnPropertyNames, Co = Object.getOwnPropertyDescriptors || function(e) {\n var t = {};\n return lt(e).forEach(function(n) {\n t[n] = Object.getOwnPropertyDescriptor(e, n);\n }), t;\n}, Nn = {}, Ct = { get: function(e, t) {\n if (t === Z)\n return e;\n var n = We(e);\n if (!ut(n, t))\n return function(o, a, s) {\n var i, l = Ir(a, s);\n return l ? \"value\" in l ? l.value : (i = l.get) === null || i === void 0 ? void 0 : i.call(o.k) : void 0;\n }(e, n, t);\n var r = n[t];\n return e.I || !Le(r) ? r : r === mn(e.t, t) ? (pn(e), e.o[t] = _n(e.A.h, r, e)) : r;\n}, has: function(e, t) {\n return t in We(e);\n}, ownKeys: function(e) {\n return Reflect.ownKeys(We(e));\n}, set: function(e, t, n) {\n var r = Ir(We(e), t);\n if (r != null && r.set)\n return r.set.call(e.k, n), !0;\n if (!e.P) {\n var o = mn(We(e), t), a = o == null ? void 0 : o[Z];\n if (a && a.t === n)\n return e.o[t] = n, e.R[t] = !1, !0;\n if (To(n, o) && (n !== void 0 || ut(e.t, t)))\n return !0;\n pn(e), $e(e);\n }\n return e.o[t] === n && (n !== void 0 || t in e.o) || Number.isNaN(n) && Number.isNaN(e.o[t]) || (e.o[t] = n, e.R[t] = !0), !0;\n}, deleteProperty: function(e, t) {\n return mn(e.t, t) !== void 0 || t in e.t ? (e.R[t] = !1, pn(e), $e(e)) : delete e.R[t], e.o && delete e.o[t], !0;\n}, getOwnPropertyDescriptor: function(e, t) {\n var n = We(e), r = Reflect.getOwnPropertyDescriptor(n, t);\n return r && { writable: !0, configurable: e.i !== 1 || t !== \"length\", enumerable: r.enumerable, value: n[t] };\n}, defineProperty: function() {\n ee(11);\n}, getPrototypeOf: function(e) {\n return Object.getPrototypeOf(e.t);\n}, setPrototypeOf: function() {\n ee(12);\n} }, Tt = {};\not(Ct, function(e, t) {\n Tt[e] = function() {\n return arguments[0] = arguments[0][0], t.apply(this, arguments);\n };\n}), Tt.deleteProperty = function(e, t) {\n return process.env.NODE_ENV !== \"production\" && isNaN(parseInt(t)) && ee(13), Tt.set.call(this, e, t, void 0);\n}, Tt.set = function(e, t, n) {\n return process.env.NODE_ENV !== \"production\" && t !== \"length\" && isNaN(parseInt(t)) && ee(14), Ct.set.call(this, e[0], t, n, e[0]);\n};\nvar zs = function() {\n function e(n) {\n var r = this;\n this.O = _r, this.D = !0, this.produce = function(o, a, s) {\n if (typeof o == \"function\" && typeof a != \"function\") {\n var i = a;\n a = o;\n var l = r;\n return function(p) {\n var g = this;\n p === void 0 && (p = i);\n for (var E = arguments.length, b = Array(E > 1 ? E - 1 : 0), T = 1; T < E; T++)\n b[T - 1] = arguments[T];\n return l.produce(p, function(w) {\n var m;\n return (m = a).call.apply(m, [g, w].concat(b));\n });\n };\n }\n var c;\n if (typeof a != \"function\" && ee(6), s !== void 0 && typeof s != \"function\" && ee(7), Le(o)) {\n var u = Mr(r), d = _n(r, o, void 0), h = !0;\n try {\n c = a(d), h = !1;\n } finally {\n h ? jt(u) : On(u);\n }\n return typeof Promise < \"u\" && c instanceof Promise ? c.then(function(p) {\n return hn(u, s), gn(p, u);\n }, function(p) {\n throw jt(u), p;\n }) : (hn(u, s), gn(c, u));\n }\n if (!o || typeof o != \"object\") {\n if ((c = a(o)) === void 0 && (c = o), c === Mo && (c = void 0), r.D && zn(c, !0), s) {\n var y = [], v = [];\n Oe(\"Patches\").M(o, c, y, v), s(y, v);\n }\n return c;\n }\n ee(21, o);\n }, this.produceWithPatches = function(o, a) {\n if (typeof o == \"function\")\n return function(c) {\n for (var u = arguments.length, d = Array(u > 1 ? u - 1 : 0), h = 1; h < u; h++)\n d[h - 1] = arguments[h];\n return r.produceWithPatches(c, function(y) {\n return o.apply(void 0, [y].concat(d));\n });\n };\n var s, i, l = r.produce(o, a, function(c, u) {\n s = c, i = u;\n });\n return typeof Promise < \"u\" && l instanceof Promise ? l.then(function(c) {\n return [c, s, i];\n }) : [l, s, i];\n }, typeof (n == null ? void 0 : n.useProxies) == \"boolean\" && this.setUseProxies(n.useProxies), typeof (n == null ? void 0 : n.autoFreeze) == \"boolean\" && this.setAutoFreeze(n.autoFreeze);\n }\n var t = e.prototype;\n return t.createDraft = function(n) {\n Le(n) || ee(8), Xe(n) && (n = Us(n));\n var r = Mr(this), o = _n(this, n, void 0);\n return o[Z].C = !0, On(r), o;\n }, t.finishDraft = function(n, r) {\n var o = n && n[Z];\n process.env.NODE_ENV !== \"production\" && (o && o.C || ee(9), o.I && ee(10));\n var a = o.A;\n return hn(a, r), gn(void 0, a);\n }, t.setAutoFreeze = function(n) {\n this.D = n;\n }, t.setUseProxies = function(n) {\n n && !_r && ee(20), this.O = n;\n }, t.applyPatches = function(n, r) {\n var o;\n for (o = r.length - 1; o >= 0; o--) {\n var a = r[o];\n if (a.path.length === 0 && a.op === \"replace\") {\n n = a.value;\n break;\n }\n }\n o > -1 && (r = r.slice(o + 1));\n var s = Oe(\"Patches\").$;\n return Xe(n) ? s(n, r) : this.produce(n, function(i) {\n return s(i, r);\n });\n }, e;\n}(), ge = new zs(), Io = ge.produce;\nge.produceWithPatches.bind(ge);\nge.setAutoFreeze.bind(ge);\nge.setUseProxies.bind(ge);\nge.applyPatches.bind(ge);\nge.createDraft.bind(ge);\nge.finishDraft.bind(ge);\nfunction It(e) {\n return It = typeof Symbol == \"function\" && typeof Symbol.iterator == \"symbol\" ? function(t) {\n return typeof t;\n } : function(t) {\n return t && typeof Symbol == \"function\" && t.constructor === Symbol && t !== Symbol.prototype ? \"symbol\" : typeof t;\n }, It(e);\n}\nfunction Ws(e, t) {\n if (It(e) != \"object\" || !e)\n return e;\n var n = e[Symbol.toPrimitive];\n if (n !== void 0) {\n var r = n.call(e, t || \"default\");\n if (It(r) != \"object\")\n return r;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (t === \"string\" ? String : Number)(e);\n}\nfunction $s(e) {\n var t = Ws(e, \"string\");\n return It(t) == \"symbol\" ? t : String(t);\n}\nfunction Gs(e, t, n) {\n return t = $s(t), t in e ? Object.defineProperty(e, t, {\n value: n,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[t] = n, e;\n}\nfunction Rr(e, t) {\n var n = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var r = Object.getOwnPropertySymbols(e);\n t && (r = r.filter(function(o) {\n return Object.getOwnPropertyDescriptor(e, o).enumerable;\n })), n.push.apply(n, r);\n }\n return n;\n}\nfunction kr(e) {\n for (var t = 1; t < arguments.length; t++) {\n var n = arguments[t] != null ? arguments[t] : {};\n t % 2 ? Rr(Object(n), !0).forEach(function(r) {\n Gs(e, r, n[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : Rr(Object(n)).forEach(function(r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(n, r));\n });\n }\n return e;\n}\nfunction re(e) {\n return \"Minified Redux error #\" + e + \"; visit https://redux.js.org/Errors?code=\" + e + \" for the full message or use the non-minified dev environment for full errors. \";\n}\nvar Dr = function() {\n return typeof Symbol == \"function\" && Symbol.observable || \"@@observable\";\n}(), yn = function() {\n return Math.random().toString(36).substring(7).split(\"\").join(\".\");\n}, rt = {\n INIT: \"@@redux/INIT\" + yn(),\n REPLACE: \"@@redux/REPLACE\" + yn(),\n PROBE_UNKNOWN_ACTION: function() {\n return \"@@redux/PROBE_UNKNOWN_ACTION\" + yn();\n }\n};\nfunction Ao(e) {\n if (typeof e != \"object\" || e === null)\n return !1;\n for (var t = e; Object.getPrototypeOf(t) !== null; )\n t = Object.getPrototypeOf(t);\n return Object.getPrototypeOf(e) === t;\n}\nfunction Ys(e) {\n if (e === void 0)\n return \"undefined\";\n if (e === null)\n return \"null\";\n var t = typeof e;\n switch (t) {\n case \"boolean\":\n case \"string\":\n case \"number\":\n case \"symbol\":\n case \"function\":\n return t;\n }\n if (Array.isArray(e))\n return \"array\";\n if (Js(e))\n return \"date\";\n if (Qs(e))\n return \"error\";\n var n = Ks(e);\n switch (n) {\n case \"Symbol\":\n case \"Promise\":\n case \"WeakMap\":\n case \"WeakSet\":\n case \"Map\":\n case \"Set\":\n return n;\n }\n return t.slice(8, -1).toLowerCase().replace(/\\s/g, \"\");\n}\nfunction Ks(e) {\n return typeof e.constructor == \"function\" ? e.constructor.name : null;\n}\nfunction Qs(e) {\n return e instanceof Error || typeof e.message == \"string\" && e.constructor && typeof e.constructor.stackTraceLimit == \"number\";\n}\nfunction Js(e) {\n return e instanceof Date ? !0 : typeof e.toDateString == \"function\" && typeof e.getDate == \"function\" && typeof e.setDate == \"function\";\n}\nfunction nt(e) {\n var t = typeof e;\n return process.env.NODE_ENV !== \"production\" && (t = Ys(e)), t;\n}\nfunction Oo(e, t, n) {\n var r;\n if (typeof t == \"function\" && typeof n == \"function\" || typeof n == \"function\" && typeof arguments[3] == \"function\")\n throw new Error(process.env.NODE_ENV === \"production\" ? re(0) : \"It looks like you are passing several store enhancers to createStore(). This is not supported. Instead, compose them together to a single function. See https://redux.js.org/tutorials/fundamentals/part-4-store#creating-a-store-with-enhancers for an example.\");\n if (typeof t == \"function\" && typeof n > \"u\" && (n = t, t = void 0), typeof n < \"u\") {\n if (typeof n != \"function\")\n throw new Error(process.env.NODE_ENV === \"production\" ? re(1) : \"Expected the enhancer to be a function. Instead, received: '\" + nt(n) + \"'\");\n return n(Oo)(e, t);\n }\n if (typeof e != \"function\")\n throw new Error(process.env.NODE_ENV === \"production\" ? re(2) : \"Expected the root reducer to be a function. Instead, received: '\" + nt(e) + \"'\");\n var o = e, a = t, s = [], i = s, l = !1;\n function c() {\n i === s && (i = s.slice());\n }\n function u() {\n if (l)\n throw new Error(process.env.NODE_ENV === \"production\" ? re(3) : \"You may not call store.getState() while the reducer is executing. The reducer has already received the state as an argument. Pass it down from the top reducer instead of reading it from the store.\");\n return a;\n }\n function d(p) {\n if (typeof p != \"function\")\n throw new Error(process.env.NODE_ENV === \"production\" ? re(4) : \"Expected the listener to be a function. Instead, received: '\" + nt(p) + \"'\");\n if (l)\n throw new Error(process.env.NODE_ENV === \"production\" ? re(5) : \"You may not call store.subscribe() while the reducer is executing. If you would like to be notified after the store has been updated, subscribe from a component and invoke store.getState() in the callback to access the latest state. See https://redux.js.org/api/store#subscribelistener for more details.\");\n var g = !0;\n return c(), i.push(p), function() {\n if (!!g) {\n if (l)\n throw new Error(process.env.NODE_ENV === \"production\" ? re(6) : \"You may not unsubscribe from a store listener while the reducer is executing. See https://redux.js.org/api/store#subscribelistener for more details.\");\n g = !1, c();\n var b = i.indexOf(p);\n i.splice(b, 1), s = null;\n }\n };\n }\n function h(p) {\n if (!Ao(p))\n throw new Error(process.env.NODE_ENV === \"production\" ? re(7) : \"Actions must be plain objects. Instead, the actual type was: '\" + nt(p) + \"'. You may need to add middleware to your store setup to handle dispatching other values, such as 'redux-thunk' to handle dispatching functions. See https://redux.js.org/tutorials/fundamentals/part-4-store#middleware and https://redux.js.org/tutorials/fundamentals/part-6-async-logic#using-the-redux-thunk-middleware for examples.\");\n if (typeof p.type > \"u\")\n throw new Error(process.env.NODE_ENV === \"production\" ? re(8) : 'Actions may not have an undefined \"type\" property. You may have misspelled an action type string constant.');\n if (l)\n throw new Error(process.env.NODE_ENV === \"production\" ? re(9) : \"Reducers may not dispatch actions.\");\n try {\n l = !0, a = o(a, p);\n } finally {\n l = !1;\n }\n for (var g = s = i, E = 0; E < g.length; E++) {\n var b = g[E];\n b();\n }\n return p;\n }\n function y(p) {\n if (typeof p != \"function\")\n throw new Error(process.env.NODE_ENV === \"production\" ? re(10) : \"Expected the nextReducer to be a function. Instead, received: '\" + nt(p));\n o = p, h({\n type: rt.REPLACE\n });\n }\n function v() {\n var p, g = d;\n return p = {\n subscribe: function(b) {\n if (typeof b != \"object\" || b === null)\n throw new Error(process.env.NODE_ENV === \"production\" ? re(11) : \"Expected the observer to be an object. Instead, received: '\" + nt(b) + \"'\");\n function T() {\n b.next && b.next(u());\n }\n T();\n var w = g(T);\n return {\n unsubscribe: w\n };\n }\n }, p[Dr] = function() {\n return this;\n }, p;\n }\n return h({\n type: rt.INIT\n }), r = {\n dispatch: h,\n subscribe: d,\n getState: u,\n replaceReducer: y\n }, r[Dr] = v, r;\n}\nfunction xr(e) {\n typeof console < \"u\" && typeof console.error == \"function\" && console.error(e);\n try {\n throw new Error(e);\n } catch {\n }\n}\nfunction Xs(e, t, n, r) {\n var o = Object.keys(t), a = n && n.type === rt.INIT ? \"preloadedState argument passed to createStore\" : \"previous state received by the reducer\";\n if (o.length === 0)\n return \"Store does not have a valid reducer. Make sure the argument passed to combineReducers is an object whose values are reducers.\";\n if (!Ao(e))\n return \"The \" + a + ' has unexpected type of \"' + nt(e) + '\". Expected argument to be an object with the following ' + ('keys: \"' + o.join('\", \"') + '\"');\n var s = Object.keys(e).filter(function(i) {\n return !t.hasOwnProperty(i) && !r[i];\n });\n if (s.forEach(function(i) {\n r[i] = !0;\n }), !(n && n.type === rt.REPLACE) && s.length > 0)\n return \"Unexpected \" + (s.length > 1 ? \"keys\" : \"key\") + \" \" + ('\"' + s.join('\", \"') + '\" found in ' + a + \". \") + \"Expected to find one of the known reducer keys instead: \" + ('\"' + o.join('\", \"') + '\". Unexpected keys will be ignored.');\n}\nfunction Zs(e) {\n Object.keys(e).forEach(function(t) {\n var n = e[t], r = n(void 0, {\n type: rt.INIT\n });\n if (typeof r > \"u\")\n throw new Error(process.env.NODE_ENV === \"production\" ? re(12) : 'The slice reducer for key \"' + t + `\" returned undefined during initialization. If the state passed to the reducer is undefined, you must explicitly return the initial state. The initial state may not be undefined. If you don't want to set a value for this reducer, you can use null instead of undefined.`);\n if (typeof n(void 0, {\n type: rt.PROBE_UNKNOWN_ACTION()\n }) > \"u\")\n throw new Error(process.env.NODE_ENV === \"production\" ? re(13) : 'The slice reducer for key \"' + t + '\" returned undefined when probed with a random type. ' + (\"Don't try to handle '\" + rt.INIT + `' or other actions in \"redux/*\" `) + \"namespace. They are considered private. Instead, you must return the current state for any unknown actions, unless it is undefined, in which case you must return the initial state, regardless of the action type. The initial state may not be undefined, but can be null.\");\n });\n}\nfunction ei(e) {\n for (var t = Object.keys(e), n = {}, r = 0; r < t.length; r++) {\n var o = t[r];\n process.env.NODE_ENV !== \"production\" && typeof e[o] > \"u\" && xr('No reducer provided for key \"' + o + '\"'), typeof e[o] == \"function\" && (n[o] = e[o]);\n }\n var a = Object.keys(n), s;\n process.env.NODE_ENV !== \"production\" && (s = {});\n var i;\n try {\n Zs(n);\n } catch (l) {\n i = l;\n }\n return function(c, u) {\n if (c === void 0 && (c = {}), i)\n throw i;\n if (process.env.NODE_ENV !== \"production\") {\n var d = Xs(c, n, u, s);\n d && xr(d);\n }\n for (var h = !1, y = {}, v = 0; v < a.length; v++) {\n var p = a[v], g = n[p], E = c[p], b = g(E, u);\n if (typeof b > \"u\") {\n var T = u && u.type;\n throw new Error(process.env.NODE_ENV === \"production\" ? re(14) : \"When called with an action of type \" + (T ? '\"' + String(T) + '\"' : \"(unknown type)\") + ', the slice reducer for key \"' + p + '\" returned undefined. To ignore an action, you must explicitly return the previous state. If you want this reducer to hold no value, you can return null instead of undefined.');\n }\n y[p] = b, h = h || b !== E;\n }\n return h = h || a.length !== Object.keys(c).length, h ? y : c;\n };\n}\nfunction qt() {\n for (var e = arguments.length, t = new Array(e), n = 0; n < e; n++)\n t[n] = arguments[n];\n return t.length === 0 ? function(r) {\n return r;\n } : t.length === 1 ? t[0] : t.reduce(function(r, o) {\n return function() {\n return r(o.apply(void 0, arguments));\n };\n });\n}\nfunction ti() {\n for (var e = arguments.length, t = new Array(e), n = 0; n < e; n++)\n t[n] = arguments[n];\n return function(r) {\n return function() {\n var o = r.apply(void 0, arguments), a = function() {\n throw new Error(process.env.NODE_ENV === \"production\" ? re(15) : \"Dispatching while constructing your middleware is not allowed. Other middleware would not be applied to this dispatch.\");\n }, s = {\n getState: o.getState,\n dispatch: function() {\n return a.apply(void 0, arguments);\n }\n }, i = t.map(function(l) {\n return l(s);\n });\n return a = qt.apply(void 0, i)(o.dispatch), kr(kr({}, o), {}, {\n dispatch: a\n });\n };\n };\n}\nfunction _o(e) {\n var t = function(r) {\n var o = r.dispatch, a = r.getState;\n return function(s) {\n return function(i) {\n return typeof i == \"function\" ? i(o, a, e) : s(i);\n };\n };\n };\n return t;\n}\nvar No = _o();\nNo.withExtraArgument = _o;\nconst Lr = No;\nvar Ro = globalThis && globalThis.__extends || function() {\n var e = function(t, n) {\n return e = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(r, o) {\n r.__proto__ = o;\n } || function(r, o) {\n for (var a in o)\n Object.prototype.hasOwnProperty.call(o, a) && (r[a] = o[a]);\n }, e(t, n);\n };\n return function(t, n) {\n if (typeof n != \"function\" && n !== null)\n throw new TypeError(\"Class extends value \" + String(n) + \" is not a constructor or null\");\n e(t, n);\n function r() {\n this.constructor = t;\n }\n t.prototype = n === null ? Object.create(n) : (r.prototype = n.prototype, new r());\n };\n}(), ni = globalThis && globalThis.__generator || function(e, t) {\n var n = { label: 0, sent: function() {\n if (a[0] & 1)\n throw a[1];\n return a[1];\n }, trys: [], ops: [] }, r, o, a, s;\n return s = { next: i(0), throw: i(1), return: i(2) }, typeof Symbol == \"function\" && (s[Symbol.iterator] = function() {\n return this;\n }), s;\n function i(c) {\n return function(u) {\n return l([c, u]);\n };\n }\n function l(c) {\n if (r)\n throw new TypeError(\"Generator is already executing.\");\n for (; n; )\n try {\n if (r = 1, o && (a = c[0] & 2 ? o.return : c[0] ? o.throw || ((a = o.return) && a.call(o), 0) : o.next) && !(a = a.call(o, c[1])).done)\n return a;\n switch (o = 0, a && (c = [c[0] & 2, a.value]), c[0]) {\n case 0:\n case 1:\n a = c;\n break;\n case 4:\n return n.label++, { value: c[1], done: !1 };\n case 5:\n n.label++, o = c[1], c = [0];\n continue;\n case 7:\n c = n.ops.pop(), n.trys.pop();\n continue;\n default:\n if (a = n.trys, !(a = a.length > 0 && a[a.length - 1]) && (c[0] === 6 || c[0] === 2)) {\n n = 0;\n continue;\n }\n if (c[0] === 3 && (!a || c[1] > a[0] && c[1] < a[3])) {\n n.label = c[1];\n break;\n }\n if (c[0] === 6 && n.label < a[1]) {\n n.label = a[1], a = c;\n break;\n }\n if (a && n.label < a[2]) {\n n.label = a[2], n.ops.push(c);\n break;\n }\n a[2] && n.ops.pop(), n.trys.pop();\n continue;\n }\n c = t.call(e, n);\n } catch (u) {\n c = [6, u], o = 0;\n } finally {\n r = a = 0;\n }\n if (c[0] & 5)\n throw c[1];\n return { value: c[0] ? c[1] : void 0, done: !0 };\n }\n}, mt = globalThis && globalThis.__spreadArray || function(e, t) {\n for (var n = 0, r = t.length, o = e.length; n < r; n++, o++)\n e[o] = t[n];\n return e;\n}, ri = Object.defineProperty, oi = Object.defineProperties, ai = Object.getOwnPropertyDescriptors, Pr = Object.getOwnPropertySymbols, si = Object.prototype.hasOwnProperty, ii = Object.prototype.propertyIsEnumerable, Br = function(e, t, n) {\n return t in e ? ri(e, t, { enumerable: !0, configurable: !0, writable: !0, value: n }) : e[t] = n;\n}, Ke = function(e, t) {\n for (var n in t || (t = {}))\n si.call(t, n) && Br(e, n, t[n]);\n if (Pr)\n for (var r = 0, o = Pr(t); r < o.length; r++) {\n var n = o[r];\n ii.call(t, n) && Br(e, n, t[n]);\n }\n return e;\n}, vn = function(e, t) {\n return oi(e, ai(t));\n}, ci = function(e, t, n) {\n return new Promise(function(r, o) {\n var a = function(l) {\n try {\n i(n.next(l));\n } catch (c) {\n o(c);\n }\n }, s = function(l) {\n try {\n i(n.throw(l));\n } catch (c) {\n o(c);\n }\n }, i = function(l) {\n return l.done ? r(l.value) : Promise.resolve(l.value).then(a, s);\n };\n i((n = n.apply(e, t)).next());\n });\n}, ui = typeof window < \"u\" && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ : function() {\n if (arguments.length !== 0)\n return typeof arguments[0] == \"object\" ? qt : qt.apply(null, arguments);\n};\nfunction ko(e) {\n if (typeof e != \"object\" || e === null)\n return !1;\n var t = Object.getPrototypeOf(e);\n if (t === null)\n return !0;\n for (var n = t; Object.getPrototypeOf(n) !== null; )\n n = Object.getPrototypeOf(n);\n return t === n;\n}\nvar li = function(e) {\n return e && typeof e.match == \"function\";\n};\nfunction Qe(e, t) {\n function n() {\n for (var r = [], o = 0; o < arguments.length; o++)\n r[o] = arguments[o];\n if (t) {\n var a = t.apply(void 0, r);\n if (!a)\n throw new Error(\"prepareAction did not return an object\");\n return Ke(Ke({\n type: e,\n payload: a.payload\n }, \"meta\" in a && { meta: a.meta }), \"error\" in a && { error: a.error });\n }\n return { type: e, payload: r[0] };\n }\n return n.toString = function() {\n return \"\" + e;\n }, n.type = e, n.match = function(r) {\n return r.type === e;\n }, n;\n}\nfunction di(e) {\n return typeof e == \"function\" && \"type\" in e && li(e);\n}\nfunction fi(e) {\n var t = e ? (\"\" + e).split(\"/\") : [], n = t[t.length - 1] || \"actionCreator\";\n return 'Detected an action creator with type \"' + (e || \"unknown\") + `\" being dispatched. \nMake sure you're calling the action creator before dispatching, i.e. \\`dispatch(` + n + \"())` instead of `dispatch(\" + n + \")`. This is necessary even if the action has no payload.\";\n}\nfunction hi(e) {\n if (e === void 0 && (e = {}), process.env.NODE_ENV === \"production\")\n return function() {\n return function(r) {\n return function(o) {\n return r(o);\n };\n };\n };\n var t = e.isActionCreator, n = t === void 0 ? di : t;\n return function() {\n return function(r) {\n return function(o) {\n return n(o) && console.warn(fi(o.type)), r(o);\n };\n };\n };\n}\nfunction Do(e, t) {\n var n = 0;\n return {\n measureTime: function(r) {\n var o = Date.now();\n try {\n return r();\n } finally {\n var a = Date.now();\n n += a - o;\n }\n },\n warnIfExceeded: function() {\n n > e && console.warn(t + \" took \" + n + \"ms, which is more than the warning threshold of \" + e + `ms. \nIf your state or actions are very large, you may want to disable the middleware as it might cause too much of a slowdown in development mode. See https://redux-toolkit.js.org/api/getDefaultMiddleware for instructions.\nIt is disabled in production builds, so you don't need to worry about that.`);\n }\n };\n}\nvar gi = function(e) {\n Ro(t, e);\n function t() {\n for (var n = [], r = 0; r < arguments.length; r++)\n n[r] = arguments[r];\n var o = e.apply(this, n) || this;\n return Object.setPrototypeOf(o, t.prototype), o;\n }\n return Object.defineProperty(t, Symbol.species, {\n get: function() {\n return t;\n },\n enumerable: !1,\n configurable: !0\n }), t.prototype.concat = function() {\n for (var n = [], r = 0; r < arguments.length; r++)\n n[r] = arguments[r];\n return e.prototype.concat.apply(this, n);\n }, t.prototype.prepend = function() {\n for (var n = [], r = 0; r < arguments.length; r++)\n n[r] = arguments[r];\n return n.length === 1 && Array.isArray(n[0]) ? new (t.bind.apply(t, mt([void 0], n[0].concat(this))))() : new (t.bind.apply(t, mt([void 0], n.concat(this))))();\n }, t;\n}(Array), mi = function(e) {\n Ro(t, e);\n function t() {\n for (var n = [], r = 0; r < arguments.length; r++)\n n[r] = arguments[r];\n var o = e.apply(this, n) || this;\n return Object.setPrototypeOf(o, t.prototype), o;\n }\n return Object.defineProperty(t, Symbol.species, {\n get: function() {\n return t;\n },\n enumerable: !1,\n configurable: !0\n }), t.prototype.concat = function() {\n for (var n = [], r = 0; r < arguments.length; r++)\n n[r] = arguments[r];\n return e.prototype.concat.apply(this, n);\n }, t.prototype.prepend = function() {\n for (var n = [], r = 0; r < arguments.length; r++)\n n[r] = arguments[r];\n return n.length === 1 && Array.isArray(n[0]) ? new (t.bind.apply(t, mt([void 0], n[0].concat(this))))() : new (t.bind.apply(t, mt([void 0], n.concat(this))))();\n }, t;\n}(Array);\nfunction Rn(e) {\n return Le(e) ? Io(e, function() {\n }) : e;\n}\nvar pi = process.env.NODE_ENV === \"production\", Ur = \"Invariant failed\";\nfunction Fr(e, t) {\n if (!e)\n throw pi ? new Error(Ur) : new Error(Ur + \": \" + (t || \"\"));\n}\nfunction yi(e, t, n, r) {\n return JSON.stringify(e, vi(t, r), n);\n}\nfunction vi(e, t) {\n var n = [], r = [];\n return t || (t = function(o, a) {\n return n[0] === a ? \"[Circular ~]\" : \"[Circular ~.\" + r.slice(0, n.indexOf(a)).join(\".\") + \"]\";\n }), function(o, a) {\n if (n.length > 0) {\n var s = n.indexOf(this);\n ~s ? n.splice(s + 1) : n.push(this), ~s ? r.splice(s, 1 / 0, o) : r.push(o), ~n.indexOf(a) && (a = t.call(this, o, a));\n } else\n n.push(a);\n return e == null ? a : e.call(this, o, a);\n };\n}\nfunction Si(e) {\n return typeof e != \"object\" || e == null || Object.isFrozen(e);\n}\nfunction bi(e, t, n) {\n var r = xo(e, t, n);\n return {\n detectMutations: function() {\n return Lo(e, t, r, n);\n }\n };\n}\nfunction xo(e, t, n, r, o) {\n t === void 0 && (t = []), r === void 0 && (r = \"\"), o === void 0 && (o = /* @__PURE__ */ new Set());\n var a = { value: n };\n if (!e(n) && !o.has(n)) {\n o.add(n), a.children = {};\n for (var s in n) {\n var i = r ? r + \".\" + s : s;\n t.length && t.indexOf(i) !== -1 || (a.children[s] = xo(e, t, n[s], i));\n }\n }\n return a;\n}\nfunction Lo(e, t, n, r, o, a) {\n t === void 0 && (t = []), o === void 0 && (o = !1), a === void 0 && (a = \"\");\n var s = n ? n.value : void 0, i = s === r;\n if (o && !i && !Number.isNaN(r))\n return { wasMutated: !0, path: a };\n if (e(s) || e(r))\n return { wasMutated: !1 };\n var l = {};\n for (var c in n.children)\n l[c] = !0;\n for (var c in r)\n l[c] = !0;\n var u = t.length > 0, d = function(y) {\n var v = a ? a + \".\" + y : y;\n if (u) {\n var p = t.some(function(E) {\n return E instanceof RegExp ? E.test(v) : v === E;\n });\n if (p)\n return \"continue\";\n }\n var g = Lo(e, t, n.children[y], r[y], i, v);\n if (g.wasMutated)\n return { value: g };\n };\n for (var c in l) {\n var h = d(c);\n if (typeof h == \"object\")\n return h.value;\n }\n return { wasMutated: !1 };\n}\nfunction Ei(e) {\n if (e === void 0 && (e = {}), process.env.NODE_ENV === \"production\")\n return function() {\n return function(l) {\n return function(c) {\n return l(c);\n };\n };\n };\n var t = e.isImmutable, n = t === void 0 ? Si : t, r = e.ignoredPaths, o = e.warnAfter, a = o === void 0 ? 32 : o, s = e.ignore;\n r = r || s;\n var i = bi.bind(null, n, r);\n return function(l) {\n var c = l.getState, u = c(), d = i(u), h;\n return function(y) {\n return function(v) {\n var p = Do(a, \"ImmutableStateInvariantMiddleware\");\n p.measureTime(function() {\n u = c(), h = d.detectMutations(), d = i(u), Fr(!h.wasMutated, \"A state mutation was detected between dispatches, in the path '\" + (h.path || \"\") + \"'. This may cause incorrect behavior. (https://redux.js.org/style-guide/style-guide#do-not-mutate-state)\");\n });\n var g = y(v);\n return p.measureTime(function() {\n u = c(), h = d.detectMutations(), d = i(u), h.wasMutated && Fr(!h.wasMutated, \"A state mutation was detected inside a dispatch, in the path: \" + (h.path || \"\") + \". Take a look at the reducer(s) handling the action \" + yi(v) + \". (https://redux.js.org/style-guide/style-guide#do-not-mutate-state)\");\n }), p.warnIfExceeded(), g;\n };\n };\n };\n}\nfunction Po(e) {\n var t = typeof e;\n return e == null || t === \"string\" || t === \"boolean\" || t === \"number\" || Array.isArray(e) || ko(e);\n}\nfunction kn(e, t, n, r, o, a) {\n t === void 0 && (t = \"\"), n === void 0 && (n = Po), o === void 0 && (o = []);\n var s;\n if (!n(e))\n return {\n keyPath: t || \"\",\n value: e\n };\n if (typeof e != \"object\" || e === null || a != null && a.has(e))\n return !1;\n for (var i = r != null ? r(e) : Object.entries(e), l = o.length > 0, c = function(g, E) {\n var b = t ? t + \".\" + g : g;\n if (l) {\n var T = o.some(function(w) {\n return w instanceof RegExp ? w.test(b) : b === w;\n });\n if (T)\n return \"continue\";\n }\n if (!n(E))\n return { value: {\n keyPath: b,\n value: E\n } };\n if (typeof E == \"object\" && (s = kn(E, b, n, r, o, a), s))\n return { value: s };\n }, u = 0, d = i; u < d.length; u++) {\n var h = d[u], y = h[0], v = h[1], p = c(y, v);\n if (typeof p == \"object\")\n return p.value;\n }\n return a && Bo(e) && a.add(e), !1;\n}\nfunction Bo(e) {\n if (!Object.isFrozen(e))\n return !1;\n for (var t = 0, n = Object.values(e); t < n.length; t++) {\n var r = n[t];\n if (!(typeof r != \"object\" || r === null) && !Bo(r))\n return !1;\n }\n return !0;\n}\nfunction wi(e) {\n if (e === void 0 && (e = {}), process.env.NODE_ENV === \"production\")\n return function() {\n return function(T) {\n return function(w) {\n return T(w);\n };\n };\n };\n var t = e.isSerializable, n = t === void 0 ? Po : t, r = e.getEntries, o = e.ignoredActions, a = o === void 0 ? [] : o, s = e.ignoredActionPaths, i = s === void 0 ? [\"meta.arg\", \"meta.baseQueryMeta\"] : s, l = e.ignoredPaths, c = l === void 0 ? [] : l, u = e.warnAfter, d = u === void 0 ? 32 : u, h = e.ignoreState, y = h === void 0 ? !1 : h, v = e.ignoreActions, p = v === void 0 ? !1 : v, g = e.disableCache, E = g === void 0 ? !1 : g, b = !E && WeakSet ? /* @__PURE__ */ new WeakSet() : void 0;\n return function(T) {\n return function(w) {\n return function(m) {\n var I = w(m), k = Do(d, \"SerializableStateInvariantMiddleware\");\n return !p && !(a.length && a.indexOf(m.type) !== -1) && k.measureTime(function() {\n var L = kn(m, \"\", n, r, i, b);\n if (L) {\n var P = L.keyPath, V = L.value;\n console.error(\"A non-serializable value was detected in an action, in the path: `\" + P + \"`. Value:\", V, `\nTake a look at the logic that dispatched this action: `, m, `\n(See https://redux.js.org/faq/actions#why-should-type-be-a-string-or-at-least-serializable-why-should-my-action-types-be-constants)`, `\n(To allow non-serializable values see: https://redux-toolkit.js.org/usage/usage-guide#working-with-non-serializable-data)`);\n }\n }), y || (k.measureTime(function() {\n var L = T.getState(), P = kn(L, \"\", n, r, c, b);\n if (P) {\n var V = P.keyPath, j = P.value;\n console.error(\"A non-serializable value was detected in the state, in the path: `\" + V + \"`. Value:\", j, `\nTake a look at the reducer(s) handling this action type: ` + m.type + `.\n(See https://redux.js.org/faq/organizing-state#can-i-put-functions-promises-or-other-non-serializable-items-in-my-store-state)`);\n }\n }), k.warnIfExceeded()), I;\n };\n };\n };\n}\nfunction Ut(e) {\n return typeof e == \"boolean\";\n}\nfunction Ti() {\n return function(t) {\n return Mi(t);\n };\n}\nfunction Mi(e) {\n e === void 0 && (e = {});\n var t = e.thunk, n = t === void 0 ? !0 : t, r = e.immutableCheck, o = r === void 0 ? !0 : r, a = e.serializableCheck, s = a === void 0 ? !0 : a, i = e.actionCreatorCheck, l = i === void 0 ? !0 : i, c = new gi();\n if (n && (Ut(n) ? c.push(Lr) : c.push(Lr.withExtraArgument(n.extraArgument))), process.env.NODE_ENV !== \"production\") {\n if (o) {\n var u = {};\n Ut(o) || (u = o), c.unshift(Ei(u));\n }\n if (s) {\n var d = {};\n Ut(s) || (d = s), c.push(wi(d));\n }\n if (l) {\n var h = {};\n Ut(l) || (h = l), c.unshift(hi(h));\n }\n }\n return c;\n}\nvar Sn = process.env.NODE_ENV === \"production\";\nfunction Ci(e) {\n var t = Ti(), n = e || {}, r = n.reducer, o = r === void 0 ? void 0 : r, a = n.middleware, s = a === void 0 ? t() : a, i = n.devTools, l = i === void 0 ? !0 : i, c = n.preloadedState, u = c === void 0 ? void 0 : c, d = n.enhancers, h = d === void 0 ? void 0 : d, y;\n if (typeof o == \"function\")\n y = o;\n else if (ko(o))\n y = ei(o);\n else\n throw new Error('\"reducer\" is a required argument, and must be a function or an object of functions that can be passed to combineReducers');\n var v = s;\n if (typeof v == \"function\" && (v = v(t), !Sn && !Array.isArray(v)))\n throw new Error(\"when using a middleware builder function, an array of middleware must be returned\");\n if (!Sn && v.some(function(w) {\n return typeof w != \"function\";\n }))\n throw new Error(\"each middleware provided to configureStore must be a function\");\n var p = ti.apply(void 0, v), g = qt;\n l && (g = ui(Ke({\n trace: !Sn\n }, typeof l == \"object\" && l)));\n var E = new mi(p), b = E;\n Array.isArray(h) ? b = mt([p], h) : typeof h == \"function\" && (b = h(E));\n var T = g.apply(void 0, b);\n return Oo(y, u, T);\n}\nfunction Uo(e) {\n var t = {}, n = [], r, o = {\n addCase: function(a, s) {\n if (process.env.NODE_ENV !== \"production\") {\n if (n.length > 0)\n throw new Error(\"`builder.addCase` should only be called before calling `builder.addMatcher`\");\n if (r)\n throw new Error(\"`builder.addCase` should only be called before calling `builder.addDefaultCase`\");\n }\n var i = typeof a == \"string\" ? a : a.type;\n if (!i)\n throw new Error(\"`builder.addCase` cannot be called with an empty action type\");\n if (i in t)\n throw new Error(\"`builder.addCase` cannot be called with two reducers for the same action type\");\n return t[i] = s, o;\n },\n addMatcher: function(a, s) {\n if (process.env.NODE_ENV !== \"production\" && r)\n throw new Error(\"`builder.addMatcher` should only be called before calling `builder.addDefaultCase`\");\n return n.push({ matcher: a, reducer: s }), o;\n },\n addDefaultCase: function(a) {\n if (process.env.NODE_ENV !== \"production\" && r)\n throw new Error(\"`builder.addDefaultCase` can only be called once\");\n return r = a, o;\n }\n };\n return e(o), [t, n, r];\n}\nfunction Ii(e) {\n return typeof e == \"function\";\n}\nvar jr = !1;\nfunction Ai(e, t, n, r) {\n n === void 0 && (n = []), process.env.NODE_ENV !== \"production\" && typeof t == \"object\" && (jr || (jr = !0, console.warn(\"The object notation for `createReducer` is deprecated, and will be removed in RTK 2.0. Please use the 'builder callback' notation instead: https://redux-toolkit.js.org/api/createReducer\")));\n var o = typeof t == \"function\" ? Uo(t) : [t, n, r], a = o[0], s = o[1], i = o[2], l;\n if (Ii(e))\n l = function() {\n return Rn(e());\n };\n else {\n var c = Rn(e);\n l = function() {\n return c;\n };\n }\n function u(d, h) {\n d === void 0 && (d = l());\n var y = mt([\n a[h.type]\n ], s.filter(function(v) {\n var p = v.matcher;\n return p(h);\n }).map(function(v) {\n var p = v.reducer;\n return p;\n }));\n return y.filter(function(v) {\n return !!v;\n }).length === 0 && (y = [i]), y.reduce(function(v, p) {\n if (p)\n if (Xe(v)) {\n var g = v, E = p(g, h);\n return E === void 0 ? v : E;\n } else {\n if (Le(v))\n return Io(v, function(b) {\n return p(b, h);\n });\n var E = p(v, h);\n if (E === void 0) {\n if (v === null)\n return v;\n throw Error(\"A case reducer on a non-draftable value must not return undefined\");\n }\n return E;\n }\n return v;\n }, d);\n }\n return u.getInitialState = l, u;\n}\nvar Vr = !1;\nfunction Oi(e, t) {\n return e + \"/\" + t;\n}\nfunction it(e) {\n var t = e.name;\n if (!t)\n throw new Error(\"`name` is a required option for createSlice\");\n typeof process < \"u\" && process.env.NODE_ENV === \"development\" && e.initialState === void 0 && console.error(\"You must provide an `initialState` value that is not `undefined`. You may have misspelled `initialState`\");\n var n = typeof e.initialState == \"function\" ? e.initialState : Rn(e.initialState), r = e.reducers || {}, o = Object.keys(r), a = {}, s = {}, i = {};\n o.forEach(function(u) {\n var d = r[u], h = Oi(t, u), y, v;\n \"reducer\" in d ? (y = d.reducer, v = d.prepare) : y = d, a[u] = y, s[h] = y, i[u] = v ? Qe(h, v) : Qe(h);\n });\n function l() {\n process.env.NODE_ENV !== \"production\" && typeof e.extraReducers == \"object\" && (Vr || (Vr = !0, console.warn(\"The object notation for `createSlice.extraReducers` is deprecated, and will be removed in RTK 2.0. Please use the 'builder callback' notation instead: https://redux-toolkit.js.org/api/createSlice\")));\n var u = typeof e.extraReducers == \"function\" ? Uo(e.extraReducers) : [e.extraReducers], d = u[0], h = d === void 0 ? {} : d, y = u[1], v = y === void 0 ? [] : y, p = u[2], g = p === void 0 ? void 0 : p, E = Ke(Ke({}, h), s);\n return Ai(n, function(b) {\n for (var T in E)\n b.addCase(T, E[T]);\n for (var w = 0, m = v; w < m.length; w++) {\n var I = m[w];\n b.addMatcher(I.matcher, I.reducer);\n }\n g && b.addDefaultCase(g);\n });\n }\n var c;\n return {\n name: t,\n reducer: function(u, d) {\n return c || (c = l()), c(u, d);\n },\n actions: i,\n caseReducers: a,\n getInitialState: function() {\n return c || (c = l()), c.getInitialState();\n }\n };\n}\nvar _i = \"ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW\", Ni = function(e) {\n e === void 0 && (e = 21);\n for (var t = \"\", n = e; n--; )\n t += _i[Math.random() * 64 | 0];\n return t;\n}, Ri = [\n \"name\",\n \"message\",\n \"stack\",\n \"code\"\n], bn = function() {\n function e(t, n) {\n this.payload = t, this.meta = n;\n }\n return e;\n}(), Hr = function() {\n function e(t, n) {\n this.payload = t, this.meta = n;\n }\n return e;\n}(), ki = function(e) {\n if (typeof e == \"object\" && e !== null) {\n for (var t = {}, n = 0, r = Ri; n < r.length; n++) {\n var o = r[n];\n typeof e[o] == \"string\" && (t[o] = e[o]);\n }\n return t;\n }\n return { message: String(e) };\n};\n(function() {\n function e(t, n, r) {\n var o = Qe(t + \"/fulfilled\", function(u, d, h, y) {\n return {\n payload: u,\n meta: vn(Ke({}, y || {}), {\n arg: h,\n requestId: d,\n requestStatus: \"fulfilled\"\n })\n };\n }), a = Qe(t + \"/pending\", function(u, d, h) {\n return {\n payload: void 0,\n meta: vn(Ke({}, h || {}), {\n arg: d,\n requestId: u,\n requestStatus: \"pending\"\n })\n };\n }), s = Qe(t + \"/rejected\", function(u, d, h, y, v) {\n return {\n payload: y,\n error: (r && r.serializeError || ki)(u || \"Rejected\"),\n meta: vn(Ke({}, v || {}), {\n arg: h,\n requestId: d,\n rejectedWithValue: !!y,\n requestStatus: \"rejected\",\n aborted: (u == null ? void 0 : u.name) === \"AbortError\",\n condition: (u == null ? void 0 : u.name) === \"ConditionError\"\n })\n };\n }), i = !1, l = typeof AbortController < \"u\" ? AbortController : function() {\n function u() {\n this.signal = {\n aborted: !1,\n addEventListener: function() {\n },\n dispatchEvent: function() {\n return !1;\n },\n onabort: function() {\n },\n removeEventListener: function() {\n },\n reason: void 0,\n throwIfAborted: function() {\n }\n };\n }\n return u.prototype.abort = function() {\n process.env.NODE_ENV !== \"production\" && (i || (i = !0, console.info(\"This platform does not implement AbortController. \\nIf you want to use the AbortController to react to `abort` events, please consider importing a polyfill like 'abortcontroller-polyfill/dist/abortcontroller-polyfill-only'.\")));\n }, u;\n }();\n function c(u) {\n return function(d, h, y) {\n var v = r != null && r.idGenerator ? r.idGenerator(u) : Ni(), p = new l(), g;\n function E(T) {\n g = T, p.abort();\n }\n var b = function() {\n return ci(this, null, function() {\n var T, w, m, I, k, L, P;\n return ni(this, function(V) {\n switch (V.label) {\n case 0:\n return V.trys.push([0, 4, , 5]), I = (T = r == null ? void 0 : r.condition) == null ? void 0 : T.call(r, u, { getState: h, extra: y }), xi(I) ? [4, I] : [3, 2];\n case 1:\n I = V.sent(), V.label = 2;\n case 2:\n if (I === !1 || p.signal.aborted)\n throw {\n name: \"ConditionError\",\n message: \"Aborted due to condition callback returning false.\"\n };\n return k = new Promise(function(j, K) {\n return p.signal.addEventListener(\"abort\", function() {\n return K({\n name: \"AbortError\",\n message: g || \"Aborted\"\n });\n });\n }), d(a(v, u, (w = r == null ? void 0 : r.getPendingMeta) == null ? void 0 : w.call(r, { requestId: v, arg: u }, { getState: h, extra: y }))), [4, Promise.race([\n k,\n Promise.resolve(n(u, {\n dispatch: d,\n getState: h,\n extra: y,\n requestId: v,\n signal: p.signal,\n abort: E,\n rejectWithValue: function(j, K) {\n return new bn(j, K);\n },\n fulfillWithValue: function(j, K) {\n return new Hr(j, K);\n }\n })).then(function(j) {\n if (j instanceof bn)\n throw j;\n return j instanceof Hr ? o(j.payload, v, u, j.meta) : o(j, v, u);\n })\n ])];\n case 3:\n return m = V.sent(), [3, 5];\n case 4:\n return L = V.sent(), m = L instanceof bn ? s(null, v, u, L.payload, L.meta) : s(L, v, u), [3, 5];\n case 5:\n return P = r && !r.dispatchConditionRejection && s.match(m) && m.meta.condition, P || d(m), [2, m];\n }\n });\n });\n }();\n return Object.assign(b, {\n abort: E,\n requestId: v,\n arg: u,\n unwrap: function() {\n return b.then(Di);\n }\n });\n };\n }\n return Object.assign(c, {\n pending: a,\n rejected: s,\n fulfilled: o,\n typePrefix: t\n });\n }\n return e.withTypes = function() {\n return e;\n }, e;\n})();\nfunction Di(e) {\n if (e.meta && e.meta.rejectedWithValue)\n throw e.payload;\n if (e.error)\n throw e.error;\n return e.payload;\n}\nfunction xi(e) {\n return e !== null && typeof e == \"object\" && typeof e.then == \"function\";\n}\nvar Gn = \"listenerMiddleware\";\nQe(Gn + \"/add\");\nQe(Gn + \"/removeAll\");\nQe(Gn + \"/remove\");\nvar qr;\ntypeof queueMicrotask == \"function\" && queueMicrotask.bind(typeof window < \"u\" ? window : typeof global < \"u\" ? global : globalThis);\nFs();\nfunction ze(e) {\n return typeof e > \"u\" || e === null;\n}\nfunction Yn(e, t) {\n return t < 0 || t >= e.length ? e : [...e.slice(0, t), ...e.slice(t + 1)];\n}\nconst Li = \"^[\\\\x09\\\\x0A\\\\x0D\\\\x20-\\\\x7E\\\\xA0-\\\\xFF\\\\u0152\\\\u0153\\\\u0160\\\\u0161\\\\u0178\\\\u017D\\\\u017E\\\\u0192\\\\u02C6\\\\u02DC\\\\u2013\\\\u2014\\\\u2018-\\\\u201A\\\\u201C-\\\\u201E\\\\u2020-\\\\u2022\\\\u2026\\\\u2030\\\\u2039\\\\u203A\\\\u20AC\\\\u2122]*$\";\nfunction Pi(e) {\n return new RegExp(Li).test(e);\n}\nfunction Bi(e) {\n return e.split(\"\").filter(Pi).join(\"\");\n}\nconst Ui = /&#/gm, Fi = \"& #\", ji = /<([A-Za-z/])/gm, Vi = \"< $1\";\nfunction Hi(e, t) {\n let n = e.replace(ji, Vi);\n n = n.replace(Ui, Fi);\n const r = Bi(n);\n return r !== n && (t == null || t()), r;\n}\nfunction Kn() {\n var n;\n const e = navigator.userAgent;\n return /\\b(iPhone|iPad|iPod)\\b/i.test(e) || /Macintosh/.test(e) && ((n = navigator.maxTouchPoints) != null ? n : 0) > 1;\n}\nfunction Pe() {\n const e = navigator.userAgent;\n return /\\b(BlackBerry|webOS|Android|Windows Phone|IEMobile)\\b/i.test(e) || Kn();\n}\nfunction qi() {\n if (!Pe())\n return;\n let e = document.querySelector(\"meta[name=viewport]\");\n e && e.setAttribute(\n \"content\",\n \"width=device-width, initial-scale=1.0, maximum-scale=1.0, interactive-widget=resizes-content\"\n );\n}\nfunction _t() {\n return sessionStorage.getItem(Qt);\n}\nfunction zi() {\n sessionStorage.removeItem(Qt);\n}\nfunction Wi(e) {\n return sessionStorage.setItem(Qt, e);\n}\nfunction $i(e) {\n var t;\n (t = window.mychartWidget) == null || t.renderWidget(e);\n}\nconst Gi = 1e3, Yi = 200, Ki = 6e5, Fo = 5e3, Qi = 501, Ji = 3e3, Xi = 5e3, Zi = 84e4, ec = 6e4, tc = 0, nc = 5e3, rc = 10, oc = 480, jo = 500, Vo = \"ARROWRIGHT\", Ho = \"ARROWLEFT\", qo = \"TAB\", zo = \"ESCAPE\", Wo = \"C\", $o = \"E\", Go = 1e3, ac = 500, sc = 3, ic = 5e3, cc = 3, uc = 1e4, lc = 5e3, dc = 2e3, Yo = 2e3, fc = 45e3, ve = \"ChatBot\", zt = 20, zr = \"#246fb5\", Wr = \"#0091ea\", hc = \"Source Sans Pro, Calibri, Arial\", gc = \"Need Help?\", mc = \"Live Chat\", Qn = \"N/A\", Ko = \"Logo\", Qo = \"lightMode\", Wt = \"chat-allow-sound\", Qt = \"serviceToken\", Jn = \"botHistoryToken\", pc = /https?:\\/\\/[^\\s]+/g, yc = /\\[(?!\\s*\\])\\s*(.*?)\\]\\((https?:\\/\\/[^\\s]+)\\)(\\[.*?\\])?/g, vc = new RegExp(`(${yc.source})|(${pc.source})`, \"g\");\nlet At;\nconst Sc = (e) => {\n At = e;\n};\nfunction dt(e, ...t) {\n !At || At(\"warn\", e, [...t, new Date().toISOString()]);\n}\nfunction pt(e, ...t) {\n !At || At(\"error\", e, [...t, new Date().toISOString()]);\n}\nfunction Jo() {\n var e;\n try {\n return JSON.parse((e = sessionStorage.getItem(Jn)) != null ? e : \"[]\");\n } catch {\n return [];\n }\n}\nfunction Xo(e) {\n const t = Jo();\n for (const n of e)\n t.push(n);\n sessionStorage.setItem(Jn, JSON.stringify(t));\n}\nfunction bc() {\n sessionStorage.removeItem(Jn);\n}\nfunction yt() {\n zi(), bc();\n}\nfunction Nt(e, t) {\n const n = new Date(e), r = n.getTime();\n if (t) {\n const a = { hour: \"numeric\", minute: \"numeric\" }, s = Intl.DateTimeFormat(t, a);\n return [r, s.format(n)];\n }\n const o = n.toLocaleTimeString(void 0, { timeStyle: \"short\" });\n return [r, o];\n}\nfunction Ec(e, t) {\n if (t === void 0)\n return e;\n let n = { ...e };\n const r = [...n.messages];\n n.messages = r;\n const [o, a] = Nt(t.dateTimeISOString);\n e.messages.length > 0 && t.messageBody !== e.messages[0].messageBody && t.botOptions.push({ optionLabel: \"Go back\", optionStyle: \"GoBack\" });\n const s = {\n messageBody: t.messageBody,\n displayTime: a,\n sentDateTime: o,\n isMe: !1,\n messageDeliveryStatus: \"sent\",\n botMessageInfo: {\n options: t.botOptions\n },\n senderId: ve,\n hideSuggestions: !1\n };\n return n.messages.push(s), n.nodeHistory = t.nodeHistory, n.queueSession = t.queueSession, n;\n}\nfunction Jt(e, t) {\n for (let n = t.length - 1; n >= 0; n--) {\n const r = t[n];\n if (r.isMe && e === \"user\")\n return n;\n if (!r.isMe && e === \"bot\")\n return n;\n }\n return -1;\n}\nfunction wc(e, t, n, r) {\n const o = Jt(\"bot\", e.messages);\n if (o < 0 || !t)\n return e;\n const a = { ...e };\n a.messages = [...e.messages];\n const s = a.messages[o];\n if (s === void 0 || s.botMessageInfo === void 0)\n return e;\n const i = {\n ...a.messages[o],\n hideSuggestions: !0\n };\n let l = null;\n const [c, u] = Nt(r != null ? r : new Date().toISOString());\n return t !== void 0 && t.length > 0 && (l = {\n messageBody: t,\n displayTime: u,\n sentDateTime: c,\n isMe: !0,\n messageDeliveryStatus: n ? \"sent\" : \"sending\",\n senderId: \"self\"\n }), a.messages[o] = i, l !== null && a.messages.push(l), a;\n}\nfunction Tc(e, t, n, r, o) {\n if (n === void 0 || n.length < 1)\n return e;\n const a = {\n ...e,\n messages: [...e.messages],\n queueId: t,\n queueSession: n,\n chatIdentifier: r,\n queueIdentifier: o\n }, s = Jt(\"user\", a.messages);\n if (s < 0)\n return a;\n const i = {\n ...a.messages[s],\n messageDeliveryStatus: \"sent\"\n };\n return a.messages[s] = i, a;\n}\nfunction En(e, t) {\n const n = Jt(\"user\", e.messages);\n if (n < 0)\n return e;\n const r = e.messages[n];\n if (r.messageDeliveryStatus === t)\n return e;\n const o = { ...e }, a = [...o.messages], s = { ...r };\n return s.messageDeliveryStatus = t, a[n] = s, o.messages = a, o;\n}\nfunction Mc(e) {\n const t = { ...e };\n t.messages = [...e.messages];\n const n = new Date().toISOString(), [r, o] = Nt(n), a = {\n messageBody: \"Submission successful! An agent will join you shortly.\",\n displayTime: o,\n sentDateTime: r,\n isMe: !1,\n messageDeliveryStatus: \"sent\",\n botMessageInfo: {\n options: []\n },\n senderId: \"chatBot\"\n };\n return Xo([\n { content: a.messageBody, isEncrypted: !1, isBot: !0, sentISOTimestamp: n }\n ]), t.messages.push(a), t;\n}\nconst $r = {\n messages: [],\n nodeHistory: [],\n queueSession: void 0,\n chatIdentifier: void 0,\n queueIdentifier: void 0,\n botInteractionSettings: {\n dialogId: \"\",\n botSession: \"\",\n negotiateEndpoint: \"\",\n botEndpoint: \"\",\n configInitializeEndpoint: \"\",\n apiKey: \"\",\n enabled: !1,\n botHistoryEndpoint: \"\"\n }\n}, Zo = it({\n name: \"botInteraction\",\n initialState: $r,\n reducers: {\n resetBotInteraction: () => $r,\n messageToBotFailed(e) {\n return En(e, \"failed\");\n },\n addUserResponse(e, t) {\n return wc(\n e,\n t.payload.newMsg,\n t.payload.isHistory,\n t.payload.timestamp\n );\n },\n addBotResponse(e, t) {\n return Ec(e, t.payload.incomingBotMessage);\n },\n talkToAgent(e, t) {\n return Tc(\n e,\n t.payload.queueId,\n t.payload.queueSession,\n t.payload.chatIdentifier,\n t.payload.queueIdentifier\n );\n },\n markMessageSent(e) {\n return En(e, \"sent\");\n },\n retryFailedBotMessage(e) {\n return En(e, \"sending\");\n },\n verificationSubmissionSuccess(e) {\n return Mc(e);\n },\n setBotInteractionSettings(e, t) {\n return t.payload.botInteractionSettings === void 0 ? e : { ...e, botInteractionSettings: t.payload.botInteractionSettings };\n }\n }\n}), {\n resetBotInteraction: Cc,\n messageToBotFailed: Ic,\n addUserResponse: ea,\n addBotResponse: ta,\n talkToAgent: na,\n markMessageSent: Gr,\n retryFailedBotMessage: Ac,\n verificationSubmissionSuccess: Oc,\n setBotInteractionSettings: ra\n} = Zo.actions, _c = Zo.reducer;\nfunction Nc(e) {\n let t = e != null ? e : {\n primaryColor: zr,\n secondaryColor: Wr,\n fontFamily: hc,\n minimizedChatTitle: gc,\n liveChatTitle: mc,\n organizationImageURL: Qn,\n organizationImageDescriptor: Ko\n }, n = new Option().style;\n return n.color = t.primaryColor, n.color === \"\" && (t.primaryColor = zr), n = new Option().style, n.color = t.secondaryColor, n.color === \"\" && (t.secondaryColor = Wr), t;\n}\nfunction Rc(e) {\n const t = document.querySelector(\":root\");\n t !== null && (t.style.setProperty(\"--WPColor-BrandPrimary\", e.primaryColor), t.style.setProperty(\"--WPColor-BrandSecondary\", e.secondaryColor), t.style.setProperty(\n \"--LCFont-FontFamily\",\n e.fontFamily ? e.fontFamily : \"Source Sans Pro, Calibri, Arial, sans-serif\"\n ));\n}\nfunction Yr(e, t) {\n if (t !== void 0) {\n if (t <= 1) {\n e.queueDepth = 1;\n return;\n }\n e.queueDepth && e.queueDepth <= t || (e.queueDepth = t);\n }\n}\nfunction kc(e, t) {\n t !== void 0 && (e.negotiateToken = t);\n}\nfunction Dc(e, t) {\n const n = t.shouldFocus;\n if (n === void 0)\n return e;\n const r = { ...e };\n return r.shouldFocus = n, r;\n}\nfunction xc(e, t) {\n const n = t.isMinimized;\n return n === void 0 || (e.isMinimized = n, t.shouldFocus !== void 0 && (e.shouldFocus = t.shouldFocus), t.chatStage !== void 0 && (e.chatStage = t.chatStage)), e;\n}\nconst Kr = {\n chatStage: \"notStarted\",\n isMinimized: !0,\n shouldFocus: !1,\n shrinkComposer: !1,\n showIdleTimeoutWarning: !1,\n queueDepth: 0,\n negotiateToken: \"\",\n hasInitializedChat: !1,\n overlayType: \"none\",\n allowSound: !1,\n branding: {\n minimizedChatTitle: \"Need Help?\",\n liveChatTitle: \"Live Chat\",\n primaryColor: \"#246fb5\",\n secondaryColor: \"#0091ea\",\n fontFamily: \"Source Sans Pro, Calibri, Arial, sans-serif\"\n },\n hasInitializedBot: !1,\n isLoadingBotHistory: !1,\n retryAttempts: 0\n}, oa = it({\n name: \"chatApp\",\n initialState: Kr,\n reducers: {\n resetChatApp: () => Kr,\n updateMinimizeStatus(e, t) {\n return xc(e, t.payload);\n },\n setShouldFocus(e, t) {\n return Dc(e, t.payload);\n },\n setShrinkComposer(e, t) {\n return t.payload.shrinkComposer === void 0 ? e : { ...e, shrinkComposer: t.payload.shrinkComposer };\n },\n setShowIdleTimeoutWarning(e, t) {\n return t.payload.showIdleTimeoutWarning === void 0 ? e : { ...e, showIdleTimeoutWarning: t.payload.showIdleTimeoutWarning };\n },\n setChatStage(e, t) {\n return t.payload.chatStage === void 0 ? e : { ...e, chatStage: t.payload.chatStage };\n },\n setBranding(e, t) {\n if (!t.payload.branding)\n return e;\n const n = Nc(t.payload.branding);\n return Rc(n), {\n ...e,\n branding: n\n };\n },\n setOverlayType(e, t) {\n return t.payload.overlayType ? { ...e, overlayType: t.payload.overlayType } : e;\n },\n updateQueueDepth(e, t) {\n Yr(e, t.payload.queueDepth);\n },\n updateNegotiateToken(e, t) {\n kc(e, t.payload.negotiateToken);\n },\n decrementQueueDepth(e, t) {\n if (e.queueDepth === void 0 || t.payload.creationTime === void 0 || e.creationTime === void 0 || new Date(t.payload.creationTime) > new Date(e.creationTime))\n return e;\n Yr(e, e.queueDepth - 1);\n },\n setHasInitializedChat(e, t) {\n if (t.payload.hasInitializedChat === void 0)\n return e;\n const n = { ...e };\n return n.hasInitializedChat = t.payload.hasInitializedChat, n;\n },\n setHasInitializedBot(e, t) {\n if (t.payload.hasInitializedBot === void 0)\n return e;\n const n = { ...e };\n return n.hasInitializedBot = t.payload.hasInitializedBot, n;\n },\n setIsLoadingBotHistory(e, t) {\n if (t.payload.isLoadingBotHistory === void 0)\n return e;\n const n = { ...e };\n return n.isLoadingBotHistory = t.payload.isLoadingBotHistory, n;\n },\n setCreationTime(e, t) {\n if (t.payload.creationTime === void 0)\n return e;\n e.creationTime = t.payload.creationTime;\n },\n setAllowSound(e, t) {\n return t.payload.allowSound === void 0 ? e : { ...e, allowSound: t.payload.allowSound };\n },\n updateRetryAttempts(e, t) {\n return t.payload.retryAttempts === void 0 ? e : t.payload.retryAttempts >= 10 ? { ...e, retryAttempts: 0, overlayType: \"retryError\" } : { ...e, retryAttempts: t.payload.retryAttempts };\n }\n }\n}), {\n resetChatApp: Lc,\n updateMinimizeStatus: at,\n setShouldFocus: Xn,\n setShrinkComposer: Uf,\n setShowIdleTimeoutWarning: aa,\n setChatStage: oe,\n setOverlayType: Ce,\n updateQueueDepth: Pc,\n updateNegotiateToken: Bc,\n decrementQueueDepth: Uc,\n setHasInitializedChat: Fc,\n setCreationTime: jc,\n setAllowSound: Zn,\n setBranding: Vc,\n setHasInitializedBot: Hc,\n setIsLoadingBotHistory: Dn,\n updateRetryAttempts: $t\n} = oa.actions, qc = oa.reducer;\nfunction bt(e, t, n, r, o, a, s, i, l = null) {\n const [c, u] = Nt(n);\n var d = {\n messageBody: t,\n messageId: e,\n sentTimeISOString: n,\n sentDateTime: c,\n displayTime: u,\n senderId: r,\n subjectId: s,\n messageType: o,\n systemMessageType: a,\n sequentialId: l,\n messageDeliveryStatus: i\n };\n return d;\n}\nfunction Xt(e, t) {\n const n = { ...e };\n return n.sequentialId = t, n;\n}\nfunction sa(e, t) {\n let n = -1;\n return t.outgoingMessageType !== \"userMessage\" ? n = e.findIndex(\n (r) => r.outgoingMessageType === t.outgoingMessageType\n ) : t.messageId !== void 0 && (n = e.findIndex(\n (r) => r.messageId === t.messageId\n )), n;\n}\nfunction er(e, t, n) {\n if (n === void 0)\n return !1;\n const { messageId: r, outgoingMessageType: o } = n;\n return e !== void 0 && r === e || t === \"heartbeat\" && o === \"heartbeat\";\n}\nfunction ia(e, t, n) {\n if (er(t, n, e.messageAwaitingAck)) {\n const r = { ...e };\n return r.messageAwaitingAck = void 0, r;\n } else\n return e;\n}\nfunction Zt(e, t, n) {\n const r = n !== void 0 ? n : e.messageMap[t] !== void 0 ? \"userMessage\" : \"heartbeat\", o = sa(e.queuedMessages, {\n messageId: t,\n outgoingMessageType: r,\n data: null\n }), a = er(\n t,\n r,\n e.messageAwaitingAck\n );\n if (o < 0 && !a)\n return e;\n const s = { ...e }, i = Yn(e.queuedMessages, o);\n return s.queuedMessages = i, ia(s, t, r);\n}\nfunction tr(e, t) {\n const n = { ...e };\n return n.messageDeliveryStatus = t, n;\n}\nfunction ca(e, t) {\n const n = [...e];\n return t.forEach((r) => {\n const { messageId: o, sequentialId: a } = r, s = n.findIndex(\n (i) => i.messageId === o\n );\n if (s === -1)\n n.push({ ...r });\n else {\n const i = Xt(n[s], a);\n n[s] = i;\n }\n }), n.sort(\n (r, o) => r.sequentialId - o.sequentialId\n ), n;\n}\nfunction ua(e, t) {\n const n = { ...e }, [r, o] = Nt(t);\n return n.sentDateTime = r, n.displayTime = o, n;\n}\nfunction Qr(e, t) {\n const n = e.sortedMessageArray, r = n.length;\n for (let o = 0; o < r; o++)\n if (n[o].sequentialId === t)\n return o;\n return -1;\n}\nfunction zc(e) {\n const t = e.highestGaplessSequentialId;\n return t === 0 ? Qr(e, 1) : Qr(e, t);\n}\nfunction xn(e, t) {\n return e.sortedMessageArray[t].sequentialId;\n}\nfunction Wc(e, t, n) {\n return Math.abs(\n xn(e, t) - xn(e, n)\n ) > 1;\n}\nfunction $c(e, t) {\n const n = e.sortedMessageArray, r = e.messageMap[n[t].messageId];\n return r !== void 0 && r.messageDeliveryStatus === \"sent\" && r.sequentialId !== null && r.sequentialId % 1 === 0;\n}\nfunction Gc(e) {\n const t = e.sortedMessageArray.length;\n let n = zc(e);\n if (n < 0)\n return n;\n let r = n + 1;\n for (; n < t && r < t; ) {\n if (!$c(e, r)) {\n r++;\n continue;\n }\n if (Wc(e, n, r))\n return n;\n n = r, r++;\n }\n return n;\n}\nfunction la(e) {\n const t = Gc(e);\n return t < 0 ? 0 : xn(e, t);\n}\nfunction da(e, t) {\n for (let n = e.length - 1; n >= 0; n--) {\n const r = e[n].messageId, o = t[r];\n if (o !== void 0 && o.messageType === \"self\")\n return r;\n }\n return \"\";\n}\nfunction Yc(e, t) {\n const { messageId: n, sequentialId: r, sentTimeISOString: o } = t, a = e.messageMap[n];\n if (a === void 0)\n return e;\n const s = tr(a, \"sent\"), i = Xt(\n s,\n r\n ), l = ua(i, o), c = { ...e, messageMap: { ...e.messageMap } };\n return c.messageMap[n] = l, c.sortedMessageArray = ca(\n c.sortedMessageArray,\n [{ messageId: n, sequentialId: r }]\n ), c.mostRecentUserMessageId = da(\n c.sortedMessageArray,\n c.messageMap\n ), c.highestSequentialId = Math.max(\n r,\n c.highestSequentialId\n ), c.highestGaplessSequentialId = la(c), c.highestGaplessSequentialId === c.highestSequentialId && (c.heartbeatStatus = \"resetTimer\"), Zt(c, n);\n}\nfunction Kc(e, t) {\n if (t === \"heartbeat\" || t === \"loadChat\") {\n const n = Zt(e, \"\", \"heartbeat\");\n return n.heartbeatStatus = \"resetTimer\", n;\n }\n return e;\n}\nfunction Qc(e, t) {\n const n = t === \"heartbeat\" ? Zt(e, \"\", \"heartbeat\") : e;\n return { ...n, messageMap: { ...n.messageMap } };\n}\nfunction Jc(e, t, n) {\n const r = [];\n return n.forEach((o) => {\n const { messageId: a } = o;\n let s = o.messageDeliveryStatus === \"sent\" && o.sequentialId !== null ? o.sequentialId : e.highestSequentialId + 1e-3;\n const i = Xt(o, s);\n let l = a;\n if (o.messageDeliveryStatus === \"sent\") {\n const c = t.sortedMessageArray.filter(\n (u) => u.messageId === a\n );\n c.length > 0 && (l = c[0].messageId);\n }\n i.messageId = l, e.messageMap[l] = i, e.highestSequentialId = Math.max(s, e.highestSequentialId), r.push({ messageId: l, sequentialId: s });\n }), r;\n}\nfunction Xc(e, t) {\n return (t === \"heartbeat\" || t === \"loadChat\" || t === \"incomingMessage\" && e.highestGaplessSequentialId === Math.floor(e.highestSequentialId)) && (e.heartbeatStatus = \"resetTimer\"), e;\n}\nfunction Gt(e, t) {\n const { messages: n, messageSource: r } = t;\n if (n.length < 1)\n return Kc(e, r);\n const o = Qc(e, r), a = Jc(\n o,\n e,\n n\n ), s = ca(\n o.sortedMessageArray,\n a\n );\n if (o.sortedMessageArray = s, o.mostRecentUserMessageId = da(\n o.sortedMessageArray,\n o.messageMap\n ), r === \"incomingMessage\" && (o.hasNewMessageNotification = !0), r === \"heartbeat\" || r === \"loadChat\") {\n let i = o.highestGaplessSequentialId;\n n.forEach((l) => {\n l.sequentialId > i && (i = l.sequentialId);\n }), o.highestGaplessSequentialId = i;\n }\n return o.highestGaplessSequentialId = la(o), Xc(o, r);\n}\nfunction Zc(e) {\n const { onArrive: t, onDepart: n, onFocus: r, onBlur: o, onMouseEnter: a, onMouseLeave: s } = e, i = Me(() => r || t, [r, t]), l = Me(() => o || n, [o, n]), c = Me(() => a || t, [a, t]), u = Me(() => s || n, [s, n]);\n return [i, l, c, u];\n}\nconst eu = {\n theme: Qo\n}, fa = ts(eu), tu = ({\n children: e,\n theme: t\n}) => {\n const n = {\n theme: t\n };\n return /* @__PURE__ */ f(fa.Provider, {\n value: n,\n children: e\n });\n}, Se = () => ho(fa), nu = R(function() {\n return /* @__PURE__ */ f(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 160 160\",\n \"data-status\": \"done\",\n children: /* @__PURE__ */ f(\"path\", {\n d: \"M60 20v80H30l50 50 50-50h-30V20H60z\"\n })\n });\n}), ru = R(function() {\n return /* @__PURE__ */ f(\"div\", {\n className: \"chatBotImage\",\n \"data-testid\": \"chat-bot-icon\",\n children: /* @__PURE__ */ f(\"svg\", {\n \"data-name\": \"Layer 2\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 370 305\",\n children: /* @__PURE__ */ _(\"g\", {\n children: [/* @__PURE__ */ f(\"rect\", {\n className: \"svgColor3\",\n x: \"30\",\n y: \"65\",\n width: \"310\",\n height: \"205\",\n rx: \"57.83\",\n ry: \"57.83\"\n }), /* @__PURE__ */ f(\"rect\", {\n className: \"svgColor1\",\n x: \"65\",\n y: \"100\",\n width: \"240\",\n height: \"140\",\n rx: \"35.42\",\n ry: \"35.42\"\n }), /* @__PURE__ */ f(\"circle\", {\n className: \"svgColor2\",\n cx: \"130\",\n cy: \"170\",\n r: \"25\"\n }), /* @__PURE__ */ f(\"circle\", {\n className: \"svgColor2\",\n cx: \"230\",\n cy: \"170\",\n r: \"25\"\n }), /* @__PURE__ */ _(\"g\", {\n children: [/* @__PURE__ */ f(\"rect\", {\n className: \"svgColor3\",\n x: \"172\",\n y: \"48\",\n width: \"25\",\n height: \"20\"\n }), /* @__PURE__ */ f(\"circle\", {\n className: \"svgColor3\",\n cx: \"183.5\",\n cy: \"26.5\",\n r: \"26.5\"\n })]\n }), /* @__PURE__ */ f(\"path\", {\n className: \"svgColor3\",\n d: \"m150,270h-55c-.51,3.75-1.78,8.46-5,13.1-10.09,14.54-30.5,15.7-30,18.43.6,3.27,31.13,7.73,58.23-5.25,15.86-7.6,26.02-18.7,31.76-26.27Z\"\n }), /* @__PURE__ */ f(\"rect\", {\n className: \"svgColor3\",\n x: \"0\",\n y: \"125\",\n width: \"60\",\n height: \"85.65\",\n rx: \"18.65\",\n ry: \"18.65\"\n }), /* @__PURE__ */ f(\"rect\", {\n className: \"svgColor3\",\n x: \"310\",\n y: \"125\",\n width: \"60\",\n height: \"85.65\",\n rx: \"18.65\",\n ry: \"18.65\"\n })]\n })\n })\n });\n}), ha = R(function(t) {\n const {\n className: n\n } = t;\n return /* @__PURE__ */ f(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n className: n,\n \"data-testid\": \"chat-icon\",\n version: \"1.1\",\n id: \"Layer_1\",\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 240 240\",\n children: /* @__PURE__ */ _(\"g\", {\n children: [/* @__PURE__ */ f(\"path\", {\n d: \"M118.4,20C118.4,20,118.4,20,118.4,20C118.4,20,118.4,20,118.4,20L118.4,20z\"\n }), /* @__PURE__ */ f(\"path\", {\n d: \"M118.4,20C58.6,20,10,55.8,10,100c0,33.4,27.5,61.8,67,74c-4.3,24-23.6,46-23.6,46c31,0,69.4-15.4,87.4-40 c49.2-7.6,89.2-41.4,89.2-80C230,55.8,178.3,20,118.4,20z M95.2,189.7c0.1,0.1,0.1,0.2,0.2,0.3c-0.1,0.1-0.2,0.1-0.4,0.2 C95.1,190,95.1,189.9,95.2,189.7z M208.3,100.1c0-0.2,0-0.3,0-0.5c0,0.1,0,0.3,0,0.4C208.3,100,208.3,100.1,208.3,100.1z M208.2,97 c0,0.2,0,0.3,0,0.5C208.2,97.4,208.2,97.2,208.2,97z\"\n })]\n })\n });\n}), ga = R(function(t) {\n const {\n cssClass: n\n } = t;\n return /* @__PURE__ */ f(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 160 160\",\n className: n,\n children: /* @__PURE__ */ f(\"path\", {\n d: \"M100 79.7l40-40L119.7 20l-40 40-40-40L20 39.7l40 40-40 40L39.7 140l40-40 40 40 20.3-20.3z\"\n })\n });\n}), ou = R(function(t) {\n const {\n url: n,\n description: r\n } = t;\n return /* @__PURE__ */ f(\"div\", {\n className: \"organizationLogoBrandingContainer\",\n \"data-testid\": \"organization-logo\",\n children: /* @__PURE__ */ f(\"img\", {\n className: \"organizationLogoURL\",\n src: n,\n alt: r\n })\n });\n}), au = R(function(t) {\n const {\n strings: n\n } = t;\n return /* @__PURE__ */ _(\"div\", {\n className: \"epicBrandingContainer\",\n title: n.a11yDescription,\n \"data-testid\": \"epic-logo\",\n \"aria-label\": n.a11yDescription,\n role: \"heading\",\n \"aria-level\": 4,\n children: [/* @__PURE__ */ f(\"div\", {\n className: \"poweredByText\",\n children: n.poweredBy\n }), /* @__PURE__ */ f(\"svg\", {\n className: \"brandingSVG\",\n xmlns: \"http://www.w3.org/2000/svg\",\n id: \"Layer_2\",\n \"data-name\": \"Layer 2\",\n viewBox: \"0 0 360 115.22\",\n \"aria-hidden\": !0,\n children: /* @__PURE__ */ f(\"g\", {\n id: \"body\",\n children: /* @__PURE__ */ f(\"g\", {\n id: \"content\",\n children: /* @__PURE__ */ _(\"g\", {\n id: \"g2195\",\n children: [/* @__PURE__ */ f(\"polygon\", {\n id: \"polygon9\",\n points: \"222.86 0 196.53 0 193.16 15.89 219.48 15.89 222.86 0\",\n fill: \"#df004c\",\n strokeWidth: \"0px\"\n }), /* @__PURE__ */ f(\"path\", {\n id: \"path13\",\n d: \"m17.65,4.37L0,90.9h88.02l-5.17,24.32h26.32l6.47-30.42h.25c3.41,4.97,11.53,8.82,23.2,8.82,19.97,0,35.38-10.29,42.75-24.52l-4.62,21.8h26.32l5.15-24.22c.13,18.33,14.75,26.95,40.47,26.95,29.01,0,44.35-10.54,52.52-29.12h-27.85c-3.72,7.86-10.98,11.75-20.5,11.75-12.66,0-18.4-6.83-15.82-19,2.59-12.17,11.5-19,23.8-19h.92l.87.02.87.05.82.07.8.1.77.1.75.12.7.15.7.15.65.2.62.2.6.22.57.22.52.25.52.27.47.3.45.3.42.32.4.35.4.37.35.37.3.4.3.4.27.42.25.45.22.45.17.47.17.5.15.5.12.52.07.55.07.55h27.3c.89-19.71-15.11-26.77-39.32-26.77-25.06,0-44.04,9.04-52.02,27.27l5.22-24.55h-26.32l-4.85,22.8c-1.14-15.82-13.18-24.55-32.57-24.55-10.68,0-20.81,3.85-27.85,10.67h-.25l1.9-8.92h-25.57l-10.22,48.17h-58.5l2.8-15.1h52.22l3.9-18.37h-52.2l2.8-14.8h59.25l4.05-19.12H17.65Zm126.22,35.85c12.05,0,17.34,5.98,14.97,17.15l-.22,1.02-.27,1-.3.97-.35.95-.35.9-.4.87-.42.85-.45.82-.5.77-.5.75-.55.72-.6.67-.6.65-.62.62-.67.6-.67.55-.72.52-.75.5-.77.45-.8.42-.82.4-.87.35-.87.32-.92.3-.92.25-.97.22-.97.2-1.02.15-1.05.12-1.05.07-1.1.05-1.12.02c-12.3,0-17.32-6.69-15.1-17.12,2.22-10.43,10.11-17.15,22.4-17.15Z\",\n fill: \"#df004c\",\n strokeWidth: \"0px\"\n })]\n })\n })\n })\n })]\n });\n}), su = R(function(t) {\n const {\n imageURL: n,\n description: r,\n strings: o\n } = t;\n return /* @__PURE__ */ _(B, {\n children: [n !== Qn && n !== \"\" ? /* @__PURE__ */ f(ou, {\n url: n,\n description: r\n }) : /* @__PURE__ */ f(B, {}), /* @__PURE__ */ f(au, {\n strings: o\n })]\n });\n}), iu = R(function() {\n return /* @__PURE__ */ f(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 32 32\",\n children: /* @__PURE__ */ f(\"rect\", {\n x: \"5\",\n y: \"14.15\",\n width: \"22\",\n height: \"4.54\",\n rx: \"0.44\"\n })\n });\n}), Jr = R(function(t) {\n const {\n className: n\n } = t;\n return /* @__PURE__ */ f(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n className: n,\n \"data-testid\": \"notification-icon\",\n children: /* @__PURE__ */ f(\"circle\", {\n cx: \"12\",\n cy: \"12\",\n r: \"10\"\n })\n });\n}), cu = R(function() {\n return /* @__PURE__ */ f(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n id: \"_flat_gear\",\n viewBox: \"0 0 32 32\",\n children: /* @__PURE__ */ f(\"path\", {\n d: \"M16.73 26.52h-1.5a1.76 1.76 0 0 1-1.75-1.75v-.37c0-.59-.45-.82-.59-.88a.93.93 0 0 0-1.04.21l-.28.28a1.75 1.75 0 0 1-2.47 0l-1.06-1.06a1.75 1.75 0 0 1 0-2.47l.35-.35c.42-.42.26-.9.21-1.04-.06-.14-.29-.59-.88-.59h-.47a1.76 1.76 0 0 1-1.75-1.75v-1.5a1.76 1.76 0 0 1 1.75-1.75h.39c.59 0 .82-.45.88-.59a.93.93 0 0 0-.21-1.04l-.28-.28a1.74 1.74 0 0 1-.51-1.24 1.74 1.74 0 0 1 .51-1.24l1.06-1.06c.66-.66 1.82-.66 2.47 0l.3.3c.42.42.9.26 1.04.21.14-.06.59-.29.59-.88v-.45a1.76 1.76 0 0 1 1.75-1.75h1.5a1.76 1.76 0 0 1 1.75 1.75v.5c0 .59.45.82.59.88a.93.93 0 0 0 1.04-.21l.33-.33c.66-.66 1.82-.66 2.47 0l1.06 1.06a1.74 1.74 0 0 1 .51 1.24 1.74 1.74 0 0 1-.51 1.24l-.26.26c-.42.42-.26.9-.21 1.04.06.14.29.59.88.59h.39a1.76 1.76 0 0 1 1.75 1.75v1.5a1.76 1.76 0 0 1-1.75 1.75h-.48c-.59 0-.82.45-.88.59a.93.93 0 0 0 .21 1.04l.33.33a1.74 1.74 0 0 1 .51 1.24 1.74 1.74 0 0 1-.51 1.24L22.9 24c-.66.66-1.82.66-2.47 0l-.3-.31c-.42-.42-.9-.26-1.04-.21-.14.06-.59.29-.59.88v.41a1.76 1.76 0 0 1-1.75 1.75zm-4.22-4.57a2.44 2.44 0 0 1 .95.19c.93.39 1.51 1.25 1.51 2.27v.37c0 .14.11.25.25.25h1.5c.14 0 .25-.11.25-.25v-.41c0-1.01.58-1.88 1.51-2.27.94-.39 1.96-.18 2.67.53l.3.31c.1.09.26.1.35 0l1.06-1.06c.06-.06.07-.14.07-.18s0-.11-.07-.18l-.33-.33a2.41 2.41 0 0 1-.53-2.67c.39-.93 1.25-1.51 2.27-1.51h.48c.14 0 .25-.11.25-.25v-1.5c0-.14-.11-.25-.25-.25h-.39c-1.01 0-1.88-.58-2.27-1.51a2.41 2.41 0 0 1 .53-2.67l.26-.26c.1-.1.1-.26 0-.35l-1.06-1.06c-.12-.13-.23-.13-.35 0l-.33.33a2.41 2.41 0 0 1-2.67.53c-.93-.39-1.51-1.25-1.51-2.27v-.5c0-.14-.11-.25-.25-.25h-1.5c-.14 0-.25.11-.25.25v.45c0 1.01-.58 1.88-1.51 2.27-.94.39-1.96.18-2.67-.53l-.3-.3c-.13-.13-.23-.13-.35 0L9.07 10.2c-.1.1-.1.26 0 .35l.28.28c.71.72.92 1.74.53 2.67s-1.25 1.51-2.27 1.51h-.39c-.14 0-.25.11-.25.25v1.5c0 .14.11.25.25.25h.47c1.01 0 1.88.58 2.27 1.51a2.41 2.41 0 0 1-.53 2.67l-.35.35c-.1.1-.1.26 0 .35l1.06 1.06c.1.1.26.1.35 0l.28-.28c.48-.48 1.09-.72 1.72-.72zm3.49-1.7A4.26 4.26 0 0 1 11.75 16 4.26 4.26 0 0 1 16 11.75 4.26 4.26 0 0 1 20.25 16 4.26 4.26 0 0 1 16 20.25zm0-7a2.75 2.75 0 1 0 0 5.5 2.75 2.75 0 1 0 0-5.5z\"\n })\n });\n}), uu = R(function() {\n return /* @__PURE__ */ f(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n \"data-testid\": \"send-icon\",\n viewBox: \"0 0 32 32\",\n children: /* @__PURE__ */ f(\"path\", {\n d: \"M15.75 7.22c-1.38-.69-3.22.32-3 1.86l1 4.84L27.17 16l-13.38 2.07-1 4.84c-.32 1.65 1.62 2.55 3 1.86L30.54 17a1.14 1.14 0 0 0 0-1.95zm-5.83 5.66h-3a.43.43 0 0 1-.43-.43.43.43 0 0 1 .43-.45h3a.43.43 0 0 1 .43.43.44.44 0 0 1-.43.45zm0 6.86h-3a.43.43 0 0 1-.43-.43.43.43 0 0 1 .43-.43h3a.43.43 0 0 1 .43.43.44.44 0 0 1-.43.43zm0-3.43H2.34a.43.43 0 0 1-.43-.43.43.43 0 0 1 .43-.43h7.58a.43.43 0 0 1 .43.43.44.44 0 0 1-.43.43z\"\n })\n });\n}), lu = R(function({\n onRetry: t\n}) {\n const {\n theme: n\n } = Se(), r = \"verificationErrorIcon\" + (n === \"darkMode\" ? \" darkMode\" : \"\");\n return /* @__PURE__ */ f(\"svg\", {\n \"data-testid\": \"verification-error-icon\",\n xmlns: \"http://www.w3.org/2000/svg\",\n id: \"_Layer_\",\n \"data-name\": \"\",\n width: \"32\",\n height: \"32\",\n viewBox: \"0 0 32 32\",\n className: r,\n onClick: t,\n children: /* @__PURE__ */ _(\"g\", {\n children: [/* @__PURE__ */ f(\"path\", {\n d: \"M16,5A11,11,0,1,0,27,16,11,11,0,0,0,16,5Zm0,20.62A9.62,9.62,0,1,1,25.62,16,9.62,9.62,0,0,1,16,25.62Z\",\n className: r\n }), /* @__PURE__ */ f(\"path\", {\n d: \"M18.1,22.29a2.1,2.1,0,1,1-2.1-2.1A2.1,2.1,0,0,1,18.1,22.29Z\",\n className: r\n }), /* @__PURE__ */ f(\"path\", {\n d: \"M18.1,9.72a1.74,1.74,0,0,1-.08.5l-1,7.88H15l-1-7.88a2.84,2.84,0,0,1-.06-.5,2.1,2.1,0,0,1,4.2,0Z\",\n className: r\n })]\n })\n });\n}), du = R(function(t) {\n const {\n children: n,\n numberOfMessages: r,\n isChatOpen: o,\n isLastMessageFromSelf: a,\n shouldNotDisplayNewMessage: s,\n onScrolledToTheEnd: i,\n shouldLoadFromBottom: l,\n strings: c\n } = t, u = pe.useRef(null), d = pe.useRef(null), h = pe.useRef(null), y = x(() => {\n !d.current || d.current.scrollIntoView({\n block: \"end\",\n behavior: \"smooth\"\n });\n }, [d]), v = Hl(d.current, u.current, h.current, a, r, o, i, y), p = Me(() => Kn(), []), {\n theme: g\n } = Se(), E = g === \"darkMode\" ? \"darkMode\" : \"\", b = (l === !0 ? \"shouldLoadFromBottom\" : \"shouldLoadFromTop\") + (p ? \" isIos\" : \"\"), T = \"chatButton neutral commandprimary floating newMessageButton\" + (g === \"darkMode\" ? \" darkMode\" : \"\");\n return /* @__PURE__ */ _(B, {\n children: [/* @__PURE__ */ f(\"div\", {\n id: \"ChatScrollingSection\",\n ref: u,\n className: E,\n children: /* @__PURE__ */ _(\"div\", {\n id: \"ChatScrollingInnerContent\",\n ref: d,\n className: b,\n children: [n, /* @__PURE__ */ f(\"div\", {\n ref: h,\n className: \"endOfChatMessages\"\n })]\n })\n }), v && !s && /* @__PURE__ */ f(\"div\", {\n className: \"newMessageButtonContainer\",\n children: /* @__PURE__ */ _(\"button\", {\n \"aria-disabled\": !1,\n \"aria-pressed\": !1,\n className: T,\n onClick: y,\n onTouchStart: y,\n onTouchEnd: y,\n children: [/* @__PURE__ */ f(nu, {}), c.newMessage]\n })\n })]\n });\n}), fu = R(function(t) {\n const {\n children: n,\n displayStyle: r\n } = t, o = A((a) => a.chatApp.isMinimized);\n return o || qi(), /* @__PURE__ */ f(\"div\", {\n id: \"ExpandedChat\",\n className: \"App\" + (o ? \" hidden\" : \" flex\") + \" \" + r,\n \"data-testid\": \"expanded-chat\",\n children: n\n });\n}), hu = {\n immediate: 0,\n puny: 100,\n short: 500,\n medium: 1500,\n long: 3e3\n}, gu = {\n short: 2e3,\n medium: 5e3\n}, ye = R((e) => {\n const {\n children: t,\n delay: n = \"short\",\n duration: r = \"indefinite\",\n text: o,\n type: a = \"status\",\n roleOverride: s = a,\n hide: i = !1,\n id: l,\n isLabel: c,\n className: u\n } = e, d = Me(() => o ? /* @__PURE__ */ f(\"span\", {\n children: o\n }) : t, [o, t]), [h, y] = ie(n === \"immediate\" ? d : void 0), v = G(), p = G();\n Y(() => {\n const b = () => {\n y(d), r !== \"indefinite\" && (p.current = setTimeout(() => y(void 0), gu[r]));\n };\n return t || o ? n === \"immediate\" ? b() : v.current = setTimeout(b, hu[n]) : y(void 0), () => {\n v.current && clearTimeout(v.current), p.current && clearTimeout(p.current);\n };\n }, [n, r, o, t, d]);\n let g = \"\";\n return i && (g = \"clearlabel \"), u && (g += u), /* @__PURE__ */ f(\"div\", {\n id: l,\n role: c ? void 0 : s !== a ? s : a,\n \"aria-live\": c ? void 0 : a === \"status\" ? \"polite\" : \"assertive\",\n className: g,\n \"data-testid\": \"assistive-announcement\",\n children: h\n });\n}), mu = R(function() {\n const t = A((i) => i.chatApp.chatStage), n = A((i) => i.chatApp.isLoadingBotHistory);\n return /* @__PURE__ */ f(\"div\", {\n className: \"loadingChatDataMessage\" + (t === \"loadingChatData\" || n && (t === \"awaitingAgent\" || t === \"chat\") ? \"\" : \" hidden\"),\n \"data-testid\": \"loading-chat-data\",\n children: /* @__PURE__ */ f(ye, {\n type: \"status\",\n delay: \"immediate\",\n children: /* @__PURE__ */ f(B, {\n children: \"Checking for updates\"\n })\n })\n });\n});\nfunction pu(e) {\n const { priority: t } = e, n = !!t && t !== \"none\", { tone: r = n ? \"neutral\" : void 0 } = e;\n return [t, r, n];\n}\nfunction yu(e) {\n const t = e.querySelectorAll(\"a,input,textarea,button\"), n = [];\n return t.forEach((r) => {\n r instanceof HTMLElement && !r.hasAttribute(\"disabled\") && (r.setAttribute(\"disabled\", \"\"), n.push(r));\n }), n;\n}\nfunction vu(e) {\n return e.nodeName.toUpperCase() === \"A\";\n}\nfunction Su(e) {\n return e instanceof Element;\n}\nfunction bu(e) {\n return e instanceof HTMLElement;\n}\nfunction Eu(e) {\n return e.nodeName.toUpperCase() === \"BUTTON\";\n}\nfunction wu(e) {\n return \"disabled\" in e;\n}\nfunction Tu(e) {\n return e.nodeName.toUpperCase() === \"INPUT\";\n}\nfunction Mu(e) {\n return e.nodeName.toUpperCase() === \"SELECT\" || e.nodeName.toUpperCase() === \"TEXTAREA\";\n}\nfunction Cu(e) {\n const t = window.getComputedStyle(e).overflowY, n = t.indexOf(\"auto\") !== -1 || t.indexOf(\"scroll\") !== -1 || t.indexOf(\"overlay\") !== -1;\n return e.nodeName.toUpperCase() === \"DIV\" && n && e.scrollHeight > e.clientHeight;\n}\nconst Iu = (e, t) => {\n if (Su(e) && bu(e)) {\n if (getComputedStyle(e).display === \"none\")\n return !1;\n if (e.tabIndex > 0 || e.getAttribute(\"tabIndex\") === \"0\")\n return !0;\n if (wu(e) && e.disabled)\n return !1;\n if (vu(e))\n return !!e.href;\n if (Tu(e))\n return e.type !== \"hidden\" && e.type !== \"file\";\n if (Eu(e) || Mu(e) || t && Cu(e))\n return !0;\n }\n return !1;\n}, Ln = (e, t = !1, n = \"first\") => e ? ma(e, t, n) : null;\nfunction ma(e, t, n) {\n if (!e)\n return null;\n if (Iu(e, t))\n return e;\n const [r, o, a] = n === \"last\" ? [e.childNodes.length, -1, -1] : [0, e.childNodes.length + 1, 1];\n for (let s = r; s !== o; s += a) {\n const i = ma(\n e.childNodes[s],\n t,\n n\n );\n if (i)\n return i;\n }\n return null;\n}\nconst Au = (e) => {\n e && typeof e.focus == \"function\" && e.focus();\n}, Pn = R(function(t) {\n const {\n shouldFocus: n,\n text: r,\n accessibleDescription: o,\n cssClasses: a,\n disabled: s = !1,\n onClick: i\n } = t, [l, c, u] = pu(t), [d, h, y, v] = Zc(t), p = \"chatButton _Command actionable command\" + (u ? l + \" \" + c : +a), g = G(null);\n return Y(() => {\n n && g.current && Au(g.current);\n }, [n, g]), r ? i ? /* @__PURE__ */ f(\"button\", {\n className: p,\n \"aria-label\": o,\n \"aria-disabled\": s ? !0 : void 0,\n onBlur: h,\n onClick: s ? () => {\n } : i,\n onFocus: d,\n onMouseEnter: y,\n onMouseLeave: v,\n ref: g,\n children: r\n }) : /* @__PURE__ */ f(B, {}) : /* @__PURE__ */ f(B, {});\n}), pa = R(function(t) {\n const {\n children: n,\n cssClasses: r\n } = t, o = \"_ActionGroup \" + (r || \"\");\n return n && pe.Children.count(n) > 0 ? /* @__PURE__ */ f(\"div\", {\n className: o,\n \"data-testid\": \"action-group\",\n children: pe.Children.map(n, (a) => a)\n }) : null;\n}), Ou = R(function(t) {\n const {\n announce: n,\n commands: r,\n headerText: o,\n defaultCallback: a,\n text: s,\n hideAssistiveAnnouncement: i,\n detailElement: l,\n headingLabel: c,\n closeLabel: u\n } = t, h = {\n forwardedRef: G()\n };\n return /* @__PURE__ */ f(\"span\", {\n className: \"Banner\",\n \"data-testid\": \"banner-parent\",\n children: /* @__PURE__ */ _(\"div\", {\n className: \"fullWidth\",\n children: [/* @__PURE__ */ _(\"span\", {\n className: \"bannerHeading\",\n children: [/* @__PURE__ */ f(\"span\", {\n \"aria-hidden\": n,\n children: o\n }), n ? /* @__PURE__ */ _(B, {\n children: [/* @__PURE__ */ f(ye, {\n type: \"alert\",\n text: c === void 0 || c === \"\" ? o : c,\n hide: i\n }), /* @__PURE__ */ f(ye, {\n type: \"alert\",\n text: s,\n hide: i\n })]\n }) : void 0, /* @__PURE__ */ f(\"button\", {\n className: \"topRightClose\",\n onClick: a,\n title: u,\n children: /* @__PURE__ */ f(ga, {\n cssClass: \"topRightCloseSVG\"\n })\n })]\n }), l && /* @__PURE__ */ f(B, {\n children: l\n }), /* @__PURE__ */ f(\"span\", {\n className: \"bannerText\",\n \"aria-hidden\": n,\n children: /* @__PURE__ */ f(\"span\", {\n children: s\n })\n }), r ? /* @__PURE__ */ f(\"div\", {\n className: \"bannerActions\",\n children: /* @__PURE__ */ f(pa, {\n ...h,\n children: r\n })\n }) : void 0]\n })\n });\n}), _u = R(function(t) {\n var c;\n const {\n cssClasses: n,\n children: r,\n disabled: o,\n hideFromAssistiveTech: a\n } = t, s = G(null);\n o && (s.current = (c = s.current) != null ? c : document.activeElement);\n const i = G(null), l = G([]);\n return Y(() => {\n o && i.current ? l.current = yu(i.current) : (l.current.forEach((u) => u.removeAttribute(\"disabled\")), s.current && (s.current.focus(), s.current = null));\n }, [o]), r ? /* @__PURE__ */ f(\"div\", {\n ref: i,\n \"aria-hidden\": a,\n className: n,\n \"data-testid\": \"disableable-segment\",\n children: r\n }) : /* @__PURE__ */ f(B, {});\n}), Nu = R(function(t) {\n const {\n cssClasses: n,\n children: r,\n hideFromAssistiveTech: o,\n elementId: a\n } = t;\n return r ? /* @__PURE__ */ f(\"div\", {\n id: a,\n \"aria-hidden\": o,\n className: n,\n tabIndex: -1,\n \"data-testid\": \"focusable-segment\",\n children: r\n }) : /* @__PURE__ */ f(B, {});\n}), Ru = R(function(t) {\n const {\n children: n,\n overlayContents: r,\n showOverlay: o,\n elementId: a\n } = t;\n return /* @__PURE__ */ _(B, {\n children: [o ? /* @__PURE__ */ _(B, {\n children: [/* @__PURE__ */ f(\"div\", {\n className: \"TransparentOverlayBackground\"\n }), /* @__PURE__ */ f(Nu, {\n cssClasses: \"TransparentOverlay show\",\n elementId: a,\n children: r\n })]\n }) : null, /* @__PURE__ */ f(_u, {\n cssClasses: \"childrenWrapper\" + (o ? \" blur\" : \"\"),\n disabled: o,\n hideFromAssistiveTech: o,\n children: n\n })]\n });\n}), ku = R(function(t) {\n const {\n children: n,\n dismissOverlay: r,\n show: o,\n text: a,\n heading: s,\n onClose: i,\n offerCancel: l,\n onCancel: c,\n updateOverlayState: u,\n buttonTextOverride: d,\n elementId: h,\n detailElement: y\n } = t, {\n acknowledgeText: v,\n cancelText: p\n } = d != null ? d : {\n acknowledgeText: \"\",\n cancelText: \"\"\n }, g = x(() => {\n i == null || i(\"acknowledge\"), r(), u == null || u();\n }, [r, i, u]), E = x(() => {\n c == null || c(\"cancel\"), r(), u == null || u();\n }, [r, c, u]);\n return /* @__PURE__ */ f(Ru, {\n elementId: h,\n overlayContents: /* @__PURE__ */ f(Ou, {\n announce: !0,\n commands: /* @__PURE__ */ _(B, {\n children: [l ? /* @__PURE__ */ f(Pn, {\n shouldFocus: !0,\n cssClasses: \"btnCancel\",\n onClick: E,\n priority: \"primary\",\n tone: \"positive\",\n text: p !== \"\" ? p : \"Cancel\"\n }) : void 0, /* @__PURE__ */ f(Pn, {\n shouldFocus: !l,\n cssClasses: \"btnAcknowledge\",\n onClick: g,\n priority: \"secondary\",\n tone: l ? \"negative\" : \"neutral\",\n text: v !== \"\" ? v : \"OK\"\n })]\n }),\n defaultCallback: l ? E : g,\n text: a,\n headerText: s,\n hideAssistiveAnnouncement: !0,\n detailElement: y,\n closeLabel: l ? p !== \"\" ? p : \"Cancel\" : v !== \"\" ? v : \"OK\"\n }),\n showOverlay: o,\n children: n\n });\n}), Du = R(function(t) {\n const {\n charactersUsed: n,\n charactersAllowed: r,\n characterCounterElementId: o,\n strings: a\n } = t, s = jo, i = n > r, {\n theme: l\n } = Se(), c = a.overLimit.replace(\"{0}\", (n - r).toString()), u = a.underLimit.replace(\"{0}\", (r - n).toString()), d = i ? c : u, h = (i ? \"overLimit\" : \"subtleText\") + (l === \"darkMode\" ? \" darkMode\" : \"\");\n return n <= s ? /* @__PURE__ */ f(B, {}) : /* @__PURE__ */ f(\"div\", {\n id: o,\n children: /* @__PURE__ */ f(\"span\", {\n className: h,\n \"data-testid\": \"character-counter\",\n \"aria-hidden\": !i,\n children: d\n })\n });\n}), xu = R(function(t) {\n const {\n errorsToDisplayArray: n,\n elementId: r\n } = t, {\n theme: o\n } = Se();\n return /* @__PURE__ */ f(\"div\", {\n id: r,\n children: /* @__PURE__ */ f(\"dl\", {\n children: n.map((a, s) => /* @__PURE__ */ f(\"dt\", {\n className: o,\n \"data-testid\": \"error-dt\",\n role: \"alert\",\n children: a\n }, s))\n })\n });\n});\nfunction Lu(e, t, n) {\n const r = [];\n return t && r.push(n.throttled), e && r.push(n.blankMessage), r;\n}\nconst Pu = R(function(t) {\n const {\n elementId: n,\n showEmptyMessageError: r,\n isThrottled: o,\n strings: a\n } = t, s = Lu(r, o, a);\n return /* @__PURE__ */ f(xu, {\n elementId: n,\n errorsToDisplayArray: s\n });\n}), Bu = R(function(t) {\n const {\n dynamicString: n,\n placeholderString: r\n } = t;\n return /* @__PURE__ */ f(\"div\", {\n className: \"MessageInputScaling\",\n \"aria-hidden\": !0,\n children: /* @__PURE__ */ f(\"span\", {\n children: n === \"\" ? r : n\n })\n });\n}), Uu = R((e) => {\n const {\n onEnter: t,\n onChange: n,\n message: r,\n errorElementId: o,\n characterCounterElementId: a,\n setMsg: s,\n setShowEmptyMsgError: i,\n placeHolderString: l\n } = e, {\n theme: c\n } = Se(), u = x((p) => {\n p.key === \"Enter\" && p.shiftKey === !1 && !Pe() && (p.preventDefault(), t());\n }, [t]), d = x((p) => {\n i(!1), s(n ? n(p) : p.target.value);\n }, [n, s, i]), h = x(() => {\n !Pe() || window.scrollTo(0, 0);\n }, []), y = \"messageInputTextArea\" + (c === \"darkMode\" ? \" darkMode\" : \"\");\n return /* @__PURE__ */ f(\"div\", {\n className: y,\n children: /* @__PURE__ */ f(\"textarea\", {\n id: \"MessageInputTextArea\",\n className: c === \"darkMode\" ? \"darkMode\" : \"\",\n \"aria-describedby\": o + \" \" + a,\n onKeyDown: u,\n onChange: d,\n onBlur: h,\n value: r,\n placeholder: l,\n \"data-testid\": \"message-input\",\n spellCheck: \"true\",\n autoComplete: \"true\"\n })\n });\n}), Fu = R(function(t) {\n const {\n newMessage: n,\n setMsg: r,\n characterCounterElementId: o,\n errorElementId: a,\n onNewMessageTextChange: s,\n onUserTrySendNewMessage: i,\n isNewMessageValidToSend: l,\n setShowEmptyMsgError: c,\n strings: u\n } = t, d = x(() => {\n if (n.trim() === \"\") {\n c(!0);\n return;\n }\n c(!1), i(n, l) && r(\"\");\n }, [n, c, i, l, r]), h = (b) => {\n d();\n }, y = (b) => {\n b == null || b.preventDefault();\n }, v = (b) => {\n b == null || b.preventDefault(), d();\n }, {\n theme: p\n } = Se(), g = \"textContainer\" + (p === \"darkMode\" ? \" darkMode\" : \"\"), E = \"sendMessageButton\" + (p === \"darkMode\" ? \" darkMode\" : \"\");\n return /* @__PURE__ */ _(\"div\", {\n id: \"MessageInteractiveContent\",\n children: [/* @__PURE__ */ _(\"div\", {\n className: g,\n children: [/* @__PURE__ */ f(Bu, {\n dynamicString: n,\n placeholderString: u.placeholder\n }), /* @__PURE__ */ f(Uu, {\n characterCounterElementId: o,\n errorElementId: a,\n onChange: s,\n onEnter: d,\n message: n,\n setMsg: r,\n setShowEmptyMsgError: c,\n placeHolderString: u.placeholder\n })]\n }), /* @__PURE__ */ _(\"button\", {\n id: \"SendMessageButton\",\n onClick: h,\n onMouseDown: y,\n onTouchEnd: v,\n \"aria-disabled\": !l,\n \"aria-describedby\": a,\n className: E,\n disabled: !l,\n children: [/* @__PURE__ */ f(\"p\", {\n children: u.send\n }), /* @__PURE__ */ f(uu, {})]\n })]\n });\n}), ju = R(function(t) {\n const {\n messageCharacterLimit: n,\n onUserTrySendNewMessage: r,\n onNewMessageTextChange: o,\n validateMessage: a,\n shouldSendBeEnabled: s,\n isThrottled: i,\n strings: l\n } = t, [c, u, d] = l, [h, y] = ie(\"\"), {\n theme: v\n } = Se(), [p, g] = ie(!1), E = Me(() => a(h), [h, a]), b = \"MessageInputError\", T = \"CharacterCounter\", w = \"messageComposerContainer\" + (v === \"darkMode\" ? \" darkMode\" : \"\"), m = (h.length > jo ? \"messageEntryWithLessPadding\" : \"messageEntry\") + (v === \"darkMode\" ? \" darkMode\" : \"\");\n return /* @__PURE__ */ f(\"div\", {\n className: w,\n \"data-testid\": \"message-composer-container\",\n children: /* @__PURE__ */ _(\"div\", {\n className: m,\n children: [/* @__PURE__ */ f(Pu, {\n elementId: b,\n showEmptyMessageError: p,\n isThrottled: i != null ? i : !1,\n strings: c\n }), /* @__PURE__ */ f(Du, {\n characterCounterElementId: T,\n charactersAllowed: n,\n charactersUsed: h.length,\n strings: u\n }), /* @__PURE__ */ f(Fu, {\n newMessage: h,\n setMsg: y,\n characterCounterElementId: T,\n errorElementId: b,\n onNewMessageTextChange: o,\n onUserTrySendNewMessage: r,\n isNewMessageValidToSend: E && s,\n setShowEmptyMsgError: g,\n strings: d\n })]\n })\n });\n});\nfunction Vu(e, t) {\n var r;\n let n = \"\";\n switch (e.length) {\n case 0:\n break;\n case 1: {\n const o = e[0];\n if (o.id === ve)\n n = (r = t.chatBot) != null ? r : \"\";\n else {\n let a = o.displayName;\n o.displayName.length > zt && (a = o.displayName.substring(0, zt) + \"...\"), n = t.typing.replace(\"{0}\", a);\n }\n break;\n }\n default:\n n = t.multiple;\n }\n return n;\n}\nconst Hu = R(function(t) {\n const {\n usersTypingDisplayString: n\n } = t, {\n theme: r\n } = Se(), o = \"typingIndicator\" + (r === \"darkMode\" ? \" darkMode\" : \"\"), a = \"typingIndicatorText\" + (r === \"darkMode\" ? \" darkMode\" : \"\");\n return /* @__PURE__ */ f(\"table\", {\n children: /* @__PURE__ */ f(\"tbody\", {\n children: /* @__PURE__ */ _(\"tr\", {\n children: [/* @__PURE__ */ f(\"td\", {\n children: /* @__PURE__ */ _(\"div\", {\n className: o,\n \"aria-hidden\": !0,\n \"data-testid\": \"typing-indicator\",\n children: [/* @__PURE__ */ f(\"span\", {}), /* @__PURE__ */ f(\"span\", {}), /* @__PURE__ */ f(\"span\", {})]\n })\n }), /* @__PURE__ */ f(\"td\", {\n children: /* @__PURE__ */ f(\"span\", {\n \"aria-hidden\": !0,\n className: a,\n children: n\n })\n })]\n })\n })\n });\n}), qu = R(function(t) {\n const {\n usersTyping: n,\n strings: r\n } = t, o = Vu(n, r);\n return /* @__PURE__ */ _(\"div\", {\n className: \"CurrentlyTypingUsers\",\n \"data-testid\": \"currently-typing-users\",\n children: [/* @__PURE__ */ f(ye, {\n text: o,\n type: \"status\",\n hide: !0\n }), n.length > 0 ? /* @__PURE__ */ f(Hu, {\n usersTypingDisplayString: o\n }) : null]\n });\n});\nfunction ya(e, t, n) {\n var r;\n return e || (t === \"self\" ? \"\" : t === \"bot\" && (r = n.bot) != null ? r : \"\");\n}\nconst zu = R(function(t) {\n let {\n showName: n,\n senderName: r,\n showTime: o,\n displayTime: a\n } = t;\n (r == null ? void 0 : r.length) !== void 0 && r.length > zt && (r = r.substring(0, zt) + \"...\");\n const {\n theme: s\n } = Se(), i = \"senderName\" + (s === \"darkMode\" ? \" darkMode\" : \"\"), l = \"sentTime\" + (s === \"darkMode\" ? \" darkMode\" : \"\");\n return n || o ? /* @__PURE__ */ _(\"span\", {\n \"aria-hidden\": !0,\n children: [n && /* @__PURE__ */ f(\"div\", {\n className: i,\n children: r\n }), o && /* @__PURE__ */ f(\"span\", {\n className: l,\n children: a\n })]\n }) : null;\n}), Wu = R(function(t) {\n const {\n messageType: n,\n showName: r,\n senderName: o,\n showTime: a,\n displayTime: s,\n a11ySummary: i,\n strings: l\n } = t, c = ya(o != null ? o : \"\", n, l), {\n theme: u\n } = Se(), d = \"senderInfo \" + u;\n return !r && !a ? /* @__PURE__ */ f(B, {}) : /* @__PURE__ */ f(B, {\n children: /* @__PURE__ */ _(\"div\", {\n className: d,\n \"data-testid\": \"sender-info\",\n children: [i && /* @__PURE__ */ f(ye, {\n type: \"status\",\n text: i,\n delay: \"short\",\n hide: !0\n }), /* @__PURE__ */ f(zu, {\n showName: r,\n senderName: c,\n showTime: a,\n displayTime: s\n })]\n })\n });\n}), nr = R(function(t) {\n const {\n messageType: n,\n horizontalAlignment: r,\n children: o,\n showName: a,\n senderName: s,\n showTime: i,\n displayTime: l,\n a11ySummary: c,\n strings: u\n } = t;\n return /* @__PURE__ */ _(\"div\", {\n className: \"itemInScrollingSection \" + r,\n \"data-testid\": \"item-in-scrolling-section-container\",\n children: [/* @__PURE__ */ f(Wu, {\n messageType: n,\n showName: a,\n senderName: s,\n showTime: i,\n displayTime: l,\n a11ySummary: c,\n strings: u\n }), /* @__PURE__ */ f(\"div\", {\n className: \"inlineMessageContent\",\n children: o\n })]\n });\n});\nfunction $u(e, t, n) {\n return t + (n ? \" \" + e.displayTime : \"\");\n}\nfunction Gu(e, t) {\n let n = !1;\n return (t === void 0 || e - t > 6e4) && (n = !0), n;\n}\nfunction Yu(e) {\n return e === \"system\" ? \"middle\" : e === \"self\" ? \"right\" : \"left\";\n}\nfunction Ku(e, t, n) {\n return !t && !n ? \"single\" : t && t.senderId !== e.senderId || !t ? !n || n && n.senderId !== e.senderId ? \"single\" : \"group-first\" : t && t.senderId === e.senderId && n && n.senderId === e.senderId ? \"group-middle\" : \"group-last\";\n}\nfunction Qu(e, t, n, r, o) {\n var s, i, l, c;\n let a = \"\";\n switch (e) {\n case \"otherParticipant\": {\n if (!n) {\n a = r.unknown;\n break;\n }\n a = (s = n[t]) == null ? void 0 : s.displayName;\n break;\n }\n case \"self\": {\n a = r.self;\n break;\n }\n case \"system\": {\n a = r.system, o && (a = (l = (i = n == null ? void 0 : n[o]) == null ? void 0 : i.displayName) != null ? l : \"\"), a = a || r.system;\n break;\n }\n case \"bot\": {\n a = (c = r.bot) != null ? c : \"\";\n break;\n }\n }\n return a || (a = r.unknown), a;\n}\nfunction Ju(e, t, n) {\n return t === \"system\" || t === \"self\" ? !1 : !n || n.senderId !== e;\n}\nfunction va(e, t, n, r, o) {\n var p, g;\n const { senderId: a, sentDateTime: s } = e;\n let i;\n e.messageType !== void 0 ? i = e.messageType : e.isMe !== void 0 ? i = e.isMe ? \"self\" : \"bot\" : i = \"system\";\n const l = Yu(i), c = Ju(a, i, t), u = Gu(s, t == null ? void 0 : t.sentDateTime), d = Qu(i, a, r, o, e == null ? void 0 : e.subjectId), h = $u(e, d, u), y = Ku(e, t, n), v = (g = (p = r == null ? void 0 : r[a]) == null ? void 0 : p.color) != null ? g : 0;\n return [l, c, u, d, h, y, v];\n}\nfunction Xu(e, t) {\n if (!t)\n return e;\n const [n, r] = e.split(\" \");\n let [o, a] = n.split(\":\");\n r === \"PM\" && o !== \"12\" ? o = \"\" + (parseInt(o, 10) + 12) : r === \"AM\" && o === \"12\" && (o = \"00\"), o.length === 1 && (o = \"0\" + o);\n const s = `1970-01-01T${o}:${a}:00`, i = { hour: \"numeric\", minute: \"numeric\" };\n return Intl.DateTimeFormat(t, i).format(new Date(s));\n}\nfunction Sa(e) {\n return e ? \"allowed\" : \"disabled\";\n}\nconst Zu = R(function() {\n const t = \"1.1rem\";\n return /* @__PURE__ */ f(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n id: \"_Layer_\",\n width: t,\n height: t,\n viewBox: \"0 0 32 32\",\n children: /* @__PURE__ */ _(\"g\", {\n children: [/* @__PURE__ */ f(\"path\", {\n d: \"M23.9,9.07A10,10,0,0,0,16,5,10.53,10.53,0,0,0,5.76,14.52H8.48A7.82,7.82,0,0,1,16,7.72a7.31,7.31,0,0,1,6.14,3.51l-2.74,3.29h6.8V6.36Z\"\n }), /* @__PURE__ */ f(\"path\", {\n d: \"M16,24a7.3,7.3,0,0,1-6.13-3.51l2.74-3.29H5.76v8.16L8,22.68A9.94,9.94,0,0,0,16,26.75a10.53,10.53,0,0,0,10.2-9.52H23.43A7.82,7.82,0,0,1,16,24Z\"\n })]\n })\n });\n}), el = R(function(t) {\n const {\n onRetry: n,\n strings: r,\n shouldShowRetryIcon: o\n } = t, a = G(null);\n return Y(() => {\n a && a.current && a.current.focus();\n }, [a]), /* @__PURE__ */ f(B, {\n children: /* @__PURE__ */ _(\"button\", {\n className: \"chatButton link resendButton\",\n onClick: n,\n ref: a,\n children: [o && /* @__PURE__ */ f(Zu, {}), /* @__PURE__ */ f(\"p\", {\n children: r.retryButtonText\n })]\n })\n });\n}), ba = R(function(t) {\n const {\n messageDeliveryStatus: n,\n isMostRecentUserMessage: r,\n retryStatus: o,\n onRetry: a,\n strings: s,\n shouldShowRetryIcon: i\n } = t, {\n theme: l\n } = Se();\n if (n === \"sent\" && !r)\n return /* @__PURE__ */ f(\"div\", {\n className: \"sendingStateContainer\"\n });\n if (!n)\n return /* @__PURE__ */ f(B, {});\n let c = null;\n const u = \"sendingStatusMessage\" + (l === \"darkMode\" ? \" darkMode\" : \" lightMode\");\n switch (n) {\n case \"sent\": {\n c = /* @__PURE__ */ f(\"div\", {\n className: u,\n children: /* @__PURE__ */ f(\"p\", {\n children: s.sent\n })\n });\n break;\n }\n case \"sending\": {\n c = /* @__PURE__ */ f(\"div\", {\n className: u,\n children: /* @__PURE__ */ f(\"p\", {\n children: s.sending\n })\n });\n break;\n }\n case \"failed\": {\n if (o === \"disabled\") {\n c = /* @__PURE__ */ f(B, {});\n break;\n }\n const h = \"failToSend\" + (l === \"darkMode\" ? \" darkMode\" : \" lightMode\");\n c = /* @__PURE__ */ f(\"div\", {\n className: \"sendingStatusMessage\",\n children: /* @__PURE__ */ f(\"span\", {\n className: h,\n children: /* @__PURE__ */ f(el, {\n strings: s,\n shouldShowRetryIcon: i,\n onRetry: a\n })\n })\n });\n break;\n }\n }\n return /* @__PURE__ */ _(B, {\n children: [n !== \"failed\" && /* @__PURE__ */ f(ye, {\n delay: \"puny\",\n type: \"alert\",\n roleOverride: \"status\",\n className: \"textNoDisp\",\n children: c\n }), /* @__PURE__ */ f(\"div\", {\n className: \"sendingStateContainer\",\n \"aria-hidden\": !0,\n children: c\n })]\n });\n});\nfunction tl(e) {\n return e ? (e = e.trim().substring(1, e.length - 1), e !== \"_self\" && (e = \"_blank\"), e) : \"_blank\";\n}\nfunction nl(e, t) {\n return e && e.replace(vc, (n, r, o, a, s) => r ? (s = t ? \"_blank\" : tl(s), `${o}`) : `${n}`);\n}\nfunction rl(e) {\n if (e !== void 0 && e.length > 0) {\n const t = e.codePointAt(0), n = e.charAt(0);\n return t !== void 0 && n !== void 0 && n === String.fromCodePoint(t) ? String.fromCodePoint(t) : \"\\uFFFD\";\n }\n return \"U\";\n}\nconst ol = R(function(t) {\n const {\n participantName: n,\n userIconColor: r\n } = t, o = rl(n), s = \"userIconColor\" + (r === void 0 ? 0 : r % 15);\n return /* @__PURE__ */ f(\"span\", {\n \"aria-hidden\": !0,\n className: \"participantInitial \" + s,\n \"data-testid\": \"participant-initial\",\n children: o\n });\n}), al = R(function(t) {\n const {\n senderName: n,\n messageType: r,\n userIconColor: o,\n strings: a\n } = t, s = ya(n != null ? n : \"\", r, a);\n return s ? /* @__PURE__ */ f(B, {\n children: r === \"bot\" ? /* @__PURE__ */ f(ru, {}) : /* @__PURE__ */ f(ol, {\n participantName: s,\n userIconColor: o\n })\n }) : /* @__PURE__ */ f(B, {});\n}), Ea = R(function(t) {\n const {\n messageBody: n,\n isMe: r,\n senderName: o,\n userIconColor: a,\n messageType: s,\n messagePlacement: i,\n hasMetadataAbove: l,\n shouldRenderAllLinks: c,\n shouldRenderSenderIcon: u,\n strings: d,\n shouldForceLinksOpenInNewTab: h,\n shouldBeTabbable: y,\n shouldRenderRetryIcon: v,\n onRetry: p,\n shouldOverrideRenderNoLinks: g\n } = t, {\n theme: E\n } = Se(), b = (r ? \"self\" : \"otherParticipant\") + (E === \"darkMode\" ? \" darkMode\" : \" lightMode\") + (r && v ? \" includeRetryIcon\" : \"\") + (i === \"single\" || i === \"group-first\" ? \" firstMessage\" : \"\"), T = l ? \"hasMetadataAbove\" : \"\";\n let w = !1;\n g || (w = (c != null ? c : !1) || !r);\n const m = w ? nl(n, h) : n, I = m !== n;\n return /* @__PURE__ */ _(\"div\", {\n className: \"interactionMessageContainer\",\n children: [!r && u && /* @__PURE__ */ f(\"div\", {\n className: \"interactionMessageIcon\",\n children: /* @__PURE__ */ f(al, {\n messageType: s,\n senderName: o,\n userIconColor: a,\n strings: d\n })\n }), /* @__PURE__ */ f(\"div\", {\n className: \"fullWidth\",\n tabIndex: y ? 0 : void 0,\n children: /* @__PURE__ */ _(\"div\", {\n className: b,\n \"data-testid\": \"participant-message\",\n role: \"listitem\",\n children: [/* @__PURE__ */ f(\"span\", {\n className: \"messageBodyContainer \" + b + \" \" + i + \" \" + T,\n children: I ? /* @__PURE__ */ f(\"span\", {\n className: \"messageBody hasLink\",\n dangerouslySetInnerHTML: {\n __html: m\n },\n \"data-testid\": \"html-message-body\"\n }) : /* @__PURE__ */ f(\"span\", {\n className: \"messageBody\",\n \"data-testid\": \"plain-message-body\",\n children: n\n })\n }), r && v && /* @__PURE__ */ f(lu, {\n onRetry: p,\n \"aria-hidden\": !0\n })]\n })\n })]\n });\n});\nfunction sl(e, t) {\n let n = \"\";\n switch (e.systemMessageType) {\n case \"endChat\": {\n n = \"The chat session has ended. Thank you for contacting us.\";\n break;\n }\n case \"placeInQueue\": {\n n = e.messageBody;\n break;\n }\n case \"connectingToAgent\": {\n n = \"You are now being connected to a representative.\";\n break;\n }\n case \"connected\": {\n t !== \"\" && (n = t + \" has joined the chat.\");\n break;\n }\n case \"disconnected\": {\n t !== \"\" && (n = t + \" has left the chat.\");\n break;\n }\n }\n return n;\n}\nconst il = R(function(t) {\n const {\n displayText: n\n } = t;\n return /* @__PURE__ */ _(\"div\", {\n \"data-testid\": \"system-message\",\n className: \"System\",\n children: [n, /* @__PURE__ */ f(ye, {\n text: n,\n hide: !0\n })]\n });\n}), cl = R(function(t) {\n const {\n mostRecentUserMessageId: n,\n onMessageRetry: r,\n message: o,\n allowRetry: a,\n senderName: s,\n userIconColor: i,\n messagePlacement: l,\n hasMetadataAbove: c,\n shouldRenderAllLinks: u,\n strings: d,\n shouldShowRetryIcon: h,\n shouldForceLinksOpenInNewTab: y,\n shouldBeTabbable: v,\n shouldOverrideRenderNoLinks: p\n } = t, {\n messageId: g,\n messageType: E,\n messageBody: b,\n messageDeliveryStatus: T\n } = o, [w, m] = d, I = E === \"self\" && (l === \"group-last\" || l === \"single\" || T === \"failed\"), k = Sa(a), L = x(() => {\n r(o);\n }, [o, r]);\n return /* @__PURE__ */ _(B, {\n children: [E === \"system\" ? /* @__PURE__ */ f(\"span\", {\n tabIndex: v ? 0 : void 0,\n children: /* @__PURE__ */ f(il, {\n displayText: sl(o, s)\n })\n }) : /* @__PURE__ */ f(Ea, {\n messageType: E,\n messageBody: b,\n isMe: E === \"self\",\n senderName: s,\n userIconColor: i,\n messagePlacement: l,\n hasMetadataAbove: c,\n shouldRenderAllLinks: u,\n shouldRenderSenderIcon: (l === \"group-last\" || l === \"single\") && E !== \"self\",\n strings: w,\n shouldOverrideRenderNoLinks: p,\n shouldForceLinksOpenInNewTab: y,\n shouldBeTabbable: v,\n shouldRenderRetryIcon: a && T === \"failed\",\n onRetry: L\n }), I ? /* @__PURE__ */ f(ba, {\n retryStatus: k,\n messageDeliveryStatus: T,\n isMostRecentUserMessage: n === g,\n onRetry: L,\n strings: m,\n shouldShowRetryIcon: h\n }) : null]\n });\n}), ul = R(function(t) {\n const {\n onMessageRetry: n,\n allowRetry: r,\n sortedMessages: o,\n chatUsers: a,\n mostRecentUserMessageId: s,\n shouldNotDisplayMessages: i,\n shouldRenderAllLinks: l,\n strings: c,\n shouldShowRetryIcon: u,\n shouldForceLinksOpenInNewTab: d,\n locale: h,\n shouldLastMessageBeTabbable: y,\n shouldOverrideRenderNoLinks: v\n } = t, [p] = c, g = o.map((E, b) => {\n if (typeof E > \"u\")\n return null;\n const [T, w] = ll(b, o);\n let {\n displayTime: m,\n sequentialId: I\n } = E;\n h && (m = Xu(m, h));\n const [k, L, P, V, j, K, ce] = va(E, T, w, a, p);\n return i ? /* @__PURE__ */ f(B, {}) : /* @__PURE__ */ f(\"li\", {\n children: /* @__PURE__ */ f(nr, {\n messageType: E.messageType,\n horizontalAlignment: k,\n showTime: P,\n showName: L,\n senderName: V,\n displayTime: m,\n a11ySummary: j,\n strings: p,\n children: /* @__PURE__ */ f(\"div\", {\n className: \"interactionMessageContainer\",\n children: /* @__PURE__ */ f(\"div\", {\n className: \"fullWidth\",\n children: /* @__PURE__ */ f(cl, {\n allowRetry: r,\n mostRecentUserMessageId: s,\n onMessageRetry: n,\n message: E,\n senderName: V,\n messagePlacement: K,\n hasMetadataAbove: L || P,\n userIconColor: ce,\n shouldRenderAllLinks: l,\n shouldOverrideRenderNoLinks: v,\n strings: c,\n shouldShowRetryIcon: u,\n shouldForceLinksOpenInNewTab: d,\n shouldBeTabbable: b === o.length - 1 && y\n })\n })\n })\n })\n }, I);\n });\n return /* @__PURE__ */ f(B, {\n children: g\n });\n});\nfunction ll(e, t) {\n var o, a;\n let n = null, r = null;\n return e > 0 && (n = (o = t[e - 1]) != null ? o : null), e < t.length - 1 && (r = (a = t[e + 1]) != null ? a : null), [n, r];\n}\nfunction dl() {\n const [e, t] = ie(!1), n = G(e);\n n.current = e;\n const r = x(() => {\n t(!0);\n }, []), o = x(() => {\n t(!1);\n }, []);\n return [x((s) => {\n const {\n children: i,\n commandOverrideStrings: l,\n imagePath: c,\n text: u,\n heading: d,\n onClose: h,\n offerCancel: y,\n onCancel: v,\n updateOverlayState: p,\n buttonTextOverride: g,\n elementId: E,\n detailElement: b\n } = s;\n return /* @__PURE__ */ f(ku, {\n show: n.current,\n dismissOverlay: o,\n commandOverrideStrings: l,\n imagePath: c,\n text: u,\n heading: d,\n onClose: h,\n offerCancel: y,\n onCancel: v,\n updateOverlayState: p,\n buttonTextOverride: g,\n elementId: E,\n detailElement: b,\n children: i\n });\n }, [o]), r];\n}\nfunction fl() {\n const e = G(null), t = G(document.title), n = G(0), r = G([]), o = G(void 0), a = G(void 0), s = G(void 0), i = G(void 0), l = G({}), c = G(void 0), u = G({ timeout: void 0, ackId: \"\" }), d = G(void 0), h = G(void 0), y = G(void 0);\n return [\n e,\n t,\n n,\n r,\n o,\n a,\n s,\n i,\n l,\n c,\n u,\n d,\n h,\n y\n ];\n}\nfunction hl(e) {\n const t = [];\n let n = !1;\n for (const r in e) {\n const o = e[r];\n o.isTyping && t.push(o), r !== ve && (n = !0);\n }\n return [t, n];\n}\nfunction gl() {\n const e = A((r) => r.chatUsers), [t, n] = Me(() => hl(e), [e]);\n return [t, n];\n}\nfunction ml(e, t, n, r, o, a) {\n let s;\n try {\n s = new WebSocket(e, t);\n } catch {\n return pt(\"Error connecting to WebSocket.\", \"URL: \" + e, \"Protocol: \" + t), a == null || a(), new WebSocket(\"wss://localhost/dummy\");\n }\n return r && (s.onopen = () => {\n r();\n }), o && (s.onclose = (i) => {\n o();\n }), a && (s.onerror = (i) => {\n pt(\n \"Error connecting to WebSocket.\",\n \"URL: \" + e,\n \"Protocol: \" + t,\n \"Error: \" + i\n ), a();\n }), s.onmessage = n, s;\n}\nfunction pl(e, t, n, r, o) {\n const a = A((i) => i.connectionStatus.url);\n return x(() => {\n a !== \"\" && (o.current = ml(\n a,\n \"Epic.LiveChat.V0.01\",\n e,\n t,\n n,\n r\n ));\n }, [a, o, e, t, n, r]);\n}\nfunction wa(e) {\n return !e || !Pe() ? \"\" : \"tel:\" + e.replace(/\\D+/g, \"\");\n}\nconst wn = R(function(t) {\n const {\n isWebSocket: n\n } = t, r = A((i) => i.verification.verificationProps.phone);\n let o = n ? \"Unable to connect to an agent. Please try again.\" : \"Our chat service is down right now. Please check back later.\", a = \"\";\n const s = Pe();\n return r && (o += `\n\nIf you'd like to speak to a representative,\ncontact us at`, a = wa(r != null ? r : \"\"), o += s ? \":\" : \" \" + r + \".\"), /* @__PURE__ */ _(\"div\", {\n className: \"infoOverlay\",\n children: [/* @__PURE__ */ f(\"div\", {\n children: /* @__PURE__ */ f(\"span\", {\n className: \"bannerText\",\n children: /* @__PURE__ */ f(\"span\", {\n children: o\n })\n })\n }), s && /* @__PURE__ */ _(B, {\n children: [/* @__PURE__ */ f(\"div\", {\n className: \"emptyRowBelow\"\n }), /* @__PURE__ */ f(\"div\", {\n className: \"inline phoneNumberLink\",\n children: a !== \"\" ? /* @__PURE__ */ f(\"a\", {\n href: a,\n children: r\n }) : /* @__PURE__ */ f(B, {})\n })]\n })]\n });\n});\nfunction yl() {\n if (window.AudioContext = window.AudioContext || window.webkitAudioContext, !window.AudioContext)\n return;\n const e = new window.AudioContext();\n if (!e)\n return;\n e.resume();\n const t = 440, n = e.currentTime, r = e.createOscillator(), o = e.createGain();\n r.connect(o), o.connect(e.destination), o.gain.setValueAtTime(0.25, n), o.gain.exponentialRampToValueAtTime(1e-5, n + 1), r.onended = function() {\n o.disconnect(e.destination), r.disconnect(o), e.close();\n }, r.type = \"sine\", r.frequency.value = t, r.start(n), r.stop(n + 1);\n}\nconst vl = R(function() {\n const t = \"1.1rem\";\n return /* @__PURE__ */ f(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n id: \"_Layer_\",\n width: t,\n height: t,\n viewBox: \"0 0 32 32\",\n children: /* @__PURE__ */ _(\"g\", {\n children: [/* @__PURE__ */ f(\"path\", {\n d: \"M13.7,7,9.55,11.15a1.23,1.23,0,0,1-.85.35H7.4a1.21,1.21,0,0,0-1.2,1.21v6.58A1.21,1.21,0,0,0,7.4,20.5H8.7a1.23,1.23,0,0,1,.85.35L13.7,25h1.5V7Z\"\n }), /* @__PURE__ */ f(\"path\", {\n d: \"M18.3,11.75V13.4a3,3,0,0,1,1.09,4.11,2.9,2.9,0,0,1-1.09,1.08v1.65a4.49,4.49,0,0,0,2.76-5.73A4.55,4.55,0,0,0,18.3,11.75Z\"\n }), /* @__PURE__ */ f(\"path\", {\n d: \"M21.3,7.69V9.44a8,8,0,0,1,3,6.56,8,8,0,0,1-3,6.55v1.76C23.94,23,25.8,19.75,25.8,16S23.94,9,21.3,7.69Z\"\n })]\n })\n });\n}), Sl = R(function() {\n const t = be(), n = A((s) => s.chatApp.allowSound), r = x((s) => {\n if (t(Zn({\n allowSound: s\n })), s) {\n sessionStorage.setItem(Wt, \"true\"), yl();\n return;\n }\n sessionStorage.removeItem(Wt);\n }, [t]), o = x(() => {\n r(!1);\n }, [r]), a = x(() => {\n r(!0);\n }, [r]);\n return /* @__PURE__ */ _(\"div\", {\n className: \"infoOverlay\",\n children: [/* @__PURE__ */ _(\"div\", {\n children: [/* @__PURE__ */ _(\"div\", {\n className: \"chatHeading\",\n role: \"heading\",\n \"aria-level\": 2,\n children: [\"Sound Settings\", /* @__PURE__ */ f(vl, {\n \"aria-hidden\": !0\n })]\n }), /* @__PURE__ */ f(\"div\", {\n className: \"infoContent\",\n children: /* @__PURE__ */ f(\"div\", {\n className: \"infoTable\",\n children: /* @__PURE__ */ _(\"div\", {\n className: \"infoRow\",\n children: [/* @__PURE__ */ f(\"div\", {\n className: \"notificationLabelCell\",\n children: \"Notifications\"\n }), /* @__PURE__ */ _(\"div\", {\n className: \"notificationToggleCell\",\n children: [/* @__PURE__ */ f(\"button\", {\n type: \"button\",\n className: n ? \"chatButton chosen toggle notificationButton\" : \"chatButton toggle notificationButton\",\n \"aria-pressed\": n,\n onClick: a,\n title: \"Turn on sound notifications for new messages\",\n children: \"ON\"\n }), /* @__PURE__ */ f(\"button\", {\n type: \"button\",\n className: n ? \"chatButton toggle notificationButton\" : \"chatButton chosen toggle notificationButton\",\n \"aria-pressed\": !n,\n onClick: o,\n title: \"Turn off sound notifications for new messages\",\n children: \"OFF\"\n })]\n })]\n })\n })\n })]\n }), !Pe() && /* @__PURE__ */ _(\"div\", {\n children: [/* @__PURE__ */ f(\"div\", {\n className: \"chatHeading\",\n role: \"heading\",\n \"aria-level\": 2,\n children: \"Shortcuts\"\n }), /* @__PURE__ */ f(\"div\", {\n className: \"infoContent\",\n children: /* @__PURE__ */ _(\"div\", {\n className: \"infoTable\",\n children: [/* @__PURE__ */ _(\"div\", {\n className: \"infoRow\",\n children: [/* @__PURE__ */ f(\"div\", {\n className: \"shortcutBehaviorCell\",\n children: \"Minimize the chat\"\n }), /* @__PURE__ */ f(\"div\", {\n className: \"shortcutAcceleratorCell\",\n children: \"Escape\"\n })]\n }), /* @__PURE__ */ _(\"div\", {\n className: \"infoRow\",\n children: [/* @__PURE__ */ f(\"div\", {\n className: \"shortcutBehaviorCell\",\n children: \"Focus on the message box\"\n }), /* @__PURE__ */ f(\"div\", {\n className: \"shortcutAcceleratorCell\",\n children: \"Alt + Shift + C\"\n })]\n }), /* @__PURE__ */ _(\"div\", {\n className: \"infoRow\",\n children: [/* @__PURE__ */ f(\"div\", {\n className: \"shortcutBehaviorCell\",\n children: \"Toggle focus for chat/website\"\n }), /* @__PURE__ */ f(\"div\", {\n className: \"shortcutAcceleratorCell\",\n children: \"Alt + Shift + E\"\n })]\n })]\n })\n })]\n })]\n });\n});\nfunction bl(e, t) {\n const n = be(), r = A((h) => h.chatApp.overlayType);\n let o = x(() => {\n (r === \"loseProgressWarning\" || r === \"timeout\" || r === \"serviceError\" || r === \"retryError\" || r === \"webSocketError\") && e(), r === \"expired\" && n(oe({\n chatStage: \"bot\"\n }));\n }, [r, e, n]), a = x(() => {\n if (r === \"timeout\") {\n if (t === void 0)\n throw new Error(\"idle ref must be defined if we have an idle timeout\");\n t.current !== void 0 && (clearTimeout(t.current), t.current = void 0);\n }\n }, [r, t]);\n const s = x(() => {\n n(Ce({\n overlayType: \"none\"\n }));\n }, [n]);\n let i = \"\", l = \"\", c = !1, u = {\n acknowledgeText: \"\",\n cancelText: \"\"\n }, d;\n switch (r) {\n case \"none\":\n break;\n case \"info\": {\n i = \"Settings and Shortcuts\", d = /* @__PURE__ */ f(Sl, {});\n break;\n }\n case \"illegalCharacter\": {\n i = \"Unsupported character\", l = \"Some of the text you've entered cannot be submitted. Unsupported characters have been removed from your text.\";\n break;\n }\n case \"loseProgressWarning\": {\n i = \"Close chat\", l = \"Closing will end the chat\", c = !0, u.acknowledgeText = \"End Chat\", u.cancelText = \"Go back\";\n break;\n }\n case \"timeout\": {\n i = \"Chat timing out\", l = \"Are you still there? Your chat will expire in 1 minute.\", c = !0, u.acknowledgeText = \"End chat\", u.cancelText = \"I'm still here\";\n break;\n }\n case \"expired\": {\n i = \"Chat expired\", l = \"Your chat has expired\", c = !1, u.acknowledgeText = \"OK\";\n break;\n }\n case \"serviceError\": {\n i = \"Error\", d = /* @__PURE__ */ f(wn, {}), c = !1, u.acknowledgeText = \"Close Chat\";\n break;\n }\n case \"retryError\": {\n i = \"Error\", d = /* @__PURE__ */ f(wn, {}), c = !0, u.acknowledgeText = \"Close Chat\", u.cancelText = \"Go back\";\n break;\n }\n case \"webSocketError\": {\n i = \"Error\", d = /* @__PURE__ */ f(wn, {\n isWebSocket: !0\n }), c = !1, u.acknowledgeText = \"Close Chat\";\n break;\n }\n }\n return [l, i, o, c, a, s, u, d];\n}\nfunction Ta(e, t, n) {\n if (n.current !== void 0)\n return !0;\n const r = new Date().getTime(), o = t.current.filter((s) => r - s < uc), a = o.length > cc;\n return a ? (e(so({ isThrottled: !0 })), n.current = setTimeout(() => {\n e(so({ isThrottled: !1 })), n.current = void 0, t.current = [];\n }, lc)) : o.push(r), t.current = o, a;\n}\nfunction El(e) {\n return e !== null && e.messageDeliveryStatus === \"failed\";\n}\nfunction wl(e, t) {\n var n;\n if (t !== void 0) {\n if (!El(t))\n return;\n e(\n hd({\n retryFailedMessageData: { messageType: \"userMessage\", messageId: t.messageId }\n })\n );\n }\n (n = document.getElementById(\"MessageInputTextArea\")) == null || n.focus();\n}\nfunction Tl(e, t, n) {\n const r = t + \"_\" + crypto.randomUUID(), o = bt(\n r,\n n,\n new Date().toISOString(),\n t,\n \"self\",\n void 0,\n void 0,\n \"sending\"\n );\n e(\n ar({\n enqueueMessageData: {\n messageQueueData: {\n messageId: r,\n outgoingMessageType: \"userMessage\",\n data: { MessageBody: n }\n },\n messageFullData: o\n }\n })\n );\n}\nfunction Ml(e, t, n, r) {\n return r ? (Tl(e, t, n), !0) : !1;\n}\nfunction Cl(e, t, n, r) {\n const o = be(), a = x(\n (i, l) => l && Ta(o, e, t) ? !1 : Ml(o, n, i, l),\n [o, e, t, n]\n ), s = x(\n (i) => {\n o($t({ retryAttempts: r + 1 })), wl(o, i);\n },\n [o, r]\n );\n return [a, s];\n}\nfunction Il(e, t) {\n e(at({ isMinimized: !0, shouldFocus: !0 })), t.current = document.getElementById(\"ChatScrollingSection\").scrollTop;\n}\nfunction Al(e, t) {\n const n = be(), r = A((i) => i.chatApp.chatStage), o = x(() => {\n r === \"chatEnd\" || r === \"expired\" ? t() : n(Ce({ overlayType: \"loseProgressWarning\" }));\n }, [r, n, t]), a = x(() => {\n n(Ce({ overlayType: \"info\" }));\n }, [n]), s = x(() => {\n Il(n, e);\n }, [n, e]);\n return [o, a, s];\n}\nconst Xr = {\n status: \"normal\",\n verificationProps: { formApiKey: \"\", formURL: \"\", phone: \"\" }\n}, Ma = it({\n name: \"verification\",\n initialState: Xr,\n reducers: {\n resetVerification: () => Xr,\n setVerificationStatus(e, t) {\n return t.payload.status === void 0 ? e : { ...e, status: t.payload.status };\n },\n setVerificationProps(e, t) {\n return t.payload.verificationProps === void 0 ? e : { ...e, verificationProps: t.payload.verificationProps };\n }\n }\n}), { resetVerification: Ol, setVerificationStatus: vt, setVerificationProps: Ca } = Ma.actions, _l = Ma.reducer;\nasync function Nl(e, t, n, r) {\n const { endpoint: o, queueSession: a, negotiateToken: s } = e, i = sessionStorage.getItem(Qt), l = i !== null && i.length > 0, c = {\n \"Content-Type\": \"application/json\",\n \"X-API-Key\": e.apiKey\n };\n l && (c.Authorization = \"Bearer \" + i);\n const u = JSON.stringify({\n queueSession: a,\n negotiateToken: s\n });\n try {\n const d = await fetch(o, {\n method: \"POST\",\n mode: \"cors\",\n body: l ? null : u,\n headers: c\n });\n if (d.ok) {\n const h = await d.json();\n t(h.serviceAddress, h.token, h.userId, r);\n } else {\n const h = Number(d.status);\n n(r, h);\n }\n } catch {\n n(r, 2);\n }\n}\nasync function Rl(e, t, n) {\n setTimeout(async () => {\n e(), t(he({ chatUserStartupDataArray: [{ userId: ve, isTyping: !1 }] }));\n }, dc - n);\n}\nasync function rr(e, t, n, r, o, a, s) {\n const i = new Date().getTime();\n e(he({ chatUserStartupDataArray: [{ userId: ve, isTyping: !0 }] }));\n const l = {\n \"Content-Type\": \"application/json\",\n \"X-API-Key\": r\n };\n try {\n const u = await (await fetch(n, {\n method: \"POST\",\n mode: \"cors\",\n body: JSON.stringify(t),\n headers: l\n })).json(), h = new Date().getTime() - i, y = Yo - h;\n if (!u.messageBody && (u.clientAction !== \"TalkToAgent\" || !u.queueSession))\n throw new Error(\"Didn't receive a messageBody\");\n o(u, y), s.current = setTimeout(() => {\n e(\n he({ chatUserStartupDataArray: [{ userId: ve, isTyping: !1 }] })\n ), e(st());\n }, y);\n } catch (c) {\n await Rl(a, e, new Date().getTime() - i), dt(\"Message failed to send.\", \"Error: \" + c, \"Endpoint: \" + n);\n }\n}\nfunction kl(e, t, n) {\n const r = \"com.epic.chat.\" + t + \".1.0\", o = t === \"SendMessageToGroup\", a = {\n specversion: \"1.0\",\n id: e,\n source: \"/epic/livechat\",\n type: r,\n time: new Date().toISOString(),\n ack: o,\n datacontenttype: \"application/json\",\n data: n\n };\n return JSON.stringify(a);\n}\nfunction Ia(e, t, n, r) {\n if (r.current === null || r.current.bufferedAmount > 0 || r.current.readyState !== WebSocket.OPEN)\n return !1;\n const o = kl(n, e, t);\n return r.current.send(o), !0;\n}\nasync function Dl(e, t, n, r, o) {\n const a = new Date().getTime();\n _t() || Bn(e, !0), e(Dn({ isLoadingBotHistory: !0 }));\n const s = {\n \"Content-Type\": \"application/json\",\n \"X-API-Key\": r.apiKey\n }, i = JSON.stringify({\n tokens: t\n });\n try {\n const l = await fetch(r.botHistoryEndpoint, {\n method: \"POST\",\n mode: \"cors\",\n body: i,\n headers: s\n }), c = await l.json(), d = new Date().getTime() - a, h = n ? 0 : Yo - d;\n o.current = setTimeout(() => {\n xl(e, l, c);\n }, h);\n } catch (l) {\n Bn(e, !1), e(Dn({ isLoadingBotHistory: !1 })), Aa(l);\n }\n}\nfunction xl(e, t, n) {\n var r;\n if (e(st()), t.ok)\n Ll(e, n.botHistory);\n else {\n const o = Number(t.status);\n Aa((r = n.errorMessage) != null ? r : \"\", o);\n }\n Bn(e, !1), e(Dn({ isLoadingBotHistory: !1 }));\n}\nfunction Ll(e, t) {\n var o, a, s, i, l, c;\n let n = [];\n for (const u of t)\n if (u.isBot) {\n if (u.botResponse && u.botResponse.messageBody.trim() === \"\")\n continue;\n n = (a = (o = u.botResponse) == null ? void 0 : o.nodeHistory) != null ? a : n;\n const d = (i = u.botResponse) != null ? i : {\n messageBody: (s = u.message) != null ? s : \"\",\n type: \"Message\",\n dateTimeISOString: new Date().toISOString(),\n botOptions: [],\n nodeHistory: n,\n botHistoryTokens: []\n };\n e(ta({ incomingBotMessage: d }));\n } else\n ((l = u.message) == null ? void 0 : l.trim()) !== \"\" && e(\n ea({\n newMsg: u.message,\n isHistory: !0,\n timestamp: u.sentISOTimestamp\n })\n );\n const r = t[t.length - 1];\n !_t() && ((c = r.botResponse) == null ? void 0 : c.clientAction) === \"TalkToAgent\" && (e(\n na({\n queueIdentifier: r.botResponse.queueIdentifier,\n chatIdentifier: r.botResponse.chatIdentifier,\n queueSession: r.botResponse.queueSession,\n incomingBotMessage: r.botResponse\n })\n ), e(oe({ chatStage: \"verification\" })));\n}\nfunction Aa(e, t) {\n pt(\"Failed to load bot history from server: \", e, t ? \"code \" + t : \"\");\n}\nfunction Bn(e, t) {\n e(he({ chatUserStartupDataArray: [{ userId: ve, isTyping: t }] }));\n}\nfunction Oa(e) {\n return () => {\n e(Ic());\n };\n}\nfunction Zr(e, t) {\n if (t.type === \"Action\" && t.clientAction === \"TalkToAgent\") {\n e(\n na({\n queueSession: t.queueSession,\n chatIdentifier: t.chatIdentifier,\n queueIdentifier: t.queueIdentifier,\n incomingBotMessage: t\n })\n ), e(oe({ chatStage: \"verification\" }));\n return;\n }\n}\nfunction or(e) {\n return (t, n) => {\n e(Gr()), e($t({ retryAttempts: 0 })), Xo(\n t.botHistoryTokens.map((r) => ({ content: r, isEncrypted: !0 }))\n ), Zr(e, t), t.messageBody && (e(Gr()), e($t({ retryAttempts: 0 }))), setTimeout(() => {\n Zr(e, t), t.messageBody && e(ta({ incomingBotMessage: t }));\n }, n);\n };\n}\nfunction _a(e, t, n, r, o, a) {\n return n && a ? (rr(\n e,\n {\n messageBody: t,\n nodeHistory: o,\n botSession: a.botSession\n },\n a.botEndpoint,\n a.apiKey,\n or(e),\n Oa(e),\n r\n ), e(ea({ newMsg: t })), !0) : !1;\n}\nfunction Pl(e, t, n, r) {\n var o;\n e(oe({ chatStage: \"bot\" })), _a(\n e,\n \"Go back\",\n !0,\n t,\n n,\n r\n ), e(vt({ status: \"normal\" })), e(st()), (o = document.getElementById(\"MessageInputTextArea\")) == null || o.focus();\n}\nvar Ot = /* @__PURE__ */ ((e) => (e.Demographics = \"76\", e.FollowUp = \"77\", e))(Ot || {}), ft = /* @__PURE__ */ ((e) => (e[e.ChatEnded = 1] = \"ChatEnded\", e[e.InternalServerError = 2] = \"InternalServerError\", e[e.Forbidden = 3] = \"Forbidden\", e))(ft || {});\nfunction Bl(e) {\n const t = be(), n = A((i) => i.botInteraction.nodeHistory), r = A((i) => i.botInteraction.botInteractionSettings), o = x(\n (i, l, c) => {\n if (i === Ot.Demographics) {\n t(Pc({ queueDepth: l })), t(Bc({ negotiateToken: c }));\n const u = new Date().toISOString(), d = bt(\n \"connectingToAgent\" + u,\n \"\",\n u,\n \"\",\n \"system\",\n \"connectingToAgent\",\n void 0,\n \"sent\",\n null\n );\n t(\n Mt({\n addReceivedAndLoadedMessagesData: {\n messages: [d],\n messageSource: \"incomingMessage\"\n }\n })\n ), t(st()), t(vt({ status: \"submittingDemographics\" })), t(Ge({ connectionStatus: \"negotiate\" }));\n }\n i === Ot.FollowUp && (t(Un({ endChatData: { code: ft.ChatEnded } })), t(oe({ chatStage: \"chatEnd\" })));\n },\n [t]\n ), a = x(() => {\n Pl(\n t,\n e,\n n,\n r\n );\n }, [r, t, e, n]), s = x(() => {\n t(vt({ status: \"submissionError\" }));\n }, [t]);\n return [o, a, s];\n}\nfunction Na(e, t) {\n const n = [];\n return e.forEach((r) => {\n var o;\n n.push(\n bt(\n r.Id,\n r.MessageBody,\n r.SentTimeISOString,\n r.SenderId,\n r.SenderId === t ? \"self\" : r.Type === \"Message\" ? \"otherParticipant\" : \"system\",\n r.UpdateType === \"JoinChat\" ? \"connected\" : \"disconnected\",\n (o = r.Participant) == null ? void 0 : o.Id,\n \"sent\",\n r.SequentialId\n )\n );\n }), n;\n}\nfunction Ul(e) {\n const { Id: t, Name: n, IsActive: r } = e;\n return {\n userId: t,\n isTyping: !1,\n isInChat: r,\n userName: n\n };\n}\nfunction Fl(e) {\n const t = [];\n for (let n in e) {\n let r = e[n];\n t.push(Ul(r));\n }\n return t;\n}\nfunction eo(e, t) {\n const n = Fl(e.Agents);\n return [Na(e.ChatHistory, t), n];\n}\nfunction jl(e, t) {\n t.Type === \"Decrement\" && t.ChatCreationTime && e(Uc({ creationTime: t.ChatCreationTime }));\n}\nfunction Vl(e, t, n, r) {\n const o = be();\n return x(\n (s) => {\n var l, c;\n o(Od());\n const i = JSON.parse(s.data);\n if (!!i)\n switch (i.type) {\n case xe(\"ChatEnded\", \"1.0\"): {\n const u = i.data;\n o(\n Un({\n endChatData: {\n code: ft.ChatEnded,\n reason: u.reason,\n sequentialId: u.SequentialId,\n sentTimeISOString: u.SentTimeISOString\n }\n })\n ), o(oo()), o(oe({ chatStage: \"chatEnd\" })), (l = r.current) == null || l.close();\n break;\n }\n case xe(\"ClosingConnection\", \"1.0\"): {\n const u = i.data;\n o(\n Un({\n endChatData: {\n code: u.Code\n }\n })\n ), o(oo()), o(oe({ chatStage: \"chatEnd\" })), (c = r.current) == null || c.close();\n break;\n }\n case xe(\"ChatLoad\", \"1.0\"): {\n const u = i.data, [d, h] = eo(u, e);\n o(he({ chatUserStartupDataArray: h })), o(\n Mt({\n addReceivedAndLoadedMessagesData: {\n messages: d,\n messageSource: \"loadChat\"\n }\n })\n ), o(oe({ chatStage: \"chat\" }));\n break;\n }\n case xe(\"Heartbeat\", \"1.0\"): {\n const u = i.data, [d, h] = eo(\n u,\n e\n );\n o(he({ chatUserStartupDataArray: h })), o(\n Mt({\n addReceivedAndLoadedMessagesData: {\n messages: d,\n messageSource: \"heartbeat\"\n }\n })\n ), t.current && (t.current.timeout !== void 0 && (clearTimeout(t.current.timeout), t.current.timeout = void 0), t.current.ackId = \"\");\n break;\n }\n case xe(\"SendMessageToGroup\", \"1.0\"): {\n const u = i.data;\n o(st()), o(\n he({\n chatUserStartupDataArray: [\n { userId: u.SenderId, isTyping: !1 }\n ]\n })\n );\n const d = Na([u], e);\n o(\n Mt({\n addReceivedAndLoadedMessagesData: {\n messages: d,\n messageSource: \"incomingMessage\"\n }\n })\n );\n break;\n }\n case xe(\"ParticipantUpdate\", \"1.0\"): {\n const u = i.data, d = u.Participant;\n o(\n he({\n chatUserStartupDataArray: [\n {\n userId: d.Id,\n isTyping: !1,\n isInChat: d.IsActive,\n userName: d.Name\n }\n ]\n })\n );\n const h = u.UpdateType === \"JoinChat\" ? \" has joined\" : \" has left\", y = u.UpdateType === \"JoinChat\" ? \"connected\" : \"disconnected\", v = bt(\n d.Id + u.SentTimeISOString,\n d.Name + h,\n u.SentTimeISOString,\n \"\",\n \"system\",\n y,\n d.Id,\n \"sent\",\n u.SequentialId\n );\n o(\n Mt({\n addReceivedAndLoadedMessagesData: {\n messages: [v],\n messageSource: \"incomingMessage\"\n }\n })\n ), o(st());\n break;\n }\n case xe(\"Typing\", \"1.0\"): {\n const d = i.data.ParticipantId, h = n.current[d];\n h !== void 0 && clearTimeout(h), n.current[d] = setTimeout(() => {\n o(\n he({\n chatUserStartupDataArray: [{ userId: d, isTyping: !1 }]\n })\n ), delete n.current[d];\n }, Fo + 1e3), o(\n he({\n chatUserStartupDataArray: [{ userId: d, isTyping: !0 }]\n })\n );\n break;\n }\n case xe(\"ACK\", \"1.0\"): {\n const u = i.data;\n o(\n gd({\n acknowledgeMessageData: {\n messageId: u.AckId,\n sequentialId: u.NewDBEventResponse.SequentialId,\n sentTimeISOString: u.NewDBEventResponse.SentTimeISOString,\n status: u.Status,\n reason: u.Reason\n }\n })\n ), t.current && t.current.ackId === u.AckId && (t.current.timeout !== void 0 && (clearTimeout(t.current.timeout), t.current.timeout = void 0), t.current.ackId = \"\");\n break;\n }\n case xe(\"UpdateWait\", \"1.0\"): {\n const u = i.data;\n jl(o, u);\n break;\n }\n default:\n dt(\"Unexpected socket message received.\", \"Socket message type: \" + i.type);\n }\n },\n [o, r, n, t, e]\n );\n}\nfunction xe(e, t) {\n return \"com.epic.chat.\" + e + \".\" + t;\n}\nfunction Hl(e, t, n, r, o, a, s, i) {\n const [l, c] = ie(!1), [u, d] = ie(!1), [h, y] = ie(document.visibilityState === \"visible\"), v = x(() => {\n if (!e || !t || !a || !h)\n return;\n if (e.offsetHeight === t.offsetHeight) {\n c(!0), d(!1), s();\n return;\n }\n if (c(!1), r) {\n i(), d(!1), s();\n return;\n }\n const g = -200;\n if (t.scrollTop > g) {\n i(), s();\n return;\n }\n d(!0);\n }, [\n e,\n t,\n a,\n h,\n r,\n s,\n i\n ]);\n Y(() => {\n const g = () => {\n y(document.visibilityState === \"visible\");\n };\n return document.addEventListener(\"visibilitychange\", g), () => document.removeEventListener(\"visibilitychange\", g);\n }, [y]), Y(() => {\n setTimeout(() => {\n requestAnimationFrame(() => v());\n }, 50);\n }, [\n v,\n e,\n t,\n c,\n d,\n o,\n r,\n h\n ]);\n function p(g) {\n !u || !g[0].isIntersecting || (d(!1), s());\n }\n return n && new IntersectionObserver(p).observe(n), Y(() => {\n if (!t)\n return;\n if (Pe()) {\n document.body.style.overflow = a ? \"hidden\" : \"auto\";\n return;\n }\n function g(E) {\n l && E.preventDefault();\n }\n return t.addEventListener(\"wheel\", g, { passive: !l }), t.addEventListener(\"touchmove\", g, { passive: !l }), () => {\n t.removeEventListener(\"wheel\", g), t.removeEventListener(\"touchmove\", g);\n };\n }, [a, l, t]), u;\n}\nfunction ql(e, t, n, r, o) {\n var a;\n t !== void 0 && (e(Ac()), rr(\n e,\n {\n messageBody: t.messageBody,\n nodeHistory: n,\n botSession: r.botSession\n },\n r.botEndpoint,\n r.apiKey,\n or(e),\n Oa(e),\n o\n )), (a = document.getElementById(\"ChatScrollingSection\")) == null || a.focus();\n}\nfunction zl(e, t, n, r) {\n const o = be(), a = A((c) => c.botInteraction.nodeHistory), s = A((c) => c.botInteraction.botInteractionSettings), i = x(\n (c, u) => u && Ta(o, e, t) ? !1 : _a(\n o,\n c,\n u,\n n,\n a,\n s\n ),\n [\n o,\n n,\n e,\n t,\n a,\n s\n ]\n ), l = x(\n (c) => {\n o($t({ retryAttempts: r + 1 })), ql(\n o,\n c,\n a,\n s,\n n\n );\n },\n [o, a, s, n, r]\n );\n return [i, l];\n}\nfunction Wl() {\n const e = A((o) => o.chatApp.hasInitializedChat), t = A((o) => o.chatApp.isMinimized), n = A((o) => o.chatApp.chatStage), r = x(\n (o) => {\n if (!e || t && n !== \"chat\" || n === \"chatEnd\" || n === \"expired\" || n === \"notStarted\")\n return;\n const a = \"Leaving may lose chat history\";\n o.preventDefault(), o.returnValue = a;\n },\n [e, n, t]\n );\n Y(() => (window.addEventListener(\"beforeunload\", r), () => {\n window.removeEventListener(\"beforeunload\", r);\n }), [r]);\n}\nfunction $l() {\n const e = be(), t = A((r) => r.chatApp.chatStage), n = A((r) => r.chatApp.queueDepth);\n Y(() => {\n n !== void 0 && t === \"awaitingAgent\" && (e(vd({ queueDepth: n })), n <= 1 && e(st()));\n }, [e, n, t]);\n}\nfunction Gl(e, t, n, r, o, a) {\n if (t || r || !o.botEndpoint || !o.apiKey || !o.enabled)\n return;\n e(Fc({ hasInitializedChat: !0 }));\n const s = Jo();\n if (s.length > 0) {\n Dl(\n e,\n s,\n n,\n o,\n a\n );\n return;\n }\n const i = (c, u) => {\n or(e)(c, u);\n }, l = () => {\n e(Ce({ overlayType: \"serviceError\" }));\n };\n rr(\n e,\n {\n messageBody: \"\",\n nodeHistory: [],\n botSession: o.botSession\n },\n o.botEndpoint,\n o.apiKey,\n i,\n l,\n a\n );\n}\nasync function Yl(e, t, n, r, o, a) {\n var u;\n if (n || t || r)\n return;\n _t() || e(he({ chatUserStartupDataArray: [{ userId: ve, isTyping: !0 }] }));\n const s = o.configInitializeEndpoint, i = {\n \"Content-Type\": \"application/json\",\n \"X-API-Key\": o.apiKey\n }, l = (d, h) => {\n pt(\"Failed to initialize with server: \", d, h ? \"code \" + h : \"\"), e(Ce({ overlayType: \"serviceError\" }));\n }, c = (d, h, y, v) => {\n d || (dt(\"Live Chat is not enabled.\"), e(Ce({ overlayType: \"serviceError\" }))), e(\n Ca({\n verificationProps: {\n ...a,\n formURL: y,\n formApiKey: h\n }\n })\n ), e(\n ra({\n botInteractionSettings: {\n ...o,\n enabled: d,\n botSession: v\n }\n })\n );\n };\n try {\n e(Hc({ hasInitializedBot: !0 }));\n const d = await fetch(s, {\n method: \"GET\",\n mode: \"cors\",\n headers: i\n });\n if (d.ok) {\n const h = await d.json();\n c(\n h.enabled,\n h.formKey,\n h.formUrl,\n h.botSession\n );\n } else {\n const h = Number(d.status), y = await d.json();\n l((u = y.errorMessage) != null ? u : \"\", h);\n }\n } catch (d) {\n l(d);\n } finally {\n e(he({ chatUserStartupDataArray: [{ userId: ve, isTyping: !1 }] }));\n }\n}\nfunction Kl(e) {\n const t = be(), n = A((l) => l.chatApp.isMinimized), r = A((l) => l.chatApp.hasInitializedChat), o = A((l) => l.botInteraction.botInteractionSettings), a = A((l) => l.verification.verificationProps), s = A((l) => l.chatApp.hasInitializedBot), i = A((l) => l.chatApp.chatStage);\n Y(() => {\n Yl(\n t,\n r,\n s,\n n,\n o,\n a\n ), Gl(\n t,\n r,\n i === \"chat\",\n n,\n o,\n e\n );\n }, [\n t,\n r,\n n,\n o,\n e,\n a,\n s,\n i\n ]), Y(() => {\n _t() && n && !r && t(at({ isMinimized: !1 })), sessionStorage.getItem(Wt) === \"true\" && t(Zn({ allowSound: !0 }));\n }), Wl(), $l();\n}\nconst be = Ds, A = ps;\nfunction Ql(e) {\n return !(e.trim() === \"\" || e.length > Go);\n}\nfunction Jl(e) {\n return e ? e.some((t) => t.id === ve && t.isTyping) : !1;\n}\nfunction Xl(e, t) {\n return !(!e || e.length === 0 || Jl(t));\n}\nfunction Zl(e, t, n, r) {\n return e === \"bot\" ? Xl(n, r) : (e === \"awaitingAgent\" || e === \"chat\") && t !== \"shouldNotReconnect\";\n}\nfunction ed() {\n return A((e) => {\n const t = e.chatMessages.sortedMessageArray.length, n = e.botInteraction.messages.length;\n return t + n;\n });\n}\nfunction td() {\n return A((e) => {\n var t, n;\n if (e.chatApp.chatStage === \"chat\" && ((t = e.chatMessages.sortedMessageArray) == null ? void 0 : t.length) > 0) {\n const r = e.chatMessages.sortedMessageArray[e.chatMessages.sortedMessageArray.length - 1];\n return e.chatMessages.messageMap[r.messageId].messageType === \"self\";\n }\n return e.chatApp.chatStage === \"bot\" && ((n = e.botInteraction.messages) == null ? void 0 : n.length) > 0 ? e.botInteraction.messages[e.botInteraction.messages.length - 1].isMe : !1;\n });\n}\nfunction nd() {\n const [e, t] = ie(!1), n = ed(), r = td();\n return Y(() => {\n t(!r);\n }, [n, r, t]), e;\n}\nfunction rd(e, t) {\n var s, i;\n const n = (s = t.sequentialId) != null ? s : null, r = (i = t.sentTimeISOString) != null ? i : new Date().toISOString(), o = bt(\n \"endChat\",\n \"\",\n r,\n \"\",\n \"system\",\n \"endChat\",\n void 0,\n \"sent\",\n n\n );\n return Gt(e, {\n messages: [o],\n messageSource: \"incomingMessage\"\n });\n}\nfunction od(e, t, n) {\n return sa(e, t) >= 0 ? [e, !0] : er(\n t.messageId,\n t.outgoingMessageType,\n n\n ) ? [e, !0] : [[...e, t], !1];\n}\nfunction Ra(e, t) {\n const { messageQueueData: n, messageFullData: r } = t, [o, a] = od(\n e.queuedMessages,\n n,\n e.messageAwaitingAck\n );\n if (a)\n return e;\n const s = { ...e };\n return s.queuedMessages = o, n.outgoingMessageType === \"userMessage\" && r ? Gt(s, {\n messages: [r],\n messageSource: \"sendingMessage\"\n }) : s;\n}\nfunction ad(e, t) {\n const { messageType: n, messageId: r } = t;\n if (n === \"userMessage\" && r !== void 0 && r !== \"\") {\n const o = e.messageMap[r];\n if (o === void 0)\n return e;\n const a = tr(o, \"sending\"), s = ua(\n a,\n new Date().toISOString()\n ), i = Xt(\n s,\n e.highestSequentialId + 1e-3\n ), l = { ...e, messageMap: { ...e.messageMap } };\n return l.messageMap[r] = i, Ra(l, {\n messageQueueData: {\n messageId: r,\n outgoingMessageType: \"userMessage\",\n data: { MessageBody: i.messageBody }\n },\n messageFullData: i\n });\n } else\n return e;\n}\nfunction sd(e) {\n if (e.queuedMessages.length === 0)\n return e;\n const t = { ...e }, n = { ...e.queuedMessages[0] }, { outgoingMessageType: r } = n, o = Yn(t.queuedMessages, 0);\n return t.queuedMessages = o, r !== \"startTyping\" && (t.messageAwaitingAck = n), t.socketSendSlackTime = new Date().getTime() + ac, t;\n}\nfunction id(e, t) {\n const { messageId: n, newDeliveryStatus: r } = t, o = e.messageMap[n];\n if (o === void 0 || o.messageDeliveryStatus === \"sent\")\n return e;\n const a = { ...e, messageMap: { ...e.messageMap } };\n return a.messageMap[n] = tr(o, r), r === \"failed\" || r === \"sent\" ? ia(a, n, \"userMessage\") : a;\n}\nfunction cd(e, t) {\n const n = { ...e };\n return n.heartbeatStatus = t.status, n;\n}\nfunction ud(e) {\n if (e.queuedMessages.length === 0)\n return e;\n const t = { ...e }, n = Yn(t.queuedMessages, 0);\n return t.queuedMessages = n, t;\n}\nconst to = {\n socketSendSlackTime: void 0,\n hasNewMessageNotification: !1,\n numUnreadMessages: 0,\n mostRecentUserMessageId: \"\",\n messageMap: {},\n sortedMessageArray: [],\n queuedMessages: [],\n messageAwaitingAck: void 0,\n highestSequentialId: 0,\n highestGaplessSequentialId: 0,\n heartbeatStatus: \"normal\",\n userId: \"\"\n}, ka = it({\n name: \"chatMessages\",\n initialState: to,\n reducers: {\n resetChatMessages: () => to,\n setDeliveryStatus(e, t) {\n return ze(t.payload.setDeliveryStatusData) ? e : id(e, t.payload.setDeliveryStatusData);\n },\n heartbeatFailure(e) {\n const t = { ...Zt(e, \"\", \"heartbeat\") };\n return t.heartbeatStatus = \"normal\", t;\n },\n addReceivedAndLoadedMessages(e, t) {\n return ze(t.payload.addReceivedAndLoadedMessagesData) ? e : Gt(e, t.payload.addReceivedAndLoadedMessagesData);\n },\n sendQueuedMessage(e) {\n return sd(e);\n },\n skipSendingMessage(e) {\n return ud(e);\n },\n enqueueMessage(e, t) {\n return ze(t.payload.enqueueMessageData) ? e : Ra(e, t.payload.enqueueMessageData);\n },\n retryFailedMessage(e, t) {\n return ze(t.payload.retryFailedMessageData) ? e : ad(e, t.payload.retryFailedMessageData);\n },\n acknowledgeMessage(e, t) {\n return ze(t.payload.acknowledgeMessageData) ? e : Yc(e, t.payload.acknowledgeMessageData);\n },\n setHeartbeat(e, t) {\n return ze(t.payload.heartbeatData) ? e : cd(e, t.payload.heartbeatData);\n },\n endChatMessage(e, t) {\n return ze(t.payload.endChatData) ? e : rd(e, t.payload.endChatData);\n },\n addNotification(e) {\n const t = { ...e };\n return t.numUnreadMessages = e.numUnreadMessages + 1, t.hasNewMessageNotification = !0, t;\n },\n clearNotifications(e) {\n const t = { ...e };\n return t.numUnreadMessages = 0, t.hasNewMessageNotification = !1, t;\n },\n clearSocketSlackTime(e) {\n if (e.socketSendSlackTime === void 0)\n return e;\n const t = { ...e };\n return t.socketSendSlackTime = void 0, t;\n },\n setUserId(e, t) {\n if (ze(t.payload.userId) || t.payload.userId === \"\")\n return e;\n const n = { ...e };\n return n.userId = t.payload.userId, n;\n },\n setWaitTimeMessage(e, t) {\n if (t.payload.queueDepth === void 0)\n return e;\n const n = t.payload.queueDepth > 1 ? \"Place in line: \" + t.payload.queueDepth : \"You are next in line.\", r = \"placeInQueue\", o = \"placeInQueue\";\n if (e.messageMap[r])\n return e.messageMap[r].messageBody = n, t.payload.queueDepth <= 1 && (e.hasNewMessageNotification = !0), e;\n const a = new Date().toISOString(), s = bt(\n r,\n n,\n a,\n \"\",\n \"system\",\n o,\n void 0,\n \"sent\",\n null\n );\n return Gt(e, {\n messages: [s],\n messageSource: \"incomingMessage\"\n });\n }\n }\n}), {\n resetChatMessages: ld,\n setDeliveryStatus: Da,\n heartbeatFailure: xa,\n addReceivedAndLoadedMessages: Mt,\n sendQueuedMessage: dd,\n skipSendingMessage: fd,\n enqueueMessage: ar,\n retryFailedMessage: hd,\n acknowledgeMessage: gd,\n setHeartbeat: wt,\n endChatMessage: Un,\n addNotification: st,\n clearNotifications: md,\n clearSocketSlackTime: pd,\n setUserId: yd,\n setWaitTimeMessage: vd\n} = ka.actions, Sd = ka.reducer;\nfunction bd(e, t) {\n const { isInChat: n, isTyping: r, userName: o, userId: a } = t, s = { ...e }, i = { ...s[a] };\n return i.isInChat = n !== void 0 ? n : i.isInChat, i.isTyping = r !== void 0 ? r : i.isTyping, i.displayName = o !== \"\" && o !== void 0 ? o : i.displayName, i.id = a, i.color = i.color == null ? Object.keys(e).length + 1 : i.color, s[a] = i, s;\n}\nconst no = {\n ChatBot: { displayName: \"ChatBot\", isInChat: !0, isTyping: !1, id: ve, color: 0 }\n}, La = it({\n name: \"chatUsers\",\n initialState: no,\n reducers: {\n resetChatUsers: () => no,\n updateChatUsers(e, t) {\n if (!t.payload.chatUserStartupDataArray)\n return e;\n let n = { ...e };\n return t.payload.chatUserStartupDataArray.forEach((r) => {\n n = bd(n, r);\n }), n;\n }\n }\n}), { resetChatUsers: Ed, updateChatUsers: he } = La.actions, wd = La.reducer, ro = {\n url: \"\",\n connectionStatus: \"notStarted\",\n failedConnectionCount: 0,\n reconnectAttemptCount: 0,\n hasDisconnectedAtLeastOnce: !1,\n socketDisconnectedAndMayNeedRestart: !1,\n tokenStatus: \"notStarted\"\n}, Pa = it({\n name: \"connectionStatus\",\n initialState: ro,\n reducers: {\n resetConnectionStatus: () => ro,\n socketOpened(e) {\n return { ...e, connectionStatus: \"normal\", reconnectAttemptCount: 0, tokenStatus: \"reset\" };\n },\n socketClosed(e) {\n return e.url === \"\" ? e : { ...e, socketDisconnectedAndMayNeedRestart: !0 };\n },\n socketError(e) {\n return { ...e, connectionStatus: \"shouldNotReconnect\" };\n },\n setTokenStatus(e, t) {\n return t.payload.tokenStatus === void 0 || t.payload.tokenStatus === e.tokenStatus ? e : { ...e, tokenStatus: t.payload.tokenStatus };\n },\n setConnectionStatus(e, t) {\n return t.payload.connectionStatus === void 0 || t.payload.connectionStatus === e.connectionStatus ? e : {\n ...e,\n connectionStatus: t.payload.connectionStatus\n };\n },\n setConnectionURL(e, t) {\n return t.payload.url ? {\n ...e,\n url: t.payload.url\n } : e;\n },\n negotiateFailure(e, t) {\n return t.payload.tokenStatus !== void 0 ? {\n ...e,\n reconnectAttemptCount: e.reconnectAttemptCount + 1,\n connectionStatus: \"disconnected\",\n tokenStatus: \"shouldRefresh\"\n } : {\n ...e,\n reconnectAttemptCount: e.reconnectAttemptCount + 1,\n connectionStatus: \"disconnected\"\n };\n },\n messageReceived(e) {\n return e.connectionStatus === \"normal\" && e.failedConnectionCount === 0 ? e : {\n ...e,\n connectionStatus: \"normal\",\n failedConnectionCount: 0\n };\n },\n endChat(e) {\n return e.connectionStatus === \"shouldNotReconnect\" ? e : {\n ...e,\n connectionStatus: \"shouldNotReconnect\"\n };\n },\n disconnected(e) {\n return e.connectionStatus === \"disconnected\" && e.failedConnectionCount === 0 ? e : {\n ...e,\n connectionStatus: \"disconnected\",\n failedConnectionCount: 0\n };\n },\n clearDisconnectedAndMayNeedRestart(e, t) {\n return t.payload.chatStage !== void 0 && t.payload.chatStage !== \"chatEnd\" && e.connectionStatus !== \"shouldNotReconnect\" ? {\n ...e,\n socketDisconnectedAndMayNeedRestart: !1,\n connectionStatus: \"disconnected\",\n hasDisconnectedAtLeastOnce: !0\n } : {\n ...e,\n socketDisconnectedAndMayNeedRestart: !1\n };\n },\n messageFailedToSend(e) {\n return {\n ...e,\n failedConnectionCount: e.failedConnectionCount + 1\n };\n }\n }\n}), {\n resetConnectionStatus: Td,\n socketOpened: Md,\n socketClosed: Cd,\n socketError: Ff,\n setTokenStatus: Ft,\n setConnectionStatus: Ge,\n setConnectionURL: Id,\n negotiateFailure: Ad,\n messageReceived: Od,\n endChat: oo,\n disconnected: _d,\n clearDisconnectedAndMayNeedRestart: Nd,\n messageFailedToSend: Ba\n} = Pa.actions, Rd = Pa.reducer, ao = {\n isThrottled: !1\n}, Ua = it({\n name: \"messageComposer\",\n initialState: ao,\n reducers: {\n resetMessageComposer: () => ao,\n updateThrottling(e, t) {\n return t.payload.isThrottled === void 0 || t.payload.isThrottled === e.isThrottled ? e : { ...e, isThrottled: t.payload.isThrottled };\n }\n }\n}), { resetMessageComposer: kd, updateThrottling: so } = Ua.actions, Dd = Ua.reducer, xd = Ci({\n reducer: {\n chatApp: qc,\n connectionStatus: Rd,\n botInteraction: _c,\n messageComposer: Dd,\n chatMessages: Sd,\n chatUsers: wd,\n verification: _l\n }\n});\nfunction Ld(e, t, n, r, o) {\n r || (t.current && (t.current.ackId = \"\", t.current.timeout !== void 0 && clearTimeout(t.current.timeout)), t.current.timeout = setTimeout(() => {\n e(\n o === \"userMessage\" ? Da({\n setDeliveryStatusData: {\n messageId: n,\n newDeliveryStatus: \"failed\"\n }\n }) : xa()\n ), e(Ba());\n }, Xi), t.current.ackId = n);\n}\nfunction Pd(e, t, n, r) {\n return n.current === null || n.current.readyState === WebSocket.CLOSED ? [!1, !0, !1] : n.current.bufferedAmount > 0 ? e !== void 0 && new Date().getTime() < e ? [!1, !1, !0] : [!1, !0, !1] : t !== void 0 && !r ? [!1, !1, !1] : [!0, !1, !1];\n}\nfunction Bd(e, t) {\n const n = e[0], { outgoingMessageType: r, data: o, messageId: a } = n, s = r === \"startTyping\", i = a === void 0 ? t + \"_\" + crypto.randomUUID() : a;\n return [r, o, i, s, s ? \"Typing\" : r === \"heartbeat\" ? \"Heartbeat\" : \"SendMessageToGroup\"];\n}\nfunction Ud(e, t, n, r) {\n e(Ba()), e(fd()), t === \"userMessage\" ? r.current = setTimeout(() => {\n e(\n Da({\n setDeliveryStatusData: {\n messageId: n,\n newDeliveryStatus: \"failed\"\n }\n })\n );\n }, Ji) : t === \"heartbeat\" && e(xa());\n}\nfunction Fd(e, t, n, r, o, a, s, i, l) {\n if (t.length < 1)\n return;\n const [c, u, d, h, y] = Bd(t, n), [v, p, g] = Pd(\n r,\n o,\n a,\n h\n );\n if (!v) {\n p && Ud(e, c, d, i), g && l.current === void 0 && (l.current = setTimeout(() => {\n e(pd()), l.current = void 0;\n }, Qi));\n return;\n }\n Ia(y, u, d, a), e(dd()), Ld(\n e,\n s,\n d,\n h,\n c\n );\n}\nfunction Yt(e) {\n e.current !== void 0 && (clearTimeout(e.current), e.current = void 0);\n}\nfunction jd(e, t) {\n return e !== Math.floor(t);\n}\nfunction Vd(e, t, n, r, o, a) {\n if (!(!a.current || a.current.readyState !== WebSocket.OPEN)) {\n if (!o.current && t === \"normal\") {\n e(wt({ heartbeatData: { status: \"resetTimer\" } }));\n return;\n }\n switch (t) {\n case \"normal\": {\n jd(n, r) && e(wt({ heartbeatData: { status: \"getUpdate\" } }));\n break;\n }\n case \"awaitingResponse\":\n break;\n case \"getUpdate\": {\n Yt(o), e(\n ar({\n enqueueMessageData: {\n messageQueueData: {\n outgoingMessageType: \"heartbeat\",\n data: { SequentialId: n }\n }\n }\n })\n ), e(wt({ heartbeatData: { status: \"awaitingResponse\" } }));\n break;\n }\n case \"resetTimer\": {\n Yt(o), e(wt({ heartbeatData: { status: \"normal\" } })), o.current = setTimeout(() => {\n e(wt({ heartbeatData: { status: \"getUpdate\" } })), o.current = void 0;\n }, fc);\n break;\n }\n }\n }\n}\nfunction Hd(e) {\n if (e < 1)\n return 0;\n const t = Math.pow(2, e - 1) * ic, n = Math.round(Math.random() * Gi);\n return t + n;\n}\nfunction qd(e, t, n, r, o, a, s, i, l, c, u) {\n if (!!c) {\n if (t >= sc) {\n e(_d());\n return;\n }\n if (n) {\n e(Nd({ chatStage: l }));\n return;\n }\n switch (r) {\n case \"normal\":\n case \"negotiating\":\n case \"startingSocket\":\n break;\n case \"notStarted\": {\n _t() && (s(\"connectionManagement\"), e(Ge({ connectionStatus: \"negotiating\" })), e(oe({ chatStage: \"loadingChatData\" })));\n break;\n }\n case \"shouldNotReconnect\": {\n yt();\n break;\n }\n case \"disconnected\": {\n o > 7 ? e(Ge({ connectionStatus: \"shouldNotReconnect\" })) : a.current === void 0 && (a.current = setTimeout(() => {\n e(Ge({ connectionStatus: \"negotiate\" })), a.current = void 0;\n }, Hd(o)));\n break;\n }\n case \"negotiate\": {\n s(\n u === \"submittingDemographics\" ? \"verification\" : \"connectionManagement\"\n ), e(Ge({ connectionStatus: \"negotiating\" }));\n break;\n }\n case \"startSocket\": {\n i(), e(Ge({ connectionStatus: \"startingSocket\" }));\n break;\n }\n }\n }\n}\nfunction zd(e, t) {\n t.current !== void 0 && clearTimeout(t.current), t.current = setTimeout(() => {\n e(aa({ showIdleTimeoutWarning: !0 }));\n }, Zi);\n}\nfunction Wd(e) {\n if (e.key !== \"Tab\")\n return;\n const t = document.getElementById(\"ExpandedChat\"), n = document.activeElement, r = Ln(t, !1, \"first\"), o = Ln(t, !1, \"last\");\n e.shiftKey ? n === r && (o == null || o.focus(), e.preventDefault()) : n === o && (r == null || r.focus(), e.preventDefault());\n}\nfunction $d(e) {\n if (e)\n return () => {\n };\n const t = (n) => {\n Wd(n);\n };\n return document.addEventListener(\"keydown\", t), () => {\n document.removeEventListener(\"keydown\", t);\n };\n}\nfunction Gd(e) {\n return document.addEventListener(\"click\", e), document.addEventListener(\"keydown\", e), document.addEventListener(\"scroll\", e), () => {\n document.removeEventListener(\"click\", e), document.removeEventListener(\"keydown\", e), document.removeEventListener(\"scroll\", e);\n };\n}\nfunction Yd(e) {\n const t = () => {\n document.visibilityState === \"visible\" && (document.title = e.current);\n };\n return document.addEventListener(\"visibilitychange\", t), () => {\n document.removeEventListener(\"visibilitychange\", t);\n };\n}\nfunction io(e) {\n return e.altKey && e.shiftKey;\n}\nfunction Kd() {\n let e = !1, t = document.getElementById(\"ExpandedChat\");\n return (t === null || t.classList.contains(\"hidden\")) && (e = !0, t = document.getElementById(\"MinimizedChat\")), [t, e];\n}\nfunction Qd(e, t, n, r) {\n t || (r.current = document.getElementById(\"ChatScrollingSection\").scrollTop);\n const o = window.innerWidth <= oc && !t, a = Ln(document.body);\n n.contains(a) ? e(at({ isMinimized: !0, shouldFocus: !0 })) : (o && e(at({ isMinimized: !0, shouldFocus: !1 })), a == null || a.focus());\n}\nfunction Jd(e, t) {\n if (!e || !t)\n return;\n const n = document.activeElement, [r, o] = Kd();\n r != null && r.contains(n) ? Qd(e, o, r, t) : e(Xn({ shouldFocus: !0 }));\n}\nfunction Xd(e, t) {\n if (!e || !t)\n return;\n const n = document.getElementById(\"ExpandedChat\");\n n === null || n.classList.contains(\"hidden\") || (t.current = document.getElementById(\"ChatScrollingSection\").scrollTop, e(at({ isMinimized: !0, shouldFocus: !0 })));\n}\nfunction ht(e, t, n, r, o, a, s, i, l) {\n Y(() => {\n if (i || l)\n return () => {\n };\n const c = (u) => {\n var d;\n if (u.key.toUpperCase() === e)\n switch (e) {\n case Ho:\n n && n(r, o, -1);\n break;\n case Vo:\n n && n(r, o, 1);\n break;\n case qo:\n n && n(0, 0, 0);\n break;\n case zo:\n Xd(a, s);\n break;\n case Wo:\n io(u) && ((d = document.getElementById(\"MessageInputTextArea\")) == null || d.focus());\n break;\n case $o:\n io(u) && Jd(a, s);\n break;\n }\n };\n return window.addEventListener(\"keydown\", c), t && window.removeEventListener(\"keydown\", c), () => {\n window.removeEventListener(\"keydown\", c);\n };\n }, [\n r,\n a,\n l,\n i,\n e,\n o,\n s,\n n,\n t\n ]);\n}\nfunction Zd(e, t, n, r) {\n ht(\n zo,\n !1,\n void 0,\n void 0,\n void 0,\n e,\n t,\n !n,\n !r\n ), ht(\n Wo,\n !1,\n void 0,\n void 0,\n void 0,\n e,\n t,\n !n,\n !r\n ), ht(\n $o,\n !1,\n void 0,\n void 0,\n void 0,\n e,\n t,\n !n,\n !r\n );\n}\nfunction ef(e, t, n, r, o, a, s, i = !0) {\n const l = s === \"nonmodal\";\n Zd(e, r, l, o !== \"notStarted\"), Y(() => {\n if (o === \"notStarted\")\n return () => {\n };\n const u = i ? Gd(() => {\n zd(e, n);\n }) : () => {\n }, d = Yd(t), h = l ? $d(a) : () => {\n };\n return () => {\n d(), u(), h();\n };\n }, [o, e, n, a, l, t, i]);\n}\nfunction tf(e, t) {\n return Me(() => {\n const r = /* @__PURE__ */ new Set();\n return e.filter((a) => r.has(a.sequentialId) ? !1 : (r.add(a.sequentialId), !0)).map((a) => t[a.messageId]);\n }, [t, e]);\n}\nfunction co(e, t) {\n var n, r;\n !t || (e(\n Ca({\n verificationProps: {\n formApiKey: \"\",\n formURL: \"\",\n phone: (n = t == null ? void 0 : t.phone) != null ? n : \"\"\n }\n })\n ), e(\n ra({\n botInteractionSettings: {\n botSession: \"\",\n negotiateEndpoint: (t == null ? void 0 : t.nebulaURL) + \"/chat/NegotiateClient\",\n botEndpoint: (t == null ? void 0 : t.nebulaURL) + \"/bot/SendBotMessage\",\n configInitializeEndpoint: (t == null ? void 0 : t.nebulaURL) + \"/bot/Initialize\",\n apiKey: (r = t == null ? void 0 : t.apiKey) != null ? r : \"\",\n enabled: !1,\n botHistoryEndpoint: (t == null ? void 0 : t.nebulaURL) + \"/bot/LoadBotHistory\"\n }\n })\n ), e(\n Vc({\n branding: t.branding\n })\n ));\n}\nconst nf = {\n blankMessage: \"Cannot send a blank message\",\n throttled: \"Please wait a moment before sending more messages\"\n}, rf = {\n underLimit: \"{0} characters remaining\",\n overLimit: \"The message exceeds the maximum length allowed of 1,000 by {0}\"\n}, of = {\n placeholder: \"Type a message\",\n send: \"Send\"\n}, Fa = {\n bot: \"ChatBot\"\n}, af = {\n chatBot: `${Fa.bot} is thinking`,\n typing: \"{0} is typing\",\n multiple: \"Multiple people are typing\"\n}, Tn = {\n unknown: \"Unknown\",\n self: \"You\",\n system: \"System\",\n bot: Fa.bot\n}, uo = {\n sent: \"Sent\",\n sending: \"Sending...\",\n retryButtonText: \"Message failed to send. Retry\"\n}, sf = {\n newMessage: \"New Message\"\n}, cf = {\n poweredBy: \"Powered by\",\n a11yDescription: \"Powered by Epic\"\n};\nfunction uf(e, t) {\n e(\n at({\n isMinimized: !1,\n shouldFocus: !0,\n chatStage: t === \"notStarted\" ? \"bot\" : void 0\n })\n );\n}\nconst lf = R(function(t) {\n const {\n chatTitle: n\n } = t, r = be(), o = A((h) => h.chatMessages.numUnreadMessages), a = A((h) => h.chatApp.isMinimized), s = A((h) => h.chatApp.chatStage), i = !a, l = o > 0, c = (l ? \"(\" + o + \")\" : \"\") + (n ? \" \" + n : \"\");\n let u = (l ? \" unreadIndicator\" : \"\") + (i ? \" hidden\" : \"\");\n c === \"\" ? u += \" minimizedChatNoText\" : u += \" minimizedChatWithText\";\n const d = x(() => {\n uf(r, s);\n }, [r, s]);\n return /* @__PURE__ */ _(\"button\", {\n id: \"MinimizedChat\",\n className: \"minimizedChat\" + u,\n onClick: d,\n \"data-testid\": \"minimized-chat\",\n children: [/* @__PURE__ */ f(ha, {\n className: \"flipChatIconForRtl\"\n }), /* @__PURE__ */ f(ye, {\n text: c,\n delay: \"immediate\",\n className: \"minTitle\",\n hide: c === \"\"\n }), l ? /* @__PURE__ */ f(Jr, {\n className: \"notificationDot\"\n }) : null, !l && s === \"chat\" ? /* @__PURE__ */ f(Jr, {\n className: \"ongoingChatNotificationDot\"\n }) : null]\n });\n});\nfunction Mn(e) {\n return (t, n, r) => {\n if (r === void 0 || t === void 0 || n === void 0 || r === 0) {\n e(-1);\n return;\n }\n if (t + r < 0) {\n e(n - 1);\n return;\n }\n if (t + r >= n) {\n e(0);\n return;\n }\n e(t + r);\n };\n}\nconst df = R(function() {\n return /* @__PURE__ */ f(\"svg\", {\n className: \"flipChatIconForRtl\",\n xmlns: \"http://www.w3.org/2000/svg\",\n id: \"_flat_arrowleft\",\n viewBox: \"0 0 32 32\",\n children: /* @__PURE__ */ f(\"path\", {\n d: \"M26.69 14.65H10.17l7.51-7.51a.3.3 0 0 0 0-.43l-1.53-1.52a.3.3 0 0 0-.43 0L5.09 15.82a.3.3 0 0 0 0 .43l10.63 10.63a.3.3 0 0 0 .43 0l1.52-1.51a.31.31 0 0 0 0-.44l-7.5-7.51h16.52a.31.31 0 0 0 .31-.31V15a.31.31 0 0 0-.31-.35z\"\n })\n });\n}), ff = R(function(t) {\n const {\n onChoose: n,\n optionLabel: r,\n isBack: o,\n setFocusedIndex: a,\n index: s,\n hasOverlay: i,\n shouldFocus: l\n } = t;\n let c = \"chatButton \";\n c += o ? \"backButton \" : \"\";\n let u = G(null);\n return l || (u = void 0), Y(() => {\n l && !i && u && u.current && !Pe() && u.current.focus();\n }, [u, l, i]), /* @__PURE__ */ _(\"button\", {\n ref: u,\n onClick: n,\n className: c,\n tabIndex: s === 0 && !i ? void 0 : -1,\n role: \"listitem\",\n onFocus: () => a(s),\n children: [o && /* @__PURE__ */ f(df, {}), r]\n });\n}), hf = R(function(t) {\n const {\n botMessageInfo: n,\n onUserChooseOption: r,\n hasOverlay: o\n } = t, {\n options: a\n } = n, [s, i] = ie(-1), l = a.map((c, u) => {\n const {\n optionLabel: d,\n optionStyle: h\n } = c, y = h === \"GoBack\";\n return /* @__PURE__ */ _(ns, {\n children: [y && /* @__PURE__ */ f(\"div\", {\n className: \"break\"\n }), /* @__PURE__ */ f(ff, {\n onChoose: () => {\n r(d);\n },\n optionLabel: d,\n isBack: y,\n setFocusedIndex: i,\n index: u,\n hasOverlay: o,\n shouldFocus: u === s\n })]\n }, d);\n });\n return ht(Vo, s < 0, Mn(i), s, l.length), ht(Ho, s < 0, Mn(i), s, l.length), ht(qo, s < 0, Mn(i), s, l.length), /* @__PURE__ */ f(\"div\", {\n role: \"listitem\",\n children: /* @__PURE__ */ f(\"div\", {\n className: \"botOptionsList\",\n role: \"list\",\n children: l\n })\n });\n}), gf = R(function(t) {\n const {\n message: n,\n isMostRecentUserMessage: r,\n onUserChooseOption: o,\n onRetrySendMessage: a,\n allowRetry: s,\n messagePlacement: i,\n hasOverlay: l,\n hasMetadataAbove: c,\n shouldRenderAllLinks: u,\n strings: d,\n shouldShowRetryIcon: h,\n shouldBeTabbable: y,\n isLastMessage: v,\n chatStage: p\n } = t, {\n hideSuggestions: g,\n botMessageInfo: E,\n isMe: b,\n messageBody: T,\n messageDeliveryStatus: w\n } = n, [m, I] = d, k = b && (i === \"group-last\" || i === \"single\" || w === \"failed\"), L = Sa(s), P = x(() => {\n a(n);\n }, [n, a]);\n return /* @__PURE__ */ _(B, {\n children: [/* @__PURE__ */ f(Ea, {\n messageType: \"bot\",\n messageBody: T,\n isMe: b,\n messagePlacement: i,\n hasMetadataAbove: c,\n shouldRenderAllLinks: u,\n shouldRenderSenderIcon: i === \"group-last\" || i === \"single\",\n strings: m,\n shouldBeTabbable: y,\n shouldRenderRetryIcon: s && w === \"failed\",\n onRetry: P\n }), b && k && /* @__PURE__ */ f(ba, {\n retryStatus: L,\n messageDeliveryStatus: w,\n isMostRecentUserMessage: r,\n onRetry: P,\n strings: I,\n shouldShowRetryIcon: h\n }), !b && !g && p === \"bot\" && v && /* @__PURE__ */ f(hf, {\n onUserChooseOption: o,\n botMessageInfo: E,\n hasOverlay: l\n })]\n });\n}), mf = R(function(t) {\n const {\n messages: n,\n onUserTrySendNewMessage: r,\n onRetrySendMessage: o,\n allowRetry: a,\n hasUserChatMessages: s,\n hasOverlay: i,\n shouldRenderAllLinks: l,\n strings: c,\n shouldShowRetryIcon: u,\n shouldLastMessageBeTabbable: d,\n chatStage: h\n } = t, [y] = c, v = x((E) => {\n r(E, !0);\n }, [r]), p = Me(() => Jt(\"user\", n), [n]), g = n.map((E, b) => {\n let {\n isMe: T,\n displayTime: w\n } = E;\n const m = b > 0 ? n[b - 1] : void 0, I = b + 1 < n.length ? n[b + 1] : void 0, [k, L, P, , V, j] = va(E, m, I, void 0, y);\n return /* @__PURE__ */ f(\"li\", {\n role: \"presentation\",\n children: /* @__PURE__ */ f(nr, {\n messageType: T ? \"self\" : \"bot\",\n horizontalAlignment: k,\n showTime: P,\n showName: L,\n displayTime: w,\n a11ySummary: V,\n strings: y,\n children: /* @__PURE__ */ f(gf, {\n allowRetry: a,\n onRetrySendMessage: o,\n onUserChooseOption: v,\n message: E,\n isMostRecentUserMessage: !s && T && b >= p,\n messagePlacement: j,\n hasOverlay: i,\n hasMetadataAbove: L || P,\n shouldRenderAllLinks: l,\n strings: c,\n shouldShowRetryIcon: u,\n shouldBeTabbable: b === n.length - 1 && d,\n isLastMessage: b === n.length - 1,\n chatStage: h\n })\n })\n }, b);\n });\n return /* @__PURE__ */ f(B, {\n children: g\n });\n}), le = R(function(t) {\n const {\n shape: n\n } = t, [r, o] = ie(!1);\n return setTimeout(() => {\n o(!0);\n }, tc), /* @__PURE__ */ f(B, {\n children: r && /* @__PURE__ */ f(\"div\", {\n className: \"skeleton-\" + n,\n \"data-testid\": \"skeleton\"\n })\n });\n}), pf = R(function() {\n return /* @__PURE__ */ _(\"div\", {\n style: {\n paddingTop: \".5rem\"\n },\n children: [/* @__PURE__ */ f(le, {\n shape: \"heading\"\n }), /* @__PURE__ */ f(le, {\n shape: \"subheading\"\n }), /* @__PURE__ */ f(le, {\n shape: \"label\"\n }), /* @__PURE__ */ f(le, {\n shape: \"field\"\n }), /* @__PURE__ */ f(le, {\n shape: \"label\"\n }), /* @__PURE__ */ f(le, {\n shape: \"field\"\n }), /* @__PURE__ */ f(le, {\n shape: \"label\"\n }), /* @__PURE__ */ f(le, {\n shape: \"field\"\n }), /* @__PURE__ */ f(le, {\n shape: \"label\"\n }), /* @__PURE__ */ f(le, {\n shape: \"field\"\n }), /* @__PURE__ */ f(le, {\n shape: \"label\"\n }), /* @__PURE__ */ f(le, {\n shape: \"field\"\n }), /* @__PURE__ */ f(le, {\n shape: \"button\"\n }), /* @__PURE__ */ f(le, {\n shape: \"button\"\n })]\n });\n}), yf = (e) => {\n let [t, n] = ie(e ? \"loading\" : \"idle\");\n const r = t !== \"loading\" && !!lo(e != null ? e : \"\");\n return Y(() => {\n if (!e) {\n n(\"idle\");\n return;\n }\n if (r) {\n n(\"ready\");\n return;\n }\n let o = lo(e);\n o = document.createElement(\"script\"), o.src = e, o.defer = !1, document.head.appendChild(o), o.onload = () => {\n n(\"ready\");\n }, o.onerror = () => {\n n(\"error\");\n };\n }, [e, r]), t;\n};\nfunction lo(e) {\n return document.head.querySelector(`script[src=\"${e}\"]`);\n}\nconst vf = R(function(t) {\n const {\n url: n,\n apiKey: r,\n widgetType: o,\n additionalParams: a\n } = t, s = G(null), i = \"mycWidget-\" + o, l = n ? n + \"/Scripts/lib/Widget/widget_sdk.js\" : \"\", c = yf(l);\n return Y(() => {\n var h;\n if (c !== \"ready\" || !s.current || document.getElementById(i))\n return;\n if ((h = s.current) != null && h.hasChildNodes()) {\n s.current.scrollIntoView({\n behavior: \"smooth\",\n block: \"start\"\n });\n return;\n }\n let u = document.createElement(\"div\");\n u.setAttribute(\"id\", i), u.setAttribute(\"visibility\", \"hidden\"), s.current.appendChild(u), $i({\n url: n,\n apiKey: r,\n widgetType: o,\n containerId: i,\n containerRef: u,\n additionalParams: a\n });\n }, [c, n, r, o, i, a]), !n || !r || !o || c !== \"ready\" ? /* @__PURE__ */ f(B, {}) : /* @__PURE__ */ f(\"div\", {\n ref: s,\n className: \"mycWidgetContainer\",\n \"data-testid\": \"mychart-widget\"\n });\n}), Sf = R(function(t) {\n const {\n url: n,\n apiKey: r,\n additionalParams: o,\n verificationStatus: a,\n onSubmit: s,\n onCancel: i,\n onError: l\n } = t;\n let c = G(void 0);\n const [u, d] = ie(!1), [h, y] = ie(!1), [v, p] = ie(!1), g = h ? \"\" : \"hidden\", E = x((m) => {\n var I, k;\n if (((I = m == null ? void 0 : m.data) == null ? void 0 : I.method) === \"formSubmitted\" && (n == null ? void 0 : n.includes(m.origin)) && !v) {\n if (p(!0), !m.data.success) {\n dt(\"Error submitting the demographics or follow-up form.\"), l();\n return;\n }\n const L = (k = m.data.queueDepth) != null ? k : 0;\n s(m.data.formType, L, m.data.negotiateToken);\n }\n }, [v, p, s, l, n]), b = x((m) => {\n var I;\n if (((I = m == null ? void 0 : m.data) == null ? void 0 : I.method) === \"formCanceled\" && (n == null ? void 0 : n.includes(m.origin)) && !u) {\n d(!0), i();\n return;\n }\n }, [u, d, i, n]), T = be(), w = x(async (m) => {\n var I, k;\n if (((I = m == null ? void 0 : m.data) == null ? void 0 : I.method) === \"formLoaded\" && (n == null ? void 0 : n.includes(m.origin)) && !h) {\n if (y(!0), clearTimeout(c.current), !((k = m == null ? void 0 : m.data) != null && k.success)) {\n dt(\"Error loading the demographics or follow-up form.\"), l();\n return;\n }\n if (m.data.formType === Ot.Demographics) {\n T(vt({\n status: \"demographicEntry\"\n }));\n return;\n }\n if (m.data.formType === Ot.FollowUp) {\n T(vt({\n status: \"followUpEntry\"\n }));\n return;\n } else {\n l();\n return;\n }\n }\n }, [T, h, y, l, n, c]);\n return Y(() => (window.addEventListener(\"message\", E), window.addEventListener(\"message\", b), window.addEventListener(\"message\", w), () => {\n window.removeEventListener(\"message\", E), window.removeEventListener(\"message\", b), window.removeEventListener(\"message\", w);\n }), [E, b, w]), Y(() => {\n if (!c.current)\n return c.current = setTimeout(() => {\n dt(\"Error loading the demographics or follow-up form.\"), l();\n }, nc), () => clearTimeout(c.current);\n }, [a, h, c, l]), /* @__PURE__ */ _(\"div\", {\n className: \"prospectFormWidget\",\n \"data-testid\": \"prospect-form-widget\",\n children: [!h && /* @__PURE__ */ f(pf, {}), /* @__PURE__ */ f(\"div\", {\n className: g,\n children: /* @__PURE__ */ f(vf, {\n widgetType: \"prospectform\",\n url: n,\n apiKey: r,\n additionalParams: o\n }, o == null ? void 0 : o.queueid)\n })]\n });\n}), bf = R(function(t) {\n const {\n formattedPhoneNumber: n,\n onCancel: r\n } = t, o = wa(n);\n return /* @__PURE__ */ _(\"div\", {\n \"data-testid\": \"call-representative\",\n children: [/* @__PURE__ */ f(\"div\", {\n className: \"chatHeading\",\n children: \"Call us to speak with a representative\"\n }), /* @__PURE__ */ _(\"div\", {\n className: \"chatSubHeading\",\n children: [/* @__PURE__ */ f(\"p\", {\n className: \"inline\",\n children: \"Call\"\n }), /* @__PURE__ */ f(\"p\", {\n className: \"inline phoneNumberLink\",\n children: o !== \"\" ? /* @__PURE__ */ f(\"a\", {\n href: o,\n children: n\n }) : /* @__PURE__ */ f(B, {\n children: n\n })\n }), /* @__PURE__ */ f(\"div\", {\n className: \"middle\",\n children: /* @__PURE__ */ f(pa, {\n children: /* @__PURE__ */ f(Pn, {\n text: \"Go Back\",\n tone: \"neutral\",\n priority: \"secondary\",\n onClick: r\n })\n })\n })]\n })]\n });\n});\nfunction Ef(e) {\n let t = \"\", n = \"\";\n return e === \"submittingDemographics\" ? (t = \"Chat with a representative\", n = \"You are now being connected to a representative. Please wait a moment.\", [t, n]) : e === \"demographicEntry\" ? (t = \"Chat with a representative\", n = \"Let's get to know you before we connect you with a representative.\", [t, n]) : e === \"followUpEntry\" ? (t = \"We're here to help\", n = \"Please share how we can assist you, and we'll be in touch soon.\", [t, n]) : [t, n];\n}\nconst wf = R(function(t) {\n var E;\n const {\n chatId: n,\n queueId: r,\n messageResponseDelayTimeoutRef: o,\n strings: a\n } = t, [s, i, l] = Bl(o), c = A((b) => b.verification.verificationProps), u = A((b) => b.chatApp.chatStage), d = A((b) => b.verification.status), h = {\n queueid: r != null ? r : \"\",\n chatid: n != null ? n : \"\"\n }, [y, v] = Ef(d), p = d === \"submissionError\" || h.chatid === \"\" || h.queueid === \"\" || c.formApiKey === \"\" || c.formURL === \"\";\n if (p) {\n const T = [[\"chatid\", h.chatid], [\"queueid\", h.queueid], [\"formApiKey\", c.formApiKey], [\"formURL\", c.formURL]].filter(([w, m]) => m === \"\");\n if (T.length > 0) {\n const w = T.map(([m, I]) => m).join(\", \");\n pt(\"Error loading the demographic or follow up form.\", w);\n }\n }\n const g = G(null);\n return Y(() => {\n d !== \"demographicEntry\" && d !== \"followUpEntry\" || (Kn() ? setTimeout(() => {\n g.current && g.current.scrollIntoView && (g.current.scrollIntoView({\n block: \"start\",\n behavior: \"smooth\"\n }), g.current.scrollTop = 0);\n }, rc) : g.current && g.current.scrollIntoView && g.current.scrollIntoView({\n block: \"start\",\n behavior: \"auto\"\n }));\n }, [d]), u !== \"verification\" ? /* @__PURE__ */ f(B, {}) : /* @__PURE__ */ f(\"span\", {\n id: \"formContainer\",\n className: \"demographicVerificationForm\",\n \"data-testid\": \"demographic-verification-form\",\n ref: g,\n role: \"form\",\n children: /* @__PURE__ */ f(nr, {\n messageType: \"system\",\n horizontalAlignment: \"left\",\n showTime: !1,\n showName: !1,\n senderName: \"\",\n displayTime: \"\",\n strings: a,\n a11ySummary: \"\",\n children: /* @__PURE__ */ _(B, {\n children: [p && /* @__PURE__ */ f(ye, {\n children: /* @__PURE__ */ f(bf, {\n formattedPhoneNumber: (E = c.phone) != null ? E : \"\",\n onCancel: i\n })\n }), (d === \"normal\" || d === \"demographicEntry\" || d === \"followUpEntry\") && !p && /* @__PURE__ */ _(B, {\n children: [y && /* @__PURE__ */ f(ye, {\n className: \"chatHeading\",\n text: y\n }), v && /* @__PURE__ */ f(ye, {\n className: \"chatSubHeading\",\n text: v\n }), /* @__PURE__ */ f(Sf, {\n url: c.formURL,\n apiKey: c.formApiKey,\n additionalParams: h,\n verificationStatus: d,\n onSubmit: s,\n onCancel: i,\n onError: l\n })]\n })]\n })\n })\n }, \"verificationForm\");\n});\nfunction Tf(e, t, n) {\n t === \"expired\" && n !== \"expired\" && e(Ce({ overlayType: \"expired\" }));\n}\nfunction Mf(e, t, n, r) {\n !t || (e(Ce({ overlayType: \"timeout\" })), e(aa({ showIdleTimeoutWarning: !1 })), n.current = setTimeout(() => {\n r();\n }, ec));\n}\nfunction fo(e, t, n) {\n e.forEach((r) => {\n Yt(r);\n }), Object.keys(t.current).forEach((r) => {\n clearTimeout(t.current[r]);\n }), n.current.timeout !== void 0 && clearTimeout(n.current.timeout);\n}\nfunction Cf(e, t, n, r, o) {\n const a = {\n endpoint: t,\n apiKey: n,\n queueSession: r,\n negotiateToken: o\n }, s = (l, c, u, d) => {\n if (Wi(c), d === \"refreshToken\") {\n e(Ft({ tokenStatus: \"reset\" }));\n return;\n }\n e(yd({ userId: u })), e(\n Id({\n url: l\n })\n ), e(\n Ge({\n connectionStatus: \"startSocket\"\n })\n ), d === \"verification\" ? (e(jc({ creationTime: new Date().toISOString() })), e(oe({ chatStage: \"awaitingAgent\" })), e(Oc())) : d === \"connectionManagement\" && e(oe({ chatStage: \"loadingChatData\" }));\n }, i = (l, c) => {\n if (pt(\"Failed to negotiate with server\", [\"Error code: \" + c]), c === ft.ChatEnded) {\n yt(), e(oe({ chatStage: \"expired\" }));\n return;\n } else if (c === ft.Forbidden || c === ft.InternalServerError) {\n yt(), e(Ce({ overlayType: \"webSocketError\" })), e(\n Ge({\n connectionStatus: \"shouldNotReconnect\"\n })\n );\n return;\n }\n e(l === \"verification\" ? vt({ status: \"submissionError\" }) : Ad({\n tokenStatus: l === \"refreshToken\" ? \"shouldRefresh\" : void 0\n }));\n };\n return (l) => {\n Nl(a, s, i, l);\n };\n}\nfunction If(e, t, n, r, o) {\n var a, s, i, l;\n !t || (e(Xn({ shouldFocus: !1 })), n ? (a = document.getElementById(\"MinimizedChat\")) == null || a.focus() : o && o !== \"none\" ? (s = document.getElementById(\"ChatOverlay\")) == null || s.focus() : r ? (i = document.getElementById(\"MessageInputTextArea\")) == null || i.focus() : (l = document.getElementById(\"OptionsIcon\")) == null || l.focus());\n}\nfunction Af(e, t, n, r) {\n const o = t.target.value, a = Hi(o, () => {\n e(Ce({ overlayType: \"illegalCharacter\" }));\n });\n return n === \"chat\" && r(!0), a;\n}\nfunction Of(e, t, n) {\n t && n === \"awaitingAgent\" ? e(oe({ chatStage: \"chat\" })) : !t && n === \"chat\" && e(oe({ chatStage: \"awaitingAgent\" }));\n}\nfunction _f(e, t) {\n e !== \"none\" && t();\n}\nfunction Nf(e, t, n, r, o, a) {\n r !== \"awaitingAgent\" && r !== \"chat\" || t === \"normal\" && (n === \"normal\" || n === \"notStarted\" || (n === \"reset\" && (e(Ft({ tokenStatus: \"normal\" })), Yt(a), a.current = setTimeout(() => {\n e(Ft({ tokenStatus: \"shouldRefresh\" }));\n }, Ki)), n === \"shouldRefresh\" && (o(\"refreshToken\"), e(Ft({ tokenStatus: \"refreshing\" })))));\n}\nfunction Cn(e, t, n, r = !1, o) {\n return () => {\n t != null && t.current && (Ia(\n \"EndChat\",\n { reason: \"user\" },\n o + \"_\" + crypto.randomUUID(),\n t\n ), t.current.close()), yt(), e(at({ isMinimized: !0 })), n(r);\n };\n}\nfunction ja(e, t, n) {\n const r = !!n.current.me;\n t && !r && (e(\n ar({\n enqueueMessageData: {\n messageQueueData: { outgoingMessageType: \"startTyping\", data: { IsTyping: !0 } }\n }\n })\n ), n.current.me = setTimeout(() => {\n ja(e, !1, n), clearTimeout(n.current.me), delete n.current.me;\n }, Fo));\n}\nconst In = R(function(t) {\n const {\n buttonFunctionalityExplanation: n,\n onClick: r,\n IconSVG: o,\n className: a,\n id: s\n } = t, i = a ? a + \" chatButton titleBar\" : \" chatButton titleBar\";\n return /* @__PURE__ */ f(\"button\", {\n title: n,\n onClick: r,\n className: i,\n id: s,\n children: /* @__PURE__ */ f(o, {})\n });\n}), Rf = R(function(t) {\n const {\n title: n,\n onClose: r,\n onMin: o,\n onHelp: a\n } = t;\n return /* @__PURE__ */ _(\"div\", {\n className: \"titleBar\",\n children: [/* @__PURE__ */ f(ha, {\n \"aria-hidden\": !0,\n className: \"chatIconTitlebar\"\n }), /* @__PURE__ */ f(\"div\", {\n className: \"title\",\n children: /* @__PURE__ */ f(\"h2\", {\n children: n\n })\n }), /* @__PURE__ */ _(\"span\", {\n className: \"barButtons\",\n children: [/* @__PURE__ */ f(In, {\n buttonFunctionalityExplanation: \"Settings\",\n onClick: a,\n className: \"helpButton\",\n IconSVG: cu,\n id: \"OptionsIcon\"\n }), /* @__PURE__ */ f(In, {\n buttonFunctionalityExplanation: \"Minimize\",\n onClick: o,\n IconSVG: iu,\n id: \"MinimizeChatTitleBarIcon\"\n }), /* @__PURE__ */ f(In, {\n buttonFunctionalityExplanation: \"End chat\",\n onClick: r,\n IconSVG: ga,\n className: \"closeButton\",\n id: \"CloseChatTitleBarIcon\"\n })]\n })]\n });\n}), kf = R(function(t) {\n const {\n children: n\n } = t;\n return /* @__PURE__ */ f(\"ul\", {\n className: \"messageList\",\n children: n\n });\n});\nfunction Df(e) {\n var cr, ur, lr;\n const {\n publicProps: t,\n onNewMessageNotification: n,\n onUpdateUnreadCount: r\n } = e, o = be(), [a, s] = gl(), [i, l, c, u, d, h, y, v, p, g, E, b, T, w] = fl();\n Y(() => (co(o, t), () => {\n fo([v, d, h, b, g, y, w], p, E);\n }), []);\n const m = A((M) => M.chatApp.chatStage), I = A((M) => M.chatApp.isLoadingBotHistory), k = A((M) => M.chatApp.isMinimized);\n ef(o, l, d, c, m, k, \"nonmodal\", !0);\n const L = x((M) => {\n yt(), fo([v, d, h, b, g, y, w], p, E), o(ld()), o(Cc()), o(Lc()), o(Ed()), o(Td()), o(kd()), o(Ol()), M && o(oe({\n chatStage: \"expired\"\n })), co(o, t), sessionStorage.getItem(Wt) === \"true\" && o(Zn({\n allowSound: !0\n })), setTimeout(() => {\n var ue;\n (ue = document.getElementById(\"MinimizedChat\")) == null || ue.focus();\n }, Yi);\n }, [o, t, v, d, h, b, g, y, w, p, E]), [P, V] = ie(!1), j = x((M) => {\n if (Pe())\n return;\n const ue = document.querySelector(\"#ExpandedChat\");\n if (ue && ue.contains(M.target)) {\n if (!P)\n return;\n o(Xn({\n isMinimized: !1,\n shouldFocus: !0\n })), M == null || M.preventDefault(), V(!1);\n } else\n P || V(!0);\n }, [o, P, V]);\n Y(() => (window.addEventListener(\"mousedown\", j), () => {\n window.removeEventListener(\"mousedown\", j);\n }), [j]);\n const K = A((M) => M.chatApp.overlayType), ce = A((M) => M.chatApp.shouldFocus);\n Y(() => {\n If(o, ce, k, m !== \"chatEnd\" && m !== \"verification\", K);\n }, [o, k, ce, K, m]);\n const te = A((M) => M.chatMessages.userId), _e = A((M) => M.chatApp.showIdleTimeoutWarning);\n Mf(o, _e, h, Cn(o, i, L, !0, te));\n const X = A((M) => M.chatMessages.numUnreadMessages), de = A((M) => M.chatMessages.hasNewMessageNotification), ae = A((M) => M.chatApp.allowSound);\n Y(() => {\n if (r) {\n const M = setTimeout(() => {\n r(X);\n }, 100);\n return () => clearTimeout(M);\n }\n }, [X, r]);\n const Ee = x(() => {\n o(md());\n }, [o]);\n Y(() => {\n n && (de || X > 0) && n(ae);\n }, [de, X, ae, n]);\n const Be = x(() => {\n o(Md());\n }, [o]), we = x(() => {\n o(Cd());\n }, [o]), Ne = x(() => {\n o(Ce({\n overlayType: \"webSocketError\"\n })), o(oe({\n chatStage: \"chatEnd\"\n })), yt();\n }, [o]), Ze = Vl(te, E, p, i), Re = pl(Ze, Be, we, Ne, i), ke = A((M) => M.botInteraction.queueSession), Ie = A((M) => M.chatApp.negotiateToken), Ue = A((M) => M.botInteraction.botInteractionSettings.negotiateEndpoint), Fe = A((M) => M.botInteraction.botInteractionSettings.apiKey), je = A((M) => M.botInteraction.botInteractionSettings.enabled), De = x((M) => {\n Cf(o, Ue, Fe, ke, Ie)(M);\n }, [o, Ue, Fe, ke, Ie]), Ve = A((M) => M.connectionStatus.failedConnectionCount), D = A((M) => M.connectionStatus.socketDisconnectedAndMayNeedRestart), fe = A((M) => M.connectionStatus.connectionStatus), N = A((M) => M.connectionStatus.reconnectAttemptCount), se = A((M) => M.connectionStatus.tokenStatus), Te = A((M) => M.verification.status);\n Y(() => {\n qd(o, Ve, D, fe, N, b, De, Re, m, je, Te);\n }, [o, Te, De, Re, m, b, D, fe, Ve, N, je]), Nf(o, fe, se, m, De, v);\n const [He, Rt, en] = Al(\n c,\n Cn(o, null, L, !1, te)\n ), [kt, Dt] = dl(), [xt, Lt, tn, nn, Pt, rn, on, an] = bl(Cn(o, i, L, !1, te), h);\n Y(() => {\n _f(K, Dt);\n }, [Dt, K]);\n const Bt = x((M) => {\n ja(o, M, p);\n }, [o, p]), S = A((M) => M.chatApp.retryAttempts), [C, O] = Cl(u, w, te, S), [U, Q] = zl(u, w, y, S), J = x((M) => Af(o, M, m, Bt), [o, m, Bt]), H = A((M) => M.chatMessages.queuedMessages), F = A((M) => M.chatMessages.socketSendSlackTime), ne = A((M) => M.chatMessages.messageAwaitingAck), me = A((M) => M.chatMessages.heartbeatStatus), Ae = A((M) => M.chatMessages.highestGaplessSequentialId), qe = A((M) => M.chatMessages.highestSequentialId);\n Fd(o, H, te, F, ne, i, E, y, T), Y(() => {\n m === \"verification\" && o(he({\n chatUserStartupDataArray: [{\n userId: ve,\n isTyping: !1\n }]\n }));\n }, [m, o]), Of(o, s, m), Vd(o, me, Ae, qe, g, i), Tf(o, m, K), Kl(y);\n const et = A((M) => M.chatMessages), Va = A((M) => M.chatUsers), {\n messageMap: Ha,\n sortedMessageArray: qa\n } = et, za = tf(qa, Ha), Wa = A((M) => {\n var ue, tt;\n if (M.chatApp.chatStage === \"chat\" && ((ue = M.chatMessages.sortedMessageArray) == null ? void 0 : ue.length) > 0) {\n const Et = M.chatMessages.sortedMessageArray[M.chatMessages.sortedMessageArray.length - 1];\n return M.chatMessages.messageMap[Et.messageId].messageType === \"self\";\n }\n return M.chatApp.chatStage === \"bot\" && ((tt = M.botInteraction.messages) == null ? void 0 : tt.length) > 0 ? M.botInteraction.messages[M.botInteraction.messages.length - 1].isMe : !1;\n }), $a = A((M) => {\n const ue = M.chatMessages.sortedMessageArray.length, tt = M.botInteraction.messages.length;\n return ue + tt;\n }), Ga = x((M) => Ql(M), []), {\n isThrottled: sr\n } = A((M) => M.messageComposer), sn = A((M) => M.botInteraction.messages), Ya = Me(() => Zl(m, fe, sn, a), [m, sn, fe, a]), Ka = A((M) => M.botInteraction.chatIdentifier), Qa = A((M) => M.botInteraction.queueIdentifier), Ja = A((M) => {\n var ue, tt;\n if (M.chatApp.chatStage === \"chat\" && ((ue = M.chatMessages.sortedMessageArray) == null ? void 0 : ue.length) > 0) {\n const Et = M.chatMessages.sortedMessageArray[M.chatMessages.sortedMessageArray.length - 1];\n return M.chatMessages.messageMap[Et.messageId].messageBody;\n }\n return M.chatApp.chatStage === \"bot\" && ((tt = M.botInteraction.messages) == null ? void 0 : tt.length) > 0 ? M.botInteraction.messages[M.botInteraction.messages.length - 1].messageBody : \"\";\n }), Xa = nd(), ir = Qo, Za = \"innerChatContent \" + ir;\n return /* @__PURE__ */ f(tu, {\n theme: ir,\n children: /* @__PURE__ */ _(\"div\", {\n className: \"App\",\n \"data-testid\": \"app\",\n children: [/* @__PURE__ */ f(lf, {\n chatTitle: t == null ? void 0 : t.branding.minimizedChatTitle\n }), /* @__PURE__ */ f(fu, {\n displayStyle: \"nonmodal\",\n children: /* @__PURE__ */ _(kt, {\n text: xt,\n heading: Lt,\n offerCancel: nn,\n buttonTextOverride: on,\n onClose: tn,\n onCancel: Pt,\n updateOverlayState: rn,\n elementId: \"ChatOverlay\",\n detailElement: an,\n children: [/* @__PURE__ */ f(Rf, {\n title: (cr = t == null ? void 0 : t.branding.liveChatTitle) != null ? cr : \"Live Chat\",\n onClose: He,\n onHelp: Rt,\n onMin: en\n }), /* @__PURE__ */ _(\"div\", {\n className: Za,\n children: [/* @__PURE__ */ _(du, {\n numberOfMessages: $a,\n isLastMessageFromSelf: Wa,\n isChatOpen: !k,\n shouldNotDisplayNewMessage: m === \"verification\",\n onScrolledToTheEnd: Ee,\n shouldLoadFromBottom: !1,\n strings: sf,\n children: [/* @__PURE__ */ f(su, {\n imageURL: (ur = t == null ? void 0 : t.branding.organizationImageURL) != null ? ur : Qn,\n description: (lr = t == null ? void 0 : t.branding.organizationImageDescriptor) != null ? lr : Ko,\n strings: cf\n }), /* @__PURE__ */ _(kf, {\n children: [m !== \"loadingChatData\" ? /* @__PURE__ */ f(mf, {\n allowRetry: m !== \"chatEnd\" && m !== \"verification\",\n onUserTrySendNewMessage: U,\n onRetrySendMessage: Q,\n messages: sn,\n hasUserChatMessages: et.mostRecentUserMessageId !== \"\",\n hasOverlay: K !== \"none\",\n shouldRenderAllLinks: !1,\n strings: [Tn, uo],\n shouldShowRetryIcon: !0,\n shouldLastMessageBeTabbable: m === \"bot\",\n chatStage: m\n }) : /* @__PURE__ */ f(B, {}), I ? /* @__PURE__ */ f(B, {}) : /* @__PURE__ */ f(ul, {\n allowRetry: m !== \"chatEnd\" && m !== \"verification\",\n sortedMessages: za,\n onMessageRetry: O,\n chatUsers: Va,\n mostRecentUserMessageId: et.mostRecentUserMessageId,\n shouldNotDisplayMessages: m === \"verification\",\n shouldRenderAllLinks: !1,\n shouldOverrideRenderNoLinks: !1,\n strings: [Tn, uo],\n shouldShowRetryIcon: !0,\n shouldLastMessageBeTabbable: m === \"awaitingAgent\" || m === \"chat\"\n }), /* @__PURE__ */ f(ye, {\n delay: \"immediate\",\n type: \"alert\",\n id: \"aria-message-announcement-test-id\",\n className: \"textNoDisp\",\n children: Xa ? /* @__PURE__ */ f(B, {\n children: Ja\n }) : /* @__PURE__ */ f(B, {})\n })]\n }), m === \"verification\" ? /* @__PURE__ */ f(wf, {\n chatId: Ka,\n queueId: Qa,\n messageResponseDelayTimeoutRef: y,\n strings: Tn\n }) : /* @__PURE__ */ f(B, {}), /* @__PURE__ */ f(mu, {}), /* @__PURE__ */ f(qu, {\n usersTyping: a,\n strings: af\n })]\n }), m !== \"chatEnd\" && m !== \"verification\" && /* @__PURE__ */ f(ju, {\n messageCharacterLimit: Go,\n onUserTrySendNewMessage: m === \"bot\" ? U : C,\n onNewMessageTextChange: J,\n validateMessage: Ga,\n shouldSendBeEnabled: Ya && !sr,\n isThrottled: sr,\n strings: [nf, rf, of]\n })]\n })]\n })\n })]\n })\n });\n}\nfunction xf(e) {\n const {\n publicProps: t,\n onLog: n,\n onNewMessageNotification: r,\n onUpdateUnreadCount: o\n } = e;\n return Sc(n), /* @__PURE__ */ f(pe.StrictMode, {\n children: /* @__PURE__ */ f(Ns, {\n store: xd,\n children: /* @__PURE__ */ f(Df, {\n publicProps: t,\n onNewMessageNotification: r,\n onUpdateUnreadCount: o\n })\n })\n });\n}\nfunction Lf(e, t) {\n let n = !0, r = [];\n return e.nebulaURL || (n = !1, r.push(\"nebulaURL\")), e.phone || (n = !1, r.push(\"phone\")), e.apiKey || (n = !1, r.push(\"apiKey\")), n || t(\"error\", \"Missing properties for epiclivechat. Missing properties: \", r), n;\n}\nfunction jf(e) {\n const {\n publicProps: t,\n onLog: n,\n onNewMessageNotification: r,\n onUpdateUnreadCount: o\n } = e;\n return Lf(t, n) ? /* @__PURE__ */ f(xf, {\n publicProps: t,\n onLog: n,\n onNewMessageNotification: r,\n onUpdateUnreadCount: o\n }) : null;\n}\nexport {\n jf as ChatApp,\n du as ChatScrollingSection,\n qu as CurrentlyTypingUsers,\n ju as MessageComposer,\n kf as MessageList,\n tu as ThemeProvider,\n ul as UserInteractionMessages,\n Na as convertMessagesToStateFormat,\n Fl as convertParticipantsToFormatToAddToState\n};\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Function to handle incoming socket messages from the server\n * @author Noah Allen\n * @module Epic.VideoApp.Components.Chat.Hooks.UseChatSocketMessageHandler\n */\n\nimport {\n\tIChatUserStartupData,\n\tIIncomingLoadChatData,\n\tIIncomingSocketEventNewMessage,\n\tIMessage,\n\tIUser,\n\tconvertMessagesToStateFormat,\n\tconvertParticipantsToFormatToAddToState,\n} from \"@epic/chat\";\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport { useCallback, useEffect, useRef } from \"react\";\nimport {\n\tACK,\n\tHEARTBEAT,\n\tLOAD_CHAT,\n\tSEND_GROUP_MESSAGE,\n\tTIME_UNTIL_NEXT_TYPING_EVENT_SECONDS,\n\tTYPING,\n\tUPDATE_USER_MAP,\n} from \"~/types/chat\";\nimport { secondsToMs } from \"~/utils/dateTime\";\nimport { userIdHash } from \"~/utils/userIdHash\";\nimport { chatUserActions, combinedActions } from \"../../../state\";\nimport { messageActions } from \"../../../state/messages\";\nimport {\n\tIInboundCloudEvent,\n\tIIncomingSocketEventTyping,\n\tIVideoClientAckData,\n} from \"../../../types/websockets\";\n\n// Function that handles incoming socket messages from the server\nexport function useChatSocketMessageHandler(\n\tuserId: string,\n\tparticipantsTypingTimeoutsRef: React.MutableRefObject<{\n\t\t[participantId: string]: NodeJS.Timeout | number;\n\t}>,\n): (event: WebSocketEventMap[\"message\"]) => void {\n\tconst dispatch = useDispatch();\n\n\tconst messageQueueRef = useRef([]);\n\n\tuseEffect(() => {\n\t\tconst interval = setInterval(() => {\n\t\t\tif (messageQueueRef.current.length > 0) {\n\t\t\t\tconst newChatMessageData = messageQueueRef.current.shift();\n\t\t\t\tif (!newChatMessageData) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst messageArray = convertMessagesToStateFormat([newChatMessageData], userId);\n\t\t\t\tdispatch(messageActions.addOrUpdateMessages(messageArray));\n\t\t\t\tdispatch(\n\t\t\t\t\tchatUserActions.setUserProperty({\n\t\t\t\t\t\tproperty: \"isTyping\",\n\t\t\t\t\t\tuserId: messageArray[0].senderId,\n\t\t\t\t\t\tvalue: false,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\tdispatch(combinedActions.newMessage());\n\t\t\t}\n\t\t}, secondsToMs(0.2));\n\n\t\treturn () => clearInterval(interval);\n\t}, [dispatch, userId]);\n\n\tconst messageCallback = useCallback(\n\t\t(event: WebSocketEventMap[\"message\"]) => {\n\t\t\tif (typeof event.data !== \"string\") {\n\t\t\t\tconsole.warn(\"Could not parse cloud event for: \", event);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet cloudEvent: IInboundCloudEvent;\n\t\t\ttry {\n\t\t\t\tcloudEvent = JSON.parse(event.data) as IInboundCloudEvent;\n\t\t\t} catch (error) {\n\t\t\t\tconsole.warn(\"Could not parse cloud event for: \", event);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst eventHandle = parseEventType(cloudEvent.type);\n\n\t\t\tif (!eventHandle) {\n\t\t\t\tconsole.warn(\"Could not parse cloud event type for: \", event.type, eventHandle);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tswitch (eventHandle) {\n\t\t\t\t// Handler to process incoming group messages\n\t\t\t\tcase versionedHandler(SEND_GROUP_MESSAGE, \"1.0\"): {\n\t\t\t\t\tconst newChatMessageData: IIncomingSocketEventNewMessage | undefined =\n\t\t\t\t\t\tcloudEvent.data as IIncomingSocketEventNewMessage;\n\t\t\t\t\tif (newChatMessageData) {\n\t\t\t\t\t\tmessageQueueRef.current.push(newChatMessageData);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t// Handler to process incoming ACK messages\n\t\t\t\tcase versionedHandler(ACK, \"1.0\"): {\n\t\t\t\t\tconst ackData: IVideoClientAckData = cloudEvent.data as IVideoClientAckData;\n\t\t\t\t\tif (ackData.AckId) {\n\t\t\t\t\t\tconst newDeliveryStatus = ackData.StatusCode === \"1\" ? \"sent\" : \"failed\";\n\t\t\t\t\t\tdispatch(\n\t\t\t\t\t\t\tmessageActions.updateMessage({\n\t\t\t\t\t\t\t\tmessageId: ackData.AckId,\n\t\t\t\t\t\t\t\tsequentialId: ackData.SequentialId,\n\t\t\t\t\t\t\t\tmessageDeliveryStatus: newDeliveryStatus,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t// Handler to process incoming heartbeat messages\n\t\t\t\tcase versionedHandler(HEARTBEAT, \"1.0\"): {\n\t\t\t\t\tconst heartbeatData: IIncomingLoadChatData = cloudEvent.data as IIncomingLoadChatData;\n\n\t\t\t\t\tconst [messages, users] = convertStartupDataToStateFormat(heartbeatData, userId);\n\t\t\t\t\tconst clientUsers = convertStartupUserToUser(users);\n\t\t\t\t\tdispatch(messageActions.addOrUpdateMessages(messages));\n\t\t\t\t\tdispatch(chatUserActions.addOrUpdateUsers(clientUsers));\n\t\t\t\t\tdispatch(combinedActions.newMessage());\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t// Handler to process incoming user map updates\n\t\t\t\tcase versionedHandler(UPDATE_USER_MAP, \"1.0\"): {\n\t\t\t\t\tconst userMapData: IIncomingLoadChatData = cloudEvent.data as IIncomingLoadChatData;\n\t\t\t\t\tconst users = convertParticipantsToFormatToAddToState(userMapData.Users);\n\t\t\t\t\tconst clientUsers = convertStartupUserToUser(users);\n\n\t\t\t\t\tdispatch(chatUserActions.addOrUpdateUsers(clientUsers));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t// Handler to process incoming typing messages\n\t\t\t\tcase versionedHandler(TYPING, \"1.0\"): {\n\t\t\t\t\tconst typingData: IIncomingSocketEventTyping =\n\t\t\t\t\t\tcloudEvent.data as IIncomingSocketEventTyping;\n\t\t\t\t\tconst participantId = typingData.UserId;\n\t\t\t\t\tconst timeout = participantsTypingTimeoutsRef.current[participantId];\n\n\t\t\t\t\tdispatch(\n\t\t\t\t\t\tchatUserActions.setUserProperty({\n\t\t\t\t\t\t\tproperty: \"isTyping\",\n\t\t\t\t\t\t\tuserId: typingData.UserId,\n\t\t\t\t\t\t\tvalue: true,\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t\tif (timeout !== undefined) {\n\t\t\t\t\t\t// We want to refresh the timeout if it exists and we are calling this again\n\t\t\t\t\t\tclearTimeout(timeout);\n\t\t\t\t\t\tdelete participantsTypingTimeoutsRef.current[participantId];\n\t\t\t\t\t}\n\t\t\t\t\tparticipantsTypingTimeoutsRef.current[participantId] = setTimeout(() => {\n\t\t\t\t\t\tdispatch(\n\t\t\t\t\t\t\tchatUserActions.setUserProperty({\n\t\t\t\t\t\t\t\tproperty: \"isTyping\",\n\t\t\t\t\t\t\t\tuserId: typingData.UserId,\n\t\t\t\t\t\t\t\tvalue: false,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tdelete participantsTypingTimeoutsRef.current[participantId];\n\t\t\t\t\t}, secondsToMs(TIME_UNTIL_NEXT_TYPING_EVENT_SECONDS + 1));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t// Handler to process incoming load chat messages\n\t\t\t\tcase versionedHandler(LOAD_CHAT, \"1.0\"): {\n\t\t\t\t\tconst newChatMessageData: IIncomingLoadChatData =\n\t\t\t\t\t\tcloudEvent.data as IIncomingLoadChatData;\n\t\t\t\t\tconst messageArray = convertMessagesToStateFormat(newChatMessageData.Messages, userId);\n\t\t\t\t\tdispatch(messageActions.addOrUpdateMessages(messageArray));\n\t\t\t\t\tdispatch(combinedActions.newMessage());\n\n\t\t\t\t\tObject.values(newChatMessageData.Users).forEach((userData) => {\n\t\t\t\t\t\tdispatch(\n\t\t\t\t\t\t\tchatUserActions.addOrUpdateUser({\n\t\t\t\t\t\t\t\tid: userData.Id,\n\t\t\t\t\t\t\t\tdisplayName: userData.Name,\n\t\t\t\t\t\t\t\tisInChat: userData.IsActive,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tdefault: {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[dispatch, participantsTypingTimeoutsRef, userId],\n\t);\n\n\treturn messageCallback;\n}\n\n// Function to parse the event type from the incoming socket message\nfunction parseEventType(input: string): string | undefined {\n\tconst fieldCount = 6;\n\tconst parsed = input.split(\".\");\n\n\tif (parsed.length !== fieldCount) {\n\t\treturn;\n\t}\n\n\ttry {\n\t\tconst app = parsed[2];\n\t\tif (app.toLocaleLowerCase() !== \"video\") {\n\t\t\tconsole.warn(\"Found non-video socket event\");\n\t\t\treturn;\n\t\t}\n\t\tconst eventType = parsed[3];\n\t\tconst majorVersion = parsed[4];\n\t\tconst minorVersion = parsed[5];\n\n\t\treturn buildSocketIdentifierString(eventType, majorVersion, minorVersion);\n\t} catch (error) {\n\t\tconsole.warn(error, \"Event Type could not be parsed from: \", input);\n\t\treturn;\n\t}\n}\n\n// Function to build the socket identifier string\nfunction buildSocketIdentifierString(eventType: string, majorVersion: string, minorVersion: string): string {\n\treturn `${eventType}.${majorVersion}.${minorVersion}`;\n}\n\n// Function to build the versioned handler string\nfunction versionedHandler(base: string, version: string): string {\n\treturn `${base}.${version}`;\n}\n\n// Function to convert the incoming startup data to the state format\nfunction convertStartupDataToStateFormat(\n\tdata: IIncomingLoadChatData,\n\tcurrentUserId: string,\n): [IMessage[], IChatUserStartupData[]] {\n\tconst usersArray = convertParticipantsToFormatToAddToState(data.Users);\n\tconst messageArray = convertMessagesToStateFormat(data.Messages, currentUserId);\n\treturn [messageArray, usersArray];\n}\n\n// Function to convert the incoming startup user data to the state format\nfunction convertStartupUserToUser(data: IChatUserStartupData[]): IUser[] {\n\treturn data.map((current) => {\n\t\treturn {\n\t\t\tdisplayName: current.userName ?? \"Unknown\",\n\t\t\tid: current.userId,\n\t\t\tisInChat: true,\n\t\t\tisTyping: false,\n\t\t\tcolor: userIdHash(current.userId),\n\t\t};\n\t});\n}\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Manages the connection to the chat server and provides the connection status to the rest of the application\n * @author Noah Allen\n * @module Epic.VideoApp.Components.Chat.ConnectionManagement\n */\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, {\n\tFC,\n\tPropsWithChildren,\n\tuseCallback,\n\tuseContext,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { ChatConnectionStatus, ISocketActions, IUpdateDisplayNameMessage } from \"~/types/websockets\";\nimport { VideoSessionContext } from \"~/web-core/components\";\nimport { messageActions, useAuthState, useMessageState, useRoomState } from \"../../state\";\nimport { IChatNegotiateResponse } from \"../../types\";\nimport { secondsToMs } from \"../../utils/dateTime\";\nimport { makeRequest } from \"../../utils/request\";\nimport { useParticipantName } from \"../Participants/hooks/useParticipantName\";\nimport { WebSocketContext } from \"../WebSocket/WebSocketConnection\";\nimport { canGetToken } from \"./hooks/useCanGetToken\";\nimport { useChatSocketMessageHandler } from \"./hooks/useChatSocketMessageHandler\";\n\ninterface IProps {\n\tchildren: React.ReactChild;\n\tshouldConnectToChat: boolean;\n}\n\nexport interface ISocketConnectionContext {\n\tchatConnectionStatus: ChatConnectionStatus;\n\tparticipantsTypingTimeoutsRef: React.MutableRefObject<{\n\t\t[participantId: string]: NodeJS.Timeout | number;\n\t}>;\n}\n\n// The context for managing the chat connection.\nexport const ConnectionContext = React.createContext({\n\tchatConnectionStatus: \"NotStarted\",\n\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\tparticipantsTypingTimeoutsRef: { current: {} } as React.MutableRefObject<{\n\t\t[participantId: string]: NodeJS.Timeout | number;\n\t}>,\n});\n\n// This module exports a React component that provides a chat connection context.\nconst ConnectionManagementContext: FC> = (props) => {\n\tconst { children, shouldConnectToChat } = props;\n\tconst { openSocket, sendSocketMessage, isWebsocketOpen, closeSocket } = useContext(WebSocketContext);\n\tconst JWT = useAuthState((selectors) => selectors.getJWT(), []);\n\tconst localDisplayName = useRoomState((selectors) => selectors.getLocalDisplayName(), []);\n\tconst { session } = useContext(VideoSessionContext);\n\tconst NUMBER_FAILED_MSGS_BEFORE_RECONNECT = 2;\n\tconst localUserId = session?.localUser.getUserIdentity() || \"\";\n\tconst callCounter = useRef(0);\n\tconst participantsTypingTimeoutsRef: React.MutableRefObject<{\n\t\t[participantId: string]: NodeJS.Timeout | number;\n\t}> = useRef({});\n\tconst messageCallback = useChatSocketMessageHandler(localUserId, participantsTypingTimeoutsRef);\n\tconst [chatConnectionStatus, setChatConnectionStatus] = useState(\"NotStarted\");\n\tconst callTimes = useRef(0);\n\tconst localUser = session?.localUser;\n\tconst defaultCallerName = useParticipantName(localUser || null, true);\n\tconst [hasNameChanged, setHasNameChanged] = useState(false);\n\tconst isUsingLocalNameRef = useRef(false);\n\tconst nameSentRef = useRef(\"\");\n\tconst jwtRef = useRef(JWT ?? \"\");\n\tconst nameRef = useRef(localDisplayName);\n\tconst defaultNameRef = useRef(defaultCallerName);\n\tconst chatConnectionStatusRef = useRef(chatConnectionStatus);\n\tconst [shouldGiveUpRetrying, setShouldGiveUpRetrying] = useState(false);\n\tconst dispatch = useDispatch();\n\tconst numberOfFailedMsgsInARow = useMessageState(\n\t\t(selectors) => selectors.getNumberOfFailedMessagesInARow(),\n\t\t[],\n\t);\n\n\t// Use effects to update refs when the values change\n\tuseEffect(() => {\n\t\tjwtRef.current = JWT ?? \"\";\n\t}, [JWT]);\n\n\tuseEffect(() => {\n\t\tnameRef.current = localDisplayName;\n\t}, [localDisplayName]);\n\n\tuseEffect(() => {\n\t\tdefaultNameRef.current = defaultCallerName;\n\t\tsetHasNameChanged(true);\n\t}, [defaultCallerName]);\n\n\tuseEffect(() => {\n\t\tchatConnectionStatusRef.current = chatConnectionStatus;\n\t}, [chatConnectionStatus]);\n\n\t// Manages the display name of the user, using a default name if no name is provided.\n\tconst handleDisplayNameChange = useCallback((displayName: string) => {\n\t\tlet newDisplayName = displayName;\n\t\tif (newDisplayName === \"\" || nameRef.current === \"\") {\n\t\t\tisUsingLocalNameRef.current = false;\n\t\t\tnewDisplayName = defaultNameRef.current;\n\t\t} else {\n\t\t\tisUsingLocalNameRef.current = true;\n\t\t}\n\t\tsetHasNameChanged(false);\n\t\tnameSentRef.current = newDisplayName;\n\t\treturn newDisplayName;\n\t}, []);\n\n\tconst sendNameChangeSocketEvent = useCallback(\n\t\t(\n\t\t\t// eslint-disable-next-line @typescript-eslint/naming-convention\n\t\t\tupdateDisplayNameData: { NewDisplayName: string },\n\t\t) => {\n\t\t\tconst updateDisplayNameMessage: IUpdateDisplayNameMessage = {\n\t\t\t\tdata: updateDisplayNameData,\n\t\t\t\tmessageId: crypto.randomUUID(),\n\t\t\t\tmessageType: \"UpdateDisplayName\",\n\t\t\t\tversion: \"1.0\",\n\t\t\t\trequiresAck: false,\n\t\t\t};\n\t\t\tsendSocketMessage(updateDisplayNameMessage);\n\t\t},\n\t\t[sendSocketMessage],\n\t);\n\n\tuseEffect(() => {\n\t\tif (\n\t\t\tchatConnectionStatus === \"Connected\" &&\n\t\t\thasNameChanged &&\n\t\t\t!isUsingLocalNameRef.current &&\n\t\t\tnameSentRef.current !== defaultNameRef.current\n\t\t) {\n\t\t\t// eslint-disable-next-line @typescript-eslint/naming-convention\n\t\t\tconst updateDisplayNameData = { NewDisplayName: defaultNameRef.current };\n\t\t\tsendNameChangeSocketEvent(updateDisplayNameData);\n\t\t\tsetHasNameChanged(false);\n\t\t}\n\t}, [chatConnectionStatus, sendNameChangeSocketEvent, hasNameChanged]);\n\n\t/* Callback function that attempts to negotiate a chat connection with the hook server.\n\t * If the maximum number of attempts is reached, it waits for the duration of the time window before trying again.\n\t */\n\tconst getToken = useCallback(\n\t\tasync (jwt: string, displayName: string): Promise => {\n\t\t\tif ((await canGetToken(callTimes, callCounter)) === false) {\n\t\t\t\tsetShouldGiveUpRetrying(true);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst newDisplayName = handleDisplayNameChange(displayName);\n\n\t\t\ttry {\n\t\t\t\tconst response = await makeRequest(\n\t\t\t\t\t\"/api/Chat/Negotiate\",\n\t\t\t\t\t\"POST\",\n\t\t\t\t\tjwt,\n\t\t\t\t\t{\n\t\t\t\t\t\tdisplayName: newDisplayName,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\treturn response.serviceAddress;\n\t\t\t} catch (exception) {\n\t\t\t\tconsole.warn((exception as Error).message);\n\t\t\t}\n\n\t\t\treturn undefined;\n\t\t},\n\t\t[handleDisplayNameChange],\n\t);\n\n\t// Create a socket options object to pass to the WebSocket hook\n\t// This object contains the callback functions for the WebSocket events\n\tconst socketOptions: ISocketActions = useMemo(() => {\n\t\tconst onOpen = (_event: WebSocketEventMap[\"open\"]): void => {\n\t\t\tsetChatConnectionStatus(\"Connecting\");\n\t\t};\n\t\tconst onClose = (_event: WebSocketEventMap[\"close\"]): void => {\n\t\t\tsetChatConnectionStatus(\"Disconnected\");\n\t\t};\n\t\tconst onError = (_event: WebSocketEventMap[\"error\"]): void => {\n\t\t\tsetChatConnectionStatus(\"Disconnected\");\n\t\t};\n\t\tconst onMessage = (event: WebSocketEventMap[\"message\"]): void => {\n\t\t\tmessageCallback(event);\n\t\t};\n\n\t\treturn {\n\t\t\tsocketOnMessage: onMessage,\n\t\t\tsocketOnError: onError,\n\t\t\tsocketOnClose: onClose,\n\t\t\tsocketOnOpen: onOpen,\n\t\t};\n\t}, [messageCallback]);\n\n\t// Function to start the WebSocket connection\n\tconst startSocket = useCallback(\n\t\t(serviceAddress: string) => {\n\t\t\tconst success = openSocket(serviceAddress, socketOptions);\n\t\t\tif (!success) {\n\t\t\t\tsetChatConnectionStatus(\"Disconnected\");\n\t\t\t}\n\t\t},\n\t\t[openSocket, socketOptions],\n\t);\n\n\t// Function to start the connection to the chat server\n\tconst startConnection = useCallback(\n\t\tasync (jwt: string, displayName: string) => {\n\t\t\tconst socketURL = await getToken(jwt, displayName);\n\t\t\tif (!socketURL) {\n\t\t\t\tsetChatConnectionStatus(\"Disconnected\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvoid startSocket(socketURL);\n\t\t},\n\t\t[getToken, startSocket],\n\t);\n\n\t// Function to open the connection to the chat server\n\tconst openConnection = useCallback(async () => {\n\t\tsetChatConnectionStatus((previousState) => {\n\t\t\tif (previousState === \"NotStarted\") {\n\t\t\t\treturn \"Connecting\";\n\t\t\t}\n\n\t\t\treturn \"Reconnecting\";\n\t\t});\n\t\tawait startConnection(jwtRef.current, nameRef.current);\n\t}, [startConnection]);\n\n\t// If the connection status is \"Disconnected\", open the connection\n\tuseEffect(() => {\n\t\tif (shouldConnectToChat && !shouldGiveUpRetrying) {\n\t\t\tif (chatConnectionStatus === \"Disconnected\" || chatConnectionStatus === \"NotStarted\") {\n\t\t\t\tvoid openConnection();\n\t\t\t}\n\t\t}\n\t}, [chatConnectionStatus, openConnection, shouldConnectToChat, shouldGiveUpRetrying]);\n\n\t// If the connection status is \"Connecting\", set a timeout to check if the connection is still open\n\t// If the status is still connecting and the connection is open, set the status to \"Connected\"\n\t// If the connection is closed or the status has changed, set the status to \"Disconnected\"\n\tuseEffect(() => {\n\t\tif (chatConnectionStatus === \"Connecting\") {\n\t\t\tconst timeout = setTimeout(() => {\n\t\t\t\tif (chatConnectionStatusRef.current === \"Connecting\" && isWebsocketOpen()) {\n\t\t\t\t\tsetChatConnectionStatus(\"Connected\");\n\t\t\t\t\tcallCounter.current = 0;\n\t\t\t\t} else {\n\t\t\t\t\tsetChatConnectionStatus(\"Disconnected\");\n\t\t\t\t}\n\t\t\t}, secondsToMs(1.5));\n\n\t\t\treturn () => {\n\t\t\t\tclearTimeout(timeout);\n\t\t\t};\n\t\t}\n\n\t\tchatConnectionStatusRef.current = chatConnectionStatus;\n\t}, [chatConnectionStatus, isWebsocketOpen, sendNameChangeSocketEvent]);\n\n\tuseEffect(() => {\n\t\tif (numberOfFailedMsgsInARow > NUMBER_FAILED_MSGS_BEFORE_RECONNECT) {\n\t\t\tsetShouldGiveUpRetrying(false);\n\t\t\tcloseSocket();\n\t\t\tsetChatConnectionStatus(\"Disconnected\");\n\t\t\tdispatch(messageActions.resetNumberOfFailedMessagesInARow());\n\t\t}\n\t}, [closeSocket, dispatch, numberOfFailedMsgsInARow]);\n\n\treturn (\n\t\t\n\t\t\t{children}\n\t\t\n\t);\n};\n\nexport default ConnectionManagementContext;\n","/**\n * @copyright Copyright 2023 Epic Systems Corporation\n * @file Loading Screen used when skipping the hardware test\n * @author Jonathon Moore\n * @module Epic.VideoApp.Components.HardwareTest.SkipHardwareTestLoadingScreen\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback } from \"react\";\nimport { useStrings } from \"~/hooks\";\nimport { hardwareTestActions } from \"~/state\";\nimport { HardwareTestStatus } from \"~/types\";\nimport Loading from \"../Loading/Loading\";\n\ninterface IProps {\n\tstatus: HardwareTestStatus;\n\tdisplayLoadingScreen: boolean;\n\tonJoinClick: () => void;\n}\n\nenum TokenNames {\n\tjoining = \"Joining\",\n\tdevices = \"Devices\",\n}\n\nexport enum SkipHardwareTestLoadingScreenTestIds {\n\tjoining = \"JoiningScreen\",\n\tdevices = \"CheckingDevicesScreen\",\n}\n\nconst SkipHardwareTestLoadingScreen: FC = (props: IProps) => {\n\tconst { status, displayLoadingScreen, onJoinClick } = props;\n\n\tconst dispatch = useDispatch();\n\n\tconst strings = useStrings(\"SkipHardwareTestLoadingScreen\", Object.values(TokenNames));\n\n\tconst hardwareTestFailed = useCallback(() => {\n\t\tdispatch(hardwareTestActions.setSkipHardwareTest(false));\n\t}, [dispatch]);\n\n\tif (!displayLoadingScreen) {\n\t\treturn null;\n\t}\n\n\tif (status === HardwareTestStatus.failed) {\n\t\thardwareTestFailed();\n\t\treturn null;\n\t}\n\n\tif (status === HardwareTestStatus.passed) {\n\t\tonJoinClick();\n\t\treturn (\n\t\t\t\n\t\t);\n\t}\n\n\tif (status === HardwareTestStatus.testing) {\n\t\treturn (\n\t\t\t\n\t\t);\n\t}\n\treturn null;\n};\n\nSkipHardwareTestLoadingScreen.displayName = \"SkipHardwareTestLoadingScreen\";\n\nexport default SkipHardwareTestLoadingScreen;\n","/**\n * @copyright Copyright 2020-2024 Epic Systems Corporation\n * @file Call Lobby Hardware Test Component\n * @author Colin Walters\n * @module Epic.VideoApp.Components.HardwareTest.LobbyHardwareTest\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { ComponentType, FC, useEffect, useRef } from \"react\";\nimport { useStrings } from \"~/hooks\";\nimport Camera from \"~/icons/camera\";\nimport { alertActions, useHardwareTestState, useLocalTrackState, useRoomState } from \"~/state\";\nimport {\n\tAlertType,\n\tDeviceStatus,\n\tIChoiceAlert,\n\tLobbyTimeToPopupMS,\n\tHardwareTestStatus as Status,\n} from \"~/types\";\nimport { isOnIOSVersion } from \"~/utils/os\";\nimport ActionButton from \"../Utilities/ActionButton\";\nimport HardwareTest from \"./HardwareTest\";\nimport SkipHardwareTestLoadingScreen from \"./SkipHardwareTestLoadingScreen\";\n\ninterface IProps {\n\tonJoinClick: () => void;\n}\n\n/**\n * The LobbyHardwareTest component\n *\n * Uses a component to test all the user's devices, and shows the\n * appropriate for joining call on success\n */\nconst LobbyHardwareTest: FC = (props: IProps) => {\n\tconst { onJoinClick } = props;\n\n\tconst status = useHardwareTestState(\n\t\t(selectors) => selectors.getTestStatus({ isStandalone: false, allowOneError: true }),\n\t\t[],\n\t);\n\tconst isConnecting = useRoomState((selectors) => selectors.getIsConnecting(), []);\n\n\tconst dispatch = useDispatch();\n\n\tconst tokenNames = [\n\t\t\"TimeoutAlert\",\n\t\t\"Close\",\n\t\t\"JoinCall\",\n\t\t\"CheckingHardware\",\n\t\t\"JoinWithAudioIssue\",\n\t\t\"JoinWithoutCamera\",\n\t\t\"JoinWithoutMicrophone\",\n\t\t\"TestFailed\",\n\t\t\"Joining\",\n\t];\n\n\tconst strings = useStrings(\"LobbyHardwareTest\", tokenNames);\n\n\tconst stringsRef = useRef(strings);\n\tuseEffect(() => {\n\t\tstringsRef.current = strings;\n\t}, [strings]);\n\n\tuseEffect(() => {\n\t\t// The resolution of the alert pop-up handles the potential disconnection\n\t\t// and routing of the user to the generic \"you left the call page\"\n\t\tconst timeoutPopup = setTimeout(() => {\n\t\t\t// Setup a modal to dispatch to the user\n\t\t\tconst disconnectAlert: IChoiceAlert = {\n\t\t\t\tmessage: stringsRef.current[\"TimeoutAlert\"],\n\t\t\t\tconfirmText: stringsRef.current[\"Close\"],\n\t\t\t\tconfirmHotkey: \"C\",\n\t\t\t\tcancelText: stringsRef.current[\"JoinCall\"],\n\t\t\t\tcancelHotkey: \"J\",\n\t\t\t\ttype: AlertType.timeoutChoice,\n\t\t\t};\n\n\t\t\tdispatch(alertActions.postChoiceAlert(disconnectAlert));\n\t\t}, LobbyTimeToPopupMS);\n\n\t\treturn () => {\n\t\t\tclearTimeout(timeoutPopup);\n\t\t};\n\t}, [dispatch]);\n\n\t// pass false for allowOneError to get the raw error statuses\n\tconst cameraStatus = useHardwareTestState((selectors) => selectors.getCameraStatus(false), []);\n\tconst micStatus = useHardwareTestState((selectors) => selectors.getMicrophoneStatus(false), []);\n\n\tconst cameraError = cameraStatus === DeviceStatus.error || cameraStatus === DeviceStatus.unknown;\n\tconst micError = micStatus === DeviceStatus.error || micStatus === DeviceStatus.unknown;\n\n\tlet bottomButtonText = strings[\"CheckingHardware\"];\n\tlet icon: ComponentType | undefined = undefined;\n\tlet disabled = true;\n\tlet keyboardShortcut: string[] | undefined;\n\tif (status === Status.passed) {\n\t\tif (isConnecting) {\n\t\t\t// show that the user is trying to join the room\n\t\t\tbottomButtonText = strings[\"Joining\"];\n\t\t} else {\n\t\t\ticon = Camera;\n\t\t\tdisabled = false;\n\t\t\tkeyboardShortcut = [\"alt\", \"j\"];\n\n\t\t\tif (isOnIOSVersion(\"14_2\")) {\n\t\t\t\t// show that the user is on an iOS 14.2 device and may experience audio issues\n\t\t\t\tbottomButtonText = strings[\"JoinWithAudioIssue\"];\n\t\t\t} else if (cameraError || micError) {\n\t\t\t\tbottomButtonText = cameraError\n\t\t\t\t\t? strings[\"JoinWithoutCamera\"]\n\t\t\t\t\t: strings[\"JoinWithoutMicrophone\"];\n\t\t\t} else {\n\t\t\t\t// give the option to join call when hardware test passes\n\t\t\t\tbottomButtonText = strings[\"JoinCall\"];\n\t\t\t}\n\t\t}\n\t} else if (status === Status.failed) {\n\t\t// Leave the \"join call\" text in the button, however if the test fails the button will be disabled\n\t\tbottomButtonText = strings[\"JoinCall\"];\n\t}\n\n\tconst firstSkip = useHardwareTestState((selectors) => selectors.getIsFirstHardwareTestSkip(), []);\n\tconst skipHardwareTest = useHardwareTestState((selectors) => selectors.getSkipHardwareTest(), []);\n\tconst localTrackAcquisitionStatus = useLocalTrackState(\n\t\t(selectors) => selectors.getLocalTrackAcquisitionStatus(),\n\t\t[],\n\t);\n\tconst shouldHide = skipHardwareTest && firstSkip && localTrackAcquisitionStatus !== \"showingWarning\"; // Don't skip hardware test if errors need to be shown\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\n\t\t\t\t}\n\t\t\t/>\n\t\t\n\t);\n};\n\nLobbyHardwareTest.displayName = \"LobbyHardwareTest\";\n\nexport default LobbyHardwareTest;\n","/**\n * @copyright Copyright 2023 Epic Systems Corporation\n * @file hook to send participant count iframe messages\n * @author Colin Walters\n * @module Epic.VideoApp.Hooks.UseParticipantCountIframeMessage\n */\n\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useRoomState, useUserState } from \"~/state\";\nimport { EpicUserType, IParticipantInfo } from \"~/types\";\nimport frameMessager from \"~/utils/frameMessager\";\nimport { IEVCParticipantConnectionEvent } from \"~/web-core/events\";\nimport { IRemoteUser, ISession } from \"~/web-core/interfaces\";\n\nconst LOCAL_PARTICIPANT_COUNT = 1;\n\n/**\n * Hook that tracks the participant list and emits changes in the room size to an iframe\n */\nexport function useParticipantCountIframeMessage(session: ISession): void {\n\tconst { participantInfos } = useRoomState(\n\t\t(sel) => ({ participantInfos: sel.getAllParticipantInfo() }),\n\t\t[],\n\t);\n\tconst { userType, inWaitingRoom } = useUserState(\n\t\t(sel) => ({ userType: sel.getUserType(), inWaitingRoom: sel.getIsUserInWaitingRoom() }),\n\t\t[],\n\t);\n\tconst [disconnectedParticipantIds, setDisconnectedParticipantIds] = useState([]);\n\n\tconst previousCount = useRef(-1);\n\tconst previousProviderCount = useRef(-1);\n\n\t// to avoid looping below, preload a dictionary mapping SID to user info\n\tconst participantInfoMap = useMemo(() => {\n\t\tconst map: Record = {};\n\t\tparticipantInfos.forEach((info) => {\n\t\t\tmap[info.identity] = info;\n\t\t});\n\t\treturn map;\n\t}, [participantInfos]);\n\n\tuseEffect(() => {\n\t\tif (!session) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst participantDisconnected = (\n\t\t\targs: IEVCParticipantConnectionEvent<\"participantDisconnected\">,\n\t\t): void => {\n\t\t\tconst user: IRemoteUser = args.participant;\n\t\t\tsetDisconnectedParticipantIds((prevParticipants) =>\n\t\t\t\tprevParticipants.concat(user.getUserIdentity()),\n\t\t\t);\n\t\t};\n\n\t\tsession.on(\"participantDisconnected\", participantDisconnected);\n\t\treturn () => {\n\t\t\tsession.off(\"participantDisconnected\", participantDisconnected);\n\t\t};\n\t}, [session]);\n\n\tuseEffect(() => {\n\t\t// don't emit participant update messages while in the waiting room\n\t\tif (!session || inWaitingRoom) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet participantCount = LOCAL_PARTICIPANT_COUNT;\n\t\tlet providerCount = userType === EpicUserType.emp ? 1 : 0;\n\n\t\t// This hook doesn't use RoomContext's availableParticipants and uses room.participants because\n\t\t// participant info updates also trigger this hook. When participant info is updated this needs\n\t\t// the current state of the participant, not an up-to-date list of participants at all times.\n\t\tfor (const participant of session.getRemoteParticipants().values()) {\n\t\t\tconst info: IParticipantInfo | undefined = participantInfoMap[participant.getUserIdentity()];\n\n\t\t\t// if the participant hasn't sent their info, we can't correctly categorize them\n\t\t\t// return out of the effect to avoid sending participant update iframe messages\n\t\t\tif (!info) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// do not count participants that have left or are in the waiting room\n\t\t\t// the disconnected check is technically redundant, but this effect needs to depend on\n\t\t\t// disconnectedParticipantIds to send updates when participants leave the call\n\t\t\tif (\n\t\t\t\tdisconnectedParticipantIds.some((identity) => info.identity === identity) ||\n\t\t\t\tinfo.inWaitingRoom\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tparticipantCount += 1;\n\t\t\tif (info.userType === EpicUserType.emp) {\n\t\t\t\tproviderCount += 1;\n\t\t\t}\n\t\t}\n\n\t\t// don't emit participant update messages when both the total and provider count remained the same\n\t\tif (participantCount === previousCount.current && providerCount === previousProviderCount.current) {\n\t\t\treturn;\n\t\t}\n\n\t\tframeMessager.postMessage(\"Epic.Video.ParticipantUpdate\", { participantCount, providerCount });\n\t\tpreviousCount.current = participantCount;\n\t\tpreviousProviderCount.current = providerCount;\n\t}, [inWaitingRoom, userType, participantInfoMap, session, disconnectedParticipantIds]);\n}\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file call duration timer destination component\n * @author Colin Walters\n * @module Epic.VideoApp.Components.CallDurationTimer.CallDurationTimerDestination\n */\n\nimport React from \"react\";\nimport styles from \"./CallDurationTimer.module.scss\";\n\nexport const destinationElementId = \"duration-timer\";\n\n/**\n * The CallDurationTimerDestination component\n */\nexport const CallDurationTimerDestination: React.FunctionComponent = () => (\n\t\n);\n","/**\n * @copyright Copyright 2020-2021 Epic Systems Corporation\n * @file call duration timer component\n * @author Colin Walters\n * @module Epic.VideoApp.Components.CallDurationTimer.CallDurationTimer\n */\n\nimport React, { FC, useContext, useEffect, useRef, useState } from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { getFormattedTime } from \"~/utils/dateTime\";\nimport { ParticipantDataContext, VideoSessionContext } from \"~/web-core/components\";\nimport { destinationElementId } from \"./CallDurationTimerDestination\";\n\n/**\n * The CallDurationTimer component\n */\nconst CallDurationTimer: FC = () => {\n\tconst { participants } = useContext(ParticipantDataContext);\n\tconst { session } = useContext(VideoSessionContext);\n\tconst lastUpdateInstant = useRef(-1);\n\tconst [connectedTime, setConnectedTime] = useState(0);\n\n\t// get the element that the timer should be dropped into\n\tconst el = document.getElementById(destinationElementId);\n\n\tconst hasTwoWayConnection = !!session?.localUser && participants && participants.length > 0;\n\n\tuseEffect(() => {\n\t\t// reset the last update instant when there is not a two way connection\n\t\tif (!hasTwoWayConnection) {\n\t\t\tlastUpdateInstant.current = -1;\n\t\t\treturn;\n\t\t}\n\n\t\tif (lastUpdateInstant.current < 0) {\n\t\t\tlastUpdateInstant.current = Date.now();\n\n\t\t\tconst onTick = (): void => {\n\t\t\t\tconst now = Date.now();\n\t\t\t\tconst msDiff = now - lastUpdateInstant.current;\n\t\t\t\tlastUpdateInstant.current = now;\n\n\t\t\t\tsetConnectedTime((prevVal) => prevVal + msDiff);\n\t\t\t};\n\n\t\t\tconst interval = setInterval(onTick, 1000);\n\t\t\treturn () => {\n\t\t\t\tclearInterval(interval);\n\t\t\t};\n\t\t}\n\t}, [hasTwoWayConnection]);\n\n\tif (!el || (!hasTwoWayConnection && connectedTime === 0)) {\n\t\treturn null;\n\t}\n\n\treturn ReactDOM.createPortal(<>{getFormattedTime(connectedTime)}, el);\n};\n\nCallDurationTimer.displayName = \"CallDurationTimer\";\n\nexport default CallDurationTimer;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file Utilities for network quality icons\n * @author Will Cooper\n * @module Epic.VideoApp.Utils.NetworkQualityIcon\n */\n\n/**\n * Returns the expected color based upon a given participant's network quality\n * @param level - The participant's network quality (0-5).\n * \tWe display only four options. A level of 4 or 5 corresponds to four bars and a level of 0 or 1 corresponds to to one bar.\n * @returns - The color code for the specific shade of red, yellow, or white that will be displayed\n */\nexport function getNetworkLevelColor(level: number): string {\n\tswitch (level) {\n\t\tcase 0:\n\t\tcase 1:\n\t\t\treturn \"#ff0000\";\n\t\tcase 2:\n\t\t\treturn \"#daa520\";\n\t\tcase 3:\n\t\tcase 4:\n\t\tcase 5:\n\t\t\treturn \"#ffffff\";\n\t\tdefault:\n\t\t\treturn \"#ffffff\";\n\t}\n}\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file network quality icon (fully filled with color)\n * @author Will Cooper\n * @module Epic.VideoApp.Icons.NetworkQuality\n */\n\nimport React, { FC, memo } from \"react\";\nimport { IconProps } from \".\";\n\n/**\n * Props for QualityIcon Component\n */\ninterface IProps extends IconProps {\n\t/** The network quality level (0-4) */\n\tlevel: number;\n\t/** The color of any levels (the bars up to the current level)*/\n\tfillColor: string;\n\t/** The background color of the icon (the bars that are beneath full, above the current level)*/\n\tbaseColor: string;\n}\n\n/**\n * The NetworkQuality component\n * @param props The props ;)\n */\nconst NetworkQuality: FC = memo((props) => {\n\tconst { level, fillColor, baseColor, ...iconProps } = props;\n\n\t// Apple VoiceOver will only focus the individual bars in the icon, so to avoid\n\t// repetitive reading all but the last bar is hidden from screen readers\n\treturn (\n\t\t\n\t\t\t 0 ? fillColor : baseColor} />\n\t\t\t 1 ? fillColor : baseColor} />\n\t\t\t 2 ? fillColor : baseColor}\n\t\t\t/>\n\t\t\t 3 ? fillColor : baseColor}\n\t\t\t/>\n\t\t\n\t);\n});\n\nNetworkQuality.displayName = \"NetworkQuality\";\n\nexport default NetworkQuality;\n","/**\n * @copyright Copyright 2020-2024 Epic Systems Corporation\n * @file Indicator of Participant's Network Quality\n * @author Colin Walters\n * @module Epic.VideoApp.Components.NetworkQualityIndicator.NetworkQualityIndicator\n */\n\nimport React, { FC } from \"react\";\nimport { useParticipantNetworkQuality, useStrings } from \"~/hooks\";\nimport { getNetworkLevelColor } from \"~/utils/networkQualityIcon\";\nimport { stringFormat } from \"~/utils/strings\";\nimport { IUser } from \"~/web-core/interfaces\";\nimport NetworkQualityFilled from \"../../icons/networkQuality\";\n\n/**\n * Props for NetworkQualityIndicator Component\n */\ninterface IProps {\n\tparticipant?: IUser;\n\tbackgroundColor: string;\n\toverrideFill?: string;\n\thideLabel?: boolean;\n\theight?: number;\n\twidth?: number;\n}\n\n/**\n * The NetworkQualityIndicator component\n * @param props The props ;)\n */\nconst NetworkQualityIndicator: FC = (props) => {\n\tconst { participant, backgroundColor, hideLabel, overrideFill, height, width } = props;\n\n\tconst networkQualityLevel = useParticipantNetworkQuality(participant) ?? -1;\n\n\tconst tokenNames = [\"QualityLevel\"];\n\tconst strings = useStrings(\"NetworkQualityIndicator\", tokenNames);\n\n\tconst label = !hideLabel\n\t\t? stringFormat(strings[\"QualityLevel\"], Math.min(networkQualityLevel, 4), \"4\")\n\t\t: undefined;\n\n\tconst levelColor = overrideFill || getNetworkLevelColor(networkQualityLevel);\n\n\treturn (\n\t\t\n\t);\n};\n\nNetworkQualityIndicator.displayName = \"NetworkQualityIndicator\";\n\nexport default NetworkQualityIndicator;\n","/**\n * @copyright Copyright 2023 Epic Systems Corporation\n * @file Chat Icon\n * @author Will Cooper\n * @module Epic.VideoApp.Icons.Chat\n */\n\nimport React, { FC, memo } from \"react\";\nimport { IconProps } from \".\";\n\nconst Chat: FC = memo((props) => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n});\n\nChat.displayName = \"Chat\";\n\nexport default Chat;\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Chat button for the header\n * @author Noah Allen\n * @module Epic.VideoApp.Components.Header.Buttons.ChatButton\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback, useEffect, useState } from \"react\";\nimport { useStrings } from \"~/hooks\";\nimport { useGetFormattedHotkeyString } from \"~/hooks/useGetFormattedHotkeyString\";\nimport { combinedActions, uiActions, useMessageState, useUIState, useUserState } from \"~/state\";\nimport { resolveClassName } from \"~/utils/className\";\nimport Chat from \"../../../icons/chat\";\nimport styles from \"../ControlsHeader.module.scss\";\nimport ControlButton from \"./ControlButton\";\n\ninterface IProps {\n\tnoLabel?: boolean;\n\tnoTooltip?: boolean;\n}\n\nexport enum ChatButtonTestIds {\n\tself = \"ChatButton\",\n\tariaAlert = \"ChatButtonAriaAlert\",\n}\n\nenum TokenNames {\n\tnewMessageAriaAlert = \"NewMessageAriaAlertText\",\n\tchatEnabledTooltip = \"ChatEnabledTooltip\",\n\tchatNotEnabledHover = \"ChatNotEnabledHoverText\",\n\tchatEnabledHoverNoHotkeyText = \"ChatEnabledHoverNoHotkeyText\",\n}\n\nconst ChatButton: FC = (props: IProps) => {\n\tconst { noTooltip } = props;\n\tconst isChatOpen = useUIState((selectors) => selectors.getSidebarStatus(), []) === \"open\";\n\tconst dispatch = useDispatch();\n\tconst inWaitingRoom = useUserState((selectors) => selectors.getIsUserInWaitingRoom(), []);\n\tconst hasNotification = useMessageState((selectors) => selectors.getNumUnreadMessages() > 0, []);\n\tconst [shouldShowNotification, setShouldShowNotification] = useState(false);\n\tconst strings = useStrings(\"ChatButton\", Object.values(TokenNames));\n\n\tconst handleChatToggle = useCallback(() => {\n\t\tif (inWaitingRoom) {\n\t\t\treturn;\n\t\t}\n\t\tdispatch(uiActions.setSidebarStatus(isChatOpen ? \"closed\" : \"open\"));\n\t\tdispatch(combinedActions.clearToast());\n\t}, [dispatch, inWaitingRoom, isChatOpen]);\n\n\tconst chatKeyboardShortcut = [\"alt\", \"c\"];\n\tconst chatEnabledTooltipFormatted = useGetFormattedHotkeyString(\n\t\tstrings[TokenNames.chatEnabledTooltip],\n\t\tchatKeyboardShortcut,\n\t);\n\n\tconst label = inWaitingRoom ? strings[TokenNames.chatNotEnabledHover] : chatEnabledTooltipFormatted;\n\n\tuseEffect(() => {\n\t\tif (hasNotification && !inWaitingRoom && !isChatOpen) {\n\t\t\tsetShouldShowNotification(true);\n\t\t} else {\n\t\t\tsetShouldShowNotification(false);\n\t\t}\n\t}, [hasNotification, inWaitingRoom, isChatOpen]);\n\n\tconst buttonAriaLabel =\n\t\tlabel + (shouldShowNotification ? \" \" + strings[TokenNames.newMessageAriaAlert] : \"\");\n\n\tconst className = resolveClassName(styles, {\n\t\tbuttonActive: isChatOpen,\n\t\tnotification: shouldShowNotification,\n\t\tbuttonDisabled: inWaitingRoom,\n\t});\n\n\treturn (\n\t\t\n\t);\n};\n\nexport default ChatButton;\n","/**\n * @copyright Copyright 2020-2024 Epic Systems Corporation\n * @file disable camera button\n * @author Colin Walters\n * @module Epic.VideoApp.Components.Header.Buttons.DisableCameraButton\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback } from \"react\";\nimport { useLocalVideoToggle, useStrings } from \"~/hooks\";\nimport { useGetFormattedHotkeyString } from \"~/hooks/useGetFormattedHotkeyString\";\nimport { uiActions, useLocalTrackState, useUserState } from \"~/state\";\nimport { getCameraIcon } from \"~/utils/device\";\nimport styles from \"../ControlsHeader.module.scss\";\nimport ControlButton from \"./ControlButton\";\n\n/**\n * Props for DisableCameraButton component\n */\ninterface IProps {\n\t/** Whether or not the button should be rendered without a tooltip */\n\tnoTooltip?: boolean;\n}\n\nenum TokenNames {\n\tdisabled = \"CameraDisabled\",\n\tdisableCamera = \"DisableCamera\",\n\tenableCamera = \"EnableCamera\",\n}\n\n/**\n * Disable camera button\n * @param props The props ;)\n */\nconst DisableCameraButton: FC = (props) => {\n\tconst { noTooltip } = props;\n\tconst [enabled, toggleEnabled] = useLocalVideoToggle();\n\tconst isToggling = !!useLocalTrackState((selectors) => selectors.getTogglingCamera(), []);\n\tconst dispatch = useDispatch();\n\n\tconst strings = useStrings(\"DisableCameraButton\", Object.values(TokenNames));\n\n\t// wrapper to ignore the onClick handler's event param\n\tconst onClick = useCallback(() => toggleEnabled(), [toggleEnabled]);\n\tconst onLockedClick = useCallback(\n\t\t(event?: React.MouseEvent) => {\n\t\t\tevent?.nativeEvent.stopImmediatePropagation();\n\t\t\tdispatch(uiActions.setRequestMenuOpen(true));\n\t\t},\n\t\t[dispatch],\n\t);\n\tconst cameraLocked = useUserState((selectors) => selectors.getCameraLock(), []);\n\n\tlet extraClassName;\n\tif (cameraLocked) {\n\t\textraClassName = styles[\"locked\"];\n\t} else if (isToggling) {\n\t\textraClassName = styles[\"buttonDisabled\"];\n\t} else if (!enabled) {\n\t\textraClassName = styles[\"deviceDisabled\"];\n\t}\n\n\tconst tooltipText = strings[getTooltipToken(enabled, cameraLocked)];\n\tconst keyboardShortcut = [\"alt\", \"r\"];\n\tconst toolTipTextFormatted = useGetFormattedHotkeyString(tooltipText, keyboardShortcut);\n\n\treturn (\n\t\t\n\t);\n};\n\nfunction getTooltipToken(enabled: boolean, locked: boolean): string {\n\tif (locked) {\n\t\treturn TokenNames.disabled;\n\t}\n\treturn enabled ? TokenNames.disableCamera : TokenNames.enableCamera;\n}\n\nDisableCameraButton.displayName = \"DisableCameraButton\";\n\nexport default DisableCameraButton;\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file leave call button\n * @author Colin Walters\n * @module Epic.VideoApp.Components.Header.Buttons.LeaveCallButton\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback, useEffect, useRef } from \"react\";\nimport { useStrings } from \"~/hooks\";\nimport { useGetFormattedHotkeyString } from \"~/hooks/useGetFormattedHotkeyString\";\nimport Leave from \"~/icons/leave\";\nimport { alertActions, useUserState } from \"~/state\";\nimport { AlertType, IChoiceAlert } from \"~/types\";\nimport ControlButton from \"./ControlButton\";\n\n/**\n * Props for LeaveCallButton component\n */\ninterface IProps {\n\t/** Whether or not the button should be rendered without a label */\n\tnoLabel?: boolean;\n\n\t/** Whether or not the button should be rendered without a tooltip */\n\tnoTooltip?: boolean;\n}\n\nenum TokenNames {\n\tmessage = \"Message\",\n\tleaveCall = \"LeaveCall\",\n\tstayConnected = \"StayConnected\",\n}\n\n/**\n * Leave call button\n * @param props the props ;)\n */\nconst LeaveCallButton: FC = (props: IProps) => {\n\tconst { noLabel, noTooltip } = props;\n\n\tconst dispatch = useDispatch();\n\n\tconst strings = useStrings(\"LeaveCallButton\", Object.values(TokenNames));\n\tconst canEndVisit = useUserState((selectors) => selectors.getUserPermission(\"canStartEndVisit\"), []);\n\n\tconst stringsRef = useRef(strings);\n\tuseEffect(() => {\n\t\tstringsRef.current = strings;\n\t}, [strings]);\n\n\tconst leaveCallKeyboardShortcut = [\"alt\", \"l\"];\n\tconst leaveCallTooltipFormatted = useGetFormattedHotkeyString(\n\t\tstrings[TokenNames.leaveCall],\n\t\tleaveCallKeyboardShortcut,\n\t);\n\n\tconst onLeaveCall = useCallback(() => {\n\t\tif (canEndVisit) {\n\t\t\tdispatch(alertActions.postEndVisitAlert());\n\t\t} else {\n\t\t\t// Setup a modal to dispatch to the user\n\t\t\tconst disconnectAlert: IChoiceAlert = {\n\t\t\t\tmessage: stringsRef.current[\"Message\"],\n\t\t\t\tconfirmText: stringsRef.current[TokenNames.leaveCall],\n\t\t\t\tconfirmHotkey: \"L\",\n\t\t\t\tcancelText: stringsRef.current[TokenNames.stayConnected],\n\t\t\t\tcancelHotkey: \"S\",\n\t\t\t\ttype: AlertType.disconnectChoice,\n\t\t\t};\n\t\t\t// The resolution of the alert pop-up handles the potential disconnection\n\t\t\t// and routing of the user to the generic \"you left the call page\"\n\t\t\tdispatch(alertActions.postChoiceAlert(disconnectAlert));\n\t\t}\n\t}, [canEndVisit, dispatch]);\n\n\treturn (\n\t\t\n\t);\n};\n\nLeaveCallButton.displayName = \"LeaveCallButton\";\n\nexport default LeaveCallButton;\n","/**\n * @copyright Copyright 2020 Epic Systems Corporation\n * @file mute button\n * @author Colin Walters\n * @module Epic.VideoApp.Components.Header.Buttons.MuteButton\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback } from \"react\";\nimport { useLocalAudioToggle, useStrings } from \"~/hooks\";\nimport { useGetFormattedHotkeyString } from \"~/hooks/useGetFormattedHotkeyString\";\nimport { uiActions, useUserState } from \"~/state\";\nimport { getMicIcon } from \"~/utils/device\";\nimport styles from \"../ControlsHeader.module.scss\";\nimport ControlButton from \"./ControlButton\";\n\n/**\n * Props for MuteButton component\n */\ninterface IProps {\n\t/** Whether or not the button should be rendered without a tooltip */\n\tnoTooltip?: boolean;\n}\n\nenum TokenNames {\n\tmuteHotkey = \"MuteMicrophoneHotkey\",\n\tunmuteHotkey = \"UnmuteMicrophoneHotkey\",\n\tariaLabel = \"MuteMicrophone\",\n\tdisabled = \"MicrophoneDisabled\",\n\tmute = \"MuteMicrophone\",\n\tunmute = \"UnmuteMicrophone\",\n}\n\n/**\n * The MuteButton component\n * @param props The props ;)\n */\nconst MuteButton: FC = (props) => {\n\tconst { noTooltip } = props;\n\tconst [enabled, toggleEnabled] = useLocalAudioToggle();\n\tconst dispatch = useDispatch();\n\n\tconst strings = useStrings(\"MuteButton\", Object.values(TokenNames));\n\n\t// wrapper to ignore the onClick handler's event param\n\tconst onClick = useCallback(() => toggleEnabled(), [toggleEnabled]);\n\n\tconst onLockedClick = useCallback(\n\t\t(event?: React.MouseEvent) => {\n\t\t\tevent?.nativeEvent.stopImmediatePropagation();\n\t\t\tdispatch(uiActions.setRequestMenuOpen(true));\n\t\t},\n\t\t[dispatch],\n\t);\n\n\tconst muteLocked = useUserState((selectors) => selectors.getMicLock(), []);\n\n\tlet extraClassName;\n\tif (muteLocked) {\n\t\textraClassName = styles[\"locked\"];\n\t} else if (!enabled) {\n\t\textraClassName = styles[\"deviceDisabled\"];\n\t}\n\n\tconst tooltipText = strings[getTooltipToken(enabled, muteLocked)];\n\tconst keyboardShortcut = [\"alt\", \"m\"];\n\tconst tooltipFormatted = useGetFormattedHotkeyString(tooltipText, keyboardShortcut);\n\n\treturn (\n\t\t\n\t);\n};\n\nfunction getTooltipToken(enabled: boolean, locked: boolean): string {\n\tif (locked) {\n\t\treturn TokenNames.disabled;\n\t}\n\treturn enabled ? TokenNames.mute : TokenNames.unmute;\n}\n\nMuteButton.displayName = \"MuteButton\";\n\nexport default MuteButton;\n","/**\n * @copyright Copyright 2022 Epic Systems Corporation\n * @file Menu Page for setting patient admit controls\n * @author Will Cooper\n * @module Epic.VideoApp.Components.Participants.Moderation.SimpleRequestMenu\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback } from \"react\";\nimport BaseButton from \"~/components/Utilities/BaseButton\";\nimport { useStrings } from \"~/hooks\";\nimport { useBroadcastMediaAccessRequest } from \"~/hooks/messaging\";\nimport Camera from \"~/icons/camera\";\nimport Mic from \"~/icons/mic\";\nimport ScreenShareStart from \"~/icons/screenShareStart\";\nimport { useUserState, userActions } from \"~/state/user\";\nimport { resolveClassName } from \"~/utils/className\";\nimport { useIsScreenShareSupported } from \"~/web-core/hooks/useIsScreenShareSupported\";\nimport styles from \"./ParticipantControlMenu.module.scss\";\n\nenum TokenNames {\n\tvideoRequest = \"VideoRequest\",\n\taudioRequest = \"AudioRequest\",\n\tscreenShareRequest = \"ScreenShareRequest\",\n}\n\nexport enum SimpleRequestMenuTestIds {\n\tmicButton = \"micRequestButton\",\n\tcameraButton = \"cameraRequestButton\",\n\tscreenShareButton = \"screenShareRequestButton\",\n}\n\n/**\n * SimpleRequestMenu\n */\nconst SimpleRequestMenu: FC = () => {\n\tconst [micLocked, cameraLocked, screenShareLocked, requestState, screenShareAllowed] = useUserState(\n\t\t(selectors) => [\n\t\t\tselectors.getMicLock(),\n\t\t\tselectors.getCameraLock(),\n\t\t\tselectors.getScreenShareLock(),\n\t\t\tselectors.getDeviceRequestStatus(),\n\t\t\tselectors.getUserPermission(\"canShareScreen\"),\n\t\t],\n\t\t[],\n\t);\n\tconst screenShareSupported = useIsScreenShareSupported();\n\tconst hideScreenShare = !screenShareSupported || !screenShareAllowed;\n\tconst broadcastRequest = useBroadcastMediaAccessRequest();\n\n\tconst strings = useStrings(\"RequestOptions\", Object.values(TokenNames));\n\tconst dispatch = useDispatch();\n\n\tconst { audio: audioRequested, video: videoRequested, screenShare: screenShareRequested } = requestState;\n\n\tconst sendRequestMessage = useCallback(\n\t\t(audio?: boolean, video?: boolean, screenShare?: boolean) => {\n\t\t\tdispatch(\n\t\t\t\tuserActions.setRequestTimeout({\n\t\t\t\t\taudio: audio ?? audioRequested,\n\t\t\t\t\tvideo: video ?? videoRequested,\n\t\t\t\t\tscreenShare: screenShare ?? screenShareRequested,\n\t\t\t\t}),\n\t\t\t);\n\t\t\tbroadcastRequest({ audio: audio, video: video, screenShare: screenShare });\n\t\t},\n\t\t[audioRequested, broadcastRequest, dispatch, screenShareRequested, videoRequested],\n\t);\n\n\tconst sendAudioRequestMessage = useCallback(() => {\n\t\tsendRequestMessage(true, undefined, undefined);\n\t}, [sendRequestMessage]);\n\n\tconst sendVideoRequestMessage = useCallback(() => {\n\t\tsendRequestMessage(undefined, true, undefined);\n\t}, [sendRequestMessage]);\n\n\tconst sendScreenShareRequestMessage = useCallback(() => {\n\t\tsendRequestMessage(undefined, undefined, true);\n\t}, [sendRequestMessage]);\n\n\tconst menuClass = resolveClassName(styles, {\n\t\tmoderatorMenu: true,\n\t\tmenu: true,\n\t});\n\tconst buttonClass = resolveClassName(styles, {\n\t\tmoderatorRow: true,\n\t\tmenu: true,\n\t});\n\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t\n\t\t\t{!hideScreenShare && (\n\t\t\t\t\n\t\t\t)}\n\t\t
\n\t);\n};\n\nSimpleRequestMenu.displayName = \"SimpleRequestMenu\";\n\nexport default SimpleRequestMenu;\n","/**\n * @copyright Copyright 2022-2024 Epic Systems Corporation\n * @file Button used to open a simple drop down that has options to request audio and video access from a moderator\n * @author Will Cooper\n * @module Epic.VideoApp.Components.Header.Buttons.OpenRequestDeviceMenuButton\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback, useEffect, useState } from \"react\";\nimport SimpleRequestMenu from \"~/components/Participants/Moderation/SimpleRequestMenu\";\nimport { useStrings } from \"~/hooks\";\nimport { useGetFormattedHotkeyString } from \"~/hooks/useGetFormattedHotkeyString\";\nimport chevron from \"~/icons/chevron\";\nimport { uiActions, useUIState } from \"~/state\";\nimport { useUserState } from \"~/state/user\";\nimport { EpicUserType } from \"~/types\";\nimport { resolveClassName } from \"~/utils/className\";\nimport { useIsScreenShareSupported } from \"~/web-core/hooks/useIsScreenShareSupported\";\nimport styles from \"../ControlsHeader.module.scss\";\nimport GenericMenuPage from \"../Menu/GenericMenuPage\";\nimport ControlButton from \"./ControlButton\";\n\ninterface IProps {\n\tnoTooltip?: boolean;\n}\n\nenum TokenNames {\n\tlabel = \"Label\",\n\tlabelGeneric = \"LabelGeneric\",\n}\n/**\n * The OpenRequestDeviceMenuButton component\n */\nconst OpenRequestDeviceMenuButton: FC = (props) => {\n\tconst { noTooltip } = props;\n\tconst [micLocked, cameraLocked, screenShareLocked, userType, screenShareAllowed] = useUserState(\n\t\t(selectors) => [\n\t\t\tselectors.getMicLock(),\n\t\t\tselectors.getCameraLock(),\n\t\t\tselectors.getScreenShareLock(),\n\t\t\tselectors.getUserType(),\n\t\t\tselectors.getUserPermission(\"canShareScreen\"),\n\t\t],\n\t\t[],\n\t);\n\tconst screenShareSupported = useIsScreenShareSupported();\n\tconst displayScreenShareOptions = screenShareSupported && screenShareAllowed;\n\tconst visibleMenu = useUIState((selectors) => selectors.getVisibleMenu(), []);\n\tconst menuOpen = useUIState((selectors) => selectors.getRequestMenuOpen(), []);\n\tconst [menuOpened, setWasOpened] = useState(false);\n\n\tconst strings = useStrings(\"RequestOptions\", Object.values(TokenNames));\n\tconst menuClassName = resolveClassName(styles, { soloMenu: true });\n\tconst dispatch = useDispatch();\n\n\tconst onClick = useCallback(\n\t\t(event?: React.MouseEvent) => {\n\t\t\tevent?.nativeEvent.stopImmediatePropagation();\n\t\t\tdispatch(uiActions.setRequestMenuOpen(!menuOpen));\n\t\t},\n\t\t[dispatch, menuOpen],\n\t);\n\n\tconst onClickOutsideMenu = useCallback(() => {\n\t\tdispatch(uiActions.setRequestMenuOpen(false));\n\t}, [dispatch]);\n\n\tconst onKeyDown = useCallback(\n\t\t(event: React.KeyboardEvent) => {\n\t\t\t// when the menu is open, if the user reverse tabs, close the menu\n\t\t\tif (menuOpen && event.key.toLowerCase() === \"tab\" && event.shiftKey) {\n\t\t\t\tdispatch(uiActions.setRequestMenuOpen(false));\n\t\t\t}\n\t\t},\n\t\t[dispatch, menuOpen],\n\t);\n\n\tuseEffect(() => {\n\t\tif (menuOpen) {\n\t\t\tdispatch(uiActions.toggleVisibleMenu({ menu: null }));\n\t\t\tsetWasOpened(true);\n\t\t}\n\t}, [dispatch, menuOpen]);\n\n\t/** Clean-up useEffect */\n\tuseEffect(() => {\n\t\tif (!cameraLocked && !micLocked) {\n\t\t\t// Reset notification state when moderation state was cleared\n\t\t\tdispatch(uiActions.setRequestMenuOpen(false));\n\t\t}\n\n\t\tif (visibleMenu) {\n\t\t\t// Clean up this menu if another opens\n\t\t\tdispatch(uiActions.setRequestMenuOpen(false));\n\t\t}\n\t}, [cameraLocked, dispatch, micLocked, visibleMenu]);\n\n\tconst pressed = menuOpen;\n\n\tconst className = resolveClassName(styles, {\n\t\tnotification: !menuOpened,\n\t\ttoggleChevron: true,\n\t\tcollapsed: !menuOpen,\n\t\tminimized: true,\n\t});\n\n\tconst openKeyboardShortcut = [\"alt\", \"q\"];\n\tlet label = displayScreenShareOptions ? strings[TokenNames.labelGeneric] : strings[TokenNames.label];\n\tlabel = useGetFormattedHotkeyString(label, openKeyboardShortcut);\n\n\tif (\n\t\t(!micLocked && !cameraLocked && !(displayScreenShareOptions && screenShareLocked)) ||\n\t\tuserType === EpicUserType.emp\n\t) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t
\n\t);\n};\n\nOpenRequestDeviceMenuButton.displayName = \"OpenRequestDeviceMenuButton\";\n\nexport default OpenRequestDeviceMenuButton;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file button to toggle the button tray\n * @author Colin Walters\n * @module Epic.VideoApp.Components.Header.Buttons.ToggleButtonTrayButton\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback } from \"react\";\nimport BaseButton from \"~/components/Utilities/BaseButton\";\nimport { useStrings } from \"~/hooks\";\nimport Chevron from \"~/icons/chevron\";\nimport { uiActions, useMessageState, useUIState, useUserState } from \"~/state\";\nimport { resolveClassName } from \"~/utils/className\";\nimport styles from \"../ControlsHeader.module.scss\";\n\n/**\n * The ToggleButtonTrayButton component\n */\nconst ToggleButtonTrayButton: FC = () => {\n\tconst collapsed = useUIState((selectors) => selectors.getButtonTrayCollapsed(), []);\n\tconst inWaitingRoom = useUserState((selectors) => selectors.getIsUserInWaitingRoom(), []);\n\tconst sidebarOpen = useUIState((selectors) => selectors.getSidebarStatus(), []) === \"open\";\n\tconst hasNotification = useMessageState((selectors) => selectors.getNumUnreadMessages() > 0, []);\n\tconst dispatch = useDispatch();\n\n\tconst strings = useStrings(\"ToggleButtonTrayButton\", [\"AriaLabel\"]);\n\n\tconst onClick = useCallback(() => {\n\t\tdispatch(uiActions.toggleButtonTrayCollapsed());\n\t}, [dispatch]);\n\n\tconst className = resolveClassName(styles, {\n\t\ttoggleChevron: true,\n\t\tcollapsed,\n\t\tnotification: collapsed && hasNotification && !inWaitingRoom && !sidebarOpen,\n\t});\n\n\treturn (\n\t\t\n\t);\n};\n\nToggleButtonTrayButton.displayName = \"ToggleButtonTrayButton\";\n\nexport default ToggleButtonTrayButton;\n","/**\n * @copyright Copyright 2023 Epic Systems Corporation\n * @file in-header controls\n * @author Colin Walters\n * @module Epic.VideoApp.Components.Header.InHeaderControls\n */\n\nimport React, { FC, useContext } from \"react\";\nimport { useWindowSize } from \"~/hooks\";\nimport { useUserState } from \"~/state\";\nimport { VideoSessionContext } from \"~/web-core/components/VideoSessionProvider\";\nimport { useChatState } from \"../../state/chat\";\nimport { CallDurationTimerDestination } from \"../CallDurationTimer/CallDurationTimerDestination\";\nimport NetworkQualityIndicator from \"../NetworkQualityIndicator/NetworkQualityIndicator\";\nimport ChangeCameraButton from \"./Buttons/ChangeCameraButton\";\nimport ChatButton from \"./Buttons/ChatButton\";\nimport DisableCameraButton from \"./Buttons/DisableCameraButton\";\nimport LeaveCallButton from \"./Buttons/LeaveCallButton\";\nimport MoreMenuButton from \"./Buttons/MoreMenuButton\";\nimport MuteButton from \"./Buttons/MuteButton\";\nimport OpenRequestDeviceMenuButton from \"./Buttons/OpenRequestDeviceMenuButton\";\nimport ParticipantsButton from \"./Buttons/ParticipantsButton\";\nimport PictureInPictureButton from \"./Buttons/PictureInPictureButton\";\nimport ScreenShareButton from \"./Buttons/ScreenShareButton\";\nimport ToggleButtonTrayButton from \"./Buttons/ToggleButtonTrayButton\";\nimport styles from \"./ControlsHeader.module.scss\";\nimport { MinWidthForChangeCamInHeader, MinWidthForPiPButtonInHeader } from \"./Menu/BaseMenu\";\nimport { useHeaderDisplayMode } from \"./hooks/useHeaderDisplayMode\";\nimport { useShowParticipantButtonInHeader } from \"./hooks/useShowParticipantButtonInHeader\";\n\nconst MORE_OPTIONS_LABEL_THRESHOLD = 1700;\nconst LEAVE_LABEL_THRESHOLD = 1400;\n\nexport enum InHeaderControlsTestIds {\n\tcontrolsInHeaderMenuButtons = \"MenuButtons\",\n\tcontrolsInHeaderButtons = \"ButtonsGrouping\",\n\tcontrolsInHeaderLeaveButton = \"LeaveButton\",\n\tnoControlsInHeader = \"noHeaderControls\",\n\tnetworkAndTimerGrouping = \"NetworkAndTimer\",\n}\n\n/**\n * The InHeaderControls component\n */\nconst InHeaderControls: FC = () => {\n\tconst { width } = useWindowSize();\n\tconst { session } = useContext(VideoSessionContext);\n\n\tconst headerDisplayMode = useHeaderDisplayMode();\n\tconst showChangeCamera = width >= MinWidthForChangeCamInHeader;\n\tconst inWaitingRoom = useUserState((selectors) => selectors.getIsUserInWaitingRoom(), []);\n\tconst showParticipantButton = useShowParticipantButtonInHeader();\n\tconst showMoreOptionsButtonLabel = width >= MORE_OPTIONS_LABEL_THRESHOLD;\n\tconst showLeaveCallButtonLabel = width >= LEAVE_LABEL_THRESHOLD;\n\tconst showPiPButton = width >= MinWidthForPiPButtonInHeader;\n\n\tconst chatEnabled = useChatState((selectors) => selectors.getChatEnabled(), []);\n\n\t// to ensure the timer stays accurate when the header is hidden, CallDurationTimer is always\n\t// rendered in VideoRoom, but CallDurationTimerDestination can conditionally be in the DOM\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t\t{headerDisplayMode === \"controls-in-header\" ? (\n\t\t\t\t<>\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t{showChangeCamera && }\n\t\t\t\t\t\t{showParticipantButton && }\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{!inWaitingRoom && showPiPButton && }\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t{!inWaitingRoom && }\n\t\t\t\t\t\t\n\t\t\t\t\t\t{!inWaitingRoom && chatEnabled && }\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) : (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t)}\n\t\t\n\t);\n};\n\nInHeaderControls.displayName = \"InHeaderControls\";\n\nexport default InHeaderControls;\n","/**\n * @copyright Copyright 2023 Epic Systems Corporation\n * @file hook to toggle local screen share audio track mute/unmute\n * @author Trevor Roussel\n * @module Epic.VideoApp.Hooks.UseLocalScreenShareAudioToggle\n */\n\nimport { useCallback, useContext } from \"react\";\nimport { ToggleState } from \"~/types\";\nimport { boolMatchesToggleState } from \"~/utils/general\";\nimport { VideoSessionContext } from \"~/web-core/components\";\nimport { useIsStreamEnabled } from \"~/web-core/hooks/useIsStreamEnabled\";\nimport { useStream } from \"~/web-core/hooks/useStream\";\nimport { ILocalUser } from \"~/web-core/interfaces\";\n\n/**\n * Hook to get the status of if the local screen share audio track is enabled and toggle enable/disable\n * @returns tuple with the current enabled/disabled status and function to toggle that status\n */\nexport function useLocalScreenShareAudioToggle(): [boolean, (forceState?: ToggleState) => void] {\n\tconst { session } = useContext(VideoSessionContext);\n\tconst shareStream = useStream(session?.localUser, \"screen\");\n\tconst isSharingAudio = useIsStreamEnabled(\"audio\", shareStream);\n\n\tconst toggleShareAudioEnabled = useCallback(\n\t\t(forceState?: ToggleState) => {\n\t\t\tif (boolMatchesToggleState(isSharingAudio, forceState)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (isSharingAudio) {\n\t\t\t\tshareStream?.toggleState(\"audio\", false);\n\t\t\t} else {\n\t\t\t\tshareStream?.toggleState(\"audio\", true);\n\t\t\t}\n\t\t},\n\t\t[isSharingAudio, shareStream],\n\t);\n\n\treturn [isSharingAudio, toggleShareAudioEnabled];\n}\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file base banner component\n * @author Colin Walters\n * @module Epic.VideoApp.Components.Header.Banner.BannerBase\n */\n\nimport React, { ComponentType, FC, memo } from \"react\";\nimport { IconProps } from \"~/icons\";\nimport { resolveClassName } from \"~/utils/className\";\nimport styles from \"./Banner.module.scss\";\n\n/**\n * Props for BannerBase Component\n */\ninterface IProps {\n\t/** Icon to include in the banner */\n\ticon?: ComponentType;\n\n\t/** Props that should be passed to the icon */\n\ticonProps?: IconProps;\n\n\t/** Header string */\n\theader?: string;\n\n\t/** Banner text */\n\ttext?: string;\n}\n\nexport enum BannerBaseTestIds {\n\tself = \"BannerBase\",\n\theader = \"BannerBaseHeader\",\n\ttext = \"BannerBaseText\",\n}\n\n/**\n * The BannerBase component\n * @param props The props ;)\n */\nconst BannerBase: FC = memo((props) => {\n\tconst { icon: Icon, header, text, children, iconProps = {} } = props;\n\n\tconst headerClassname = resolveClassName(styles, { noText: !text }, styles[\"header\"]);\n\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t\t{Icon && (\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t)}\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t{header}\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t{text}\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t\t{children}\n\t\t
\n\t);\n});\n\nBannerBase.displayName = \"BannerBase\";\n\nexport default BannerBase;\n","/**\n * @copyright Copyright 2021-2023 Epic Systems Corporation\n * @file screen sharing banner component\n * @author Colin Walters\n * @module Epic.VideoApp.Components.Header.Banner.ScreenShareBanner\n */\n\nimport React, { FC, useCallback, useContext } from \"react\";\nimport { ShareContext } from \"~/components/ScreenShareContext\";\nimport ActionButton from \"~/components/Utilities/ActionButton\";\nimport { useStrings } from \"~/hooks\";\nimport { useLocalScreenShareAudioToggle } from \"~/hooks/useLocalScreenShareAudioToggle\";\nimport { isMacSafari } from \"~/utils/os\";\nimport { SharedStringTokens } from \"~/utils/strings\";\nimport { VideoSessionContext } from \"~/web-core/components\";\nimport { useStream } from \"~/web-core/hooks/useStream\";\nimport styles from \"./Banner.module.scss\";\nimport BannerBase from \"./BannerBase\";\n\n/** String tokens used by the ScreenShareBanner component */\nenum TokenNames {\n\theader = \"Header\",\n\tchangeButtonLabel = \"ChangeButtonLabel\",\n\tstopButtonLabel = \"StopButtonLabel\",\n\tmuteButtonLabel = \"MuteButtonLabel\",\n\tunmuteButtonLabel = \"UnmuteButtonLabel\",\n}\n\nexport enum ScreenShareBannerTestIds {\n\tstopSharebutton = \"StopShareButton\",\n\tchangeScreenButton = \"ChangeScreenButton\",\n\tmuteShareAudiobutton = \"MuteShareAudioButton\",\n}\n\n/**\n * The ScreenShareBanner component\n */\nconst ScreenShareBanner: FC = () => {\n\tconst { requestScreenShareTrack, removeScreenShareTrack } = useContext(ShareContext);\n\tconst { session } = useContext(VideoSessionContext);\n\n\tconst strings = useStrings(\"ScreenShareBanner\", Object.values(TokenNames), [\n\t\tSharedStringTokens.warningIconAriaLabel,\n\t]);\n\n\tconst stream = useStream(session?.localUser, \"screen\");\n\tconst hasAudio = stream?.hasAudio();\n\tconst [isScreenShareAudioEnabled, toggleScreenShareAudio] = useLocalScreenShareAudioToggle();\n\n\t// indicate to requestScreenShareTrack that we're replacing an existing track\n\tconst requestScreenShareTrackWrapper = useCallback(() => {\n\t\tvoid requestScreenShareTrack?.(true);\n\t}, [requestScreenShareTrack]);\n\n\tconst removeScreenShareTrackWrapper = useCallback(() => {\n\t\tvoid removeScreenShareTrack?.();\n\t}, [removeScreenShareTrack]);\n\n\tconst toggleScreenShareAudioWrapper = useCallback(() => {\n\t\tvoid toggleScreenShareAudio();\n\t}, [toggleScreenShareAudio]);\n\n\tconst audioMuteLabel = isScreenShareAudioEnabled\n\t\t? strings[TokenNames.muteButtonLabel]\n\t\t: strings[TokenNames.unmuteButtonLabel];\n\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t{hasAudio && (\n\t\t\t\t\t\n\t\t\t\t\t\t{audioMuteLabel}\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t\t{!isMacSafari && (\n\t\t\t\t\t\n\t\t\t\t\t\t{strings[TokenNames.changeButtonLabel]}\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t\t\n\t\t\t\t\t{strings[TokenNames.stopButtonLabel]}\n\t\t\t\t\n\t\t\t
\n\t\t\n\t);\n};\n\nScreenShareBanner.displayName = \"ScreenShareBanner\";\n\nexport default ScreenShareBanner;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file informational banner to be displayed under the call header\n * @author Colin Walters\n * @module Epic.VideoApp.Components.Header.Banner.Banner\n */\n\nimport React, { FC } from \"react\";\nimport { useAlertState } from \"~/state\";\nimport ScreenShareBanner from \"./ScreenShareBanner\";\n\n/**\n * The Banner component\n */\nconst Banner: FC = () => {\n\tconst banner = useAlertState((selectors) => selectors.getBanner(), []);\n\n\tif (!banner) {\n\t\treturn null;\n\t}\n\n\tswitch (banner) {\n\t\tcase \"local-screen-share\":\n\t\t\treturn ;\n\t}\n};\n\nBanner.displayName = \"Banner\";\n\nexport default Banner;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file button tray used on narrow screens\n * @author Colin Walters\n * @module Epic.VideoApp.Components.Header.ButtonTray\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useEffect } from \"react\";\nimport { useWindowSize } from \"~/hooks\";\nimport { uiActions, useUIState, useUserState } from \"~/state\";\nimport { useChatState } from \"~/state/chat\";\nimport Collapse from \"../Utilities/Collapse\";\nimport ChangeCameraButton from \"./Buttons/ChangeCameraButton\";\nimport ChatButton from \"./Buttons/ChatButton\";\nimport DisableCameraButton from \"./Buttons/DisableCameraButton\";\nimport LeaveCallButton from \"./Buttons/LeaveCallButton\";\nimport MoreMenuButton from \"./Buttons/MoreMenuButton\";\nimport MuteButton from \"./Buttons/MuteButton\";\nimport OpenRequestDeviceMenuButton from \"./Buttons/OpenRequestDeviceMenuButton\";\nimport styles from \"./ControlsHeader.module.scss\";\nimport { MinWidthForChangeCamInDrawer } from \"./Menu/BaseMenu\";\nimport { useHeaderDisplayMode } from \"./hooks/useHeaderDisplayMode\";\n\ninterface IProps {\n\tid?: string;\n}\n\nexport enum ButtonTrayTestIds {\n\ttray = \"ButtonTrayTray\",\n\tcollapse = \"ButtonTrayCollapse\",\n\tmoreMenu = \"ButtonTrayMoreMenuButton\",\n\tchangeCamera = \"ButtonTrayChangeCameraButton\",\n\tmute = \"ButtonTrayMuteButton\",\n\tdisableCamera = \"ButtonTrayDisableCameraButton\",\n\topenRequestDevice = \"ButtonTrayOpenRequestDeviceMenuButton\",\n\tleaveCall = \"ButtonTrayLeaveCallButton\",\n}\n\n/**\n * The ButtonTray component\n */\nconst ButtonTray: FC = (props) => {\n\tconst { id } = props;\n\tconst { width } = useWindowSize();\n\tconst buttonTrayCollapsed = useUIState((selectors) => selectors.getButtonTrayCollapsed(), []);\n\tconst inWaitingRoom = useUserState((selectors) => selectors.getIsUserInWaitingRoom(), []);\n\tconst chatEnabled = useChatState((selectors) => selectors.getChatEnabled(), []);\n\tconst headerDisplayMode = useHeaderDisplayMode();\n\tconst dispatch = useDispatch();\n\n\tuseEffect(() => {\n\t\t// if the screen size shrinks to the point where there's no header, keep the button tray open\n\t\tif (headerDisplayMode === \"no-header\") {\n\t\t\tdispatch(uiActions.forceButtonTrayOpen());\n\t\t}\n\t}, [headerDisplayMode, dispatch]);\n\n\tconst showChangeCamera = width >= MinWidthForChangeCamInDrawer;\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t{showChangeCamera && }\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t{!inWaitingRoom && chatEnabled && }\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t);\n};\n\nButtonTray.displayName = \"ButtonTray\";\n\nexport default ButtonTray;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file in-call trays: drop down menu & button try on small screens\n * @author Colin Walters\n * @module Epic.VideoApp.Components.Header.Trays\n */\n\nimport React, { FC } from \"react\";\nimport Banner from \"./Banner/Banner\";\nimport ButtonTray from \"./ButtonTray\";\nimport styles from \"./ControlsHeader.module.scss\";\nimport { useHeaderDisplayMode } from \"./hooks/useHeaderDisplayMode\";\nimport { MoreOptionsMenuWrapperId } from \"./Menu/DropDownMenus\";\nimport Toasts from \"./Toasts/Toasts\";\n\nexport enum TraysTestIds {\n\tcontrolsInHeader = \"ControlsInHeader\",\n\tbuttonTray = \"TraysButtonTray\",\n\tnoHeader = \"TraysNoHeader\",\n}\n\n/**\n * The Trays component\n */\nconst Trays: FC = () => {\n\tconst headerDisplayMode = useHeaderDisplayMode();\n\n\tif (headerDisplayMode === \"controls-in-header\") {\n\t\t// don't absolutely position the banner within the trays div to avoid covering participants\n\t\treturn (\n\t\t\t<>\n\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\n\t\t);\n\t}\n\n\tif (headerDisplayMode === \"button-tray\") {\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\n\t\t);\n\t}\n\n\tif (headerDisplayMode === \"no-header\") {\n\t\t// don't absolutely position the button tray within the trays div to avoid covering participants\n\t\treturn (\n\t\t\t<>\n\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\n\t\t);\n\t}\n\n\t// if a new format gets added we'll have to define how it gets formatted\n\treturn null;\n};\n\nTrays.displayName = \"Trays\";\n\nexport default Trays;\n","/**\n * @copyright Copyright 2020-2021 Epic Systems Corporation\n * @file in call controls header component\n * @author Colin Walters\n * @module Epic.VideoApp.Components.Header.ControlsHeader\n */\n\nimport React, { FC } from \"react\";\nimport HeaderBar from \"./HeaderBar\";\nimport InHeaderControls from \"./InHeaderControls\";\nimport Trays from \"./Trays\";\n\n/**\n * The ControlsHeader component\n */\nconst ControlsHeader: FC = () => {\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t
\n\t);\n};\n\nControlsHeader.displayName = \"ControlsHeader\";\n\nexport default ControlsHeader;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file Image Capture Description Input\n * @author Spencer Eanes\n * @module Epic.VideoApp.Components.ImageCapture.Controls.DescriptionInput\n */\n\nimport React, { FC, useCallback, useState } from \"react\";\nimport TextInput from \"~/components/Utilities/TextInput\";\nimport { useStrings } from \"~/hooks\";\nimport { useSettingsState } from \"~/state\";\nimport { ENABLED_LOCALES } from \"~/types/locale\";\nimport { stringFormat } from \"~/utils/strings\";\nimport { getUnsupportedCharacters, sanitizeInput } from \"~/utils/text\";\nimport { DescriptionMaxLength } from \"../../../types\";\nimport { IValidatedDescription } from \"../ImagePreviewPane\";\nimport styles from \"./DescriptionInput.module.scss\";\n\n/**\n * Props for DescriptionInput Component\n */\ninterface IProps {\n\tsetValidatedDescription: (validatedDescription: IValidatedDescription) => void;\n}\n\nenum TokenNames {\n\tcharactersWarning = \"AllowedCharactersWarning\",\n\tdescriptionHelpText = \"DescriptionHelpText\",\n\tdescriptionLength = \"DescriptionLength\",\n}\n\nexport enum DescriptionInputTestIds {\n\tdisabledLocaleWarning = \"DisabledLocaleWarning\",\n}\n\n/**\n * The DescriptionInput component\n * @param props The props\n */\nconst DescriptionInput: FC = (props) => {\n\tconst { setValidatedDescription } = props;\n\tconst locale = useSettingsState((selectors) => selectors.getLocale(), []);\n\tconst strings = useStrings(\"DescriptionInput\", Object.values(TokenNames));\n\tconst [invalidCharacters, setInvalidCharacters] = useState(\"\");\n\tconst [descriptionLength, setDescriptionLength] = useState(0);\n\n\t// Keep track of the input on every keystroke\n\tconst updateInput = useCallback(\n\t\t(event: React.ChangeEvent) => {\n\t\t\t// Escape markup, but don't remove unsupported characters.\n\t\t\t// Unsupported characters will be displayed in a warning message.\n\t\t\tconst currentInput = sanitizeInput(event.target.value, DescriptionMaxLength);\n\t\t\tevent.target.value = currentInput;\n\t\t\tconst unsupported = getUnsupportedCharacters(currentInput);\n\t\t\tsetInvalidCharacters(unsupported);\n\t\t\tsetValidatedDescription({ text: currentInput.trim(), isValid: !unsupported });\n\t\t\tsetDescriptionLength(currentInput.length);\n\t\t},\n\t\t[setValidatedDescription],\n\t);\n\n\tconst disabledLocale = ENABLED_LOCALES[locale]?.isWin1252Incompatible;\n\n\treturn (\n\t\t<>\n\t\t\t{disabledLocale && (\n\t\t\t\t\n\t\t\t\t\t{strings[TokenNames.charactersWarning]}\n\t\t\t\t\n\t\t\t)}\n\t\t\t\n\t\t\t
\n\t\t\t\t{stringFormat(\n\t\t\t\t\tstrings[TokenNames.descriptionLength],\n\t\t\t\t\tDescriptionMaxLength - descriptionLength,\n\t\t\t\t)}\n\t\t\t
\n\t\t\n\t);\n};\n\nDescriptionInput.displayName = \"DescriptionInput\";\n\nexport default DescriptionInput;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file Trash can icon\n * @author Spencer Eanes\n * @module Epic.VideoApp.Icons.Trash\n */\n\nimport React, { FC, memo } from \"react\";\nimport { IconProps } from \".\";\n\n/**\n * The Trash component\n * @param props The props ;)\n */\nconst Trash: FC = memo((props) => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t);\n});\n\nTrash.displayName = \"Trash\";\n\nexport default Trash;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file Discard Button\n * @author SpencerEanes\n * @module Epic.VideoApp.Components.ImageCapture.Controls.DiscardButton\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback } from \"react\";\nimport ActionButton from \"~/components/Utilities/ActionButton\";\nimport { useStrings } from \"~/hooks\";\nimport { useGetFormattedHotkeyString } from \"~/hooks/useGetFormattedHotkeyString\";\nimport trashIcon from \"~/icons/trash\";\nimport { combinedActions, imageActions } from \"~/state\";\n\nenum TokenNames {\n\tdiscardButtonAria = \"DiscardButtonAria\",\n\ttooltip = \"Tooltip\",\n}\n\nexport enum DiscardButtonTestIds {\n\tself = \"DiscardButton\",\n}\n\n/**\n * The DiscardButton component\n */\nconst DiscardButton: FC = () => {\n\tconst dispatch = useDispatch();\n\n\tconst strings = useStrings(\"DiscardButton\", Object.values(TokenNames));\n\n\tconst discard = useCallback(() => {\n\t\tdispatch(imageActions.setImageData(null));\n\t\tdispatch(combinedActions.clearImageCaptureActive());\n\t}, [dispatch]);\n\n\tconst discardKeyboardShortcut = [\"alt\", \"t\"];\n\tconst tooltipFormatted = useGetFormattedHotkeyString(\n\t\tstrings[TokenNames.tooltip],\n\t\tdiscardKeyboardShortcut,\n\t);\n\tconst ariaFormatted = useGetFormattedHotkeyString(\n\t\tstrings[TokenNames.discardButtonAria],\n\t\tdiscardKeyboardShortcut,\n\t);\n\n\treturn (\n\t\t\n\t);\n};\n\nDiscardButton.displayName = \"DiscardButton\";\n\nexport default DiscardButton;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file The selector used to pick the document type associated with image capture\n * @author Will Cooper\n * @module Epic.VideoApp.Components.ImageCapture.Controls.DocumentTypeSelector\n */\n\nimport React, { FC, useCallback, useEffect, useState } from \"react\";\nimport { useStrings } from \"~/hooks\";\nimport { useImageState } from \"~/state\";\nimport { ITelemedicineDocType } from \"~/types\";\nimport { selectDefaultDocumentType } from \"~/utils/imageCapture\";\nimport { stringFormat } from \"~/utils/strings\";\nimport styles from \"../ImagePreviewPane.module.scss\";\n\ninterface ISelectorProps {\n\tsetDocType: (docType: ITelemedicineDocType | null) => void;\n}\n\nenum TokenNames {\n\timageType = \"ImageType\",\n\tdocumentType = \"DocumentType\",\n}\n\nexport enum DocumentTypeSelectorTestIds {\n\tself = \"DocumentTypeSelector\",\n}\n\n/**\n * Drop down selector to choose different image type category values\n * @param props - The list of available document types for the current user\n */\nconst DocumentTypeSelector: FC = (props) => {\n\tconst { setDocType: setParentDocType } = props;\n\tconst strings = useStrings(\"DocumentTypeSelector\", Object.values(TokenNames));\n\tconst docTypes = useImageState((selectors) => selectors.getDocumentTypes(), []);\n\tconst [selectedDocumentType, setDocType] = useState(\n\t\tselectDefaultDocumentType(docTypes),\n\t);\n\n\t// Keep ImagePreviewPane doc type state in sync with this components state\n\tuseEffect(() => {\n\t\tsetParentDocType(selectedDocumentType);\n\t}, [selectedDocumentType, setParentDocType]);\n\n\tconst onSelectorChange = useCallback(\n\t\t(event: React.ChangeEvent) => {\n\t\t\tconst chosenType = docTypes.find((type) => type.id === event.target.value);\n\t\t\tif (chosenType) {\n\t\t\t\tsetDocType(chosenType);\n\t\t\t}\n\t\t},\n\t\t[docTypes, setDocType],\n\t);\n\n\t// with 0 or 1 options, show placeholder text or nothing\n\tif (!docTypes || !docTypes.length || (docTypes && docTypes.length === 1) || !selectedDocumentType) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\t{docTypes.map((doc) => {\n\t\t\t\t\tconst label = doc.title || stringFormat(strings[TokenNames.imageType], doc.id);\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t\n\t\t
\n\t);\n};\n\nDocumentTypeSelector.displayName = \"DocumentTypeSelector\";\n\nexport default DocumentTypeSelector;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file image Capture pane exit button\n * @author Spencer Eanes\n * @module Epic.VideoApp.Components.ImageCapture.Controls.ExitButton\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, RefObject, useCallback, useEffect, useRef } from \"react\";\nimport { useStrings } from \"~/hooks\";\nimport { useGetFormattedHotkeyString } from \"~/hooks/useGetFormattedHotkeyString\";\nimport { alertActions } from \"~/state\";\nimport { AlertType, IChoiceAlert } from \"~/types\";\nimport Error from \"../../../icons/error\";\nimport BaseButton from \"../../Utilities/BaseButton\";\nimport styles from \"../ImagePreviewPane.module.scss\";\n\ninterface IExitButtonProps {\n\texitRef?: RefObject;\n}\n\nenum TokenNames {\n\tcancel = \"Cancel\",\n\tcloseWindowAria = \"CloseWindowAria\",\n\tcloseWindowTooltip = \"CloseWindowTooltipNoHotkey\",\n\tdiscard = \"Discard\",\n\tdiscardConfirm = \"DiscardConfirm\",\n}\n\nexport enum ExitButtonTestIds {\n\tself = \"ExitButton\",\n}\n\n/**\n * The ExitButton component\n * @param props - the props\n */\nconst ExitButton: FC = (props) => {\n\tconst { exitRef } = props;\n\tconst dispatch = useDispatch();\n\tconst strings = useStrings(\"ExitButton\", Object.values(TokenNames));\n\n\tconst stringsRef = useRef(strings);\n\n\tuseEffect(() => {\n\t\tstringsRef.current = strings;\n\t}, [strings]);\n\n\tconst closeWindow = useCallback(() => {\n\t\tconst discardAlert: IChoiceAlert = {\n\t\t\tmessage: stringsRef.current[TokenNames.discardConfirm],\n\t\t\tconfirmText: stringsRef.current[TokenNames.discard],\n\t\t\tconfirmHotkey: \"D\",\n\t\t\tcancelText: stringsRef.current[TokenNames.cancel],\n\t\t\tcancelHotkey: \"C\",\n\t\t\ttype: AlertType.discardChoice,\n\t\t};\n\t\tdispatch(alertActions.postChoiceAlert(discardAlert));\n\t}, [dispatch]);\n\n\tconst closeHotkey = [\"alt\", \"x\"];\n\tconst tooltipFormatted = useGetFormattedHotkeyString(strings[TokenNames.closeWindowTooltip], closeHotkey);\n\tconst ariaFormatted = useGetFormattedHotkeyString(strings[TokenNames.closeWindowAria], closeHotkey);\n\n\treturn (\n\t\t\n\t);\n};\n\nExitButton.displayName = \"ExitButton\";\n\nexport default ExitButton;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file image Capture pane retake discard button group\n * @author Spencer Eanes\n * @module Epic.VideoApp.Components.ImageCapture.Controls.RetakeButton\n */\n\nimport { useDispatch } from \"@epic/react-redux-booster\";\nimport React, { FC, useCallback, useContext } from \"react\";\nimport ActionButton from \"~/components/Utilities/ActionButton\";\nimport { useStrings } from \"~/hooks\";\nimport { combinedActions, imageActions } from \"~/state\";\nimport { ParticipantDataContext } from \"~/web-core/components\";\n\nenum TokenNames {\n\tretakeButton = \"RetakeButton\",\n\tretakeButtonAria = \"RetakeButtonAria\",\n}\n\nexport enum RetakeButtonTestIds {\n\tself = \"RetakeButton\",\n}\n\n/**\n * The ExitButton component\n * @param props - the props\n */\nconst RetakeButton: FC = () => {\n\tconst dispatch = useDispatch();\n\tconst { participants } = useContext(ParticipantDataContext);\n\tconst canCapture = participants.length > 0;\n\n\tconst strings = useStrings(\"RetakeButton\", Object.values(TokenNames));\n\n\tconst retake = useCallback(() => {\n\t\tdispatch(imageActions.setImageData(null));\n\t\t// Resume image capture mode if possible, do not update pinning statue\n\t\tif (canCapture) {\n\t\t\tdispatch(\n\t\t\t\tcombinedActions.setImageCaptureActive({\n\t\t\t\t\tnewPin: null,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}, [canCapture, dispatch]);\n\n\treturn (\n\t\t\n\t);\n};\n\nRetakeButton.displayName = \"RetakeButton\";\n\nexport default RetakeButton;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file image capture pane save button and image storing web request\n * @author Spencer Eanes\n * @module Epic.VideoApp.Components.ImageCapture.Controls.SaveButton\n */\nimport React, { FC, RefObject, useCallback } from \"react\";\nimport ActionButton from \"~/components/Utilities/ActionButton\";\nimport { useStrings } from \"~/hooks\";\nimport { useImageState, useRoomState } from \"~/state\";\nimport { ITelemedicineDocType } from \"~/types\";\nimport { stringFormat } from \"~/utils/strings\";\nimport { IValidatedDescription } from \"../ImagePreviewPane\";\nimport { useSaveImageToChart } from \"../hooks/useSaveImageToChart\";\n\n/**\n * Props for SaveButton Component\n */\ninterface ISaveButtonProps {\n\timage: string;\n\tdocType: ITelemedicineDocType | null;\n\tvalidatedDescription: IValidatedDescription;\n\tsaveRef?: RefObject;\n}\n\nenum TokenNames {\n\tlabel = \"Label\",\n\tlabelNoPatient = \"LabelNoPatient\",\n\taccessibleLabel = \"AccessibleLabel\",\n\taccessibleLabelNoPatient = \"AccessibleLabelNoPatient\",\n}\n\nexport enum SaveButtonTestIds {\n\tself = \"SaveButton\",\n}\n\n/**\n * The SaveButton component\n * @param props - the props\n */\nconst SaveButton: FC = (props) => {\n\tconst { image, docType, validatedDescription, saveRef } = props;\n\tconst patientName = useRoomState((selectors) => selectors.getPatientName(), []);\n\n\tconst strings = useStrings(\"SaveButton\", Object.values(TokenNames));\n\tconst saveToChart = useSaveImageToChart();\n\tconst isSaving = useImageState((selectors) => selectors.getIsImageBeingSaved(), []);\n\n\tconst label = patientName\n\t\t? stringFormat(strings[TokenNames.label], patientName)\n\t\t: strings[TokenNames.labelNoPatient];\n\tconst ariaLabel = patientName\n\t\t? stringFormat(strings[TokenNames.accessibleLabel], patientName)\n\t\t: strings[TokenNames.accessibleLabelNoPatient];\n\n\tconst save = useCallback(() => {\n\t\t// Error handling is in shared hook\n\t\tvoid saveToChart(image, docType?.id || \"\", validatedDescription.text);\n\t}, [saveToChart, image, docType, validatedDescription.text]);\n\n\treturn (\n\t\t\n\t);\n};\n\nSaveButton.displayName = \"SaveButton\";\n\nexport default SaveButton;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file Image Capture Picture Preview\n * @author Spencer Eanes\n * @module Epic.VideoApp.Components.ImageCapture.ImageCapturePreview\n */\n\nimport React, { FC, RefObject } from \"react\";\nimport { useStrings } from \"~/hooks\";\nimport styles from \"./ImagePreviewPane.module.scss\";\n\nenum TokenNames {\n\tcapturePreview = \"CapturePreview\",\n}\n\n/**\n * Props for ImageCapturePreview Component\n */\ninterface IProps {\n\timage: string;\n\timageWrapperRef?: RefObject;\n}\n\n/**\n * The ImageCapturePreview component\n * @param props The props\n */\nconst ImageCapturePreview: FC = (props) => {\n\tconst { image, imageWrapperRef } = props;\n\tconst strings = useStrings(\"ImagePreviewPane\", Object.values(TokenNames));\n\n\treturn (\n\t\t
\n\t\t\t{strings[TokenNames.capturePreview]}\n\t\t
\n\t);\n};\n\nImageCapturePreview.displayName = \"ImageCapturePreview\";\n\nexport default ImageCapturePreview;\n","/**\n * @copyright Copyright 2021 Epic Systems Corporation\n * @file Preview Pane for Image Captures\n * @author Spencer Eanes\n * @module Epic.VideoApp.Components.ImageCapture.ImagePreviewPane\n */\n\nimport React, { FC, useRef, useState } from \"react\";\nimport { useStrings } from \"~/hooks\";\nimport { ITelemedicineDocType } from \"~/types\";\nimport { isMobile } from \"~/utils/os\";\nimport FocusTrap from \"../Alerts/FocusTrap\";\nimport DescriptionInput from \"./Controls/DescriptionInput\";\nimport DiscardButton from \"./Controls/DiscardButton\";\nimport DocumentTypeSelector from \"./Controls/DocumentTypeSelector\";\nimport ExitButton from \"./Controls/ExitButton\";\nimport RetakeButton from \"./Controls/RetakeButton\";\nimport SaveButton from \"./Controls/SaveButton\";\nimport ImageCapturePreview from \"./ImageCapturePreview\";\nimport styles from \"./ImagePreviewPane.module.scss\";\n\ninterface IImagePaneProps {\n\timage: string;\n}\n\nexport interface IValidatedDescription {\n\ttext: string;\n\tisValid?: boolean;\n}\n\nenum TokenNames {\n\ttitle = \"Title\",\n}\n\nexport enum ImagePreviewPaneTestIds {\n\tself = \"ImagePreviewPane\",\n}\n\n/**\n * The ImagePreviewPane component\n */\nconst ImagePreviewPane: FC = (props: IImagePaneProps) => {\n\tconst { image } = props;\n\tconst mobile = isMobile();\n\tconst strings = useStrings(\"ImagePreviewPane\", Object.values(TokenNames));\n\n\tconst [validatedDescription, setValidatedDescription] = useState({\n\t\ttext: \"\",\n\t\tisValid: true,\n\t});\n\n\tconst [selectedDocument, setDocType] = useState(null);\n\n\tconst exitRef = useRef(null);\n\tconst saveRef = useRef(null);\n\tconst imageWrapperRef = useRef(null);\n\n\tif (!image) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{strings[TokenNames.title]}\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{mobile && }\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t);\n};\n\nImagePreviewPane.displayName = \"ImagePreviewPane\";\n\nexport default ImagePreviewPane;\n","/**\n * @copyright Copyright 2024 Epic Systems Corporation\n * @file Audio Output for the Video Call\n * @author Will Cooper\n * @module Epic.VideoApp.WebCore.Components.AudioStream\n */\n\nimport React, { FC, useEffect, useRef } from \"react\";\nimport { useSpeakerState } from \"~/state\";\nimport { handlePause } from \"~/utils/audio\";\nimport { IStream } from \"../interfaces\";\n\ninterface IProps {\n\taudioStream: IStream;\n}\n\n/**\n * The AudioStream component\n */\nconst AudioStream: FC = (props: IProps) => {\n\tconst { audioStream } = props;\n\tconst audioRef = useRef(null);\n\tconst selectedSpeakerId = useSpeakerState((selectors) => selectors.getSelectedSpeakerId(), []);\n\n\tuseEffect(() => {\n\t\tconst audioElement = audioRef.current;\n\t\tif (!audioStream || !audioElement) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst renderAudio = (): void => {\n\t\t\taudioStream.attachAudio(audioElement)?.addEventListener(\"pause\", handlePause);\n\t\t};\n\n\t\taudioStream.on(\"audioReady\", renderAudio);\n\t\t// This is only necessary if this component rerenders or if a race condition causes the component to mount after the audio is ready\n\t\t// But if this component needs to rerender, then memoization logic should be fixed because it's wasteful\n\t\trenderAudio();\n\n\t\treturn () => {\n\t\t\taudioStream.off(\"audioReady\", renderAudio);\n\t\t\taudioStream.detachAudio(audioElement)?.removeEventListener(\"pause\", handlePause);\n\t\t};\n\t}, [audioStream]);\n\n\tuseEffect(() => {\n\t\tif (selectedSpeakerId) {\n\t\t\tvoid audioRef.current?.setSinkId?.(selectedSpeakerId);\n\t\t}\n\t}, [selectedSpeakerId]);\n\n\treturn