relay-settings.ts

1.2 KB · raw

1import { DEFAULT_RELAY_URL, normalizeRelayUrl } from "../shared/rendezvous";23const RELAY_URL_KEY = "peach_relay_url_v1";4const LAN_ONLY_KEY = "peach_sync_lan_only_v1";56export interface RelaySettings {7  relayUrl: string;8  lanOnly: boolean;9}1011export async function getRelaySettings(): Promise<RelaySettings> {12  try {13    const raw = await chrome.storage.local.get([RELAY_URL_KEY, LAN_ONLY_KEY]);14    const values = raw as Record<string, unknown>;15    const relayUrl =16      typeof values[RELAY_URL_KEY] === "string"17        ? safeNormalize(values[RELAY_URL_KEY] as string)18        : DEFAULT_RELAY_URL;19    return {20      relayUrl,21      lanOnly: values[LAN_ONLY_KEY] === true,22    };23  } catch {24    return { relayUrl: DEFAULT_RELAY_URL, lanOnly: false };25  }26}2728export async function setRelayUrl(input: string): Promise<string> {29  const relayUrl = normalizeRelayUrl(input);30  await chrome.storage.local.set({ [RELAY_URL_KEY]: relayUrl });31  return relayUrl;32}3334export async function setLanOnly(lanOnly: boolean): Promise<void> {35  await chrome.storage.local.set({ [LAN_ONLY_KEY]: lanOnly });36}3738function safeNormalize(input: string): string {39  try {40    return normalizeRelayUrl(input);41  } catch {42    return DEFAULT_RELAY_URL;43  }44}