import { createScreenWakeLock, type WakeStatus } from "../utils/screenWakeLock"; import type { Ref } from "vue"; export function useKeepHostAwakePreference() { return useCookie("webka_keep_host_awake", { default: () => false, maxAge: 60 * 60 * 24 * 365, sameSite: "lax", path: "/", }); } export function useHostWakeLock(hosting: Ref) { const enabled = useKeepHostAwakePreference(); const status = ref("off"); let controller: ReturnType | undefined; let unwatch: (() => void) | undefined; const refresh = () => controller?.refresh(); onMounted(() => { controller = createScreenWakeLock({ request: window.isSecureContext && navigator.wakeLock?.request ? () => navigator.wakeLock.request("screen") : undefined, visible: () => document.visibilityState === "visible", status: (value) => { status.value = value; }, }); unwatch = watch([enabled, hosting], () => { controller?.update(enabled.value === true && hosting.value); }, { immediate: true, flush: "sync" }); document.addEventListener("visibilitychange", refresh); }); onBeforeUnmount(() => { unwatch?.(); document.removeEventListener("visibilitychange", refresh); controller?.dispose(); }); return { status, retry: refresh }; }