Ctrl K
ComunidadGuías…

src/lib/types.ts

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
// Зеркало доменных моделей из src-tauri/src/models.rs.
// Держать синхронно с Rust-стороной (camelCase, теговые union'ы).

export interface TlsOpts {
  enabled: boolean;
  sni?: string;
  insecure?: boolean;
  alpn?: string[];
  fingerprint?: string;
  realityPublicKey?: string;
  realityShortId?: string;
}

export type Transport =
  | { type: "ws"; path?: string; host?: string }
  | { type: "grpc"; serviceName?: string };

export type Outbound =
  | {
      type: "socks";
      server: string;
      port: number;
      username?: string;
      password?: string;
    }
  | {
      type: "http";
      server: string;
      port: number;
      username?: string;
      password?: string;
      tls?: boolean;
    }
  | {
      type: "hysteria2";
      server: string;
      port: number;
      password: string;
      sni?: string;
      insecure?: boolean;
      obfsPassword?: string;
      upMbps?: number;
      downMbps?: number;
    }
  | {
      type: "shadowsocks";
      server: string;
      port: number;
      method: string;
      password: string;
    }
  | {
      type: "trojan";
      server: string;
      port: number;
      password: string;
      tls: TlsOpts;
      transport?: Transport;
    }
  | {
      type: "vless";
      server: string;
      port: number;
      uuid: string;
      flow?: string;
      tls: TlsOpts;
      transport?: Transport;
    }
  | {
      type: "vmess";
      server: string;
      port: number;
      uuid: string;
      alterId: number;
      security?: string;
      tls: TlsOpts;
      transport?: Transport;
    }
  | {
      type: "tuic";
      server: string;
      port: number;
      uuid: string;
      password: string;
      congestionControl?: string;
      tls: TlsOpts;
    }
  | {
      // AmneziaWG — отдельный движок; config = готовый .conf
      type: "amnezia_wg";
      config: string;
      server: string;
      port: number;
    };

export interface Profile {
  id: string;
  name: string;
  outbound: Outbound;
  /** Id подписки, если профиль из неё. */
  subscriptionId?: string;
}

export interface Subscription {
  id: string;
  name: string;
  url: string;
  /** Число профилей из подписки. */
  count: number;
  /** UNIX-время последнего обновления (сек). */
  updatedAt?: number;
}

export type ConnectionState =
  | { state: "disconnected" }
  | { state: "connecting" }
  | { state: "connected" }
  | { state: "disconnecting" }
  | { state: "error"; message: string };

export interface Traffic {
  /** Скорость отдачи, байт/с. */
  up: number;
  /** Скорость загрузки, байт/с. */
  down: number;
  /** Суммарно отдано за сессию, байт. */
  upTotal: number;
  /** Суммарно загружено за сессию, байт. */
  downTotal: number;
}

export type Theme = "system" | "light" | "dark";

export type Mode = "proxy" | "tun";

export type TunStack = "gvisor" | "system" | "mixed";

export type AppMode = "off" | "only" | "except";

export interface Routing {
  /** LAN (приватные IP) — напрямую. */
  bypassLan: boolean;
  /** Windows: сохранить конкретные маршруты и DNS одновременно активного OpenVPN/другого VPN. */
  vpnCompatibility: boolean;
  /** RU-трафик (geoip-ru + .ru/.рф/.su) — напрямую. */
  bypassRu: boolean;
  /** Режим split по приложениям. */
  appMode: AppMode;
  /** Приложения через VPN (режим Only). */
  onlyApps: string[];
  /** Приложения напрямую (режим Except). */
  exceptApps: string[];
}

export interface Settings {
  theme: Theme;
  language: string;
  autoConnect: boolean;
  activeProfileId: string | null;
  mode: Mode;
  /** Сетевой стек TUN (gvisor по умолчанию). */
  tunStack: TunStack;
  routing: Routing;
  /** Закрытие окна сворачивает в трей. */
  minimizeToTray: boolean;
  /** Windows: запуск с правами администратора без UAC (задача Планировщика). */
  adminLaunch: boolean;
}

export interface AndroidInstalledApp {
  packageName: string;
  name: string;
  icon: string;
}