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.description")}
opencode serve --relay-url <url> --relay-secret <secret>
{server.name}
{p.relayURL}
{p.relaySecretHash}