import { createGlobalState, useDevicesList, useLocalStorage } from '@vueuse/core' export const usePreferences = createGlobalState(() => { const inputDeviceId = useLocalStorage('INPUT_DEVICE_ID', 'default') const outputDeviceId = useLocalStorage('OUTPUT_DEVICE_ID', 'default') const autoGainControl = useLocalStorage('AUTO_GAIN_CONTROL', false) const noiseSuppression = useLocalStorage('NOISE_SUPPRESSION', true) const echoCancellation = useLocalStorage('ECHO_CANCELLATION', true) const { ensurePermissions, permissionGranted, videoInputs, audioInputs, audioOutputs, } = useDevicesList() const inputDeviceExist = computed(() => { return audioInputs.value.some(device => device.deviceId === inputDeviceId.value) }) const outputDeviceExist = computed(() => { return audioOutputs.value.some(device => device.deviceId === outputDeviceId.value) }) return { inputDeviceId, outputDeviceId, autoGainControl, noiseSuppression, echoCancellation, inputDeviceExist, outputDeviceExist, videoInputs: computed(() => JSON.parse(JSON.stringify(videoInputs.value))), audioInputs: computed(() => JSON.parse(JSON.stringify(audioInputs.value))), audioOutputs: computed(() => JSON.parse(JSON.stringify(audioOutputs.value))), } })