import { useQueries, useQuery } from "@tanstack/react-query"; import axios from "axios"; import React from "react"; import OpenHands from "#/api/open-hands"; import { useConversationId } from "#/hooks/use-conversation-id"; import { useRuntimeIsReady } from "#/hooks/use-runtime-is-ready"; export const useActiveHost = () => { const [activeHost, setActiveHost] = React.useState(null); const { conversationId } = useConversationId(); const runtimeIsReady = useRuntimeIsReady(); const { data } = useQuery({ queryKey: [conversationId, "hosts"], queryFn: async () => { const hosts = await OpenHands.getWebHosts(conversationId); return { hosts }; }, enabled: runtimeIsReady && !!conversationId, initialData: { hosts: [] }, meta: { disableToast: true, }, }); const apps = useQueries({ queries: data.hosts.map((host) => ({ queryKey: [conversationId, "hosts", host], queryFn: async () => { try { await axios.get(host); return host; } catch (e) { return ""; } }, // refetchInterval: 3000, meta: { disableToast: true, }, })), }); const appsData = apps.map((app) => app.data); React.useEffect(() => { const successfulApp = appsData.find((app) => app); setActiveHost(successfulApp || ""); }, [appsData]); return { activeHost }; };