1import { DEFAULT_RELAY_URL, normalizeRelayUrl } from "../shared/rendezvous";2import { setRelayUrlForAllPairedDevices } from "./paired-devices";34const RELAY_URL_KEY = "peach_relay_url_v1";5const LAN_ONLY_KEY = "peach_sync_lan_only_v1";67export interface RelaySettings {8 relayUrl: string;9 lanOnly: boolean;10}1112export async function getRelaySettings(): Promise<RelaySettings> {13 try {14 const raw = await chrome.storage.local.get([RELAY_URL_KEY, LAN_ONLY_KEY]);15 const values = raw as Record<string, unknown>;16 const relayUrl =17 typeof values[RELAY_URL_KEY] === "string"18 ? safeNormalize(values[RELAY_URL_KEY] as string)19 : DEFAULT_RELAY_URL;20 return {21 relayUrl,22 lanOnly: values[LAN_ONLY_KEY] === true,23 };24 } catch {25 return { relayUrl: DEFAULT_RELAY_URL, lanOnly: false };26 }27}2829export async function setRelayUrl(input: string): Promise<string> {30 const relayUrl = normalizeRelayUrl(input);31 await setRelayUrlForAllPairedDevices(relayUrl);32 await chrome.storage.local.set({ [RELAY_URL_KEY]: relayUrl });33 return relayUrl;34}3536export async function setLanOnly(lanOnly: boolean): Promise<void> {37 await chrome.storage.local.set({ [LAN_ONLY_KEY]: lanOnly });38}3940function safeNormalize(input: string): string {41 try {42 return normalizeRelayUrl(input);43 } catch {44 return DEFAULT_RELAY_URL;45 }46}