import Foundation public enum SharedPreferences { public static let selectedProfileID = Preference("selected_profile_id", defaultValue: -1) #if os(macOS) private static let ignoreMemoryLimitByDefault = true #else private static let ignoreMemoryLimitByDefault = false #endif public static let ignoreMemoryLimit = Preference("ignore_memory_limit", defaultValue: ignoreMemoryLimitByDefault) #if os(iOS) private static let excludeLocalNetworksByDefault = true #elseif os(macOS) private static let excludeLocalNetworksByDefault = false #endif #if !os(tvOS) public static let includeAllNetworks = Preference("include_all_networks", defaultValue: false) public static let excludeAPNs = Preference("exclude_apns", defaultValue: true) public static let excludeLocalNetworks = Preference("exclude_local_networks", defaultValue: excludeLocalNetworksByDefault) public static let excludeCellularServices = Preference("exclude_cellular_services", defaultValue: true) public static let enforceRoutes = Preference("enforce_routes", defaultValue: false) #endif public static func resetPacketTunnel() async { #if !os(tvOS) let names = [ ignoreMemoryLimit.name, includeAllNetworks.name, excludeAPNs.name, excludeLocalNetworks.name, excludeCellularServices.name, enforceRoutes.name, ] #else let names = [ignoreMemoryLimit.name] #endif try? await batchDelete(names) } public static let maxLogLines = Preference("max_log_lines", defaultValue: 300) #if os(macOS) public static let showMenuBarExtra = Preference("show_menu_bar_extra", defaultValue: true) public static let menuBarExtraInBackground = Preference("menu_bar_extra_in_background", defaultValue: false) public static let startedByUser = Preference("started_by_user", defaultValue: false) public static func resetMacOS() async { try? await batchDelete([showMenuBarExtra.name, menuBarExtraInBackground.name]) } #endif #if os(iOS) public static let networkPermissionRequested = Preference("network_permission_requested", defaultValue: false) #endif public static let systemProxyEnabled = Preference("system_proxy_enabled", defaultValue: true) #if os(tvOS) public static let commandServerPort = Preference("command_server_port", defaultValue: 0) public static let commandServerSecret = Preference("command_server_secret", defaultValue: "") #endif // Profile Override public static let excludeDefaultRoute = Preference("exclude_default_route", defaultValue: false) public static let autoRouteUseSubRangesByDefault = Preference("auto_route_use_sub_ranges_by_default", defaultValue: false) public static let excludeAPNsRoute = Preference("exclude_apple_push_notification_services", defaultValue: false) public static func resetProfileOverride() async { try? await batchDelete([excludeDefaultRoute.name, autoRouteUseSubRangesByDefault.name, excludeAPNsRoute.name]) } // Connections Filter public static let connectionStateFilter = Preference("connection_state_filter", defaultValue: 0) public static let connectionSort = Preference("connection_sort", defaultValue: 0) // On Demand Rules public static let alwaysOn = Preference("always_on", defaultValue: false) public static let onDemandEnabled = Preference("on_demand_enabled", defaultValue: false) public static let onDemandRules = Preference<[OnDemandRule]>("on_demand_rules", defaultValue: []) public static func resetOnDemandRules() async throws { try await batchDelete([alwaysOn.name, onDemandEnabled.name, onDemandRules.name]) } // Core public static let disableDeprecatedWarnings = Preference("disable_deprecated_warnings", defaultValue: false) // Dashboard public static let enabledDashboardCards = Preference<[String]>("enabled_dashboard_cards", defaultValue: []) public static let dashboardCardOrder = Preference<[String]>("dashboard_card_order", defaultValue: []) #if DEBUG public static let inDebug = true #else public static let inDebug = false #endif }