relay-settings.ts

1.3 KB · raw

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}