import { type Component, createResource, Show } from "solid-js" import { Icon } from "@opencode-ai/ui/icon" import { useLanguage } from "@/context/language" import { useGlobalSDK } from "@/context/global-sdk" import { useServer } from "@/context/server" import { usePlatform } from "@/context/platform" import { SettingsList } from "./settings-list" type PairResult = | { enabled: false } | { enabled: true hosts: string[] relayURL?: string serverID?: string relaySecretHash?: string link: string qr: string } export const SettingsPair: Component = () => { const language = useLanguage() const globalSDK = useGlobalSDK() const server = useServer() const platform = usePlatform() const [data] = createResource(async () => { const url = `${globalSDK.url}/experimental/push/pair` console.debug("[settings-pair] fetching pair data", { serverUrl: globalSDK.url, serverName: server.name, serverKey: server.key, }) const f = platform.fetch ?? fetch const res = await f(url) if (!res.ok) { console.debug("[settings-pair] pair endpoint returned non-ok", { status: res.status, serverUrl: globalSDK.url, }) return { enabled: false as const } } const result = (await res.json()) as PairResult console.debug("[settings-pair] pair data received", { enabled: result.enabled, serverUrl: globalSDK.url, serverName: server.name, ...(result.enabled ? { relayURL: result.relayURL, serverID: result.serverID, relaySecretHash: result.relaySecretHash, hostCount: result.hosts.length, hosts: result.hosts, } : {}), }) return result }) return (

{language.t("settings.pair.title")}

{language.t("settings.pair.description")}

{language.t("settings.pair.loading")}
{language.t("settings.pair.error.title")} {language.t("settings.pair.error.description")}
{(result) => (
{language.t("settings.pair.disabled.title")} {language.t("settings.pair.disabled.description")}
opencode serve --relay-url <url> --relay-secret <secret>
} > {(pair) => { const p = pair() as PairResult & { enabled: true } return (
1 || p.relayURL}>
{language.t("settings.pair.server.label")} {server.name}
{language.t("settings.pair.relay.label")} {p.relayURL}
{language.t("settings.pair.secret.label")} {p.relaySecretHash}
Pairing QR code
{language.t("settings.pair.instructions.title")} {language.t("settings.pair.instructions.description")}
) }}
)}
) }